You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Spring MVC 프로젝트는 전통적인 서블릿 기반 웹 애플리케이션보다 더 명확하게 계층 구조를 나누어 개발한다. 주요 구성은 다음과 같다:
• web.xml: 프로젝트가 실행될 때 가장 먼저 읽히는 설정 파일로, DispatcherServlet을 등록하여 Spring MVC의 시작점을 만든다. 이 파일에서 스프링 설정 파일의 경로(root-context.xml)도 지정함.
• root-context.xml: 주로 Service, DAO, DB 설정 등 공통적으로 쓰이는 Bean을 정의한다. 전역 설정에 해당.
• servlet-context.xml: DispatcherServlet 전용 설정 파일로, Controller, ViewResolver, MessageConverter 등의 웹 계층 관련 설정을 포함.
• 패키지 구조: Controller, Service, Repository/DAO, DTO/VO 등으로 분리하며, 이는 MVC 패턴을 명확히 따르기 위함.
Spring MVC의 요청 흐름은 다음과 같은 단계를 따른다:
1. 사용자 요청 발생 (예: /user/list)
2. DispatcherServlet이 요청을 가로채고, HandlerMapping을 통해 적절한 Controller를 찾음.
3. Controller는 요청 처리 후 데이터를 Model에 담아 반환.
4. ViewResolver가 반환된 View 이름을 기반으로 .jsp, .html 등 실제 화면 파일을 찾아 렌더링.
5. 완성된 View가 사용자에게 응답으로 전달됨.
→ 이 흐름은 **Model2 방식(MVC 패턴)**의 전형적인 처리 방식이며, 서블릿 기반 MVC의 복잡함을 스프링이 간소화한 구조다.
⸻
5.3 스프링 MVC의 기본 사상
스프링 MVC는 다음과 같은 설계 철학을 바탕으로 개발된다:
• POJO(Plain Old Java Object) 기반: 순수한 Java 객체로 개발 가능 (특정 프레임워크 의존 X)
• IOC(제어의 역전), DI(의존성 주입): 객체 생성 및 의존성 주입을 스프링 컨테이너가 담당
• 관심사의 분리(SoC): Controller는 요청 처리, Service는 로직 처리, DAO는 DB처리 등 역할을 명확히 분리
• 유지보수성 및 테스트 용이성 강화
⸻
5.4 모델2와 스프링 MVC
Model2 패턴은 JSP와 Servlet의 단점을 보완하여 View와 Logic의 분리를 가능하게 한 설계 방식이다.
• 사용자의 요청은 직접 JSP로 가지 않고 반드시 Controller를 거쳐야 한다.
• Controller는 Model을 처리하고 View에게 데이터를 전달하며, View는 결과만 렌더링한다.
• 스프링 MVC는 이 Model2 구조를 자동화하고 간소화한 프레임워크라고 볼 수 있다.
6.4 Model이라는 데이터 전달자
• Model은 컨트롤러에서 View(JSP 등)에 데이터를 전달하기 위해 사용
• model.addAttribute("key", value)로 전달한 데이터는 ${key}로 접근 가능
• Spring은 내부적으로 ModelMap, ModelAndView 등 다양한 타입을 지원
⸻
6.5 Controller의 리턴 타입
• String: View 이름 반환 (/WEB-INF/views/ + name + .jsp)
• ModelAndView: 모델 + 뷰를 동시에 설정 가능
• void: View 이름 생략 (요청 URL로 추측됨)
• ResponseEntity: REST API에서 사용, 상태코드와 데이터를 함께 반환
⸻
6.6 Controller의 Exception 처리
• @ExceptionHandler: 특정 컨트롤러 내에서만 작동하는 예외 처리 메서드
• @ControllerAdvice: 전체 컨트롤러를 대상으로 하는 전역 예외 처리
@ControllerAdvice
public class GlobalExceptionHandler { @ExceptionHandler(Exception.class)
public String handleException(Exception e) {
return "error";
}
}
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
-
05장. 스프링 MVC의 기본 구조
5.1 스프링 MVC 프로젝트의 내부 구조
Spring MVC 프로젝트는 전통적인 서블릿 기반 웹 애플리케이션보다 더 명확하게 계층 구조를 나누어 개발한다. 주요 구성은 다음과 같다:
• web.xml: 프로젝트가 실행될 때 가장 먼저 읽히는 설정 파일로, DispatcherServlet을 등록하여 Spring MVC의 시작점을 만든다. 이 파일에서 스프링 설정 파일의 경로(root-context.xml)도 지정함.
• root-context.xml: 주로 Service, DAO, DB 설정 등 공통적으로 쓰이는 Bean을 정의한다. 전역 설정에 해당.
• servlet-context.xml: DispatcherServlet 전용 설정 파일로, Controller, ViewResolver, MessageConverter 등의 웹 계층 관련 설정을 포함.
• 패키지 구조: Controller, Service, Repository/DAO, DTO/VO 등으로 분리하며, 이는 MVC 패턴을 명확히 따르기 위함.
예시 구조
com.example.controller
com.example.service
com.example.repository
com.example.dto
⸻
5.2 예제 프로젝트의 로딩 구조
Spring MVC의 요청 흐름은 다음과 같은 단계를 따른다:
1. 사용자 요청 발생 (예: /user/list)
2. DispatcherServlet이 요청을 가로채고, HandlerMapping을 통해 적절한 Controller를 찾음.
3. Controller는 요청 처리 후 데이터를 Model에 담아 반환.
4. ViewResolver가 반환된 View 이름을 기반으로 .jsp, .html 등 실제 화면 파일을 찾아 렌더링.
5. 완성된 View가 사용자에게 응답으로 전달됨.
→ 이 흐름은 **Model2 방식(MVC 패턴)**의 전형적인 처리 방식이며, 서블릿 기반 MVC의 복잡함을 스프링이 간소화한 구조다.
⸻
5.3 스프링 MVC의 기본 사상
스프링 MVC는 다음과 같은 설계 철학을 바탕으로 개발된다:
• POJO(Plain Old Java Object) 기반: 순수한 Java 객체로 개발 가능 (특정 프레임워크 의존 X)
• IOC(제어의 역전), DI(의존성 주입): 객체 생성 및 의존성 주입을 스프링 컨테이너가 담당
• 관심사의 분리(SoC): Controller는 요청 처리, Service는 로직 처리, DAO는 DB처리 등 역할을 명확히 분리
• 유지보수성 및 테스트 용이성 강화
⸻
5.4 모델2와 스프링 MVC
Model2 패턴은 JSP와 Servlet의 단점을 보완하여 View와 Logic의 분리를 가능하게 한 설계 방식이다.
• 사용자의 요청은 직접 JSP로 가지 않고 반드시 Controller를 거쳐야 한다.
• Controller는 Model을 처리하고 View에게 데이터를 전달하며, View는 결과만 렌더링한다.
• 스프링 MVC는 이 Model2 구조를 자동화하고 간소화한 프레임워크라고 볼 수 있다.
⸻
06장. 스프링 MVC의 Controller
6.1 @controller, @RequestMapping
• @controller: 해당 클래스를 **웹 요청 처리용 클래스(Controller)**로 인식시킴
• @RequestMapping: URL과 Controller 메서드 간의 **매핑(mapping)**을 설정
• 클래스 단위와 메서드 단위 모두 설정 가능
• Spring 4.3 이상부터는 @GetMapping, @PostMapping 등의 축약형도 제공됨
@controller
@RequestMapping("/user")
public class UserController {
@GetMapping("/list")
public String listUsers(Model model) {
...
return "user/list";
}
}
⸻
6.2 @RequestMapping의 변화
• @RequestMapping은 모든 HTTP 메서드를 처리할 수 있지만, 가독성을 높이기 위해 @GetMapping, @PostMapping 등으로 분리됨
• 배열로 GET/POST를 동시에 처리할 수도 있음
@RequestMapping(value="/write", method={RequestMethod.GET, RequestMethod.POST})
⸻
6.3 Controller의 파라미터 수집
Spring MVC에서는 다양한 방식으로 폼 데이터를 수집할 수 있다:
1. HttpServletRequest 방식
@PostMapping("/save")
public String save(HttpServletRequest req) {
String name = req.getParameter("name");
}
@PostMapping("/save")
public String save(@RequestParam("name") String name) { ... }
public class UserDTO {
private String name;
}
@PostMapping("/save")
public String save(UserDTO dto) { ... }
public String save(@RequestParam("cb") List items) { ... }
@PostMapping("/save")
public String save(@ModelAttribute("user") UserDTO dto) { ... }
⸻
6.4 Model이라는 데이터 전달자
• Model은 컨트롤러에서 View(JSP 등)에 데이터를 전달하기 위해 사용
• model.addAttribute("key", value)로 전달한 데이터는 ${key}로 접근 가능
• Spring은 내부적으로 ModelMap, ModelAndView 등 다양한 타입을 지원
⸻
6.5 Controller의 리턴 타입
• String: View 이름 반환 (/WEB-INF/views/ + name + .jsp)
• ModelAndView: 모델 + 뷰를 동시에 설정 가능
• void: View 이름 생략 (요청 URL로 추측됨)
• ResponseEntity: REST API에서 사용, 상태코드와 데이터를 함께 반환
⸻
6.6 Controller의 Exception 처리
• @ExceptionHandler: 특정 컨트롤러 내에서만 작동하는 예외 처리 메서드
• @ControllerAdvice: 전체 컨트롤러를 대상으로 하는 전역 예외 처리
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public String handleException(Exception e) {
return "error";
}
}
Beta Was this translation helpful? Give feedback.
All reactions