Spring의 View 생성 방법들 - 1. View와 비지니스로직이 결합된 형태

Hansu Kim·2022년 4월 12일
0

Spring MVC

목록 보기
4/6

HttpRequest의 응답페이지를 어떻게 생성하느냐는 여러가지 방법이 있다.
여러 포스트로 나눠 작성예정이며, 이번 포스트는 M

1. Servlet을 통한 View 생성

HttpResponse에 HTML 코드를 직접 작성하여 리턴해주는 방식이다.

Spring에서 HttpServlet 클래스 상속받고, service() 메소드 오버라이딩을 통해 HttpServletResponse의 값을 변경할 수 있다.
Http Response Message를 통해 페이지를 직접 리턴해주고 싶은 경우, getWriter() 메소드로 HTML 코드를 직접 작성해주어야 한다.

이 방식은 지저분해보인다.

@WebServlet(name = "memberFormServlet", urlPatterns = "/servlet/members/new-form")
public class MemberFormServlet extends HttpServlet {

    private MemberRepository memberRepository = MemberRepository.getInstance();

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");

        PrintWriter w = resp.getWriter();
        w.write("<!DOCTYPE html>\n" +
                "<html>\n" +
                "<head>\n" +
                "    <meta charset=\"UTF-8\">\n" +
                "    <title>Title</title>\n" +
                "</head>\n" +
                "<body>\n" +
                "<form action=\"/servlet/members/save\" method=\"post\">\n" +
                "    username: <input type=\"text\" name=\"username\" />\n" +
                "    age:      <input type=\"text\" name=\"age\" />\n" +
                " <button type=\"submit\">전송</button>\n" + "</form>\n" +
                "</body>\n" +
                "</html>\n");

    }
}

2. JSP를 사용하여 View 생성

JSP를 활용하여 HTML 페이지 내에 java 코드를 사용하고, 응답시 페이지를 동적으로 완성시켜 리턴해주는 방식이다.

이 방식은 HTML 작업을 깔끔하게 jsp페이지에서 하되, 동적요소가 필요한 부분에만 java 코드를 적용했다.

하지만 이 방식도 지저분해보인다.
비지니스 로직 부분과 HTML 뷰 부분이 하나의 jsp 파일에 합쳐져있기 때문이다.

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    //request, response servlet은 그냥 사용 가능하게 JSP에서 문법상 지원됨
    MemberRepository memberRepository = MemberRepository.getInstance();

    System.out.println("MemberSaveServlet.service");
    String username = request.getParameter("username");
    int age = Integer.parseInt(request.getParameter("age"));

    Member member = new Member(username, age);
    memberRepository.save(member);
%>
<html>
<head>
    <title>Title</title>
</head>
<body>
성공
<ul>
    <li>id=<%=member.getId()%></li>
    <li>username=<%=member.getUsername()%></li>
    <li>age=<%=member.getAge()%></li>
</ul>
<a href="/index.html">메인으로</a>
</body>
</html>

MVC 패턴의 필요

위의 2가지 케이스의 경우, 비지니스 로직 수행과 View 생성을 위한 코드가 합쳐져 있어 코드 가독성 문제가 있었으며 객체지향적이지 못하게 동작하는 문제점이 있었다.

그에 따라 MVC 패턴이 등장했으며, 해당 내용은 다음 포스트에서 다룰 예정이다.

0개의 댓글