시스템 설계 면접은 지원자가 확장 가능하고 효율적인 시스템을 만들 수 있는지를 검증하는 데 있어 항상 중요한 요소입니다. 주요 용어에 대한 지식은 면접에서 좋은 점수를 받는 데 도움이 될 것입니다. 아래는 반드시 알아야 할 시스템 설계 면접 용어 50가지에 대한 정의와 실제 예시시를 학습을 위한 추가 자료와 함께 설명합니다.
1. Scalability
- 정의: 리소스를 추가하여 증가하는 부하를 지원할 수 있는 시스템의 능력입니다.
- 예시: 웹 트래픽 증가를 처리하기 위해 서버를 더 추가합니다.
- What is Scalability and How to Achieve it?
2. Load Balancer(로드 밸런서)
- 정의: 들어오는 네트워크 트래픽을 여러 서버로 분할하여 한 서버에서 많은 양의 부하를 처리하지 않도록 합니다.
- 예시: AWS Elastic Load Balancer(ELB) 서비스를 사용하여 여러 EC2 인스턴스 간에 웹 트래픽 부하를 분산합니다.
- 로드 밸런서 이해
3. Microservice(마이크로서비스)
- 정의: 느슨하게 결합된 서비스들의 모음으로 애플리케이션을 구조화하는 아키텍처 패턴입니다.
- 예시: 모놀리식(monolithic) 애플리케이션을 사용자 관리, 결제 처리, 알림 전송을 담당하는 독립적인 서비스로 세분화합니다.
- 마이크로서비스란 무엇인가요?
4. CAP Theorem(CAP 정리)
- 정의: 분산 시스템에서는 일관성, 가용성, 분할 허용성이라는 세 가지 보장 중 최대 두 가지만 얻을 수 있다는 것을 의미합니다.
- 예시: 분산 데이터베이스 설계에서 가용성을 위해 일관성을 희생해야 하는 경우(또는 그 반대의 경우)
- CAP 정리 이해하기
5. Sharding(샤딩)
- 정의: 더 나은 관리를 위해 대규모 데이터베이스를 샤드라고 하는 작은 조각으로 나누는 것을 말합니다.
- 예시: 지리적 지역을 기반으로 사용자 데이터베이스를 샤딩합니다.
- 데이터베이스 샤딩 설명
6. Latency
- 정의: 데이터가 A 지점에서 B 지점까지 이동하는 데 걸리는 시간으로 정의됩니다.
- 예시: 채팅 애플리케이션을 통한 메시지 전달과 관련된 지연 시간 측정.
- 지연 시간에 대해 설명!
7. Throughput(쓰루풋)
- 정의: 시스템이 일정 시간 내에 처리하는 데이터의 양을 측정한 것 입니다. 처리율, 처리량라고도 불립니다.
- 예시: 웹 서버가 1초 동안 처리하는 요청 수입니다.
- 컴퓨터 네트워크에서의 처리량(Throughput)
8. 캐시(Cache)
- 정의: 동일한 데이터를 반복 요청할 필요가 없도록 데이터를 저장하고 빠르게 제공하는 하드웨어 또는 소프트웨어 구성 요소
- 예시: 반복적인 데이터베이스 쿼리를 위해 Redis 캐싱을 구현하는 것
- 캐싱 설명
9. Content Delivery Network(CDN)
- 정의: 지리적으로 분산된 서버 시스템으로, 사용자가 액세스하는 지리적 위치에 따라 웹 콘텐츠를 사용자에게 표시합니다.
- 예시: 더 빠른 웹 페이지 로딩을 위해 Cloudflare CDN 사용.
- CDN이란 무엇인가요?
10. REST API
- 정의: HTTP 요청을 사용하여 데이터에 액세스하고 조작하는 웹 서비스를 구축하도록 설계된 아키텍처 스타일의 한 유형입니다.
- 예시: REST(Representational State Transfer) 원칙에 따른 소셜 미디어 API 설계.
- REST API 튜토리얼
11. GraphQL
- 정의: 데이터를 쿼리하도록 설계된 언어이므로 REST보다 훨씬 더 강력하고 효율적이며 유연합니다.
- 예시: GraphQL을 사용하여 단일 요청으로 사용자 정보 쿼리.
- GraphQL 소개
12. ACID
- 정의: 데이터베이스 트랜잭션의 안정적인 처리를 보장하는 속성 집합입니다. 속성은 원자성, 일관성, 고립성 및 내구성입니다.
- 예시: 은행 거래에 ACID 속성이 있는지 확인하면 데이터 손상을 방지할 수 있습니다.
- 데이터베이스의 ACID 속성
13. BASE
- 정의: ACID의 대안으로, 엄격한 일관성(Consistency)보다 가용성(Availability)과 파티션 허용성(Partition tolerance)을 강조하는 시스템. 기본적으로 가용하며(Basically Available), 변화하는 상태를 허용하고(Soft state), 결국에는 일관성을 이루는(Eventually consistent) 시스템.
- 예시: 높은 가용성과 최종 일관성을 제공하는 NoSQL 데이터베이스의 설계.
- BASE vs ACID
14. NoSQL
- 정의: 관계형 데이터베이스에서 사용되는 표 형식의 관계가 아닌 다른 방식으로 모델링된 데이터의 저장 및 검색을 촉진하도록 설계된 데이터베이스 유형입니다.
- 예시: 문서 기반 데이터 저장소에 MongoDB 사용.
- NoSQL 데이터베이스란 무엇인가요?
15. SQL
- 정의: 관계형 데이터베이스에서 데이터를 저장, 조작 및 검색하는 데 사용되는 표준 언어입니다.
- 예시: 관계형 데이터베이스에서 데이터를 가져오기 위해 SQL 쿼리를 작성합니다.
- SQL 튜토리얼
16. 데이터베이스 인덱싱
- 정의: 데이터베이스에서 데이터를 빠르게 검색하고 액세스할 수 있도록 하는 데이터 구조 기법입니다.
- 예시: 검색 속도 향상을 위해 사용자 ID 열에 인덱싱을 생성합니다.
- 데이터베이스 인덱싱
17. Replication
- 정의: 분산 데이터베이스 시스템을 구성하는 여러 데이터베이스에서 데이터베이스 객체를 복사하고 유지 관리하는 프로세스입니다.
- 예시: 복제를 사용하여 다양한 지리적 위치에서 데이터베이스의 고가용성을 유지.
- 데이터베이스 복제(Database Replication)
18. Failover(장애 조치)
- 정의: 주요 시스템 구성 요소가 손실되었을 때, 다른 시스템 구성 요소가 그 기능을 대신하는 백업 운영 모드.
- 예시: 인터넷 애플리케이션 서버가 장애가 발생할 경우, 대기 서버로 자동으로 전환되는 내장된 자동 장애 조치 기능.
- 장애 조치(Failover)와 재해 복구(Disaster Recovery) 비교
19. API Gateway
- 정의: API의 앞단에 위치하여 API 요청을 수신하고 제한 및 보안 정책을 적용한 다음 백엔드 서비스로 전달하는 서버입니다.
- 예시: AWS API 게이트웨이를 사용하여 API 관리.
- API 게이트웨이란?
20. Service Mesh
- 정의: 마이크로서비스 간의 서비스 간 통신을 원활하게 하기 위한 전용 인프라 계층.
- 예시: 마이크로서비스 상호 작용 관리를 위한 서비스 메시로 Istio 통합.
- Service Mesh 소개
21. Serverless Computing
- 정의: 클라우드 공급자가 동적으로 컴퓨팅 자원을 할당하는 클라우드 컴퓨팅 구현 방식.
- 예시: AWS Lambda를 사용하여 서버 설정 없이 백엔드 코드를 실행
- 서버리스 컴퓨팅이란 무엇인가요?
22. Event-Driven Architecture
- 정의: 일반적으로 이벤트를 생성, 감지, 소비하고 이에 반응하도록 장려하는 소프트웨어 아키텍처 패러다임.
- 예시: Apache Kafka를 사용하여 마이크로서비스 간의 이벤트 통신으로 시스템을 설계하기.
- 이벤트 기반 아키텍처(Event-Driven Architecture)
23. Monolithic Architecture
- 정의: 모든 요소가 하나의 애플리케이션에 장착되어 단일 서비스로 실행되는 소프트웨어 아키텍처.
- 예시: 하나의 거대한 단위로 구축된 전통적인 기업 애플리케이션.
- 모놀리식 아키텍처와 마이크로서비스 아키텍처 비교
24. 분산 시스템
- 정의: 네트워크로 연결된 컴퓨터에 위치한 구성 요소들이 메시지를 주고받으며 서로의 동작을 조정하는 모델.
- 예시: Hadoop과 같은 분산 파일 시스템 설계.
- 분산 시스템 소개
25. 메시지 큐(Message Queue)
- 정의: 아키텍처에서 비동기 서비스 간 통신을 가능하게 하는 방법.
- 예시: RabbitMQ를 사용하여 서비스 간 메시지를 큐에 저장.
- 메시지 큐 설명
26. Pub/Sub 모델
- 정의: 발신자(게시자)가 메시지를 발행하고, 수신자(구독자)가 목적지를 알 필요 없이 메시지를 수신하는 메시징 패턴.
- 예시: Google Cloud Pub/Sub를 사용하는 알림 시스템.
- Pub/Sub 메시징
27. 데이터 파티셔닝(Data Partitioning)
- 정의: 데이터베이스를 더 작고 관리하기 쉬운 부분으로 분할 하는 것.
- 예시: 데이터베이스의 테이블을 날짜별로 분할하여 쿼리를 매우 빠르게 실행할 수 있습니다.
- 데이터베이스 파티셔닝
28. Horizontal Scaling
- 정의: 시스템 내에 더 많은 머신이나 노드를 추가하여 용량을 증가시키는 것.
- 예시: 사용자 트래픽이 증가할 때 웹 서버를 추가로 설치.
- Horizontal vs Vertical Scaling
29. Vertical Scaling
- 정의: 기존 머신의 CPU나 RAM 같은 성능을 업그레이드하는 것.
- 예시: 서버의 RAM을 업그레이드하여 더 많은 요청을 처리할 수 있게 함.
- Horizontal vs Vertical Scaling
30. 속도 제한(Rate Limiting)
- 정의: 네트워크 인터페이스 컨트롤러가 보내거나 받는 트래픽의 속도를 제어하는 것.
- 예시: API의 남용을 방지하기 위해 API를 제한.
- 속도 제한 이해하기
31. Circuit Breaker 패턴
- 정의: 최신 소프트웨어 개발에 사용되는 디자인 패턴으로, 장애를 감지하고 장애가 지속적으로 반복되는 것을 방지하는 로직을 캡슐화 함.
- 예시: 마이크로서비스 아키텍처에서 서킷 브레이커를 사용하여 원격 서비스 호출 실패 처리.
- Circuit Breaker 패턴
32. 데이터 일관성(Data Consistency)
- 정의: 여러 인스턴스 간에 데이터가 동일하고 손상되지 않도록 보장하는 것.
- 예시: 데이터베이스의 여러 복제본을 통해 사용자 데이터의 일관성을 유지.
- 데이터 일관성 모델
33. 궁극적 일관성(Eventual Consistency)
- 정의: 높은 가용성을 목표로 하는 분산 컴퓨팅에서 사용되는 일관성 모델로, 시스템의 업데이트가 시간이 지나면 모든 노드에 반영될 것을 보장함.
- 예시: Amazon DynamoDB는 읽기 작업에 대해 최종 일관성 모델을 제공함.
- 궁극적 일관성
34. 강력한 일관성(Strong Consistency)
- 정의: 모든 읽기 작업이 가장 최근의 쓰기 작업을 반영하도록 보장하는 일관성 모델.
- 예시: 금융 거래 시스템에서 강력한 일관성 사용.
- 강력한 일관성
35. 컨테이너화(Containerization)
- 정의: 기본적으로 애플리케이션과 그 종속성을 컨테이너에 캡슐화하여 다양한 컴퓨팅 환경에서 실행할 수 있도록 하는 것.
- 예시: Docker를 사용하여 애플리케이션을 개발, 테스트, 프로덕션 환경에 배포할 수 있도록 컨테이너화.
- 컨테이너화란 무엇인가요?
36. 쿠버네티스(Kubernetes)
- 정의: 애플리케이션 컨테이너의 배포, 확장 및 운영 프로세스를 자동화하는 오픈소스 플랫폼.
- 예시: Kubernetes를 사용하여 컨테이너화된 애플리케이션 실행 및 배포.
- Kubernetes 문서
37. 오토스케일링(Autoscaling)
- 정의: 사용자 부하에 따라 컴퓨팅 리소스 수를 자동으로 조정하는 것.
- 예시: AWS EC2 오토스케일링 기능을 사용하여 인스턴스 수를 동적으로 조정.
- 오토스케일링 설명
38. Multi-Tenancy
- 정의: 단일 소프트웨어 애플리케이션 인스턴스가 여러 소비자/고객에게 서비스를 제공하는 아키텍처.
- 예시: Salesforce와 같은 SaaS 애플리케이션이 다양한 고객 그룹에게 Multi-Tenancy를 사용하여 서비스 제공.
- Single Tenancy Vs Multi-Tenancy?
39. 로드 셰딩(Load Shedding)
- 정의: 높은 부하 상태에서 시스템 전체의 건강을 유지하기 위해 일부 요청을 처리하지 않거나 서비스를 저하시키는 것.
- 예시: 트래픽이 폭주하는 시간대에 필수적이지 않은 모든 서비스를 종료.
- Load Shedding
40. 멱등성(Idempotence)
- 정의: 수학 및 컴퓨터 과학에서 특정 연산을 여러 번 수행해도 결과가 동일한 특성.
- 예시: HTTP DELETE 요청은 멱등성을 가짐.
- API의 멱등성
41. Quorum
- 정의: 분산 트랜잭션을 커밋하기 위해 필요한 최소 투표 수.
- 예시: 분산 데이터베이스에서 일관성을 보장하기 위해 쿼럼 기반 복제를 사용.
- Quorum Systems
42. 오케스트레이션(Orchestration)
- 정의: 서비스 간 상호작용을 중앙에서 조정자가 제어하는 패턴.
- 예시: 다단계 비즈니스 프로세스를 관리하기 위해 워크플로 엔진을 사용.
- 오케스트레이션
43. Choreography
- 정의: 각 서비스가 독립적으로 이벤트를 통해 다른 서비스와 상호작용하며, 중앙 조정자 없이 작동하는 서비스 상호작용 패턴.
- 예시: 이벤트 버스를 통해 마이크로서비스가 상호작용하는 Choreography 패턴.
- Choreography vs. Orchestration
44. 서비스 레지스트리
- 정의: 마이크로서비스 인스턴스를 추적하는 데이터베이스.
- 예시: 마이크로서비스 아키텍처에서 Eureka 서비스 레지스트리 사용.
- 서비스 레지스트리와 디스커버리
45. API 속도 제한
- 정의: 특정 시간 내에 클라이언트가 API에 요청할 수 있는 횟수를 제어하는 것.
- 예시: API 남용을 방지하기 위해 분당 100개의 요청으로 제한.
- API 속도 제한
46. 데이터 웨어하우스(Data Warehouse)
- 정의: 보고서 생성 및 비즈니스 데이터 분석을 돕는 시스템; 비즈니스 인텔리전스의 허브.
- 예시: 데이터 웨어하우징에 Amazon Redshift를 도입.
- 데이터 웨어하우스 이해하기
47. 데이터 레이크(Data Lake)
- 정의: 데이터를 네이티브/원시 형식으로 저장하는 시스템 또는 저장소, 일반적으로 객체 블롭이나 파일 형태로 저장.
- 예시: 데이터 레이크에서 구조적 및 비구조적 데이터를 페타바이트 규모로 저장 및 관리.
- 데이터 레이크
48. OLAP(Online Analytical Processing)
- 정의: 데이터베이스에 저장된 데이터를 분석할 수 있는 소프트웨어 카테고리.
- 예시: 정교한 분석 및 임의의 쿼리를 위해 OLAP 큐브 사용.
- OLAP 설명
49. OLTP(Online Transaction Processing)
- 정의: 트랜잭션 중심 애플리케이션을 관리하는 시스템.
- 예시: 은행 시스템과 같은 트랜잭션 데이터 관리를 위한 OLTP 시스템 사용.
- OLTP 설명
50. 빅 데이터
- 정의: 기존 데이터 처리 소프트웨어로는 효율적으로 관리할 수 없는 크고 복잡한 데이터 세트.
- 예시: 패션 트렌드를 예측하기 위해 소셜 미디어 상호작용 분석.
- 빅데이터 소개
마무리
계속 학습하고, 시스템 설계에서 이러한 개념들을 실제로 적용해보는 것이 중요합니다. 프로젝트에 이러한 개념들을 적용하고, 관련된 논의에 참여하면서 배워가세요. 이러한 리소스와 논의는 개념의 용어와 사용 사례에 익숙해지는 데 도움을 줄 것입니다.