프론트 컨트롤러 개념 복습
- 데이터를 Request에서 가져와서 자바에서 사용할 수 있게 바꾸는 것을 파싱(parsing) 한다고 한다
- 컨트롤러 기능이 많아지면 유지보수가 어려워지기 때문에, 이제는 연관된 기능끼리 패키지로 묶어서 관리해야 한다.
- Controller = Servlet 이고, 그 안에 요청을 모아서 처리하는 것을 Front Controller 패턴이라고 한다.
즉, 앞으로는 JSP → Servlet 여러 개 방식이 아니라 "모든 요청을 한곳에서 받아서 Action 객체에게 넘기는 방식" 으로 발전한다.
필터(Filter) 설정 이유
- web.xml에서 *.do 를 매핑한다.
- 이렇게 하면 모든 요청이 .do 확장자로 들어오고, 공통 처리(인코딩 포함)를 필터에서 처리할 수 있다.
✔ 장점
- 코드 중복 제거 → 결합도 낮춤, 응집도 높임
- 유지보수 쉬움
동기 vs 비동기 요청 시 컨텍스트 경로 사용 여부
| 요청방식 | 예시컨텍스트 | 필요 | 여부이유 |
| 동기 | 로그인, 회원가입, 글쓰기 submit | ❌ 필요 없음 | 톰캣이 실행 주체라 현재 위치를 알고 있음 |
| 비동기(AJAX) | 검색 자동완성, 중복검사 | ✔ 필요함 | 스크립트에서 호출 → 현재 컨텍스트를 알 수 없음 |
서블릿 매핑 규칙
<url-pattern>/JoinServlet</url-pattern> → 전 세계적인 약속
<url-pattern>*.do</url-pattern> → `/` 안 붙임 (왜냐하면 *가 모든 행동 수행하기 때문)
프론트 컨트롤러가 필요한 진짜 이유
지금까지는 요청마다 if문으로 분기 처리했다.
if(command.equals("MAIN")) { ...
} else if(command.equals("JOIN")) { ...
} else if ...
여기에는 문제점이 여러가지가 있다
- 가독성이 떨어짐
- 기능이 늘어날수록 else if 지옥
- 객체를 매번 new → 메모리 낭비
여기서 등장한 개념이 바로 싱글톤 패턴(Singleton Pattern) 과 팩토리 패턴(Factory Pattern)이다
싱글톤 개념 정리
"하나만 있어도 되는 객체는 딱 하나만 유지해야 한다."
예시로 피카츄의 백만 볼트가 필요할 때 새로운 피카츄를 데려오는 게 아니라
이미 있는 피카츄를 다시 사용해야 한다.
Factory Pattern 적용
요청(command)에 따라 실행할 Action 객체를 반환해주는 구조 만들기.
public class ActionFactory {
private Map<String, Action> map; //멤버변수
//스트링 = 요청
//액션 = 행동
//a를 주면 애플을 준다
//b를 주면 바나나를 준다
public ActionFactory() {// 초기화
map= new HashMap<>();
//맵 = 추상클래스이기 때문에 해쉬맵으로 초기화한다
map.put("/mainPage.do", new MainPageAction());
//메인페이지 줘-> 메인페이지 액션 실행
map.put("/write.do", new WriteAction());
map.put("/deleteMember.do", new DeleteMemberAction());
//내가 누를거 = 딜리트멤버 = 회원탈퇴
//눌렀을때 실행될 행동 = 딜리트멤버액션 실행 = 회원탈퇴 기능실행
// ★겟 액션 만들기
public Action getAction(String commend) {
return map.get(commend);
}
}
command를 주면 Action을 준다 → setter/getter가 아니라 팩토리의 기능이다
NullPointerException 이 흔하게 발생하는 이유
개발자가 factory 객체를 생성하지 않아서 생기는 에러다
즉, 아래 코드가 없으면 에러 난다:
ActionFactory factory = ActionFactory.getInstance();
Factory 패턴 적용 후 변화
| Before | After |
| else-if command 분기 | ❌ 사라짐 |
| new Action() 반복 생성 | ❌ Factory에서 한 번만 생성 |
| 유지보수 불편 | ✔ 요청 추가 시 map.put만 추가 |
성능 관점
- 단점: 초기 로딩 속도 느릴 수 있음 (처음에 객체 다 만들기 때문)
- 장점: 이후 모든 요청은 즉시 실행 → 성능 매우 높음
👉 그래서 Spring에서도 Bean 단위로 이 구조가 적용됨.
✨ 디자인 패턴 정리
| 패턴 | 설명 |
| MVC | 협업에 유리, 병렬 개발 가능 |
| Singleton | 객체 1개로 유지 |
| Factory | 명령 → 결과 Action 반환 |
| Template Pattern | 반복 로직 공통화 → JDBCUtil 같은 구조 |
'🐢 꼬부기 LV.1 | 개념•기초 > 💧물대포(핵심개념)' 카테고리의 다른 글
| 결제 API 과정 이해 (0) | 2025.12.05 |
|---|---|
| 템플릿 페이지 수정할때 팁 (0) | 2025.12.02 |
| 로그인 API이해하기 (0) | 2025.11.28 |
| SQL 시험 오답노트 정리 (0) | 2025.11.13 |
| 자바스크립트 문법 정리 (0) | 2025.11.13 |