본문 바로가기
eomoff
Dev Log/Projects

[AWS 배포기 #0] 배포를 내가 해보려고함 - 외부API키 발급

eomoff 2026. 9. 10. 00:33

4~5주짜리 팀 프로젝트가 끝났음. 나는 도메인 CRUD랑 외부 API 연동(OpenFeign), Redis, Kafka를 맡음.

끝나고 나니 제일 아쉬운 건 배포를 한 번도 안 해봤다는 것임. 팀 프로젝트에서 인프라를 한 명이 맡으면 나머지는 배포를 배울 기회가 없음.

우리 팀 서비스는 잘 돌아감. 그런데 그건 팀원이 만든 환경이고, 나는 그게 어떻게 떠 있는지 설명을 못 함. 그래서 팀 레포를 fork해서 내 AWS 계정에 처음부터 다시 올려보려고 함.

이번 편에서는 AWS 콘솔을 열기 전에 외부 API 키부터 받아둠. 도메인 없이 지금 받을 수 있는 것들임.

배포할 스택

배포할 프로젝트는 영화, 드라마, 스포츠 등 무엇을 볼지 고민하는 모든 분들을 위한 콘텐츠 큐레이션 서비스임.

분류 스택
언어·프레임워크 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

AWS 리소스는 아직 하나도 없음. 그런데 표 오른쪽 두 줄, 외부 서비스에 붙는 값들은 지금 받아둘 수 있음. 이번 편은 여기까지 함.

외부 API

TMDB

themoviedb.org 에 가입하고 API 발급을 신청하면 됨.

The Sports DB

thesportsdb.com 에 들어가서 문서를 보면 Free Sports API라고 있음. 그거 보면 됨. 무료는 응답 개수가 매우 적음.

Google OAuth2

console.cloud.google.com 에서 발급함.

  1. 프로젝트 생성 → 만든 프로젝트 선택
    • 이름은 아무거나 상관없음
    • 상위 리소스는 개인 계정이면 조직이 없어서 비워두면 됨
  2. API 및 서비스 → OAuth 동의 화면
    • "아직 구성되지 않음"이라고 나오면서 시작하기 버튼이 있으면 그거 누르면 됨
  3. 앱 정보
    • 앱 이름은 로그인할 때 사용자한테 그대로 노출되니까 서비스 이름으로 넣음
    • 이름에 Google이 들어가면 거부됨
    • 지원 이메일은 드롭다운에서 내 계정 고르면 됨
  4. 대상 → 외부
    • 내부는 Workspace 조직 계정만 되는 옵션이라 개인 계정은 아예 못 고름
  5. 연락처 정보 → 내 이메일 직접 입력
    • 사용자한테 보이는 게 아니고 구글이 공지 보낼 때 쓰는 주소임
  6. 클라이언트 → 클라이언트 만들기

2~5번은 전부 동의 화면 설정임. 여기까지 다 채워도 키는 하나도 안 나옴. 6번까지 가야 나옴.

클라이언트 만들기에서 채우는 칸은 네 개임.

넣을 값
애플리케이션 유형 웹 애플리케이션
이름 콘솔에서 구분하려고 붙이는 이름이라 아무거나. 사용자한테는 안 보임
승인된 JavaScript 원본 비워둠. 브라우저에서 직접 구글 SDK를 호출할 때 쓰는 칸인데 이 프로젝트는 서버가 처리해서 필요 없음
승인된 리디렉션 URI http://localhost:8080/login/oauth2/code/google

리디렉션 URI는 내가 정하는 값이 아님

리디렉션 URI는 URI 추가 버튼을 눌러야 입력란이 생김.

이 주소는 내가 짓는 게 아님. 스프링 시큐리티가 주소/login/oauth2/code/제공자이름 형태로 만들어주는 거라, 뒤에 google만 바뀜.

콘솔에 등록한 값과 한 글자라도 다르면 redirect_uri_mismatch가 남. 포트나 슬래시 하나 차이도 안 됨.

나중에 도메인 생기면 같은 칸에 https://도메인/login/oauth2/code/google을 하나 더 추가하면 됨. localhost는 안 지워도 됨.

클라이언트 보안 비밀번호는 한 번만 보임

만들기를 누르면 클라이언트 ID클라이언트 보안 비밀번호가 나옴.

보안 비밀번호는 이때 딱 한 번만 보임. 2025년 6월부터 바뀌어서, 그 뒤로는 콘솔에서 뒷자리만 마스킹돼서 보임. JSON을 받아두거나 바로 복사해둬야 함.

놓쳤으면 클라이언트를 새로 만들 건 없음. 보안 비밀번호만 재발급하면 되는데 기존 값은 무효가 됨.

처음엔 테스트 상태임

외부로 만들면 앱이 처음엔 테스트 상태임. 테스트 사용자로 등록한 계정만 로그인되고, 리프레시 토큰도 7일이면 만료됨.

도메인 붙이고 실제로 열 때 프로덕션으로 게시하면 됨. email이랑 profile만 쓰면 구글 검수는 없음.

Kakao OAuth2

developers.kakao.com에서 발급함. 카카오 계정으로 로그인하면 됨.

  1. 앱 → 애플리케이션 추가하기
  2. 앱 → 제품 설정 → 카카오 로그인 → 일반 → 사용 설정 ON
  3. 앱 → 앱 설정 → 플랫폼 키 → REST API 키 클릭
  4. 앱 → 제품 설정 → 카카오 로그인 → 동의항목

앱을 만들 때 채우는 칸은 네 개임.

넣을 값
앱 이름 로그인 동의 화면에 그대로 노출되니까 서비스 이름으로
회사명 여기도 동의 화면에 표시됨("○○○에서 다음 정보를 요청합니다"). 개인이면 본인 이름이나 닉네임 아무거나
카테고리 기능에는 영향 없고 나중에 바꿀 수 있음
앱 대표 도메인 비워둠. 카카오톡 공유나 스크랩에 쓰는 값이라 로그인 필수 설정에는 안 들어감

2번 사용 설정이 OFF면 로그인 호출 자체가 거부됨.

같은 화면에 OpenID Connect도 있는데 이건 OFF로 둠. ID 토큰을 추가로 받는 기능인데, 우리는 닉네임이랑 프로필 사진만 받아서 필요 없음.

리다이렉트 URI는 REST API 키를 눌러야 나옴

3번이 제일 헤맨 곳임. 플랫폼 키 화면에는 REST API 키, JavaScript 키, 네이티브 앱 키 세 개만 나열돼 있고 리다이렉트라는 단어가 아예 없음.

거기서 REST API 키를 클릭해서 상세로 들어가야 함.

들어가면 이런 것들이 있음.

  • REST API 키 — 이게 클라이언트 ID로 쓰는 값임. JavaScript 키 아님
  • 카카오 로그인 리다이렉트 URIhttp://localhost:8080/login/oauth2/code/kakao
  • 비즈니스 인증 리다이렉트 URI — 다른 용도니까 건드리지 않음
  • 호출 허용 IP 주소 — 비워둠
  • 클라이언트 시크릿 — 여기 있는 코드가 시크릿임

우리 앱은 토큰 요청할 때 시크릿을 같이 보내는 방식으로 설정돼 있어서 이 값이 꼭 필요함. 시크릿은 기본적으로 활성화된 상태로 제공되니까 따로 켤 건 없고, 활성화 여부 표시가 있으면 ON인지만 확인하면 됨.

리디렉션 주소 규칙은 구글이랑 같음. 뒤에 kakao만 바뀜.

동의항목은 둘 다 필수 동의로

4번 동의항목에서는 개인정보 영역의 닉네임이랑 프로필 사진만 설정하면 됨. 동의 단계는 네 가지 중에 고르는데 둘 다 필수 동의로 둠.

동의 단계 설명
필수 동의 카카오 로그인 시 사용자가 필수로 동의해야 함
선택 동의 동의하지 않아도 로그인이 완료됨
이용 중 동의 로그인 시점이 아니라 항목이 필요한 시점에 동의를 받음
사용 안 함 동의를 요청하지 않음

이 앱은 로그인하는 순간 닉네임이랑 프로필 사진으로 회원을 만듦. 그래서 그 시점에 값이 확실히 와야 함.

선택 동의나 이용 중 동의로 두면 값이 안 넘어와서 닉네임 없이 계정이 만들어짐.

동의 목적도 필수 입력임. 로그인 동의 화면에 그대로 노출되는 문구라 짧게 쓰면 됨.

  • 닉네임 → 회원 가입 및 서비스 내 프로필 표시
  • 프로필 사진 → 서비스 내 프로필 이미지 표시

이메일이나 성별, 연령대 같은 나머지 항목은 건드리지 않음. 카카오는 이메일 동의항목을 쓰려면 비즈니스 앱으로 전환해야 하는데, 우리는 애초에 이메일을 안 받음.