Spring을 자주 사용하다보면 @Controller 라는 어노테이션을 아주 많이 보게 된다. 사실 Spring3 부터 @ResponseBody라는 어노테이션이 지원이 되기에, Rest 방식의 처리를 지원하고 있었는데 Spring4로 넘어오면서 @RestController라는 개념이 본격적으로 소개가 되었다.
RestController
자 우선 REST라는 것에 대해 알아보도록 하자.
- REST는 Representational State Transfer의 약어로 하나의 URI는 하나의 고유한 리소스를 대표하도록 설계된다는 개념이다.
- REST 방식은 특정한 URI는 반드시 그에 상응하는 데이터 자체라는 것을 의미하는 방식이다.
예) /sample/TestPage는 어떠한 페이지가 아니라 TestPage라는 변수가 담고있는 Data라고 이해를 하면 될 것 같다.
즉,
TestPage != TestPage.jsp
TestPage == "이 페이지는 테스트 페이지입니다."
라는 뜻이 된다.
- REST API는 외부에서 위와 같은 방식으로 특정 URI를 통해서 사용자가 원하는 정보를 제공하는 방식이다.
1. RestController 소개
앞서 말했지만 Spring4부터 @RestController라는 어노테이션이 지원이 되면서 이 어노테이션들은 JSP나 velocity같은 VIEW가 아니라 REST방식의 DATA 자체를 넘겨주는 것을 말한다.
- 스프링 3에는 해당 메소드의 리턴 타입에 @ResponseBody 애노테이션을 추가하는 형태로 작성되었다.
- 기능은 달라진것이 없지만, 컨트롤러 자체의 용도를 지정한다는 점에서 변화가 있다고 할 수 있다.
- URI가 원하는 리소스를 의미한다.(복수형으로 작성)
- URI에는 식별할 수 있는 데이터를 같이 전달하는 것이 일반적이다.
2. 예제
RestController를 사용하면 어떠한 결과물이 나오는지 보도록 하자. 아주 간단하다.
1 2 3 4 5 6 7 8 | @RestController public class DemoApplication { @GetMapping("/testpage") public String root() { return "HELLO_WORLD"; } } | cs |
자, 기본적으로 스프링에서 @Controller 어노테이션을 사용해 return을 HELLO_WORLD라고 했다면 기본적으로는 HELLO_WORLD.jsp(기본확장자 jsp라고가정)가 출력이 된다.
그렇다면 결과는?
이렇게 된다. testpage를 호출하였지만 VIEW가 호출이 되는 것이 아니라 return Data인 HELLO_WORLD가 그대로 화면에 출력이 된다.
※ 여기서 잠깐!
- return 형식은 어떤 방식이던 상관이 없다 int, String, double, json, list<> 등등 다 넘겨줄 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | @RestController public class DemoApplication { @GetMapping("/testpage") public List<Integer> root() { List<Integer> mlist = new ArrayList<Integer>(); mlist.add(1); mlist.add(2); mlist.add(3); mlist.add(4); return mlist; } } | cs |
위와 같은 방식으로 말이다.
3. REST & Ajax
그렇기 때문에 이 REST방식은 Ajax와 가장 많이 결합되어 사용된다. RestController용 JAVA를 따로 만들고 여기서는 데이터를 주고받는 기능만 하도록 하는 경우가 많다는 뜻이 된다.
※ @RestController가 어노테이션 되어있다면 백날천날 return에 JSP명을 써놔도 VIEW의 콜은 일어나지 않는다. 명심하자.
최근댓글