반응형
반응형

1. 개요

 교재를 보며 스프링 부트 환경에서 MVC 패턴을 사용하여 통신 테스트를 하던 도중 예기치 못한 상황이 발생했다.

Controller에서 String 형태로 View의 이름을 반환하려 했으나, 실제 반환된 것은 뷰가 아닌 스트링 자체였다.

test 를 리턴했을 때 test.html 리소스가 반환되는 것이 아닌 test 문자열 자체가 반환된 것이다. 코드를 확인해 보니 이 두 어노테이션을 적절히 사용하지 못해 발생한 문제였다.

 

2. @Controller

 Controller 어노테이션을 사용 시 일반적으로 View Resolver에 설정한 값 기준으로 return 하는 값과 일치하는 View 를 찾아 반환한다. @ResponseBody 어노테이션을 사용할 시 데이터 자체를 반환할 수 있으며, JSON 또는 String 형태로 값을 반환할 수 있다.

 

3. @RestController

 @Controller + @ResponseBody 이다. 해당 컨트롤러에서 View를 리턴하지 않고, REST API를 사용한다면 이 설정이 적절하다.

 

만약 Controller 통신 후 view 페이지를 예상했는데 view 이름만 달랑 있는 페이지가 나오거나, 반대 상황이 나온다면 컨트롤러의 어노테이션을 확인해보자.

 

반응형
반응형

목차

1. 개요

2. 스프링이란?

3. POJO란?

4. MVC 패턴이란?

5. MVC 패턴 구조

 

1. 개요

 대부분 웹 개발자들은 JAVA를 사용한다. 많은 기능과 메소드를 제공할 뿐 아니라 분업에 최적회된 OOP 구조이기 때문이다. 하지만 그만큼 복잡하고 어렵고 무겁다. 이러한 무겁고 어려운 웹 개발을 보다 쉽게 하기 위해 등장한 프레임워크가 바로 스프링이다.


2. 스프링이란?

 Java EE의 복잡하고 어려운 사용을 단순화시킨 프레임워크이다. POJO 기반이며, MVC 패턴을 사용한다.


3. POJO란?

 POJO란 Plain Old Java Object의 약자로 그대로 해석하면 (보거나 이해하기)분명한 오래된 자바 객체라는 뜻이다.

 프로그래밍적 용어로 해석하면 복잡하고 어려운 Java라는 녀석을 이해하기 쉽고 가볍게 가공한 것이다.

 Java EE와 같은 기존의 "무거운" 객체를 만들게 된 것에 반발해서 사용되게 된 용어라고 한다.


4. MVC 패턴이란?

 MVC 패턴은 Model, View, Controller의 약자로 각각은 다음의 의미를 갖는다.

약자 원형 의미
M Model 데이터 및 데이터베이스와 관련된 비지니스 로직을 처리하거나 이를 조회, 조작하는 부분 
V View 유저 인터페이스를 정의하는 부분
C Controller 분업된 비지니스 로직 및 DB접근을 효율적으로 관리하고, View와 Model의 연결단 부분

Controller의 '연결단' 이라는 표현이 조금 모호할 수 있으나 MVC패턴의 구조를 보면 이해할 수 있을 것이다.


5. MVC 패턴 구조

 1) Client에서 URL(데이터)을 요청한다.

 

 2) Dispatcher Servlet은 적절한 Controller에게 요청을 전달해야 한다. 이는 Handler Mapping을 이용하여 처리한다.

 

 3) Controller는 board, user, menu 등 하나의 큰 작업단위이다. 그 작업단위를 세분화 시킨 것이 Service인데 앞서 말한것 처럼 Handler Mapping을 이용하여 전달받은 내용을 적절한 Service에게 전달한다.

 

 4) Service는 비지니스 로직을 실행하며 DB에 대한 접근이 필요할 시 DAO라는 ConnectionPool 객체를 호출한다.

 

 5) VO(Value Object)는 DTO(Data Transfer Object)라고도 하며 SQL 쿼리문 담아 DB를 조회, 조작할수 있다.

 

 6) DB 접근을 마치면 결과가 출력되는데 이를 View(.jsp)와 결합한 형태로 Controller에게 다시 전달한다.

 

 7) Dispatcher Servlet에게 위의 정보가 다시 전달되며 이는 View에 접근하여 완성된 View의 정보를 사용자에게 response한다. 단, 회원가입 및 정보 수정 같이 보안상 보여줄 필요가 없는 부분은 다른 View로 대체 가능하다.

 

그렇다면 앞서 말한 연결단은 Model과 View를 연결시키는 의미를 말하며 아래와 같이 정리가 가능하다

 

Controller = 'Model과정을 거친 데이터'+'View'

반응형

+ Recent posts