티스토리 뷰
프로젝트를 만들면서 로그인 기능을 구현하게 된다면
이 기능을 구현하는 방법은 여러가지 방법이 있습니다. (Session, JWT, OAuth2 , Cookie , API , OTP 등)
여기서 다뤄볼건 세션과 쿠키 입니다.
세션, 쿠키 차이점
| 세션 | 쿠키 | |
| 저장위치 | 웹 서버 | 클라이언트(접속자 PC) |
| 저장형식 | Object(객체) | text(key-value) |
| 만료시점 | 브라우저 종료시 삭제(기간 지정 가능) | 쿠키 저자이 설정(만료 시간 기준) |
| 사용하는 자원 | 웹 서버 리소스 | 클라이언트 소스 |
| 용량제한 | 서버가 허용하는 한 용량제한 X | 총 300개 하나의 도메인 당 20개 하나의 쿠키당 4KB |
| 속도 | 쿠키보단 느림 | 세션보다 빠름 |
| 보안 | 쿠키보다 좋음 | 세션보다 별로 |
| 사용예시 | 로그인 상태 관리, 민감정보 | 장바구니, 자동 로그인 |
쿠키(Cookie)
개념:
● 클라이언트(브라우저)에 저장되는데이터
● key-value 쌍으로 이루어진 작은 데이터 조각
● HTTP 요청/응답 헤더에 포함되어 서버와 클라이언트 간 교환 됨
특징:
● 클리이언트 측에 데이터가 저장이 됨
● 브라우저를 닫아도 만료시간 까지 데이터 유지
● 보안이 취약할 수 있고 민감한 데이터 저장에는 부적합
● 용량 제한(4KB)
사용 시점:
1.유지해야 할 데이터가 클라이언트 측에서 관리 가능할 때
ex) 사용자 설정(테마, 글꼴 , 언어)
2.사용자가 특정 데이터에 장기적으로 접근할 필요가 있을 때
ex) 자동 로그인, 방문자 통계, 장바구니 정보
3.세션 없이 가볍게 데이터를 유지하고 싶을 때
쿠키 활용 > 세션관리, 개인화 , 트래킹

- 클라이언트 -> 서버 요청
- 서버는 클라이언트측에 저장할 정보를 응답 헤더의 Set-Cookie에 담음
- 이후 클라이언트는 요청을 보낼 때마다, 매번 저장된 쿠키를 요청 헤더의 Cookie에 담아 보냄
쿠키 코드 사용 찍먹

세션 (Session)
개념:
● 서버 측에서 관리되는 데이터
● 클라이언트와 서버 간의 상태를 유지하기 위한 데이터 저장소
● 각 사용자는 고유한 세션 ID를 부여받고, 부여 받은 세션 ID로 서버에서 데이터를 식별
특징:
● 서버 측에 데이터가 저장되므로 보안이 상대적으로 강함
● 브라우저가 닫히거나, 세션이 만료되면 데이터가 삭제됨.
● 메모리 사용량이 증가할 수 있으므로, 대규모 서비스에서는 주의가 필요
사용시점:
1. 보안이 중요한 데이터를 관리해야 할 때
ex) 로그인 인증, 사용자 계정 정보, 결제 정보
2. 서버에서 사용자의 상태를 추적해야할 때.
ex) 로그인 상태 유지, 개인화된 사용자 경험 제공
3. 데이터를 서버에 저장해야 하며, 클라이언트가 직접 데이터에 접근하면 안 될 때.
보안에 취약한 쿠키의 단점을 보완
비밀번호 , 카드번호 등 중요한 정보는 서버측에서 관리

- 사용자가 로그인 요청
- 서버에서 계정 정보를 읽어 사용자를 확인(인증), 사용자의 고유한 ID를 부여해서 세션 저장소에 저장한 후, 이와 연결된 세션 ID를 발급(인가)
- 사용자는 서버에서 해당 세션ID를 받아 쿠키에 저장한 뒤, 인증이 필요한 요청마다 쿠키를 헤더에 보냄
- 서버는 쿠키를 받아 세션 저장소에서 대응되는 정보를 가져옴
- 인증 완료 후 서버에서 사용자에게 맞는 데이터를 보냄
세션 인증방식의 단점
● 쿠키를 포함한 요청이 노출되도 세션ID 자체서 유의미한 개인정보를 담고있지 않으나,
탈취자가 세션ID 자체를 탈취해서 클라이언트인 척 위장할 가능성 있음.
● 서버에서 세션 저장소를 사용하므로, 요청이 많아지면 서버 과부하가 걸림

결론
● 쿠키는 단순 데이터에 사용
● 세션은 보안이 중요한 데이터에 사용
● 실무에서는 종종 두 개를 함께 사용해서 유연하게 상태를 관리
예를 들자면, 쿠키로 세션ID를 저장하고, 서버에서 해당 ID를 사용해 세션을 관리
참고자료:
'spring boot' 카테고리의 다른 글
| [Java] Ajax란??? + Ajax 활용 예[출처] [Java] Ajax란? + Ajax 활용 (0) | 2026.04.12 |
|---|---|
| [Spring Boot] Selenium(셀레니움) 연습(네이버 영어사전 가져오기)[출처] [Spring Boot] Selenium(셀레니움) 연습(네이버 영어사전 가져오기) (0) | 2026.04.12 |
| [JAVA] 큐 , 데큐 (0) | 2026.04.12 |
| [springBoot] mybatis 세팅하기 (0) | 2026.04.12 |
| [spring boot] DTO, VO (0) | 2026.04.12 |
- Total
- Today
- Yesterday
- 셀레니움
- Vo
- ajax로그인
- 기상청api
- cookie
- varchar
- char
- 세션
- 오래된이용자
- LIFO
- 크롤링연습
- 비동기식
- 날씨불러오기
- deque
- ResultType
- mybatis
- java
- 비밀번호암호화
- AJAX
- bcrypt
- 차이점
- springboot
- FIFO
- parameterType
- 회원상태
- 데이터타입
- DTO
- Spring
- 스케줄러
- springbootcss
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |