올해 4월부터 소프트웨어 마에스트로 15기 과정에 참여하게 되었는데, 4월부터 6월까지 약 3개월이라는 긴 시간동안 프로젝트 기획 및 기획 검증의 시간을 가졌다.
기획에 꽤 많은 시간을 쏟다보니 (기획에 이렇게 공을 들여본 프로젝트는 처음이다 .. !) 개발에 투자할 시간이 줄어들어 일정이 살짝 빠듯해졌다. 프로토타입 출시까지 남은 약 2주의 시간 동안 빠르게 개발이 이루어져야 하는 상황이다.
나는 현재 카카오 로그인 및 회원가입 개발을 맡고 있는데, 스프링 시큐리티와 함께 OAuth2 Client 라이브러리를 사용하는 과정에서 (많은) 시행착오를 겪어 생각보다 개발이 지연되었다. 그래도 다행히 프론트엔드와 연동 테스트를 거쳐 무사히 사용자 정보 가져오기를 마쳤다!
카카오 로그인 과정에서 엑세스 토큰과 리프레시 토큰을 발급받기는 하지만, 보안상의 이유로 서비스 API를 호출할 때 카카오 토큰을 계속해서 사용하는 것은 권장되지 않는다고 한다. 따라서 카카오 로그인이 끝나는 시점에 서비스 내에서 자체적으로 엑세스 토큰과 리프레시 토큰을 생성해주고자 한다.
처음에는 토큰 관련한 로직을 전부 직접 개발하려고 했지만, 앞서 사담에서 언급했듯이 개발 일정이 빠듯한 와중에 이건 좋은 선택이 아닌 것 같았다. 그리고 무엇보다 실사용자를 유치하고자 하는 서비스에서 보안 상 구멍이라도 생긴다면 ..? 🫨
이때 AWS Cognito를 사용하게 되면 Cognito에서 제공해주는 API를 사용해 보다 간편하고 안전하게 인가 처리를 할 수 있다고 해 고민끝에 도입해보기로 결정하게 되었다. (그리고 무엇보다 멘토님의 추천이 있었다!🤩)
또 사용자 50,000명이 넘어가기 전까지는 과금 없이 Cognito에서 제공하는 서비스를 계속해서 무료로 사용할 수 있다는 점도 큰 메리트로 다가왔다.
Cognito는 인증/인가, 로그인, 회원가입, 자격증명 등 회원관리에 필요한 모든 기능들을 총망라하여 지원해주는 AWS 서비스 중 하나이다. AWS Cognito에서 제공하는 기능은 크게 두 가지로, 사용자 풀(User Pool)과 자격 증명 풀(Identity Pool)이 있다.
사용자 풀은 말 그대로 사용자 정보를 저장하고 있는 저장소의 역할을 한다. 다양한 방식의 회원가입과 로그인을 지원하고, 로그인 한 사용자에게는 토큰을 발급해 자격 증명을 수행할 수 있게 도와준다.
자격 증명 풀은 사용자 풀에 등록되어 있는 사용자의 AWS 인프라 접근 권한을 관리할 수 있도록 도와준다. 사용자 풀을 생성하는 과정이 선행시 되어야 한다는 특징이 있다.
Cognito를 도입하게 된 주요 목적이 토큰 발행 및 관리인 만큼, 이번에는 사용자 풀을 생성하고 프로젝트와 연동하는 방법에 대해서만 다루고자 한다.
Cognito 사용자 풀
을 선택한다. 만약 자격 증명 풀도 함께 사용하고자 한다면 연동 자격 증명 공급자
를 함께 선택하면 된다.사용자 풀 로그인 옵션
은 사용자 풀에서 개별 사용자를 구별하기 위해 사용할 고유값이라고 생각하면 된다. 여기서 선택한 옵션이 사용자 풀에 중복되게 존재하면 사용자를 등록할 수 없기 때문에 나는 사용자 이름 대신 이메일을 선택했다.필수 속성
은 사용자를 유저 풀에 등록할 때 반드시 포함해야 할 정보를 말한다. 앞서 로그인 옵션으로 이메일을 선택했기 때문에 이메일은 자동으로 포함되었다.사용자 지정 속성
도 마찬가지의 이유로 추가로 등록하지 않고 넘어간다.클라이언트 보안키
(Secret Key)를 노출하지 않고 안전하게 관리할 수 있느냐인데, 브라우저 환경에서는 보안키를 안전하게 관리할 수 없으므로 퍼블릭 클라이언트는 보안키를 생성하지 않도록 주의한다.기밀 클라이언트
를 선택해 주고, 클라이언트 보안키를 생성해 환경변수로 안전하게 처리하고자 한다.[보안/인증] Amazon Cognito를 이용한 백엔드 API 권한 관리 | 배진수, 당근마켓을 참고했습니다.