웹 아키텍처 - MVC
- JSP로 구성할 수 있는 아키텍처: Model 1, Model 2
- Model 1: 로직과 디자인을 모두 jsp가 처리
- 요청이 들어오면 자바 빈즈나 서비스 클래스를 이용하여 작업 처리
- 구조가 단순하며 직관적 / 개발 시간이 짧아 비용 감소
- 출력을 위한 view(html) 코드와 로직 처리를 위한 java 코드가 섞여 있어 복잡함
- jsp 코드 때문에 백엔드와 프론트가 혼재
- 유지보수가 어렵고, 새로운 기술과 프레임워크 적용이 어려움
- Model 2: 로직은 자바가 처리하고, 디자인은 jsp가 담당
- 요청 처리는 servlet(controller), 로직 처리는 java(service, dao 등). 출력은 jsp
- Service, Dao, Java Beans: Model
- Logic(Business Logic, DB Logic)을 처리
- Controller로부터 넘어온 데이터를 이용하여 작업을 처리하고 다시 Controller에게 리턴
- JSP: View
- Servlet: Controller
- 요청을 분석하여 로직 처리를 위한 Model 호출
- 데이터를 저장하고 redirect 혹은 forward 하여 View 호출
- 출력을 위한 코드와 로직 처리를 위한 코드가 분리되어 jsp가 간결해짐
- 분업이 용이해지고 유지 보수가 쉬워졌으며 확장성이 뛰어남
- 구조가 복잡하여 초기 진입이 어렵고 개발 시간의 증가로 비용 증가
- DTO, VO: 자바 빈의 형식을 따름
- 자바 빈: 자바로 작성된 소프트웨어 컴포넌트
- 직렬화 되야함
- 기본 생성자 가져야함
- Getter/Setter
- 이벤트 처리 메서드 포함
Session & Cookie
- HTTP Protocol
- client → server 요청
- server → client 응답
- 응답 후 연결을 해제함
- 연결이 해제돼도 유지해야할 정보들을 위해 세션과 쿠키 사용
Cookie
- 서버에서 사용자의 컴퓨터에 저장
- 사용자가 별도의 요청을 하지 않아도 브라우저는 request 시 request header를 넣어 서버에 전송
- Key와 Value로 구성되고 String 형태
- 브라우저마다 저장되는 쿠키가 다름(구분자 존재)
- 주요 목적
- 세션 관리: 사용자 아이디, 접속시간, 장바구니 등 서버가 알아야 할 정보 저장
- 개인화: 사용자마다 페이지 개인화
- 트래킹: 사용자의 행동과 패턴 분석, 기록
- 사용 예시
- ID 저장(자동로그인)
- 하루간 광고 끄기
- 상품 추천
- 장바구니
- 구성요소
- 이름: 각 쿠키를 구별하기 위해 사용되는 이름
- 값: 쿠키의 이름과 매핑되는 값
- 유효기간: 쿠키 유효기간
- 도메인: 쿠키를 전송할 도메인
- 경로: 쿠키를 사용할 수 있는 영역(전송할 요청 경로)
- 클라이언트가 페이지를 요청하면 WAS는 쿠키를 생성하여 HTTP Header에 쿠키를 넣어 응답한다.
- 브라우저는 받은 쿠키를 로컬에 저장하고 다음번 요청 때 요청과 함께 보낸다.
- 브라우저가 종료되어도 쿠키 유효기간이 남아있으면 계속 보관된다.
- 클라이언트에 총 300개의 쿠키를 저장할 수 있고, 하나의 도메인 당 20개의 쿠키를 가질 수 있다.
- 하나의 쿠키는 4KB까지 저장 가능
Session
- 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로
- 서버의 메모리에 Object로 저장
- 서버 메모리 용량의 허용치까지 저장 가능
- 사용 예시
- 사이트 내 화면을 이동해도 로그인 유지
- 장바구니
- 클라이언트가 페이지를 요청하면 서버는 클라이언트의 요청 헤더에 있는 쿠키를 확인하여 세션 ID를 보냈는지 확인한다.
- 세션 ID가 없으면 서버는 새 세션을 생성해 클라이언트에게 돌려준다.
- 서버에서 돌려준 세션 ID를 쿠키를 사용해 클라이언트에 저장한다.
- 클라이언트는 재접속 시 쿠키를 이용해 세션 ID 값을 서버에 전달한다.
- 특징
- 웹 서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장
- 웹 서버에 저장되는 쿠키
- 브라우저를 닫거나 서버에서 세션을 삭제했을 때만 삭제되므로 보안이 좋음
- 저장 데이터에 제한이 없다.
- 각 클라이언트 별 고유 세션 ID를 부여한다.