Spring

[Spring] MVC 17편 - Spring MVC 어노테이션 동작 요약 시트

dev-nadan 2025. 8. 14. 16:17

 

1. 컨트롤러 유형

어노테이션 설명 반환 처리 방식
@Controller 뷰 렌더링 컨트롤러 반환값 String → View 이름
@RestController API 전용 컨트롤러 @ResponseBody 포함, 반환값 → HTTP Body

2. 매핑 관련 어노테이션

어노테이션 용도 주요 속성 특징/주의사항
@RequestMapping URL + HTTP 메서드 매핑 value, method, params, headers, consumes, produces 가장 기본, 다중 속성 지원
@GetMapping HTTP 메서드별 축약형 value, params, headers 등 내부적으로 @RequestMapping 사용
@PathVariable 경로 변수 바인딩 value, required 이름 생략 시 -parameters 옵션 필요(3.2+)

 

3. 요청 데이터 바인딩

어노테이션 용도 주요 속성 특징/주의사항
@RequestParam 단일 파라미터 name, required, defaultValue 단순 타입은 생략 가능
@ModelAttribute 파라미터 → 객체 바인딩 value 단순 타입 제외 시 기본 적용
@RequestBody 요청 바디(JSON 등) → 객체/문자열 required HttpMessageConverter 동작, Content-Type 필수
@RequestHeader HTTP 헤더 값 조회 name, required, defaultValue MultiValueMap으로 여러 값 처리 가능
@CookieValue 쿠키 값 조회 name, required, defaultValue 쿠키 없을 수 있으니 required=false

 

4. 응답 처리

어노테이션/클래스 용도 특징
@ResponseBody 반환값을 HTTP 바디에 직접 기록 HttpMessageConverter 사용
HttpEntity 바디 + 헤더 직접 제어 상태코드 설정 불가
ResponseEntity 바디 + 헤더 + 상태코드 제어 REST 응답 제어에 최적

 

5. HttpMessageConverter 기본 목록

컨버터 지원 타입 설명
StringHttpMessageConverter String text/plain 변환
MappingJackson2HttpMessageConverter 객체 ↔ JSON Jackson 라이브러리 사용
ByteArrayHttpMessageConverter byte[] 이진 데이터 처리

 

6. DispatcherServlet 요청~응답 흐름

[요청]
   ↓
DispatcherServlet
   ↓
HandlerMapping → 컨트롤러 메서드 찾기
   ↓
HandlerAdapter → 실행 준비
   ↓
ArgumentResolver → 메서드 파라미터 생성
   ↓
컨트롤러 실행
   ↓
ReturnValueHandler → 반환 처리
   ↓
HttpMessageConverter → 변환(JSON, String 등)
   ↓
[응답]

 

7. 어노테이션별 동작 시점

단계 관련 어노테이션
ArgumentResolver @RequestParam, @ModelAttribute, @RequestBody, @PathVariable, @RequestHeader, @CookieValue
HttpMessageConverter(요청) @RequestBody, HttpEntity
HttpMessageConverter(응답) @ResponseBody, HttpEntity, ResponseEntity

 

8. 실무 활용 팁

  • URL 매핑 시: @GetMapping, @PostMapping 등 축약형 적극 사용
  • 파라미터 바인딩:
    • 단순 타입 → @RequestParam
    • 객체 → @ModelAttribute
    • JSON 바디 → @RequestBody
  • API 응답: @RestController + ResponseEntity 조합 추천
  • Content-Type/Accept 조건을 걸어 잘못된 요청은 컨트롤러 진입 전에 차단
  • -parameters 옵션 설정 습관화 (변수명 생략 가능하게)