SKILL 40 min

DB + 회원가입 — 구글/카카오 OAuth

이 강의 영상은 Pro 전용입니다

Pro 요금제에 가입하면 모든 강의 영상을 볼 수 있어요.

Pro로 보기 →

이 레슨이 끝나면

  • /v3-database로 User 모델 + 기본 사용자 테이블이 DB에 생성된다
  • /v3-auth로 구글 OAuth 또는 카카오 OAuth (또는 둘 다) 회원가입·로그인이 동작한다
  • 본인 PC localhost에서 실제로 구글로 로그인해 본다
  • 왜 이메일/비밀번호 직접 만들기를 피해야 하는지 안다
  • OAuth client ID/secret을 .env에 안전하게 보관할 수 있다

왜 "구글로 로그인"인가? — 비밀번호를 직접 안 다루는 게 핵심

OAuth(오어쓰)는 "구글/카카오로 로그인" 버튼 그거예요. 사용자가 본인 서비스에 비밀번호를 따로 만드는 대신, 이미 가진 구글·카카오 계정으로 바로 들어오는 방식이에요.

이메일·비밀번호 회원가입을 직접 만들면 본인이 떠안아야 할 게 많아져요 — 비밀번호 안전하게 보관, 비밀번호 찾기 메일, 이메일 진짜인지 확인, 비밀번호 까먹은 사용자 응대, 그리고 만에 하나 유출되면 책임까지. 비개발자가 첫 출시에 감당하기엔 무거워요.

반면 "구글/카카오로 로그인"은 이 골치 아픈 일을 전부 구글·카카오에 맡겨요. 본인은 "이 사람이 구글에 로그인했다"는 결과만 받아서 본인 명단(DB)에 추가하면 끝. 편하고, 안전하고, 사용자도 클릭 한 번이라 더 좋아해요.

한 줄 결론

첫 출시는 구글 OAuth만 또는 구글 + 카카오로. 한국 타겟이면 카카오 우선, 글로벌 또는 비즈니스 타겟이면 구글 우선. 이메일·비밀번호는 절대 첫 버전에 넣지 마세요. 출시 후 사용자 피드백 기반으로 필요 시 추가.

🎨 생성 (Codex CLI) — 이메일/비밀번호 vs OAuth 비교 다이어그램. 좌: 본인이 책임질 6가지 / 우: OAuth는 구글·카카오에 위탁.

전체 흐름 — 4단계

단계 하는 일 시간
1 /v3-database로 User 모델 생성 (Claude가 알아서) 10분
2 구글 OAuth 앱 만들기 (Google Cloud Console) 15분
3 (선택) 카카오 OAuth 앱 만들기 (Kakao Developers) 15분
4 /v3-auth로 OAuth 연동 (Claude가 알아서) + 본인 로그인 테스트 20분

단계 1 — /v3-database로 User 모델

Claude Code 채팅에 한 줄.

/v3-database

스킬이 본인에게 묻는 것 + 추천 답:

  • "User 모델 만들까요?" → 네
  • "필드는 어떤 게 필요한가요?" → 기본만(name, email, provider, uid). 추가 필드는 나중에.
  • "마이그레이션 실행할까요?" → 네

스킬이 자동으로 다음을 해 줘요:

  • db/migrate/create_users.rb 마이그레이션 파일 생성
  • app/models/user.rb User 모델 클래스 생성
  • bin/rails db:migrate 실행 → DB에 users 테이블 생성
  • 기본 테스트 fixtures 추가 (test/fixtures/users.yml)
📷 캡쳐 — Claude Code에 /v3-database 진행 중 + 마이그레이션 파일 생성 + db:migrate 실행 결과.

단계 2A — 구글에서 "열쇠 2개" 받아오기

"구글로 로그인"을 쓰려면 구글에 본인 서비스를 한 번 등록하고 열쇠 2개(client ID / secret)를 받아와야 해요. 화면이 영어·메뉴가 많아 처음엔 복잡해 보이지만, 목표는 딱 하나 — 열쇠 2개를 복사하는 것이에요. 한 번만 하면 끝.

console.cloud.google.com에 로그인한 뒤, 큰 흐름은 이래요:

  1. 새 프로젝트 만들기(이름은 아무거나, 예: "my-cafe-app").
  2. "사용자 인증 정보" 메뉴에서 "OAuth 클라이언트 ID 만들기"를 찾아 클릭. (처음이면 "동의 화면"을 먼저 만들라고 안내가 떠요 → "외부" 고르고 이름·이메일만 채워 저장하면 돼요.)
  3. 유형은 "웹 애플리케이션" 선택.
  4. "승인된 리디렉션 URI" 칸에 아래 한 줄을 그대로 복붙:
    http://localhost:3000/auth/google_oauth2/callback
  5. "만들기"를 누르면 클라이언트 ID비밀 키(secret)가 떠요. 둘 다 복사해 두세요. (이 2개가 목표였어요.)

메뉴가 안 보이거나 막히면

구글 콘솔은 화면이 자주 바뀌어서 메뉴 위치가 위 설명과 다를 수 있어요. 막힌 화면을 그대로 캡처해서 Claude Code에 붙이고 "여기서 다음 뭘 눌러?"라고 물어보세요. 단계마다 짚어줍니다. 한 번만 받아오면 다시 할 일 없어요.

📷 캡쳐 — Google Cloud Console OAuth 클라이언트 ID 생성 화면 + 리디렉션 URI 입력 + 발급된 client ID/secret.
목표는 열쇠 2개(client ID/secret). 외부 노출은 절대 금지.

단계 2B — .env에 구글 키 저장

Antigravity 좌측 트리에서 .env 파일 열기. 다음 두 줄 추가 (값은 방금 발급받은 것으로 교체):

GOOGLE_CLIENT_ID=123456789-abcdef.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=GOCSPX-abcdefghijklmnop

저장 후 변경 사항 git status 확인. .env는 git이 자동으로 무시하므로 빠져 있어야 정상.

단계 3 — (선택) 카카오 OAuth 앱 만들기

한국 사용자 타겟이면 카카오도 같이 추가하는 걸 권장. 비슷한 흐름이에요.

developers.kakao.com에 카카오 계정으로 로그인한 뒤, 여기서도 목표는 열쇠 2개(REST API 키 + Client Secret) 복사예요. 큰 흐름:

  1. "애플리케이션 추가하기"로 앱 하나 만들기.
  2. "앱 키" 메뉴에서 REST API 키 복사 (구글의 client ID 역할).
  3. "카카오 로그인"을 활성화 ON 하고, 같은 화면의 "Redirect URI"에 아래 한 줄 복붙:
    http://localhost:3000/auth/kakao/callback
  4. "동의 항목"에서 닉네임·이메일을 ON.
  5. "보안" 메뉴에서 Client Secret 생성 → 복사. (이 2개가 목표였어요.)

역시 메뉴 위치가 다르거나 막히면, 그 화면을 캡처해서 Claude Code에 "여기서 카카오 로그인 키 어디서 받아?"라고 물어보세요.

📷 캡쳐 — Kakao Developers 앱 키 페이지 (REST API 키) + Redirect URI 등록 + Client Secret 발급.

.env에 추가:

KAKAO_CLIENT_ID=여기에_REST_API_키
KAKAO_CLIENT_SECRET=여기에_Client_Secret

단계 4 — /v3-auth로 OAuth 연동

Claude Code에 한 줄.

/v3-auth

스킬이 본인에게 묻는 것 + 추천 답:

  • "어떤 OAuth 제공자를 쓸까요?" → "구글 + 카카오" 또는 "구글만"
  • "User 모델에 추가 컬럼 필요할까요? (provider, uid)" → 네 (4-8 단계 1에서 안 만들었으면)
  • "세션 저장 방식은?" → 기본(쿠키 + DB) OK
  • "로그인 후 어디로 redirect?" → /dashboard 또는 본인 메인 페이지

스킬이 자동으로 해 주는 일:

  • omniauth-google-oauth2, omniauth-kakao gem 추가
  • config/initializers/omniauth.rb 설정 (.env 값 사용)
  • routes에 OAuth 콜백 경로 추가
  • SessionsController 생성 + 콜백 처리 로직
  • 로그인/로그아웃 헬퍼 메서드
  • 로그인 페이지 view (간단한 "Google로 로그인" 버튼)
  • 기본 통합 테스트
📷 캡쳐 — /v3-auth 스킬 진행 화면 + 생성된 파일 목록 + 통합 테스트 통과 메시지.

단계 5 — 본인이 직접 로그인 테스트

터미널에서 서버 띄우기.

bin/dev

브라우저 새 탭 → http://localhost:3000/login (또는 스킬이 알려준 경로). "Google로 로그인" 버튼 → 본인 구글 계정 선택 → 권한 동의 → 본인 서비스로 돌아옴 → 로그인 성공!

진짜 명단(DB)에 본인이 추가됐는지도 확인해 봐요. 직접 DB를 뒤질 필요 없이, Claude Code에 한 줄 부탁하면 돼요:

방금 로그인한 내 계정이 DB(users)에 잘 저장됐는지 확인해줘.

Claude가 가장 최근 가입한 사용자(본인 이메일·구글/카카오 표시)를 찾아서 보여줘요. 이 한 줄이 보이면 회원가입이 진짜로 동작한 거예요.

📷 캡쳐 — localhost:3000/login → "Google로 로그인" 버튼 → 구글 권한 화면 → 로그인 성공 시퀀스.
본인이 본인 서비스에 로그인된 첫 순간.

자주 발생하는 문제 + 해결

"redirect_uri_mismatch" 에러

Google Cloud Console에 등록한 리디렉션 URI와 실제 요청 URI가 다를 때. 정확히 http://localhost:3000/auth/google_oauth2/callback인지 확인. 마지막 슬래시 유무, http vs https, 포트 번호 모두 정확해야 함.

"invalid_client" 에러

.env의 client ID/secret 값이 잘못 복붙됐을 가능성. 양 끝 공백 확인. 따옴표 빠뜨리거나 추가하지 않기 (.env에서는 따옴표 없이 그대로). 서버 재시작 필수 (.env 변경 후 Ctrl+C → bin/dev 다시).

"카카오 로그인 화면이 안 떠요"

카카오는 "카카오 로그인" 활성화 토글이 OFF면 동작 안 함. Kakao Developers → 본인 앱 → 카카오 로그인 → 활성화 ON 확인. 그리고 동의 항목에 닉네임·이메일이 ON 되어 있어야 함.

"로그인 후 빈 화면"

로그인은 됐지만 redirect 경로가 없거나 잘못. SessionsController의 callback 메서드에서 redirect_to root_path 같은 명시적 경로 추가. Claude에게 "로그인 후 / 으로 가게 해줘" 부탁.

"개발자 모드라서 다른 사람은 로그인 못 해요"

Google OAuth 동의 화면이 "테스트" 모드면 본인 + 등록된 테스트 사용자만 로그인 가능. 본인 출시 전까지는 OK. 출시 시 "프로덕션" 모드 전환 필요. (4-13 또는 Ch.5에서 다룸.)

"이미 로그인된 상태에서 다시 로그인 화면을 보고 싶어요"

가장 쉬운 방법: 브라우저 시크릿(새 비공개) 창에서 다시 열면 로그아웃 상태로 테스트할 수 있어요. 로그아웃 버튼이 아직 없으면 Claude Code에 "로그아웃 링크 만들어줘"라고 부탁하세요.

완료 후 git commit + 보안 점검

git add .
git commit -m "DB + OAuth (Google/Kakao) 회원가입 완료"

보안 점검 권장: 04-security-agent에 "OAuth 구현 점검" 티켓 만들어서 배정. 자동으로 client secret 노출, redirect URI 화이트리스트, CSRF 토큰 등을 검토해 줘요.

자가 진단 — 통과 기준

  • User 모델 + users 명단(테이블)이 만들어짐 (/v3-database가 처리)
  • 구글에서 열쇠 2개(client ID/secret)를 받아 .env에 넣음
  • (선택) 카카오 열쇠 2개도 .env에 넣음
  • localhost:3000에서 본인 구글 계정으로 로그인 성공
  • Claude에게 부탁해서 내 계정이 DB에 저장됐는지 확인함
  • git commit 한 줄로 OAuth 완료 시점 세이브

다음 단계 → 4-9 localhost 띄우기 + 화면 확인

이번 lesson에서 잠깐 bin/dev로 localhost를 띄웠지만, 다음 레슨에서 localhost가 어떻게 작동하는지 본격 정리해요. 포트 충돌, live reload(코드 수정 시 자동 새로고침), 브라우저 디버깅, 모바일 화면 미리보기까지.

실습하기

로그인하면 스킬을 실습할 수 있습니다