트러블슈팅과 고민

회원가입 기능 설계에 대한 고민 (2025년 3월 29일)

정재익 2025. 8. 3. 00:51

2025년 3월 29일의 고민 노션에서 옮겨오고 있습니다.

 

고민

 

카카오 로그인 -> 서비스 회원가입으로 이어지는 흐름에서의 고민이다.

1. 프론트 - 카카오 인가코드 받아 백엔드로 전송 (/login/kakao API)

2. 백 - 카카오 토큰 발급 요청하고 토큰을 DB에 저장 PK를 DTO에 담아 프론트에 반환

3. 프론트 - 서비스 회원가입시 농장이름을 입력하고 DTO에 채우고 백엔드로 전송 (/login/farm API)

 

문제 - 하나의 API로 회원가입 절차를 끝내고 싶지만 2개의 API를 사용함 서비스 회원가입까지 완료하지 않으면 전체가 롤백되는 일종의 트랜잭션으로 묶고 싶었지만 카카오API라는 외부 API를 호출하기 때문에 어려운 상황

 

그렇기 때문에 만약 농장이름 입력에서 사용자가 가입포기를 하면 실제 사용자가 없는 토큰 ID가 DB에 남게됨

 

이를 해결하기 위해선 서비스 회원가입이 전부 끝나면 일관적으로 토큰과 유저정보를 DB에 저장해야한다. 카카오 토큰을 프론트에 보내는 것으로 해결할 수 있지만 카카오 토큰은 보안 문제로 프론트에 노출되면 안되고 서버에서만 관리되어야한다.

 

1번의 과정이 끝나고 DB에 저장하지 않고 토큰을 잠시 메모리에 저장해뒀다가 서비스 회원가입 시점에 토큰을 가져오는 방법도 있지만 그 메모리에 저장된 토큰이 현재 로그인을 진행중인 사람의 토큰이란 보장이없음 그래서 현재 DTO에 pk를 만들어서 API를 2개 활용하고 있음

 

목표

1. 프론트에 카카오토큰이 노출되면 안된다.

2. 서비스 회원가입까지 끝내야 DB에 업데이트가 되게한다.

3. 서비스 회원가입화면에서 나갔다가 다시 돌아와도 매끄럽게 회원가입이 진행되어야한다.

4. API 하나로 일련의 회원가입 과정을 끝내야만한다.

 


해결

 

1. 카카오 로그인과 서비스 회원가입 사이에 5분 동안의 단기 쿠키를 만든다.

2. 사용자 식별을 위해 타임스탬프와_UUID를 조합하여 키를 만들어 메모리에 저장한다.

3. 동시에 여러명이 로그인해도 정확하게 식별할 수 있다.

4. 단기 쿠키가 있기 때문에 회원가입 화면에서 나갔다 와도 회원가입이 매끄럽게 진행된다.

5. 메모리 최적화는 5분의 기간이 지나면 메모리를 비움으로서 카카오 로그인부터 다시 시작하게한다. 그리고 서비스 회원가입이 끝나면 해당 사람의 키는 삭제한다.

6. 하나의 API로 진행하는건 해결하지 못했다. 다만 DB의 무결성은 해결했다.