백엔드 03 - MVC 패턴, 쿠키, 세션

JeongEun Kim·2023년 4월 2일
1

Back-end

목록 보기
3/4

Web Application Architecture

JSP를 이용해 구성할 수 있는 Web Application Architecture는 크게 model1과 model2로 나뉜다.
JSP가 client의 요청에 대한 Logic 처리와 response page(view)에 대한 처리를 하느냐, 아니면 reponse page(view)에 대한 처리만 하는지의 차이
Model2 구조는 MVC(model-view-controller) Pattern을 web 개발에 도입한 구조


Model1 구조

view와 logic을 JSP 페이지 하나에서 처리하는 구조
client에서 요청이 들어오면 JSP 페이지는 java beans나 별도의 service class를 이용하여 작업을 처리, 결과를 client에 출력한다.

장점

구조가 단순, 직관적. 배우기 쉽다.
개발 시간이 짧아 비용 감소.

단점

출력을 위한 view(html)코드와 로직을 위한 java 코드가 섞여 있어 JSP 코드가 복잡해진다.
JSP 코드에 백엔드와 프론트가 혼재되어 분업이 힘들다.
프로젝트의 규모가 커지면 코드가 복잡해져 유지보수가 힘들다.
확장성(신기술의 도입, framework등)이 나쁘다.


MVC Pattern(Model2)

모든 처리를 JSP 페이지에서 하는 것이 아닌, client에 대한 처리는 servlet이, 로직 처리는 java class(Service, Dao, ...), client에서 출력하는 response page는 JSP가 담당한다.
MVC(Model-View-Controller) pattern을 웹개발에 도입한 구조이다.

Model

Service, Dao or Java Beans

Logic(Business & DB Logic)을 처리하는 모든 것.
controller로부터 넘어온 data를 이용하여 이를 수행하고 결과를 다시 controller에 return한다.
보통 service라는 클래스에서 수행되고, 데이터베이스 로직은 DAO(Data Access Object)에서 실행된다.

View

JSP

모든 화면 처리를 담당. Client의 요청에 대한 결과 뿐 아니라 Controller에 요청을 보내는 화면단도 jsp에서 처리한다.
logic 처리를 위한 java code는 사라지고 결과 출력을 위한 code만이 존재.

Controller

Servlet

Client의 요청을 분석하여 Logic 처리를 위한 Model단을 호출.
return 받은 결과 data를 필요에 따라 request, session에 저장, redirect 또는 forward 방식으로 jsp(view) page를 이용하여 출력한다.

Model2 구조


컨트롤러는 서블릿을 통해 구현. 컨트롤러만 바꾸면 Spring으로도 구현 가능하며, DB를 바꾸면 myBatis로도 가능. 확장성이 높다.

장점

출력을 위한 view(html) 코드와 로직 처리를 위한 java 코드가 분리되었기 때문에 JSP는 model1에 비해 코드가 복잡하지 않음.
화면단과 Logic단이 분리되었기 때문에 분업이 쉬움.
기능에 따라 code가 분리되어 유지보수가 쉬움.
확장성이 뛰어나다.

단점

구조가 복잡해 초기 진입이 어렵다.
개발 시간의 증가로 개발 비용이 증가한다.


Session & Cookie

Http protocol의 특징

client가 서버에 요청, 서버는 요청 처리 후 client에 응답, 그 후 연결 해제.
자원낭비를 위해 연결을 해제하지만, client와 server가 연결을 유지해야하는 경우 있음(ex. 로그인 정보)
즉, Client 단위로 상태 정보를 유지해야할 때 Cookie와 Session이 사용된다.


javax.servlet.http.Cookie
서버에서 사용자의 컴퓨터에 저장하는 정보 파일.
사용자가 별도의 요청을 하지 않더라도, 브라우저가 request시 Request Header를 넣어 자동으로 서버에 전송.
key, value 형태, String으로 이루어짐.
브라우저마다 저장되는 쿠키는 다름.

사용 목적

세션 관리 : 사용자 아이디, 접속시간, 장바구니 등의 서버가 알아야 할 정보 저장.
개인화 : 사용자마다 다르게 그 사람에 적절한 페이지 출력 가능.
트래킹 : 사용자의 행동과 패턴을 분석, 기록.

사용 예시

ID 저장(자동로그인), 팝업이나 광고 일주일간 다시 보지 않기, 최근 검색한 상품들 광고에 추천, 쇼핑몰 장바구니 기능.

쿠키의 구성요소

이름 : 여러개의 쿠키가 client의 컴퓨터에 저장되므로, 각 쿠키를 구별하는데 사용됨.
: 쿠키의 이름과 매핑되는 값.
유효기간 : 쿠키의 유효기간
도메인 : 쿠키를 전송할 도메인
경로(path) : 쿠키를 전송할 요청 경로

쿠키의 동작 순서

client가 페이지를 요청
WAS는- 하나의 쿠키는 4KB( 쿠키를 생성
Http Header에 Cookie를 넣어 응답
Browser는 넘겨받은 Cookie를 PC에 저장하고, 다시 WAS가 요청할 때 요청과 함께 쿠키를 전송
Browser가 종료되어도 쿠키의 만료 기간이 남아있다면 Client는 계속 보관
동일 사이트 재방문시 Client의 PC에 해당 쿠키가 있는 경우, 요청 페이지와 함께 쿠키를 전송

쿠키의 특징

  • 이름, 값, 만료일, 경로 정보로 구성되어 있다.
  • 클라이언트에 총 300개의 쿠키를 저장할 수 있다.
  • 하나의 도메인 당 20개의 쿠키를 가질 수 있다.
  • 하나의 쿠키는 4KB(=4096byte)까지 저장 가능하다.

쿠키의 주요 기능




Session

javax.servlet.http.HttpSession
방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라 한다.
WAS의 memory에 Object의 형태로 저장.
memory가 허용하는 용량까지 제한 없이 저장 가능.

세션의 사용 예

  • site 내에서 화면을 이동해도 로그인(사용자 정보)이 풀리지 않고 유지.
  • 장바구니

세션의 동작 순서

클라이언트가 페이지를 요청
서버는 접근한 클라이언트의 Request-Header 필드인 Cookie를 확인하여, 클라이언트가 해당 session-id를 보냈는지 확인
session-id가 존재하지 않는다면, 서버는 session-id를 생성해 클라이언트에게 돌려준다.
서버에서 클라이언트로 돌려준 session-id를 쿠키를 사용해 서버에 저장. 쿠키 이름 : JSESSIONID
클라이언트는 재 접속 시, 이 쿠키(JSESSIONID)를 이용하여 session-id 값을 서버에 전달.

세션의 특징

  • 웹 서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장.
  • 웹 서버에 저장되는 쿠키(=세션 쿠키)
  • 브라우저를 닫거나, 서버에서 세션을 삭제 했을 때만 삭제가 되므로, 쿠키보다 비교적 보안이 좋다.
  • 저장 데이터에 제한이 없다.
  • 각 클라이언트 고유 Session ID를 부여한다.
  • Session ID로 클라이언트를 구분하여 각 클라이언트 요그에 맞는 서비스 제공.
  • hidden parameter를 통해서도 데이터를 전송할 수 있음.

세션의 설정

Browser당 하나의 JSESSIONID를 할당 받음.
아이디 또는 닉네임과 같이 로그인을 했을 경우 자주 사용되는 정보를 session에 저장하면 DB를 접근할 필요가 없으므로 효율적임.

HttpSession의 주요 기능




Session&Cookie 정리

0개의 댓글