aws - EC2
Aug 6, 2024
»
BE
인프런 JSCODE 박재성님 비전공자도 이해할 수 있는 AWS 입문/실전 강의를 듣고 정리한 내용입니다
https://www.inflearn.com/course/%EB%B9%84%EC%A0%84%EA%B3%B5%EC%9E%90-%EC%9D%B4%ED%95%B4%ED%95%A0%EC%88%98%EC%9E%88%EB%8A%94-aws-%EC%9E%85%EB%AC%B8%EC%8B%A4%EC%A0%84/dashboard
EC2
EC2(Elastic Compute Cloud)
컴퓨터를 빌려서 원격으로 접속해 사용하는 서비스
EC2가 필요한 이유
내가 가진 컴퓨터를 이용해 배포하려면 컴퓨터를 24시간 동안 커놔야 하고 보안 상 문제도 있을 수 있음 → aws 컴퓨터를 빌려서 사용하는 것
리전(Region) 선택하기
- 리전이란 인프라를 지리적으로 나누어 배포한 각각의 데이터 센터
- 사용자의 컴퓨터와 멀수록 속도 느려짐 → 사용자 많은 리전 선택
- 늘 EC2 들어갈 때마다 리전 확인하기
EC2 셋팅
- 이름 및 태그
- 이름은 컴퓨터가 어떤 역할 하는지 직관적으로 설정 ex. practice-server
- Application and OS Images (Amazon Machine Image)
- OS 선택하는 단계
- 윈도우나 맥os는 용량도 크고 성능도 많이 잡아먹으므로 우분투 사용
- 인스턴스 유형
- 인스턴스란 AWS EC2에서 빌리는 컴퓨터 한 대를 의미
- 인스턴스 유형이란 컴퓨터 사양을 의미, 사양이 좋을수록 무거운 서버나 프로그램 돌릴 수 있고 많은 요청 처리 가능
- 프리티어에선 t2.micro 사용
- 키 페어 (로그인)
- 키 페어(key pair)란 EC2 컴퓨터에 접근할 때 사용하는 비밀번호
- 키 페어 이름도 직관적으로 설정
- 키 페어 생성 시 파일이 하나 다운로드되는데 이거 잃어버리지 말기
- 네트워크 설정
- VPC는 나중에…
- Security Group(보안 그룹)
- 보안 그룹이란 AWS 클라우드에서의 네트워크 보안
- EC2 인스턴스를 지키는 울타리이자 보안 요원
- 보안 그룹에 규칙을 지정
- 인바운드 트래픽(외부에서 EC2 인스턴스로 보내는 트래픽)과 아웃바운드 트래픽(EC2 인스턴스에서 외부로 나가는 트래픽)에서 어떤 트래픽만 허용할 지 설정 가능
- 보안 그룹 설정 시 허용할 IP 범위와 PORT 설정
- 소스 유형 - 위치 무관 시 어떤 IP 에서든 접근 가능
- 스토리지(Storage) 구성
- 볼륨(Volume)이라고도 함
- 저장 공간이나 마찬가지
- EBS(Elastice Block Storage)는 EC2 안 저장 공간, 하드디스크
- 프리티어에선 30GiB까지 설정 가능
- 스토리지는 gp3가 가성비 좋음
EC2 접속
- 세부 정보
- 퍼블릭 IPv4 주소는 EC2 인스턴스가 생성되면서 부여받은 IP 주소, EC2 인스턴스에 접근하려면 이 IP 주소로 접근하면 됨
- 인스턴스 상태는 중지, 시작, 재부팅, 종료 등이 있음
- EC2 인스턴스가 실행 중이라는 뜻은 컴퓨터가 켜져있다는 뜻
- 모니터링
- 실제 서버 운영 시 자주 보게 될 것
- 인스턴스 연결
- 사용자 이름을 설정 가능 → 보통 그냥 os 이름
- 연결 버튼 클릭 시 연결
탄력적 IP 연결
-
EC2 인스턴스 생성 시 IP를 할당 받음 but 이렇게 할당 받은 IP는 임시 IP
-
인스턴스를 중지시켰다 재실행하면 IP 바뀌어있음 → 바뀌지 않는 고정 IP = 탄력적 IP 할당받아야 함
- 네트워크 및 보안에서 탄력적 IP 들어가기
- 탄력적 IP 주소 할당
- 탄력적 IP 주소 연결 → 생성한 인스턴스랑 IP 선택 후 연결
서버 배포
- 인스턴스 선택 후 연결
- 원격의 EC2 서버에 접속
- 깃허브 주소 연결
- node.js 설치 되어있어야 함
$ node -v
- 필수 패키지 설치
$ npm i
https://cherishvert.tistory.com/107
- .env 파일 만들기 → :wq 입력 후 나가기
$ vim .env
- background process 사용하기 : pm2
- node는 foreground process이기 때문에 터미널이 종료되면 원격 서버도 함께 종료됨
- 만약 실수로 원격으로 접속해 놓은 shell을 끄면 로컬 경로(C:)로 돌아가고 원격에 접속해 있던 shell이 종료되기 때문에 원격 서버도 함께 종료
- background process를 사용하면 shell의 종료 여부와 관계없이 원격 서버 계속 실행 가능 → pm2 라이브러리를 사용
$ sudo npm i -g pm2 $ sudo pm2 start app.js
EC2 종료
- EC2 인스턴스 종료
- 중지되면 탄력적 IP 릴리즈
(보충) IP와 PORT
- IP란 네트워크 상에서의 특정 컴퓨터를 가리키는 주소
- PORT란 한 컴퓨터 내에서 실행되고 있는 특정 프로그램 주소
- 기본적으로 80번 포트로 연결
- well-known-port란 0~1023번까지 주요 통신을 위한 규약에 따라 정해진 포트번호(꼭 지킬 필요는 없음, 권장)
- 22번 (SSH, Secure Shell Protocol) : 원격 접속을 위한 포트 번호 → EC2 인스턴스에 연결할 때 22번 포트를 사용한다.
- 80번 (HTTP) : HTTP로 통신을 할 때 사용
- 443번 (HTTPS) : HTTPS로 통신을 할 때 사용
- 특정 서버와 통신 시 IP와 PORT번호를 다 알고 있어야 함
Spring Boot 서버를 EC2에 배포하기
-
Spring Boot는 3.x.x 버전 사용, JDK는 17버전 사용
$ sudo apt update && / sudo apt install openjdk-17-jdk -y$ java -version으로 확인
-
Spring Boot 프로젝트 clone하기
GitHub가 2021년 8월 13일부터 비밀번호 인증을 지원하지 않음 -> 대신 Personal Access Token (PAT) 또는 SSH Key를 사용해야 함
- GitHub에서 Personal Access Token (PAT) 발급
- Settings > Developer settings > Personal access tokens > Generate new token (classic)
- Expiration (만료 기간): No expiration (무제한) 또는 1년
- Scopes (권한 설정): repo (모든 리포지토리 접근), workflow (GitHub Actions 사용 시 필요), read:packages, write:packages (필요한 경우)
$ git clone https://your-github-username:your-personal-access-token@github.com/username/repository-name.git $ cd repository-name -
application.properties수정백엔드 서버를 80번 포트로 열기로 보안그룹을 정해놔서
nano src/main/resources/application.propertiesspring.datasource.url=jdbc:mysql://your-rds-endpoint:3306/DB-name?serverTimezone=Asia/Seoul&characterEncoding=UTF-8 spring.datasource.username=your-db-username spring.datasource.password=your-db-password spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver server.port=80 -
서버 실행
$ ./gradlew clean build # 기존 빌드된 파일을 삭제하고 새롭게 JAR로 빌드 $ ls -lh build/libs/ # jar 파일이 있는지 확인 $ cd build/libs $ sudo java -jar ~-0.0.1-SNAPSHOT.jarpublic ip로 접속해서 확인