개발 지식 / / 2024. 10. 1. 13:58

로그인은 어떻게 구현해야 하는가?

옛날에 아무것도 모르던 시절에는 로그인을 어떻게 구현해야 하는지 감이 아예 없었다.
최근에 네트워크와 통신에 대해 공부하면서 관련된 아이디어가 생겨서 적어두려고 한다.

아래 내용은 매우 기본적인 로그인 구현 이라고 생각되며, 실제 서비스 또는 업무에서 사용하기에 보안적으로 취약할 수 있다고 생각된다.


이 글에서의 로그인은 쿠키 세션 이라는 개념이 사용된다.

쿠키

쿠키란 사용자의 웹 브라우저에 저장되는 작은 데이터 조각으로서, 사용자의 컴퓨터나 디바이스에 저장된다.
Key-Value 형태로 저장되며 텍스트 형식으로 저장되기 때문에 쉽게 읽을 수 있지만, HTTPS 전송에서 암호화가 가능하다.
또한 세션 쿠키(Session Cookie)와 지속 쿠키(Persistent Cookie)로 구분 할 수 있으며,
세션 쿠키는 브라우저 종료 시 소멸되는 쿠키이고, 지속 쿠키는 명시적으로 지정된 Expires 시점까지 유지되는 쿠키이다.

세션

세션이란 서버 측에서 유지되는 사용자 상태 정보이다. 따라서 서버에 저장된다.
주로 사용자 인증, 사용자 데이터 관리에 사용되며 이는 서버에 저장되므로 보안에 있어서 더 효과적일 수 있다.


따라서 이 쿠키와 세션 정보를 사용하여 로그인을 구현할 수 있다.
클라이언트가 웹 브라우저에서 로그인을 한다면 ID, PW 등의 정보를 검증 후 서버는 세션을 발급한다.

세션을 발급받은 클라이언트는 브라우저에 쿠키로 세션정보를 저장한다.

이후 각종 클라이언트 to 서버 요청에 이 세션 정보를 포함시켜서 만료된 세션인지 아닌지를 검사하고, 서버는 올바른 세션일 경우에 OK 응답을 아닌 경우에 4xx (400, 403, 404 등) Client Error Response를 발생시킬 수 있다.

이 세션 정보는 서버의 컴퓨터의 DB 등의 저장 정보로 존재 할 수 있으며, 주기적으로 Expire된 정보들을 삭제하면 저장공간의 활용에 도움이 될 수 있다.

또한 세션정보를 모든 요청에 대해 검사한다면, 응답 시간 지연이 매우 심각할 수 있으므로 이를 캐싱(Caching)한다면 더 효율적인 API 작성이 가능 할 것이다.

현재 진행중인 프로젝트에 관련하여 적용 후 후기를 남겨보겠습니다.

 

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유