이 글에서는 스프링부트 프로젝트를 Oracle Cloud에 git clone하여 배포를 진행하는 과정을 작성합니다. (centos7로 진행하며, Oracle Cloud 가입과 putty설치는 되어 있다고 가정하여 생략합니다.)
클라우드 VM 서비스를 제공하는 회사는 AWS, GCP, Azure, 네이버 클라우드 등 다양합니다. 대부분의 회사에서 여러 자사 서비스를 맛볼 수 있는 프리티어를 제공합니다. 현재 점유율 1위 서비스는 AWS 입니다. AWS는 1년간 프리티어를 제공하고, 프리티어를 초과하여 사용하면 과금이 발생합니다. Oracle Cloud는 업계 후발주자 답게 혹할만한 신규 유저 유입 전략으로 등장했습니다. 기간이 없는 완전 무료 프리티어를 제공합니다. 이는 AWS와 다르게 사용 자원의 한계를 두어 과금이 발생하지 않습니다. 그래서 Oracle Cloud에 대한 사용 경험도 쌓고 과금에 안전하여 1차 배포를 진행할려고 합니다.
로그인 후 홈 화면을 내려 VM 인스턴스 생성을 클릭합니다.
VM 생성창에는 이미 대부분의 기본값이 입려 되어 있습니다. 필요한 것만 변경합니다.
우선 VM 이미지를 선택합니다. 아래 화면에서 이미지 변경을 눌러 변경할 수 있습니다.
저는 centOS 7을 선택했고, 무료 표시된 이미지 중 익숙한 것을 선택하시면 될 것 같습니다.
하단에 SSH키를 저장합니다. 전용키와 공용키 둘다 잘 보관해둡니다.
모든 설정을 마치고 하단에 생성 버튼을 클릭합니다.
일정 시간 후 자동으로 VM 상세화면으로 이동합니다.
필수 파일 설치을 설치합니다.
- Puttygen (Putty Key 생성)
32bit: https://the.earth.li/~sgtatham/putty/latest/w32/puttygen.exe
64bit: https://the.earth.li/~sgtatham/putty/latest/w64/puttygen.exe- Putty (SSH 연결 지원)
32bit: https://the.earth.li/~sgtatham/putty/latest/w32/putty.exe
64bit: https://the.earth.li/~sgtatham/putty/latest/w64/putty.exe
Puttygen.exe을 실행합니다. 실행 후 Load를 클릭하고, 파일 확장자를 모두 보기 한 후, VM 생성 시 받은 전용키를 불러옵니다.
자동으로 Key 정보가 입력됩니다. 아래 Key 아이디와 비밀번호를 설정할 수 있지만, cloud 접속에 아이디 비번이 있으므로 여기서 설정하지 않고 넘어가겠습니다. Save private key를 눌러 .ppk 파일을 생성합니다.
아래와같이 창이 뜨면 예를 누릅니다. .ppk를 안전한 장소에 저장합니다.
이제 앞서 설치한 putty.exe를 실행합니다. Category에서 SSH-Auth를 찾아 들어갑니다.
다음으로 Browse..를 눌러 위에서 저장한 .ppk 키를 선택합니다.
다시 Category의 Session으로 이동합니다. 생성한 VM IP를 입력하고, Session 이름을 하나 만든 뒤 Open을 눌러 접속합니다. Session 이름을 더블클릭해도 됩니다.
접속을 확인했습니다. 사용자 명을 치면 접속되어 명령을 실행할 수 있습니다.
사용자명은 VM 인스턴스 정보에서 확인할 수 있습니다.
각 단계의 코드를 순서대로 입력합니다.
sudo -s
wget http://repo.mysql.com/mysql80-community-release-el7-1.noarch.rpm
sudo rpm -ivh mysql80-community-release-el7-1.noarch.rpm
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
sudo yum install mysql-server
grep 'temporary password' /var/log/mysqld.log
/usr/bin/mysql_secure_installation
순차적으로 보안 관련 설정을 진행합니다.
firewall-cmd --zone=public --permanent --add-service=mysql
systemctl restart firewalld.service
mysql -uroot -p
-- testdb 생성
CREATE DATABASE testdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- test 계성 생성
CREATE USER 'tester99'@'%' IDENTIFIED BY 'myTestUser486!';
-- testdb에 대한 권한 부여
GRANT ALL PRIVILEGES ON testdb.* TO 'tester99'@'%' WITH GRANT OPTION;
flush privileges;
인스턴스 - VNIC 접속 - 서브넷 링크 클릭
보안 목록 - 이름 클릭
수신 규칙 추가 클릭
소스 CIDR과 Port 범위를 입력합니다.
MySQL 설치 과정에서 변경하지 않았다면 3306 port를 사용합니다.
--재시작
systemctl restart mysqld
--정지
systemctl stop mysqld
루트 권한으로 전환
sudo -s
wget으로 원하는 버전 다운
-- java 8
wget http://download.oracle.com/otn-pub/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/jdk-8u171-linux-x64.tar.gz
-- java 11
wget https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz
-- java 17
wget https://download.java.net/java/GA/jdk17.0.2/dfd4a8d0985749f896bed50d7138ee7f/8/GPL/openjdk-17.0.2_linux-x64_bin.tar.gz
압축 해제 및 설치
tar xvf openjdk-17.0.2_linux-x64_bin.tar.gz
파일 이동
sudo mv jdk-17.0.2/ /opt/jdk-17/
환경 변수 설정
vim ~/.bashrc
----
## 아래 2줄을 맨 아래에 추가 ##
export JAVA_HOME=/opt/jdk-17
export PATH=$PATH:$JAVA_HOME/bin
파일 맨끝으로 가기: left shift + g
한줄 추가해서 입력모드 만들기: o
파일저장: esc -> :wq
source ~/.bashrc
java --version
git clone 깃허브주소
다음 명령어로 깃허브에 있는 파일을 불러옵니다.
git clone에 성공했다면, 해당 파일로 이동 후 빌드를 진행합니다.
cd 프로젝트이름
으로 파일 이동 후
./gradlew build
빌드에 성공했다면 build->libs 디렉토리가 생성 됩니다.
cd build/libs
로 이동 후 파일을 살펴보게 되면 다음과 같이 jar파일이 생성되어 있을 것입니다.
nohup java -jar server-0.0.1-SNAPSHOT.jar &
명령어로 빌드파일을 실행하면 됩니다. (여기서 파일이름은 생성된 파일 이름으로 수정하시면 됩니다.)
nohup 명령어 뒤에 &를 붙이면 벡그라운드에서 실행한다는 의미로 저희가 EC2 콘솔 접속을 끊더라도 실행파일을 계속 실행하라는 명령어입니다.
명령어를 실행시켜도 스프링 부트가 실행되고 있다는 로그가 나오지 않아 실행되는지 잘 모르겠다면
cat nohup.out
명령어를 통하여 로그를 확인할 수 있습니다.
(로그를 nohup.out 파일에 저장해놓기 때문에 저렇게 따로 출력해서 확인해줘야 합니다.)
또한 작업중인 jar파일을 알고 싶다면 다음 명령어를 사용하시면 됩니다.
ps -ef | grep jar
다음 명령어를 통해 작업중인 jar파일 목록을 알 수 있습니다.
만약 실행을 취소시키고 싶다면
kill -15 PID
를 통해 취소 시킬 수 있습니다. (-15는 정상종료, -9는 강제종료 입니다.)
Oracle Cloud 배포에 대한 레퍼런스가 많이 없어 힘들기도 하였지만, 신규 후발 주자 답게 프리티어 치고 넉넉한 사양이 마음에 들었습니다. 하지만 확장성 부분에서 레퍼런스가 아직 부족하기에 다음 배포는 AWS EC2를 이용하여 배포하고 AWS의 기능들을 더 사용해볼려고 합니다.