[Spring] 회원 관리 웹 애플리케이션 JSP 리팩토링

2025. 6. 22. 12:14·Spring/MVC
 

[Spring] 회원관리 웹 애플리케이션 요구 사항 및 Servlet 구현 (A.K.A 타자연습)

이번에는 회원 관리 웹 애플리케이션을 간단하게 구현 해볼 것이다.서블릿, JSP , MVC 패턴으로 차차 리팩토링 할 예정인데, 이번 포스팅에선 먼저 웹 애플리케이션 요구 사항에 대한 코드를 작성

bdisappointed.tistory.com

이전 글에서 작성했던 서블릿 형태를 JSP로 리팩토링 해보겠다.

먼저 JSP 라이브러리를 Gradle에 추가해야한다.

이후 JSP 문서는 항상 시작할 때 다음과 같은 문장을 넣어야 한다.

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

회원 등록 폼 JSP

//파일명 : new-form.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<form action="/jsp/members/save.jsp" method="post">
  username: <input type="text" name="username"  />
  age: <input type="text" name="age"  />
  <button type="submit">전송</button>
</form>
</body>
</html>

기존에 만들었던 HTML과 거의 똑같다. JSP는 내부에서 서블릿으로 변환 되기 때문에 기존 코드와 유사한 코드를 유지한다.


회원 저장 JSP

//파일명 : save.jsp
<%@ page import="hello.servlet.domain.member.Member" %>
<%@ page import="hello.servlet.domain.member.MemberRepository" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    //request, response 는 그냥 쓸 수 있다
    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>
</head>
<body>
성공
<ul>
    <li>id=<%=member.getId()%></li>
    <li>id=<%=member.getUsername()%></li>
    <li>id=<%=member.getAge()%></li>
</ul>
<a href="/index.html">메인</a>
</body>
</html>

해당 저장 코드부터 JSP의 진가를 확인할 수 있는데, HTML 문법과 자바 코드가 한 파일 안에 공존하고 있다 !

즉 JSP 문법 중 <% ~~ %> 안에는 자바 코드를 입력할 수 있고, <%= ~~ %> 안에는 자바 코드를 출력할 수 있다.

결론적으로 HTML 중심적이면서 중간중간 자바 코드를 추가해 사용할 수 있게 된 것이다 !


회원 목록 JSP

잠깐 API 의 좋은 설계 원칙을 떠올려보자.

리소스를 기준으로 HTTP 메서드를 통해 구분하고, 필요하면 구분 메서드를 통해 API를 설계 했었다.

이번에는 members를 모두 조회하는 JSP 코드를 만들어보자.

//파일명 : members.jsp
<%@ page import="hello.servlet.domain.member.MemberRepository" %>
<%@ page import="hello.servlet.domain.member.Member" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    MemberRepository memberRepository = MemberRepository.getInstance();
    List<Member> members = memberRepository.findAll();
%>
<html>
<head>
    <title>Title</title>
</head>
<body>
<a href="/index.html">메인</a>
<table>
    <thead>
    <th>id</th>
    <th>username</th>
    <th>age</th>
    </thead>
    <tbody>
    <%
        for (Member member : members) {
            out.write("   <tr>");
            out.write("      <td>" + member.getId() + " </td>");
            out.write("      <td>" + member.getUsername() + " </td>");
            out.write("      <td>" + member.getAge() + " </td>");
            out.write("   </tr>");
        }
    %>
    </tbody>
</table>
</body>
</html>

회원 리포지토리를 조회하고, 결과를 List에 담아 for문까지 코드 내부에서 사용할 수 있게 되었다.

참고로 이전 HTML과 결과는 완전 동일하다.


서블릿과 JSP의 한계

처음 서블릿으로 구현할 때는 코드를 작성하기가 참 까다롭고, 코드의 가독성도 최악이었다.(또한 오타가 하나라도 나면 오류 찾기 힘듦)

그래서 JSP를 도입하여 뷰를 생성하는 HTML 작업을 간소화 하고 중간에 동적으로 변하는 부분을 자바 코드로 처리하여 좀 더 나은 코드를 작성해보았다.

서블릿의 한계를 해결하기 위해 JSP를 도입했지만, 위 save.jsp 처럼 HTML 절반, 자바 코드 절반이 적혀 있는 걸 보면 JSP가 너무 많은 역할을 가지고 있는 것을 볼 수 있다.

또한, 리포지토리, 자바 코드등 다양한 중요 코드가 노출 될 수도 있다는 문제점이 존재한다.

우리는 JSP의 부담을 최대한 줄이기 위해 JSP 는 화면(뷰)를 그리는데만 집중시키도록 하고, 중요한 비즈니스 로직들은 서블릿처럼 다른 곳에서 처리하도록 구분해주는 것이 좋다. (이래서 등장한 MVC 패턴)

다음 포스팅부턴 JSP의 역할과 부담을 차차 줄여보자 !

 

'Spring > MVC' 카테고리의 다른 글

[Spring] 서블릿과 JSP로 MVC 흉내내기 , 그리고 한계점  (0) 2025.06.22
[Spring] MVC 패턴의 개요 - JSP는 만능이지만 만능이 아님  (1) 2025.06.22
[Spring] 회원관리 웹 애플리케이션 요구 사항 및 Servlet 구현 (A.K.A 타자연습)  (0) 2025.06.21
[Spring] HTTP Response 데이터 처리하기  (0) 2025.06.21
[Spring] HttpServletResponse와 제공 메서드  (0) 2025.06.21
'Spring/MVC' 카테고리의 다른 글
  • [Spring] 서블릿과 JSP로 MVC 흉내내기 , 그리고 한계점
  • [Spring] MVC 패턴의 개요 - JSP는 만능이지만 만능이 아님
  • [Spring] 회원관리 웹 애플리케이션 요구 사항 및 Servlet 구현 (A.K.A 타자연습)
  • [Spring] HTTP Response 데이터 처리하기
xuv2
xuv2
집에 가고 싶다
  • xuv2
    xuvlog
    xuv2
  • 전체
    오늘
    어제
    • 전체 글 모아보기 (173) N
      • 잡담 (9)
      • 도전 , 자격증 (2)
      • Error (6) N
      • Java (23)
      • Spring (40)
        • Core (10)
        • MVC (21)
        • Thymeleaf (9)
      • DataBase (6)
        • Database Modeling (4)
        • SQL (2)
      • HTTP (11)
      • Network (17)
      • Software Engineering (3)
      • Operating System (3)
      • Algorithm (16)
      • Project (19)
        • Web (9)
        • iOS (8)
        • Python (1)
        • Toy Project (1)
      • A.I (13)
      • Linux (5)
  • 블로그 메뉴

    • 홈
  • 링크

    • Github
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
xuv2
[Spring] 회원 관리 웹 애플리케이션 JSP 리팩토링
상단으로

티스토리툴바