상세 컨텐츠

본문 제목

MVC 패턴을 쓰는 이유 예제를 예제로 알아보자.

IT/프로그래밍

by James Lee. 2015. 12. 6. 20:44

본문

이 글은 MVC패턴을 모르는 사람도 쉽게 이해 할 수 있도록 도움을 주기 위하여 작성되었다. 

MVC패턴의 사전적 정의라던지 하는 내용은 다루지 않는다.

(위키사전에 검색하면 매우 상세히 나옵니다.)


하나의 포스팅으로 작성하면 글이 너무 길어져 집중도와 이해도가 떨어질 수 있으므로 몇 개의 포스팅으로 나눠서 작성하도록 하겠다. 

(사실 내가 귀찮은 것도 있지만..)


MVC가 Model - View - Controller의 약자라는 것은 지금 봐도 감이 안잡힐 것이다.


이에 대해서는 나중에 설명하고 우선 차근차근히 보도록 하자.


나는 인과율이라는 말을 좋아한다. 어떤 현상에는 반드시 그 원인이 있다는 것이다.


MVC라는 패턴이 등장한데에도 반드시 이유가 있을 것이다.


MVC를 안쓰면 뭔가 문제가 되었었던 것일까?


자, 백문이 불여일견이라고 MVC를 사용한 코드와 사용하지 않은 코드를 비교해보자.


먼저 MVC를 사용하지 않고 Servlet으로만 기능을  구현해 보겠다.


EmailSender라는 서블릿을 생성한다.


 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
package src;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
@WebServlet("/EmailSender")
public class EmailSender extends HttpServlet
{
    private static final long serialVersionUID = 1L;
 
    public EmailSender()
    {
        super();
    }
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
    }
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
    }
}
cs


그리고 수신자의 정보를 표현하기 위해 User라는 클래스를 작성한다. 아직까지 그닥 중요한건 없다.


 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package src;
 
public class User
{
 
    private String name;
    private String email;
    private int age;
 
    public User(String name, String email, int age)
    {
        super();
        this.name = name;
        this.email = email;
        this.age = age;
    }
 
    public String getName()
    {
        return name;
    }
 
    public String getEmail()
    {
        return email;
    }
 
    public int getAge()
    {
        return age;
    }
}
 
cs



이제 Servlet에 사용자의 정보를 나타내기 위하여 간단한, 정말 간단한 코드를 써넣어보자.


 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 
package src;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
@WebServlet("/EmailSender")
public class EmailSender extends HttpServlet
{
    private static final long serialVersionUID = 1L;
 
    public EmailSender()
    {
        super();
    }
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        User user = new User("이종호""hello@naver.com"24);
        PrintWriter printWriter = response.getWriter();
 
        printWriter.write("<!DOCTYPE html>");
        printWriter.write("<html>");
        printWriter.write("<head>");
        printWriter.write("<meta charset=\"UTF-8\">");
        printWriter.write("<title>Insert title here</title>");
        printWriter.write("</head>");
        printWriter.write("<body>");
 
        printWriter.write("이름 : " + user.getName() +"<br>");
        printWriter.write("이메일 : " + user.getEmail() +"<br>");
        printWriter.write("나이 : " + user.getAge() +"<br>");
        
        printWriter.write("</body>");
        printWriter.write("</html>");
    }
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
    }
}
cs


Java의 로직과 Html 문법이 섞여 있으니 보기가 그렇게 좋아보이진 않는다.

이것을 가독성이 좋지 않다고 한다.

그리고 매번 코드를 작성할때마다 printWriter.write에 html태그를 일일히 작성해줘야 하니 얼마나 불편한가? (아니라고 생각된다면 직접 해보는 것을 권해드립니다.)


사실 이러한 것들은 사소한 축에 속한다. 더 큰 문제가 있다.

Html과 Java의 로직이 한데 섞여있으면 나중에 Html의 소스를 변경할 때 실수로 Java의 로직(이하 비즈니스 로직이라고 한다.)을 건드리게 되어 프로그램이 정상적으로 실행되지 않을 수도 있다.

(실제로 html의 코드는 디자인과 관련이 되어 있기 때문에 수정이 매우 잦은 편이다.)


본인은 그런 실수를 하지 않을 자신이 있다면 저 예시는 매우매우 간단한 코드라는것을 생각했으면 좋겠다.

실제로 대학교 텀 프로젝트에 들어가는 코드만 하더라도 한 페이지에 100라인은 우습게 넘어간다. 

하물며 현업에서 사용하는 코드는 비교도 할 수 없이 복잡할 것이다.


그렇기 때문에 무언가 해결방법을 모색했고, 그 결과로 MVC라는 패턴이 등장한 것이다.

관련글 더보기

댓글 영역