[Java 풀스택 과정 강의] 3월 27일

부트캠프 일지/Java 풀스택 과정 강의
2026.03.27
반응형
※ TIL와는 별개로 적는 개인 일지라서 말은 좀 편하게하는 페이지입니다.
일지이기 때문에 일기의 성격이 더 강합니다.

 

Exception 처리

간단히 말하면 예외처리이다. 핵심은 JSP 맨 위에 있는 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"
         errorPage="addException.jsp" %>

 

이 `errorPage`이다. 오류가 나면 여기에 할당된 `addException.jsp`로 넘어가게 된다. `addException.jsp`에서도 `isErrorPage="true"` 처리를 해줘야 한다. 또한 예외 종류에 따라서 다르게 나타난다.

 

    ====== toString() 내용 ======= <br>
   <h1><%= exception.toString() %> </h1>
    =============== getMessage()내용 ==========<br>
   <h1><%= exception.getMessage() %> </h1>
   ============= printStackTrace() 내용 =======<br>
   <h1><%= exception.getStackTrace()  %> </h1>

 

`web.xml`을 통해서 `<error-page>`를 삽입하여서도 가능하다.

 

  <error-page>
    <error-code>404</error-code>
    <location>/err/error_404.jsp</location>
  </error-page>

  <error-page>
    <error-code>500</error-code>
    <location>/err/error_500.jsp</location>
  </error-page>

 

이런식으로 `<error-code>`에 따라 넘어가는 페이지가 다르게 나타난다.

 

 

서블릿 URL 패턴

서블릿 URL 패턴은 클라이언트(브라우저)가 요청한 URL 주소를 어떤 서블릿 클래스가 처리할지 연결(매핑)해 주는 주소 규칙이다. `@WebServlet` 애노테이션과 `web.xml` 매핑 방식이 있다. 더 자주 사용되는건 `@WebServlet` 와일드카드 방식이다.

 

`@WebServlet` 애노테이션

`@WebServlet("/hello")`와 같이 uri를 넣어 애노테이션하는 방식이다. 

 

@WebServlet("/hello")
public class HelloServlet extends HttpServlet { ... }

 

덧붙여서 `/*` 을 붙여 와일드카드를 사용하는 것도 가능하다.

 

`web.xml` 매핑

<servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/hello</url-pattern>
</servlet-mapping>

 

위와 같이 `<servlet-mapping>` 안에 넣을 서블릿과 url-pattern을 넣어 사용하는 방식이다.

 

 

Front Controller 패턴

Front Controller는 클라이언트의 요청을 한곳(대표 서블릿)으로 모아서 처리하는 구조다.

요청마다 서블릿을 새로 만들기보다, 진입점을 하나로 두고 안에서 분기하는 쪽에 가깝다.

 

수업에서 Command 패턴과 같이 나오곤 하는데, 내가 만든 실습(`FrontContMember`)은 인터페이스로 Command 클래스를 쪼갠 형태라기보다, Front Controller + URL 분기에 가깝다.

 

왜 쓰나

  • 요청 처리 흐름을 한곳에서 보기 쉽다.
  • 공통 처리(인코딩, 로그인 체크 등)를 넣기 좋다.
  • View로 넘기는 방식(forward)을 통일하기 쉽다.

다만 Front Controller 하나에 분기가 계속 쌓이면 서블릿이 비대해진다. 그래서 이론상으로는 Command 인터페이스로 작업을 분산하기도 한다.


실습 구조

회원/상품을 각각 하나의 컨트롤러 서블릿으로 받았다.

 

@WebServlet("/member/*")
public class MemberController extends HttpServlet { ... }
@WebServlet("/product/*")
public class ProductController extends HttpServlet { ... }


실제 요청은 이런 식이다.

  • `/member/listMembers.do`
  • `/member/addMember.do`
  • `/product/listProducts.do`

 


서블릿 안에서는 `getPathInfo()`로 뒤에 붙은 경로만 꺼내 분기한다.

String action = request.getPathInfo(); // 예: /listMembers.do

if (action == null || action.equals("/listMembers.do")) {
    // 목록 조회 → listMembers.jsp
} else if (action.equals("/addMember.do")) {
    // 등록 처리 → 다시 목록으로
} else if (action.equals("/modMember.do")) {
    // 수정 처리
} else if (action.equals("/delMember.do")) {
    // 삭제 처리
}

 


즉 URL 패턴(/member/*)이 입구이고, *.do 경로가 무슨 일인지를 알려주는 신호다.


MVC로 보면

  • `Controller` MemberController / ProductController (요청 분기, nextPage 결정)
  • `Model` MemberDAO, ProductDAO + VO
  • `View` listMembers.jsp, memberForm.jsp 등

컨트롤러는 DAO를 호출해 데이터를 준비하고, RequestDispatcher로 JSP에 forward한다.
화면(JSP)은 요청을 직접 받지 않고, 컨트롤러가 넘겨준 결과만 보여준다.

반응형
«   2026/07   »
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