◎ REST(Representational State Transfer)
▷ URI는 하나의 고유한 리소스(Resource)를 대표하도록 설계된다는 개념에 전송방식을 결합해 원하는 작업 지정
▶ '/boards/123'은 게시물 중 123번이라는 고유한 의미를 가지도록 설계
▶ GET, POST 방식과 같이 추가적인 정보를 통해 결정
▷ 스프링의 REST 방식의 데이터 처리를 위한 여러 종류의 어노테이션과기능이 있음
NO | 어노테이션 | 기능 |
1 | @RestController | Controller가 REST 방식을 처리하기 위한 것임을 명시합니다. |
2 | @ResponseBody | 일반적인 JSP와 같은 뷰로 전달되는 게 아니라 데이터 자체를 전달하기 위한 용도 |
3 | @PathVariable | URL 경로에 있는 값을 파라미터로 추출하려고 사용 |
4 | @CrossOrigin | Ajax의 크로스 도메인 문제를 해결해주는 어노테이션 |
5 | @RequestBoby | JSON 데이터를 원하는 타입으로 바인딩 처리 |
1. @RestController
▷ 서버에서 전송하는 것이 순수한 데이터라는 것이 중요
▷ 기존의 Controller에서 Model에 데이터를 담고 JSP 등과 같은 뷰(View)로 전달하는 방식이 아니므로
기존 Controller와 다르게 동작
▷ @RestContoller라는 어노테이션을 추가
▶ @Controller와 메소드 선언부에 @ResponseBody를 이용해 동일한 결과를 만들 수 있음
▶ @RestContoller는 메소드 리턴 타입으로 사용자가 정의한 클래스 타입 사용하며 JSON, XML로 자동 처리
(1) ex03 프로젝트 생성
▷ 프로젝트 생성 및 기본 설정 변경
◎ pom.xml 수정...(생략)... <properties> <java-version>11</java-version> <org.springframework-version>5.0.7.RELEASE</org.springframework-version> <org.aspectj-version>1.6.10</org.aspectj-version> <org.slf4j-version>1.6.6</org.slf4j-version> </properties> ...(생략)... <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.5.1</version> <configuration> <source>11</source> <target>11</target> <compilerArgument>-Xlint:all</compilerArgument> <showWarnings>true</showWarnings> <showDeprecation>true</showDeprecation> </configuration> </plugin> ...(생략)...
▷ java-version(11)과, org.springframework-version(5.0.7.RELEASE) 수정
▷ plugin의 source, target 11로 수정
◎ jackson-databind 라이브러리를 pom.xml에 추가
▷ 나중에 브라우저에 객체를 JSON이라는 포맷의 문자열로 변환시켜 전송할 때 필요
◎ pom.xml에 객체를 JSON/XML로 변환<!-- json/xml 변환 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.6</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>2.9.6</version> </dependency>
◎ gson 라이브러리 추가
▷ 테스트할 때 Java 인스턴스르 JSON 타입의 문자열로 변환<!-- gson 라이브러리 추가 --> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.2</version> </dependency>
◎ 작성된 프로젝트의 서블릿 버전 수정하고, Lombok 관련 설정 추가<!-- Servlet --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> ...(생략)... <!-- Lombok 추가 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.0</version> <scope>provided</scope> </dependency>
◎ JUnit 버전 변경 및 spring-test 관련 모듈 추가
▷ 테스트 하기 위함<!-- Test --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${org.springframework-version}</version> </dependency>
◎ pom.xml의 Logging부분 수정<!-- Logging --> ...(생략)... <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> ...(생략)... <!-- <scope>runtime</scope> --> </dependency>
2. @RestController의 반환 타입
◎ src/main/java/org.codehows.controller → SampleController 클래스 생성
package org.codehows.controller; 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 { }
(1) 단순 문자열 반환
▷ @RestController는 JSP와 달리 순수한 데이터를 반환하는 형태이므로 다양한 포맷의 데이터 전송 가능
▷ 주로 많이 사용하는 형태는 일반 문자열, JSON, XML 등
◎ src/main/java/org.codehows.controller → SampleController 클래스 수정
package org.codehows.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 = "/getText", produces = "text/plain; charset=UTF-8") public String getText() { log.info("MIME TYPE : " + MediaType.TEXT_PLAIN_VALUE); return "안녕하세요"; } }
▷ @Controller는 문자열 반환하면 JSP 파일의 이름으로 처리, @RestController의 경우 순수한 데이터가 됨
▷ @GetMapping에 사용된 produces 속성은 해당 메소드가 생성하는 MIME 타입을 의미
▷ 문자열로 직접 지정할 수 있고, 메소드 내의 MediaType 클래스를 이용할 수 있음
◎ Tomcat 서버 변경
1. add and remove → ex03을 add
2. Modules → edit → Path → '/' → 'OK'
◎ 프로젝트 경로는 '/' 경로로 실행
▷ http://localhost:8080/sample/getText
REST를 이용해 여러 종류의 어노테이션을 사용할 수 있습니다.
이 기능을 이용해보기 위해 새로운 프로젝트를 만들고 기본 설정을 변경해 보았습니다!
일단 화면에서 구현되는지 확인할 수 있었습니다.
다음은 REST를 이용해서 테스트 하는 방법에 대해서 배워볼게요~!!
많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~
'BackEnd > Spring' 카테고리의 다른 글
[코드로 배우는 스프링 웹 프로젝트] ch16 REST 방식으로 전환 3(@RestController, 테스트 방법) (0) | 2023.03.31 |
---|---|
[코드로 배우는 스프링 웹 프로젝트] ch16 REST 방식으로 전환 2(JSON, XML, 객체 반환, ResponseEntity) (0) | 2023.03.31 |
[코드로 배우는 스프링 웹 프로젝트] ch15 검색 처리 3(목록, 검색 버튼 이벤트, 수정, 삭제) (0) | 2023.03.31 |
[코드로 배우는 스프링 웹 프로젝트] ch15 검색 처리 1(sql, MyBatis 동적 태그) (0) | 2023.03.31 |
[코드로 배우는 스프링 웹 프로젝트] ch14 페이징 화면 처리 2(script, get, modify) (0) | 2023.03.31 |