0. 개요
원래는 배포를 하면서 nginx를 사용해서 프록시 서버를 거치게 하거나, CI/CD 도구로써 Jenkins를 사용하거나, 혹은 docker를 사용해서 배포를 하게됩니다. 하지만 이번에는 AWS EC2서버만을 이용해서 베이직하게 배포를 하는 방법을 실습한 것을 정리해보는 시간을 가져보겠습니다.
1. EC2 환경 세팅
배포를 하기전에 사용하기위해 EC2 서버의 환경 세팅을 한 후, EC2 서버로 원격접속을 해서 우리가 Github에 올린 프로젝트를 다운받아 보는 것을 해보겠습니다.
EC2 서버 고정 IP 설정
이전의 포스팅(https://chick-it.tistory.com/89)에서 한 내용처럼 인스턴스를 EC2에서 생성해줍니다.
이전과 다른점이라면, 네트워크 설정에서 편집 버튼을 누르고 하단의 인바운드 보안 그룹 규칙에 들어가서 현재는 22포트 밖에 없지만 인바운드 보안그룹 규칙을 추가 버튼을 눌러서 8080포트를 추가해줍니다. 모든 사용자가 접근할 수 있도록 위치무관으로 유형을 정해주도록 합니다.
그럼 위처럼 인스턴스가 생성될 텐데, 현재는 퍼블릭 IPv4포트 번호만 존재합니다. 우리는 AWS에서는 엘라스틱 ip(탄력적 ip)라고 부르는 고정 ip를 설정해주어야 합니다.
보통 가정집의 IP는 유동적으로 사용합니다.
예를들어 위처럼 공유기에 여러집이 물려있고, 통신사에는 연결된 집들에게 인터넷을 사용하도록 IP주소를 할당해줍니다. 하지만 예를들어 연결된집이 3개라고 해서 3개의 IP주소를 할당해주지 않습니다. 개인적으로 인터넷을 사용하는 사람들은 사용하는 시간이 있고, 나머지 시간에는 사용하지 않습니다.
세 사람이 자동차를 각자 아침,점심,저녁에만 사용한다면 한개의 자동차로 3명이 공유해서 사용할 수 있습니다. 이처럼 개인적으로 사용하는 인터넷은 일정 갯수의 IP를 유동적으로 공유해서 사용합니다.
하지만, 우리가 만들어서 배포할 웹서비스는 여러 사람이 하나의 IP로 사이트에 접속해서 서비스를 사용하게 됩니다. 이 주소가 계속 유동적으로 바뀐다면 서비스를 할 수 없습니다. 이를 위해서 비용은 조금 더 들지만, 고정 IP를 사용해서 서비스를 운영해야합니다.
EC2에서 탄력적 IP 탭으로 가서, 탄력적 IP 주소 할당을 눌러서 주소를 할당 받습니다.
이후 탄력적 IP 주소 연결을 통해, 방금 만든 인스턴스를 연결해줍니다.
그러면 우리가 만든 EC2 서버에 고정 IP가 할당됩니다. 이제 고정 IP를 통해서 MobaXterm으로 원격 접속을 하면 됩니다.
잘 접속됩니다.
2. JDK, Git clone, 빌드, 배포
Git
git --version
git clone "내 프로젝트 깃허브 링크"
git이 깔려져 있는지 버전을 확인합니다. 보통은 기본적으로 깔려있습니다.
이후 내 프로젝트를 가져와주도록 합니다.
ls명령어로 확인해보니 프로젝트가 잘 들어왔음을 확인할 수 있습니다.
Build
이제 빌드를 해서 다운받은 프로젝트 파일을 실행가능한 jar파일로 만들어 주겠습니다. 프로젝트 안으로 들어와서 ls로 내부를 확인해보면, gradlew이라는 파일이 있는 것을 확인할 수 있습니다. 이 실행파일로 프로젝트를 jar로 변환할 수 있습니다. 하지만 현재 권한이 -rw 로 x, 즉 실행권한이 없는 것을 확인할 수 있습니다.
chmod u+x gradlew
chmod로 gradlew에 실행권한을 주도록 합니다. 초록색 글자가 되어있는 걸 보니 실행할 수 있는 상태가 되었습니다. 이대로 빌드를 해야하지만, 제가 가져온 프로젝트의 경우 spring boot 프로젝트 입니다. 이를 위해서 java를 설치해야합니다.
sudo apt update
sudo apt-cache search jdk | grep openjdk-11
sudo apt install openjdk-11-jdk
한번 우분투 내의 라이브러리를 업데이트 해주고, java11로 만든 프로젝트 이므로 jdk 11을 다운받겠습니다. apt-cache search로 다운로드 가능한 jdk를 검색하는데 심각하게 많을 정도로 많은 파일이 검색될 것이므로 openjdk-11로 좁혀서 검색해서 원하는 jdk를 다운받아 줍니다.
빌드
./gradlew build
이제 빌드를 해줍니다.
cd build
cd libs
ls
java -jar v1-0.0.1-SNAPSHOT.jar
빌드에 성공하면 build라는 디렉터리가 생기는데, 여기에 들어가면 libs라는 디렉터리가 있습니다. 여기에 빌드로 만들어진 jar파일이 존재합니다. 이 파일을 실행하면 프로젝트가 실행됩니다.
와우! 인텔리제이 에서나 보던 spring boot 프로젝트가 원격 컴퓨터에서 실행되고 있습니다.
이제 고정IP:8080에 접근하면, 우리가 만든 프로젝트가 배포되어 있습니다.
해당 페이지에 접근하면 로그를 띄우게 했는데, 위처럼 로그가 잘 뜨는 것을 확인할 수 있습니다.
2. 현재 배포의 문제
하지만 지금은 날것 그 자체로 프로젝트를 배포한 것 뿐입니다. 현재 배포한 환경에는 문제가 많습니다.
1. 현재 MobaXterm에 열려있는 원격접속 창을 끄면, 서비스 또한 연결이 끊어집니다. 터미널 창이 꺼지더라도 계속 백그라운드로 실행이 되어야 합니다.
2. 현재 배포를 하면, Spring boot 프로젝트가 돌아가고 있습니다. 하지만, 돌아가면서 여기에서 발생하는 로그나 다른 에러 메세지들을 따로 빼서 보는 것이 가시성에 훨씬 좋습니다. 로그파일을 분리해주어야 합니다.
3. 현재 임대 컴퓨터는 US로 시간대가 정해져 있어서 시간대 역시 한국으로 변경해야 하며, 프로젝트를 시작하거나, 프로젝트를 종료하는 것을 일일히 하지말고, 스크립트 코드를 작성해서 손쉽게 해주는 것이 좋습니다.
4. 빌드, 배포 자동화 : 현재 github에서 프로젝트를 가져오고 > JDK 설치 > 빌드 > 배포 프로세스를 진행중인데, 그러면 프로젝트를 새 기능을 추가해서 재 배포를 하려고 하면, 이 모든 과정을 다시 일일히 수동으로 해야하는가? 이 프로세스를 자동화 해주어야 합니다.
다음 포스팅부터 이런 문제들을 해결하는 방법을 알아보고자 합니다.
'Project > AWS 및 배포' 카테고리의 다른 글
AWS - 3-2. 베이직 하게 배포해보기 - 타임존 변경, 스크립트 작성 (1) | 2024.01.31 |
---|---|
AWS - 3-1. 베이직 하게 배포해보기 - 백그라운드 실행, 로그파일 분리 (0) | 2024.01.31 |
AWS - 2. 키페어와 RSA (0) | 2024.01.30 |
AWS - 1. AWS에 대해서 (0) | 2024.01.30 |
DevOps 그리고 CI/CD에 대해서 (2) | 2024.01.30 |