Topic (오늘의 주제)
Spring MVC (Model-View-Controller)와 요청 처리 흐름
Why (왜 사용하는가? 왜 중요한가?)
- 실무: 웹 애플리케이션의 복잡한 요청(Request)과 응답(Response) 과정을 체계적으로 관리하고, 비즈니스 로직과 화면(View)을 분리하여 유지보수성을 높입니다.
- 구조적 의미: 프론트 컨트롤러(Front Controller) 패턴을 구현한 DispatcherServlet이 모든 요청을 중앙에서 제어하여 일관된 처리를 보장합니다.
- 면접 의도: 사용자의 요청이 들어왔을 때 어떤 과정을 거쳐 응답이 나가는지, 그 내부 아키텍처와 흐름을 정확히 설명할 수 있는지 확인합니다.
Core Concept (핵심 개념 정리)
| 요소 | 내용 |
| 개념 정의 | MVC 패턴을 기반으로 한 웹 모듈. M(Model): 데이터, V(View): 화면, C(Controller): 처리 로직을 담당. |
| 핵심 컴포넌트 | 1. DispatcherServlet: 모든 요청을 가장 먼저 받는 현관문 (Front Controller). 2. HandlerMapping: 요청 URL을 보고 어떤 컨트롤러가 처리할지 찾음. 3. HandlerAdapter: 찾은 컨트롤러를 실행. 4. ViewResolver: 컨트롤러가 리턴한 뷰 이름(String)을 실제 뷰 객체로 변환. |
| 동작 흐름 | Request → DispatcherServlet → HandlerMapping (컨트롤러 탐색) → HandlerAdapter (메서드 실행) → Service/Repository (로직 수행) → Model에 데이터 담기 → ViewResolver → View 응답. |
| 장점 | 역할의 분리(Separation of Concerns), 높은 확장성, 강력한 커뮤니티와 생태계. |
Interview Answer Version (면접 답변식 요약)
"Spring MVC는 Front Controller 패턴을 기반으로 동작합니다.
클라이언트의 모든 요청을 DispatcherServlet이 가장 먼저 받아, HandlerMapping을 통해 적절한 컨트롤러를 찾고 요청을 위임합니다.
이후 컨트롤러가 비즈니스 로직을 수행하고 결과를 Model에 담아 반환하면, ViewResolver가 알맞은 뷰를 찾아 최종 응답을 생성하는 구조로 되어 있어, 유연하고 확장 가능한 웹 개발을 지원합니다."
Practical Tip (사용시 주의할 점 or 활용 예)
1. @Controller vs @RestController
- @Controller: 주로 View(HTML)를 반환할 때 사용합니다. (ViewResolver를 탐)
- @RestController: @Controller + @ResponseBody의 합. JSON 데이터를 반환하는 API 서버를 만들 때 사용합니다. (MessageConverter를 탐)
2. 요청 파라미터 받기 (@RequestParam vs @ModelAttribute)
- 단순한 값(String, int) 몇 개를 받을 때는 @RequestParam.
- 폼 데이터나 여러 필드를 객체로 한 번에 매핑할 때는 @ModelAttribute를 씁니다.
예상 꼬리질문 정리
- Q: DispatcherServlet 이전에 요청을 가로채려면 어떻게 해야 하나요?
- 답변: Filter를 사용합니다. (Spring 컨텍스트 외부, web.xml/서블릿 컨테이너 레벨)
- Q: 컨트롤러 실행 전후에 공통 로직을 넣으려면요?
- 답변: Interceptor를 사용합니다. (Spring 컨텍스트 내부, DispatcherServlet 이후 동작)
'Archive > Daily Dev Q&A' 카테고리의 다른 글
| Daily Dev Q&A: DNS (0) | 2026.01.14 |
|---|---|
| Daily Dev Q&A: N+1 문제 & 해결책 (0) | 2026.01.13 |
| Daily Dev Q&A: JPA vs MyBatis (0) | 2026.01.09 |
| Daily Dev Q&A: 영속성 컨텍스트 (0) | 2026.01.09 |
| Daily Dev Q&A: ORM (Object-Relational Mapping)의 개념과 한계(Trade-off) (0) | 2026.01.07 |