3장. 시스템 설계 면접 공략법

2025. 6. 5. 02:04·📝 끄적끄적/📖 가상 면접 사례로 배우는 대규모 시스템 설계 기초
가상 면접 사례로 배우는 대규모 시스템 설계 기초를 읽고 정리한 글입니다.

 

 

시스템 설계 면접은 많은 사람이 단순히 지원자의 설계 능력만 평가하는 자리라고 생각하지만, 사실 그 이상이다.

이 자리에서 면접관은 다음과 같은 부분까지 살펴본다.

  • 지원자가 협업에 적합한지
  • 압박감 있는 상황에서 문제 해결 자질을 보이는지
  • 모호한 문제를 건설적으로 풀어낼 수 있는지
  • 좋은 질문을 던질 능력이 있는지

또한 훌륭한 면접관은 부정적 신호도 놓치지 않는다.

예를 들어, 시스템 비용을 고려하지 않고 순수한 설계 원칙에만 집착하거나, 과도한 엔지니어링을 하여 tradeoff(절충)를 무시하는 모습은 감점 요인이 될 수 있다.

 

 

효과적 면접을 위한 4단계 접근법

1. 문제 이해 및 설계 범위 확정

바로 답부터 내지 말고, 속도를 늦추고 질문하라.
깊이 생각하고 질문하여 요구사항과 가정들을 분명히 하라

엔지니어가 가져야 할 가장 중요한 기술 중 하나는 올바른 질문을 하는 것, 적절한 가정을 하는 것, 그리고 시스템 구축에 필요한 정보를 모으는 것이다.

 

아래처럼 요구사항을 정확히 이해하는 데 필요한 질문을 하라.

  • 구체적으로 어떤 기능들을 만들어야 하나?
  • 제품 사용자 수는 얼마나 되나?
  • 회사의 규모는 얼마나 빨리 커지리라 예상하나? 석 달 뒤의 규모, 여섯 달 뒤의 규모, 일 년 뒤의 규모
  • 회사가 주로 사용하는 기술스택은 무엇인가?
  • 설계를 단순화하기 위해 활용할 수 있는 기존 서비스는 무엇이 있는가?

 

뉴스 피드 시스템 설계 예시

  • 가장 중요한 기능은 무엇인가요?
  • 뉴스 피드는 어떻게 정렬되어야 하나요? 위치처럼 포스트마다 다른 가중치가 있나요?
  • 한 사용자는 최대 몇 명의 사용자와 친구를 맺을 수 있나요?
  • 트래픽 규모는 어느 정도인가요?
  • 피드에 이미지나 비디오도 올릴 수 있나요?

 

2. 개략적인 설계안 제시 및 동의 구하기

면접관과 협력하여 개략적인 설계를 세우고, 동의를 구하라.

  • 설계안에 대한 최초 청사진을 제시하고 의견을 구해라. 면접관을 마치 팀원인 것처럼 대하라.
  • 화이트보드나 종이에 핵심 컴포넌트를 포함하는 다이어그램을 그려라.
    ex) 클라이언트(모바일/웹), API, 웹 서버, 데이터 저장소, 캐시, CDN, 메시지 큐
  • 이 최초 설계안이 시스템 규모에 관계된 제약사항을 만족하는지를 개략적으로 계산해 보라.
    가능하면 시스템의 구체적 사용 사례도 살펴보자

 

뉴스 피드 시스템 설계 예시

이 설계는 두 가지 처리 플로우로 나눠 생각해 볼 수 있다!

  1. 피드 발행
    사용자가 포스트를 올리면 관련된 데이터가 캐시/DB에 기록되고, 해당 사용자의 친구 뉴스 피드에 뜨게 된다.
  2. 피드 생성
    어떤 사용자의 뉴스 피드는 해당 사용자 친구들의 포스트를 시간 역순으로 정렬하여 만든다.

(좌)피드 발행, (우)피드 생성

 

3. 상세 설계

개략 설계 후, 어떤 컴포넌트에 집중할지 우선순위 결정

역할에 따라 집중할 지점이 다르므로 면접관과 함께 우선순위를 정하라.

  • 선임 개발자 면접이라면 병목 구간, 자원 요구량 추정 같은 성능 질문에 대비해야 한다.
  • ex) 단축 URL 생성기 설계 -> 면접관들은 해시 함수의 설계
    채팅 시스템 -> 어떻게 지연시간을 줄이고 사용자의 온/오프라인 상태를 표시할 것인지

 

면접관에게 긍정적 신호를 전달하는 데 집중해야 한다.

불필요한 세부사항에 시간을 쓰지 말라.
ex) 페이스북에서 뉴스 피드의 순위를 매기는 데 사용되는 EdgeRank 알고리즘

 

뉴스 피드 시스템 설계 예시

  1. 피드 발행

(좌)피드 발행, (우)피드 생성

 

4. 마무리

면접관이 우리의 설계에 대한 후속 질문(follow-up question)을 던질 수도 있고, 우리 스스로 다시 설계를 돌아보도록 할 수도 있다.

  • 시스템 병목 구간, 혹은 좀 더 개선 가능한 지점을 찾아보라고 할 수 있다.
    이때 "설계가 완벽하다"거나 "개선할 부분이 없다"는 말은 하지 말자. 개선할 점은 언제나 있기에 비판적 사고 능력을 보이자
  • 내가 만든 설계를 요약해 설명하자.
    면접관들도 사람이니까 긴 면접시간동안 내가 얘기한 것을 잘 기억할 수 있도록 환기시켜 주자
  • 오류가 발생하면 무슨 일이 생기는지 따져보자.
  • 운영 이슈에 대해 논의해 보자 - 로그, 메트릭, 모니터링, 배포
  • 미래의 규모 확장에 대한 대처도 고려하자(100만->1000만 사용자)

 

 

면접 세션에서 해야 할 것과 하지 말아야 할 것

해야 할 것 👍

  • 질문을 통해 확인하라. 스스로를 내린 가정을 의심하자
  • 문제의 요구사항을 이해하라.
  • 정답이나 최선의 답안 같은 것은 없다는 것을 명심하라.
    • 스타트업과 중견 기업의 설계안이 같을 수 없다!
  • 가능하다면 여러 해법을 함께 제시하라.
  • 각 컴포넌트의 세부사항을 설명하고, 가장 중요한 컴포넌트부터 진행해라.
  • 면접관의 아이디어를 이끌어 내라.
  • 포기하지 말라

 

하지 말아야 할 것 👎

  • 전형적인 면접 문제들에도 대비하지 않은 상태에서 면접장에 가지 마라.
  • 요구사항이나 가정들을 분명히 하지 않은 상태에서 설계를 제시하지 마라.
  • 처음부터 특정 컴포넌트의 세부사항을 너무 깊이 설명하지 말고, 개략적 설계부터 해라.
  • 진행 중에 막혔다면, 힌트를 청하기를 주저하지 마라.
  • 소통을 주저하지 마라.

 

 

이미지 출처
https://velog.io/@jinony/%EB%8C%80%EA%B7%9C%EB%AA%A8-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%84%A4%EA%B3%84-3.-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%84%A4%EA%B3%84-%EB%A9%B4%EC%A0%91-%EA%B3%B5%EB%9E%B5%EB%B2%95

저작자표시 비영리 (새창열림)

'📝 끄적끄적 > 📖 가상 면접 사례로 배우는 대규모 시스템 설계 기초' 카테고리의 다른 글

6장. 키-값 저장소 설계  (0) 2025.07.01
5장. 안정 해시 설계  (0) 2025.06.30
4장. 처리율 제한 장치의 설계  (0) 2025.06.30
2장. 개략적인 규모 추정  (0) 2025.06.04
1장. 사용자 수에 따른 규모 확장성 - (3) 샤딩, 메시지 큐, 자동화  (0) 2025.06.01
1장. 사용자 수에 따른 규모 확장성 - (2) 캐시, CDN  (0) 2025.06.01
'📝 끄적끄적/📖 가상 면접 사례로 배우는 대규모 시스템 설계 기초' 카테고리의 다른 글
  • 5장. 안정 해시 설계
  • 4장. 처리율 제한 장치의 설계
  • 2장. 개략적인 규모 추정
  • 1장. 사용자 수에 따른 규모 확장성 - (3) 샤딩, 메시지 큐, 자동화
현주먹
현주먹
대구 불주먹 출신 현주먹의 개발.log
  • 현주먹
    현주먹의 개발로그
    현주먹
  • 전체
    오늘
    어제
    • 전체글 (179)
      • 👶🏻 CS (15)
        • Operating System (7)
        • DB (5)
        • Data Structure (2)
        • Software Engineering (1)
      • 💻 Dev (54)
        • Java & OOP (24)
        • Spring (4)
        • DB&JPA (6)
        • Test Code (1)
        • JSP & Servlet (13)
        • Etc (6)
      • 💡 Algorithm (25)
        • 인프런 (9)
        • 백준 (16)
      • 🛠 DevOps & Tool (11)
        • Linux (4)
        • AWS (1)
        • Git (2)
        • Etc (4)
      • 📝 끄적끄적 (74)
        • 후기 및 회고 (11)
        • TDD, 클린 코드 with Java 17기 (3)
        • F-Lab (23)
        • 🖥️ 자바의 정석 (11)
        • 📖 Clean Code (3)
        • 항해99 코테 스터디 (11)
        • 📖 가상 면접 사례로 배우는 대규모 시스템 설계 .. (11)
  • 블로그 메뉴

    • 🐈‍⬛ GitHub
    • TIL repository
  • 인기 글

  • 최근 글

  • 최근 댓글

  • 태그

    자바의신절판
    TDD 클린 코드 with Java
    백준
    자바의정석
    NextSTEP
    C
    개구리책
    jsp 2.3 웹 프로그래밍: 기초부터 중급까지
    로또 미션
    데브클럽
    개발자멘토링
    ==와 equals()
    객체지향
    에프랩
    jsp
    티스토리챌린지
    F-Lab
    에프랩 후기
    항해99
    오블완
    JPA
    개발자취업
    til
    인프런 특정문자뒤집기
    코테스터디
    f-lab 후기
    2025스프링캠프
    코딩테스트준비
    오라클
    99클럽
  • hELLO· Designed By정상우.v4.10.2
현주먹
3장. 시스템 설계 면접 공략법
상단으로

티스토리툴바