백엔드 프로젝트 배포용 GCP 구성하기(Compute Engine + Cloud SQL + IntelliJ + Spring Boot)

chaejm55·2024년 1월 14일
1

Spring Boot 프로젝트를 IntelliJ에서 바로 GCE로 배포하는 환경 설정 및 방법을 작성했습니다.

1. Google Compute Engine(GCE) VM 구성

1) 구글 클라우드 계정 생성 및 프로젝트 생성

https://cloud.google.com/

위의 링크에서 가입을 하고 Console로 이동하여 프로젝트를 생성합니다.

지금은 조직 없음을 선택하고 원하는 프로젝트 이름을 입력해줍니다.

잠시 기다리면 알림에 프로젝트 생성 완료 알림이 생깁니다. 프로젝트 선택을 눌러줍니다.

이렇게 배포를 위한 프로젝트 생성이 마무리 되었습니다.

2) VM 인스턴스 생성

다음은 프로젝트에 VM 인스턴스를 생성하겠습니다.(프리티어 기준)

좌측 탐색 메뉴 버튼을 클릭하여 Compute Engine - VM 인스턴스를 클릭해줍니다.

사용 버튼을 클릭하여 기다려줍니다. 완료까지 시간이 좀 걸립니다.


결제 계정 오류 발생 시)

가끔 여러 프로젝트를 생성하신 분이라면 결제 계정 선택에서 무한 로딩이 되는 등 오류가 발생 할 수 있습니다. 이는 결제 계정 하나 당 기본 5개의 프로젝트에 연결 가능하기 때문입니다. 이때는 탐색 메뉴 - 결제 - 계정 관리로 들어가 필요없는 프로젝트의 결제 사용을 중지 해줍니다.


완료가 되면 화면이 바뀝니다. 인스턴스 만들기 버튼을 눌러 VM 인스턴스를 생성합시다.

머신 구성:E2, 머신 유형: e2-micro, 부팅 디스크 유형: 표준 영구 디스크, 부팅 디스크 크기: 30GB 이하, VM 프로비저닝 모델:스팟 으로 설정해줍니다. 운영체제는 가장 무난한 ubuntu로 선택했습니다. 방화벽은 HTTP, HTTPS 트래픽을 모두 허용했습니다. 다른 부분은 그대로 뒀습니다.

아래의 프리티어 기준을 참고하여 알맞게 설정하시기 바랍니다.

서버를 작동시킬 VM 인스턴스 생성을 완료하였습니다.

[참고] 구글 프리티어 기준 링크

3) 고정 IP 설정

다음은 고정 IP를 설정해줍니다. 인스턴스가 재시작 되어도 동일한 ip로 접속할 수 있도록 해줍니다.

탐색 메뉴 - VPC 네트워크 - IP 주소로 들어가줍니다.


외부 고정 IP 주소 예약을 클릭해줍니다.

이름을 입력해주고, 네트워크 서비스 계층: 표준, IP 버전: IPv4, 유형: 지역(리전), 연결 대상: 이전에 생성한 인스턴스 선택으로 설정을 마무리합니다.
인스턴스를 연결하지 않으면 비용이 빠져나가니 꼭 연결 대상을 설정해야합니다.

고정 ip를 할당하여 계속 동일한 ip로 접속할 수 있게 되었습니다.

4) 방화벽 설정

우리는 spring boot를 배포할 예정이기 때문에 기본 포트인 8080포트 또한 열어줘야합니다.

화면 좌측에서 방화벽을 클릭해줍니다.


화면 상단에서 방화벽 규칙 만들기를 클릭해줍니다.

다른 부분은 그대로 두고 이름, 소스 필터: IPv4범위, 소스 IPv4범위: 0.0.0.0/0, 프로토콜 및 포트: TCP체크, 포트 8080으로 지정하고 생성하면 됩니다.

이렇게 기본 VM 설정이 완료 되었습니다.

2. SSH Key 발급

웹 콘솔 말고 로컬에서 접근하기 위해 ssh key를 발급해봅시다.

1) puttygen으로 key pair 생성

puttygen을 설치하고 key - Generate key pair을 클릭해 새로운 key pair를 생성해줍니다.

마우스를 빈 공간으로 움직여 주어야 key pair가 생성 됩니다.

  • 생성 완료 화면에서 key comment: GCP에 사용한 gmail 계정, Key passphrase: 비밀번호, Confirm passphrase: 비밀번호 확인을 알맞게 입력해줍니다.
  • Save private Key 버튼을 눌러 .ppk 파일로 저장해줍니다.
  • 상단의 public key 부분을 전부 긁어 복사해줍니다. 이 부분을 GCE에 등록합니다.
  • 비밀번호는 SSH 연결 시에 사용 되니 꼭 기억합시다.

2) public key GCE에 등록

탐색 메뉴 - Compute Engine - 메타데이터로 들어가줍니다.


화면 상단에서 살짝 아래의 SSH 키를 누르고 화면 상단의 수정을 클릭해줍니다.

목록 아래의 항목 추가 버튼을 누르면 새로운 SSH 키를 입력하는 공간이 생깁니다. 이곳에 아까 복사한 public key 를 붙여넣고, 화면 하단의 저장버튼을 눌러줍니다.

이제 로컬에서 GCE에 접근할 수 있습니다.

3. IntelliJ 환경 설정

이제 IntelliJ에서 바로 GCE를 사용하기 위한 환경 설정을 하겠습니다.

1) Google Cloud Code 플러그인 설치


Settings(설정)-Plugins(플러그인)으로 들어가 google cloud code를 검색하여 설치해줍니다. 설치 후 안내에 따라 IntelliJ를 재시작 해줍니다.


재시작 후 우측 사이드바 - Compute Engine을 클릭하여 우측에 창을 띄우고 띄운 창 우측 상단의 ...을 클릭하여 줍니다.

우측 상단의 Add Account를 클릭하여 브라우저를 통해 구글 로그인을 해줍니다. 이후 VM 인스턴스가 있는 프로젝트를 선택하여 OK버튼을 눌러줍니다.


이후 All VM Instance를 눌러주면 해당 프로젝트에서 생성한 모든 VM 인스턴스가 보입니다.
각 VM 인스턴스를 클릭하면 자세한 정보를 확인할 수 있습니다.


VM 인스턴스를 우클릭 하면 바로 웹 클라우드 콘솔로 이동도 가능합니다.

Google Cloud Code 플러그인으로 GCE 모니터링을 IntelliJ에서 간단하게 하는 방법을 알아봤습니다.

2) 원격 호스트 설정


상단 메뉴바에서 Tools(도구)-Deployment(배포)-Browse Remote Host(원격 호스트) 로 들어가줍니다.


왼쪽 상단에 + 버튼을 눌러 SFTP를 선택해 새로운 원격 호스트를 만들어줍니다. 저는 이름을 gcp로 지정했습니다.


SSH cofiguration(SSH 설정) 옆에 ... 버튼을 눌러 SSH 연결 설정을 해줍니다.

  • Host: GCE 고정 IP 주소, Username: GCP 사용 구글 계정 이름, Authentication type: Key pair(키 쌍), Passpharase(비밀 구문): PuttyGen에서 Key 생성 시 입력한 비밀 번호 를 알맞게 입력해줍니다. Save passphrae를 선택하시면 매번 비밀번호를 입력하지 않아도 됩니다.
  • 이후 Test Connection 버튼을 눌러 잘 연결 되는지 확인합니다. 만약 안 된다면 입력 값, GCE 작동 상태를 확인하고 재시도합니다.
  • OK 버튼을 누르고 원격 호스트 설정으로 돌아갑니다.


마찬가지로 Test Connection 버튼을 눌러 확인해주고 OK 버튼을 눌러줍니다.


우측의 Remote Host(원격 호스트) 창을 통해 잘 연결 되었음을 확인할 수 있습니다.

이제 IntelliJ에서 쉽게 GCE에 파일을 업로드 하고 다운로드할 수 있습니다.

3) IntelliJ로 SSH 세션 접속


Tools(도구)-Start SSH Session(SSH 세션 시작) 으로 들어가줍니다.


여기서 아까 생성한 SSH 설정을 선택하여 SSH 세션을 시작해줍니다.


화면 하단에 GCE SSH 세션 터미널이 생깁니다.

이제 IntelliJ에서 쉽게 GCE를 한 번에 활용할 수 있습니다.

4. Spring Boot 배포

이제 마지막으로 Spring Boot 서버를 GCE를 통해 배포해보겠습니다.

1) jar 파일 만들기

배포를 위해 코드들을 jar파일로 만들겠습니다.


터미널로 만드는 방법도 있지만, 간단하게 오른쪽 사이드 바의 Gradle - Tasks - build - bootJar 을 통해 만들 수 있습니다.


왼쪽 Project 창에서 build\libs 폴더에서 jar파일이 생성된 것을 확인할 수 있습니다.

2) 원격 호스트에 업로드

이제 jar 파일을 GCE에 업로드 하겠습니다.

간단하게 jar 파일을 원하는 경로로 드래그 앤 드랍 해주면 간단하게 업로드 됩니다.

3) Spring Boot 서버 실행

앞서 실행한 GCE SSH 세션 터미널을 통해 명령어로 스프링 부트 서버를 실행하겠습니다.

1) java 설치

다음 명령어를 입력해 본인 Spring boot에 맞는 java를 설치해줍니다.
아래 예시는 java 17 기준입니다.
sudo apt update
sudo apt-get install openjdk-17-jre
sudo apt-get install openjdk-17-jdk

이후 java --version 명령어를 실행해 설치를 확인합니다.

2) 서버 실행

다음 명령어를 입력해 Spring Boot 서버를 실행합니다. SSH 세션이 종료 되어도 계속 실행되도록 백그라운드로 서버를 실행하겠습니다.
아래 예시는 nohup 명령어를 통해 실행 결과를 nohup.out 파일에 append하고 백그라운드로 실행하는 명령어 예시입니다.
cd [jar 파일이 있는 경로]
nohup java -jar [업로드한 jar 파일명].jar &

nohup.out 파일을 참고하면 서버 실행 성공 여부를 확인할 수 있습니다.

이후 고정IP주소:8080을 통해 제대로 API 응답이 오는지 확인하면 완료입니다.

참고로 jar 파일 실행 시 여러 옵션은 아래 참고 링크를 남기겠습니다.
[참고] Spring Boot 배포 시 명령어 옵션

3) 서버 종료

업데이트 된 서버를 실행시키려면, 기존 서버를 종료해야합니다. 백그라운드로 서버를 실행 시켰으니 따로 pid를 찾아서 기존 서버를 종료 시켜줘야합니다.

  • 기존 서버 pid 찾기
    ps -aux | grep jar

유저 이름 뒤의 pid를 얻습니다.

  • 기존 서버 강제 종료 하기
    kill -9 [기존 서버 pid]

여기 예시에서는 kill -9 18966을 사용합니다.

5. References

https://cloud.google.com/free/docs/free-cloud-features?hl=ko#compute

https://choo.oopy.io/5c999170-dde5-4418-addc-00a0d263287c

https://amanokaze.github.io/blog/Connect-GCE-using-VS-Code/

https://velog.io/@hyeri_hello/Spring-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-GCP-Google-Cloud-Platform-%EC%84%9C%EB%B2%84-%EB%B0%B0%ED%8F%AC

https://colabear754.tistory.com/132

https://myitstorys.tistory.com/entry/spring-boot-default-server-port-%EB%B3%80%EA%B2%BD

profile
여러가지를 시도하는 학생입니다

0개의 댓글