본문 바로가기

스프링

[SPRING] 왜 학교나 학원에서 MVC 패턴을 항상 공부할까?

반응형

java 공부를 하게 되면 보통 게시판을 만들게 되는데, mvc 패턴이라는게 책이나, 수업 자료에 꼭 있기 마련이다.

 

사람이 받아쓰기를 할 때 음성이 들리면 종이에 문자를 적어서 보여주는 것 처럼

이런 행동들을 순서, 양식에 맞게 패턴을 만드는 것

 

다시 말해 개발 패턴이 Model , View, Controller 3개로 패턴이 흘러간다는 것이다.

 

MVC 패턴 
Model-View-Controller 의 약자

 

처음 배우는 입장에서 패턴은 익숙치 않고, 거부감이 들었다.

 

 

 

돌이켜보면, 리마인드 하는게 좋을 듯 하여 글을 쓰게 되었다.

 


 

 

 

MVC 모델은 2가지로 나뉘는데 MVC MODEL 1 은 예전 모델이다.

 

View 의 역할이 불분명하여 비지니스 로직이 view의 영역에 침범하는 경우가 있다.

예를 들어서 JSP 가 있다.

 

<body>
    <h1>상품 목록</h1>
    <table border="1">
        <tr>
            <th>상품 ID</th>
            <th>상품 이름</th>
            <th>가격</th>
        </tr>
        <%
            // 비즈니스 로직: 데이터베이스 연결 및 데이터 조회
            String jdbcUrl = "jdbc:mysql://localhost:3306/shop";
            String dbUser = "root";
            String dbPassword = "password";
            Connection conn = null;
            Statement stmt = null;
            ResultSet rs = null;

            try {
                Class.forName("com.mysql.cj.jdbc.Driver");
                conn = DriverManager.getConnection(jdbcUrl, dbUser, dbPassword);
                stmt = conn.createStatement();
                rs = stmt.executeQuery("SELECT id, name, price FROM products");

                while (rs.next()) {
        %>
                    <tr>
                        <td><%= rs.getInt("id") %></td>
                        <td><%= rs.getString("name") %></td>
                        <td><%= rs.getDouble("price") %></td>
                    </tr>
        <%
                }
            } catch (Exception e) {
                out.println("데이터를 불러오는 중 오류가 발생했습니다: " + e.getMessage());
            } finally {
                if (rs != null) try { rs.close(); } catch (SQLException e) {}
                if (stmt != null) try { stmt.close(); } catch (SQLException e) {}
                if (conn != null) try { conn.close(); } catch (SQLException e) {}
            }
        %>
    </table>
</body>

 

 

이렇게 VIEW 만 해줘도 어지러울 판에 DB 연결부터 데이터 호출까지...

유지 보수도 어렵고, 인수 인계도 어려운 이 모델을 언제까지 사용할 순 없었던 것 같다.

 

그렇게 MVC MODEL 2가 나오게 되는데...

 


 

MVC MODEL 2 흐름도

 

 

 

(Servlet -> JSP 이렇게 역할이 나뉜 것 밖에 바뀐 건 없다)

바뀐 점 :

1. Controller 는 명령만 내리는 구조로 변경

2. View 는 보여주는 역할만.

 

의문점

1. JSP 는 MODEL 2 에 적합하지 않은건가? MVC 2 패턴으로 개발할거면 mustache 만 사용해야하나 ?

-> 그냥 비지니스 로직을 포함하지 않고, view에 충실하면 jsp도 상관 없다.

 

2.  그럼 View를 제외한 녀석들은 mvc2 패턴을 지키려면 어떻게 해야하지 ?

-> 위와 같은 맥락으로, view 역할만 할 수 있게끔 해주면 된다.

 

예를 들어서 jsp 를 사용한다고 했을 때

isActive 를 붙여서 나오기보다는

DTO에서 데이터 가공을 마친 후 View 단에 던져주는 것이 좋다는 것!

<body>
    <h1>사용자 목록</h1>
    <table border="1">
        <tr>
            <th>사용자 ID</th>
            <th>이름</th>
            <th>가입 상태</th>
        </tr>
        <%
            // Controller가 전달한 users 목록을 처리
            List<Map<String, Object>> users = (List<Map<String, Object>>) request.getAttribute("users");
            
            for (Map<String, Object> user : users) {
                int userId = (int) user.get("id");
                String name = (String) user.get("name");
                boolean isActive = (boolean) user.get("isActive");

                // 비즈니스 로직: 가입 상태를 조건에 따라 가공
                String status = isActive ? "활성" : "비활성";
        %>
                <tr>
                    <td><%= userId %></td>
                    <td><%= name %></td>
                    <td><%= status %></td>
                </tr>
        <%
            }
        %>
    </table>
</body>

 

 


 

결론

 

MVC 2 는 각자 역할이 정확히 분리되어있기 때문에

특정 로직을 변경하거나, VIEW 의 디자인 수정이 필요할 때 등등

명확히 고쳐야 할 부분을 쉽게 찾을 수 있다.

 

이건 결국 유지 보수에 용이하고, 협업에도 큰 도움이 된다.

결국 현업에서 사용하기 좋은 개발 패턴이고

결국 결국 결국 회사 가서 쓰기 때문에 중요하고 공부해놔야 하는 가장 기본적인 내용이였던 것이다...!

 

또 전체적인 흐름을 알아야 개발이 되니까... 

 

 

근데.......일하면서 MVC 패턴 1 으로 (또는2) 개발 할건가요? 뭐 이딴 대화는 해본 적 없긴 하다..

 

반응형