본문 바로가기
백엔드 개발

#032. GCP 서비스로 개발 환경 배포하기(spring profile + cloudrun + cloudflare)

by iamjoy 2023. 4. 12.

[GCP에 서비스 배포하기]

(1) docker image기반으로 cloudrun 실행하기

알파 환경을 구성하고 나서 브랜치 전략을 세우려고 하기 때문에 하나의 도커 이미지로 프로덕션과 알파 환경을 구성했다.

[환경 구성]
- spring profile 구성하기
각 prod(프로덕션), alpha(알파환경- 개발 환경), local(로컬환경 - 로컬 개발 환경) 용도로 profile을 구성해
환경을 분리해서 빌드할 필요까지 느끼지 못해 아래와 같이 resource 를 한 번에 넣고 빌드했다.


- docker 에 실행할 profile 환경 변수 주입하기
cloudrun을 실해할 때 환경변수로 profile을 주입했다.



아래 글 참고
https://www.baeldung.com/spring-boot-docker-start-with-profile
https://wfreud.tistory.com/295
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-Config-Data-Migration-Guide#profile-groups

[c.f.데이터 덤프떠서 옮기기]

기존 운영 데이터를 덤프 떠서 알파환경에 그대로 업로드 했다.

-- 덤프 뜨기
mysqldump -u {username} -p -h {host} {db}>{filename}.sql

-- DB 옮기기
mysql -u {username} -p -h {host} -P {port} {db} < {filename}.sql

https://velog.io/@peaceminusone/MySQL-Database-%EB%B0%B1%EC%97%85-%EB%B3%B5%EC%9B%90-mysqldump-%ED%99%9C%EC%9A%A9

(2) cloudrun 서비스 생성하기

cloudrun을 선택한 이유:
- 컨테이너 이미지 기반의 fully managed computing platform으로 인프라를 구성하는 데에 들어가는 공수가 적다.
- 배포 버저닝 관리
- 무중단 배포
- AB 테스팅을 위한 트래픽 제어(Blue-Green 전략) 지원
- 100만건까지 무료: 초반 서비스를 띄워놓기에 저렴하다.
https://cloud.google.com/run/docs/overview/what-is-cloud-run?hl=ko

GCP 서비스 생성 방법은 아래와 같다:
https://cloud.google.com/run/docs/quickstarts/jobs/create-execute?hl=ko

 

(3) LB로 고정 IP 생성하기

고정 IP가 필요했던 이유는 다음과 같다:
- cloudrun은 아래 그림과 같이 기본적으로 동적 할당되는 IP와 임의의 Domain을 제공한다. 고정 Domain을 만들기 위해 고정 IP를 할당
- DNS와 연결하기 위해서: 도메인 (XXX.com)을 만들어서 관련 서비스들을 하위 도메인으로 모아 관리
- 특히 이번에는 CORS에러를 해결하기 위해서였다. (CORS 에러에 관한 글)

설정방법: https://cloud.google.com/load-balancing/docs/https/setting-up-reg-ext-https-serverless?hl=ko#creating_the_load_balancer


(4) cloudflare 로 DNS 서비스 연결하기

CloudFlare를 선택한 이유:
- 비용이 저렴하다
- 인증서 등록이 쉽다 (https)
- 클라우드 플레어 페이지스 사용: CDN 용도로 사용
- 트래픽 분석
- worker, R2 스토리지 등 사용할 수 있는 서비스가 편리

마지막으로 Custom 한 Domain Name을 사용하기 위해 cloudflare를 사용했다.
이미 도메인 서비스를 지정한 상태를 가정하고 고정 IP에 A 레코드로 IP-Domain 연결을 해보려고 한다.



A 레코드와 cname 에 대한 설명은 아래 블로그를 참고할 수 있다
https://dev.plusblog.co.kr/30