면접을 하다보면 시스템을 설계해보라는 질문을 받을 때가 있다. 시스템을 설계하는 과정에서의 커뮤니케이션, 엔지니어링에 대한 고민, 문제 해결 능력 등을 보기 위한 질문이다. 이 장에서는 이러한 시스템 설계 면접을 위한 접근법에 대해서 얘기해본다.
효과적 면접을 위한 4단계 접근법
문제 이해 및 설계 범위 확정
문제에 대한 정의, 요구사항 등을 가정하는 단계이다. 문제를 듣고 바로 답을 고민하기 보다는 숨겨져 있는 조건들, 문제에 대한 제약 등을 통해서 요구사항을 파악하고 요건을 정리하여 목표를 제한한다.
필요한 기능들, 제품 사용자의 수, 회사의 성장 규모, 기존에 사용하는 기술 스택과 서비스 등에 대해서 질문하며 요건을 정리해볼 수 있다.
개략적인 설계안 제시 및 동의 구하기
정리된 요건을 기반으로 개략적인 설계를 하고 이에 대해서 면접관들의 동의를 얻는 단계이다. 앞선 단계에서 정의된 조건들을 만족하는 시스템을 설계하며 마치 면접관들과 같은 팀원이 된 것 처럼 의견을 나누며 설계를 공유한다. 이 과정에서 미처 생각하지 못한 에지 케이스를 고려하거나 면접관들의 피드백으로 좀 더 명확한 요건들을 발견하게 될 수 있게 될 것이다.
상세 설계
앞선 단계들을 통해 개략적인 설계가 완료되었다면, 각 컴포넌트 사이의 우선순위와 상세 설계를 고려해 봐야한다. 중점적으로 봐야할 우선순위와 포인트들은 면접마다 다를 텐데, 시스템의 성능, 구현 방식, 시스템의 상태 관리, 확장성 등 다양한 부분들이 있을 것이다. 그때마다 면접관의 요구에 맞춘 세부사항에 집중하여 설계를 할 수 있도록 해야한다.
마무리
설계가 완료된 시스템에 대해서 추가 논의가 진행될 수 있다. 병목구간이나 멀티스레드 관계에서 race condition 이 발생한느 부분, 또는 오류에 대한 대책이나 확장성에 대한 논의가 이어질 수 있을 것이다.
중요한 것은 혼자서 고민하며 면접을 진행하지 않는 것이다. 막히는 부분이 있다면 힌트를 요구하기도 하고, 혼자 판단하기 보다는 면접관들과 소통하며 설계를 진행해 나가야 한다.
'기타' 카테고리의 다른 글
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 2. 개략적인 규모 추정 (0) | 2025.02.08 |
---|---|
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 1. 사용자 수에 따른 규모 확장성 (0) | 2025.02.04 |
[SQLite] SQLite 설명 및 예제 (1) | 2023.10.17 |
[Celery] Celery 란? (0) | 2023.06.01 |
[FastAPI] BackgroundTasks (0) | 2023.05.26 |