새벽에 AWS에서 온 결제 알림 메일 보고 식은땀 흘려본 적 있으신가요? 분명 무료라고 해서 시작했는데 어느 순간 몇만 원씩 청구되는 경우, 열에 아홉은 인스턴스를 켜둔 채 잊어버렸거나 프리티어 조건을 잘못 이해한 케이스입니다. 이번 글에서는 S3 정적 웹사이트부터 EC2 Node.js 서버, 도메인 연결과 HTTPS 설정까지 AWS 프리티어로 웹호스팅하는 전 과정을 비용 폭탄 없이 따라가 보겠습니다.
핵심 요약
1. 정적인 사이트(포트폴리오, 랜딩페이지)는 S3만으로, 서버 로직이 필요한 사이트는 EC2 t2/t3.micro(월 750시간 무료)로 구성합니다.
2. 2025년 7월 15일 이후 신규 가입자는 서비스별 무료 한도 대신 최대 $200 크레딧(6개월) 구조라, EC2의 750시간 무료는 크레딧을 소모하지 않지만 RDS 등 다른 서비스는 크레딧에서 차감된다는 걸 알아야 합니다.
3. 비용 폭탄을 막으려면 AWS Budgets 알림 설정과 인스턴스 자동 중지 습관이 필수입니다.
시작 전에: 2026년 프리티어 정책부터 확인하기
예전 블로그 글들 보고 그대로 따라 했다가 당황하시는 분들이 정말 많습니다. 2025년 7월 15일부터 AWS 프리티어 구조 자체가 바뀌었거든요. 예전에는 EC2 월 750시간, S3 월 5GB처럼 서비스별로 무료 한도가 딱 정해져 있었는데, 지금 새로 가입하는 계정은 가입 시 100달러, 온보딩 과제 완료 시 추가 100달러, 최대 200달러 크레딧을 받고 그 안에서 자유롭게 쓰는 구조입니다. 이 크레딧은 6개월이 지나거나 소진되면 끝나고요.
여기서 실무자만 아는 디테일이 하나 있습니다. EC2의 월 750시간 t2.micro/t3.micro 무료 사용량은 이 크레딧을 소모하지 않는 별도 항목입니다. 반면 RDS나 다른 서비스는 프리티어 대상이라고 표시되어 있어도 실제로는 크레딧에서 차감되는 경우가 많아요. 콘솔에서 “프리 티어 사용 가능” 체크박스만 보고 “이건 무조건 공짜다”라고 생각하면 안 됩니다. 스펙 분류 표시일 뿐, 실제 과금 여부와는 다른 개념이거든요.
또 하나, 무료 플랜(Free Plan)과 유료 플랜(Paid Plan)은 크레딧 소진 후 동작이 다릅니다. 무료 플랜은 크레딧이 떨어지면 계정 자체가 정지되고, 유료 플랜은 크레딧 소진 후 자동으로 과금이 시작되면서 계정은 계속 유지됩니다. 초보자 입장에서는 오히려 무료 플랜이 안전할 수 있습니다. 최소한 “모르는 사이에 돈이 빠져나가는” 상황은 막아주니까요.

S3로 정적 웹사이트 올리기
HTML, CSS, JS 파일만으로 구성된 포트폴리오나 랜딩페이지라면 서버가 필요 없습니다. S3 버킷 하나면 충분해요.
기본 순서
- S3 콘솔에서 버킷 생성 (버킷 이름은 도메인과 동일하게 맞추면 나중에 편합니다)
- 버킷 속성에서 “정적 웹사이트 호스팅” 활성화, 인덱스 문서로 index.html 지정
- 버킷 정책에서 퍼블릭 읽기 권한 부여 (단, 이 방식은 버킷 이름이 그대로 노출됩니다)
- HTML/CSS/JS 파일 업로드
여기서 매뉴얼대로만 하면 버킷을 퍼블릭으로 완전히 열어두게 되는데, 실제 운영을 생각하면 이건 권장하지 않습니다. 뒤에서 다룰 CloudFront를 앞단에 두고, S3는 CloudFront 경유로만 접근하도록 막는 구조가 정석입니다. 버킷을 직접 노출시키면 트래픽 우회 접근이나 예상치 못한 요청 폭증으로 청구서가 튀는 경우가 종종 있거든요.
EC2에 Node.js 서버 띄우기
회원가입, 게시판, API 서버처럼 로직이 필요한 사이트는 EC2가 필요합니다. t2.micro 또는 t3.micro 인스턴스로 월 750시간까지 무료인데, 이건 인스턴스 하나를 24시간 내내 켜둬도 딱 맞아떨어지는 수치입니다(31일 기준 744시간). 두 개를 동시에 돌리면 시간이 반으로 나뉘니 주의하세요.
실전 세팅 순서
- EC2 콘솔에서 t2.micro 인스턴스 생성, Amazon Linux 2023 또는 Ubuntu 선택
- 보안 그룹에서 22(SSH), 80(HTTP), 443(HTTPS) 포트만 열기
- SSH 접속 후 Node.js와 npm 설치 (nvm 사용 권장)
- PM2 같은 프로세스 매니저로 Node.js 앱을 데몬화 (SSH 세션 끊겨도 서버가 죽지 않도록)
- Nginx를 리버스 프록시로 앞단에 배치해서 80/443 포트 요청을 Node.js 애플리케이션 포트로 전달
인터넷에 도는 튜토리얼 대부분은 Node.js 앱을 포그라운드로 실행한 채로 끝나는데, 실제로 해보면 이러면 SSH 세션이 끊기는 순간 서버도 같이 죽습니다. PM2로 데몬화하는 단계를 빼먹으면 며칠 뒤 “왜 사이트가 안 뜨지” 하고 다시 SSH 접속해야 하는 상황이 반복됩니다.

도메인 연결과 HTTPS 설정
도메인은 Route 53에서 직접 구매하거나, 가비아·후이즈 등에서 산 뒤 네임서버만 Route 53으로 돌리는 방식 둘 다 가능합니다. 개인적으로는 외부에서 싸게 산 뒤 네임서버만 연결하는 쪽을 더 많이 씁니다. Route 53은 도메인 등록 자체는 프리티어 대상이 아니거든요.
HTTPS는 두 가지 경로로 나뉩니다.
| 구성 | 방식 | 특징 |
|---|---|---|
| S3 정적 사이트 | CloudFront + ACM(AWS Certificate Manager) 인증서 | 인증서 발급·갱신이 자동, 완전 무료 |
| EC2 Node.js 서버 | Nginx + Let’s Encrypt(Certbot) | 90일마다 갱신 필요, 서버에 크론 작업으로 자동 갱신 설정 필수 |
ACM은 CloudFront에 물릴 때만 무료로 붙는다는 점, 그리고 반드시 버지니아 북부(us-east-1) 리전에서 인증서를 발급해야 CloudFront에 연결된다는 점을 놓치는 분들이 은근히 많습니다. 다른 리전에서 발급하면 CloudFront 설정 화면에 인증서 자체가 안 보여요. 이거 모르고 몇 시간 헤매는 경우를 실무에서 여러 번 봤습니다.
비용 폭탄 방지 체크리스트
- AWS Budgets에서 예산 알림을 $1, $5, $10 단위로 설정해두기 (크레딧 소진 전에 이메일로 미리 알려줍니다)
- 사용하지 않는 EC2 인스턴스는 “종료(Terminate)”가 아니라 “중지(Stop)”만으로는 EBS 스토리지 요금이 계속 나간다는 점 기억하기
- Elastic IP는 인스턴스에 연결되지 않은 상태로 방치하면 그 자체로 과금됩니다 — 안 쓰면 반드시 해제
- CloudWatch 대시보드에서 월별 예상 청구액(Estimated Charges)을 주기적으로 확인하는 습관 들이기
- 테스트용 리소스는 태그를 달아두고, 주기적으로 태그 기준으로 정리하기

초보자가 자주 하는 착각
“프리티어 계정이니까 뭘 해도 무료다” — 아닙니다. EC2 750시간처럼 크레딧과 무관하게 무료인 항목도 있지만, RDS나 데이터 전송량처럼 프리티어 표시가 있어도 실제로는 크레딧에서 빠지는 항목이 섞여 있습니다. 서비스별로 무료 조건이 다르다는 걸 반드시 확인하고 시작해야 합니다.
“인스턴스만 중지하면 요금이 안 나온다” — EC2 인스턴스를 중지해도 붙어있는 EBS 볼륨 스토리지 요금은 계속 청구됩니다. 완전히 정리하려면 볼륨까지 삭제하거나 스냅샷으로 백업 후 삭제해야 합니다.
“도메인 연결하면 끝, HTTPS는 알아서 되겠지” — HTTPS는 별도로 인증서를 발급하고 연결해야 합니다. 특히 EC2 방식은 Let’s Encrypt 인증서가 90일마다 만료되기 때문에, 자동 갱신 크론 작업을 걸어두지 않으면 3개월 뒤 갑자기 사이트에 보안 경고가 뜨는 상황을 마주하게 됩니다.
여기까지 따라오셨다면, 이제 남은 건 실제로 인스턴스 하나 켜서 손으로 직접 해보는 것뿐입니다. 다음 글에서는 PM2와 Nginx 설정 파일을 실제 코드 레벨로 자세히 풀어보겠습니다.
지금 바로 해야 할 한 가지
이 글에서 뭘 하나만 기억하고 넘어가신다면, AWS Budgets 예산 알림 설정입니다. 인스턴스 켜기 전에 이것부터 해두면 최소한 자다가 놀라는 일은 없습니다.
여러분은 정적 사이트와 동적 서버 중 어느 쪽으로 시작하실 계획이신가요? 그리고 프리티어 사용하시면서 예상치 못하게 과금됐던 경험이 있다면 어떤 서비스에서였나요? 댓글로 공유해주시면 다음 글에서 더 자세히 다뤄보겠습니다.
이어서 읽으면 좋은 글로는 PM2와 Nginx로 Node.js 서버 무중단 배포하기, CloudFront + ACM으로 S3 정적 사이트 HTTPS 적용 실전 가이드를 준비하고 있습니다.
본 포스팅은 정보 전달 목적이며, 실제 적용 시 발생하는 비용과 책임은 사용자에게 있습니다.