본문 바로가기

server/system design

how to system desgin?

system desgin 질문에서의 파악해야할 4가지

1. 사용자 : 시스템을 누가 어떻게 사용하는가?

2. 스케일 : 시스템 증가에 따른 데이터 처리 방법

3. 성능    : 시스템이 얼마나 빨라야 하는가?

4. 비용    : 어떤 구조가 더 빠르고 효율적인가?

 

 

System desgin 시 생각해야할 사항들

  • 요구 사항에 맞는 제약사항 도출
    • 사용자 수
    • 트래픽, 1년, 5년
    • 파일 저장 용량 - 1년 5년
    • 디비 저장 용량 - 1년 5년
    • 웹 서버 메모리 + 캐시 메모리
  • 사용 API 도출 및 설계
  • API에 따른 디비 설계
  • 서비스에 필요한 기본 알고리즘 도출
    • 수정 및 최적화
  • DB 최적화 ( 용도, 사이즈에 맞는 DB 선택 및 파티셔닝 여부 )
    • 데이터의 성향에 맞는 디비 선택
      • 테이블간의 조인이 많이 필요하면 RDB
      • 확장과 테이터의 타입이 key-value / document / graph 라면 NoSQL서비스에 맞는 디비 선택
    • 쿼리에 따른 인덱스 고려하기
    • 데이터량에 따른 파티션 고려 → 파티션에 따른 검색 최적화 고려
  • 데이터 캐시
    • 수백만명이 보는 첫번째 페이지 캐시
    • 글로벌 서비스일 경우 지역별 캐시
  • 이미지 사용시 사용량에 따른 이미지 서버 확장 및 관리 방법
  • 트래픽과 단일중단점(single point of failure, SPOF)을 고려한 로드밸런스와 서버의 확장
    • 서버(웹서버, 디비서버, 파일서버)의 확장시 데이터를 어떻게 컨트롤 할것인가?
      • 일관된 해싱
    • 2대 vs n대 일때 처리가 가능한가? (해시 생성 서버의 경우 두대만 있어도 충분하다.)

 

 

 

 

추가로 필요한 스킬들

- 다양한 어플리케이션의 성능 모니터링 데이터 습득 ( 요청수 / 오류수 / 평균등답 시간등 )

- 인터뷰는 보통 45~60분 이내 이다.

- 인터뷰어는 처음부터 모든 세부 사항을 말해주지 않는다.(정확히는 말할 수 없는 상황도 있다) 계속 시스템 변경이 일어날것으로 생각하고, 필요한 지점을 계속 물어봐야 한다.

 

 

참고

https://www.youtube.com/watch?v=bUHFg8CZFws&ab_channel=SystemDesignInterview

'server > system design' 카테고리의 다른 글

5. dropbox // google drive  (0) 2021.07.30
4. instagram // Flickr // Picasa  (0) 2021.07.23
3. twitter  (0) 2021.07.21
2. pastebin ( text storage site )  (0) 2021.07.17
1. TinyURL // bitly (URL shortening service)  (0) 2021.07.09