최근 스프링을 공부하기 시작하면서, 간단한 CRUD 페이지를 만들어 보고 있다.
아무래도 스프링의 동작 원리를 제대로 모른 상태에서 만들다보니, 아무래도 궁금한 점이 많이 생기는 것 같다.
@Controller
public class HiController {
@GetMapping("/hi")
public String hi() {
return "hi";
}
}
위 코드는 /hi
로 get 요청이 왔을 때, hi.html
이라는 파일을 요청자에게 전달해준다.
이렇게 간단한 코드만으로도 사용자에게 hi.html
이라는 화면을 띄워줄 수 있는 것이다.
하지만 아무래도 저 코드 외에 다른 부분은 내가 작성한 코드가 아니다보니, 내부적으로 어떤 과정을 거치게 되는지 이해해야겠다는 생각이 들었다.
위 과정(도메인/hi 로 접속을 시도)을 거치는 경우, 스프링의 내부에서는 다음과 같은 과정을 거치게 된다.
@GetMapping("/hi")
를 붙여준 이유.)위 과정은 Controller가 View를 반환하는 과정이다.
위 코드에서는 hi.html
파일이 클라이언트에게 전달되어 표시될 것이다.
@Controller
클래스 메소드의 리턴값이 될 수 있는 것은 다음과 같다.
이 외에도 몇개 더 있는데, https://docs.spring.io/spring-framework/reference/web/webmvc/mvc-controller/ann-methods/return-types.html을 참고해보자.
하지만 백엔드 개발을 하다보면, 사용자에게 보이는 화면이 아니라 데이터를 반환해 주어야 하는 경우도 생긴다.(api 같은 경우)
이런 경우에는 메소드에 @ResponseBody
어노테이션을 추가하거나, 클래스의 @Controller
어노테이션을 @RestController
어노테이션으로 교체해 주면 가능하다.
@RestController
public class HiController {
@GetMapping("/hi")
public String hi() {
return "hi";
}
}
@GetMapping("/hi")
를 붙여준 이유.)위 과정은 Controller가 단순 데이터를 반환해 주는 과정이다.
위 코드에서는 클라이언트에게 hi라는 단순한 문자열이 전달되고, 클라이언트의 브라우저에는 hi라는 두 글자만 띄워지게 될 것이다.
앞서 살펴본 View를 반환하는 과정과 거의 비슷하지만, View를 반환하는 것이 아닌, 데이터 그 자체를 반환하면 되므로 ViewResolver에게 ViewName을 전달하고, View를 반환받는 과정이 사라져있다.
또한, 여기서 RestController 클래스의 메소드에서 반환하는 리턴타입은 다음과 같다.
1. String : 단순 문자열 데이터로서 반환된다.
2. Object : JSON 또는 XML로 변환되어 반환된다.