일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 이클립스 svn 설치
- 저장소 개별
- json 에러
- 특정 포트 해제
- xml 406
- 특정 포트 보기
- vmware 로컬 웹서버 접근
- 도메인 서버
- 도메인 웹호스팅 다를 때
- 도메인 웹호스팅 다름
- 특정 포트 연결 해제
- VMware 네트워크 이상
- local 저장소 개별 관리
- 406호출
- 도메인 웹호스팅
- 공공api xml
- 이클립스 중단
- 도메인 웹호스팅 다를 경우
- 저장소 개별 관리
- 저장소 관리
- json xml 에러
- svn e175002
- 면접
- github
- 페이징 처리
- e175002
- 이클립스 로딩
- 특정 포트 확인
- centos jeus 웹서버 접근
- xml 에러
- Today
- Total
LIFE & IT
REST 방식 1 본문
1. REST(Representational State Transfer)란?
- HTTP URI + HTTP Method이다.
- HTTP URI를 통해 제어할 자원(Resource)을 명시하고 HTTP Method(GET, POST, PUT, DELETE)를 통해
해당 자원(Resource)를 제어하는 명령을 내리는 방식의 아키텍쳐이다.
2. RESTful API란?
RESTful API는 HTTP와 URI기반으로 자원에 접근할 수 있도록
제공하는 애플리케이션 개발 인터페이스(REST의 원리를 따르는 시스템은 RESTful이라고 지칭된다.)
3. 기존의 웹 접근방식과 RESTful API 방식과의 차이점
종류 |
방식 |
기존게시판 |
방식 |
Restful API 지원하는 게시판 |
긁읽기 |
GET |
/list.do?no=100&name=java |
GET |
/bbs/java/100 |
글등록 |
POST |
/insert.do |
POST |
/bbs/java/100 |
글삭제 |
GET |
/delete.do?no=100&name=java |
DELETE |
/bbs/java/100 |
글수정 |
POST |
/update.do |
PUT |
/bbs/java/100 |
- 기존의 게시판은 GET, POST만 자원에 대한 CRUD처리하며 URI는 액션을 나타낸다.
- RESTful 게시판은 GET, POST, PUT, DELETE를 모두 사용하여 CRUD를 처리하며 URI는 제어하려는 자원을 나타낸다.
◎ 기존 방식과 REST 방식의 차이
기존 방식은 Controller 에서 Model 에 데이터를 담아서 JSP 등과 같은 뷰(VIEW)로 전달하는 방식.
REST 방식은 메서드 리턴 타입을 사용자가 정의한 클래스 타입을 사용할 수 있고, 이를 JSON 이나 XML로 자동처리가 가능하다.
※ 기존 Contoller 에서는 @ResponseBody를 이용해 @RestController 와 동일한 결과를 만들 수 있었음
▷ 기존 Controller 방식
return 값으로 JSP 주소 값을 반환한다.
@PostMapping("/register")
public String register(BoardVO board, RedirectAttributes rttr) {
log.info("++++++++++++register : " + board);
service.register(board);
rttr.addFlashAttribute("result", board.getBno());
return "redirect:/board/list";
}
▷ REST Controller 방식
return 값으로 데이터 값을 반환한다.
package org.zerock.controller;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import lombok.extern.log4j.Log4j;
@RestController
@RequestMapping("/sample")
@Log4j
public class SampleController {
@GetMapping(value = "/getTest", produces = "text/plain; charset=UTF-8")
public String getText() {
log.info("MIME TYPE : " + MediaType.TEXT_PLAIN_VALUE);
return "안녕하세여";
// 기존 Controller 는 return 값을 "redirect:/board/list" 와 같은 문자열로 반환했다.
// REST 방식은 "안녕하세여" 같은 순수한 데이터가 반환
}
}
JSON 처리를 위해서 jackson-databind 라이브러리를 pom.xml 에 추가해야한다.
Maven repository 홈페이지에서 jackson-databind 를 검색하면 관련 저장소 정보와 pom.xml 정보도 찾을 수 있다.
*jackson-databind : 브라우저 객체를 JSON 포멧의 문자로 변환 시켜 전송할 때 필요
- JSON은 따로 정리할 예정 2020.10.12
테스트 진행시 Java 인스턴스를 JSON 타입의 문자열로 변환해야 하는 경우도 있으므로 gson 라이브러리 추가
pom.xml 수정사항
<properties>
<java-version>1.8</java-version>
<org.springframework-version>5.0.7.RELEASE</org.springframework-version>
...
<!-- Servlet 버전 변경 및 수정 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
...
<!-- Lombok
https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.0</version>
<scope>provided</scope>
</dependency>
<!-- JUNIT
https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- JSON
https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.6</version>
</dependency>
<!-- gson
https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.2</version>
</dependency>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
▷ Rest 방식 결과 화면
☞ @GetMapping 에 사용된 produces 속성은 메소드가 생산하는 MIME 타입이다.
return 타입이 text 값이기 때문에 produces 는 text 속성의 MIME 타입을 가져야한다.
'웹 프로그래밍 > Spring Framework' 카테고리의 다른 글
[REST 방식 오류] JSON, XML 호출 시 406 오류 (0) | 2020.10.22 |
---|---|
STS 에서 동작하는 Spring 구조 테스트(1) (0) | 2020.04.15 |
[ 페이징처리 3 ] Mybatis 와 스프링에서 페이징 처리 (0) | 2020.02.26 |
[ 페이징 처리 1 ] 오라클 데이터베이스 페이징 처리(1) - 실행 계획 (0) | 2020.02.21 |
웹프로젝트 구조와 Spring MVC 구조 그리 모델2 패턴이해 (0) | 2019.09.14 |