본문 바로가기

BackEnd/Spring

[코드로 배우는 스프링 웹 프로젝트] ch16 REST 방식으로 전환 1(@RestController)

728x90
반응형

◎ 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를 이용해서 테스트 하는 방법에 대해서 배워볼게요~!!

 

많은 분들의 피드백은 언제나 환영합니다!  많은 댓글 부탁드려요~~

 

728x90
반응형