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_
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 설정하기
진행중 ....
'Cloud Platform > Google Cloud Platform' 카테고리의 다른 글
App Engine + Cloud SQL 설정 (0) | 2017.10.24 |
---|---|
Google App Engine vs Google Compute Engine (0) | 2017.02.24 |
app.yml vs appengine-web.xml vs web.xml (0) | 2017.02.20 |
Google App Engine + Cron (Spring Scheduler) (0) | 2017.02.17 |
Maven + App Engine Plugin 사용하기 (0) | 2017.02.09 |