이 챕터를 읽어야 하는 이유
AWS 콘솔에서 "보안 그룹에서 인바운드 규칙을 추가하세요", "서브넷이 퍼블릭인지 확인하세요", "TLS 1.2 이상을 사용하세요" 같은 말이 들릴 때 감이 안 잡히는 이유는 AWS를 몰라서가 아닙니다. AWS가 다루는 개념들의 토대인 네트워크 기초를 건너뛰었기 때문입니다.
이 챕터는 AWS를 시작하기 전에 반드시 알아야 할 개념들을 다룹니다. 읽기만 해도 되고, 실습은 없습니다. 개념이 잡히면 이후 챕터의 모든 설정이 "왜 이렇게 하는지"와 함께 이해됩니다.
"보안 그룹이 22번 포트를 막았다"는 말이 들립니다. "HTTPS는 TLS 핸드셰이크로 암호화된다"는 말이 이해됩니다. "서브넷이 퍼블릭이냐 프라이빗이냐"의 차이가 보입니다.
네트워크는 왜 7계층으로 나뉘는가
컴퓨터끼리 데이터를 주고받는 일은 복잡합니다. 케이블을 통해 전기 신호를 보내는 물리적 문제부터, IP 주소로 경로를 찾는 문제, 데이터를 빠짐없이 전달하는 문제, 애플리케이션이 데이터를 해석하는 문제까지 여러 층의 문제가 쌓여 있습니다.
OSI 모델은 이 복잡성을 7개의 층(Layer)으로 나눠 각 층이 자기 역할만 담당하게 만든 설계 원칙입니다.
AWS에서 자주 나오는 계층
| 계층 | AWS에서 나오는 상황 |
|---|---|
| L7 Application | ALB가 HTTP 헤더·경로를 보고 라우팅 결정 |
| L6 Presentation | ACM 인증서로 TLS 암호화/복호화 |
| L4 Transport | 보안 그룹 인바운드 규칙에서 포트 22, 80, 443 지정 |
| L3 Network | VPC 서브넷 CIDR, 라우팅 테이블, IP 지정 |
| L2 Data Link | ENI(탄력적 네트워크 인터페이스)의 MAC 주소 |
TCP와 UDP — 왜 둘 다 있는가
| 구분 | TCP | UDP |
|---|---|---|
| 연결 방식 | 연결 수립 후 통신 (3-way handshake) | 연결 없이 바로 전송 |
| 신뢰성 | 순서 보장, 재전송 있음 | 순서 보장 없음, 재전송 없음 |
| 속도 | 상대적으로 느림 | 빠름 |
| 사용처 | HTTP, HTTPS, SSH, DB 연결 | DNS, 영상 스트리밍, 게임 |
꼭 외워야 할 포트 번호
| 포트 | 프로토콜 | AWS에서의 용도 |
|---|---|---|
22 | SSH | EC2 원격 접속 |
80 | HTTP | 웹 서버, ALB 리스너 |
443 | HTTPS | 웹 서버(암호화), ALB 리스너 |
3306 | MySQL | RDS MySQL 접속 |
5432 | PostgreSQL | RDS PostgreSQL 접속 |
8080 | HTTP (대체) | Spring Boot 기본 포트 |
53 | DNS | Route 53 |
DNS — 이름을 IP로 바꾸는 전화번호부
브라우저에 www.example.com을 입력하면 실제로는 52.78.XXX.XXX 같은 IP 주소로 연결됩니다. 사람은 이름을 기억하지만 컴퓨터는 IP 주소로 통신하기 때문입니다. DNS(Domain Name System)는 이 변환을 담당합니다.
통신사 DNS
권한 DNS
EC2 / ALB
Route 53이 권한 DNS 역할을 담당합니다.
레코드 종류
| 타입 | 역할 | 예시 |
|---|---|---|
| A | 도메인 → IPv4 주소 | api.example.com → 52.78.1.2 |
| CNAME | 도메인 → 다른 도메인 | www → example.com |
| ALIAS | 도메인 → AWS 리소스 (AWS 전용) | ALB, CloudFront 연결 시 |
| NS | 이 도메인의 권한 DNS 서버 | 호스팅 영역 생성 시 자동 발급 |
| MX | 메일 서버 지정 | 이메일 수신 경로 |
TTL — DNS 전파가 왜 느린가
TTL(Time To Live)은 DNS 응답을 캐시에 얼마나 보관할지 초 단위로 지정하는 값입니다. TTL이 3600이면 1시간 동안 캐시된 값을 씁니다. 도메인을 변경했는데 반영이 안 되는 이유가 이겁니다.
캐싱 — 왜 빠르고 왜 오래된 데이터가 보이는가
캐싱은 자주 쓰는 데이터를 가까운 곳에 미리 복사해두는 기법입니다. 원본까지 매번 가지 않아도 되니 빠릅니다. 대신 원본이 바뀌어도 캐시가 남아 있으면 오래된 데이터가 보입니다.
| 서비스 | 무엇을 캐싱하는가 | 관련 개념 |
|---|---|---|
| CloudFront | 정적 파일 (HTML·CSS·JS·이미지) | TTL, Invalidation |
| ElastiCache | DB 조회 결과, 세션 데이터 | Redis, Memcached |
| ALB | 연결 상태 (Connection draining) | Stickiness |
| Route 53 | DNS 응답 | TTL |
CloudFront에 파일을 새로 올렸는데 브라우저에 이전 파일이 계속 보인다면 캐시 때문입니다. CloudFront Invalidation을 실행하거나, 파일명에 버전을 붙이는 방식(
app.v2.js)으로 해결합니다.
HTTPS가 동작하는 원리
HTTP는 주고받는 내용이 평문입니다. 중간에서 누군가 패킷을 가로채면 그대로 읽힙니다. HTTPS는 TLS(Transport Layer Security)로 암호화한 HTTP입니다.
TLS 핸드셰이크 — 연결이 맺어지는 순서
| 단계 | 내용 |
|---|---|
| 1. Client Hello | 브라우저가 서버에 연결 요청. 지원하는 암호화 방식 목록을 보냅니다. |
| 2. Server Hello + 인증서 | 서버가 암호화 방식을 선택하고 SSL 인증서를 보냅니다. 인증서 안에 서버의 공개키가 있습니다. |
| 3. 인증서 검증 | 브라우저가 인증서를 CA(인증 기관)에 확인합니다. 주소창의 자물쇠가 이 단계입니다. |
| 4. 세션 키 교환 | 이후 통신에 쓸 대칭키를 서버 공개키로 암호화해 전송합니다. |
| 5. 암호화 통신 시작 | 공유된 대칭키로 데이터를 암호화·복호화합니다. |
| 서비스 | 역할 |
|---|---|
| ACM | TLS 인증서 발급 · 자동 갱신 (무료) |
| ALB | TLS 종료 지점 — 브라우저↔ALB는 HTTPS, ALB↔EC2는 HTTP |
| CloudFront | TLS 종료 지점 — 엣지에서 암호화 처리 |
| NLB | TLS 패스스루 — 암호화 상태 그대로 EC2에 전달 |
RDS와 DynamoDB — 선택 기준
AWS에서 데이터베이스를 선택할 때 가장 먼저 마주치는 질문입니다. 정해진 답은 없고, 데이터의 성격과 서비스 요구사항에 따라 다릅니다.
| 특징 | RDBMS (RDS) | NoSQL (DynamoDB) |
|---|---|---|
| 스키마 | 고정 — 컬럼을 미리 정의 | 유연 — 항목마다 다른 필드 |
| 조인 | 여러 테이블 연결 가능 | 기본적으로 없음 |
| 트랜잭션 | ACID 보장 | 제한적 |
| 확장 방식 | 수직 확장 (서버 사양 업) | 수평 확장 (서버 여러 대) |
| 적합한 경우 | 주문·결제·회원 등 정형 데이터 | 세션·로그·대용량 단순 조회 |
핵심 정리
"보안 그룹에서 TCP 22번 포트를 내 IP만 허용"이라는 문장을 읽고 무슨 뜻인지 바로 이해된다면 이 챕터를 마친 겁니다.
OSI L4(TCP) · 포트(22) · 소스(내 IP) — 세 개념이 한 문장에 다 들어 있습니다.