스프링 프레임워크/스프링 기본 개념 정리 및 기본 예제

Spring MVC 구조

edenDev 2023. 2. 9.

Spring MVC 구조

본 포스팅의 예제는 STS(Spring Tool Studio) 또는 Eclipse를 사용하지 않고 intellij를  통해 구현하고 있습니다.

그래서 기존의 생성된 STS(Spring Tool Studio) 생성된 Spring 프로젝트의 스프링 설정 파일명과 프로젝트 구조가

약간 다를 수 있습니다. Intellij 스프링 mvc 프로젝트 생성 포스팅을 참고해주시면 감사하겠습니다.


1. Model 2

Model 2 방식은 흔히 MVC 구조를 응용한 방식으로 화면과 데이터 처리를 분리해서 재사용이 가능하도록 하는 구조라고 할 수 있습니다.

  • Model : 데이터 혹은 데이터를 처리하는 영역을 의미합니다.
  • View : 결과 화면을 만들어 내는데 사용하는 자원을 의미합니다.
  • Controller : 웹의 요청을 처리하는 존재로 View와 Model사이의 중간 통신 역할을 수행합니다.

개발자와 웹 퍼블리셔의 영역을 분리할 수 있고, Controller의 URL를 통해 View를 제어하기 때문에 View의 교체나 변경과 같은 유지보수에 사용 됩니다.


2. Front Controller 패턴

전체 로직의 일부만을 Controller가 처리하도록 변경 되었습니다. 이것을 위임(Delegation)이라고 하는데 전체 로직의 일부를 Controller에게 위임하고,. 모든 흐름의 제어는 앞쪽의 Front Controller가 담당하게 됩니다. 이러한 구조를 사용 하게 될 경우 개발자가 작성하는 Controller는 전체 로직의 일부분만을 처리하는 형태가 되기 떄문에 개발자가 작성해야하는 전체 코드량을 줄어들게 됩니다.


3. Spring MVC 구조

# Spring MVC의 요처ㅇ에 대한 흐름

  1. 사용자의 요청을 Front Controller에 전달 합니다.
  2. 전달된 요청은 적절한 Controller를 찾아 호출 합니다. (@RequestMapping  / @PostMapping / @GetMapping 의 역할)
  3. 컨트롤러는 해당 Service 객체를 찾아 호출합니다.
  4. Service객체는 DAO객체를 이용하여 원하는 Data를 요청 합니다.
  5. DAO객체는 MyBatis를 이용하는 Mapper를 통해 작업을 수행합니다. (CRUD)
  6. Service를 통해 처리한 데이터를 Controller에 전달 합니다.
  7. Controller는 다시 Spring MVC 쪽으로 데이터를 전달 합니다.

# SpringMVC VS 개발자

SpringMVC가 처리하는 작업 개발자가 직접 해야하는 작업
URL를 분석해서 적절한 Controller를 찾는 작업 특정 URL에 동작하는 Controller를 설계하는 작업
Controller에 필요한 메서드를 호출하는 작업 Service / DAO 객체를 생성
Controller의 결과 데이터를 View로 전달하는 작업 Controller내에 원하는 결과를 메서드로 설계
적절한 View를 찾는 작업 View에서 전달받은 데이터의 출력

4. Spring MVC 주요 어노테이션

어노테이션(Annotation) 기능
@Controller Controller 객체임을 명시 합니다.
@RestController Json 형태로 객체 데이터를 반환하는데 사용 합니다.
@Repository DAO 객체임을 명시 합니다.
@Service Service 객체임을 명시 합니다.
@RequestMapping 특정 URL에 매칭되는 클래스나 메서드임을 명시 합니다.
@RequestParam 요청에서 특정한 파라미터 값을 찾아낼 때 사용 합니다.
@RequestHeader 요청에서 특정 HTTP 해더 정보를 추출할 떄 사용 합니다.
@PathVariable 현재의 URL에서 원하는 정보를 추출할 때 사용 합니다.
@CookieValue 현재 사용자의 쿠키가 존재하는 경우 쿠키의 이름을 이용해서 쿠키 값을 추출 합니다.
@ModelAttribute 자동으로 해당 객체를 뷰까지 전달하도록 만드는 어노테이션 입니다.
@SessionAttribute 세션상에서 모델의 정보를 유지하고 싶은 경우 사용 합니다.
@InitBinder 파라미터를 수집해서 객체로 만들 경우 사용 합니다.
@ResponseBody 리턴타입이 HTTP의 응답메세지로 전송 합니다.
@RequestBody 요청 문자열이 그대로 파라미터로 전달 됩니다.

 

댓글