OAuth 크리덴셜 발급 가이드

실제 운영 환경에서 소셜 로그인(Google·Kakao·Naver)을 활성화하려면 각 제공자 콘솔에서 OAuth 앱을 등록하고 Client ID·Secret을 발급받아야 합니다. 본 가이드는 nurimap의 실 서비스 도메인 app.nurimap.com 기준입니다.

각 제공자의 콘솔 UI는 수시로 바뀝니다. 메뉴 명칭이 다르면 본 문서의 핵심 값(서비스 도메인·콜백 URL·동의 항목)을 기준으로 등록하세요.
G

Google OAuth 2.0

Google Cloud Console에서 OAuth 2.0 클라이언트 ID를 발급합니다.

1
Google Cloud Console 접속
https://console.cloud.google.com/ 에 로그인하고, 우상단에서 프로젝트를 새로 만들거나 기존 프로젝트를 선택합니다.
2
OAuth 동의 화면 구성
좌측 메뉴 APIs & Services → OAuth consent screen. External 선택 → 앱 이름 nurimap, 지원 이메일, 도메인 nurimap.com 입력. 범위는 email, profile, openid 3가지.
3
OAuth 2.0 클라이언트 ID 생성
APIs & Services → Credentials → + CREATE CREDENTIALS → OAuth client ID. Application type = Web application, 이름 nurimap-web.
4
JavaScript origins · Redirect URIs 등록
Authorized JavaScript origins
https://app.nurimap.com
https://nurimap.com
Authorized redirect URIs
https://app.nurimap.com/auth/oauth/callback/google
5
Client ID · Secret 복사
생성 후 표시되는 Client ID(...apps.googleusercontent.com)와 Client secret을 안전한 곳에 보관합니다. 환경변수 GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET 에 사용.
6
게시 상태 변경 (운영 전)
개발 중에는 Testing 상태로 등록된 테스트 사용자만 가능. 실서비스 시 Publish App 버튼으로 Production 전환. Sensitive scope을 안 쓰면 검수 없이 즉시 가능.
K

Kakao 로그인

Kakao Developers에서 애플리케이션을 등록하고 카카오 로그인을 활성화합니다.

1
Kakao Developers 접속
https://developers.kakao.com/ 로그인 → 내 애플리케이션 → 애플리케이션 추가하기. 앱 이름 nurimap, 회사명 입력 후 저장.
2
앱 키 확인
앱 요약 페이지의 REST API 키가 OAuth Client ID 역할입니다. 네이티브 앱 키 / JavaScript 키 / Admin 키는 다른 용도라 혼동 주의.
3
플랫폼 등록 — Web
앱 설정 → 플랫폼 → Web 플랫폼 등록. 사이트 도메인:
https://app.nurimap.com
https://nurimap.com
4
카카오 로그인 활성화 + Redirect URI
제품 설정 → 카카오 로그인 → 활성화 ON. 그 아래 Redirect URI 등록:
https://app.nurimap.com/auth/oauth/callback/kakao
5
동의 항목 설정
카카오 로그인 → 동의 항목에서 필요 정보 ON:
  • 닉네임 — 필수 동의
  • 카카오계정(이메일) — 필수 동의 (서비스 식별용)
  • 프로필 사진 — 선택 동의
6
Client Secret 발급 (권장)
보안 탭에서 Client Secret 코드를 생성하고 사용함 상태로. 환경변수 KAKAO_REST_API_KEY / KAKAO_CLIENT_SECRET 에 저장.
S

이메일 발송 — AWS SES (Lightsail)

가입 인증·비밀번호 재설정 메일은 AWS SES로 발송합니다. Lightsail 인스턴스에서 SES API/SMTP를 호출하는 구성입니다.

1
발송 도메인 등록
SES 콘솔(서울 리전 ap-northeast-2) → Verified identities → Create identity → Domain, nurimap.com 입력. DKIM 자동 생성 옵션 켜기.
2
DNS 레코드 추가 (Cloudflare)
SES가 표시하는 DKIM CNAME 3개 + SPF TXT(v=spf1 include:amazonses.com ~all) + DMARC TXT(v=DMARC1; p=none; rua=mailto:...)를 Cloudflare DNS에 등록. 인증 완료까지 5~30분.
3
Sandbox → Production 신청
신규 계정은 Sandbox(인증된 수신자만, 일 200건). 콘솔에서 Request production access → 사용 사례·예상 발송량 작성. 보통 1~2영업일 승인.
4
발송 전용 IAM 사용자 생성
IAM → 사용자 추가 nurimap-prod-mailer. 정책 최소 권한: ses:SendEmail, ses:SendRawEmail만 허용. 액세스 키 발급 후 Lightsail의 .env에 저장.
5
백엔드에서 호출
Spring Boot는 software.amazon.awssdk:sesSesV2Client 사용. From no-reply@nurimap.com. 환경변수로부터 자격증명 자동 로드(DefaultCredentialsProvider).
무료 한도(2026): 신규 계정 월 3,000건 12개월. 이후 $0.10/1,000건. 가입·재설정 메일 용도로 충분히 여유.
S

키 관리 — Lightsail 환경 권장

OAuth Client Secret · SES 액세스 키 같은 비밀값을 어디에 두느냐. Lightsail은 EC2와 달리 인스턴스 IAM 역할 직접 부착이 불가해 IAM 사용자(액세스 키)로 인증합니다.

EC2처럼 Instance Profile 자동 자격증명을 못 쓰므로, 최소 권한 IAM 사용자 + 분기 키 회전이 1차 방어선입니다.

단계별 권장 — 가장 단순한 것부터

단계방식월 비용적용 시점
MVP Lightsail 인스턴스의 .env 파일 (chmod 600) + Docker env_file 무료 지금 — 가장 단순
성장기 AWS SSM Parameter Store SecureString 사실상 무료 (KMS 호출만) 다중 인스턴스 · 자동 배포 도입 시
운영 본격화 AWS Secrets Manager (자동 회전 지원) ~$3 (시크릿 6~7개) 회전 자동화 · 감사 로그 필요 시

권장 시작 구성 (MVP)

# Lightsail 인스턴스 (Ubuntu + Docker Compose)
/home/nurimap/envi2/
├── .env ← chmod 600, owner=nurimap
│ ├── GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET
│ ├── KAKAO_REST_API_KEY / KAKAO_CLIENT_SECRET
│ ├── NAVER_CLIENT_ID / NAVER_CLIENT_SECRET
│ ├── AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY # nurimap-prod-mailer
│ ├── AWS_REGION=ap-northeast-2
│ └── MAIL_FROM=no-reply@nurimap.com
└── docker-compose.yml # services.api.env_file: .env
운영 수칙: .env는 반드시 .gitignore에 등록(Git 커밋 금지). 액세스 키는 분기마다 회전. IAM 정책은 ARN별·액션별 최소 권한. 노출 의심 시 즉시 비활성화 후 신규 발급.
$

환경변수 정리

최종적으로 백엔드에 설정할 환경변수입니다. .env 또는 시크릿 매니저에 보관하세요.

# Google OAuth 2.0
GOOGLE_CLIENT_ID=123456789-xxxxxxxxxxxx.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=GOCSPX-xxxxxxxxxxxxxxxxxxxxxxxx

# Kakao 로그인
KAKAO_REST_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
KAKAO_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

# Naver 아이디로 로그인
NAVER_CLIENT_ID=xxxxxxxxxxxxxxxxxxxx
NAVER_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxx

# 공통 — OAuth 콜백 베이스
OAUTH_REDIRECT_BASE=https://app.nurimap.com/auth/oauth/callback

# AWS — SES 발송 전용 IAM 사용자 (nurimap-prod-mailer)
AWS_ACCESS_KEY_ID=AKIAXXXXXXXXXXXXXXXX
AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
AWS_REGION=ap-northeast-2
MAIL_FROM=no-reply@nurimap.com
보안 — 절대 하지 말 것: Client Secret을 프론트엔드 코드·HTML·Git 저장소에 넣지 마세요. 서버 사이드 환경변수 또는 시크릿 매니저(AWS Secrets Manager, Cloudflare Secrets 등)에만 저장. 프론트는 Client ID와 콜백 URL만 알면 됩니다.

발급 완료 후 → 백엔드 OAuth 라이브러리(Spring Security OAuth2 Client 등)에 위 환경변수를 매핑하면 연동 끝.