GCP에서 서비스 구축할 일이 있어서 이것저것 공부중입니다. 생각보다 쉬운데.. 문서를 이해하는 시간이 더 오래 걸리는군요. 이 시리즈는 아래 3개로 구성하였습니다. intelliJ를 사용하려고 이것저것 테스트하다보니 포스팅 시간이 오래걸리네요.
관련 포스팅
- IntelliJ에 Google Cloud Tools 연동하기
- 자바 어플리케이션을 gcp app engine으로 구성하기 1 - 예제 실행해 보기 - 이 문서
- 자바 어플리케이션을 gcp app engine으로 구성하기 2 - CloudSQL 연동
목표
- Hello World 샘플 프로그램을 통해 앱엔진 맛보기
예제로 앱 엔진 구성하기
standard environment 에서 앱엔진 구성
필요한 툴
Java SE 8 Development Kit(JDK) - 앱엔진은 7, 8만 지원 Git Maven
선행 작업
- Google Cloud SDK 다운로드 및 설치
gcloud
명령으로 command-line 환경 설정1 2
gcloud init gcloud auth application-default login
- 앱엔진 컴포넌트 설치
1
gcloud components install app-engine-java
- 최신 버전으로 업데이트
1
gcloud components update
샘플 실행해보기
Hellow Wordl app 다운로드
아래 명령을 사용하여 git에서 샘플 프로그램 다운로드하면 GCP의 getting started 샘플 프로그램을 모두 받을 수 있다.
1
git clone https://github.com/GoogleCloudPlatform/getting-started-java.git`
샘플 코드가 들어 있는 디렉토리로 이동
1
cd getting-started-java/appengine-standard-java8/helloworld`
로컬에서 실행해 보기
- Jetty Maven plugin을 통해 로컬에서 Jetty server 실행
1
mvn appengine:run
- 브라우저에서 확인
1
http://localhost:8080
- 브라우저에서
Hellow World
메세지가 보이면 정상 - 터미널에서
Ctrl
+C
로 web server 종료
앱엔진에 배포하고 실행해 보기
getting-started-java/appengine-standard-java8/hellowworld
디렉토리에서 아래 명령을 통해 배포1
mvn appengine:deploy
- 아래 명령을 통해 브라우저 실행하면
http://my_project_id.appspot.com
으로 접속하여 결과를 확인 할 수 있음1
gcloud app browse
- 결과 확인 브라우저가 실행되면서 아래와 같이 화면이 나타나면 성공~
코드 리뷰
Hellow World는 가장 단순하게 만들어진 앱엔진 앱이다. 따라서 기본적인 구조를 파악하기 위해서는 아주 제격이다.
HelloAppEngine.java
소스는 이 파일 하나로 구성되어 있다. 단일 버전, 다인 서비스로 구성되어 있는 단순한 구조이기 때문에 이 파일 하나로도 충분하다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import com.google.appengine.api.utils.SystemProperty;
import java.io.IOException;
import java.util.Properties;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
// With @WebServlet annotation the webapp/WEB-INF/web.xml is no longer required.
@WebServlet(name = "HelloAppEngine", value = "/hello")
public class HelloAppEngine extends HttpServlet
{
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException
{
Properties properties = System.getProperties();
response.setContentType("text/plain");
response.getWriter().println("Hello App Engine - Standard using "
+ SystemProperty.version.get()
+ " Java "
+ properties.get("java.specification.version"));
}
public static String getInfo()
{
return "Version: " +
System.getProperty("java.version") + " OS: " +
System.getProperty("os.name") + " User: " + System.getProperty("user.name");
}
}
소스는 사실 별게 없다. 서블릿 프로그램을 많이 해본 분들이라면 그냥 봐도 알만한 내용.. 이쪽 경험이 별로 없는 필자는 @WebServlet
annotation을 처음 본지라, web.xml
설정하기 위한 번거로움이 필요 없다는 것을 새로 안 정도~
브라우저에서 hello
진입점으로 들어오게 되면 doGet
메소드가 실행되고 결과를 출력한다. getInfo
메소드는 index.jsp에서 호출하는데, 처음 페이지를 만들때 사용된다(쉽네~)
pom.xml
maven plugin을 사용하기 위해 아래 내용이 추가되어 있다.
1
2
3
4
5
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>1.3.1</version>
</plugin>
appengine-web.xml
runtime을 위한 java8과 같이 꼭 필요한 설정이 들어 있다. 이 파일에 대한 설명은 appengine-web.xml Reference 를 참조하자
1
2
3
4
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<runtime>java8</runtime>
<threadsafe>true</threadsafe>
</appengine-web-app>
Gradle로 실행하기
소스를 보니 gradle 환경설정이 되어 있다. 그래서 간단히 실행해보니 동일하게 잘 동작한다.
로컬에서 실행
1
./gradlew appengineRun
Deploy
1
./gradlew appengineDeploy
앱엔진 관련 명령
솔직히 다 모르겠다~ :-(
1
2
3
4
5
6
7
8
9
10
11
'appengineDeploy'
'appengineDeployCron'
'appengineDeployDispatch'
'appengineDeployDos'
'appengineDeployIndex'
'appengineDeployQueue'
'appengineRun'
'appengineShowConfiguration'
'appengineStage'
'appengineStart'
'appengineStop'
참조
- 구글 공식 문서 : https://cloud.google.com/appengine/docs/standard/java/
- 앱엔진 개발 환경 세팅 : https://cloud.google.com/appengine/docs/standard/java/building-app/environment-setup