대체 로그인을 어떻게 구현해야 하나요

ever.d·2022년 9월 24일
0

STUDY

목록 보기
4/7

개발을 시작하면 가장 먼저 맞닥뜨리는 난관은 저마다 다르겠지만
내 기억에 로그인이었던 것 같다.

거의 모든 서비스는 로그인을 필요로 하는데 세션 쿠키 토큰 서버에 저장 이런 개념들이 내 머리 속에 혼재되어 헷갈렸고 로그인을 구현하는 방법은 정말 너무 많았다.

그 중 세션과 토큰을 사용하는 방법 두 가지를 간략히 정리해본다. 서비스에 적합한 방식으로 로그인을 구현해서 사용하는 똑똑한 개발자가 되자!

session ✅
세션은 보안을 중시하는 / 구현이 간편한 로그인 방법이다.

  1. 클라이언트 -> 로그인 API 요청 (id:abc / password:1234) -> 서버
    클라이언트가 서버에 로그인하고 싶다고 요청한다.

  2. 서버 -> "정보 있네. 확인된 유저 맞아." -> 서버 쪽에서 세션 생성
    서버는 세션을 만들고 (req.session) 로그인 정보가 DB에 저장되어 있는지 확인한 다음 session은 쿠키에 sid 라는 session id를 보내준다. 이는 사용자가 입력한 id 값 abc가 아니라 dkfjlasjfjfksjfkldsjfk33284 이런 형식으로 unique한 key가 만들어져서 사용자 확인을 할 수 있게끔 한다.

  3. 서버 -> "sid: dkfjlasjfjfksjfkldsjfk33284 인 사용자야. 이 정보 줄게" -> 쿠키에 담아야지 -> (200 성공 응답) -> 클라이언트
    그러면 최종적으로 서버에서 유저 정보/유저 로그인 성공 여부를 클라이언트 측에 돌려준다.

express-session 라이브러리를 쓰면 해당 세션을 filestore에 저장할 수도 있고 database에 저장할 수도 있고 redis에 저장할 수도 있고 다양한 방법으로 세션을 저장할 수 있으며
cookie에 만료 시간 등을 설정하며 일정 시간이 지나면 자동으로 쿠키 및 쿠키에 담긴 세션 정보가 사라져서 로그인을 다시 요청하도록 만들 수도 있다.

클라이언트가 유저 정보를 들고 있지 않기 때문에 보안 면에서 더 우수하다고 볼 수 있다.
다만 세션을 저장하기 위한 메모리가 들고 세션 저장소 관리가 필요하다는 점은 단점이라고 볼 수 있겠다.

token(jwt) ✅
그렇다면 정말 많이 쓰이는 jwt는 언제 써야할까?
(엄밀히 말하면 jwt는 서명된 토큰이기에 일반적인 token과는 그 의미가 다르겠지만 편의상 같게 보고 글을 적는다.)
그 고민의 끝에는 다음과 같은 결과가 나왔다. 이용하는 유저 수가 많아졌을 때 쓰기 적합하고 / 사용이 간편한 로그인 방법이다.

"access token" 값 하나로 서버-클라이언트 간 로그인 작업을 손쉽게 수행할 수 있다.
swagger를 사용할 때도 그 간편함이 장점이 된다.

또한 세션 저장소가 따로 필요없기 때문에 저장소에 대한 고민을 하지 않아도 된다는 점이 큰 장점이다.

문제는 구현하면 사용하기는 편한데, 구현이 처음 접한 이들에게는 꽤나 복잡하다는 것이다. 어디까지나 내 경험 기반이다.

https://jwt.io/

결론은 서비스에 적합한 로그인 방식을 채택해서 쓰자는 것이다.☺️

profile
developer / not moving for fortune, only aiming for clear sense of purpose. That's all.

0개의 댓글