목표
AWS EC2에 Nginx 웹서버를 배포해서 브라우저로 외부 접속에 성공하는 것을 목표로 함.
A. 환경 세팅
- AWS 계정 생성, 리전 서울(ap-northeast-2) 설정
- 예산 알림(Zero-Spend Budget) $1 기준 생성
- EC2 인스턴스 생성 (Amazon Linux, t3.micro)
- t2.micro가 프리티어 대상이 아니어서 t3.micro로 변경
- (2025.7.15 이후 계정은 프리티어 정책 변경 — 매달 750시간 무료 방식 → 가입 크레딧 차감 방식)
- 키 페어(my_first_key.pem) 생성 및 보관
- 네트워크 설정에서 HTTP 트래픽 허용 체크
B. Nginx 설치
- EC2 Instance Connect로 터미널 접속
- 아래 명령어 순서대로 실행
sudo yum update -y # 설치된 패키지들을 최신 버전으로 갱신
sudo yum install nginx -y # Nginx 웹서버 설치
sudo systemctl start nginx # Nginx 지금 실행
sudo systemctl enable nginx # 서버 재부팅돼도 자동으로 켜지게 등록
접속 확인
- 브라우저에서 http://[퍼블릭IP] 접속 → "Welcome to nginx!" 확인
curl localhost로 서버 내부에서도 정상 응답 확인
1단계 용어
1단계에서 처음 나온 개념과 명령어. A → B 진행 순서대로 정리했다.
A. 환경 세팅
계정과 비용
| 용어 | 한 줄 설명 |
|---|---|
| 리전(Region) | AWS 데이터센터가 있는 지역. 서울은 ap-northeast-2 |
| 루트 사용자 | 계정 생성 시 만들어지는 최상위 계정. 모든 권한을 가짐 |
| IAM 사용자 | 루트가 만드는 하위 계정. 필요한 권한만 부여 |
| 예산 알림(Budgets) | 사용 금액이 기준을 넘으면 알려주는 기능. 차단은 하지 않음 |
| 프리티어 | 신규 계정 무료 사용 범위. 2025년 7월 이후 계정은 크레딧 차감 방식 |
EC2
| 용어 | 한 줄 설명 |
|---|---|
| EC2 | AWS에서 빌려 쓰는 가상 서버 |
| 인스턴스(Instance) | EC2로 빌린 가상 컴퓨터 한 대 |
| 인스턴스 유형 | t3.micro 형식. t=계열(범용·버스터블), 3=세대, micro=크기 |
| 인스턴스 상태 | running(실행·과금) / stopped(중지·EBS 비용만) / terminated(삭제·복구 불가) |
| AMI (Amazon Machine Image) | OS가 설치된 상태의 서버 초기 이미지 |
| Amazon Linux | AWS가 EC2용으로 제공하는 리눅스 배포판 |
| 키 페어 | SSH 접속용 인증 수단(.pem 파일). 재발급 불가 |
접속과 방화벽
| 용어 | 한 줄 설명 |
|---|---|
| 퍼블릭 IP | 인터넷에서 서버를 찾아올 수 있는 외부용 주소 |
| 포트(port) | 서버의 여러 서비스를 구분하는 번호. HTTP=80, SSH=22 |
| 보안 그룹 | 인스턴스에 붙는 방화벽. 허용한 트래픽만 통과 |
| EC2 Instance Connect | 브라우저에서 터미널로 접속하는 AWS 기능 |
B. Nginx 설치
개념
| 용어 | 한 줄 설명 |
|---|---|
| Nginx | 브라우저 요청을 받아 파일을 돌려주는 웹서버 프로그램 |
| 패키지 관리자 | 프로그램 설치·갱신·삭제를 명령어로 처리하는 도구. Amazon Linux는 yum |
| 서비스(service) | 백그라운드에서 계속 도는 프로그램. systemctl로 관리 |
| 웹 루트 | 웹서버가 요청받은 파일을 찾으러 가는 폴더. Nginx 기본값은 /usr/share/nginx/html |
| index.html | 파일명 지정 없이 접속했을 때 웹서버가 기본으로 찾는 파일 |
EC2는 서버라는 "컴퓨터"고 Nginx는 그 위에서 도는 "프로그램"이다. EC2만 띄우면 아무 응답도 하지 않으며, Nginx를 설치해야 웹 요청에 응답한다.
명령어
| 명령어 | 뜻 |
|---|---|
| sudo | 관리자 권한으로 명령 실행하는 접두어 |
| yum update -y | 설치된 패키지 목록을 최신으로 갱신. -y는 확인 질문에 모두 yes |
| yum install nginx -y | Nginx 설치 |
| systemctl start | 서비스를 지금 실행 |
| systemctl enable | 부팅 시 자동 시작하도록 등록. start와 별개다 |
| systemctl status | 서비스 현재 상태 확인 (active / inactive) |
| curl localhost | 서버 자신에게 요청을 보내 응답 확인 |
start만 하면 재부팅 시 꺼지고, enable만 하면 지금은 실행되지 않는다. 둘 다 실행해야 한다.
배운 점
직접 작성- EC2 : AWS에서 빌려 쓰는 가상 서버. 물리 컴퓨터를 사는 대신 필요한 만큼 빌리고 쓴 시간만큼 낸다.
- Nginx : 그 서버 위에서 도는 웹서버 프로그램. 브라우저가 보낸 요청을 받아서 해당 파일을 찾아 돌려준다.
- 설치 명령어
- sudo yum update -y : 설치된 패키지들 최신 버전 갱신
- sudo yum install nginx -y : nginx 웹 서버 설치
- sudo systemctl start nginx : nginx 실행
- sudo systemctl enable nginx : 재부팅돼도 자동으로 켜지게 등록
- start는 지금 켜는 것, enable은 부팅 때 켜지게 등록하는 것
- 아마존 리눅스 2023은 dnf가 표준이고 yum은 호환용 링크이다.
- yum을 입력해도 실제로는 dnf가 실행된다.
- 설치 명령어
- 접속 방식
- 키 페어 (.pem)
- 개인키 : 터미널에서 ssh -i 키.pem ec2-user@퍼블릭IP 로 접속
- 공개키 : EC2 안에 가지고 있음
- EC2 Instance Connect (브라우저)로 접속해서 .pem 은 사용하지 않음
- Instance Connect : AWS가 접속할 때마다 임시 키를 서버에 넣어주는 방식
- SSH를 내 IP로 제한하면 Instance Connect도 막힘 (AWS 쪽 IP에서 들어오기 때문)
- Instance Connect : AWS가 접속할 때마다 임시 키를 서버에 넣어주는 방식
- 키 페어 (.pem)
- 확인 방법
-
브라우저에 http://퍼블릭IP : 밖에서 들어오는 길까지 확인
-
curl localhost : 서버 안에서만 확인
—> 둘을 나눠서 본다면 nginx가 죽은 건지 네트워크가 막힌 건지 확인 가능
-