AWS

spring boot project의 기본적인 배포 흐름

25G 2023. 2. 26. 22:15

간단한 스프링 프로젝트를 이용해서 ec2에 배포를 도커나 ci/cd 도구 없이 원시적으로 배포를 하는 연습을 해보려고 합니다.

(물론 도커, git action같은 ci/cd 도구를 사용하면 훨신 좋겠지만 그전에 배포에 대한 흐름을 파악하기 위한 연습입니다.)

1. 인스턴스 생성

aws에 배포를 할 서버 인스턴스를 대여를해서 배포를 할 서버 컴퓨터를 준비해 놓습니다.

고정 Ip

간단하게 집에서 인터넷이 되는 이유는 통신사에서 연결해놓은 공유기를 통해서 네트워크 통신을 하기 때문입니다. 하지만 통신사 입장에서는 우리집에만 Ip를 할당해 주는 것이 아닙니다. 이때 어떠한 지역에 컴퓨터가 5대가 있는데 이 지역 컴퓨터 갯수만큼 ip 갯수를 주지는 않습니다.
그 이유는 모든 집에서 지속적으로 동시에 인터넷을 사용하지 않기때문이죠
이를해결하기 위해서 ip를 유동적으로 할당해 주는데 그렇다면 유동적인 ip는 서버컴퓨터에서 어떠한 서비스를 할 수 가 없게됩니다. 이럴때 필요한 것이 고정 ip입니다.

탄력적(Elastic) IP

위 탄력적 IP 주소 할당 버튼을 통해 고정 IP생성

aws에서 탄력적 ip는 프리티어 사용자에게 탄력적ip 하나를 무료로 제공합니다.
단! 조건이 있는데 EC2서버와 탄력적 IP를 연결을 했을때 무료입니다.

탄력적 IP 비용 생성 기준

  1. 만들어 놓고 사용안함
  2. 2개 생성
  3. EC2 서버 종료 (종료시점에서 부터 비용발생)
    그렇기 때문에 학습을 하는대에 비용이 발생하지 않게 하기 위해서는 위 세가지를 유의하며 학습을 진행해야합니다.

2. EC2서버 접속

  1. 배포할 git repository clone 받기
  2. 자바 설치 (JDK,JRE)
  3. gradlew 실행권한주기
  4. gradlew로 프로젝트를 jar파일로 변경하기
  5. java로 jar를 실치

자바 설치

apt에 검색

sudo apt install -y openjdk-11-jdk

그래들 빌드

gradlew build

여기서 핵심은 어떠한 서버 프로그램을 배포하기위해서 그 프로그램이 동작하기 위한 환경을 세팅해 준다는 것 입니다.

이제 빌드된 jar파일을 실행 합니다.

java -jar project.jar

spring boot 프로젝트가 잘 실행 됐다면 위에서 할당받은 탄력적 ip를 통해서 8080포트로 api호출을 해보면 api가 정상적으로 호출되게 될 것입니다.

이제 백그라운드에서 계속 해당 jar파일이 돌아가야하기 때문에 다음 과정을 거치게 됩니다.

nohup

nohup 명령어는 리눅스에서 프로세스를 실행한 터미널의 세션 연결이 끊어지더라도 지속적으로 동작 할 수 있게 해주는 명령어 입니다.

nohup java -jar *.jar &

& : 백그라운드로 실행

그리고 로그를 보기 위해서는 nohup이 자동으로 남기는 log를 통해 볼 수 있습니다.

nobup 에러 추력과 표준출력 분리하기

nohup java -jar *.jar 1>log.out 2>err.out

 

ubuntu os 서버 시간 맞추기

timedatectl

위 명령어로 현제 서버의 타임존을 확인 할 수 있습니다.

sudo timedatectl set-timezone Asia/Seoul

다음 명령어로 타임존을 변경할 수 있습니다.

 

이렇게 배포가 완료 됐습니다. 하지만 이방법에는 굉장히 많은 단점이 있습니다. 그중 큰것들만 뽑자면

1.  재배포시 서버를 내려야한다.(서비스중단)

2. 실수하기 쉽다

3. 번거롭고 배포시에 디버깅이 어렵다 (어디서 실수를했는지 찾기힘듬)

4. 개발자의 손을 많이 탄다... 등등

이러한 많은 문제들이 있습니다.

과거에 기술이 발달하기전 배포는 아마 이런식으로 한땀한땀 했을테죠

 

 

출처:https://easyupclass.e-itwill.com/course/course_view.jsp?id=74&rtype=0&ch=course

'AWS' 카테고리의 다른 글

aws 생성형 ai 부산 세미나  (1) 2024.02.24
5/31 AWS 스타트업 지원 교육 참여  (0) 2023.05.31
spring boot -> aws ec2 ubuntu 배포 스크립트  (0) 2023.03.26
RSA 알고리즘  (0) 2023.01.25
EC2 서버 방화벽 (임바운드 규칙)  (0) 2023.01.25