본문 바로가기

개발이야기

Cognito 에서 Nickname 중복 체크하기

저는 이번에 AWS Cognito 를 사용하면서 Cognito 에서 기본으로 지원하지 않는 Nickname 중복체크를 어떻게 구현했는지 포스팅 하겠습니다.

1. Cognito 란

Nickname 중복체크에 관해서 이야기 하기 전에 AWS 공식 홈페이지를 통해서 Cognito가 뭔지 간단하게 알아보겠습니다.

출처 : https://docs.aws.amazon.com/ko_kr/cognito/latest/developerguide/what-is-amazon-cognito.html


공식 홈페이지의 설명을 보면 아시겠지만 간단하게 다시 설명하자면 개발자들이 서비스를 만들 때 거의 필수적으로 하는 회원가입, 로그인, 비밀번호 찾기 등을 쉽게 내 프로젝트에 적용시킬 수 있게 만든 AWS 의 서비스 입니다. 

저는 위 설명처럼 사용자의 회원가입, 로그인, 비밀번호 찾기 등 사용자 관리하고 그것을 기반으로 다른 AWS 서비스에 접근할 때 권한을 체크해주는 역할로 사용하고 있습니다.

2. Cognito 기본

Cognito 는 회원가입을 할 때 다양한 속성들을 폼에 입력받아 저장할 수 있다. Cognito 에서 지원하는 속성들은

출처 : AWS Cognito 콘솔 - 일반설정 - 속성탭

위 사진에서 체크박스가 있는 속성들이 기본적으로 지원해주는 속성들이고 더 필요한 속성이 있으면 아래에 있는 사용자 지정 속성을 추가해서 사용할 수 있습니다.

저 속성들의 값을 회원가입할 때 받으면 Cognito 에 저장되고 Cognito 의 클라이언트 SDK 를 통해 회원정보를 조회하거나 변경, 삭제 할 수 있습니다.

그중에서 username, email, phone number 등은 기본적으로 유니크한 값이 들어가야하는데 나머지 속성들을 유니크한 값으로 설정해주는 옵션이 존재하지 않았습니다.

3. Cognito 트리거 사용

저는 Nickname 을 유니크 하게 저장해야했기 때문에 Cognito 에서 기본적으로 지원하지 않는 옵션들을 구현할 수 있는 방법을 찾다가 회원가입 전 후로 제가 원하는 백엔드 로직(닉네임 중복체크)을 사용할 수 있는 트리거를 알게되었습니다.

Cognito 에서 사용할 수 있는 트리거의 종류는 사전가입, 사용자 지정 메시지, 사전인증, 사후인증 등 여러가지가 있습니다.

출처 : AWS Cognito 콘솔 - 일반설정 - 트리거

저는 그중에서 회원가입 버튼을 누르면 Lambda 를 실행시켜주는 사전 가입 트리거를 사용해야겠다고 생각했습니다.

사전 가입 트리거를 알고난 뒤 간단하게
사전 가입 트리거가 -> Cognito 에서 폼에 있는 Nickname 존재하는지 확인 -> 없으면 가입완료, 있으면 가입실패
와 같은 구조로 구현하려고 했습니다.

하지만 Cognito 의 Client SDK 를 살펴보니

출처 : 

위의 사진 안에 있는 속성들만 검색이 가능하고 Nickname 같은 속성들은 검색이 되지 않았습니다.

그래서 고민을 하다가 현재 사용하고 있는 Dynamo DB 에 유저 테이블을 만들어 유저의 고유값과 Nickname 을 저장한 다음 중복된 Nickname 이 존재하는지 확인해야겠다고 생각했습니다.

그래서 생각한 구조는
회원가입 버튼 클릭 -> Lambda 에서 Dynamo DB 에 있는 Nickname 중 현재 사용하려는 Nickname 이 존재하는지 확인 -> 있다면 '닉네임 중복'이라는 메세지를 보내고, 없다면 회원가입 완료 처리 -> 완료 되었을 때 사용자 지정 메세지 트리거를 이용해 가입된 사용자의 Nickname 을 Dynamo DB 에 저장
같은 방식으로 구현해야겠다고 생각했고 실제로 구현해 사용하고 있습니다.

4. 구현하기

구현하는 과정은 추후에 샘플 앱을 만들어서 자세히 설명하도록 하겠습니다.