📝쿠키
쿠키는 클라이언트(브라우저) 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일입니다
HTTP의 경우 데이터를 가져와서 유지시킬 수 없기 때문에 이걸 해결하기 위해서 도입되었다
📝쿠키 특징
쿠키는 서버의 자원을 전혀 사용하지 않으며 사용자 정보 파일을 브라우저에 저장합니다
속도는 쿠키가 세션보다 더 빠릅니다 → 서버랑 통신하는 것보다는 로컬에서 읽어오는게 일반적으로는 더 빠름
결제정보 등을 쿠키에 저장하였을때 쿠키가 유출되면 보안에 대한 문제점도 발생할 수 있습니다
📝쿠키 이용 방법
- 팝업창을 통해 "오늘 이 창을 다시 보지 않기" 체크
- 다크모드 / 라이트모드 유지
📝쿠키 동작 단계 (클라이언트)
JavaScript를 이용해 쿠키를 생성, 제거하거나 가져올 수 있다 서버에서 직접 데이터를 가져와서 활용하지 않는 경우에 사용하면 된다
📝쿠키 동작 단계 (서버)
Back End를 구축한 언어를 이용해 쿠키를 생성, 제거하거나 가져올 수 있다 비즈니스 로직에 쿠키를 넣는 행위가 포함되는 경우 사용된다 → 세션의 경우 생성시 자동적으로 쿠키를 생성 하긴 한다
이렇게 서버에서 만든 경우 HTTP Header에 붙어서 나가기 때문에 추가적인 대역폭을 사용하게 된다.
📝세션
세션은 쿠키 기반이지만 쿠키와 다르게 서버측에서 관리합니다
쿠키를 변경하는 보안적 이슈를 해결하기 위해 등장
📝세션 특징
서버에서 클라이언트를 구분하기 위해 세션 ID를 부여해 웹 브라우저 종료때까지 가지고 있습니다.
접속 시간을 제한을 두어 일정 시간 응답이 없다면 정보가 유지되지 않게 설정이 가능 합니다.
사용자에 대한 정보를 서버에 두기 때문에 쿠키보다 보안에 좋다 사용자가 많아질수록 서버 메모리를 많이 차지하게 됩니다 → 즉 동접자 수가 많은 웹 사이트인 경우 서버에 과부하를 주게 되므로 성능 저하의 요인이 됩니다.
📝세션 동작 단계
- 클라이언트가 서버에 접속 시 세션 ID를 발급 받습니다 → 톰캣의 경우 JSESSIONID라는 이름으로 생성
- 클라이언트는 세션 ID에 대해 쿠키를 사용해서 저장하고 가지고 있습니다.
- 클라이언트는 서버에 요청할 때 쿠키의 세션 ID를 헤더에 담아 서버에 전달해서 사용합니다.
- 서버는 세션 ID를 전달 받아서 별다른 작업없이 세션 ID로 세션에 있는 클라언트 정보를 가져옵니다
- 클라이언트 정보를 가지고 서버 요청을 처리하여 클라이언트에게 응답합니다.
- 로그인 같이 보안상 중요한 작업을 수행할 때 사용
📝쿠키와 세션 사용 이유
쿠키와 세션을 사용하지 않으면 쇼핑몰에서 옷을 구매하려고 로그인을 했어도 페이지를 이동할 때 마다 계속 로그인을 해야 합니다.
📝세션 관리 방법
- WAS에서 관리하는 Session 사용
- WAS가 여러개일 경우 세션 클러스터링이 필요
- DBMS에 Session 저장
- 세션 클러스터링을 할 필요가 없음
- Redis, Elastic cache등 메모리 DB에 Session 저장
- 메모리DB에 세션을 저장, 가장 많이 사용하는 방식
📝Local Storage
쿠키의 많은 사용 방법은 Local Storage로 대체 되었습니다
- 모든 HTTP 요청에서 데이터를 주고 받을 필요가 없어졌습니다 즉, 전체 트래픽과 낭비되는 대역폭을 줄일 수 있습니다 → 쿠키를 서버에서 생성할 시에 해당
- 용량 또한 5MB의 정보를 저장할 수 있습니다.
서버에서 쿠키를 생성해서 보내는 경우도 거의 사용하지 않을 뿐더러 클라이언트에서 생성하는 쿠키는 더더욱 로컬 스토리지를 이용하자
📝JWT
Json Web Token의 약자로 클라이언트와 서버 사이에서 통신할 때 권한을 위해 사용하는 토큰이다.
Token은 세가지로 나누어져 있다.
- 헤더 (Header)
- 어떠한 알고리즘으로 암호화 할 것인지, 어떤 토큰을 사용할지에 대한 정보가 들어있다.
- 정보 (Payload)
- 전달하려는 정보가 들어가있다 민감하지 않는 정보만 넣어야한다. 복호화가 가능하기 때문이다.
- 서명 (Signature)
- 헤더와 정보를 합친후 서버에서 지정한 secret key로 암호화 시켜 토큰을 암호화시킨다.
- 검증 = 해싱암호화(base64(header) + . + base64(payload) , secret key)
JWT 장점
- 기존 세션 방식의 경우 서버가 여러개일 경우 서버의 세션을 클러스터링해서 사용해야 로드밸런싱으로 인한 강제 로그아웃이 안 되게 할 수 있는데 Secret Key만 공통적이면 검증하는데는 아무런 문제가 되지 않는다.
- 서버에서 관리를 안 하고 클라이언트가 관리를 하기 때문에 서버에서 세션 메모리에 들고 있을 필요가 없어서 부담이 줄어든다.
Acess Token
인증완료 후 주는 토큰으로 모든 API 통신은 해당 토큰으로 인증 및 인가를 받는다.
Refresh Token
Access Token을 발급해주는 토큰이다.
아래 사이트에서 JWT 테스트를 할 수 있으며 자세한 구현 방식에 대해서는 추후 포스팅에 올리겠습니다
'[CS 지식]' 카테고리의 다른 글
[CS 지식] 리다이렉션, 파일디스크립터(FD), 프로세스, PID, 데몬프로세스, 고아프로세스, 좀비프로세스 (0) | 2021.09.29 |
---|---|
[CS 지식] AWS 리전, 가용영역, 에지 로케이션, CDN 서비스, ELB, NLB, ALB (0) | 2021.09.29 |
[CS 지식] Javadoc, Varchar vs Char, IIS, HTTP(80번 포트), HTTPS(443번 포트) (0) | 2021.09.15 |
[CS 지식] 유니티, 대화형 프로그래밍, 임베디드, 워드프레스, 소프트코딩, 하드코딩, 가상환경 (0) | 2021.09.15 |
[CS 지식] DOM, 드라이버, 스위프트(Swift), IPC, 렌더링, 업캐스팅, 다운캐스팅 (0) | 2021.09.15 |