핸들러맵핑리스너

moon.kick·2025년 5월 2일

좋아, 정말 중요한 질문이야!
왜 컨트롤러는 controller 폴더에, 핸들러맵핑리스너는 listener 폴더에 따로 두는가?
→ 이건 단순한 폴더 정리가 아니라, 코드의 역할과 책임(=관심사) 를 분리한 거야.

내가 너 준 코드 기준으로 구조랑 동작 흐름도 같이 설명해줄게!


🔧 구조 요약

src/
├── web/
│   ├── mvc/
│   │   ├── controller/
│   │   │   ├── DispatcherServlet.java     ← 입구 서블릿
│   │   │   ├── InsertController.java      ← 각 역할 도우미
│   │   │   ├── SelectController.java
│   │   │   ├── UpdateController.java
│   │   │   └── Controller.java            ← 인터페이스 (규칙서)
│   │   ├── ModelAndView.java              ← 결과+이동정보 담은 쪽지
│   │   ├── listener/
│   │   │   └── HandlerMappingListener.java ← 서버 시작할 때 컨트롤러들 준비

⚙️ 동작 흐름: 완벽 정리

  1. 서버 시작! (Tomcat 실행)

    • HandlerMappingListener가 자동으로 실행됨
      actionMapping.properties 파일 읽음
      "insert" = InsertController 클래스 같은 키/값으로 매핑
      InsertController, SelectController 등 미리 객체 만들어 Map에 저장
      application.setAttribute("map", map) 해서 서버 전체에서 쓸 수 있게 저장
  2. 브라우저에서 요청 발생

    /front?key=insert
  3. DispatcherServlet이 요청 받음

    • key=insert 받음 → map.get("insert") 해서 InsertController 찾아냄
    • InsertController.handleRequest() 호출
  4. InsertController 동작

    • 필요한 데이터 받아서 처리 (ex. 가입 처리)
    • new ModelAndView("index.jsp", true) 반환
  5. DispatcherServlet

    • 받은 ModelAndView 보고 redirect 또는 forward로 결과 페이지 이동

❓ 그럼 왜 controller랑 listener는 따로 폴더로 나눴을까?

폴더하는 일 (역할)
controller/사용자의 요청을 실제로 처리하는 "실행 부서"
listener/서버가 켜질 때 한 번만 실행되어서, 컨트롤러들을 "준비하는 관리자" 역할

📌 요약하자면:

  • controller/매번 실행되는 동작 담당자
  • listener/딱 한 번! 서버 시작 시 컨트롤러들을 등록만 하는 관리자

관심사 분리(SOC: Separation of Concerns) 라고 해
→ 이렇게 해야 코드가 깔끔하고, 유지보수도 쉬워!


✅ 너의 이해를 도와주는 한 줄 요약

Listener는 “컨트롤러를 미리 준비해놓는 관리자”고,
Controller는 “실제로 요청을 처리하는 일꾼”이야.
→ 그래서 파일 위치도 나눈 거야!


필요하면 resources/actionMapping.properties 내용도 예시로 다시 보여줄게!
그리고 이 흐름 기억만 잘하면, 앞으로 모든 MVC 프레임워크도 쉽게 이해하게 될 거야! 😎

와, 진짜 잘 보고 있어! 👀
이 질문 정말 수준 높아. "왜 resources 폴더에 actionMapping.properties를 따로 두냐?"
→ 이건 개발자들이 코드와 설정파일을 분리하는 아주 중요한 습관이야!


📁 resources 폴더가 왜 따로 있는지 쉽게 설명할게!

💡 정답 먼저 말하자면:

resources 폴더는 코드가 아니라 설정(config) 을 보관하는 전용 장소야!


🧭 이유 1. 코드와 설정을 명확하게 분리하기 위해

  • Java 파일들은 .java로 되어 있고 컴파일이 필요함.
  • 근데 .properties 파일은 그냥 읽기만 하면 되는 설정이야.
  • 그래서 "코드가 아닌 파일"은 다 resources/ 폴더로 따로 분리해두는 게 규칙!

🧭 이유 2. 설정만 바꿔도 동작이 바뀌게 하려고

user=web.mvc.controller.UserController

이 줄만 바꾸면,
HandlerMappingListener는 새로운 클래스를 코드 안 바꾸고도 자동으로 연결할 수 있어!

  • 예를 들어 나중에 UserControllerNewUserController로 바꾸고 싶을 때:

    user=web.mvc.controller.NewUserController
  • 이렇게 바꾸기만 하면 코드 수정 없이 클래스만 바뀜 🔄

즉, 코드는 건드리지 않고 동작만 바꾸는 힘이 생기는 거야!


🧭 이유 3. 배포하거나 서버 환경 바꿀 때 유리함

  • resources 폴더 안의 설정 파일들은
    .jar, .war, .zip 파일로 묶을 때도 따로 관리할 수 있음.
  • 서버 환경에 따라 설정값만 바꿔주면 되니까, 운영·테스트용으로 다르게 구성하기도 쉬움!

📦 실전에서는?

종류위치역할
.java 파일들src/java/실제로 프로그램 로직을 수행
.properties, .xml, .ymlsrc/resources/설정값, 외부에서 바꿀 수 있는 정보 저장

🔁 한 줄 요약!

resources/actionMapping.properties"누구한테 어떤 일을 맡길지 알려주는 전화번호부" 같은 역할이고,
이걸 코드랑 따로 둬야 나중에 코드는 그대로, 설정만 바꿔도 동작이 바뀌게 만들 수 있어!

profile
@mgkick

0개의 댓글