03.20 학습! MVC!! 🟥🟧🟨🟩🟦🟪🟫⬜⬛🫢🔔😎😊🤔😭⭐🫢

Controller : 사용자의 요청을 받고 Model과 View 간의 상호 작용을 조정하는 모듈
Model : 비지니스 로직 즉 업무(Service)를 담당하는 모듈로 필요 시 DB 연동(DAO)
View : 사용자와의 상호작용을 위한 UI를 담당하는 모듈
⭐ 왜 MVC로 나눴을까? -> AOP 분리 -> 관심사 분리 ⭐
Model 1
JSP가 Controller를 맡아 View 로직과 함께 수행
장점 : 단순함, 단점 : 스파게티
⭐ Model 2
엄격히 MVC를 따르며 Servlet이 Controller를 맡아 클라이언트 요청 접수 JSP는 화면만 관리
장점 : 명확한 구조, 단점 : 복잡성, 개발 속도
Deep Dive
Controller : Servlet
Model : java
View : JSP
🔔이제 모든 요청은 Servlet이 받는다!
웹 컴포넌트 호출 : forward
RequestDispatcher dispatcher = request.getRequestDispatcher("/gugu-result.jsp");
⭐dispatcher.forward(request, response);⭐
웹 컴포넌트 호출 : redirect
forward와 달리 외부의 리소스까지 사용 가능
response.sendRedirect("http://www.google.com");
클라이언트 요청이 두번!
/는 container root
response.sendRedirect()
vs
dispatcher.forward()
/는 contextroot
project의 규모가 커지면서 사용해야 하는 라이브러리들이 다양해짐
-> 팀원들과 버전 동기화 문제 발생
☑️ maven을 이용한 프로젝트 관리 (pom.xml!)
java 기반의 프로젝트 관리 도구로 주로 빌드 자동화와 의존성 관리에 사용
maven의 주요 기능
프로젝트 구조 표준화, 의존성 관리, 빌드 자동화
dependency
properties로 버전 정보를 선언해서 재사용성 강화
❓ 싱글톤 패턴을 왜 쓸까?
회원가입이 화면을 새로 렌더링 하는 걸까?
새로고침
PRG (Post Redirect Get pattern)
새로고침 행위는 이전에 했던 요청을 다시 진행!
F5 -> forward -> 마지막으로 했던 요청으로 돌아간다!
멱등한 GET,PUT.DELETE는 문제 없지만 POST 요청은 멱등하지 않으므로 여러 번 수행되면 중복 제출 문제 발생
-> redirect를 해줘야 함
conn = DBUtil.getConnection(); 이거 시간 오래 걸리는데 해결책 어떻게 할래?
-> Connection pool 설치합니다
server는 name이 필요하다
fetch는 비동기
redirect는 링크 그대로
forward는 파라미터 전달
각각의 뜻을 생각해보기
알고리즘 야미 한문제!