5편. EC2 웹 서버 배포 — 퍼블릭 서브넷에 서버 올리기

시리즈: AWS로 웹 서버 + DB 직접 구축하기 (VPC 완전 정복) | 5편 / 15편

드디어 서버를 만들 차례예요! 이번 편에서는 퍼블릭 서브넷에 EC2 인스턴스 를 생성하고 SSH로 접속까지 해볼 거예요.


EC2란?

EC2(Elastic Compute Cloud)는 AWS의 가상 서버 예요. 내 컴퓨터처럼 생각하면 되는데, AWS 데이터센터 안에 있는 서버를 빌려쓰는 거예요.

크기(인스턴스 유형)를 선택할 수 있어서, 작게 시작했다가 나중에 크게 키울 수 있어요.

이번 실습에서는 프리 티어로 제공되는 t2.micro 를 사용할 거예요.


키 페어 — SSH 접속의 열쇠

EC2에 SSH로 접속하려면 키 페어(Key Pair) 가 필요해요.

공개키/개인키 방식이에요.

  • AWS가 공개키 를 EC2에 보관해요
  • 내 PC에 개인키(.pem 파일) 를 저장해요
  • SSH 접속 시 .pem 파일로 내가 정당한 사용자임을 증명해요

비밀번호보다 훨씬 안전하고, AWS EC2는 기본적으로 이 방식을 사용해요.

키 페어 만들기

EC2 콘솔로 이동하세요. (상단 검색창에 EC2 입력)

왼쪽 사이드바에서 Network & Security 아래의 Key Pairs 클릭.

오른쪽 상단 Create key pair 클릭!

Name                    : my-key
Key pair type           : RSA
Private key file format : .pem

파일 형식 선택:

  • .pem — Mac, Linux, Windows(PowerShell) 에서 사용
  • .ppk — Windows PuTTY에서 사용

대부분의 경우 .pem 으로 하면 돼요.

Create key pair 클릭하면 my-key.pem 파일이 자동으로 다운로드돼요.

⚠️ 이 파일은 절대 잃어버리면 안 돼요! 한 번 다운로드되면 AWS에서 다시 받을 수 없어요. 잃어버리면 해당 EC2에 다시는 접속하지 못해요.

안전한 폴더에 보관하고, Dropbox나 이메일로 보내지 마세요 (개인키가 노출돼요).


EC2 인스턴스 만들기

EC2 콘솔의 왼쪽 사이드바 상단에서 Instances 클릭.

오른쪽 상단 주황색 Launch instances 클릭!


이름 설정

Name : web-server-1

AMI 선택 (운영체제)

AMI(Amazon Machine Image)는 EC2의 운영체제 이미지 예요.

화면에 여러 AMI가 나열돼 있어요. 맨 위에 있는 Amazon Linux 2023 AMI 를 선택하세요.

Amazon Linux 2023 AMI
Free tier eligible ← 이 표시가 있어야 해요
Architecture: 64-bit (x86)

💡 왜 Amazon Linux인가요? AWS에 최적화돼 있고, dnf 패키지 매니저를 사용해요. Ubuntu도 많이 쓰는데, 이번 시리즈는 Amazon Linux 기준으로 진행할게요.


인스턴스 유형 선택

t2.micro 를 선택하세요.

t2.micro
  vCPU: 1
  Memory: 1 GiB
  Free tier eligible ✅

화면에서 검색창에 t2.micro 를 입력하면 쉽게 찾을 수 있어요.


키 페어 선택

Key pair name : my-key

아까 만든 my-key 를 드롭다운에서 선택하세요.

만약 아직 키 페어가 없다면 Create new key pair 링크를 클릭해서 만들 수 있어요.


네트워크 설정

이 부분이 가장 중요해요. 꼼꼼하게 확인하세요.

Edit 버튼을 클릭해서 상세 설정으로 들어가세요.

VPC              : my-vpc
Subnet           : public-subnet-2a
Auto-assign public IP : Enable

💡 Auto-assign public IP를 왜 Enable 하나요? 이걸 켜야 EC2가 인터넷에서 접근 가능한 퍼블릭 IP를 받아요. 2편에서 서브넷에 “자동 할당” 설정을 켰다면 여기서도 자동으로 Enable 돼 있을 거예요. 혹시 Disable로 돼있다면 Enable로 바꾸세요.

방화벽(보안 그룹) 설정:

Firewall (security groups)
  ○ Create security group
  ● Select existing security group   ← 이걸 선택

Select existing security group 을 선택하면 보안 그룹 목록이 나와요.

✅ web-sg

4편에서 만든 web-sg 를 선택하세요.

💡 web-sg에는 SSH(22)가 내 IP에만 열려있어요. 지금은 EC2에 직접 접속하는 방식으로 진행해요. 10편에서 Bastion Host를 만들면 프라이빗 서브넷 서버는 Bastion을 통해서만 접속하게 바뀌어요. 퍼블릭 서브넷에 있는 지금 이 서버는 실습용으로 직접 접속해도 괜찮아요.


스토리지 설정

기본값을 그대로 두세요.

8 GiB  gp3   Root volume

실습용으로는 충분해요.


최종 확인 후 생성

오른쪽에 요약(Summary) 패널이 있어요.

Number of instances : 1
Software Image (AMI): Amazon Linux 2023 AMI
Virtual server type : t2.micro
Key pair            : my-key
Security groups     : web-sg
Storage             : 1 volume(s)

다 맞으면 주황색 Launch instance 클릭!


생성 결과 확인

성공하면 이런 화면이 나와요.

✅ Successfully initiated launch of instance
   i-xxxxxxxxxxxxxxxxx

View all instances 를 클릭해서 인스턴스 목록으로 이동하세요.

처음엔 이런 상태예요.

Instance state : Pending   ← 시작 중
Status check   : Initializing

1~2분 기다리면 이렇게 바뀌어요.

Instance state : Running   ✅
Status check   : 2/2 checks passed   ✅
Public IPv4    : 1.2.3.4   ← 이 IP를 메모해두세요!

SSH로 접속해볼까요?

인스턴스가 Running 상태가 되면 접속해볼게요.

Mac / Linux에서 접속

터미널을 열고 아래 명령어를 실행하세요.

# 키 파일 권한 설정 (처음 한 번만)
chmod 400 ~/Downloads/my-key.pem

# SSH 접속
ssh -i ~/Downloads/my-key.pem ec2-user@[퍼블릭 IP]

[퍼블릭 IP] 부분에 아까 확인한 IP를 입력하세요.

Windows PowerShell에서 접속

ssh -i C:\Users\내이름\Downloads\my-key.pem ec2-user@[퍼블릭 IP]

처음 접속 시 나오는 질문

처음 접속하면 이런 질문이 나와요.

The authenticity of host '1.2.3.4 (1.2.3.4)' can't be established.
ED25519 key fingerprint is SHA256:xxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

yes 를 입력하고 엔터!


접속 성공 화면

이런 화면이 나오면 성공이에요! 🎉

   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'

[ec2-user@ip-10-0-1-xxx ~]$

EC2 내부에 접속됐어요. 프롬프트($) 뒤에 명령어를 입력할 수 있어요.


접속이 안 될 때 체크리스트

① Connection timed out 오류

ssh: connect to host 1.2.3.4 port 22: Connection timed out
  • web-sg 인바운드에 SSH(22) 규칙이 있는지 확인
  • Source가 My IP로 설정돼 있는지 확인 (카페나 회사 Wi-Fi에서 접속 중이라면 IP가 달라서 안 될 수 있어요!)
  • EC2에 퍼블릭 IP가 할당됐는지 확인

② Permission denied 오류

ec2-user@1.2.3.4: Permission denied (publickey)
  • 키 파일 경로가 맞는지 확인
  • 키 파일 권한이 400인지 확인 (chmod 400 my-key.pem)
  • ec2-user 가 맞는 사용자명인지 확인 (Amazon Linux는 ec2-user)

③ WARNING: UNPROTECTED PRIVATE KEY FILE

WARNING: UNPROTECTED PRIVATE KEY FILE!
Permissions 0644 for 'my-key.pem' are too open.

키 파일 권한이 너무 열려있다는 뜻이에요.

chmod 400 my-key.pem

현재 아키텍처 상태

인터넷
  ↓ SSH(22, 내 IP만)  HTTP(80), HTTPS(443) 허용
IGW → public-subnet-2a
  └ EC2 (web-server-1) ✅ Running
       └ web-sg 적용
       └ 퍼블릭 IP: 1.2.3.4

private-subnet-2a, 2c (아직 비어있음)

서버는 떠 있지만 아직 웹 페이지가 없어요. 브라우저에서 http://[퍼블릭 IP] 로 접속해보면 연결이 안 되는 게 정상이에요. 다음 편에서 Nginx를 설치하면 그때부터 브라우저로 접속할 수 있어요.


이번 편 정리

개념설명
EC2AWS 가상 서버
AMIEC2의 운영체제 이미지
t2.micro1 vCPU, 1GB RAM, 프리 티어 제공
키 페어SSH 접속용 공개키/개인키 쌍
ec2-userAmazon Linux의 기본 SSH 사용자명

이번 편에서 만든 것:

  • ✅ 키 페어 (my-key.pem)
  • ✅ EC2 인스턴스 (web-server-1, public-subnet-2a)
  • ✅ SSH 접속 성공

다음 편 👉 6편. Nginx로 웹 서버 구성 — 브라우저로 내 서버에 접속하기