zoaseo
To Infinity And Beyond
zoaseo
전체 방문자
오늘
어제
  • 분류 전체보기 (760)
    • 개발이 좋아서 (378)
      • Java가 좋아서 (42)
      • Spring이 좋아서 (50)
      • JPA가 좋아서 (0)
      • QueryDSL이 좋아서 (26)
      • Docker가 좋아서 (7)
      • Redis가 좋아서 (7)
      • AWS가 좋아서 (5)
      • CI/CD가 좋아서 (6)
      • Troubleshooting이 좋아서 (4)
      • Kotlin이 좋아서 (7)
      • SQL이 좋아서 (6)
      • HTTP가 좋아서 (21)
      • JavaScript가 좋아서 (30)
      • TypeScript가 좋아서 (6)
      • Vue가 좋아서 (21)
      • Flutter가 좋아서 (61)
      • React가 좋아서 (20)
      • Redux(React)가 좋아서 (2)
      • Angular가 좋아서 (22)
      • HTML이 좋아서 (9)
      • CSS가 좋아서 (15)
      • PHP가 좋아서 (9)
      • Illustrator가 좋아서 (2)
    • 노력이 좋아서 (169)
    • 결과물이 좋아서 (14)
    • 코딩연습이 좋아서 (78)
      • 이론이 좋아서 (62)
      • SQL이 좋아서 (0)
    • 유용한 사이트가 좋아서 (28)
    • Github (2)

인기 글

티스토리

hELLO · Designed By 정상우.
zoaseo

To Infinity And Beyond

백엔드 API 서버 배포하기 (EC2)
개발이 좋아서/AWS가 좋아서

백엔드 API 서버 배포하기 (EC2)

2025. 1. 21. 21:27

배포 (Deployment)

배포(Deployment) - 다른 사용자들이 인터넷을 통해서 사용할 수 있게 만드는 걸 의미한다.

 

EC2 (Elastic ComputeCloud) - 컴퓨터를 빌려서 원격으로 접속해 사용하는 서비스이다. 

- AWS EC2는 백엔드 서버를 배포할 때 주로 사용

- 프론트엔드 웹 페이지는 AWS EC2보다 vercel, netify 또는 AWS S3를 사용

 

리전(Region) - 인프라를 지리적으로 나누어 배포한 각각의 데이터 센터를 의미한다.

- 각 리전은 고유의 이름을 가지고 있다.

- 애플리케이션의 주된 사용자들의 위치와 지리적으로 가까운 리전(Region)을 선택하는 것이 유리하다.

- 리전(Region)마다 EC2가 따로따로 관리가 되고 있다.

 

인스턴스 - EC2에서 빌린 컴퓨터 1대를 의미한다.

유형 - 컴퓨터 사양을 의미한다.

키 페어(로그인) - EC2에 접근할 때 사용하는 비밀번호 (키 페어 파일 보관 중요!!)

우분투(Ubuntu)가 필요한 기능들만 들어있고 가장 가볍기 때문에 선택

방화벽 (보안 그룹) - AWS 클라우드에서의 네트워크 보안을 의미한다.

- EC2에 접근할 때 경계를 해준다.

- 인바운드 트래픽(외부에서 EC2 인스턴스로 보내는 트래픽)

- 아웃바운드 트래픽(EC2 인스턴스에서 외부로 나가는 트래픽)

- 보안 그룹을 설정할 때는 허용할 IP 범위와 포트(port)를 설정할 수 있다.

 

스토리지

- EC2도 하나의 컴퓨터이다보니 여러 파일들을 저장할 공간이 필요하다. 이 저장 공간을 EBS(Elastic Block Storage)라고 부른다.

- EBS와 같은 저장 공간을 조금 더 포괄적인 용어로 스토리지(Storage), 볼륨(Volume)이라고 부른다.

 

탄력적 IP 연결하기

- EC2 인스턴스를 생성하면 IP를 할당받는다. 하지만 이렇게 할당받은 IP는 임시적인 IP이다. EC2 인스턴스를 중지시켰다가 다시 실행시킬 때마다 IP가 바뀐다. 그래서 다시 실행시켜도 바뀌지 않는 고정 IP를 할당받아야한다.

※ 실무에서도 EC2 인스턴스를 생성하면 탄력적 IP를 대부분 필수적으로 설정한다.

- 인스턴스를 중지하고 다시 실행해도 IP주소는 고정이다!!

 

Express 서버를 EC2에 배포하기 - 인스턴스 연결

1. Ubuntu 환경에서 Node.js 설치하는 법

- Ubuntu 환경에서 Express 서버를 실행시키려면 Node.js가 설치되어 있어야 한다.

$ sudo su
$ apt-get update && /
apt-get install -y ca-certificates curl gnupg && /
mkdir -p /etc/apt/keyrings && /
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && /
NODE_MAJOR=20 && /
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list && /
apt-get update && /
apt-get install nodejs -y

 

2. 잘 설치 되었는지 확인

$ node -v

 

3. Github으로부터 Express 프로젝트 clone하기

$ git clone https://github.com/JSCODE-EDU/ec2-express-sample
$ cd ec2-express-sample
$ npm i

 

4. .env 파일 직접 만들기

- .env와 같은 민감한 파일은 Git으로 버전 관리를 하지 않는게 일반적이다. 별도로 EC2 인스턴스에 올리는 작업보다는 .env 파일을 직접 만드는 것이 훨씬 간단하다.

 

5. pm2 설치해서 서버 실행시키기

- Node 기반의 서버는 pm2를 활용해서 많이 실행시킨다. 서비스를 운영하는 데 있어서 유용한 기능들을 pm2가 많이 가지고 있기 때문이다.

$ sudo npm i -g pm2
$ sudo pm2 start app.js

 

6. 잘 작동하는 지 확인하기

- IP로 접속하여 확인한다.

 

Spring Boot 서버를 EC2에 배포하기

1. Ubuntu 환경에 JDK 설치하는 법

$ sudo apt update && /
sudo apt install openjdk-17-jdk -y

 

2. 잘 설치됐는 지 확인하기

$ java -version

 

3. Github으로부터 Spring Boot 프로젝트 clone하기

$ git clone https://github.com/JSCODE-EDU/ec2-spring-boot-sample.git
$ cd ec2-spring-boot-sample

 

4. application.yml 파일 직접 만들기

- application.yml와 같은 민감한 정보가 포함된 파일은 Git으로 버전 관리를 하지 않는게 일반적이다. 따라서 application.yml 파일은 별도로 EC2 인스턴스에 올려주어야 한다. 하지만 application.yml 파일을 EC2 인스턴스에 올리는 작업보다는, application.yml 파일을 직접 만드는 게 훨씬 간단하다.

- 경로를 따라 들어가서 vi application.yml 하고 정보를 넣으면 된다.

 

5. 서버 실행시키기

$ ./gradlew clean build # 기존 빌드된 파일을 삭제하고 새롭게 JAR로 빌드
$ cd ~/ec2-spring-boot-sample/build/libs
$ sudo java -jar ec2-spring-boot-sample-0.0.1-SNAPSHOT.jar

 

6. 잘 작동하는 지 확인하기

- IP로 접속하여 확인한다.

 

※ 이것으로 끝난 것이 아니다!! 도메인을 연결해야 한다!

'개발이 좋아서 > AWS가 좋아서' 카테고리의 다른 글

파일 및 이미지 업로드 (S3)  (0) 2025.01.22
데이터베이스 연결하기 (RDS)  (0) 2025.01.22
HTTPS 연결하기 (ELB)  (0) 2025.01.22
도메인 연결하기 (Route53)  (0) 2025.01.22

    티스토리툴바