본문 바로가기

공부방

(7)
[System Design Interview] 07. 분산 시스템을 위한 유일 ID 생성기 설계 분산 시스템 환경에서의 유일 ID 생성분산 시스템 환경에서는, 하나의 DB 서버에서 Auto Increment으로 유일한 ID를 생성하는데 부담이 된다. 그렇다고 여러 DB 서버를 두면 서버 내 ID는 유일성을 보장하지만 서버 전체 범위에서의 유일성은 보장되지 않는다.1. 설계 범위ID는 유일하고 숫자로만 구성된다.ID는 64bit로 표현될 수 있는 값이어야 한다. (2^64-1: 20자리)ID는 발급 날짜에 따라 정렬 가능해야 한다. (ID는 시간의 흐름에 따라 커진다.)초당 10,000개의 ID를 만들 수 있어야 한다.2. 분산 시스템에서 유일성이 보장되는 ID를 만드는 방법다중 마스터 복제 (mulit-master replication)다중 마스터 복제 환경에서 여러 데이터베이스 서버가 각각 ID를..
[Effective Java] 09.일반적인 프로그래밍 원칙 ITEM 57. 지역변수의 범위를 최소화하라지역변수의 유효 범위를 최소로 줄이면 코드 가독성과 유지보수성이 높아지고 오류 가능성은 낮아진다.가장 처음 쓰일 때 선언하기선언과 동시에 초기화하기while 문 보다는 for 문 사용하기메서드를 작게 유지하고 한 가지 기능에 집중하기ITEM 58. 전통적인 for 문보다는 for-each 문을 사용하라반복자와 인덱스를 변수로 사용하지 않으니 코드가 깔끔해지고 오류가 날 일이 없다. 하나의 관용구로 컬렉션과 배열을 모두 처리할 수 있어서 어떤 컨테이너를 다루는지 신경 쓰지 않아도 된다.ITEM 59. 라이브러리를 익히고 사용하라라이브러리를 사용하면 코드 품질을 높이고 애플리케이션 기능 개발에 집중할 수 있다. 메이저 릴리스마다 주목할 만한 기능이 라이브러리에 추가..
[Effective Java] 04.클래스와 인터페이스 ITEM 20. 추상 클래스보다는 인터페이스를 우선하라.둘의 가장 큰 차이는 추상 클래스가 정의한 타입(자료형)을 구현하는 클래스는 반드시 추상 클래스의 하위 클래스가 되어야 한다. 반면 인터페이스가 선언한 메서드를 모두 정의하고 그 일반 규약을 잘 지킨 클래스라면 다른 어떤 클래스를 상속했든 같은 타입으로 취급한다. 추상클래스를 구현했다는 것은 추상클래스가 조상클래스라는 것인데, 이러한 구조는 클래스 계층구조에 큰 혼란을 줄 수 있다. 반대로 인터페이스는 믹스인 타입으로 주된 타입 외에도 특정한 선택적 행위를 제공한다고 선언하는 효과를 주며 유연성을 얻을 수 있다.믹스인(mixin)이란 클래스가 구현할 수 있는 타입으로, 믹스인을 구현한 클래스에 원래의 '주된 타입' 외에도 특정 선택적 행위를 제공한다..
[Effective Java] 03.모든 객체의 공통 메서드 ITEM 10. equals는 일반 규약을 지켜 재정의하라꼭 필요한 경우가 아니면 equals() 함수를 재정의 하지 않는게 좋다. 재정의해야 할 때는 다음 세 가지 규약을 지켜야 한다. 규약을 지키지 못하면 대상 클래스가 이 규약을 준수한다고 가정하는 클래스(HashMap, HashSet)를 오작동하게 만든다.대칭성: null 이 아닌 모든 참조 값 x,y에 대해, x.equals(y)가 true 이면 y.equals(x) 도 true 이다.추이성: null 이 아닌 모든 참조 값 x,y,z에 대해, x.equals(y)가 true 이면 y.equals(z), x.equals(z) 도 true 이다.일관성: null 이 아닌 모든 참조 값 x,y에 대해, x.equals(y)를 반복해서 호출하면 항상 ..
[System Design Interview] 08. URL 단축기 설계 1. 문제 이해 및 설계 범위 확정URL 단축: 주어진 긴 URL을 훨씬 짧게 줄인다.URL redirection: 축약된 URL로 HTTP 요청이 오면 원래 URL로 안내높은 가용성과 규모 확장성, 그리고 장애 감내가 요구됨쓰기 연산: 매일 1억 개의 단축 URL을 생성한다고 가정하면 초당 1160회 발생 (1억 / 24 / 3600 = 1160)읽기 연산: 쓰기 연산과 비율이 10:1 이라고 하면 초당 11600회 발생URL 단축 서비스를 10년 운영한다 가정하면 1억 * 365 * 10 = 3650억 개 레코드 보관. 축약 전 URL의 평균 길이를 100이라고 하면 10년 동안 필요한 저장 용량은 3650억 * 100byte = 36.5TB2. 개략적 설계안 제시 및 동의 구하기API 엔드포인트UR..
[System Design Interview] 01. 사용자 수에 따른 규모 확장성 단일 서버모든 컴포넌트(웹 앱, DB, 캐시 등)가 한 대의 서버에서 실행되는 간단한 시스템.사용자는 도메인 이름(api.mysite.com)을 이용하여 웹사이트에 접속한다. 이 접속을 위해서 도메인 이름을 DNS에 질의하여 IP 주소로 변환하는 과정이 필요하다.DNS 조회 결과로 IP 주소가 반환된다.해당 IP 주소로 HTTP 요청이 전돨된다.요청을 받은 웹 서버는 HTML 페이지나 JSON 형태의 응답을 반환한다.실제 요청은 다음 두 가지 종류의 단말로부터 온다.웹 애플리케이션모바일 앱데이터 베이스사용자가 늘면 서버 하나로 충분하지 않아 여러 서버를 두어야 한다. 하나는 웹/모바일 트래픽 처리 용도고, 다른 하나는 DB용이다. 웹/모바일 트래픽 처리 서버(웹 계층)와 DB 서버(데이터 계층)를 분리하..
[Effective Java] 02. 객체 생성과 파괴 ITEM 01. 생성자 대신 정적 팩터리 메서드를 고려하라장점이름을 가질 수 있다.이름으로 반환 될 객체의 특성을 나타낼 수 있다.호출될 때마다 인스턴스를 새로 생성하지 않아도 된다.같은 객체 요청 상황에 생성 비용이 큰 경우 성능을 높인다.하위 클래스 타입을 반환할 수 있는 유연성이 있다.입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있다.가령 EnumSet 클래스에서는 매개변수의 원소 수에 따라 두 가지 하위 클래스 중 하나의 인스턴스를 반환한다.정적 팩터리 메서드를 작성하는 시점에는 반환할 객체의 클래스가 존재하지 않아도 된다.정적 팩토리 메서드를 활용하면, 반환할 객체의 클래스가 컴파일 타임에 존재하지 않아도 된다. 특정한 하위 타입이 필요한 런타임 시점 때, 정적 팩토리 메서드 내에..