성장하는 인삼의 지식 블로그

[Book - Clean Code] 12. 창발성

창발적 설계로 깔끔한 코드를 구현하자 켄트 벡이 제시한 단순한 설계 규칙 네 가지가 소프트웨어 설계 품질을 크게 높여준다고 믿는다. 아래 규칙을 따르면 설계는 ‘단순하다’고 말한다. 모든 테스트를 실행한다. 중복을 없앤다. 프로그래머 의도를 표현한다. 클래스와 메서드 수를 최소로 줄인다. 단순한 설계 규칙 1: 모든 테스트를 실행...

[Book - 가상 면접 사례로 배우는 대규모 시스템 설계 기초] 5. 안정 해시 설계

수평적 규모 확장성을 달성하기 위해서는 요청 또는 데이터를 균등하게 나누는 것이 중요하다. 안정 해시는 이 목표를 달성하기 위해 보편적으로 사용하는 기술이다. 해시 키 재배치(rehash) 문제 서버들에 부하를 균등하게 나누는 보편적 방법은 아래의 해시 함수를 사용하는 것이다. serverIndex = hash(key) % N (N은 서버의 개수...

[Book - 가상 면접 사례로 배우는 대규모 시스템 설계 기초] 4. 처리율 제한 장치의 설계

설계에 앞서, API에 처리율 제한 장치를 두면 좋은 점을 살펴보자. DoS 공격에 의한 자원 고갈을 방지할 수 있다. 비용을 절감한다. 서버를 많이 두지 않아도 된다. 우선순위가 높은 API에 더 많은 자원을 할당할 수 있다. 서버 과부하를 막는다. (트래픽 제어) 1단계 문제 이해 및 설...

[Book - 가상 면접 사례로 배우는 대규모 시스템 설계 기초] 3. 시스템 설계 면접 공략법

효과적 면접을 위한 4단계 접근법 1단계 문제 이해 및 설계 범위 확정 요구사항을 받았다면 깊이 생각하여 요구사항을 정확히 이해하는 데 필요한 질문을 하자. 구체적으로 어떤 기능을 만들어야 할지 사용자 및 트래픽 규모는? 회사가 주로 사용하는 기술 스택은? etc.. 2단계 개략적인 설계안 제시 및 동의 구하기 개략적인 설계안을 ...

[Book - 가상 면접 사례로 배우는 대규모 시스템 설계 기초] 2. 개략적인 규모 추정

응답지연 수치 분석 결론 메모리는 빠르지만 디스크는 아직도 느리다. 디스크 탐색(seek)은 가능한 한 피하라. 단순한 압축 알고리즘은 빠르다. 데이터를 인터넷으로 전송하기 전에 가능하면 압축하라. 데이터 센터는 보통 여러 지역(region)에 분산되어 있고, 데이터 센터들 간에 데이터를 주고받는 데는 시간이 걸린다.

[Book - 가상 면접 사례로 배우는 대규모 시스템 설계 기초] 1. 사용자 수에 따른 규모 확장성

단일 서버 사용자 요청 처리 흐름 도메인명(www.google.com) 접속 DNS 조회 결과로 IP 주소(172.217.25.164) 반환 해당 IP 주소로 HTTP 요청 전달 요청을 받은 웹 서버가 HTML 페이지 및 JSON 형태의 응답 반환 데이터베이스 사용자가 늘면...

[Book - Clean Code] 9. 단위 테스트

TDD 법칙 세 가지 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 실제 코드와 맞먹을 정도로 방대한 테스트 코드는 심각한 관리 문제를 유발하기도 한다. 깨끗한 테스트 코드 ...

© Yn3. Some rights reserved.