[GCP]GAE 간단 테스트 및 커스텀 도메인 설정

in google •  7 years ago 

안녕하세요 이정운 입니다.

이번에는 얼마전에 테스트 해봤던 GAE 간단 테스트 및 커스텀 도메인 설정에 관련된 이야기를 진행해 보려고 합니다. 잘 아시겠지만 GAE(Google AppEngine) 는 대표적인 Google cloud 의 PaaS 컴포넌트로서 필요한 소스에 대한 부분만 개발하고 올리시면 그 밑단은 전부다 Google cloud 가 알아서 해줍니다. 지난번에도 간단히 언급했지만 그렇기 때문에 사용자는 개발에만 집중하시면 되며 실제 운영 부분에서는 자동 확장, 무중단 버전 업그레이드, A/B 테스트 등을 단순 클릭만을 통해서 제공 가능합니다. 그렇기 때문에 스타트업과 같은 소규모지만 서버 운영보다 개발에 집중하기를 원한다면 아주 적합한 선택입니다.

이번 이야기에서는 위에 언급드린 GAE 에 대하여 실제적으로 Spring Boot 기반의 애플리케이션을 배포하는 형태로 간단하게 테스트를 수행하여 실제로 어떤 것들을 할 수 있는지 살펴보고 그 뒤에 커스텀 도메인을 연결하는 방법을 한번 살펴보도록 하겠습니다. 예를 들어 www.abc.com 이라는 사이트를 운영중인데 gcloud.abc.com 이라는 도메인을 별도 설정하여 원래 서비스 진행중이던 www.abc.com 에는 영향을 주지 않고 gcloud.abc.com 으로 새롭게 GAE 로 서비스를 만들 경우에 사용할 수 있는 방법입니다.
참고로 본 이야기의 소스와 내용은 하단의 두 링크를 기반으로 진행하도록 하겠습니다.

SpringBoot HelloWorld for App Engine Standard (Java 8)
https://github.com/GoogleCloudPlatform/getting-started-java/tree/master/appengine-standard-java8/springboot-appengine-standard

Mapping Custom Domains
https://cloud.google.com/appengine/docs/flexible/java/mapping-custom-domains

#1) GAE 간단 테스트

말로만 진행하니 이해가 어려울 수 있으므로 이번 파트에서 부터는 간단하게 Spring Boot 기반의 샘플 애플리케이션을 활용하여 바로 GAE 로 서비스를 수행해보는 단계를 수행해보도록 하겠습니다. (참고적으로 GAE 는 Java 뿐만 아니라 Python, PHP 등 다양한 언어를 지원 가능합니다.)

Deploy Spring Boot Application in App Engine standard
https://codelabs.developers.google.com/codelabs/cloud-app-engine-springboot/index.html?index=..%2F..%2Findex#0

먼저 샘플 Spring Boot 애플리케이션을 작성하기 위하여 간단하게 템플릿 프로젝트를 생성합니다. GAE 라고 특별한 것은 없고 packaging 을 WAR 로만 해주시면 됩니다. (내부적으로 GAE 안에는 Jetty 가 들어가 있어서 웹 서버 역할을 자체 수행하므로 WAR 형태를 선택한 것 입니다.)

https://start.spring.io/
alt text

로컬 컴퓨터에 다운로드 되어진 프로젝트 파일을 Cloud shell 로 옮기기 위하여 (또는, 별도의 GCE 를 만들고 거기서 하셔도 되며 로컬 컴퓨터에서 직접 하셔도 됩니다.) 가장 쉽게 사용하는 방식인 GCS(Google Cloud Storage) 에 버킷을 하나 만들어 드래그&드랍 만으로 해당 파일을 넣어놓고 Cloud shell 에서 하단과 같이 gsutil 명령어를 이용해서 해당 파일을 Cloud shell 로 복사 합니다.

gsutil cp gs://jwlee-myproject-01/AppEngineTest.zip ./

해당 파일의 압축을 풀어보시면 아시겠지만 샘플 프로젝트는 이미 Spring Boot 테스트를 위한 기본적인 형태가 다 구성된 것입니다. 여기에 GAE 에 관련된 설정추가를 위한 pom.xml 변경작업을 하도록 하겠습니다.

⓵ 기존에 이야기한 것처럼 jetty 가 있으므로 tomcat 은 제외

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>

⓶ Servlet 3.1 추가

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>

⓷ GAE standard plugin 추가

<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>1.3.1</version>
</plugin>

⓸ Spring Boot 의 logging 과 충돌되므로 Jul-to-slf4j 제외

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<scope>provided</scope>
</dependency>

pom.xml 은 방금 언급한데로 변경하면 되며 애플리케이션 자체는 수정하는 것이 없이 GAE 를 위한 설정파일 하나만 하단과 같이 추가해 넣으면 됩니다.

mkdir -p src/main/webapp/WEB-INF/

vi src/main/webapp/WEB-INF/appengine-web.xml

<appengine-web-app xmlns=”http://appengine.google.com/ns/1.0">
<version>1</version>
<threadsafe>true</threadsafe>
<runtime>java8</runtime>
</appengine-web-app>

위의 설정파일 내용을 보시면 Web 형태의 GAE 를 위한 설정파일로 threadsafe 형태로 구동되게 할 것이며 런타임으로 java8 을 선택한 설정입니다. 추가로 이 설정 파일에서 확장이라던가 <automatic-scaling>, <basic-scaling>, <manual-scaling>, Contect root 변경 <public-root>, 정적 파일 위치 <resource-files> 등 GAE 의 다양한 설정을 수행하실 수 있습니다. 보다 자세한 내용이 궁금하시거나 다른 옵션들이 궁금하신 분들은 하단의 링크를 참고하시면 됩니다.

appengine-web.xml Reference
https://cloud.google.com/appengine/docs/standard/java/config/appref

Spring Boot 에 대한 기본 준비 및 GAE 설정까지 다 완료되었으니 이를 활용해서 실제 GAE 앱을 생성해보도록 하겠습니다. 이를 위해서는 gcloud 명령을 이용하여 GAE 앱을 생성해야 하며 이때 원하는 region 을 선택하실 수 있습니다.

gcloud app create — region=asia-northeast1
![alt text]((https://cdn-images-1.medium.com/max/1600/0*gAjsJD4IC69k8RJG.)

이렇게 기본 형태의 GAE 앱을 생성한 후에는 실제로 샘플 애플리케이션을 GAE 에 배포하는 것은 위의 화면에서 나온 ‘gcloud app deploy’ 명령을 사용해도 되지만 java 에서 좀 더 친숙한 maven 을 활용하여 하단과 같이 배포 가능합니다.

mvn appengine:deploy

정상적으로 배포가 완료되면 콘솔에서 GAE 의 서비스 항목에 가보면 default 서비스가 등록된 것을 하단과 같이 확인할 수 있습니다.
alt text

단순하게 등록만 된 것이 아니라 실제로 서비스명을 클릭해 보면 바로 도메인 명으로 서비스가 되는 것을 확인할 수 있습니다. 거기다가 GAE 서비스는 인증서가 등록되어 자동으로 HTTPS 로도 서비스가 가능하도록 설정되어져 있습니다. (default 의 경우에는 기본적으로 ($project id).appspot.com 으로 DNS 자동 연결)

이렇게 만들어진 GAE 는 설정에 정의한 것과 같이 자동으로 확장 가능하며 하단의 메뉴를 보면 감을 바로 잡으실 수 있겠지만 무중단 버전 배포나 A/B 테스트도 메뉴에서 클릭만으로 바로 가능합니다.
alt text

이 부분에 대해서 좀 더 자세한 내용이 궁금하신 분들은 하단의 링크를 참고하시기 바라겠습니다. (향후 기회가 되면 좀 더 자세히 다뤄보긴 하겠지만 이미 조대협님이 잘 정리하셔서…모니터링, 업그레이드, 롤백, 버전별로 트래픽 분산하기, 부가 기능까지 잘 정리되어 있습니다.)

빠르게 훝어 보는 node.js — 구글 앱앤진에 node.js 애플리케이션을 배포해보자.
http://bcho.tistory.com/1125

#2) 커스텀 도메인 설정

이전 파트에서는 간단하게 Spring Boot 를 기반으로 샘플 애플리케이션을 작성하여 GAE 앱으로 배포하고 서비스하는 것을 이야기해봤습니다. 이번에는 자동으로 생성되는 도메인 명으로 서비스하는 기능도 좋지만 사용자가 원하는 커스텀 도메인 설정을 추가하여 원하는 형태의 도메인 명으로 GAE 서비스를 실제 서비스하는 것을 테스트 해보도록 하겠습니다.

Mapping Custom Domains
https://cloud.google.com/appengine/docs/flexible/java/mapping-custom-domains

커스텀 도메인 설정을 위해서 가장 먼저 해야 할 것은 Google 웹마스터 센터에 접속하여 보유중인 도메인에 대한 인증을 수행하는 작업입니다. 하단의 첨부 그림을 보시면 아시겠지만 Google 웹마스터 센터는 해당 도메인에 특정 CNAME 을 추가하여 소유자를 확인합니다. (당연한 이야기지만 보유한 or 제어 가능한 도메인에 대해서만 커스텀 도메인이 등록 가능하며 일종의 본인확인절차로 보시면 됩니다.)

https://www.google.com/webmasters/verification/home
alt text

Google 웹마스터 센터에서 해당 도메인이 정상적으로 인증 되면 하단과 같은 결과를 받을 수 있습니다.
alt text

이렇게 자기가 보유한 도메인에 대한 인증이 완료되면 GAE 에 커스텀 도메인 설정을 추가할 수 있습니다. 콘솔로 들어가 GAE 메뉴 > 설정 > 맞춤 도메인을 선택하면 하단과 같이 방금 전에 등록한 도메인이 바로 사용할 도메인에서 선택 가능해진 것을 확인할 수 있습니다. (참고로 gcloud.abc.com 을 등록하려고 해도 여기서는 1차 도메인 이름(abc.com) 을 넣는 것입니다.)
alt text

다음으로 다시 Google 웹마스터 센터에서 추가할 커스텀 도메인에 대한 검증 작업을 한번 더 수행합니다.
alt text

다시 콘솔의 GAE 메뉴 > 설정 > 맞춤 도메인 으로 돌아와 사용할 도메인을 선택한 후에 도메인 연결 부분에 커스텀 도메인을 넣어줍니다. 이때 기존 서비스는 유지하면서 커스텀 도메인만 서비스하실 경우에는 자동으로 등록되어 있던 www.freejava.co.kr, freejava.co.kr 는 삭제 해주고 오직 서비스에 적용할 커스텀 도메인만 남겨 둡니다.
alt text

이렇게 하면 기본 설정이 완료된 것입니다. Google cloud 에서는 더이상 할 것이 없으며 DNS 서비스를사용하고 있는 업체를 통해서 설정에 언급된 것중 마지막에 있는 CNAME 만을 사용하고자 하는 별칭과 함께 DNS 서비스에 등록 합니다.
alt text

참고 #1) 결론적으로 보면 실제 DNS 등록 된 곳에서 하단과 같이 CNAME 이 추가되어 있어야 함
alt text

이제 시간이 어느 정도(약 30분에서 1시간 정도 걸렸습니다) 지난 뒤에 커스텀 도메인으로 GAE 서비스가 가능한 것을 확인할 수 있습니다. (gcloud.freejava.co.kr)
alt text

특히, 기언급한 것처럼 기본적으로 Google cloud 에서 제공되는 SSL 인증서를 통해서 HTTPS 서비스도 가능합니다. (확인해보니 Let’s encrypt 에서 발급된 인증서를 기본으로 사용하므로 특별한 보안적 요구사항이 없다면 편하게 사용하셔도 무방할 듯이 보입니다.)
alt text

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!