[꼼꼼한 개발자] 꼼코더

23. 코드로 배우는 스프링 웹 프로젝트 - [스프링 MVC의 Controller] - Controller의 리턴 타입(void 타입, String 타입, 객체 타입) 본문

Spring/코드로 배우는 스프링 웹 프로젝트

23. 코드로 배우는 스프링 웹 프로젝트 - [스프링 MVC의 Controller] - Controller의 리턴 타입(void 타입, String 타입, 객체 타입)

꼼코더 2023. 1. 5. 01:34
반응형

👨🏻‍✈️ Controller의 리턴 타입

스프링 MVC 구조가 (기존) 상속, 인터페이스 → (변경) 어노테이션을 사용하는 방식으로 변경된 이후

가장 큰 변화중 하나는 리턴타입이 자유로워졌다는 점이다.

 

Controller의 메서드가 사용할 수 있는 리턴 타입은 아래와 같다.

  • String : jsp를 이용하는 경우 jsp 파일의 경로와 파일이름을 나타내기 위해서 사용.
  • void : 호출하는 URL과 동일한 이름의 jsp를 의미.
  • VO, DTO 타입 : 주로 JSON 타입의 데이터를 만들어서 반환하는 용도로 사용.
  • ResponseEntity 타입 : response 할 때 Http 헤더 정보와 내용을 가공하는 용도로 사용.
  • Model, ModelAndView : Model로 데이터를 반환하거나 화면까지 같이 지정하는 경우에 사용.
  • HttpHeaders : 응답에 내용이 없이 Http 헤더 메세지만 전달하는 용도로 사용.

📭 void 타입

메서드의 리턴 타입을 void로 지정하면 일반적으로 해당 URL의 경로를 그대로 jsp 파일의 이름으로 사용한다.

 

 

💁🏻‍♂️ 결과

SampleController의 경로에 ex05()의 경로를 합쳐 호출 시 결과를 확인한다.

호출 : http://localhost:8080/sample/ex05

 

‘파일 [/WEB-INF/views/sample/ex05.jsp]을(를) 찾을 수 없습니다.’라는 에러는

servlet-context.xml의 아래 설정과 같이 맞물려 URL 경로를 View로 처리하기 때문에 생기는 결과이다.


💬 String 타입

String 타입은 상황에 따라 다른 화면을 보여줄 때 유용하게 사용한다.(if~else와 같은 처리가 필요한 상황)

String 타입은 현재 프로젝트의 경우 JSP 파일의 이름을 의미한다.

프로젝트 생성 시 기본으로 만들어진 HomeController의 코드를 보면 String을 반환 타입으로 사용하고 있다.

 

home() 메서드는 ‘home’이라는 문자열을 리턴했기 때문에 경로는 ‘/WEB-INF/views/home.jsp’가 된다.

String 타입에는 다음과 같은 특별한 키워드를 붙여서 사용할 수 있다.

  • redirect : 리다이렉트 방식으로 처리하는 경우
  • forward : 포워드 방식으로 처리하는 경우

🧱 객체 타입

Controller의 메서드 리턴 타입을 VO(Value Object)나 DTO(Data Transfer Object) 타입 등

복합적인 데이터가 들어간 객체 타입을 지정할 수 있다.

주로 JSON 데이터를 만들어 내는 용도로 사용한다.

 

👨🏻‍💻 pom.xml, Controller.java에 코드 추가

실습을 위해 jackson-databind 라이브러리를 pom.xml에 추가한다.

 

💁🏻‍♂️ 결과

호출 : http://localhost:8080/sample/ex06

스프링 MVC는 자동으로 프라우저에 JSON 타입으로 객체를 변환해서 전달하게 된다.

개발자 도구를 통해 살펴보면 서버에서 전송하는 MIME타입이 ‘application/json’으로 확인된다.

 


💬 ResponseEntity 타입

Web을 다루다보면 HTTP 헤더를 다루는 경우가 있다.

스프링 MVC는 ResponseEntity를 통해 원하는 헤더 정보나 데이터를 전달할 수 있다.

 

👨🏻‍💻 Controller.java에 코드 추가

 

ResponseEntity는 HttpHeaders 객체를 같이 전달할 수 있고

이를 통해서 원하는 HTTP 헤더 메시지를 가공하는 것이 가능하다.

ex07()의 경우 브라우저에는 JSON타입이라는 헤더 메시지와 200 OK라는 상태 코드를 전송한다.

 

💁🏻‍♂️ 결과

호출 : http://localhost:8080/sample/ex07

 


 

🧹 최종 정리

  • Controller의 메서드가 사용할 수 있는 리턴 타입은 아래와 같다.
  • String : jsp를 이용하는 경우 jsp 파일의 경로와 파일이름을 나타내기 위해서 사용.
  • void : 호출하는 URL과 동일한 이름의 jsp를 의미.
  • VO, DTO 타입 : 주로 JSON 타입의 데이터를 만들어서 반환하는 용도로 사용.
  • ResponseEntity 타입 : response 할 때 Http 헤더 정보와 내용을 가공하는 용도로 사용.
  • Model, ModelAndView : Model로 데이터를 반환하거나 화면까지 같이 지정하는 경우에 사용.
  • HttpHeaders : 응답에 내용이 없이 Http 헤더 메세지만 전달하는 용도로 사용.

 

 

위 내용은 코드로 배우는 스프링 웹 프로젝트 교재를 참고하여 작성되었습니다.

 

코드로 배우는 스프링 웹 프로젝트 - YES24

이 책은 Spring Framework(이하 스프링)를 사용해서 말 그대로 ‘웹 프로젝트’를 어떻게 진행하는지를 설명하는 책이다. 웹 프로젝트라고 거창하게 표현하지만, 좀 더 구체적으로는 스프링으로 웹

www.yes24.com

 

 

 

 

 

Comments