티스토리 뷰
HTTP
클라이언트와 서버가 통신 할 때 이용하는 프로토콜인 HTTP는 비상태 프로토콜(stateless Protocol)이다. 즉, 클라이언트-서버 간의 요청-응답이 이루어졌을 때, 서버는 클라이언트에 관한 어떠한 상태정보도 저장하지 않는다.
이러한 특징은 서버가 클라이언트와의 연결을 유지하는데 소모되는 자원낭비를 줄일 수 있지만, 로그인 상태 유지, 장바구니와 같이, 연결정보를 유지해야 하는 기능을 구현하는데 어려움이 있다. 이를 해결하기 위한 두 가지 방법으로 세션과 쿠키가 있다.
세션은 서버에서 사용자 정보를 관리하는 반면, 쿠키는 클라이언트가 사용자 정보를 관리한다. 쿠키를 이용하면 서버의 부하를 줄일 수 있지만, 보안적인 측면에서 취약할 수 있기 때문에 주로 장바구니, 팝업 보지않음과 같은 민감하지 않은 정보를 담는데 사용된다.
Controller에서 세션 활용하기
HttpServletRequest 또는 HttpSession을 이용해 세션을 가져올 수 있다.
HttpServletRequest
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String memLogin(Member member, HttpServletRequest request) {
Member mem = service.memberSearch(member);
HttpSession session = request.getSession();
session.setAttribute("member", mem);
return "/member/loginOk";
}
로그인 요청(/login)이 들어오면 커맨드객체(Member)와 HttpServletRequest가 인자로 들어온다.
getSession() 메소드를 통해 요청에 대한 세션을 가져올 수 있다. 이후 setAttribute를 이용해 "memeber"라는 name에 커맨드 객체에서 정보를 추가한다.
HttpSession
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String memLogin(Member member, HttpSession session) {
Member mem = service.memberSearch(member);
session.setAttribute("member", mem);
return "/member/loginOk";
}
HttpSession을 이용하면 getSession 메소드를 이용하지 않아도 바로 세션을 다룰 수 있다. HttpServletRequest와 세션 객체를 얻어오는 방법외에 거의 차이가 없다.
세션 삭제
session.invalidate();
로그아웃 또는 회원탈퇴시 사용한다.
세션 주요 메소드
- getId() : 세션 ID 반환
- setAttribute() : 세션 객체에 속성 저장
- getAttribute() : 세션 객체에 저장된 속성 반환
- removeAttribute() : 세션 객체에 저장된 속성 제거
- setMaxInactiveinterval() : 세션 객체 유지시간 설정
- getMaxInactiveinterval() : 세션 객체 유지시간 반환
- invalidate() : 세션 객체의 정보 삭제
Controller에서 쿠키(Cookie) 활용하기
사용자의 접속을 제한하거나 사용자에 따라 컨텐츠를 제공하기 원할 때, 웹 사이트를 통해 사용자를 확인(식별)할 필요가 있을 때 쿠키를 이용할 수 있다. 서버가 쿠키를 만들어 클라이언트에 보내면 클라이언트는 이후 요청(Request)을 보낼 때 헤더에 쿠키를 함께 보낸다. 서버는 쿠키를 참조해 사용자를 식별할 수 있다.
쿠키는 도메인(웹 페이지)당 최대 20개를 가질 수 있으며 하나의 쿠키는 최대 4KB까지 저장할 수 있다.
쿠키 생성
@RequestMapping("/main")
public String mallMain(Mall mall, HttpServletResponse response){
Cookie genderCookie = new Cookie("gender", mall.getGender());
if(mall.isCookieDel()) { //쿠키를 삭제하는 옵션 체크여부
genderCookie.setMaxAge(0);
mall.setGender(null);
} else {
genderCookie.setMaxAge(60*60*24*30); //s * m * h * d = 한 달
}
response.addCookie(genderCookie);
return "/mall/main";
}
쿠키를 보내기 위해 HttpServletResponse 객체가 필요하며, new 연산자를 통해 쿠키를 생성할 수 있다. 인자로는 ("쿠키이름", 값) 이 매핑되며 setMaxAge() 메서드를 통해 쿠키의 기한(초)을 설정해준 뒤 addCookie()메소드로 응답에 담아 보내면 된다.
만약 쿠키를 제거하고 싶다면 setMaxAge() 값을 0으로 지정한다.
쿠키 가져오기
@RequestMapping("/index")
public String mallIndex(Mall mall,
@CookieValue(value="gender", required=false) Cookie genderCookie,
HttpServletRequest request) {
if(genderCookie != null)
mall.setGender(genderCookie.getValue());
return "/mall/index";
}
@CookieValue 어노테이션을 통해 gender 이름을 가진 쿠키를 가져올 수 있다. required=false를 지정해주면 쿠키가 존재하지 않는 경우 익셉션을 방지할 수 있다.
request.getCookies() 메소드를 이용해 쿠키들을 배열에 모두 담아온 뒤, 반복문과 getName()메서드를 통해 gender라는 이름을 가진 쿠키를 찾았을 때 동작하는 코드를 사용할 수도 있다.
출처 : [인프런] 자바 스프링 프레임워크(renew ver.) - 신입 프로그래머를 위한 강좌
'Programming > Spring' 카테고리의 다른 글
스프링 리다이렉트(Redirect)와 인터셉터(Interceptor) (0) | 2022.04.13 |
---|---|
스프링 @ModelAttribute 활용 (0) | 2022.04.11 |
스프링 커맨드 객체를 통해 단순반복코드 줄이기 (0) | 2022.04.10 |
스프링 MVC 패턴과 DispatcherServlet (0) | 2022.04.02 |
Java파일 (어노테이션)을 이용한 스프링 컨테이너 설정 (0) | 2022.03.22 |
- Total
- Today
- Yesterday
- 인턴
- HeidiSQL
- Thymeleaf
- svn
- 프로그래머스
- 환경설정
- 국비교육
- 스프링
- 부트스트랩
- 넥사크로
- JVM
- 데이터베이스
- Java
- C++
- C
- 이클립스
- SQL
- JSP
- 백준
- 오류
- 오라클
- 네트워크
- 스프링부트
- Open API
- CS
- 개발용어
- CSS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |