Study
-
수평적 규모 확장성을 달성하기 위해서는 요청 또는 데이터를 서버에 균등하게 나누는 것이 중요하다.안정 해시는 이 목표를 달성하기 위해 보편적으로 사용하는 기술이다. 보편적인 해시 함수와 문제점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 -
객체지향 설계의 핵심은 책임이다 책임 - 객체지향 애플리케이션 전체의 품질을 결정 객체지향 설계란 올바른 객체에게 올바른 책임을 할당하면서 낮은 결합도와 높은 응집도를 가진 구조를 창조하는 활동설계는 변경을 위해 존재하고 변경에는 어떤 식으로든 비용이 발생한다.-> 훌륭한 설계란 합리적인 비용 안에서 변경을 수용할 수 있는 구조를 만드는 것데이터 중심의 영화 예매 시스템객체지향 설계에서 시스템을 객체로 분할하는 두 가지 방법 상태(데이터)를 분할의 중심축으로 : 객체는 자신이 포함하고 있는 데이터를 조작하는 데 필요한 오퍼레이션을 정의 책임을 분할의 중심축으로 : 객체는 다른 객체가 요청할 수 있는 오퍼레이션을 위해 필요한 상태를 보관객체의 상태객체가 저장해야 하는 데이터의 집합 (상태 = 데이터).객..
[Object] 4장 : 설계 품질과 트레이드오프객체지향 설계의 핵심은 책임이다 책임 - 객체지향 애플리케이션 전체의 품질을 결정 객체지향 설계란 올바른 객체에게 올바른 책임을 할당하면서 낮은 결합도와 높은 응집도를 가진 구조를 창조하는 활동설계는 변경을 위해 존재하고 변경에는 어떤 식으로든 비용이 발생한다.-> 훌륭한 설계란 합리적인 비용 안에서 변경을 수용할 수 있는 구조를 만드는 것데이터 중심의 영화 예매 시스템객체지향 설계에서 시스템을 객체로 분할하는 두 가지 방법 상태(데이터)를 분할의 중심축으로 : 객체는 자신이 포함하고 있는 데이터를 조작하는 데 필요한 오퍼레이션을 정의 책임을 분할의 중심축으로 : 객체는 다른 객체가 요청할 수 있는 오퍼레이션을 위해 필요한 상태를 보관객체의 상태객체가 저장해야 하는 데이터의 집합 (상태 = 데이터).객..
2024.06.13 -
협력객체지향 원칙을 따르는 애플리케이션의 제어 흐름은 어떤 하나의 객체에 의해 통제되지 않고 다양한 객체들 사이에 균형 있게 분배되는 것이 일반적이다.다양한 객체들이 영화 예매라는 기능을 구현하기 위해 메시지를 주고받으면서 상호작용하고 있다.이처럼 객체들이 애플리케이션의 기능을 구현하기 위해 수행하는 상호작용을 협력이라고 한다.객체가 협력에 참여하기 위해 수행하는 로직은 책임</..
[Object] 3장 : 역할 책임 협력협력객체지향 원칙을 따르는 애플리케이션의 제어 흐름은 어떤 하나의 객체에 의해 통제되지 않고 다양한 객체들 사이에 균형 있게 분배되는 것이 일반적이다.다양한 객체들이 영화 예매라는 기능을 구현하기 위해 메시지를 주고받으면서 상호작용하고 있다.이처럼 객체들이 애플리케이션의 기능을 구현하기 위해 수행하는 상호작용을 협력이라고 한다.객체가 협력에 참여하기 위해 수행하는 로직은 책임</..
2024.06.08 -
객체지향 프로그래밍을 향해 진정한 객체지향 패러다임으로의 전환은 Class 가 아닌, Object에 초점을 맞출 때 에만 얻을 수 있다. 어떤 클래스가 필요한지가 아니라, 어떤 객체가 필요한지 고민해야 한다. 클래스는 공통적인 객체들의 상태와 행동을 추상화한 것이다. 따라서 Class를 추상화시키려면 어떤 객체가 필요한지 알아야 한다. 객체는 독립적인 존재가 아니다, 기능 구현을 위해 협력하는 공동체의 일원으로 봐야 한다. 객체를 고립된 존재로 바라보지 말고, 협력에 참여하는 협력자로 바라봐야 한다. 다른 객체에게 도움을 주거나, 의존하면서 살아가는 협력적인 존재이다. 도메인 구조를 따르는 프로그램 구조 도메인(domain)이란 문제를 해결하기 위해 사용자가 프로그램을 사용하는 분야 객체지향 패러다임이 ..
[Object] 2장 : 객체지향 프로그래밍객체지향 프로그래밍을 향해 진정한 객체지향 패러다임으로의 전환은 Class 가 아닌, Object에 초점을 맞출 때 에만 얻을 수 있다. 어떤 클래스가 필요한지가 아니라, 어떤 객체가 필요한지 고민해야 한다. 클래스는 공통적인 객체들의 상태와 행동을 추상화한 것이다. 따라서 Class를 추상화시키려면 어떤 객체가 필요한지 알아야 한다. 객체는 독립적인 존재가 아니다, 기능 구현을 위해 협력하는 공동체의 일원으로 봐야 한다. 객체를 고립된 존재로 바라보지 말고, 협력에 참여하는 협력자로 바라봐야 한다. 다른 객체에게 도움을 주거나, 의존하면서 살아가는 협력적인 존재이다. 도메인 구조를 따르는 프로그램 구조 도메인(domain)이란 문제를 해결하기 위해 사용자가 프로그램을 사용하는 분야 객체지향 패러다임이 ..
2024.05.26 -
티켓 판매 애플리케이션 구현 소프트웨어 모듈이 가져야 하는 세 가지 기능(로버트 마틴) 실행 중에 제대로 동작하는 것 변경을 위해 존재하는 것 코드를 읽는 사람과 의사소통하는 것 무엇이 문제인가 예상을 빗나가는 코드 이해 가능한 코드는 우리의 예상에서 크게 벗어나지 않는 코드 하나의 클래스에서 너무 많은 세부적인 내용들을 다루면 생기는 문제 이해하기 어렵다 변경에 취약하다 변경에 취약한 코드 의존성(dependency)이 높은 코드 어떤 객체가 변경될 때, 그 객체에 의존하는 객체도 변경될 수 있음 결합도(coupling)가 높은 코드 결합도가 높다: 의존성이 강하다 결합도가 낮다: 합리적인 수준으로 의존한다 객체지향 설계의 목표: 객체 사이의 결합도를 낮춰 변경이 용이한 설계는 만드는 것 설계 개선하기..
[Object] 1장 : 객체, 설계티켓 판매 애플리케이션 구현 소프트웨어 모듈이 가져야 하는 세 가지 기능(로버트 마틴) 실행 중에 제대로 동작하는 것 변경을 위해 존재하는 것 코드를 읽는 사람과 의사소통하는 것 무엇이 문제인가 예상을 빗나가는 코드 이해 가능한 코드는 우리의 예상에서 크게 벗어나지 않는 코드 하나의 클래스에서 너무 많은 세부적인 내용들을 다루면 생기는 문제 이해하기 어렵다 변경에 취약하다 변경에 취약한 코드 의존성(dependency)이 높은 코드 어떤 객체가 변경될 때, 그 객체에 의존하는 객체도 변경될 수 있음 결합도(coupling)가 높은 코드 결합도가 높다: 의존성이 강하다 결합도가 낮다: 합리적인 수준으로 의존한다 객체지향 설계의 목표: 객체 사이의 결합도를 낮춰 변경이 용이한 설계는 만드는 것 설계 개선하기..
2024.05.22 -
패러다임의 시대 패러다임이라는 말은 ‘모델’, ‘패턴’, 또는 ‘전형적인 예’를 의미하는 그리스어인 ‘파라데이그마’에서 유래했다. 과거에는 표준적인 모델을 따르거나 모방하는 상황을 가리키는 매우 제한적인 상황에서만 패러다임이라는 단어를 사용했다 하지만 현대인들은 패러다임이라는 단어를 전혀 다른 의미로 사용한다. 우리가 사용하는 패러다임은 한 시대의 사회 전체가 공유하는 이론이나 방법, 문제의식 등의 체계를 의미한다. 패러다임의 개념이 과거와 다른 의미로 바뀐 과정 토마스 쿤의 “과학혁명의 구조” 라는 이름의 책은 과학사에 대한 기존 관점을 뿌리째 흔들었다. 쿤의 책이 출간되기 전까지 과학사에 대한 보편적인 시각은 과학의 발전은 이미 달성된 과학적 성취를 기반으로 새로운 발견을 누적시키거나 오류를 수정하면..
[Object] 들어가며 : 프로그래밍 패러다임패러다임의 시대 패러다임이라는 말은 ‘모델’, ‘패턴’, 또는 ‘전형적인 예’를 의미하는 그리스어인 ‘파라데이그마’에서 유래했다. 과거에는 표준적인 모델을 따르거나 모방하는 상황을 가리키는 매우 제한적인 상황에서만 패러다임이라는 단어를 사용했다 하지만 현대인들은 패러다임이라는 단어를 전혀 다른 의미로 사용한다. 우리가 사용하는 패러다임은 한 시대의 사회 전체가 공유하는 이론이나 방법, 문제의식 등의 체계를 의미한다. 패러다임의 개념이 과거와 다른 의미로 바뀐 과정 토마스 쿤의 “과학혁명의 구조” 라는 이름의 책은 과학사에 대한 기존 관점을 뿌리째 흔들었다. 쿤의 책이 출간되기 전까지 과학사에 대한 보편적인 시각은 과학의 발전은 이미 달성된 과학적 성취를 기반으로 새로운 발견을 누적시키거나 오류를 수정하면..
2024.05.18 -
알림 시스템 설계 시 고려 사항 어떤 종류의 알림을 지원하는지 - 푸시 알림, SMS 메시지, 이메일 실시간 시스템이어야 하는지? - 연성 실시간 시스템이라고 가정. 가능한 한 빨리 전달되어야 하지만 높은 부하가 걸렸을 때 약간의 지연 무방 어떤 종류의 단말을 지원하는지? - iOS, 안드로이드, 랩톱/데스크톱 지원 사용자에게 보낼 알림은 누가 만들 수 있는지? - 클라이언트 어플리케이션 프로그램이 만들 수 도 있고 서버 측에서 스케쥴링할 수도 있음 사용자가 알림을 받지 않도록 설정할 수 있어야 하는지? - 설정할 수 있어야 함 하루에 몇 건의 알림을 보낼 수 있는지? - 천만 건 모바일 푸시 알림, 백만건 SMS 메시지, 5백만 건의 이메일을 보낼 수 있어야 함 개략적인 설계안 각각의 서비스 : 마이크..
알림 시스템 설계알림 시스템 설계 시 고려 사항 어떤 종류의 알림을 지원하는지 - 푸시 알림, SMS 메시지, 이메일 실시간 시스템이어야 하는지? - 연성 실시간 시스템이라고 가정. 가능한 한 빨리 전달되어야 하지만 높은 부하가 걸렸을 때 약간의 지연 무방 어떤 종류의 단말을 지원하는지? - iOS, 안드로이드, 랩톱/데스크톱 지원 사용자에게 보낼 알림은 누가 만들 수 있는지? - 클라이언트 어플리케이션 프로그램이 만들 수 도 있고 서버 측에서 스케쥴링할 수도 있음 사용자가 알림을 받지 않도록 설정할 수 있어야 하는지? - 설정할 수 있어야 함 하루에 몇 건의 알림을 보낼 수 있는지? - 천만 건 모바일 푸시 알림, 백만건 SMS 메시지, 5백만 건의 이메일을 보낼 수 있어야 함 개략적인 설계안 각각의 서비스 : 마이크..
2024.01.16