내가 개발해볼게!!
원티드 프리온보딩 백엔드 챌린지 7월 | Week 1-1 기술 면접에서 시스템 설계 문제가 가지는 의미 본문
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
'외부활동' 카테고리의 다른 글
원티드 프리온보딩 백엔드 챌린지 7월 | Week 1-2 사용자 수에 따른 규모를 확장하는 방법 1편 (0) | 2023.07.19 |
---|