큰 꿈은 파편이 크다!!⚡️

시스템 디자인 인터뷰 준비 (3) - HLD 컴포넌트 본문

기타 CS

시스템 디자인 인터뷰 준비 (3) - HLD 컴포넌트

wood.forest 2025. 2. 16. 15:16

1) 시스템 디자인 인터뷰에 필요한 개념들을 확실히 함
2) 디자인 패턴/LLD
3) 시스템 디자인 시 각 컴포넌트의 역할 (HLD) <- NOW!
4) HLD 인터뷰 예제 및 각 컴포넌트에 적용한 내용 뜯어보기

 

 


 

HLD(High-Level Design)란?

HLD(High-Level Design)는 시스템 아키텍처의 개요를 제공하는 설계 단계로, 시스템의 주요 구성 요소와 그 관계를 정의하는 과정이며, 아래와 같은 내용을 포함한다.

  • 시스템의 전체적인 구성과 데이터 흐름
  • 주요 컴포넌트 간의 관계 및 상호작용 방식
  • 확장성(Scalability), 가용성(Availability), 보안(Security) 등의 고려 사항

따라서 HLD 인터뷰에서도 위 내용들이 잘 드러나도록 다이어그램을 그리고 설명하는 연습이 필요하다.

여담으로 HLD 인터뷰는, 큰 기업에서 최소 Intermediate level 이상을 채용할 때 거치는 과정이기 때문에 어느정도 경력이 있는 상태에서 괜찮은(돈 많이주는) 회사를 가려면 필수ㅎㅎ다. (나는 캐나다에 와서 LLD/HLD가 나뉘어진다는 걸 알았고 시스템디자인 인터뷰도 처음 준비해봤기때문에 한국에서 어떻게 하는지는 잘 모르겠긴 하다. 비슷하지 않으려나 싶다..)

시스템 디자인 인터뷰로 잘 알려진 bytebytego에서 자주 보여주는 아래와 같은 다이어그램이, 우리가 인터뷰에서 실제로 그려내야하는 모습이다.

https://bytebytego.com/courses/system-design-interview/scale-from-zero-to-millions-of-users

 

 

주요 컴포넌트

위 예시 이미지에서 Web, Mobile app, CDN, Load balancer, DB 등, 각각의 구성요소가 컴포넌트다. 

HLD를 처음 연습해볼때는 대충 알고있는 것들이기도 하고, 기계적으로 서버 연결 전에는 Load balancer를 넣는다.. 처럼 쉽게(?) 생각했었다. 하지만 실제로 인터뷰를 볼 때는 (난 본적없지만) 얼마든지 구워삶아질(grilled) 수 있기때문에 이러한 것들은 설명할 줄 알아야 한다.

 

컴포넌트의 역할

  • ex. Redis가 전체 시스템에서 무슨 역할을 하는가?

요구조건을 만족시키기 위한 적절한 컴포넌트 선택

  • ex. 중요하지 않은 부분이라면 third party 제품 사용한다고 해도 무방

각 컴포넌트를 선택한 이유

  • ex. No SQL db를 선택한 이유

그럼 이제 HLD에 필요한 컴포넌트들은 무엇이 있는지 확인해보자.

 

 

클라이언트 (Client)

  • 사용자와 직접 상호작용하는 인터페이스 제공
  • 요청(Request) 생성 및 서버와 통신
  • 데이터를 시각적으로 렌더링하여 사용자 경험 제공
  • ex. 웹 애플리케이션, 모바일 애플리케이션 (iOS, Android)

 

API 게이트웨이 (API Gateway)

  • 클라이언트 요청을 올바른 백엔드 서비스로 라우팅
  • 인증(Authentication) 및 권한 부여(Authorization) 수행
  • 로드 밸런싱 및 요청 캐싱
  • ex. Nginx, Kong, AWS API Gateway

 

애플리케이션 서버 (Application Server)

  • 클라이언트 요청을 처리하고 비즈니스 로직 실행
  • 데이터베이스와 상호작용하여 필요한 데이터 제공
  • 다른 서비스 및 서드파티 API와 통신
  • ex. Spring Boot, Express.js, Django
  • 추가질문 예시: API 디자인 시 REST vs GraphQL 선택 기준이 무엇인가요?

 

데이터베이스 (Database)

  • 데이터 저장 및 관리
  • 데이터 정합성 및 무결성 보장
  • 빠른 데이터 검색 및 업데이트 지원
  • ex. 관계형 데이터베이스: MySQL, PostgreSQL / NoSQL 데이터베이스: MongoDB, Redis
  • 추가질문 예시: 데이터베이스의 캐싱 전략은 어떻게 구성하나요? / 이 시스템에서 왜 NoSQL을 선택했나요?

 

캐시 (Cache)

  • 자주 사용하는 데이터를 메모리에 저장하여 빠른 응답 제공
  • 데이터베이스 부하 감소 및 성능 최적화
  • 특정 시간 이후 데이터 만료(Expiration) 설정 가능
  • ex. Redis, Memcached

 

메시지 큐 (Message Queue)

  • 비동기 작업 처리를 위한 이벤트 기반 아키텍처 지원
  • 서비스 간의 decoupling (의존성 감소)
  • 트래픽이 급증할 때 부하 완화 역할 수행
  • ex. Kafka, RabbitMQ, AWS SQS
  • 추가질문 예시: 이 시스템에서 메세지큐를 사용한 이유가 무엇인가요?

 

로드 밸런서 (Load Balancer)

  • 여러 서버에 트래픽을 균등하게 분배하여 성능 최적화
  • 장애 발생 시 특정 서버로의 트래픽 차단하여 고가용성 유지
  • HTTPS/TLS 종료(SSL Offloading) 기능 수행 가능
  • ex. Nginx, AWS ALB, HAProxy

 

파일 저장소 (Object Storage)

  • 대용량 파일(이미지, 동영상, 로그 등) 저장 및 제공
  • CDN과 연동하여 빠른 콘텐츠 제공
  • 데이터 백업 및 복원 지원
  • ex. AWS S3, Google Cloud Storage

 

모니터링 및 로깅 시스템

  • 시스템의 상태 및 성능 모니터링
  • 에러 발생 시 로깅 및 알림 제공
  • 장애 대응 및 최적화를 위한 데이터 수집
  • ex. Prometheus, Grafana, ELK Stack (Elasticsearch, Logstash, Kibana)

 

CDN (Content Delivery Network)

  • 콘텐츠 분산 및 빠른 제공
  • 서버 부하 분산
  • 보안 강화 및 DDoS 공격 방어
  • ex. AWS CloudFront, Cloudflare
  • 추가질문 예시: 이 애플리케이션에 왜 CDN을 사용하고, 엣지에서 캐시를 어떻게 관리하나요?

 

 

-

System Design Interview An Insider’s Guide by Alex Xu

시스템 디자인 인터뷰를 준비할 때 제일 유명한 책이라고 한다.

나도 읽어봤지만 정말 상상 이상으로 생각해야 할 게 많았다.. ㅎㅎ 

그렇게 읽어보고 쓰는것이지만.. 모든 내용을 상세히 커버하지는 못했고 그냥 내가 이해하고있는 부분, 내가 최소한으로 가져가고싶은 부분을 블로그에 작성했다. 확실하게 준비하고 싶다면 저 책을 읽고 많이 연습해야 한다..🙂

반응형