請求書の一位を計算で見つける
한국어 원문으로 표시합니다.
목표
전송 요금이 무서운 이유는 액수가 아니라 어디서 나왔는지 보이지 않는다는 것입니다. 이 실습은 클라우드 계정 없이 아키텍처의 트래픽 경로를 표로 펼치고, 그 표를 읽는 계산기와 급증 감지기를 손으로 만듭니다.
단가표 (이 실습의 가정)
| 경로 | 단가 |
|---|---|
| 인터넷 인그레스 | GB 당 $0 |
| 인터넷 이그레스 | GB 당 $0.09 |
| 같은 AZ 안 | GB 당 $0 |
| AZ 간 | 양쪽에 $0.01 씩, 실질 GB 당 $0.02 |
| 리전 간 | GB 당 $0.02 |
| NAT 게이트웨이 | 처리량 GB 당 $0.045, 상주 시간당 $0.045 (월 730시간) |
| CDN 이그레스 | GB 당 $0.06 |
요율은 사업자와 리전마다 다릅니다. 여기서 익히는 것은 값이 아니라 자릿수를 잡는 방법입니다.
트래픽 경로 (월 전송량)
| 경로 | 종류 | 월 전송량 |
|---|---|---|
| 인터넷에서 웹 계층 | ingress |
3,000 GB |
| 웹 계층에서 인터넷 | egress |
26,000 GB |
| 앱(AZ-a)과 DB(AZ-b) | cross-az |
8,000 GB |
| 앱에서 오브젝트 스토리지 (NAT 경유) | nat |
5,000 GB |
| 로그에서 다른 리전 수집기 | cross-region |
1,200 GB |
| 웹과 캐시 (같은 AZ) | same-az |
20,000 GB |
이그레스 26,000 GB 중 18,000 GB 는 평균 20KB 짜리 API 응답이고, 나머지 8,000 GB 는 이미 압축된 이미지와 동영상입니다.
만드는 것
| 파일 | 내용 |
|---|---|
/root/transfer/paths.csv |
경로별 전송량과 요금 |
/root/transfer/02-top3.md |
요금 상위 셋과 합계 |
/root/transfer/bill.py |
표를 읽는 계산기 |
/root/transfer/04-gzip.md |
압축의 절감액 |
/root/transfer/05-cdn.md |
CDN 비교와 손익분기 적중률 |
/root/transfer/daily.csv · spike.py |
전송량 급증 감지 |
/root/transfer/07-notes.md |
정리 |
참고
3단계의 계산기와 6단계의 감지기는 채점기가 숨겨 둔 표로 시험합니다. 표를 갈아 끼워도 맞아야 설계 회의에서 쓸 수 있습니다.
경로를 표로 만든다
안내에 적힌 여섯 경로를 /root/transfer/paths.csv 에 경로,종류,월GB,월요금 네 칸으로 적으세요. 무료인 경로도 요금을 0 으로 적습니다.
종류 는 ingress, egress, same-az, cross-az, cross-region, nat 여섯 가지이고 한 줄씩 나옵니다.
요금은 단가표의 값을 그대로 곱하면 됩니다. AZ 간은 나가는 쪽과 들어오는 쪽 양쪽에 붙어 실질 GB 당 $0.02 입니다 — 여기를 반만 세는 것이 가장 흔한 실수입니다.
무료인 경로를 표에서 빼지 마세요. 어디가 공짜인지 보이지 않으면 다음 단계에서 무엇을 어디로 옮길지 정할 수 없습니다.
요금이 큰 순서로 세운다
요금이 큰 항목 세 개를 /root/transfer/02-top3.md 에 적고, 각각 무엇을 바꾸면 줄어드는지 한 줄씩 덧붙이세요. 마지막 줄에는 NAT 상주 요금(730시간 × $0.045)까지 더한 월 합계를 적으세요.
순서는 1단계 표에서 그대로 나옵니다. 세 항목의 자릿수가 서로 얼마나 다른지 보세요.
줄이는 방법은 앞의 읽기에 다 있습니다. 경로를 바꾸는 것, 배치를 바꾸는 것, 크기를 줄이는 것 셋 중 하나입니다.
NAT 는 처리량 요금과 별개로 떠 있기만 해도 붙는 시간당 요금이 있습니다. 이건 트래픽을 줄여도 사라지지 않습니다.
표를 갈아 끼워도 맞는 계산기
/root/transfer/bill.py 를 만드세요. python3 /root/transfer/bill.py <경로CSV> 로 부르면 줄마다 요금을 찍고 마지막 줄에 합계,<숫자> 를 찍어야 합니다. 상주 요금은 전송량과 무관하므로 세지 않습니다.
단가는 스크립트 안에 상수로 둡니다. 안내의 단가표를 그대로 옮기세요.
종류 칸이 단가를 정하고 월GB 를 곱하면 그 줄의 요금입니다. 네 번째 칸이 있어도 무시하세요 — 계산기가 다시 계산해야 의미가 있습니다.
채점기는 숨겨 둔 표로도 돌려 봅니다. 표를 갈아 끼워도 맞아야 설계 회의에서 쓸 수 있습니다.
압축의 값을 금액으로 적는다
이그레스 26,000 GB 중 18,000 GB 가 API 응답이고 평균 20KB 입니다. gzip 으로 평균 5KB 가 되면 전송량과 절감액이 얼마인지, 그리고 압축에서 빼야 할 것이 무엇인지 /root/transfer/04-gzip.md 에 적으세요.
20KB 가 5KB 가 되면 전송량은 4분의 1 이 됩니다. 18,000 GB 가 얼마가 되고 얼마가 줄어듭니까.
줄어든 GB 에 이그레스 단가 $0.09 를 곱하면 월 절감액입니다.
나머지 8,000 GB 는 이미 압축된 이미지와 동영상이라 gzip 을 걸어도 줄지 않고 CPU 만 씁니다. 그리고 스트리밍 응답은 압축하지 않습니다 — 청크가 버퍼에 고여 스트리밍이 스트리밍이 아니게 됩니다.
CDN 이 싸지는 지점을 구한다
이미지와 동영상 8,000 GB 를 CDN 뒤에 둡니다. 적중률이 90% 일 때의 월 요금과 절감액, 그리고 적중률이 얼마 이상이어야 CDN 이 더 싼지를 /root/transfer/05-cdn.md 에 적으세요.
지금은 8,000 GB 가 원본에서 바로 나갑니다. 적중률이 90% 면 원본에서는 10%만 나가고, 사용자에게는 CDN 이 8,000 GB 를 전부 내보냅니다.
원본 이그레스는 $0.09, CDN 이그레스는 $0.06 입니다. 두 금액을 더한 것이 CDN 을 둔 뒤의 요금입니다.
손익분기는 적중률을 h 로 두고 8000 × (1 - h) × 0.09 + 8000 × 0.06 = 720 을 풀면 나옵니다. 백분율로 적으세요.
청구서보다 먼저 아는 장치
/root/transfer/spike.py 를 만드세요. 날짜,GB 형식의 표를 읽어 직전 7일 중앙값의 3배 이상인 날을 한 줄씩 찍고, 하나라도 있으면 종료 코드 1, 없으면 0 으로 끝나야 합니다. 앞의 7일이 모이지 않은 날은 건너뜁니다. 시험용 표본은 /root/transfer/daily.csv 에 직접 만드세요.
요금 알림은 대개 너무 늦게 옵니다. 월 예산의 절반을 넘었다는 알림이 왔을 때는 이미 며칠치가 나간 뒤입니다.
전송량 자체를 지표로 두고 평소 대비 몇 배가 되면 알리는 편이 훨씬 빠릅니다. 중앙값을 쓰는 이유는 평균이 급증한 날 자신에게 끌려가기 때문입니다.
statistics.median 이면 충분합니다. 기준을 너무 낮게 잡으면 알림이 매일 오고, 매일 오는 알림은 아무도 보지 않게 됩니다 — 채점기가 그것도 봅니다.
세 가지를 정리한다
/root/transfer/07-notes.md 에 세 줄 이상. 요금이 붙는 방향, 다중 AZ 로 짠 뒤 요금이 오르는 이유, 요금 대신 무엇으로 관리하는지.
본문에 이그레스, AZ, 전송량 이 들어가야 합니다.