본 글은 가상면접 사례로 배우는 대규모 시스템 설계 기초를 읽고 정리한 글입니다.
- 설계의 순수성(pu-rity)에 집착한 나머지 타협적 결정(tradeoff)을 도외시하고 과도한 엔지니어링(over-engineering)을 하고 있는 엔지니어들이 현업에 많다 → 엔지니어들은 과도한 엔지니어링의 결과로 시스템 전반의 비용이 올라감.
효과적 면접을 위한 4단계 접근법
- 구체적으로 어떤 기능을 만들어야 하나?
- 제품 사용자수는 얼마나 되나?
- 회사의 규모는 얼마나 빨리 커지리라 예상하나? 석 달, 여섯 달, 일년 뒤의 규모는 얼마가 되리라 예상하는가?
- 회사가 주로 사용하는 기술 스택(technology stack)은 무엇인가? 설계를 단순화하기 위해 활용할 수 있는 기존 서비스로는 어떤 것들이 있는가?
예제
지원자: 모바일 웹과 앱 가운데 어느 쪽을 지원해야 하나요?
면접관: 둘 다 지원해야 합니다.
지원자: 가장 중요한 기능은 무엇인가요?
면접관: 새로운 포스트(post)를 올리고, 다른 친구의 뉴스 피드를 볼 수 있도록 해야 합니다.
지원자: 포스트 정렬 기준이 있나요? 가령 가까운 친구의 포스트가 사용자 그룹의 포스트보다 중요하다거나..
면접관: 시간 역순입니다.
지원자: 한 사용자는 몇 명의 사용자를 최대로 맺을 수 있나요?
면접관: 5000명입니다.
지원자: 사이트로 오는 트래픽 규모는 어느 정도입니까?
면접관: DAU는 천만 명입니다.
지원자: 피드에 이미지나 비디오로 올라올 수 있나요? 포스트는 그저 텍스트입니까?
면접관: 이미지나 비디오 같은 미디어 파일도 포스트 할 수 있어야 합니다.
개략적인 설계안 제시 및 동의 구하기
- 설계안에 대한 최초 청사진을 제시하고 의견을 구라.
- 화이트보드나 종이에 핵심 컴포넌트를 포함하는 다이어그램을 그려라.
- 이 최초 설계안이 시스템 규모에 관계된 제약사항들을 만족하는지를 개략적으로 계산해보라.
예제
- 뉴스 피드 시스템을 설계하라.
- 두가지 처리 플로(flow)로 나눠 생각해보자.
- 피드 발행(feed publishing)과 피드 생성(feed building)
- 피드 발행: 사용자가 포스트를 올리면 관련된 데이터가 캐시/데이터베이스에 기록되고, 해당 사용자의 친구 뉴스 피드에 뜨게 된다.
- 피드 생성: 어떤 사용자의 뉴스 피드는 해당 사용자 친구들의 포스트를 시간 역순으로 정렬하여 만든다.
상세 설계
- 시스템에서 설계 대상 컨포넌트 사이의 우선순위를 정해야 함.
- 단축 URL 생성기(URL shortener) 설계에 관한 것이었다고 해보자.
→ 해시 함수의 설계를 구체적으로 설명하는 것을 듣고 싶어 할것.
- 채팅 시스템에 관한 문제
→ 어떻게 해야 지연시간(latency)를 줄이고, 사용자의 온/오프라인 상태를 표시 할 것인지 듣고자 함.
예제
- 피드 발행
- 뉴스 피드 가져오기(news feed retrieval)
피드 발행 시 웹브라우저, 모바일 웹은 DNS에 연결되어 있고, 로드 밸런서를 통해 웹서버 API를 가져온다. 인증, 처리율 제한을 통해 알림 서비스를 구현하고, 포스팅, 전송 API를 지원하는 서비스는 캐시를 이용해 빠른 데이터베이스 읽기를 지원함.
포스팅 전송 서비스는 그래프 데이터베이스를 통해 친구 ID목록 추천하고, 메시지큐를 통해 포스팅 전송 작업 서버에 전송된다. 또한 CDN을 통해 거리가 먼 지역에 알맞은 CDN을 지원하여, 빠른 속도를 구현한다.
마무리
- 시스템 병목구간, 혹은 좀 더 개선 가능한 지점을 찾아내라 주문할 수 있음 → 개선할 점은 언제나 마련되어있다!!
- 우리가 만든 설계를 한번 다시 요약해라.
- 오류가 발생하면 무슨 일이 생기는지(서버 오류, 네트워크 장애)등 따져보자.
- 운영이슈 (메트릭은 어떻게 수집하고, 모니터링할 것인가, 로그는, 시스템은 어떻게 배포해 나갈 것인가
- 미래에 닥칠 규모 확정 요구에 어떻게 대처할 것인가. 백만 사용자 → 천만 어떻게? 이때는 수평적 규모 확장을 통해서 하면 되지 않을까. (master-slave DB 구현?)
해야할 것
- 질문을 통해 확인해라(clarification)).
- 문제의 요구사항을 이해해라.
- 정답이나 최선의 답안 같은 것은 없다.
- 면접관이 여러분의 사고 흐름을 이해할 수 있도록 하라.
- 가능하다면 여러 해법을 함께 제시해라.
- 가장 중요한 컴포넌트부터 진행해라.
- 면접관의 아이디어를 이끌어 내라.
- 포기하지 말라.
'📗 BOOK > 가상 면접 사례로 배우는 대규모 시스템 설계 기초 정리' 카테고리의 다른 글
단일 메시지 브로커 설계하기 - (2) / 마이크로 서비스의 프로세스 간 통신 정리 (0) | 2024.01.20 |
---|---|
단일 메세지 모델 설계 하기(kafka + STOMP + Cassandra) (2) | 2024.01.03 |
[가상면접 사례로 배우는 대규모 시스템 설계 기초] Chap2. 개략적인 규모 추정 (0) | 2023.11.29 |
[가상면접 사례로 배우는 대규모 시스템 설계 기초] Chap12. 채팅 시스템 (1) | 2023.11.24 |
[가상면접 사례로 배우는 대규모 시스템 설계 기초] Chap01. 사용자 수에 따른 규모 확장성 (0) | 2023.11.16 |