Study
-
훌륭한 객체지향 코드를 얻기 위해서는 클래스가 아니라 객체를 지향해야 한다협력 안에서 객체가 수행하는 책임에 초점을 맞춰야 한다책임이 객체가 수신할 수 있는 메시지의 기반이 된다애플리케이션은 클래스로 구성되지만 메시지를 통해 정의된다. 이번 장은 유연하고 재사용 가능한 퍼블릭 인터페이스를 만드는 데 도움이 되는 설계 원칙과 기법을 살펴보는 것이 주제이다 협력과 메시지객체가 다른 객체에게 접근할 수 있는 유일한 방법은 메시지를 전송하는 것뿐이다.객체는 자신의 희망을 메시지로 전송하고, 이를 수신한 객체는 요청을 적절하게 처리하여 응답한다. 클라이언트-서버 모델두 객체 사이의 협력관계를 설명하기 위해 사용되는 전통적인 클라이언트-서버 모델이다.클라이언트 : 메시지를 전송하는 객체서버 : 메시지를 수신하는 객..
[Object] 6장 : 메시지와 인터페이스훌륭한 객체지향 코드를 얻기 위해서는 클래스가 아니라 객체를 지향해야 한다협력 안에서 객체가 수행하는 책임에 초점을 맞춰야 한다책임이 객체가 수신할 수 있는 메시지의 기반이 된다애플리케이션은 클래스로 구성되지만 메시지를 통해 정의된다. 이번 장은 유연하고 재사용 가능한 퍼블릭 인터페이스를 만드는 데 도움이 되는 설계 원칙과 기법을 살펴보는 것이 주제이다 협력과 메시지객체가 다른 객체에게 접근할 수 있는 유일한 방법은 메시지를 전송하는 것뿐이다.객체는 자신의 희망을 메시지로 전송하고, 이를 수신한 객체는 요청을 적절하게 처리하여 응답한다. 클라이언트-서버 모델두 객체 사이의 협력관계를 설명하기 위해 사용되는 전통적인 클라이언트-서버 모델이다.클라이언트 : 메시지를 전송하는 객체서버 : 메시지를 수신하는 객..
2024.07.09 -
키-값 저장소는 키-값 데이터베이스라고도 불리는 비 관계형 데이터베이스이다. 이 저장소에 저장되는 값은 고유 식별자를 키로 가져야 한다. 키와 값 사이의 이런 연결 관계를 "키-값" 쌍이라고 지칭한다. 키는 유일해야 한다 값은 키를 통해서만 접근할 수 있다키는 일반 텍스트일 수도 있고 해시값일 수도 있다성능 상의 이유로, 키는 짧을수록 좋다값은 문자열일수도, 리스트일 수도, 객체일 수도 있다ex) 아마존 다이나모, memcached, 레디스 등시스템 컴포넌트 이번 절에서는 키-값 저장소 구현에 사용될 핵심 컴포넌트들 및 기술들을 살펴볼 것이다 데이터 파티션 대규모의 애플리케이션의 경우, 전체 데이터를 작은 파티션으로 분할한 다음 여러 대의 서버에 저장해야 한다. 데이터를 파티션 단위로 나눌 때 다음 문제..
키-값 저장소 설계키-값 저장소는 키-값 데이터베이스라고도 불리는 비 관계형 데이터베이스이다. 이 저장소에 저장되는 값은 고유 식별자를 키로 가져야 한다. 키와 값 사이의 이런 연결 관계를 "키-값" 쌍이라고 지칭한다. 키는 유일해야 한다 값은 키를 통해서만 접근할 수 있다키는 일반 텍스트일 수도 있고 해시값일 수도 있다성능 상의 이유로, 키는 짧을수록 좋다값은 문자열일수도, 리스트일 수도, 객체일 수도 있다ex) 아마존 다이나모, memcached, 레디스 등시스템 컴포넌트 이번 절에서는 키-값 저장소 구현에 사용될 핵심 컴포넌트들 및 기술들을 살펴볼 것이다 데이터 파티션 대규모의 애플리케이션의 경우, 전체 데이터를 작은 파티션으로 분할한 다음 여러 대의 서버에 저장해야 한다. 데이터를 파티션 단위로 나눌 때 다음 문제..
2024.07.02 -
수평적 규모 확장성을 달성하기 위해서는 요청 또는 데이터를 서버에 균등하게 나누는 것이 중요하다.안정 해시는 이 목표를 달성하기 위해 보편적으로 사용하는 기술이다. 보편적인 해시 함수와 문제점N개의 서버가 있을 때, 부하를 균등하게 나누기 위해 해시 함수 사용 serverIndex = hash(key) % N(서버의 개수) hash(key0) % 4 = 1인 경우, 클라이언트가 캐시에 보관된 데이터를 가져오기 위해 서버 1에 접속 서버 풀(server pool) 크기가 고정되어 있고, 데이터 분포가 균등할 때 잘 동작한다.하지만 서버가 추가되거나 기존 서버가 삭제되면 문제가 생긴다.1번 서버 장애 -> 1번 동작 중지 -> 서버 풀 크기 3 변경 -> 나머지 서버 인덱스 값들이 달라짐대규모 캐시 미스(c..
안정 해시 설계(hash ring)수평적 규모 확장성을 달성하기 위해서는 요청 또는 데이터를 서버에 균등하게 나누는 것이 중요하다.안정 해시는 이 목표를 달성하기 위해 보편적으로 사용하는 기술이다. 보편적인 해시 함수와 문제점N개의 서버가 있을 때, 부하를 균등하게 나누기 위해 해시 함수 사용 serverIndex = hash(key) % N(서버의 개수) hash(key0) % 4 = 1인 경우, 클라이언트가 캐시에 보관된 데이터를 가져오기 위해 서버 1에 접속 서버 풀(server pool) 크기가 고정되어 있고, 데이터 분포가 균등할 때 잘 동작한다.하지만 서버가 추가되거나 기존 서버가 삭제되면 문제가 생긴다.1번 서버 장애 -> 1번 동작 중지 -> 서버 풀 크기 3 변경 -> 나머지 서버 인덱스 값들이 달라짐대규모 캐시 미스(c..
2024.06.21 -
책임에 초점을 맞춰 설계할 때 직면하는 가장 큰 문제는 어떤 객체에게 어떤 책임을 할당할지를 결정하기 어렵다는 점이다.책임 할당 과정은 일종의 트레이트오프 활동이다.책임 주도 설계를 향해데이터 중심의 설계에서 책임 중심의 설계로 전환하기 위한 원칙 데이터보다 행동을 먼저 결정하라 데이터는 객체가 책임을 수행하는 데 필요한 재료를 제공할 뿐이다.객체를 설계하기 위한 질문의 순서를 바꾸자.데이터 중심의 설계 : "이 객체가 포함해야 하는 데이터가 무엇인가" -> "데이터를 처리하는 데 필요한 오퍼레이션은 무엇인가"책임 중심의 설계 : "이 객체가 수행해야 하는 책임은 무엇인가" -> "이 책임을 수행하는 데 필요한 데이터는 무엇인가"협력이라는 문맥 안에서 책임을 결정하라적합한 책임이란 메시지 수신자가 아니라..
[Object] 5장 : 책임 할당하기책임에 초점을 맞춰 설계할 때 직면하는 가장 큰 문제는 어떤 객체에게 어떤 책임을 할당할지를 결정하기 어렵다는 점이다.책임 할당 과정은 일종의 트레이트오프 활동이다.책임 주도 설계를 향해데이터 중심의 설계에서 책임 중심의 설계로 전환하기 위한 원칙 데이터보다 행동을 먼저 결정하라 데이터는 객체가 책임을 수행하는 데 필요한 재료를 제공할 뿐이다.객체를 설계하기 위한 질문의 순서를 바꾸자.데이터 중심의 설계 : "이 객체가 포함해야 하는 데이터가 무엇인가" -> "데이터를 처리하는 데 필요한 오퍼레이션은 무엇인가"책임 중심의 설계 : "이 객체가 수행해야 하는 책임은 무엇인가" -> "이 책임을 수행하는 데 필요한 데이터는 무엇인가"협력이라는 문맥 안에서 책임을 결정하라적합한 책임이란 메시지 수신자가 아니라..
2024.06.17