LabHub
배우기 러닝패스 코스

Cost and Architectural Decisions

Find the Top Line of the Bill by Calculation

LabHub 에서 이어서 보기

한국어 원문으로 표시합니다.

목표

전송 요금이 무서운 이유는 액수가 아니라 어디서 나왔는지 보이지 않는다는 것입니다. 이 실습은 클라우드 계정 없이 아키텍처의 트래픽 경로를 표로 펼치고, 그 표를 읽는 계산기와 급증 감지기를 손으로 만듭니다.

단가표 (이 실습의 가정)

경로 단가
인터넷 인그레스 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, 전송량 이 들어가야 합니다.