[POP-SPOT] GCP + Nginx + SSL + 도메인 배포 순서 정리
POP-SPOT 백엔드를 GCP에 올리면서 정리한 배포 순서. 도메인 DNS 설정, Nginx 리버스 프록시, SSL 인증서, 소셜 로그인 콘솔 업데이트까지.
GCP에 처음 배포하는 거라 삽질이 꽤 많았음. 그냥 서버 올리면 되는 줄 알았는데 할 게 한가득이었음.
이 글은 처음 배포하는 사람도 따라할 수 있도록 순서대로 정리한 배포 체크리스트임.
전체 흐름
STEP 1 — 도메인 + DNS 설정
도메인이 뭔지 모른다면?
도메인은 192.168.0.1 같은 숫자 주소 대신 사람이 읽기 쉬운 이름을 붙인 것. google.com 같은 것. 가비아, 카페24 같은 곳에서 연간 비용을 내고 구입함.
popspot.co.kr 을 구입한 뒤, 프론트와 백엔드 주소를 분리함.
도메인 구입처 관리 페이지에서 DNS 설정 → A 레코드 추가.
⚠️ 반드시 고정 IP 먼저 설정해야 함
GCP 기본 설정은 임시 IP라서 서버를 껐다 켜면 IP가 바뀜. DNS에 등록한 IP랑 달라지면 접속이 안 됨.
GCP 콘솔 → VPC 네트워크 → 외부 IP 주소 → 고정으로 변경.
STEP 2 — GCP 서버 기본 세팅
e2-micro 인스턴스(RAM 1GB)에 Ubuntu 22.04로 생성 후 SSH 접속.
용어 정리
sudo — 관리자 권한으로 명령 실행. 윈도우의 "관리자 권한으로 실행"과 같음.
apt — Ubuntu에서 프로그램을 설치하는 명령어. 앱스토어 같은 것.
-y — "설치할 거야? Yes/No" 물어볼 때 자동으로 Yes 선택.
STEP 3 — Nginx 리버스 프록시 설정
Nginx가 왜 필요함?
Spring Boot는 8080번 포트에서 실행됨. 근데 인터넷 표준 HTTPS 포트는 443번. 외부에서 api.popspot.co.kr로 접속하면 443번으로 들어오는데, 이걸 8080으로 전달해주는 중간 다리 역할이 Nginx임.
아래 내용으로 덮어씀.
STEP 4 — SSL 인증서 발급 (HTTPS)
SSL이 뭔지 모른다면?
주소창에 https:// 로 시작하는 사이트를 보면 자물쇠 아이콘이 보임. 이게 SSL이 적용된 것. 데이터를 암호화해서 주고받기 때문에 중간에 누가 훔쳐봐도 내용을 알 수 없음. 요즘은 https가 없으면 브라우저가 "안전하지 않음" 경고를 띄움.
Certbot이 Nginx 설정을 자동으로 수정해주기 때문에 명령어 하나만 치면 됨.
실행하면 이메일 입력하고, 약관 동의하고, 마지막에 이런 질문이 나옴.
2번 선택 → http로 접속해도 자동으로 https로 연결됨.
완료되면 Nginx 설정에 443 블록이 자동으로 추가됨. 이제 https://api.popspot.co.kr 접속 가능.
STEP 5 — 소셜 로그인 콘솔 Callback URL 변경
소셜 로그인(구글, 카카오, 네이버)은 로그인 성공 후 "이 주소로 돌아와" 라고 미리 등록한 주소로만 이동함. 주소가 바뀌었으니 콘솔에서도 변경해줘야 함.
구글 — Google Cloud Console → 사용자 인증 정보 → 승인된 리디렉션 URI
카카오 — 카카오 디벨로퍼스 → 앱 → 카카오 로그인 → Redirect URI
네이버 — 네이버 개발자 센터 → 내 애플리케이션 → API 설정
⚠️ 구글, 카카오, 네이버 셋 다 바꿔야 함. 하나라도 빠지면 그 소셜 로그인만 에러남.
STEP 6 — Vercel 환경변수 업데이트
프론트엔드(Vercel)에서 백엔드 주소를 환경변수로 관리하고 있기 때문에 여기도 바꿔줘야 함.
Vercel 대시보드 → 프로젝트 → Settings → Environment Variables
변경 후 Redeploy 필수. 환경변수는 배포 시점에 적용되기 때문에 저장만 하면 안 되고 재배포해야 반영됨.
STEP 7 — 서버 백그라운드 실행
Spring Boot jar 파일을 그냥 실행하면 SSH 세션 끊기는 순간 서버도 같이 꺼짐.
nohup 명령어로 백그라운드 실행해야 함.
nohup이 뭔지 모른다면?
"no hang up"의 줄임말. SSH 접속이 끊겨도 프로그램을 계속 실행하라는 명령어. 전화를 끊어도 음악이 계속 재생되게 하는 것과 같음.
& 는 "백그라운드에서 실행해"라는 뜻. 이걸 붙이지 않으면 터미널이 서버를 실행하는 동안 다른 명령어를 못 씀.