내가 개발해볼게!!

원티드 프리온보딩 백엔드 챌린지 7월 | Week 1-1 기술 면접에서 시스템 설계 문제가 가지는 의미 본문

외부활동

원티드 프리온보딩 백엔드 챌린지 7월 | Week 1-1 기술 면접에서 시스템 설계 문제가 가지는 의미

보송송희 2023. 7. 12. 20:07

Session 1 기술 면접에서 시스템 설계 문제가 가지는 의미

 

1) 시스템 설계 문제란

 

1-1 무엇을 원하는가?

구직자의 문제 해결 능력을 파악하는 과정! 정답은 없고, 설계 기술을 면접관들에게 보여주고 설득함으로써 지원자가 협력에 적합한 사람인지, 압박이 심한 상황에서 잘 헤쳐 나갈 자질이 있는지 등을 파악할 수 있는 항목이다. 꼬리 질문이 들어올 수 있는 질문. 

 

1-2 피해야 할 것

설계의 순수성에 집착해 오버 엔지니어링을 하는 경우가 많은데, 오버 엔지니어링은 시스템 전반의 비용 상승을 초래할 수 있기 때문에 주의해야 한다.

 

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

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

깊이 생각하고 올바른 질문을 함으로써 요구사항과 가정을 분명히 하자! 질문이 이해가 안 된다면 '이렇게 이해했는데 면접관의 의도는 이게 맞나요?' 라고 다시 질문을 드리자. 

 

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

개략적인 설계안을 제시하고 면접관의 동의를 얻는 과정. 시스템 규모에 관계된 제약사항들을 만족하는지, 시스템의 구체적 사용 사례를 살펴보자. 

 

2-3 상세 설계

면접관은 대부분 특정 시스템 컴포넌트들의 세부사항에 대한 깊이 있는 설명을 원한다.

 

2-4 마무리

자신의 설계를 비판적으로 바라볼 것!

 

2-5 해야 할 것

  • 질문을 통해 나의 가정이 옳은 가정인지 확인하자.
  • 사용자 수와 관련된 문제의 요구사항을 최대한 이해하자.
  • 면접관과의 소통이 중요하다.

2-6 하지 말아야 하는 것

  • 전형적인 문제들에 대한 대비도 없이 면접장에 가지 말자.
  • 요구사항, 가정이 분명하지 않은 상태에서 설계하지 말자.
  • 면접관과 자주 소통하며 문제를 풀자. 

 

3) 시스템 설계 문제에 어떻게 대비할 것인가?

큰 규모의 회사에 다니고 있지 않으면 직접 경험하기 어렵기 때문에 서적을 통한 간접 경험이 필요하다

📚 가상 면접 사례로 배우는 대규모 시스템 설계 기초

📚 데이터 중심 애플리케이션 설계

📚 마이크로 서비스 패턴

 


 

Session 2 기본 개념 정리

 

1) 가장 기초적인 단일 서버 설계

모든 컴포넌트가 서버 한 대에서 실행되는 가장 기초적인 형태!

① 웹 브라우저, 모바일 앱에서 url을 요청하면 DNS에서 IP 주소를 제공한다.

② ARP를 통해 MAC 주소로 변환하여 웹 서버에 요청한다.

③ 웹 서버가 받은 요청을 기반으로 CRUD를 실행하면 데이터베이스에서 해당 데이터를 반환한다.

④ 웹 서버는 반환받은 데이터를 기반으로 웹/앱의 요청에 대한 응답(HTML, CSS, JS)을 생성해 제공한다.

 

백엔드 측에서 신경쓸 부분은 웹 서버DB단.

 

2) 어떤 데이터베이스를 사용할 것인가: RDBMS vs NoSQL

RDBMS: 관계형 데이터베이스

  • MySQL, Oracle DB, PostgreSQL, ...
    Oracle은 라이센스 때문에 비용이 많이 들어간다. 비용을 아끼려면 다른 RDBMS를 사용해야..
  • 테이블, 열, 컬럼으로 자료를 표현한다.
  • Join을 통해 여러 관계를 합칠 수 있다.

 

NoSQL: 비 관계형 데이터베이스

  • MongoDB, DynamoDB, Cassandra, ...
  • 키-값 저장소, 그래프 저장소, 칼럼 저장소, 문서 저장소 등으로 구분할 수 있다
  • Join 연산은 지원되지 않음

 

CAP 이론

: 적절한 응답 시간 내에 세 가지 속성을 모두 만족시키는 분산 시스템을 구성할 수 없다!

  • 가용성(Availability) 
    모든 노드가 모든 요청에 대해서 정상적인 응답을 해야 한다.

  • 일관성(Consistency)
    모든 노드가 동일한 데이터를 가지고 있어야 한다.

  • 부분 결함(Partition Tolerance)
    시스템에 부분적인 결함이 생겼을 때 시스템이 여전히 작동하고 있어야 한다
    ❓ 가용성과 일관성은 분산 시스템의 특성이지만 부분 결함은 네트워크의 특성.
    하지만 CAP 이론은 세 가지 요소가 모두 분산 시스템의 특성인 것처럼 서술한다.

CA: RDBMS(Oracle, DB2, SQL Server, MySQL)

CP: NoSQL(Big Table, Hbase, MongoDB, Redis)

AP: NoSQL(Cassandra, CouchDB)

 

CQRS Pattern

RDBMS랑 NoSQL을 섞어서 쓸 때 사용하는 패턴.

http://vinsguru.com/cqrs-pattern

 

CQRS Pattern With Spring Boot | Vinsguru

Learn CQRS Pattern with Spring Boot, one of the Microservice Design Patterns to independently scale read and write workloads of an application.

www.vinsguru.com

https://www.youtube.com/watch?v=fg5xbs59Lro&ab_channel=%EC%9A%B0%EC%95%84%ED%95%9C%ED%85%8C%ED%81%AC 

 

3) 규모 확장

수평적 확장(Scale out)

더 많은 서버를 사용하는 것

 

수직적 확장(Scale up)

더 고사양의 서버를 사용하는 것

 

⚠ 수직적 확장의 단점

  • 한 대의 서버에 CPU, 메모리를 무한대로 증설할 방법은 없다
  • 비용이 선형적인 추세보다 훨씬 빠르게 증가한다.

요즘은 수평적 확장 Scale out이 편리해졌기 때문에 선택지가 많다!

예) 클라우드 환경, 쿠버네티스에서 일정 임계치를 넘었을 때 평상시보다 application을 늘림으로써 편하게 사용할 수 있다.

 


 

아하! 모먼트: 첫 회사를 고르는 기준

회사의 처우, 성장 가능성, 워라밸을 보고 판단하라는 말씀을 해주셨다 !

 


 

🙂

개인이 하는 작은 토이 프로젝트만으로는 알 수 없었던 시스템의 규모를 확장하는 방법고려해야 할 요소, 선택지에 대해 자세히 들을 수 있어서 유익했다. 구인 공고마다 올라와 있는 '우대 사항: 대규모 시스템 설계 경험'과 관련된 역량을 신입이 어떻게 키울 수 있나 궁금했는데 책을 통해서나마 간접적으로 경험해보라고 하셔서 빠른 시일 내로 공부해보고 싶다. 추천해주셨던 책들 중에 [가상 면접 사례로 배우는 대규모 시스템 설계 기초]라는 책을 우선적으로 읽어보고 싶다! 

 

 

https://www.wanted.co.kr/events/pre_challenge_be_9

 

프리온보딩 백엔드 챌린지 7월 | 원티드

무료로 양질의 교육을 들어보세요! 챌린저만을 위한 다양한 혜택을 제공해드리고 있습니다.

www.wanted.co.kr