[AWS 배포기 #0] 배포를 내가 해보려고함 - 외부API키 발급
4~5주짜리 팀 프로젝트가 끝났습니다. 저는 그 안에서 도메인 CRUD, 외부 API 연동(OpenFeign), Redis, Kafka를 맡았습니다.
프로젝트를 마치고 나서 가장 아쉬웠던 부분은 배포를 한 번도 직접 해보지 못했다는 점!!
그래서 팀 레포를 fork해놓은것을 내 AWS 계정에 처음부터 다시 올려보기로 했습니다.
AWS 콘솔을 열기 전에, 외부 키 6개부터 받아두려고 합니다.
배포할 스택
영화·드라마·스포츠 중 무엇을 볼지 고민하는 사람을 위한 콘텐츠 큐레이션 서비스입니다. 전체 스택은 아래와 같습니다.
| 분류 | 스택 |
|---|---|
| 언어·프레임워크 | Java 17 · Spring Boot 3.5 · Spring Security · Spring Batch |
| 데이터 | PostgreSQL 16 · Spring Data JPA · QueryDSL · Redis 7 |
| 실시간·메시징 | WebSocket(STOMP) · SSE · Kafka 3.9 · Elasticsearch 8.18 |
| 인증·외부 API | JWT · OAuth2(Google, Kakao) · TMDB · The Sports DB |
| 인프라 | AWS ECS · ECR · S3 · Docker · Nginx · GitHub Actions |
받을 외부 API 목록
이번에 받을 외부API는 4종류
| 서비스 | 받는 값 |
|---|---|
| TMDB | API 키 |
| The Sports DB | API 키 |
| 클라이언트 ID · 보안 비밀번호 | |
| Kakao | REST API 키 · 클라이언트 시크릿 |
TMDB · The Sports DB
TMDB는 themoviedb.org 에 가입한 뒤 API 발급을 신청하면 받을 수 있습니다.
The Sports DB는 thesportsdb.com 문서에 있는 Free Sports API를 참고하면 됩니다. 다만 무료 플랜은 응답 개수가 너무 짬..(1 ~ 3개 정도)
Google 로그인
console.cloud.google.com 에서 발급받습니다. 동의 화면을 먼저 채운 다음, 클라이언트를 만들어야 키를 받을 수 있습니다.
동의 화면
먼저 프로젝트를 생성하고 만든 프로젝트를 선택합니다. 이름은 자유롭게 정해도 무방하고, 상위 리소스는 개인 계정이라면 조직이 없으므로 비워두면 됩니다. 그다음 API 및 서비스 메뉴에서 OAuth 동의 화면으로 들어가면, "아직 구성되지 않음"이라는 문구와 함께 시작하기 버튼이 보이는데 그것을 누릅니다.
앱 정보 입력에서는 앱 이름에 서비스 이름을 넣습니다. 이 이름은 로그인할 때 사용자에게 그대로 노출되고, 이름에 Google이 들어가면 거부된다는 점을 유의해야 합니다. 지원 이메일은 드롭다운에서 본인 계정을 선택하면 됩니다. 대상은 외부로 설정하는데, 내부는 Workspace 조직 계정 전용이라 개인 계정으로는 선택 자체가 불가능합니다. 마지막으로 연락처 정보에는 본인 이메일을 직접 입력합니다. 이 값은 사용자에게 보이는 게 아니라 구글이 공지 보낼 때 쓰는 주소입니다.
여기까지는 전부 동의 화면 설정이라 키는 아직 나오지 않습니다. 클라이언트까지 만들어야 키가 발급됩니다.
클라이언트 만들기
클라이언트 만들기 화면에서 채워야 하는 항목은 네 가지입니다.
| 칸 | 넣을 값 |
|---|---|
| 애플리케이션 유형 | 웹 애플리케이션 |
| 이름 | 자유롭게 (콘솔 안에서 구분하는 용도) |
| 승인된 JavaScript 원본 | 비워둠. 브라우저에서 구글 SDK를 직접 호출할 때 쓰는 칸, 이 서비스는 서버가 처리 |
| 승인된 리디렉션 URI | http://localhost:8080/login/oauth2/code/google |
리디렉션 URI는 임의로 짓는 값이 아닙니다. 스프링 시큐리티가 주소/login/oauth2/code/제공자이름 형태로 자동으로 만들어주는 규칙이라, 뒤에 붙는 제공자 이름만 google로 바뀝니다. 입력란은 URI 추가 버튼을 눌러야 새로 생깁니다.
보안 비밀번호는 생성할때 한 번만 보여줍니다. 만들기 버튼을 누르면 클라이언트 ID와 보안 비밀번호가 함께 나타나는데 JSON을 내려받거나 바로 복사해두어야 합니다.
Kakao 로그인
developers.kakao.com 에서 카카오 계정으로 로그인해 발급받습니다. 설정은 크게 네 단계를 거칩니다.
앱 추가
애플리케이션 추가하기 화면에서 채워야 하는 항목은 네 가지입니다.
| 칸 | 넣을 값 |
|---|---|
| 앱 이름 | 서비스 이름. 로그인 동의 화면에 그대로 노출 |
| 회사명 | 동의 화면에 "○○○에서 다음 정보를 요청합니다"로 표시 |
| 카테고리 | 자유롭게 선택, 기능에는 영향이 없고 나중에 변경 가능 |
| 앱 대표 도메인 | 비워둠,. 카카오톡 공유·스크랩 기능에 쓰이는 값이라 로그인과는 무관 |
카카오 로그인 켜기
제품 설정의 카카오 로그인 일반 화면에서 사용 설정을 ON으로 바꿉니다. OFF 상태로 두면 로그인 호출 자체가 거부됩니다. 같은 화면의 OpenID Connect는 OFF로 두는데, 이 기능은 ID 토큰을 추가로 발급받는 용도라 닉네임과 프로필 사진만 받는 이번 서비스에는 필요하지 않습니다.
리다이렉트 URI와 시크릿
앱 설정의 플랫폼 키 화면으로 들어가면 REST API 키, JavaScript 키, 네이티브 앱 키 세 가지 나열되어 있습니다. REST API 키를 클릭해 상세 화면으로 들어가야 리다이렉트 URI와 시크릿을 확인할 수 있습니다.
상세 화면에서 확인해야 할 항목은 다섯 가지입니다.
- REST API 키: 클라이언트 ID로 사용하는 값입니다. JavaScript 키와 혼동하지 않아야 합니다.
- 카카오 로그인 리다이렉트 URI:
http://localhost:8080/login/oauth2/code/kakao - 비즈니스 인증 리다이렉트 URI: 별도 용도이므로 건드리지 않습니다.
- 호출 허용 IP 주소: 비워둡니다.
- 클라이언트 시크릿: 이 항목에 표시된 코드가 시크릿입니다.
리다이렉트 주소 규칙은 구글과 동일하며, 끝부분만 kakao로 바뀝니다.
시크릿은 반드시 받아두어야 합니다. 이번 서비스는 토큰을 요청할 때 시크릿을 함께 전달하도록 설정되어 있습니다. 시크릿은 기본적으로 활성화되어 있으므로 따로 켤 필요는 없고, 활성화 표시가 되어 있는지만 확인하면 됩니다.
동의항목
카카오 로그인 동의항목 화면에서는 개인정보 영역의 닉네임과 프로필 사진만 설정합니다.
닉네임과 프로필 사진 두 항목 모두 필수 동의로 설정합니다. 현재 프로젝트 서비스는 로그인하는 순간 닉네임과 프로필 사진으로 회원 정보를 생성하기 때문에, 그 시점에 값이 확실히 넘어와야 하기 때문입니다.
동의 목적도 필수 입력 항목입니다. 로그인 동의 화면에 그대로 노출되는 문구이므로 간결하게 작성했는데, 닉네임은 회원 가입 및 서비스 내 프로필 표시로, 프로필 사진은 서비스 내 프로필 이미지 표시로 적었습니다.