
1. @Controller: 빈(Bean) 등록과 핸들러 인식
@Controller는 해당 클래스가 Spring의 IoC 컨테이너에 의해 관리되는 '빈'임을 선언함과 동시에, DispatcherServlet이 찾을 수 있는 '핸들러' 객체로 등록하는 역할을 수행함.
- 동작 원리: 스프링 부트 실행 시 컴포넌트 스캔(Component Scan) 과정을 통해 이 어노테이션이 붙은 클래스를 찾아 인스턴스화하고, 이를 컨트롤러 레이어로 인식함.
2. @GetMapping: 요청 URL과 메서드 매핑
특정 HTTP 메서드(GET)와 URL 경로를 컨트롤러 내의 특정 메서드와 연결함.
- 동작 원리: 사용자가 특정 경로로 요청을 보내면, HandlerMapping이 등록된 @GetMapping 정보를 참조하여 해당 요청을 처리할 최적의 메서드를 찾아냄.
- 흐름: 브라우저의 GET 요청 발생 → HandlerMapping이 URL에 매핑된 @GetMapping 메서드 식별 → 해당 메서드 실행.
3. @ResponseBody: 응답 데이터의 직렬화 처리
Spring MVC의 메서드는 기본적으로 반환된 문자열을 View(HTML 파일 등)의 이름으로 해석함. @ResponseBody는 이 기본 동작을 변경함.
- 주요 기능: 메서드의 반환값을 View Resolver에게 전달하지 않고, HttpMessageConverter를 통해 HTTP 응답 본문(Body)에 직접 기록함.
- 직렬화: 반환 타입이 객체일 경우 JSON으로, 문자열일 경우 일반 텍스트로 직렬화하여 클라이언트에 전송함.
4. @RestController: @Controller와 @ResponseBody의 결합
REST API 개발 환경에서는 모든 메서드에 데이터 응답이 필요하므로 이를 간소화하기 위해 도입된 어노테이션임.
- 구조: @Controller와 @ResponseBody가 합성된 형태임.
- 효과: 클래스 레벨에 선언하면 모든 핸들러 메서드에 자동으로 @ResponseBody가 적용되어, 데이터 중심의 응답을 반환하는 컨트롤러를 효율적으로 작성할 수 있음.
5. 전체 처리 프로세스 요약
- Request: 클라이언트가 특정 경로(예: '/')로 GET 요청을 전송함.
- Detection: @Controller로 등록된 빈 중에서 @GetMapping("/")을 보유한 메서드를 탐색함.
- Execution: 비즈니스 로직을 수행하고 결과 데이터를 반환함.
- Serialization: @ResponseBody 설정에 따라 데이터를 HTTP 응답 규격에 맞춰 변환함.
- Response: 최종적인 데이터가 클라이언트의 브라우저나 앱으로 전송됨.
핵심 요약
- @Controller: IoC 컨테이너 등록 및 핸들러 매핑 대상 지정.
- @GetMapping: HTTP GET 요청과 자바 메서드의 논리적 연결.
- @ResponseBody: 반환 데이터를 HTTP Body에 직접 기입 (View 전이 방지).
- @RestController: 데이터 반환 전용 컨트롤러 구현을 위한 편의 도구.