Session based Auth(세션 기반)

 

 

 


 

 

(참고)

Authentication 인증  

Authorization 허가, 권한 부여   <- 이 게시물은 이거 내용임.

 

 

 

 


 

<간추린 내용>

 

 

 

 

 

 


 

 

https://www.youtube.com/watch?v=cWUtMHTKdj0

 

 

 

 


 

 

 

 

(참고 - 위에 영상 정리)

 

1) id, pw 입력 하고 로그인 성공 후

 

2) 서버 안에서 "세선"이라는 것을 만들게 됩니다.

이렇게 세션 안에 이러한 정보들이 저장이 되어 있을 겁니다.

 

3) 서버에서 클라이언트로 응답할 때,

쿠키 안에 sessionID를 넣어서 돌려줍니다.

(시큐리티 옵션을 켜줘야한다.)

 

4) 그 다음부터

클라이언트에서 서버로

요청할 때, 쿠키가 같이 보내집니다.

(이 안에 sessionID도 같이 보내 집니다.)

 

5) 근데 클라이언트에서 받은

sessionID가 서버 상에 있다며는

로그인이 되어졌을 때, 보여주어야되는 페이지가 보였을 거고,

sessionID가 서버 상에 없을 때는

로그인하지 않았을 때의 페이지가 보여질 것이다.

 

6) 유저들이 한번 접속을 할 때마다,

세션을 찾아서, sessionID를 보고,

타임아웃을 한번 업데이트 시켜주고

Authorization(인증) 권한을 본 다음에

그 것에 맞는 응답을 해주어야 한다.

 

7) (부가 설명)

많은 웹서버에서는 내부에 이 세션을 램이라는 공간에 데이터베이스 형식으로 저장해 놓습니다.

 

 

 

 

여기까지가 세션과 쿠키를 이용한 

Authentication(허가,권한부여)의 가장 기본적인 동작 원리 입니다.

 

 

 

 

 

 

8)

만약에 사이트가 트래픽이 많아지게 된다면,

웹서버 하나로 감당안됩니다.....

그래서 여러개 만듭니다.

 

이런식으로 서버를 구성을 했을 때,

문제가 생길 수가 있는데,

예를들어서, 접속을 로드벨런스를 통해서

"첫번째 서버"에서 sessionID을 발급 받았다고 가정을 하면,

Client쪽에서는 "첫번째 서버"에서 발급 받은 sessionID를 가지고 있게 됩니다. (밑에 그림)

 

 

 

 

그 다음 요청이 로드벨런스가 

"두번째 서버"로 보내게 된다며는

"첫번째 서버"에서 발급받은 sessionID"두번째 서버"에서는 sessionID를 찾을 수가 없습니다.

그래서 

사용자는 로그아웃된 해당 페이지를 보게되는 것입니다.

 

 

 

9)

그래서 위에 있는 내용을 방지하기 위해서,

당연히 로드벨런스가

하나의 사용자는 계속 한 곳의 서버로만 접속을 하게 만들어주는 테크닉이 필요합니다. 

 

 

 

 

 

10)

설명 ->

사용자가 로그인 성공하면, 세션이 sessionDB에 생기겠죠.

그러면 

사용자는 sessionID를 받아 올 것입니다.

그 다음부터는 사용자는 어떠한 서버를 통해서 접속을 하든 각각의 서버는 데이터베이스에서 session을 매칭을 시켜주기 때문에 올바른 응답을 줄 수 있게 됩니다.

 

 

 

11) 

모든 트래픽이 하나의 DB에 몰리는 문제가 있어요....

이런 문제를 해결해 주기위해서, DB도 분배형식으로 만들어서,

"세션1부터 세션1000까지는 첫번째DB로만 간다"라고 하고

"세션10001부터 세션2000까지는 두번째DB로만 간다"라고

만들어 줍니다.

근데 만들어 가면 점점 복잡해집니다.

 

 

 

이것들을 해결하기위해서 나온 방법이,

JWT(JSON Web Token) = Token Based Auth 입니다.

 

 

 


 

 

 

 

(참고)

https://racoonlotty.tistory.com/entry/%EC%BF%A0%ED%82%A4%EC%99%80-%EC%84%B8%EC%85%98-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EB%A1%9C%EC%BB%AC-%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80%EC%99%80-%EC%84%B8%EC%85%98-%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80