💬 우리는 가난한 취준생이니까 돈을 최대한 아껴서 무료로 사용하는걸 목표로 한다.
(AWS 잘못 건드렸다가 돈 왕창 깨지는 경우 많으니까 조심 ^^)
일단 우리가 Java, Spring으로 만든 프로젝트가 존재한다고 가정하고 진행해봅시다.
프로젝트를 빌드 툴(Maven, Gradle …)으로 기본적으로 빌드를 하고 xxx.jar 파일을 AWS EC2라는 컴퓨터에서 띄운다고 생각하면 됩니다.
(NHN Academy에서 프로젝트를 진행하면서 NHN Cloud를 썼지만, 캡스톤 디자인을 할 때 AWS를 사용해보긴 했지만 제대로 기억이 나지도 않고, 다시 공부하고 무료로 쓸 수 있으니까 써보자.)
AWS EC2에 대해 조금의 개념은 알아뒀으면 좋을 것 같음!
로그인을 하고, 오른쪽 위에 콘솔에 로그인
을 눌러 콘솔 홈으로 들어갑니다.
📌 오른쪽 위 상단에 지역을 서울로 꼭 바꿔줍시다
위쪽 상단에 검색 창에 EC2 를 검색합니다.
참고로 옆에 별표를 누르면 위쪽 상단바에 바로가기 버튼이 생기니까 눌러서 이동하기 편하게 만들어줍시다.
아래의 두 방법 중 아무거나 진행
1. 왼쪽에 인스턴스 - 인스턴스
를 눌러서 인스턴스 창으로 들어가서 인스턴스 시작
을 누르기
2. 화면에 바로 보이는 인스턴스 시작
누르기
이런 창이 뜨는데 맨 처음 말했듯이 우리는 무료로 써야됨 (가난한 취준생..)
‘프리티어’ 라고 써져있는 것을 고르면 됩니다.
이름 : 너가 생성하고 싶은 인스턴스 이름을 적기
애플리케이션 및 OS 이미지
OS는 Amazon Linux를 써보자
인스턴스 유형 : t2.micro로 쓰자 우리는 무료를 원하니까!!
키페어 : 새로운 키페어 생성
아래와 같이 키페어 이름은 마음에 드는 이름으로 만들어 줍시다.
이러면 pem key 파일(*.pem)이 다운로드 받아집니다.
파일을 C:\Users{UserName}.ssh or ~/.ssh 경로에 옮겨줍니다
나중에 ssh로 접속할거니까, 이건 누구한테도 공유 금지 !!
네트워크 설정
VPC는 기본적으로 알아서 만들어져 있음
서브넷 : 아파트 몇 동 몇 호와 같은 느낌
방화벽 및 보안 그룹 설정
인바운드 보안 그룹 규칙은 지정 IP만 들어올 수 있게 하거나, 그런 설정인데 내 IP만 허용하고싶다면 소스 유형을 바꿔서 지정해줍시다.
스토리지 구성
위와 같이 설정을 하고 인스턴스 시작
을 클릭
인스턴스 상태가 실행 중으로 잘 떠있으면 성공!
여기서, 잘못된 설정이 없는지 다시 한 번 확인해주는게 좋음 → 돈 나올 수 있음..
이전에 생성해뒀던 pem 키가 있는 위치로 이동
cd ~/.ssh
ls
아까 우리가 만들었던 pem키를 써서 EC2에 접속할건데, ssh를 사용한다고 했으니까 해당 접속 명령어를 입력해줍시다.
ssh -i key-f1v3-log.pem **ec2-user@43.203.203.105**
-i 옵션으로 pem key를 지정해주고, ec2-user는 사용자 명 (AWS에서 기본적으로 ec2-user로 설정), 뒤에는 우리가 아까 만들었던 EC2의 퍼블릭 IPv4 주소 (인스턴스 클릭하면 나오는 창 맨위에 있음)
잘 접속이 되었죠?
이제 xxx.jar 파일을 여기로 옮겨서 java -jar xxx.jar 하면 될 것 같은데 어떻게 파일을 옮겨야 될까?
여러 방법이 있을텐데 linux의 scp 명령어를 써서 해본다
xxx.jar 파일이 존재하는 위치로 이동
다음과 같은 scp 명령어를 입력해 나의 jar파일을 옮겨주자
scp -i ~/.ssh/key-f1v3-log.pem ./f1v3-0.0.1-SNAPSHOT.jar ec2-user@{ec2-IP 주소}:/home/ec2-user
잘 옮겨졌죠?
반대로 EC2의 파일을 가져오는 방법도 있음!
scp -i ~/.ssh/key-f1v3-log.pem ec2-user@{ec2-IP 주소}:/home/ec2-user/abc ./
scp -i {pem.key 위치} {user@ip:ec2에서의 파일 위치} {나의 어느 폴더에 저장할지}
java -jar를 통해 jar 파일을 실행하고 싶지만, EC2에 우리가 JDK를 설치해주지 않았죠??
그럼 설치를 해봅시다.
java 17 version을 다운로드 받아봅니다.
(자신의 프로젝트 버전에 맞게 설치해줍시다.)
sudo yum install java-17-amazon-corretto
설치 후 제대로 설치 되었는지 확인!
java -version
Java가 설치가 되었으니 jar 파일을 실행해봅시다.
java -jar f1v3-0.0.1-SNAPSHOT.jar
퍼블릭 IPv4 주소로 API를 호출해봅시다. → 왜 안될까?
방화벽 때문에 되지가 않아요..
우리가 EC2에 설정한 보안 설정에서 SSH(22번 포트)를 제외하고는 접속할 수 없게 설정해뒀음!
8080 포트로 들어올 수 있게 변경하자
인바운드 규칙 편집 → 8080 포트를 열어줍시다
다시 API 호출을 해봅시다.
잘 됩니다~ 구웃~
잘 되긴 하는데 백그라운드에서 돌리고 싶으면 어떻게 해야 될까? → nohup을 쓰자
nohup java -jar xxx.jar &
nohup.out에 로그가 찍히니까 로그 확인하고 싶으면 이걸 보면 되겠죠?
ps 명령어나 netstat을 통해서 프로세스 ID를 파악하고 종료하는 방법도 알아두면 좋을듯?
프로세스를 죽이고 싶다면, kill 명령어를 씁시다.
kill -9 {process-id}
EC2를 껐다가 킬 경우 퍼블릭 IP 주소가 변경되어 접속하는 IP를 계속해서 바꿔줘야함.
이러한 불편함을 탄력적 IP(엘라스틱 IP)로 해결해보자.
지금부터 이 IP는 제껍니다.
이제 여기서 할당된 IP 주소를 우리 인스턴스에 연결해주자.
오른쪽 마우스를 누르고, 탄력적 IP 주소 연결 클릭
우리가 만들었던 인스턴스를 할당 후 프라이빗 IP 선택, 재연결 선택은 자유
인스턴스 정보에서 확인하면 변경되었을 것이다.
IP 주소를 꼭 연결해야함!! 연결 안해놓고 놔두면 요금이 나가니까 주의!
이후에, Docker와 GitHub Actions를 사용하여 CI/CD도 구현해보자.