배포v1

LeeKyoungChang·2022년 4월 28일
0
post-thumbnail

메타코딩 유튜브를 참고하여 정리한 내용입니다.

 

📚 1. 배포 v1 흐름 이해하기

✏️ 배포
(1) 스프링 부트

  • 수업에서는 프로젝트를 제공한다.

(2) 업로드된 Github 프로젝트를 보고 운영 컴퓨터로 옮겨본다.
(3) 환경세팅(JDK 설치)
(4) 실행

 

📚 2. 프로젝트 소개

스크린샷 2022-04-26 오전 11 47 31

 

✔️ 강사님께서 github으로 주신 프로젝트

강사님 github
스크린샷 2022-04-26 오전 11 48 36

스크린샷 2022-04-26 오전 11 46 52

 

📚 3. EC2 서버 생성 및 고정 IP 설정

EC2 인스턴스에서 1개는 무료로 사용할 수 있지만, 인스턴스 갯수 추가시 비용이 발생한다.
ec2 서버 - t2.micro 서버

  • 프리티어 사용자들 (가입한지 1년이 안된)
  • 750시간 무료 (한달)
  • 1일 24시간
  • 30일 720시간
  • 32일 744시간

ec2 서버 - t2.micro 서버 2대일 경우 - 1488시간 발생한다. (프리티어 일지라도 가격이 나온다.)

✔️ EC2 새로운 인스턴스 생성
스크린샷 2022-04-26 오후 12 02 59

 

스크린샷 2022-04-26 오후 12 11 08

IP 4개 제공하지 않는다.
이유 : 모든 집에서 지속적으로 동시에 인터넷을 사용하지 않기 때문이다. (공유)

고정 ip : Elastic IP, 가격이 비싸다. ip가 변경되지 않는다.
유동 ip : ip가 계속 변경되는 것 (일반 가정 집에서 사용한다.)

 

📖 A. Elastic ip

✔️ 탄력적 ip(고정 ip) 생성

스크린샷 2022-04-26 오후 12 13 00 스크린샷 2022-04-26 오후 12 13 10
  • 할당된 IPv4 주소 : 고정 ip이다.

 

⚠️ 프리티어 주의할 점

  • 탄력적 IP 하나를 무료 제공한다.
    • 대신, EC2에 탄력적 IP를 연결했을 때 무료로 제공한다.
    • 탄력적 IP를 생성만 하고 사용하지 않을시, 비용이 발생한다.
  • 탄력적 IP를 생성했을 시
    • 사용하지 않을 때 비용이 발생한다.
    • 탄력적 IP 2개 생성시, 비용 발생한다.
    • 연결된 EC2가 종료되었을 경우, 비용이 발생한다.

 

✔️ Elastic IP와 EC2 인스턴스 연결
스크린샷 2022-04-26 오후 12 19 12

스크린샷 2022-04-26 오후 12 25 56 스크린샷 2022-04-26 오후 12 24 12

퍼블릭 IP 주소 : 3.34.118.212

 

📚 4. 배포 완료

git --version : git 버전 체크

✔️ git에 있는 프로젝트 다운로드
스크린샷 2022-04-27 오전 11 15 00

 

✔️ 자바 설치(JDK, JRE)

sudo apt update : 업데이트하기
sudo apt-cache search jdk | grep openjdk-11 : jdk에서 openjdk-11 확인하기

스크린샷 2022-04-27 오전 11 31 36

sudo apt install openjdk-11-jdk : openjdk-11-jdk 설치

스크린샷 2022-04-27 오전 11 35 07 스크린샷 2022-04-27 오전 11 42 32

 

✔️ gradlew : 실행 권한 주기

스크린샷 2022-04-27 오전 11 19 52
  • /aws-v1파일 위치로 이동할 때 cd ~/aws-v1으로 입력시 어느 위치에서든지 aws-v1 파일 위치로 이동한다. (절대 경로)
  • chmod u+x gradlew

 

✔️ gradlew로 프로젝트를 jar파일로 변경하기

./ : 현재 폴더

./gradlew build : 현재 폴더에 있는 gradlew build로 프로젝트를 jar파일로 변경한다.

스크린샷 2022-04-27 오전 11 44 32

 

✔️ java로 jar를 실행

jar 파일로 변경되고 나서, build라는 디렉터리가 생성되었다.

java -jar v1-0.0.1-SNAPSHOT.jar or java -jar *.jar을 입력하여 프로젝트 서버를 실행한다.

스크린샷 2022-04-27 오전 11 54 54

 

📣 jar파일 실행하기

  • jar 파일이 하나만 존재할 경우 : java -jar *.jar를 입력한다.
  • jar 파일이 여러개 존재할 경우 : java -jar 파일이름.jar를 입력한다.

 

서버 배포 완료!
스크린샷 2022-04-27 오전 11 57 30

스크린샷 2022-04-27 오후 12 01 24

 

📚 5. 배포v1 - nohup으로 백그라운드 실행

📚 4. 배포 완료까지는 터미널 종료하였을 때, 웹(서버) 접속이 불가능하였다. (종료됨)

  • nohup으로 백그라운드 실행 : 터미널 종료되어도, 웹(서버)에 접속할 수 있다.

✔️ spring build.gradle에서

스크린샷 2022-04-27 오후 12 07 52
  • plain archive는 애플리케이션 실행에 필요한 모든 의존성을 포함하지 않고 작성된 소스코드의 클래스 파일과 리소스 파일만 포함한다.
  • 이렇게 생성된 *plain.jar 파일은 모든 의존성이 존재하는게 아니기 때문에 java -jar 명령어로 실행시 에러가 발생한다.
  • 코드는 jar 빌드시에 plain.jar 파일이 생성되지 않게 해주는 코드이다.
    • 소스 추가하지 않을 시, plain.jarSNAPSHOT.jar 파일 2개가 생겨서 배포하기 위해 java -jar *.jar 로 실행시 어떤 것을 실행시켜야 할지 인식하지 못하기에, plain.jar파일을 생성하지 못하게 jar{enable=false}를 입력하여 막았다.

 

✔️ nohup 이란?

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

sudo apt install nohup : nohup 설치

nohup java -jar *.jar : nohup으로 백그라운드 실행

스크린샷 2022-04-27 오후 12 29 47 스크린샷 2022-04-27 오후 12 19 46

 

✔️ 그런데? 지금은 nohup으로 실행 후 종료하면, 웹도 종료된다.
이유 : 현재는 포그라운드로 실행했기 때문이다.
그러므로, -nohup으로 실행했다고 하더라도 터미널 종료시에 함께 종료된다.

백그라운드에서 -nohup을 실행시켜야 한다.

 

✔️ nohup을 백그라운드에서 실행시키자!

nohup java -jar *.jar & : nohub을 백그라운드에서 실행

스크린샷 2022-04-27 오후 12 28 52

 

sudo apt install net-tools : netstat 설치

netstat -nlpt : 현재 실행되고 있는 port 번호 확인하기

스크린샷 2022-04-27 오후 12 34 20

 

✏️ 여기서는 로그를 볼 수가 없다.
로그 출력내용을 볼 수가 없다.
1 : info, -1 : error

 

✔️ 로그 남긴 내용으로 이동하기

nohup은 자동으로 로그를 남긴다.

nohup.out 파일에 실행하며 발생한 로그들을 저장한다.

스크린샷 2022-04-27 오후 12 39 38

 

tail -f nohup.out : 실시간으로 nohup.out 파일에 입력된 내용을 확인하기

스크린샷 2022-04-27 오후 12 40 25

 

✏️ 종료할 때는?
ps -ef 명령어를 실행할 시, 현재 실행중인 프로세스들이 화면에 출력된다.

  • 여기서, jar 실행파일 processID를 찾는다.

kill -9 processID를 입력하면 종료된다.

 

profile
"야, (오류 만났어?) 너두 (해결) 할 수 있어"

0개의 댓글