💡 Spring MVC 에 대해 설명해 주세요.
Spring MVC는 Spring Framework의 웹 애플리케이션 개발을 지원하는 모듈로, Model-View-Controller(MVC) 패턴을 구현한 웹 프레임워크입니다. MVC 패턴은 애플리케이션의 구조를 모델(Model), 뷰(View), 컨트롤러(Controller) 세 가지 역할로 나누어 개발합니다.
- Model은 애플리케이션의 비즈니스 로직과 데이터를 나타냅니다. 쉽게 말하면, 무엇을 처리할 것인지를 명시해 놓은 영역입니다. Model은 웹 응용 프로그램의 도메인 객체를 관리하고 데이터베이스와 같은 영속성 계층과 상호 작용합니다.
- View는 사용자에게 보여지는 데이터를 표현하는 역할을 합니다. 즉, 사용자가 보게 될 요소를 어떻게 디자인할 것인지를 다룹니다. 일반적으로 JSP, Thymeleaf 등의 템플릿 엔진을 사용하여 뷰를 구성합니다.
- Controller는 사용자의 요청을 처리하고 적절한 Model을 호출한 후 결과를 View로 전달하는 역할을 합니다. Controller는 요청-응답의 프로세스 흐름을 조절합니다.
💡 Spring MVC 패턴이 요청을 주고 받을 때 어떤 흐름인지 설명해 주세요.

Spring MVC 패턴은 웹 애플리케이션의 구조를 Model-View-Controller 관점에서 분리하여 개발하는 디자인 패턴입니다.
1. 사용자 요청 (HTTP Request)
사용자가 웹 애플리케이션에 요청을 보내면, DispatcherServlet이 이를 가장 먼저 받게 됩니다. DispatcherServlet은 Spring MVC의 핵심 구성 요소로서, 모든 요청과 응답을 제어하고 관리합니다.
2. Handler 매핑 (Handler Mapping)
요청을 받은 DispatcherServlet은 해당 요청 URL을 처리할 Controller를 결정하기 위해 HandlerMapping에 요청을 전달합니다. HandlerMapping은 요청 URL에 대응하는 Controller를 찾아 반환합니다.
3. Controller 처리
URL에 대응하는 Controller가 결정되면, DispatcherServlet은 해당 요청을 Controller에 전달합니다. Controller는 서비스 계층(Service Layer)의 로직 호출, 웹 요청 데이터 처리 등의 작업을 수행합니다. 요청의 처리 결과로써, Model 데이터와 뷰 이름을 반환합니다.
4. ViewResolver
Controller가 반환한 뷰 이름을 바탕으로 DispatcherServlet은 ViewResolver를 사용하여 실제 뷰 파일을 결정합니다. ViewResolver는 뷰 이름을 기준으로 실제로 사용할 뷰 템플릿 파일을 찾아 반환합니다.
5. 뷰 작성 (View Rendering)
ViewResolver가 결정한 실제 뷰 파일(예: JSP 파일)은 Model 데이터를 사용하여 사용자에게 보여줄 최종 HTML을 생성(Rendering)합니다. 생성된 HTML은 다시 DispatcherServlet을 거쳐 사용자에게 응답으로 전달됩니다.
6. 사용자 응답 (HTTP Response)
DispatcherServlet은 사용자에게 최종적으로 생성된 HTML(응답 데이터)을 반환합니다. 이로써 HTTP 요청-응답 과정이 종료되고 사용자는 웹 브라우저에 렌더링 된 결과를 확인할 수 있게 됩니다.
요약하면, Spring MVC 패턴에서 웹 요청은 DispatcherServlet, HandlerMapping, Controller, ViewResolver, View 순으로 처리되어 사용자에게 반환됩니다. 이 과정에서 각 구성 요소는 별도의 책임을 가지며 서로 협력하여 사용자의 웹 요청을 처리합니다.
💡 Spring IoC(Inversion of Control, 제어의 역전)에 대해 설명해 주세요.
Spring의 IOC (Inversion of Control)는 객체의 생성과 관리를 프레임워크에 맡기는 개념입니다.
개발자가 직접 객체를 생성하고 관리하는 것이 아닌, 스프링 컨테이너가 객체의 의존성을 주입하고 생명 주기를 관리합니다. 이로써 유지보수와 테스트가 편리해지며, 코드의 유연성과 결합도가 개선됩니다.
💡 Spring Boot와 Spring Framework의 차이점을 설명해 주세요.
Spring Framework는 XML 또는 Java Config를 사용하여 필요한 구성과 설정 등을 직접 관리하며, WAR 파일 형태로 배포됩니다. 반면에 Spring Boot는 초기 설정이 간단하고 자동 설정(Auto Configuartion)을 지원하며, 내장된 웹서버를 활용하여 JAR 파일 형태로 배포합니다.
Spring Boot는 빠른 개발을 가능하게 하지만, 이에 비해 Spring Framework는 더 많은 유연성과 커스터마이징 기능을 제공합니다. 따라서 프로젝트 요구사항과 개발 편의성에 따라 선택할 수 있습니다.
💡 Spring Boot와 Spring Framework의 장단점과 차이점을 설명해 주세요.
Spring Framework의 장점은 높은 유연성과 커스터마이징 기능으로, 복잡한 애플리케이션에서 더 많은 제어를 할 수 있다는 점입니다. 그러나 초기 설정과 관리가 복잡하여 개발 시간이 더 소요될 수 있습니다.
반면에 Spring Boot는 간단한 초기 설정과 자동 설정으로 개발자의 작업 부담을 줄여줍니다. 내장된 웹 서버로 빠르게 배포가 가능하며 모니터링과 관리도 용이합니다. 하지만 유연성은 상대적으로 떨어질 수 있습니다.
차이점은 설정과 편의성 관련입니다. Spring Framework는 개발자가 모든 설정을 직접 제어해야 하지만, Spring Boot는 기본 설정을 제공하여 개발자에게 더 편리한 개발 환경을 제공해 줍니다.