저는 이번에 AWS Cognito 를 사용하면서 Cognito 에서 기본으로 지원하지 않는 Nickname 중복체크를 어떻게 구현했는지 포스팅 하겠습니다.
1. Cognito 란
Nickname 중복체크에 관해서 이야기 하기 전에 AWS 공식 홈페이지를 통해서 Cognito가 뭔지 간단하게 알아보겠습니다.
공식 홈페이지의 설명을 보면 아시겠지만 간단하게 다시 설명하자면 개발자들이 서비스를 만들 때 거의 필수적으로 하는 회원가입, 로그인, 비밀번호 찾기 등을 쉽게 내 프로젝트에 적용시킬 수 있게 만든 AWS 의 서비스 입니다.
저는 위 설명처럼 사용자의 회원가입, 로그인, 비밀번호 찾기 등 사용자 관리하고 그것을 기반으로 다른 AWS 서비스에 접근할 때 권한을 체크해주는 역할로 사용하고 있습니다.
2. Cognito 기본
Cognito 는 회원가입을 할 때 다양한 속성들을 폼에 입력받아 저장할 수 있다. Cognito 에서 지원하는 속성들은
위 사진에서 체크박스가 있는 속성들이 기본적으로 지원해주는 속성들이고 더 필요한 속성이 있으면 아래에 있는 사용자 지정 속성을 추가해서 사용할 수 있습니다.
저 속성들의 값을 회원가입할 때 받으면 Cognito 에 저장되고 Cognito 의 클라이언트 SDK 를 통해 회원정보를 조회하거나 변경, 삭제 할 수 있습니다.
그중에서 username, email, phone number 등은 기본적으로 유니크한 값이 들어가야하는데 나머지 속성들을 유니크한 값으로 설정해주는 옵션이 존재하지 않았습니다.
3. Cognito 트리거 사용
저는 Nickname 을 유니크 하게 저장해야했기 때문에 Cognito 에서 기본적으로 지원하지 않는 옵션들을 구현할 수 있는 방법을 찾다가 회원가입 전 후로 제가 원하는 백엔드 로직(닉네임 중복체크)을 사용할 수 있는 트리거를 알게되었습니다.
Cognito 에서 사용할 수 있는 트리거의 종류는 사전가입, 사용자 지정 메시지, 사전인증, 사후인증 등 여러가지가 있습니다.
저는 그중에서 회원가입 버튼을 누르면 Lambda 를 실행시켜주는 사전 가입 트리거를 사용해야겠다고 생각했습니다.
사전 가입 트리거를 알고난 뒤 간단하게
사전 가입 트리거가 -> Cognito 에서 폼에 있는 Nickname 존재하는지 확인 -> 없으면 가입완료, 있으면 가입실패
와 같은 구조로 구현하려고 했습니다.
하지만 Cognito 의 Client SDK 를 살펴보니
위의 사진 안에 있는 속성들만 검색이 가능하고 Nickname 같은 속성들은 검색이 되지 않았습니다.
그래서 고민을 하다가 현재 사용하고 있는 Dynamo DB 에 유저 테이블을 만들어 유저의 고유값과 Nickname 을 저장한 다음 중복된 Nickname 이 존재하는지 확인해야겠다고 생각했습니다.
그래서 생각한 구조는
회원가입 버튼 클릭 -> Lambda 에서 Dynamo DB 에 있는 Nickname 중 현재 사용하려는 Nickname 이 존재하는지 확인 -> 있다면 '닉네임 중복'이라는 메세지를 보내고, 없다면 회원가입 완료 처리 -> 완료 되었을 때 사용자 지정 메세지 트리거를 이용해 가입된 사용자의 Nickname 을 Dynamo DB 에 저장
같은 방식으로 구현해야겠다고 생각했고 실제로 구현해 사용하고 있습니다.
4. 구현하기
구현하는 과정은 추후에 샘플 앱을 만들어서 자세히 설명하도록 하겠습니다.
'개발이야기' 카테고리의 다른 글
동적 할당할 때 드는 비용이 얼마일까? (1) | 2019.07.13 |
---|---|
7개월차 개발자의 이야기 (0) | 2019.07.13 |
[MySQL] EXPLAIN 으로 쿼리문 테스트 하기 (0) | 2019.07.13 |
Zbar , OpenCV 사용해서 QR코드 인식하기 (0) | 2019.07.12 |
디자이너가 없는 회사에서 디자인 작업을 하는 방법. (0) | 2019.07.12 |