본문 바로가기

Cloud Platform/Google Cloud Platform

App Engine + Maven + Spring + MyBatis + Cloud SQL(MySQL) in STS(Spring Tool Suite)

App Engine + Maven + Spring + MyBatis + Cloud SQL(MySQL) in STS(Spring Tool Suite)


초기 스타트업 에는 인력이 항상 부족하다. 쉽게 말해 개발자가 시스템의 모든것을 준비하고 개발하고 운영해야 한다.

호스팅 벤치마킹, 운영 플랫폼 설치/설정, 언어선택, 데이터베이스 설정, 방화벽 설정 등등

실제 어플리케이션 개발에 착수하기전에 진이 빠져 버릴수 있다. 새로운 환경이면 더더욱 그렇다.

이런 초기의 비용 및 에너지 소모를 줄이기 위해 본격적으로 클라우 플랫폼 도입을 하게 됐다.


선택은 Google Cloud Platform 의 Google App Engine


- Google App Engin 만들기

1. 구글계정이 없으면 계정을 생성한다.

2. https://console.cloud.google.com 에서 프로젝트를 생성한다.

3. 프로젝트 선택 후 메뉴 -> 컴퓨팅 -> App Engine 을 선택하면 "App Engine 시작하기" 나타난다.

4. "언어 선택" 에서 "JAVA" 를 선택한다. 이후의 과정은 투토리얼 형식으로 차근차근 따라가면 

   "Hello Wrold" 앱이 완성된다.



- Cloud SQL 만들기

1. 프로젝트 선택 후 메뉴 -> 저장소 -> SQL 을 선택한다.

   기본적으로 결제를 요청한다.



- 개발 환경 및 프로젝트 설정

1. JDK 설치

- jdk 1.7 이 필요함

- 설치법은 인터넷에 많으니 생략~~


2. Eclipse 설치

- STS (Spring Tool Suite) 설치 되어 있어서 그냥 사용함

- Eclipse 설치법도 많으니 생략 

http://www.eclipse.org/downloads/eclipse-packages/


3. Google Cloud SDK 설치

https://cloud.google.com/sdk/docs/


3.1 인스톨 프로그램 다운

3.2 파이썬이 설치 되어 있지 않으면 파이썬 함께 설치를 선택

3.3 설치 완료되면 Google Cloud Shell 창이 열리고 gcloud init 가 실행됨

     실행 안되면 직접 실행할 것.

3.4 app-engine-java 컴포넌트 설치, 프로젝트 생성시 필요함.

Google Cloud Shell 창 에서 gcloud components install app-engine-java 실행

https://cloud.google.com/sdk/docs/managing-components 참고


4. Cloud Tools for Eclipse 설치

https://cloud.google.com/eclipse/docs/quickstart


4.1 이클립스 연다.

4.2 Help -> Install New Software

4.3 https://dl.google.com/eclipse/google-cloud-eclipse/beta/ 를 Wrok with 에 복사한 후 엔터 치면

     관련 컨텐츠를 가져온다.

4.4 Cloud Tools for Eclipse 선택해서 설치 한다.


5. 메이븐 기반 프로젝트 생성

https://cloud.google.com/eclipse/docs/creating-new-webapp


5.1 File -> New -> Project 선택

5.2 Google Clud Platform -> Maven-based Google App Engine Standard Java Project 선택

5.3 Google Cloud SDK 설정 하라고 나타나면

- Google Cloud SDK 설치한 폴더의 google-cloud-sdk 폴더를 설정해줌

3.4 Google Cloud SDK 설정 이 정상이면

- Group ID, Artifact ID, Version, Java Package 를 입력 후 다음

- Hello World template 선택 후 완료


6. 이클립스에서 실행 및 디버깅 하기

https://cloud.google.com/eclipse/docs/running-and-debugging


6.1 프로젝트 탐색기 에서 프로젝트 선택

6.2 컨텍스트 메뉴 열기

6.3 Run As -> App Engine

- http://localhost:51079/ 이라고 자동으로 뜸

bad runtime process port [''] 오류 상황

- 기타 오류 발생

6.4 6.3 에서 정상 실행이 안될때

- 프로세스 삭제 해보기 or 재부팅 하면 잘됨 ㅡㅡ;

- Run As -> Maven Build -> DevAppServer : appengine:run 실행 하면 페이지가 로딩 됨


7. Spring 설정하기

7.1 POM.xml 에 3.2.3.RELEASE 버전 적용


<properties>

<org.springframework-version>3.2.3.RELEASE</org.springframework-version>

</properties>


<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context</artifactId>

<version>${org.springframework-version}</version>

<exclusions>

<!-- Exclude Commons Logging in favor of SLF4j -->

<exclusion>

<groupId>commons-logging</groupId>

<artifactId>commons-logging</artifactId>

</exclusion>

</exclusions>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-webmvc</artifactId>

<version>${org.springframework-version}</version>

</dependency>


8. 배포하기

https://cloud.google.com/eclipse/docs/deploying


오류 1. 

Deploy to App Engine Standard 했을때 "jre 가 아닌 jdk 경로를 지정하라" 는 오류가 나온다.

시스템변수 JAVA_HOME 이 1.8 버전의 JDK 로 잡혀있고,

STS.ini(eclipse.ini 와 같은 역할) 에 vm 을 지정하는 옵션이 없는 상태 이다.


오류 1 - 시도 1.

JAVA_HOME 을 JDK 1.7 설치 경로로 했을때 STS 가 JDK 1.8 이상을 요구하면서 STS 실행 안됨.

http://stackoverflow.com/questions/17308139/gae-cannot-get-the-system-java-compiler-please-use-a-jdk-not-a-jre

오류 1 - 시도 2. 

STS.ini(eclipse.ini 와 같은 역할) 에 아래와 같이 JDK 1.8 버전을 작성해 줌

-vm

C:\Program Files\Java\jdk1.8.0_101\bin\javaw.exe (JDK 1.8 설치된 경로)

Deploy to App Engine Standard 했을때 

1. 컴파일 성공

2. 서버로 업로드 성공

3. 서비스 업데이트 실패

Updating service [default]...

..........................failed.

ERROR: (gcloud.app.deploy) Error Response: [13] Error precompiling app during deployment.

4. 다시 Deploy to App Engine Standard 하니까 

Deployed service [default] to [https://your.domain.com] 

성공 메시지 나옴 ... 뭐다냐 ㅡㅡ;

5. 배포 URL 오류 날 경우 Google Cloud Platform 접속해서 해당 서비스의 로그를 확인 해서 오류를 해결하자.

Google Cloud Platform -> STACKDRIVER -> 로그 기록 에서 해당 버전의 서비스 로그를 확인 해서 오류를 해결하자.



9. Cloud SQL 인스턴스 생성 및 설정


9.1 Google Cloud Platform 접속 -> 메뉴 -> 저장소 -> SQL 을 선택한다.

기본적으로 결제를 요구한다. 실제 결제가 이루어 지는것은 아니고 차후 결제요청이 있을때 확인을 위한 정보로만 사용된다.

결제정보를 입력하면 결제 후 결제취소 까지 10여분 정도 시간 소요됨.

기본적으로 유료 정책이기 때문에 비용이 발생하겠지만 아직 서비스 사용전 이어서 비용이 얼마나 들어가는지는 미확인.

9.2 인스턴스 생성 시 Cloud SQL 2세대 로 생성함

9.3 인스턴스 생성이 완료된 후 개요 로 들어가면 Cloud Shell을 사용해 연결 버튼을 클릭하면 웹상에서 사용할수 있는 리눅스쉘이

나타난다. 기본적으로 root 계정으로 접속하며 초기 비밀번호는 없는 상태이다.

mysql 접속 명령어 : gcloud beta sql connect tangko --user=root

9.4 메뉴 -> SQL -> 인스턴스 세부정보 -> 속성 -> 승인된 네트워크 -> 관리 를 클릭하면

생성한 인스턴스에 접속할 수 있는 외부 클라이언트 설정을 할 수 있다. 

이름 과 네트워크 아이피를 작성한다.

9.5 외부에서 접속 할 수 있는 클라이언트를 이용해서 인스턴스에 접속한다.

9.6 접속이 성공하면 root 비번/권한, 일반사용자 추가/비번/권한, 사용할 DB생성/권한 등등 필요한 설정을 한다.

9.7 function 생성 오류 발생시

https://groups.google.com/forum/#!topic/google-cloud-sql-discuss/3eb6aDX62QI


Cloud SQL Shell 에서 아래 명령어 실행 하면 인스턴스를 재시작 한다.

gcloud sql instances patch [INSTANCE_NAME] --database-flags log_bin_trust_function_creators=ON

INSTANCE_NAME


10. Cloud SQL 접속을 위한 프로젝트 설정

https://cloud.google.com/appengine/docs/java/cloud-sql/


10.1 Cloud SQL 접속 정보를 pom.xml 에 추가한다. 아래는 Cloud SQL 2세대 설정법이다.

<INSTANCE_CONNECTION_NAME>project:region:instance</INSTANCE_CONNECTION_NAME>

<user>myUser</user>

<password>myPassword</password>

<database>myDatabase</database>

10.2 JDBC 라이브러리를 프로젝트에 추가한다. 메이븐 프로젝트 이므로 pom.xml 에 아래를 추가한다.

<dependency> <!-- ONLY USED LOCALY -->

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>5.1.6</version> <!-- v5.x.x is Java 7, v6.x.x is Java 8 -->

</dependency>

<dependency>

<groupId>com.google.cloud.sql</groupId>

<artifactId>mysql-socket-factory</artifactId>

<version>1.0.2</version>

</dependency>


11. MyBatis 설정하기



진행중 ....