Amazon EC2 톺아보기

원민관·2025년 9월 1일

deployment

목록 보기
1/7
post-thumbnail

1. 배포(Deployment)란? 🎯

Amazon EC2를 살펴보기 전에, 배포(Deployment)에 관해 간단하게 이야기하고자 합니다.

저는 Pullim이라는 프로그래밍 Q&A 사이트의 프론트엔드(ReactJS)와, 백엔드(NestJS)를 모두 구현했습니다. 기능 구현이 끝났으니 배포를 해야겠죠.

배포(Deployment)는 다른 사용자들이 인터넷을 통해서 제가 만든 Pullim을 이용할 수 있는 상태로 만드는 행위를 총칭합니다. 달리 말하면 제가 만든 서비스를 다른 사람들이 이용하기 위해서는 인터넷상에 배포가 되어있어야 하죠.

제 랩톱에서는 localhost라는 주소로 개발과 테스트를 진행했는데요, localhost라는 주소는 다른 컴퓨터에서는 접근이 불가능한 주소입니다. 배포를 하게 되면 IP나 도메인과 같이 고유한 주소를 부여받게 되고, 다른 컴퓨터에서 해당 주소로 접속할 수 있게 되죠.

오늘은 백엔드 서버 코드를, Amazon EC2를 통해 배포하는 과정에 대해 다루고자 합니다.

2. Amazon EC2란? 🎯

EC2(Elastic Compute Cloud)는 쉽게 얘기하면, AWS에서 컴퓨터를 임대해 주는 서비스입니다.

제가 작업하는 랩톱에서 서버를 배포해 다른 사용자들이 인터넷을 통해 접근할 수 있게 만들 수도 있습니다. 하지만, 24시간 랩톱을 켜놓아야 합니다. 게다가 인터넷을 통해 내 랩톱에 접근한다면 보안 상의 위험도 크겠죠.

이러한 불편함을 최소화하기 위해 EC2 서비스를 통해 컴퓨터를 임대해 사용하는 것입니다. 추가적으로 로깅, 오토 스케일링, 로드 밸런싱 등의 장점을 이미 갖추고 있기에, 백엔드 서버를 배포할 때에는 EC2 서비스를 통해 서버를 배포하는 방식을 주로 택합니다.

프론트엔드 웹 페이지도 EC2를 통해 배포할 수 있지만 주로 Amazon S3라는 서비스를 통해 배포하게 되는데요, 이에 대해서는 차후에 Amazon S3 게시글에서 다루도록 하겠습니다. "EC2는 백엔드 서버를 배포할 때 주로 사용하는 서비스다"라는 점을 이해하시면 됩니다.

2-1. 리전이란? ✍️

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

앞서 이해한 바에 따르면, EC2는 컴퓨터를 빌려서 원격으로 접속해 사용하는 AWS의 서비스죠. 우리가 임대하게 될 컴퓨터들은 전 세계적으로 다양하게 분포해있습니다. 따라서 리전이란, EC2 서비스가 제공하는 '컴퓨터의 위치'로 이해할 수 있습니다.

애플리케이션을 사용할 때에는 네트워크를 통해 통신하게 됩니다. 이때, 사용자의 위치와 애플리케이션을 실행하는 컴퓨터의 위치가 멀면 멀수록 속도가 느려지겠죠. 따라서 애플리케이션의 주 사용자들의 위치와 지리적으로 가까운 리전을 선택하는 것이 유리하겠습니다.

저는 ap-northeast-2를 선택할 생각입니다. ap-northeast-2는 아시아 태평양 중 서울에 해당합니다.

아시아 태평양(서울) 리전에서 EC2를 생성해놓고, 미국 동부(버지니아 북부) 리전에 들어가서 생성한 EC2가 없어졌다고 당황하는 경우가 있습니다. 리전마다 EC2가 별도로 관리되고 있으니 이 점을 유의해야겠습니다.

2-2. EC2 기본 설정 ✍️

2-2-1. 이름 및 태그 ✅

EC2를 식별하기 용이한 이름을 설정하는 곳입니다. 내가 임대할 컴퓨터가 어떤 역할을 하는지 알아볼 수 있게 'pullim-server'와 같은 이름을 지어주면 되겠죠.

2-2-2. OS 선택 ✅

내가 임대할 컴퓨터가 어떤 운영체제 위에서 동작하게 할지 선택하는 구간입니다. 저는 서버 운영체제 점유율(62.7%)이 가장 높은 Linux를 선택했습니다.

2-2-3. 인스턴스 유형 ✅

EC2라는 컴퓨터 임대 서비스를 통해 임대하게 되는 한 대의 컴퓨터를 인스턴스라고 합니다. 따라서 인스턴스 유형은 컴퓨터 사양으로 이해할 수 있습니다.

AWS는 한 개인을 패가망신하게 만드는 기업으로 유명하죠. 잘 모르니 우선 프리 티어를 사용하겠습니다.

2-2-4. 키 페어(로그인) ✅

키 페어(Key Pair)는 EC2에서 임대한 내 컴퓨터에 접근할 때 사용하는 비밀번호입니다. 말 그대로 key의 역할을 하죠.

키 페어 생성을 클릭하면 파일이 하나 다운로드되는데요, 이 파일은 잃어버리면 속된 말로 x 됩니다. 잘 보관해야 하겠습니다.

2-3. EC2 보안 그룹 설정 ✍️

2-3-1. 네트워크 설정 ✅

다음으로 네트워크 설정에서 편집 버튼을 클릭합니다.

네트워크 설정 섹션에서는 VPC와 Security Groups(보안 그룹)를 볼 수 있습니다. VPC는 당장은 중요하지 않습니다만, Security Groups(보안 그룹)은 서버를 배포하는 과정에서 중요한 개념이므로 자세히 살펴보겠습니다.

2-3-2. 보안 그룹(Security Group) ✅

EC2 인스턴스가 집이라면, 보안 그룹은 집을 둘러싼 울타리와 대문이라고 비유할 수 있습니다.

인바운드 트래픽(외부에서 EC2 인스턴스로 보내는 트래픽)과 아웃바운드 트래픽(EC2 인스턴스에서 외부로 나가는 트래픽)에 관한 규칙을 보안 그룹에 지정함으로써, EC2 인스턴스에 들어오고 나가는 트래픽에 대한 검사를 진행하게 됩니다.

2-3-3. 보안 그룹 설정 ✅

2가지에 대한 인바운드 보안 그룹 규칙을 추가했습니다. 22번 포트는 우리가 EC2에 원격으로 접속할 때 사용하는 포트이고, 80번 포트에는 백엔드 서버를 띄울 예정입니다. 추가적으로, 어떤 IP에서든 전부 접근할 수 있게 하기 위해서 소스 유형은 위치 무관으로 설정했습니다.

IP와 Port는, 설정 흐름이 끊기지 않게 2-8에서 보충 설명을 진행할 생각입니다.

2-4. EC2 스토리지 설정 ✍️

2-4-1. 스토리지 구성 및 설정 ✅

우리가 사용하는 랩톱이나 데스크톱 컴퓨터는 전부 하드디스크를 갖고 있습니다. 하드디스크를 컴퓨터에서 파일을 저장하는 공간이죠. EC2 인스턴스도 하나의 컴퓨터이기에, 여러 파일을 저장할 공간이 필요합니다. 이러한 저장 공간을 EBS(Elastic Block Storage)라고 부릅니다. EBS를 조금 더 포괄적인 용어로 스토리지나 볼륨이라고 부를 뿐이죠.

용량은 프리 티어에서 30GiB까지 무료로 제공해 줍니다. 다만, 스토리지의 크기는 추후에 늘릴 수도 있으므로 저는 우선 8GiB로 설정했습니다.

2-5. EC2 접속 ✍️

2-5-1. 생성된 인스턴스 정보 해석 ✅

퍼블릭 IPv4 주소는 EC2 인스턴스가 생성되면서 부여받은 IP 주소입니다. EC2 서비스로부터 임대한 컴퓨터에 접근하려면 해당 IP 주소로 접근하면 됩니다.

인스턴스 상태는 말 그대로 우리가 임대한 컴퓨터가 실행 중이라는 뜻입니다.

2-5-2. EC2에 접속 ✅

연결에 성공하면 다음과 같은 화면을 브라우저에서 확인할 수 있습니다.

2-6. 탄력적 IP 연결 ✍️

2-6-1. 탄력적 IP가 필요한 이유 ✅

EC2 인스턴스를 생성하면 IP를 할당받습니다. 하지만 임시적인 IP이기에, 인스턴스를 잠깐 중지했다가 다시 실행하면 IP 주소가 변경됩니다. 인스턴스를 중지했다가 다시 실행할 때마다 IP가 변경되면 굉장히 불편하겠죠.

중지했다가 다시 실행해도 바뀌지 않는 고정 IP를 할당받아야 하는데요, 해당 IP를 탄력적 IP라고 합니다.

2-6-2. 탄력적 IP 설정 방법 ✅

인스턴스를 선택한 뒤 연결을 클릭하면 됩니다.

2-7. IP와 Port의 개념 ✍️

2-7-1. IP의 개념 ✅

IP는 네트워크 상에서의 특정 컴퓨터를 가리키는 주소입니다. 13.250.15.132와 같은 형태를 보입니다.

2-7-2. Port의 개념 ✅

Port는 한 컴퓨터 내에서 실행되고 있는 특정 프로그램의 주소입니다.

실제로 제 랩톱에서는 크롬, 카카오톡, 노션 등 여러 프로그램이 동시에 실행되고 있는데요, 외부에서 IP 주소를 알고 있다고 한들 실행되고 있는 여러 프로그램 중 어떤 프로그램과 통신을 해야 할지 알 수가 없죠. 그래서 특정 서버와 통신을 할 때에는 IP 주소와 더불어 서버가 실행되고 있는 Port 번호까지 알고 있어야 합니다.

2-7-3. 브라우저에 포트 번호를 입력하지 않는 이유 ✅

주소창에 www.naver.com을 입력한 뒤 엔터를 누르면, 브라우저는 기본적으로 80번 포트로 통신을 보내게 설정되어 있습니다. 포트 번호를 굳이 입력하지 않아도 통신이 잘 되었던 것이죠. 80번 포트가 아니라 3000번 포트로 통신하고 싶다면, 주소창에 www.naver.com:3000과 같은 방식으로 입력하면 되겠습니다만, 이렇게 입력할 경우는 거의 없습니다.

2-7-4. well-known port ✅

Port에는 well-known port라는 개념이 있습니다.

포트 번호는 0~65,535번까지 사용할 수 있습니다. 그중 0~1023번까지의 포트 번호는 주요 통신을 위한 규약에 따라 이미 정해져 있습니다. 규약을 통해 역할이 정해져있는 포트 번호를 well-known port라고 합니다.

가령 22번 포트는 원격 접속을 위한 포트 번호로 규정되어 있고, 80번은 HTTP 통신, 443번은 HTTPS 통신을 위한 포트 번호로 규정되어 있습니다.

그런데 규약은 약속이기 때문에 꼭 지키지 않아도 됩니다. 3000번 포트나 8080번 포트를 사용해도 무방합니다만, 그래도 약속은 지켜야 의미가 있겠죠.

3. 정리 🎯

EC2를 통해 컴퓨터를 임대하는 과정 자체는 어렵지 않습니다. 실제로 따라 하면 5분 정도면 인스턴스를 생성하고 기본 설정을 마칠 수 있습니다.

다만 클라우드 서비스는 용어가 낯설고, 공식 문서가 친절하지 않으며 AWS 자체 업데이트도 빈번하기 때문에 처음에는 삽질이 불가피합니다. AI나 블로그를 참고해 설정할 수는 있지만, 설정 과정에 대한 이해가 없으면 이후 작업에 자신감을 갖기 어렵습니다.

이번 글에서는 컴퓨터를 빌리는 단계까지만 다뤘습니다. 즉, 아직 서버를 실제로 배포한 것은 아닙니다. 다음 글에서는 NestJS로 개발한 백엔드 서버를 EC2 인스턴스에 실제로 배포하는 과정을 단계별로 공유할 예정입니다. 조금이나마 도움이 됐길 바랍니다.

profile
Write a little every day, without hope, without despair ✍️

0개의 댓글