인프런 커뮤니티 질문&답변

김용민님의 프로필 이미지

작성한 질문수

[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core

로그인 로직 정리하기

로그인/소셜로그인 테이블 설계 관련 궁금증 관련 질문입니다.

24.07.23 02:32 작성

·

120

0

강좌를 들은 후, 소셜로그인을 구현하다가 의문점이 생긴 부분이 있어 어떠한 방식으로 접근하는 것이 궁금하여 질문을 남깁니다.

상황
일반 회원가입시에는, 이메일 비밀번호 + 해당 서비스에 필요한 필수 정보들을 받고, 해당 내용을 클라이언트로 부터 받아 user테이블에 저장하는 상황입니다.
소셜 로그인 같은 경우에는, 정보를 받을 수 있는 것이 제한이 되어있어, 추가적으로 필요한 정보들을, 소셜 로그인 성공 이후, 클라이언트 측에서 회원가입시 필요한 정보들을 받을 수 있는 화면으로 이동시켜, 해당 정보를 받아서, 부족한 정보들을 채워넣는 것으로 알고 있습니다.

궁금점.
소셜로그인 로그인 후, 신규 유저이기에 서비스 이용에 필요한 필수 부가정보 입력을 받기위해, 회원가입 창으로 이동시켜, 부가 정보를 입력받는다면 크게 문제가 없습니다.하지만, 앱을 사용하다보면은 데이터가 끊긴다거나, 배터리가 방전된다거나, 알수없는 이유로, 로그인은 되었으나, 필수 부가정보를 입력하지 못하고, 꺼지는 경우가 있습니다. 필수 부가정보를 꼭 받아야 하는 경우라면 이 부분에 대해서 어떻게 처리해야하나요?필수 정보를 채웠는지 여부를 확인하는 column을 boolean으로 User 테이블에 추가하여, 클라이언트에서 해당 Column으로 부가정보를 입력받지 않았으면 메인화면으로 가지않고, 회원가입 스크린으로 리다이렉 시키는 이런 로직을 작성해야하나요?필수 정보를 채웠는지 여부를 확인하는 column 없이 이런 경우에 처리할 수 있는 방안이 있는지 궁금하고, 현업에서는 어떤식으로 테이블을 설계하는지 궁금합니다!

답변 2

0

Hongnam Kim님의 프로필 이미지

2024. 07. 24. 07:25

제가 처리했던 방법은 신규 유저가 소셜로그인을 한 경우 OAuth 제공사로부터 받는 기본 정보를 TempUser 로 관리하고

이 정보를 JWT 로 클라이언트에 보냈습니다.

그리고 부가정보를 입력할 때 이 JWT 를 같이 담아서 서버에 요청하는 방식으로 처리했습니다.

서버는 부가정보와 JWT 를 받으면, JWT 로 TempUser 에서 기본 정보를 찾고, 이 기본 정보와 부가정보를 합쳐서

User 엔티티를 생성하고, 정상적으로 User 가 생성되면 TempUser 를 삭제했습니다.

그리고 이 과정은 트랜잭션 처리를 해서 중간에 문제가 발생하여 회원가입을 완료하지 못하였는데 TempUser 만 사라지지 않도록 했습니다.

추가로 소셜로그인만 하고 부가정보를 입력하지 않는 경우도 있기 때문에 스케쥴 처리로 한달 이상 된 TempUser 들을 삭제하도록 했습니다.

0

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

2024. 07. 23. 08:56

안녕하세요!

테이블 설계는 전적으로 설계하는 팀의 마음입니다.

정답은 없습니다.

말씀하신대로 특정 조건들을 파악 할 수 있다면 프론트엔드에서 처리가 가능한 부분입니다.

예를들어

  • 사용자가 생성 됐는데 이메일 확인이 안된경우?

  • 사용자가 생성 됐는데 핸드폰 번호가 확인 안된경우?

  • 사용자가 생성 됐는데 프로필 작성을 하지 않은경우?

이런 경우 외에도 수많은 다른 예시들이 있을 수 있는데 너무 단순한 if문일 뿐입니다.

테이블 설계 또한 boolean 값을 받을수도 있겠지만 칼럼을 nullable로 할 수도 있습니다.

Nullable이 싫다면 관계 테이블을 생성해서 해당 관계 테이블의 값 존재 여부를 확인 할 수도 있죠.

방법은 너무도 많고 프로젝트별로 적합한 방법은 항상 다를 수 밖에 없습니다.

감사합니다!