웹개발을 시작하기 전부터 질리도록 들었던 단어가 있다. 바로 MVC 패턴으로, 이는 웹개발 관련 블로그나 커뮤니티에서 하루도 빠짐없이 언급 될 정도로 웹 개발 하면 필수적으로 알아야 할 디자인 패턴이다. MVC패턴에 대해 설명하기 전에 모델 1 구조와 모델 2 구조를 먼저 설명하고자 한다.

JSP로 구성할 수 있는 웹 어플리케이션의 아키텍쳐는 크게 모델 1, 모델 2로 나뉜다. 이 두 모델의 큰 차이점은 JSP가 결과의 출력 뿐만 아니라 요청에 대한 모든 로직들을 처리하냐, JSP는 결과의 출력만 담당하냐의 차이이다.


1. 모델 1 구조


모델 1은 뷰와 로직을 모두 JSP 페이지 하나에서 처리하는 구조를 말하며, 위 사진과 같은 구성을 띈다. 모델 1을 구성하는 요소는 크게 나누면 다음과 같다.

1. JSP

2. 자바빈 혹은 서비스 클래스

 JSP 페이지 내에 로직 처리르 위한 자바 코드가 출력을 위한 코드와 함께 섞여 삽입된다. 브라우져에서 요청이 들어오면 JSP 페이지는 자신이 직접 자바빈이나 따로 작성한 서비스 클래스를 이용하여 작업을 처리하고, 그 처리한 정보를 클라이언트에 출력한다. 과거에 가장 많이 사용되었던 아키텍쳐로, 간단한 페이지를 구성하거나 여러 책의 초반 예제로 많이 사용되기때문에 익숙한 방식이다. 모델 1은 다음과 같은 장점과 단점을 가지고있다.


 장점

 단점

- 구조가 단순하여 익히기가 쉽다.

- 위와 같은 이유로 숙련된 개발자가 아니더라도 구현이 용이하다.

- 출력을 위한 뷰 코드와 로직 처리를 위한 자바 코드가 함께 섞이기 때문에 JSP 코드 자체가 복잡해진다.

- JSP 코드에서 백엔드와 프론트엔드가 혼재되기 때문에 분업이 용이하지 않다.

- 코드가 복잡해져 유지보수가 어렵다.



2. 모델 2 구조



모델 2는 모든 처리를 JSP 페이지 하나가 담당하는것과는 달리 JSP페이지와 서블릿, 그리고 로직을 위한 클래스가 나뉘어 브라우저 요청을 처리한다. 모델 2를 구성하는 요소는 다음과 같다.

1. 서블릿

2. JSP

3. 자바빈 혹은 서비스 클래스

  요청이 들어오면 요청에 대한 로직 처리는 이를 처리할 모델(Model)인 서비스클래스 혹은 자바빈이 담당하고, 요청 결과는 유저에게 결과를 보여줄 뷰(View)단인 JSP에 출력되며,  이를 위한 모든 흐름 제어는 컨트롤러(Controller)서블릿에서 담당한다.



3. MVC 패턴과 모델2

즉 모델 2 구조란 MVC(Model-View-Controller) 패턴을 웹 개발에 도입한 구조이며. 모델 2와 MVC 패턴의 형태는 완전히 같은 형태를 가진다.

MVC 패턴

모델 2

 

Model

서비스 클래스 or 자바빈 

 비즈니스 로직을 처리하는 모든것들이 모델에 속한다. 컨트롤러로부터  특정 로직에 대한 처리 요청(ex: 게시판 글쓰기, 회원가입, 로그인 등)이 들어오면 이를 수행하고 수행 결과를 컨트롤러에 반환한다. 필요한 정보는 request 객체나 session 객체에 저장하기도 한다.

View 

JSP 페이지 

 클라이언트에 출력되는 화면을 말한다. 모델1과 달리 로직 처리를 위한 코드가 내포되어 있지 않다. 요쳥 결과의 출력 뿐만 아니라 컨트롤러에 요청을 보내는 용도로도 사용된다. request 객체나 session 객체에 저장된 정보를 토대로 화면을 출력한다.

Controller 

서블릿 

 MVC 패턴(모델 2)모든 흐름 제어를 맡는다. 브라우져로부터 요청이 들어오면, 어떤 요청인지를 분석하여 이 요청을 처리하기 위한 모델을 사용하여 처리한다. 사용한 모델로부터 처리 결과를 받으면 추가로 처리하거나 가공해야할 정보가 있다면 처리 후 request 객체나 session객체에 저장하고, 뷰(JSP 페이지)를 선택하여 foward나 redirect 하여 클라이언트에 출력한다.


모델 2(MVC 패턴)은 모델1의 단점에 의해 탄생했기 때문에, 모델1이 가지고있는 모든 단점들을 해소하였지만 반대로 다루기 어렵다는 단점이 있다.


 장점

 단점

- 출력을 위한 뷰 코드와 로직 처리를 위한 자바 코드를 분리하기 때문에 JSP 모델1에 비해 코드가 복잡하지 않다.

- 뷰, 로직처리에 대한 분업이 용이하다.

- 기능에 따라 분리되어있기 때문에 유지보수가 용이하다.

- 구조가 복잡하여 습득이 어렵고 작업량이 많다.

- JAVA에 대한 깊은 이해가 필요하다.


모델 1 VS 모델 2

모델 2가 뒤늦게 나왔다고 무조건 장점만 가지고 있는 것은 아니다. 모델 2는 규모가 큰 프로젝트나 업데이트가 빈번한 프로젝트엔 용이할지는 모른다. 하지만 규모가 많이 크지 않고 업데이트가 적은 프로젝트일 경우엔 쓸대없이 복잡한 형태로 작업량이 늘어날 뿐이다. 이 경우에는 간단한 모델 1으로 개발하는게 더 나을수도 있다. 모델 1과 모델 2은 완전히 다른 장점과 단점을 가지고 있으므로 하나만 무조건적으로 사용한다기보단 상황에따라 적절한 선택이 필요할 것 같다. 


'JAVA > JSP,Servlet' 카테고리의 다른 글

커넥션풀(Connection Pool) - DBCP 예제  (0) 2016.02.08

+ Recent posts