
시스템 설계 면접을 보면 다음과 같은 질문을 받을 수 있다. "널리 알려진 페이스북 제품을 설계해 보세요."
이러한 제품은 뛰어난 설계자와 개발자가 참여해서 개발한 제품이기 때문에 한 시간 안에 설계하는 것도 불가능할뿐더러, 면접관은 그정도의 요구를 하지 않는다. 시스템 설계 면접은 모호한 문제를 풀기 위해 해결책을 찾아내는 과정을 평가하기 위함이다. 그렇기 때문에 정답도 없고, 정해진 결말도 존재하지 않는다.
이번 3장에서는 시스템 설계 면접에 대한 유용한 팁을 살펴보고 문제를 공략하는 접근법을 소개해보겠다.
효과적 면접을 위한 4단계 접근법
1단계: 문제 이해 및 설계 범위 확정
시스템 설계 면접에서는 빠르게 답을 내놓는 행위는 오히려 독이다. 학생 때 시험을 빨리 풀고 1등으로 나가는 학생은 그 때는 멋있을지 몰라도 시스템 설계 면접에서 만큼은 아니다. 요구사항을 완전하게 이해하지 않고 답을 내는 행위는 면접관에게 매우 부정적인 신호 (red flag)로 작용한다.
엔지니어는 어려운 문제를 풀고 최종 설계를 바로 내놓고 싶은 욕구가 있지만, 그렇게 하면 잘못된 시스템을 설계할 가능성이 있다. 그렇기에 엔지니어가 가져야 할 중요한 기술은 올바른 질문을 하고, 적절한 가정을 하고, 시스템 구축에 필요한 정보들을 모으는 것이다.
면접관의 질문을 받은 지원자는 다음과 같은 질문을 할 수 있었을 것이다.
• 구체적으로 어떤 기능을 만들어야 하나?
• 제품 사용자 수는 얼마나 되나?
• 회사의 규모는 얼마나 빨리 커질까?
• 회사가 주로 사용하는 기술 스택은 무엇인가?
예제
뉴스 피드 시스템을 설계하라는 요구를 받았을 때 면접관과 지원자 사이의 오가는 대화의 예시이다.
• 지원자 : 모바일 앱과 웹 앱 가운에데 어느 쪽을 지원해야 하나요? 둘 다인가요?
• 면접관 : 둘 다 지원해야 합니다.
• 지원자 : 가장 중요한 기능은 무엇인가요?
• 면접관 : 새로운 포스트를 올리고, 다른 친구의 뉴스 피드를 볼 수 있도록 하는 기능입니다.
• 지원자 : 뉴스 피드는 시간 역순 정렬인가요? 아니면 가중치가 부여되어야하는 것 처럼 특별한 기준이 있나요?
• 면접관 : 문제를 단순하게 만들기 위해, 시간 역순으로 정렬된다고 가정합니다.
• 지원자 : 한 사용자는 최대 몇 명의 친구를 맺을 수 있나요?
• 면접관 : 5000명 입니다.
• 지원자 : 사이트의 트래픽 규모는 얼마정도 되나요?
• 면접관 : DAU는 천만 명입니다.
• 지원자 : 피드에 이미지나 비디오도 올라올 수 있나요? 아니면 그냥 텍스트만입니까?
• 면접관 : 이미지나 비디오같은 미디어파일도 포스트 할 수 있어야 합니다.
2단계. 개략적인 설계안 제시 및 동의 구하기
이번 단계에서는 개략적인 설계안을 제시하고 면접관에게 동의를 얻는 것이다. 면접관과 협력하면서 과정을 함께 진행하는 것이 좋다.
• 설계안에 대한 최초의 청사진을 제시하고, 면접관을 팀원이라 생각하라.
• 화이트보드나 종이에 핵심 컴포넌트를 포함하는 다이어그램을 그려라 (클라이언트, API, 웹서버, DB, 캐시, CDN 등...)
• 최초 설계안이 시스템 규모에 관계된 제약사항을 만족하는지 개략적으로 계산해 설명하라
예제
"뉴스 피드 시스템 설계"에서의 개략적 설계는 어떻게 만들어 내는지 살펴보겠다.
• 피드 발행 : 사용자가 포스트를 게시하면 관련된 데이터가 캐시와 DB에 저장되고, 해당 사용자의 친구 뉴스 피드에 뜨게 된다.
• 피드 생성 : 사용자의 뉴스 피드는 사용자의 친구들이 포스트를 시간 역순으로 정렬하여 만든다.
다음은 피드 발행과 생성 플로를 개략적으로 그린 것이다.


3단계. 상세 설계
2단계까지 준비되었다면 시스템에서 달성해야 할 목표와 기능을 확인했을 것이고, 개략적인 청사진도 준비했고, 상세 설계 단계에서 검증해야 하는 영역도 확인했을 것이다. 이제는 설계 대상 컴포넌트 사이의 우선순위를 정해야 한다. 면접관이 집중하면 좋을 영역을 알려주기도 하고, 병목 구간이나 자원 요구량 추정치에 초점을 두고 성능 특성에 대한 질문을 할 수도 있다. 면접중에는 시관관리도 중요한 요소이다. 사소한 세부사항을 설명하느라 정작 중요한 능력을 보일 기회를 놓칠수도 있다.
다음 예제를 통하여 2단계에서 개략적으로 제시했던 설계안에 대한 상세 설계를 진행해보겠다!

4단계. 마무리
마지막 단계에서는 면접관이 몇 가지의 후속 질문을 던질 수도 있고 스스로 추가 논의를 하도록 할 수 있다. 대표적으로 다음과 같은 후속 질문이 있을 수 있다.
• 병목구간, 개선 가능한 지점을 찾아낼 수 있는지?
• 메트릭과 로그는 어떻게 수집하고 모니터링하는지?
• 시스템을 어떻게 배포해 나갈것인지?
• 현재 설계가 100만 사용자를 감당할 수 있다면, 1000만 사용자를 감당하기 위해서 어떻게 해야하는지?
또한 면접 세션에서 해야 할 것과 하지 말아야 할 것들을 정리해 보면 좋은데, 요약하자면 다음과 같다.
해야할 것
• 질문을 통해 확인하라, 스스로 내린 가정이 옳다 믿고 진행하지 마라
• 문제의 요구사항을 이해하라
• 정답이나 최선의 답안은 없다는 것을 명심하라
• 면접관과 소통하여 사고 흐름을 이해할 수 있도록 하라
• 가능하면 여러 해법을 함께 제시하라
하지말아야 할 것
• 전형적인 면접 질문에도 대비하지 않은 채 면접장에 가지마라
• 요구사항이나 가정을 분명히 하지 않은 채 설계를 제시하지 마라
• 처음부터 컴포넌트의 세부사항을 깊이 설명하지 마라
• 진행 중에 막혔다면, 힌트 청하기를 주저하지 마라
• 소통을 주저하지 마라
• 설계안을 내놓는 순간 면접이 끝났다고 생각하지 마라.
이번 3장을 통하여 실제로 시스템 설계 면접장에 들어갔다온 듯한 느낌이 들었다. 면접관이 실제로 보고싶어하는 것이 무엇인지 알 것 같다. 대기업 입사 문제도 "버스를 가득 채우기 위해서는 몇 개의 공이 들어갈까요?"와 같이 문제가 정해져있는 답이 아닌, 문제 상황을 정확하게 정의하고 해결해나가는 과정을 중점으로 본다는 점을 알게되었다. 12년간 전형적인 한국 사교육을 받아온 나로써는 문제가 주어지면 바로 답을 내야하는게 습관이 되어있는데 충분히 이해하고, 묻고, 생각해야 좋은 결과로 이어질 수 있다는 점을 다시금 깨닫게 되었다!
'📚 개발 도서' 카테고리의 다른 글
| [가상 면접 사례로 배우는 대규모 시스템 설계 기초] 6. 키-값 저장소 설계 (3) | 2025.07.29 |
|---|---|
| [가상 면접 사례로 배우는 대규모 시스템 설계 기초] 5. 안정 해시 설계 (1) | 2025.07.25 |
| [가상 면접 사례로 배우는 대규모 시스템 설계 기초] 4. 처리율 제한 장치의 설계 (3) | 2025.07.24 |
| [가상 면접 사례로 배우는 대규모 시스템 설계 기초] 2. 개략적인 규모 측정 (5) | 2025.07.20 |
| [가상 면접 사례로 배우는 대규모 시스템 설계 기초] 1. 사용자 수에 따른 규모 확장성 (16) | 2025.07.18 |
console.log("공부나 합시다");