🏁 서론
드디어! 스프링을 시작하게 되었다 🎉
리뷰어님께서 스프링에는 자신이 있다고 하시면서 개념적인 부분을 많이 질문하신다고 들었는데, 정말 맞았다.
그동안 당연하게 넘겼던 스프링의 구조나 동작 원리에 대한 질문이 새로운 공부의 계기가 되었다!
이번 미션을 통해 스프링의 기본기를 다지고, 더 깊이 있는 이해로 연결해보고 싶다 💪
📚 이번 주 학습 내용
https://github.com/izzy80/spring-roomescape-playground
GitHub - izzy80/spring-roomescape-playground
Contribute to izzy80/spring-roomescape-playground development by creating an account on GitHub.
github.com
🛠️ 단계별 PR 회고
📌 1, 2단계
1. `@RestController` vs `@Controller`
스프링을 사용하면서 가장 기본적인 컨트롤러 어노테이션이지만, 이번 미션을 하며 둘의 차이를 다시금 확실히 이해하게 되었다.
어노테이션 | 설명 |
`@Controller` | 주로 HTML View를 반환할 때 사용된다. 데이터를 반환하려면 메서드에 @ResponseBody를 추가해야 JSON 또는 XML로 직렬화된다. |
`@RestController` | @Controller + @ResponseBody의 조합이다. 메서드 반환값을 자동으로 JSON 또는 XML로 직렬화해 응답 Body에 담아준다. REST API 개발에 적합하다. |
2. HTML View 반환과 JSON 반환의 흐름 차이
이번 미션에서는 /reservation 요청 시 HTML을 반환하고, /reservations 요청 시 JSON 데이터를 반환하도록 설계되어 있었다. 이를 통해 각각의 요청이 스프링 MVC에서 어떻게 다르게 처리되는지를 실제로 경험할 수 있었다.
1. `/reservation` 요청 (HTML View 반환)
- 사용자가 /reservation 요청을 보냄
- @Controller가 붙은 ReservationViewController.homePage() 메서드로 매핑됨
- 반환값 "reservation"은 View 이름으로 인식됨
- ViewResolver가 reservation.html을 찾아 렌더링하여 응답함
2. `/reservations` 요청 (JSON 응답)
- 사용자가 /reservations 요청을 보냄
- @RestController가 붙은 ReservationApiController.read() 메서드로 매핑됨
- 반환값이 객체이므로, 자동으로 JSON으로 직렬화되어 응답 Body에 포함됨
똑같이 RequestMappingHandlerMapping을 통해 메서드가 매핑되지만, @Controller vs @RestController에 따라 응답 처리 방식이 달라진다. ViewNameMethodReturnValueHandler와 RequestResponseBodyMethodProcessor가 각각 다르게 동작하게 되는 구조다.
3. 컨트롤러에서 String을 반환하면 HTML이 렌더링되는 조건
1. HTML View가 반환되는 조건
- 클래스에 `@Controller` 또는 `@RequestMapping`이 붙어 있을 것
- 메서드의 반환 타입이 String일 것
- Spring에 ViewResolver가 등록되어 있을 것
- 템플릿 파일이 실제로 존재할 것 (예: resources/templates/reservation.html)
2. 왜 이렇게 동작할까?
`@Controller`는 View 반환을 전제로 작동한다.
즉, 메서드에서 String을 반환하면 스프링은 이를 "응답 내용"이 아니라 **"뷰 이름"**으로 해석한다.
- DispatcherServlet → HandlerAdapter 실행 후
- 반환된 문자열 "reservation"을 ViewResolver에 전달
- ViewResolver가 해당 이름의 템플릿 파일(예: reservation.html)을 찾아 렌더링
- 최종적으로 HTML이 브라우저에 응답됨
📌 3, 4단계
수정중
📝 마무리 회고
수정중
🔗 Pull Request 기록
'🌤️일상 > 초록 스터디' 카테고리의 다른 글
Java 4주차) 사다리 회고 (0) | 2025.06.04 |
---|---|
Java 3주차) 로또 회고 (0) | 2025.05.19 |
Java 2주차) 자동차 경주 회고 (2) | 2025.05.13 |
Java 1주차) 계산기 회고 (0) | 2025.05.03 |