좋아, 정말 중요한 질문이야!
“왜 컨트롤러는 controller 폴더에, 핸들러맵핑리스너는 listener 폴더에 따로 두는가?”
→ 이건 단순한 폴더 정리가 아니라, 코드의 역할과 책임(=관심사) 를 분리한 거야.
내가 너 준 코드 기준으로 구조랑 동작 흐름도 같이 설명해줄게!
src/
├── web/
│ ├── mvc/
│ │ ├── controller/
│ │ │ ├── DispatcherServlet.java ← 입구 서블릿
│ │ │ ├── InsertController.java ← 각 역할 도우미
│ │ │ ├── SelectController.java
│ │ │ ├── UpdateController.java
│ │ │ └── Controller.java ← 인터페이스 (규칙서)
│ │ ├── ModelAndView.java ← 결과+이동정보 담은 쪽지
│ │ ├── listener/
│ │ │ └── HandlerMappingListener.java ← 서버 시작할 때 컨트롤러들 준비
서버 시작! (Tomcat 실행)
HandlerMappingListener가 자동으로 실행됨actionMapping.properties 파일 읽음"insert" = InsertController 클래스 같은 키/값으로 매핑InsertController, SelectController 등 미리 객체 만들어 Map에 저장application.setAttribute("map", map) 해서 서버 전체에서 쓸 수 있게 저장브라우저에서 요청 발생
/front?key=insert
DispatcherServlet이 요청 받음
key=insert 받음 → map.get("insert") 해서 InsertController 찾아냄InsertController.handleRequest() 호출InsertController 동작
new ModelAndView("index.jsp", true) 반환DispatcherServlet
ModelAndView 보고 redirect 또는 forward로 결과 페이지 이동| 폴더 | 하는 일 (역할) |
|---|---|
| controller/ | 사용자의 요청을 실제로 처리하는 "실행 부서" |
| listener/ | 서버가 켜질 때 한 번만 실행되어서, 컨트롤러들을 "준비하는 관리자" 역할 |
controller/는 매번 실행되는 동작 담당자listener/는 딱 한 번! 서버 시작 시 컨트롤러들을 등록만 하는 관리자→ 관심사 분리(SOC: Separation of Concerns) 라고 해
→ 이렇게 해야 코드가 깔끔하고, 유지보수도 쉬워!
Listener는 “컨트롤러를 미리 준비해놓는 관리자”고,
Controller는 “실제로 요청을 처리하는 일꾼”이야.
→ 그래서 파일 위치도 나눈 거야!
필요하면 resources/actionMapping.properties 내용도 예시로 다시 보여줄게!
그리고 이 흐름 기억만 잘하면, 앞으로 모든 MVC 프레임워크도 쉽게 이해하게 될 거야! 😎
와, 진짜 잘 보고 있어! 👀
이 질문 정말 수준 높아. "왜 resources 폴더에 actionMapping.properties를 따로 두냐?"
→ 이건 개발자들이 코드와 설정파일을 분리하는 아주 중요한 습관이야!
resources 폴더가 왜 따로 있는지 쉽게 설명할게!
resources폴더는 코드가 아니라 설정(config) 을 보관하는 전용 장소야!
.java로 되어 있고 컴파일이 필요함..properties 파일은 그냥 읽기만 하면 되는 설정이야.resources/ 폴더로 따로 분리해두는 게 규칙!user=web.mvc.controller.UserController
이 줄만 바꾸면,
HandlerMappingListener는 새로운 클래스를 코드 안 바꾸고도 자동으로 연결할 수 있어!
예를 들어 나중에 UserController → NewUserController로 바꾸고 싶을 때:
user=web.mvc.controller.NewUserController
이렇게 바꾸기만 하면 코드 수정 없이 클래스만 바뀜 🔄
즉, 코드는 건드리지 않고 동작만 바꾸는 힘이 생기는 거야!
resources 폴더 안의 설정 파일들은.jar, .war, .zip 파일로 묶을 때도 따로 관리할 수 있음.| 종류 | 위치 | 역할 |
|---|---|---|
.java 파일들 | src/java/ | 실제로 프로그램 로직을 수행 |
.properties, .xml, .yml | src/resources/ | 설정값, 외부에서 바꿀 수 있는 정보 저장 |
resources/actionMapping.properties는 "누구한테 어떤 일을 맡길지 알려주는 전화번호부" 같은 역할이고,
이걸 코드랑 따로 둬야 나중에 코드는 그대로, 설정만 바꿔도 동작이 바뀌게 만들 수 있어!