session, JWT, OAuth 대해 알아보자

김문주·2024년 3월 1일
1

모든 웹 페이지에는 로그인과 회원가입 기능이 들어가 있다. 그중에 로그인이 어떻게 동작하고 있는지 알아보자.

로그인/회원가입 기능 동작 방식

우선 로그인과 회원가입이 어떻게 동작하는지 어떤 방식이 있는지 가볍게 알아보고, 로그인 기능부터 알아보자.

회원가입

  • 유저가 회원가입을 하면 아이디/비번을 DB에 저장해 둔다.

로그인

  • 유저가 로그인 시 아이디/비번을 서버로 보낸다.
  • 서버는 DB에 있는 아이디/비번과 유저가 보낸 아이디/비번이 일치하는 경우 입장권을 발급해 준다.

로그인이 필요한 서버 기능

  • 유저는 서버에 GET/POST로 데이터 요청 시 입장권도 함께 제시한다.
  • 서버는 입장권 확인 후 데이터나 페이지 보내준다.
    여기서 입장권을 만들 땐 대표적으로 session, token 방식이 있다.

session 방식

세션이란 쉽게 말하면 서버의 컴퓨터(서버에 세션 저장소)에 클라이언트의 정보를 기억하고 유지하는 것이다. 유저(정확히는 브라우저)가 로그인을 하였다면 서버의 컴퓨터(세션 저장소)에서 사용자 정보(주로 브라우저에 쿠키에 저장하게 된다)를 확인한 뒤 확인되었다면 일정 시간 동안 유지시키며 이후 사용자가 서비스를 요청할 때마다 세션 저장소에서 세션을 조회하고 작업을 처리하는 방식이다.

서버 측에 { 유저의 아이디, 로그인 날짜, 유효기간, session id } 등의 유저의 정보를 저장하고, 식별자(Session ID)값을 클라이언트 쿠키에 남겨둔 후 사용자 상태를 유지하기 위해 세션 식별자(Session ID)를 사용합니다. 이러한 장점은 매번 GET/POST 요청할 때 마다 DB를 조회해 보기 때문에 하나하나의 요청마다 엄격하게 유저를 체크해볼 수 있고, 세션 ID값만 가지고 접근할 수 있고 저장하기 때문에 접근이 매우 용이하다.

단점은 그만큼 DB의 부담이 심해질 수 있고, 모든 서버끼리 같은 세션을 공유하여야 하므로 확장성 문제도 있다.

token 방식

token 방식은 대부분 우리가 알고 있는 JWT방식 이다. JWT(JSON Web Token)

JWT는 사용자 정보를 JSON 객체에 담아 이를 암호화하고 해싱 작업을 거쳐 문자열 토큰을 생성하는 방식이다. 유저가 로그인하면 유저에게 입장권을 발급해 줄 때 입장권에 { 유저의 아이디, 로그인 날짜, 유효기간 } 등을 적어두고 암호화해서 보냅니다. 그리고 별 이상 없으면 통과시켜 준다. DB에 뭐 저장하거나 그런 건 없음.

장점은 매번 GET/POST 요청할 때마다 DB를 조회할 필요가 없어서 DB 부담이 적다.

단점은 누군가 토큰을 빼간다면 토큰을 이용하여 권한을 수행할 수 있기 때문에 보안에 신경 쓸 필요가 있다. 그렇다고 매번 그 누군가를 잡아서 DB 같은 곳에 기록해 두고 조회해서 로그인시킨다면 이건 session 방식과 딱히 다른 점이 없다.

OAuth

OAuth는 입장권 같은 건 아니고 OAuth의 뜻은 유저의 A 사이트의 사용 권한을 B 사이트를 운영하는 내가 잠깐 빌릴 수 있는데 그 과정을 정의하는 규칙 같은 거다.

그래서 OAuth를 잘 이용하면 유저의 A 사이트 회원 정보를 가져와서 내가 운영하는 B 사이트 회원가입 시 사용할 수도 있고 이걸 흔히 소셜 로그인이라고도 부른다.

마무리

간단하게 session token OAuth방식을 알아봤는데 각자의 장단점이 있기 때문에 제작하고 있는 페이지와 유저를 고려한 뒤 적절하게 사용해서 기능을 구현해야 겠다. 다음 글은 Next-Auth (Auth.js) 라이브러리를 가지고 로그인 하는 방법을 가져올게요.

profile
안녕하세요:)

0개의 댓글