- Published On
로그인 저장 방식 및 인증 방법
Login 방법
1. Session 방식
세션(Session)은 서버에서 관리되는 사용자의 상태 정보입니다. 사용자가 웹 애플리케이션에 접속할 때 고유한 세션 ID가 생성되고, 이 ID는 사용자의 브라우저와 서버 사이에 쿠키 형태로 주고받으며 사용됩니다.
세션 데이터는 서버의 메모리나 데이터베이스에 저장
되며, 사용자의 민감한 정보를 보다 안전하게 관리할 수 있습니다.
sessionStorage와 관계 없습니다.
세션 방식의 로그인 절차
- 가입: 사용자가 회원가입을 합니다.
- 로그인: 사용자가 로그인 정보를 입력하여 서버에 요청합니다.
- 세션 생성: 로그인 검증 후 서버는 고유한 세션 ID를 생성하고 이를 암호화하여 사용자에게 전달합니다.
- 세션 저장: 세션 ID와 관련된 정보(사용자 ID, 로그인 날짜, 유효 기간 등)를 서버의 데이터베이스에 저장합니다.
- 세션 유지: 사용자는 세션 ID를 통해 로그인 상태를 유지하며, 서버는 각 요청마다 세션 ID를 확인하여 사용자의 로그인 상태를 검증합니다.
장점
- 사용자의 HTTP 요청마다 로그인 상태를 확인하여 보안이 뛰어납니다.
- 민감한 사용자 정보를 서버에서 안전하게 관리할 수 있습니다.
단점
- 데이터베이스에 부하가 많이 가며, 관리 비용이 높습니다.
2. Token 방식 (JWT)
JWT(JSON Web Token)는 클라이언트 측에서 사용자의 인증 정보를 저장하고 전송하는 방식입니다.
JWT 방식의 로그인 절차
- 로그인 요청: 사용자가 로그인 정보를 서버에 전송합니다.
- 인증 및 토큰 발급: 서버는 로그인 정보를 검증하고, 유효한 경우 JWT를 생성합니다. JWT에는 사용자 식별자, 토큰 만료 시간, 발급자 등의 정보가 포함됩니다.
- 토큰 반환 및 저장: 서버는 생성된 JWT를 클라이언트에 반환하고, 클라이언트는 이를 로컬 스토리지나 쿠키에 저장합니다.
- 토큰을 이용한 요청: 사용자가 이후 요청을 보낼 때, 저장된 JWT를 HTTP 요청의 Authorization 헤더에 포함시켜 서버로 전송합니다.
- 서버의 요청 처리: 서버는 요청에 포함된 JWT를 검증하고, 유효하다면 요청된 작업을 수행합니다.
장점
-
많은 사용자가 있을 때 성능이 우수합니다.
-
클라이언트 측에서 상태 정보를 관리하므로 서버 부하가 적습니다. 단점
-
토큰의 유효성을 제한하기 어렵습니다.
-
토큰 탈취 시 보안 문제가 발생할 수 있습니다.
3. OAuth
OAuth
는 소셜로그인
으로 널리 알려져 있으며 제3자 애플리케이션에서 사용자의 리소스에 접근할 수 있도록 허가하는 프로토콜입니다.
예: 구글, 페이스북, 카카오톡 통한 회원가입 및 로그인
OAuth 방식의 로그인 절차
- 인증 요청: 사용자는 타사 제공자의 인증 페이지로 리디렉션됩니다.
- 사용자 동의: 사용자는 인증 페이지에서 자신의 자원 접근을 허가합니다.
- 인증 및 토큰 발급: 타사 제공자는 사용자 동의를 받으면 인증 코드를 클라이언트 애플리케이션에 반환합니다.
- 토큰 요청: 클라이언트 애플리케이션은 인증 코드를 이용해 접근 토큰을 요청합니다.
- 접근 토큰 발급: 타사 제공자는 접근 토큰을 발급하고, 이를 클라이언트 애플리케이션에 반환합니다.
- 리소스 접근: 클라이언트 애플리케이션은 접근 토큰을 이용해 사용자의 리소스에 접근합니다.
장점
-
다양한 플랫폼에서 일관된 사용자 경험을 제공합니다.
-
사용자의 자격 증명을 공유하지 않아도 되므로 보안성이 높습니다.
단점
-
구현 복잡도가 높습니다.
-
타사 제공자에 대한 의존성이 있습니다.
결론
로그인 방식 | 저장 위치 | 장점 | 단점 |
---|---|---|---|
세션(Session) | 서버의 메모리 또는 데이터베이스 | 사용자의 HTTP 요청마다 로그인 상태를 확인하여 보안이 뛰어남. | 데이터베이스에 부하가 많이 가며, 관리 비용이 높음. |
토큰(JWT) | 클라이언트(로컬 스토리지 또는 쿠키) | 많은 사용자가 있을 때 성능이 우수, 클라이언트 측에서 상태 정보 관리 | 토큰의 유효성을 제한하기 어렵고, 탈취 시 보안 문제가 발생 |
OAuth | 클라이언트 및 제3자 서버 | 다양한 플랫폼에서 일관된 사용자 경험 제공, 보안성 높음 | 구현 복잡도가 높고, 타사 제공자에 대한 의존성 있음 |
sessionStorage와의 관계
sessionStorage: HTML5 웹 스토리지 중 하나로, 브라우저 세션 동안 데이터가 유지되며 탭이나 창을 닫으면 데이터가 삭제됩니다. 주로 클라이언트 측에서 일시적으로 데이터를 저장하는 용도로 사용됩니다.
-
세션 방식: 서버 측 세션 관리와는 관련이 없습니다. 세션 방식에서는 세션 ID가 쿠키에 저장됩니다.
-
JWT 방식: JWT는 로컬 스토리지나 쿠키에 저장되는 것이 일반적이며, sessionStorage에 저장하는 것은 일반적이지 않습니다. sessionStorage는 세션이 종료되면 데이터가 사라지기 때문에, 토큰을 영구적으로 저장하기에는 적합하지 않습니다.
이전 포스트
타입스크립트 주요 타입 정리다음 포스트
NextAuth.js 인증 구현하기