드디어 사이드 프로젝트에서 로그인을 구현하려고한다.
걱정도 되지만 프론트엔드 개발을 한다면 꼭 알아야 하는 부분이라 생각한다.
로그인 기능을 구현하면서 연계되는 다양한 내용들이 많이 나올 것 같아서 기록과 함께 내가 어떤 생각을 가지고 개발을 했는지 후에 그 생각들이 옳았는지 비교할 수 있었으면 한다.
! 여러가지 자료들을 통해 정리된 견해로 주관적이거나 전문성이 떨어지는 정보가 있을 수 있습니다. 피드백 언제나 환영합니다.
쿠키 세션 토큰 캐시 모두 익숙히 들어 보았던 단어다.
상태(state)를 유지할 때 사용하는 도구들 정도로 생각했다.
로그인 구현에 앞서 이 친구들에 대한 개념은 확실히 알아야 할 것 같았다.
이번 글에서는 이 친구들에 대한 내용을 담을 것이다.
동작 방식
1. 클라이언트가 페이지를 요청한다.
2. 서버에서 쿠키를 생성하여 HTTP 헤더에 쿠키를 담아 응답한다.
3. 클라이언트는 쿠키를 로컬에 저장하고 있다가 다시 서버에 요청할 때 HTTP 헤더에 쿠키를 담아 보낸다.
4. 서버는 쿠키를 보고 상태정보가 변경되었으면 업데이트하여 응답한다.
동작 방식
1. 클라이언트에서 페이지를 요청한다.
2. 서버는 response-header 에 쿠키에 세션ID가 있는 지 확인한다.
3. 세션ID가 없으면 서버의 엔진이 세션ID를 생성하여 클라이언트에 반환한다. 동시에 서버는 해당 ID를 세션 저장소에 저장하고 구분할 수 있게 한다.
4. 클라이언트는 서버로부터 받은 세션ID를 쿠키를 사용하여 로컬에 가지고 있는다
5. 이 후 클라이언트에서 같은 요청으로 서버에 접속할 때 HTTP요청 내 가지고 있던 세션ID를 담아 보낸다.
6. 서버는 해당 ID를 통해 세션 저장소 내 클라이언트 정보를 확인하고 요청에 맞는 서비스를 제공한다.
동작 방식
1. 클라이언트가 로그인한다.
2. 서버에서 클라이언트 정보를 확인 후 고유ID 값을 부여하고 기타 정보와 함께 payload 에 저장한다.
3. JWT 의 유효기간을 설정합니다.
4. secret key 를 이용해 access token 을 발급한다.
5. 클라이언트는 access token 을 받아 저장 후 인증이 필요한 요청의 헤더에 담아 전송합니다.
6. 서버는 토큰에 담긴 Verify Signature 를 Secret key 로 복호화한 후 조작여부와 유효기간을 확인한다.
7. 검증이 완료되면 payload 를 디코딩하여 클라이언트 ID에 맞는 데이터를 가져온다.
지역성을 이용하여 데이터에 빠르게 접근하기 위한 메모리 계층이다.
시간적 지역성 : 최근에 사용된 데이터는 또 사용될 것이다.
공간적 지역성 : 사용된 데이터 주변 데이터는 사용될 확률이 높다.
순차적 지역성 : 메모리에 저장된 순서대로 사용될 확률이 높다.
파레토의 법칙에 따라 서비스를 이용할 때 많이 사용되는 데이터를 캐싱한다면 전체적으로 영향이 발생하며 효율을 극대화 할 수 있다는 철학을 가졌다.