[CS 스터디] 쿠키,세션,JWT..

한주영·2023년 4월 10일
0

CS

목록 보기
11/19

COOKIE & SESSION

-쿠키는 클라이언트(브라우저) 로컬에 저장되는 키와 값이 들어있는
작은 데이터파일

-사용자 인증이 유효한 시간을 명시할수있으며, 유효시간이 정해지면
브라우저가 종료되어도 인증이 유지된다

-클라이언트의 상태 정보를 로컬에 저장했다가 참조

-클라이언트에 300개까지 쿠키저장 가능,하나의도메인에 20개의값만 가질수있다
하나의 쿠키값은 4KB까지 저장한다.

-Response Header에 Set-Cookie속성을 사용하면 클라이언트에 쿠키를만들수있다
-쿠기는 사용자가 따로 요청하지않아도 브라우저가 Request시에 Request Header를 넣어서 자동으로 서버에 전송한다

쿠키의 구성요소

-이름: 각각의쿠기를 구별하는데사용되는이름
-값 : 쿠키의이름과 관련된값
-유효시간: 쿠키의 유지시간
-도메인: 쿠키를 전송할 도메인
-경로: 쿠키를 전송할 경로

쿠키의 사용예시

-방문사이트에서 로그인시 ,"아이디와 비밀번호를 저장하시겠습니까?"
-쇼핑몰의 장바구니 기능
-자동로그인, 팝업에서 "오늘 더이상 보지않음 창"체크와 쇼핑몰사이트 바구니

SESSION

-쿠키를 기반하고있지만 사용자 정보파일을 브라우저에 저장하는 쿠키와달리
세션은 서버에서 관리
-서버에서는 클라이언트를 구분하기위해세션 id를 부여, 웹브라우저가 서버에 접속해서 종료할때까지 인증상태를 유지
-사용자에 대한 정보를 서버에두기때문에 보안에좋지않음, 사용자가많아질수록 서버메모리를 많이 차지하게 됨=>동접속사수가 많은경우 서버에과부하를 주게 됨
-클라이이언트가 요청을 보내면 , 해당 서버의 엔진이 클라이언트에게 유일한 id를 부여하게 됨 이것이 세션 id이다

세션의 동작방식

1.클라이언트가 서버에 접속시 세션id 발급
2.클라이언트는 세션id에 대해 쿠키를 사용해서 저장하고 가지고있음
3.서버에요청할때 쿠키의 세션id를 같이서버에 전달해서 요청
4.서버는 id를 전달받아서 세션id로 세션에 있는 클라이언트 정보를 가져와서사용
5.클라이언트 정보를 가지고 서버요청을 처리하여 클라이언트에게 응답

세션의 특징

-각 클라이언트에게 고유 id를 부여
-세션id로 클라이언트를 구분해서 해당 요구에맞는 서비스를 제공
-보안면에서 쿠키보다 우수
-사용자가 많아질수록 서버 메모리를 많이 차지하게 됨

세션 사용예

-로그인 같이 보안상 중요한작업

쿠기와 세션의 차이점?

-쿠키와 세션은 비슷한 역할을 하고 동작원리도 비슷하지만
큰 차이점은 사용자의 정보가 저장되는 위치이다 쿠키는 서버의 자원을 전혀 사용하지않으며 , 세션은 서버의 자원을 사용한다
-보안측에선 세션이 더 우수, 요청속도는 쿠키가 세션보다 빠르다, 세션은 서버의 처리가 필요하기때문이다

JWT

JWT는 JSON웹토큰을 의미하며 당사자간 전송될 클레임을 나타내는 소형 URL안전수단이다.
여기서 클레임은 JSON웹 토큰 페이로드에 포함된 정보 또는 속성을 나타낸다
일반적으로 웹 애플리케이션에서 인증 및 권한 부여 목적으로 사용

헤더 ,페이로드 및 서명의 세부분으로 구성
헤더와 페이로드는 Base64Url로 인코딩된 JSON 문자열 , 연결된후 비밀키로 서명되어 서명을 생성
결과 JWT는 HTTP헤더, 쿼리 매개변수 또는 요청 본문에서 문자열로 보낼수있다

헤더에는 일반적으로 토큰유형및 서명에 사용되는 해싱알고리즘에대한 정보가 포함된다 페이로드에는 사용자 ID또는 역할과 같이 인증중인 사용자 ,엔티티 에 대한 클레임 또는 속성이 포함
서명은 토큰의 무결성을 확인하고 전송중에 변경되지 않았는지 확인하는데 사용.

JWT의 장점

  • 서버가 세션데이터를 저장할 필요가 없다=> 그렇기때문에 확장 가능하고 분산 시스템에 적합하다
    -클레임이 토큰 자체에 내장되있어서 JWT를 사용하여 여러 서비스 또는 도메인에서 인증 및 권한 부여 정보를 공유할수있다

-클라이언트가 JWT를 서버에 제공하면 서버는 비밀키를 사용하여
서명을 확인한 다음 헤더와 페이로드를 디코딩하여 클레임을 추출할수있다

-그 다음 서버는 클레임을 사용하여 클라이언트의 요청을 인증하고 권한을 부여할수있다

-JWT는 암호화되지 않으므로 민감한 정보가 페이로드에 포함되어서는 안되는다는 점에 유의해야함
-JWT서명에 사용되는 비밀키는 무단 엑세스를 방지하기위해 안전하게 보관해야함

로드밸런서

로드밸런서
-컴퓨팅 성능 및 대역폭 스토리지 용량과 같은 리소스의 효율적이고 최적화된 활용을 보장하기 위해 들어오는 네트워크 트래픽을 여러 서버 또는 리소스에 분산시키는 네트워크 장치 또는 소프트웨어를 의미

주요목적은 들어오는 요청을 여러 백엔드 서버에 균등하게 분배하여 단일서버가 과부하되는 것을 방지하고 시스템또는 애플리케이션 가용성 및 확장성 안정성을 향상시키는것

작동원리

-하드웨어 기반 로드밸런서, 가상 로드밸런서 및 클라우드 기반 로드 밸런서를 포함하여 다양한 구성에서 작동할수있다
-하드웨어기반 로드밸런서는 일반적으로 데이터 센터의 서버앞에 배치되는 물리적 장치를 말한다
-가상로드밸런서는 소프트웨어 기반이며 가상머신 또는 컨테이너에서 실행된다
클라우드 기반 로드 밸런서는 클라우드 서비스 공급자가 제공하여 클라우드 환경의 가상머신 또는 인스턴스간에 트래픽을 분산하는 데 사용된다

장점

-성능향상,내결함성증가, 리소스 가용성 향상
-들어오는 요청을 여러 서버에 분산함으로써 단일서버가 병목현상이 되는것을 방지하여 리소스를 효율적으로 사용한다
-트래픽이많은 기간에도 시스템이 응답성을 유지하도록 한다
-장애 또는 다운타임에 발생하는 서버에서 트래픽을 감지하고 라우팅하여 시스템의 전반적인 내결함성과 가용성을 향상시킬수있다.

단점

-단일실패 지점: 경우에따라 로드밸런서 자체가 단일실패지점이 될수있음
장애가발생하면 백엔드서버로 들어오는 트래픽의 분배가 중단되어 잠재적으로 시스템의 가용성또는 다운타임이 감소할수있음

-구성 복잡성: 구성 및 관리는 특히 더 크고 복잡한 환경에서 복잡할수있다
알고리즘 설정 및 유지관리 ,SSL인증서 관리,상태 확인 및 제한시간 구성에는 최적의 성능과 안정성을 보장하가위한 , 신중한 구성이필요하다.

-대기시간 및 오버헤드: 여러 서버에 트래픽을 분산하는데 필요한 처리로 인해 추가 대기시간과 오버헤드를 유발할수있다. 이는 작은 요청이 많은 시스템이나 백엔드 서버가 지리적으로 분산된 상황에서 특히 더 두드러질수있음

-세션관리: 세션관리 또는 상태 저장 연결 유지에 문제를 일으킬수있다
시스템이 서버별 세션데이터에 의존하거나 백엔드서버가 클라이언트 상태저장 연결을 유지해야하는 경우 동일한 클라이언트의 요청이 동일한 백엔드 서버로 라우팅되도록 하기위해 추가 구성 또는 세션 지속성 관리가 필요할수있음

-비용: 사용되는 로드밸런서 유형과 시스템규모에 따라 시스템의 전체비용을 추가할수있다 예를 들어 하드웨어 기반 로드밸런서는 구매 유지관리 비용이 높을수있지만 클라우드는 사용량 또는 트래픽 양에따라 추가비용이발생할수있음

-디버깅 문제 및 해결의 복잡성: 부하 분산환경에서는 문제 해결 및 디버깅에 더복잡할수있다. 클라이언트의 요청이 다른 백엔드 서버로 라우팅되어 문제를 정확히 파악하거나 오류를 추적하기가 더 어려워질수있음.

profile
백엔드개발자가 되고싶은 코린이:)

0개의 댓글