servlet +JSP 연결

moon.kick·2025년 5월 15일

review

목록 보기
4/5
post-thumbnail

아주 중요한 질문입니다!
JSP 파일과 서블릿(Controller) 연결 구조를 아래와 같이 정리할 수 있습니다.


1. 폴더 구조 예시

src
 └─ main
     ├─ java
     │   └─ web.mvc.controller
     │         ├─ AccommodationController.java
     │         └─ AdminController.java
     └─ webapp
         └─ WEB-INF
             └─ views
                 ├─ accommodation
                 │     ├─ list.jsp
                 │     ├─ view.jsp
                 │     └─ form.jsp
                 ├─ admin
                 │     ├─ login.jsp
                 │     └─ dashboard.jsp
                 ├─ error.jsp
                 └─ index.jsp

2. 각 JSP와 Controller(서블릿) 연결

JSP 파일 경로Controller(서블릿)매핑 URL 예시설명
index.jsp(메인 컨트롤러 or 직접 접근)index.jsp메인 페이지
/WEB-INF/views/accommodation/list.jspAccommodationController.java/accommodation/list.do숙소 목록
/WEB-INF/views/accommodation/view.jspAccommodationController.java/accommodation/view.do숙소 상세
/WEB-INF/views/accommodation/form.jspAccommodationController.java/accommodation/form.do숙소 등록/수정 폼
/WEB-INF/views/admin/login.jspAdminController.java/admin/login.do관리자 로그인
/WEB-INF/views/admin/dashboard.jspAdminController.java/admin/dashboard.do관리자 대시보드
/WEB-INF/views/error.jsp모든 컨트롤러에서 에러 발생 시(포워딩)공통 에러 페이지

3. 연결 흐름 예시

  1. 클라이언트가 /accommodation/list.do 요청
  2. AccommodationController가 요청 처리
    • DAO/Service에서 데이터 조회
    • request.setAttribute("accommodationList", ...)
    • RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/views/accommodation/list.jsp");
    • dispatcher.forward(request, response);
  3. list.jsp에서 EL/JSTL로 데이터 출력

4. web.xml 또는 어노테이션 매핑 예시

web.xml

<servlet>
    <servlet-name>AccommodationController</servlet-name>
    <servlet-class>web.mvc.controller.AccommodationController</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>AccommodationController</servlet-name>
    <url-pattern>/accommodation/*</url-pattern>
</servlet-mapping>

어노테이션 매핑 예시

@WebServlet("/accommodation/*")
public class AccommodationController extends HttpServlet { ... }

5. 정리

  • JSP 파일은 직접 접근이 아니라 Controller에서 forward로 연결
  • Controller가 URL 패턴을 받아서, 내부적으로 JSP로 포워딩
  • JSP는 WEB-INF/views 하위 폴더에 위치 (직접 URL로 접근 불가, 반드시 서블릿을 통해 접근)

궁금한 특정 JSP와 Controller 연결 예시가 필요하면 파일명을 말씀해 주세요!



고쳐줘...

네, 좋습니다! 제가 놓친 부분이나 더 개선할 수 있는 부분이 있다면 가차없이 말씀드릴게요! 😉

지금까지 보여주신 구조에서는 크게 틀린 부분은 없었지만, 조금 더 세부적으로 살펴보면서 몇 가지 의견을 드려볼게요.

1. src/main/webapp 아래 파일들의 역할 명확화 및 폴더 구조:

  • index.html, mypage.html, property-detail.html과 같은 HTML 파일들은 웹 페이지의 구조를 나타내는 정적 파일입니다. 이 파일들이 사용자에게 직접 제공되는 페이지라면 현재 위치가 적절합니다.

  • script.jsstyle.css는 각각 자바스크립트 파일과 CSS 파일로, 웹 페이지의 동적인 동작과 스타일을 정의합니다. 일반적으로 이러한 정적 리소스들은 resources 또는 static과 같은 폴더를 만들어 그 안에 하위 폴더 (js, css)로 관리하는 것이 관례입니다. 이렇게 하면 파일의 종류별로 관리가 용이해지고, 빌드 도구나 웹 서버 설정에서도 더 명확하게 처리할 수 있습니다.

    src/main/webapp
        ├── WEB-INF/
        ├── resources/
        │   ├── css/
        │   │   └── style.css
        │   └── js/
        │       └── script.js
        ├── index.html
        ├── mypage.html
        ├── property-detail.html
        └── web/
            └── images/
  • properties.json 파일은 설정 정보를 담고 있는 JSON 파일일 가능성이 있습니다. 이 파일이 웹 애플리케이션의 클라이언트 측에서 사용되는 설정이라면 현재 위치도 괜찮지만, 서버 측 설정이라면 src/main/resources 폴더 아래에 두는 것이 더 일반적입니다.

2. JSP 파일들의 폴더 구조 심화 (선택 사항):

  • WEB-INF/views 아래에 accommodation, admin 폴더 외에도 기능별로 더 세분화된 폴더를 만드는 것을 고려해볼 수 있습니다. 예를 들어, 회원 관리 기능이 있다면 member 폴더를 만들고, 그 안에 로그인, 회원 가입, 회원 정보 수정 등의 JSP 파일을 둘 수 있습니다. 이는 프로젝트 규모가 커질수록 파일들을 체계적으로 관리하는 데 도움이 됩니다.

3. 패키지 구조의 역할 명확성:

  • web.mvc.dao, web.mvc.dto, web.mvc.service 등의 패키지들은 MVC 패턴에서 각 계층의 역할을 명확히 분리하는 데 중요합니다.

    • dao (Data Access Object): 데이터베이스와 상호작용하는 로직을 담당합니다.
    • dto (Data Transfer Object): 계층 간 데이터 전송을 위한 객체를 담습니다.
    • service: 비즈니스 로직을 수행하는 클래스들을 포함합니다.
    • controller: 사용자 요청을 받아들이고 모델과 뷰를 연결하는 역할을 합니다.
    • exception: 애플리케이션에서 발생하는 예외들을 정의합니다.
    • filter: 요청과 응답을 가로채서 특정 작업을 수행합니다. (예: 인증, 로깅)
    • listener: 웹 애플리케이션의 이벤트 발생을 감지하고 처리합니다. (예: 애플리케이션 시작/종료 시 동작)
    • util: 여러 곳에서 공통적으로 사용되는 유틸리티 클래스들을 담습니다.

    각 패키지의 역할을 명확히 이해하고 그에 맞게 클래스들을 배치하는 것이 중요합니다.

4. build 폴더와 src 폴더:

  • build 폴더는 프로젝트를 빌드했을 때 생성되는 결과물 (컴파일된 클래스 파일, war 파일 등)이 위치하는 곳입니다. 이 폴더는 개발자가 직접 관리하는 소스 코드가 아니므로, 현재 구조는 적절합니다.
  • src 폴더는 실제 개발하는 소스 코드를 담는 루트 폴더이며, main과 같은 하위 폴더를 포함하는 구조도 표준적입니다.

정리하자면, 현재 구조는 기본적인 웹 애플리케이션 구조로서 훌륭합니다. 다만, 프로젝트의 규모가 커지거나 더 체계적인 관리를 원하신다면 정적 리소스 폴더 구조를 개선하고, 각 패키지의 역할에 따라 소스 코드를 명확하게 분리하는 것을 고려해보시면 좋을 것 같습니다.



이렇게 JSP 파일들을 역할별, 기능별로 잘 나누어서 관리하면 다음과 같은 장점이 있습니다.

유지보수 용이성: 특정 기능을 수정하거나 업데이트할 때 관련된 파일만 찾아서 수정하면 되므로 편리합니다.
코드 가독성 향상: 파일 이름과 폴더 구조만 봐도 어떤 내용을 담고 있는지 쉽게 파악할 수 있습니다.
협업 효율 증대: 여러 개발자가 함께 작업할 때 각자 담당하는 기능의 파일들을 쉽게 찾고 이해할 수 있습니다.
결론적으로, JSP 파일들을 만드시고 폴더 구조를 잡으신 것은 아주 적절하며, 웹 애플리케이션의 View 계층을 체계적으로 관리하기 위한 좋은 시작입니다!

profile
@mgkick

0개의 댓글