요구사항 정리와 범위 자르기
시스템 설계는 요구사항을 기능과 비기능으로 나누고 범위 밖을 먼저 잘라내는 것에서 시작합니다. 이 토픽은 아래 하나의 요구사항을 끝까지 풉니다.
| 항목 | 값 |
|---|---|
| 서비스 | 팀 파일 공유 서비스 |
| 파일 크기 | 평균 20MB, 최대 50GB |
| 업로드 | 하루 200만 건, 합계 약 40TB |
| 사용자 | 월 활성 500만, 모바일 60퍼센트 |
| 우선순위 | 가용성. 업로드 실패보다 잠깐 늦게 보이는 편이 낫다 |
기능 요구사항과 범위 밖
| 구분 | 내용 |
|---|---|
| 이번에 만든다 | 파일 업로드, 다운로드, 링크 공유 |
| 범위 밖 | 실시간 협업 편집, 버전 관리, 전문 검색, 권한 그룹 관리 |
범위 밖을 말하는 것이 실력입니다. 다 만들겠다고 하면 무엇도 깊게 못 하고, 면접에서는 우선순위를 못 정하는 것으로 읽힙니다.
비기능 요구사항이 설계를 정한다
숫자를 그냥 적어두면 장식입니다. 각 숫자가 어떤 결론을 강제하는지까지 가야 요구사항 정리가 끝난 것입니다.
| 숫자 | 강제하는 것 | 왜 |
|---|---|---|
| 최대 50GB | 멀티파트 | 단일 요청 크기 상한을 넘는다. 대안이 없다 |
| 하루 40TB | 직접 업로드 | 앱 서버가 통과시킬 수 있는 양이 아니다 |
| 모바일 60퍼센트 | 재개와 멱등 | 끊김이 예외가 아니라 정상 상황이다 |
| 가용성 우선 | 최종 일관성 | 쓰기를 막기보다 잠깐 어긋나는 편을 택한다 |
평균값은 반대로 읽는다
평균 20MB 라는 숫자는 과설계를 막는 쪽으로 씁니다. 최대가 50GB 라서 멀티파트가 필요하지만, 실제 파일 대부분은 한 번에 올려도 됩니다.
그래서 설계는 하나가 아니라 두 갈래가 됩니다. 작은 파일은 단순 경로로, 큰 파일만 멀티파트로 보냅니다. 최대값만 보고 모든 파일을 멀티파트로 처리하면 대부분의 요청에 불필요한 왕복과 상태 관리를 붙이는 셈입니다.
용량 산정은 자릿수만 맞으면 된다
하루 200만 건 를 초로 환산하면 약 23건입니다. 피크를 평균의 다섯 배로 잡아도 초당 100건 남짓입니다. 쓰기 자체는 크지 않고, 문제는 건수가 아니라 바이트입니다.
이 구분이 설계를 바꿉니다. 초당 100건은 어떤 데이터베이스든 받아냅니다. 하루 40TB 는 앱 서버가 통과시킬 수 없습니다. 그래서 병목은 메타데이터가 아니라 파일 전송 경로입니다.
- Q.파일 공유 서비스의 요구사항을 어떻게 정리하시겠습니까
- Q.이 요구사항에서 병목은 어디라고 보시나요
- Q.최대 파일 크기가 50GB 인데 모든 업로드를 멀티파트로 처리하면 되나요