1.쿠키(Cookie)
쿠키는 이름과 값의 쌍으로 구성된 작은 정보다. 아스키 문자로만 가능하고 서버에서 생성 후 전송된다. 저장은 브라우저에 가능하고 유효기간이 지난 후에는 자동으로 삭제된다. 서버에 요청할 때 domain, path가 일치하는 경우에만 자동전송된다.
쿠키의 작동과정
쿠키는 브라우저에서 요청하면 서버에서 만든다. 서버에서 만들어진 쿠키는 (1) 브라우저로 전송되며 저장된다. 한번 생성, 저장된 쿠키는 브라우저에 저장되어 따로 (2) 생성할 필요 없이 유효기간이 지나거나 삭제할 때 까지 사용가능하다.
쿠키의 생성,삭제와 변경, 읽어오기
- 쿠키의 생성
- 쿠키의 삭제와 변경
- 쿠키 읽어오기
2.세션(Session)
- 세션의 정의
"a collection of realated HTTP transactions(요청과 응답) made by one browser to one server."
세션은 쿠키를 이용해 서로 관련된 요청들을 하나로 묶은 것이다. browser마다 개별 저장소(session 객체)를 서버에서 제공한다. 간단한 예로 로그인~로그아웃을 이야기 할 수 있다.
- 세션의 생성과정
서버가 세션객체(session #2F460A)에 저장된 세션ID를 응답헤더에 Set-cookie로 세션을 준다. 응답 헤더를 받은 브라우저는 쿠키에 세션을 저장하고 이후에 요청할 때 마다 요청헤더에는 세션이 저장되어 서버에 요청이 간다. 서버는 세션ID를 통해 같은 브라우저인지 아닌지 판별 한다.
- 세션 객체 얻기
Controller에서 세션 저장소를 사용하고 싶으면 request.getSession을 사용한다.
HttpSession session = request.getSession();
session.setAttribute("id","asdf")
request.getSession()을 호출하면 요청 헤더의 세션ID와 일치하는 세션 저장소를 찾고 일치하는 저장소를 찾으면 session.setAttribute("id", "asdf")값을 세션저장소에 저장한다. session을 가져올 때는 'request'를 쓰는 걸 주목해보자. request를 쓰는 이유는 요청(request)에서 세션ID를 불러오기 때문이다.
- 세션과 관련된 메서드
메서드 | 설명 |
String getId() | 세션의 ID를 반환 |
long getLastAccessedTime() | 세션 내에서 최근 요청을 받은 시간을 반환 |
boolean inNew() | 새로 생성된 세션인지를 반환. request.getSession()호출 후 사용 |
void invalidate() | 세션 객체를 제거(저장된 객체도 함께) |
void setMaxInactiveInterval(int interval) | 지정된 시간(초)후에 세션을 종료(예약 종료) |
int getMaxInactiveInterval() | 예약된 세션 종료 시간을 반환 |
속성 관련 메서드 | 설명 |
void setAttribute(String name, Object value) | 지정된 값(value)을 지정된 소성 이름(name)으로 저장 |
Object getAttribute(String name) | 지정된 이름(name)으로 저장된 속성의 값을 반환 |
void removeAttribute(String name) | 지정된 이름(name)의 속성을 삭제 |
Enumeration getAttributeNames() | 기본 객체에 저장된 모든 속성의 이름을 반환 |
- 세션의 종료
- session="true"와 session="false"
세션은 서버에 저장하기 때문에 부담이 많이가는 작업이다. 꼭 필요한 경우가 아니라면 session을 쓰지 않는게 메모리 관리에 좋다. 위의 그림은 로그인에 관한 세션의 적용 흐름이다. 모든 곳에 세션이 적용되어있다. 그런데 로그인 하기 전 앞 두 단계에서는 굳이 세션을 생성하지 않아도 된다. 그리고 로그인 할 때 세션을 생성하고 난 이후에도 마찬가지로 이미 세션이 생성되어있기에 다른 세션을 추가해줄 필요가 없다.
세션을 쓰지 않아도 되는 구간이 존재하기 떄문에 세션을 생성하지 않는 session="false"를 쓸 수 있다. session="false"는 세션이 필요없는 JSP화면에 사용하고 session="false"를 사용하면 기존 세션에 영향을 끼치지 않는다. 즉 세션이 생성된 뒤에 session="false"를 선언해도 이전에 생성된 세션에 영향을 끼치지 않는다. 기본값으로 session="true" 값을 갖기 때문에 세션이 필요없는 화면에서는 session="false"를 써주도록 하자.
3. 쿠키와 세션 비교
쿠키(Cookie) | 세션(HttpSession) |
브라우저에 저장 | 서버에 저장 |
서버에 부담X | 서버에 부담O |
보안에 불리 | 보안에 유리 |
서버 다중화에 유리 | 서버 다중화에 불리 |
출처:스프링의 정석 : 남궁성과 끝까지 간다(패스트 캠퍼스 강좌)
'Spring > SpringMVC' 카테고리의 다른 글
[SpringMVC] rediect와 forward (0) | 2022.02.26 |
---|---|
[SpringMVC] 요청과 응답 (0) | 2022.02.25 |
[SpringMVC] 데이터 변환과 검증 (0) | 2022.02.24 |
[Spring MVC] MVC 패턴 (0) | 2022.02.23 |
[Spring MVC] 예외처리 (0) | 2022.02.23 |