본문 바로가기

JAVA/Spring

모델2방식과 스프링 MVC

반응형

모델2방식과 스프링 MVC


모델2방식은 흔의 MVC 구조를 응용한 방식으로 화면과 데이터 처리를 분리해서 재사용이 가능하도록 하는 구조

Model : 데이터를 처리하는 영역 의미

View: 결과화면을 만들어 내는데 사용하는 자원 의미

Controller: 웹의 요청(Request)을 처리하는 존재로 뷰와 모델 사이의 중간 통신 역할

-----> Controller <---------> Model

             ㅣ            

              ∨

            View


컨트롤러는 모델 계층과 연동해서 필요한 데이터를 처리하고, 결과를 뷰로 전송

모델2에서 모든 요청은 기본적으로 컨트롤러를 호출한다. 각 컨트롤러는 자신을 호출하는 특정한 URI 경로를 가지고 있다.

과거에는 주로 호출시 마지막 확장자를 .do 등을 이용하는 방식을 많이 사용했다.


모델2 방식

1) 개발자와 웹 퍼블리셔의 영역을 분리

2) 컨트롤러의  URI를 통해 뷰를 제어로 뷰의  변경 등 유지보수에 유용


 모델2에서 Front Controller 패턴


 모델2방식이 개발자와 웹 퍼블리셔 간의 분업을 이루는데 성공했지만, 각 컨트롤러 사이의 중복적인 코드의 문제와 개발자의 개발 패턴의 차이 등의 문제로 인해 모델2 방식을 좀 더 강제적인 형태인 Front Controller 방식을 적용

 

스프링  MVC 구조

Front Controller 패턴의 가장 중요한 변화는 전체 로직의 일부만을 컨트롤러가 처리하도록 변경

전체로직의 일부를 컨트롤러에게 위임(Delegation)하고 모든 흐름의 제어는 앞쪽의 Front Controller가 담당한다.

개발자가 작성하는 컨트롤러는 전체 로직의 일부분만을 처리하는 형태가 되기 때문에 개발자가 작성해야하는 전체 코드는 줄어들게되고 모든 컨트롤러는  Front Controller의 일부분을 구현하는 형태로 좀 더 규격화된 코드를 작성하게 된다.


스프링 MVC가 처리해주는 작업

1) URI를 분석해서 적절한 컨트롤러를 찾는 작업

2) 컨트롤러에 필요한 메소드를 호출하는 작업

3) 컨트롤러의 결과 데이터를 뷰로 전달하는 작업

4) 적절한 뷰를 찾는 작업


개발자가 직접해야하는 작업

1) 특정 URI에  동작하는 컨트롤러를 설계하는 작업

2) 서비스 객체의 생성

3) DAO 객체의 생성

4) 컨트롤러 내에 원하는 결과를 메소드로 설계

5) 뷰에서 전달받은 데이터의 출력



스프링 MVC 컨트롤러

파라미터 수집: 웹에서 가장 많이 하는 작업은 사용자의 요청(Request)에 필요한 데이터를 추출하고, 이를 VO(Value Object) 또는 DTO(Data Transfer Obejct)로 변환하는 파라미터의 수집 작업

스프링 MVC의 컨트롤러는 이러한 처리를 자동으로 해주기 때문에 개발 시간을 크게 단축


특징

1) 애노테이션을 통한 간편 설정: 스프링 MVC의 설정은 크게 XML과 애노테이션을 사용

애노테이션을 사용하기 때문에 개발자는 클래스나 메소드의 선언에 필요한 애노테이션을 추가하는 작업을 통해서 요청(Request) 이나 응답(Response)에 필요한 모든 처리를 완료함

2) 로직의집중: 기존의 모델2는 특정한 URI마다 컨트롤러를 개발하는 경우가 많았지만 스프링 MVC 컨트롤러의 경우 각 메소드마다 필요한 애노테이션을 설정할수 있기 때문에 여러 메소드를 하나의 컨트롤러에 집중해서 작성

3) 테스트의 편리함: 스프링은 데스트 모듈을 사용해서 스프링 MVC로 작성된 코드를 WAS의 실행없이도 테스트를 할 수 있는 편리한 방법을 제공


애노테이션의 종류

@Controller -  스프링 MVC의 컨트롤러 객체임을 명시하는 애노테이션

@RequestMapping - 특정 URI에 매칭되는 클래스나 메소드임을 명시하는 애노테이션

@RequestParam - 요청(request)에서 특정한 파라미터의 값을 찾아낼때 사용하는 애노테이션

@RequestHeader - 요청(request)에서 특정 HTTP 헤더 정보를 추출할 때 사용하는 애노테이션

@PathVariable - 현재 URI에서 원하는 정보를 추출할 떄 사용하는 애노테이션

@CookieValue - 현재 사용자의 쿠키가 존재하는 경우 쿠키의 이름을 이용해서 쿠키값을 추출하는 애노테이션

@ModelAttribute - 자동으로 해당 객체를 뷰까지 전달하도록 만드는 애노테이션

@SessionAttribute - 세션상에서 모델의 정보를 유지하고 싶은 경우에 사용하는 애노테이션

@InitBinder -  파라미터를 수집해서 객체로 만들경우 커스터마이징 하는 애노테이션

@ResponseBody - 리턴타입이 HTTP의 응답 메시지로 전송하는 애노테이션

@RequestBody - 요청(request) 문자열이 그대로 파라미터로 전달하는 애노테이션

@Repository - DAO 객체

@Service - 서비스 객체


컨트롤러의 메소드 리턴 타입

void 리턴타입경우 - 스프링 MVC는 현재 경로에 해당하는 JSP파일을 실행

String 리턴타입경우 - 문자열 + jsp 파일을 찾아서 실행

리다이렉트해야하는 경우 - redirect: + URI 찾아서 호출

JSON 데이터를 생성하는경우 - @ResponseBody 애노테이션 사용하고 객체로 리턴하면 application/json 타입으로 처리 ( jackson-databind 라이브러리 필요)



반응형

'JAVA > Spring' 카테고리의 다른 글

Spring Transaction  (0) 2017.11.27
Spring AOP  (0) 2017.11.21
RestController  (0) 2017.11.20
예외처리 기본  (0) 2017.11.20
스프링 웹프로젝트의 구성  (0) 2017.11.20