실습 1-6 — Public EC2 생성: 퍼블릭 서브넷에 첫 웹 서버 띄우기
지금까지 VPC·서브넷·라우팅·IGW로 인프라 골격을 완성했습니다. 이제 그 위에 실제 서버(EC2) 를 올려 웹 페이지를 띄웁니다. "보안 그룹 → 인스턴스 → 웹 서비스" 순서로 진행합니다.
📌 이번 편 한눈에
| 단계 | 핵심 |
|---|---|
| 보안 그룹 | 인스턴스 방화벽. HTTP(80) + SSH(22) 열기 |
| EC2 시작 | 퍼블릭 서브넷 + 공인 IP 자동 할당 + 기존 SG |
| 웹 설치 | httpd 설치·기동 후 http로 접속 확인 |
| 퍼블릭 조건 | 퍼블릭 서브넷 · 공인 IP · 라우팅(→IGW) · SG 허용 |
개념 — EC2가 '퍼블릭'으로 동작하려면
서버 하나를 띄운다고 외부에서 접속되는 게 아닙니다. 앞선 편들에서 만든 조건이 모두 맞아야 합니다.
- 퍼블릭 서브넷에 배치 (라우팅 테이블에
0.0.0.0/0 → IGW) - 인스턴스에 공인 IP(자동 할당 또는 EIP)
- 보안 그룹(SG) 이 해당 포트(80/22) 허용
- (서브넷 NACL이 허용 — 기본 NACL은 전부 허용)
💡 이번 편의 보안 그룹과 공인 IP 자동 할당이 3·2번을 담당합니다. 1번은 이미 IGW편에서 완성했죠.
01. 보안 그룹 생성
EC2(또는 VPC) → 보안 → 보안 그룹 → 보안 그룹 생성.
기본 세부 정보
- 보안 그룹 이름:
Public-Web-SSH-SG(생성 후 변경 불가) - 설명:
Public Subnet Security Group - VPC:
My-VPC선택
인바운드 규칙 — 규칙 추가로 두 개:
| 유형 | 프로토콜 | 포트 | 소스 |
|---|---|---|---|
| HTTP | TCP | 80 | Anywhere-IPv4 (0.0.0.0/0) |
| SSH | TCP | 22 | Anywhere-IPv4 (0.0.0.0/0) |
입력 후 보안 그룹 생성.

⚠️ 보안 주의 — 실습이라 SSH(22)를
0.0.0.0/0(전 세계)으로 열었지만, 실무에선내 IP/32로 제한이 정석입니다. SSH를 전 세계에 열면 무차별 로그인 공격 대상이 됩니다. HTTP(80)는 웹 공개이므로 Anywhere가 맞습니다.
02~08. EC2 인스턴스 시작
EC2 대시보드 → 인스턴스 → 인스턴스 시작.
03. 이름 및 태그 — 이름 PublicEC2
04. AMI(운영체제 이미지) — Amazon Linux 2023 kernel-6.1 AMI 선택 (프리 티어, 64비트 x86)
05. 인스턴스 유형 — t3.micro (프리 티어 사용 가능, 2 vCPU / 1 GiB)
06. 키 페어(로그인) — 본인이 생성한 키 페어 선택 (없으면 새 키 페어 생성 → .pem 안전 보관)
📎 키 페어의
.pem파일은 SSH 접속의 유일한 열쇠입니다. 분실하면 그 인스턴스에 못 들어갑니다.chmod 400으로 권한을 잠가 보관하세요.
07. 네트워크 설정 — 편집을 눌러 다음을 지정 (기본값으로 두면 안 됨!):
- VPC:
My-VPC - 서브넷:
Public-Subnet - 퍼블릭 IP 자동 할당: 활성화 ← 외부 접속의 핵심
- 방화벽(보안 그룹): 기존 보안 그룹 선택 →
Public-Web-SSH-SG
⚠️ 가장 흔한 실수 — "퍼블릭 IP 자동 할당"을 켜지 않으면, 퍼블릭 서브넷에 띄워도 공인 IP가 없어 외부에서 접속 불가합니다. 반드시 활성화.
08. 인스턴스 시작 — 인스턴스 시작 클릭 → 성공 메시지 → 모든 인스턴스 보기.
🖼️ [이미지] 인스턴스 시작 성공 화면
잠시 후 인스턴스가 실행 중(running) 이 되고 퍼블릭 IPv4 주소가 부여됩니다. 이 주소로 접속합니다.
09. 웹 서비스 설치 & 확인
키 페어로 인스턴스에 SSH 접속한 뒤, 아래를 순서대로 실행합니다.
# 슈퍼 유저로 전환
sudo su -
# 외부 인터넷 연결 확인 (IGW·라우팅·공인 IP가 맞으면 성공)
ping -c 3 www.google.com
# http 데몬(웹서버) 설치
yum install httpd -y # Amazon Linux 2023은 dnf도 가능
# 웹서버 기동 & 상태 확인
systemctl start httpd
systemctl status httpd
# 시작 페이지 수정
echo "Hello AWS EC2 Web Service" > /var/www/html/index.html
확인 — 브라우저(Chrome)에서 http://<EC2 퍼블릭 IP> 로 접속.
⚠️
https가 아니라http로 접속해야 합니다. 우리는 80번 포트(HTTP)만 열었고 TLS 인증서를 설치하지 않았기 때문입니다. 브라우저가 자동으로https로 바꾸면 접속이 안 되니, 주소창에http://를 명시하세요.
검증 사고법 — 안 될 때 어디부터?
| 증상 | 점검 |
|---|---|
| SSH 접속 안 됨 | 공인 IP 있나 / SG 22 허용 / 키페어 맞나 / 라우팅(→IGW) |
ping google.com 실패 |
IGW 연결·라우팅·공인 IP (인프라 문제) |
| 브라우저 접속 타임아웃 | SG 80 허용·NACL·라우팅 (방화벽/경로 차단) |
| 브라우저 즉시 거부 | httpd 미기동 (systemctl start httpd) |
https로 안 됨 |
정상 — http://로 접속 |
💡 타임아웃 = 방화벽/경로, 즉시 거부 = 서비스 미기동. 이 한 줄이 트러블슈팅의 핵심입니다.
마치며
퍼블릭 서브넷에 EC2를 띄우고 웹 페이지까지 띄웠습니다. 이 인스턴스는 곧 프라이빗 서버로 들어가는 관문(Bastion) 역할도 하게 됩니다. 기억할 한 줄:
"퍼블릭 서브넷 + 공인 IP + SG 허용 + 라우팅(→IGW), 넷이 다 맞아야 외부에서 보인다."
다음 편에서는 프라이빗 서브넷 + NAT 게이트웨이를 만들고, 이 PublicEC2를 Bastion으로 삼아 프라이빗 EC2에 SSH로 들어가는 구조를 완성합니다.
'클라우드 컴퓨팅 > AWS' 카테고리의 다른 글
| 실습 1-8 _ Private EC2 (0) | 2026.06.06 |
|---|---|
| 실습 1-7 _ Private Subnet & Private RT (0) | 2026.06.06 |
| 실습 1-5 _ IGW & RT Table (0) | 2026.06.06 |
| 실습 1-4 _ 라우팅 테이블 - 2 (0) | 2026.06.06 |
| 실습 1-3 _ Subnet (0) | 2026.06.06 |







