📚 Book

    TDD :: 화폐 예제 (1/2)

    TDD :: 화폐 예제 (1/2)

    리듬을 보자. 이 책의 1부에서는 테스트에 의해 주도되는 전형적인 모델 코드를 개발한다. 테스트 주도 개발의 리듬을 보자. 재빨리 테스트 하나 추가 모든 테스트를 실행하고 새로 추가한 것이 실패하는지 확인 코드 수정 모든 테스트를 실행하고 전부 성공하는지 확인 리팩토링을 통해 중복 제거 다중 통화를 지원하는 Money 객체 이런 보고서가 있다고 하자. 종목 주 가격 합계 IBM 1000 25 25000 GE 400 100 40000 합계 65000 다중 통화를 지원하는 보고서를 만들려면 통화 단위를 추가해야 한다. 종목 주 가격 합계 IBM 1000 25USD 25000USD Novartis 400 150CHF 60000CHF 합계 65000USD 또 환율도 명시해줘야 한다. 기준 변환 환율 CHF US..

    TDD :: TDD 를 시작하며

    TDD :: TDD 를 시작하며

    Clean code that works. (작동하는 깔끔한 코드) - Ron Jeffries 테스트 주도 개발의 궁극적인 목표. 개요 많은 요인들은 우리를 깔끔한 코드로부터 멀어지게 만들고 작동하는 코드조차 만들기 어렵게 하는 현실이다. 이런 두려움에 빠지지 말고 자동화된 테스트로 개발을 이끌어가자. 이런 개발 방식이 바로 테스트 주도 개발 ! 테스트 주도 개발은 오직 자동화된 테스트가 실패할 경우에만 새로운 코드를 작성한다. 중복을 제거한다. 이 두 가지 규칙만을 따른다. 위 두 가지 규칙에 의해 프로그래밍 순서는 다음과 같이 결정된다. 빨강 - 실패하는 작은 테스트를 작성한다. 컴파일도 안 될수도 .. 초록 - 빨리 테스트가 통과하게끔 만든다. 무슨 수를 써서라도 ! 리팩토링 - 일단 테스트를 통과시..

    오브젝트 :: Chap4 - 설계 품질과 트레이드오프

    오브젝트 :: Chap4 - 설계 품질과 트레이드오프

    책임 주도 설계라는 이름에서 알 수 있듯 역할, 책임, 협력 중에서 가장 중요한 것은 책임 ! 책임이 객체지향 자체의 품질을 결정하는 것. 객제치향 설계란 올바른 객체에게 올바른 책임을 할당하면서 낮은 결합도와 높은 응집도를 가진 구조를 창조하는 활동 ! 설계는 변경을 위해 존재하고 변경에는 어떤 식으로든 비용이 발생한다. 훌륭한 설계란 합리적인 비용 안에서 변경을 수용할 수 있는 구조로 만드는 것이다. 결합도와 응집도를 합리적인 수준으로 유지하려면 객체의 상태가 아니라 객체의 행동에 초점을 맞추어야 한다. 객체를 단순한 데이터의 집합으로 바라보면 객체 내부 구현을 퍼블릭 인터페이스에 노출시키는 결과를 낳기 때문에 설계가 변경에 취약해짐 이번 장에서는 영화 예매 시스템을 책임이 아닌 상태를 표현하는 데이..

    오브젝트 :: Chap3 - 역할, 책임, 협력

    오브젝트 :: Chap3 - 역할, 책임, 협력

    객체지향 패러다임 관점에서 핵심은 역할(role), 책임(responsibility), 협력(collaboration) ! 객체지향의 본질은 협력하는 객체들의 공동체를 창조 하는 것 ! 협력을 구성하기 위해 적절한 객체를 찾고, 적절한 책임을 할당 하는 과정이 핵심이다. 협력 영화 예매 시스템 돌아보기 객체지향 원칙을 따르는 어플리케이션의 제어 흐름은 특정 한 객체에 의해 통제되지 않고 다양한 객체들 사이에 균형 있게 분배되는 것이 일반적이다. 객체들이 어플리케이션의 기능을 구현하기 위해 수행하는 상호작용을 협력 이라고 한다. 객체가 협력에 참여하기 위해 수행하는 로직은 책임, 객체들이 협력 안에서 수행하는 책임들이 모여 객체가 수행하는 역할 을 구성한다. 협력 두 객체 사이 협력은 하나의 객체가 다른 ..

    오브젝트 :: Chap2 - 객체지향 프로그래밍

    오브젝트 :: Chap2 - 객체지향 프로그래밍

    간단한 온라인 영화 예매 시스템을 통해 객체지향 프로그래밍을 접해보자 영화 예매 시스템 용어 영화 : 영화에 대한 기본 정보 (제목, 상영시간, 가격 정보) 상영 : 실제로 관객들이 영화를 관람하는 사건 사용자가 실제로 예매하는 대상은 영화가 아니라 상영 ! 요구사항 특정 조건을 만족하는 예매자는 요금 할인받기 가능 할인액을 결정하는 두 가지 규칙 할인 조건 순서 조건 : 상영 순번을 이용해 할인 여부 결정 예시) 순번이 10인 경우 매일 10번째 상영 영화 할인 기간 조건 : 상영 시작 시간을 이용해 할인 여부 결정 예시) 월요일, 시작시간 오전 10시, 종료시간 오후 1시인 모든 영화 할인 할인 정책 금액 할인 정책 : 예매 요금에서 일정 금액 할인 예시) 영화 9000원, 금액할인정책 800원 → ..

    오브젝트 :: Chap1 - 객체, 설계

    오브젝트 :: Chap1 - 객체, 설계

    무지성으로 개발만 하다가, 설계에 중요성을 느껴 살펴보게 된 책. 객체지향은 무엇일까? 객체지향적으로 설계한다는 것은 뭐지? 객체지향적인 설계는 어떤 장점을 가져다주는가 등등에 대한 해답을 이 책에서 찾아보려고 한다 프로그래밍 패러다임 프로그래밍에서 패러다임이란, 특정 시대에 수용된 프로그래밍 방법과 문제 해결 방법, 프로그래밍 스타일을 의미한다고 볼 수 있다. 어떤 패러다임을 따르느냐에 따라서 문제를 바라보는 방식과 해결하는 방식이 달라진다. 저자는 객체지향 패러다임 을 설명하고자 이 책을 집필했다고 하고 있다. 객체지향에 대한 어느 정도 유사한 그림을 각자의 머릿속에 그리고, 객체지향의 오해를 제거하는 것이 목적 ! 은총알은 없다 - 프레디 브룩스 객체지향 패러다임은 은총알이 아니다. 언제라도 다른 ..

    Experience Paper : Danaus - Isolation and Efficiency of Container I/O at the Client Side of Network Storage

    Experience Paper : Danaus - Isolation and Efficiency of Container I/O at the Client Side of Network Storage

    Middleware'21 논문 저자 : Giorgos Kappes, Stergios V. Anastasiadis Abstract 컨테이너는 영구적인 스토리지를 통해 stateful 워크로드를 실행하는 데 일반적으로 사용되는 가상화 기술이다. 활용률이 높은 multi-tenent 호스트에서는 시스템 커널에서 리소스 경합으로 인해 종종 컨테이너 I/O 를 비효율적으로 처리한다. 확장성을 위해 분산 스토리지 아키텍처를 가정할 경우 리소스 공유는 경쟁 테넌트의 어플리케이션을 지원하는 클라이언트 호스트에서 특히 문제가 된다. 시스템 커널의 확장성을 높이면 리소스 효율성이 향상될 수 있지만 시스템 서비스에 대한 공정한 접근을 위해 커널을 리팩토링하는 것은 매우 어렵다. 현실적인 대안으로 user-level 에서 실..

    FAASM : Lightweight Isolation for Efficient Stateful Serverless Computing

    FAASM : Lightweight Isolation for Efficient Stateful Serverless Computing

    USENIX ATC'20 논문 저자 : Simon Shillaker, Peter Pietzuch Abstract 서버리스 컴퓨팅은 수천 개의 병렬 기능으로 빠르고 저렴하게 확장할 수 있기 때문에 빅데이터 처리에 매우 적합하다. 기존 서버리스 플랫폼은 function 을 임시 stateless 컨테이너로 분리하여 메모리를 직접 공유하는 것을 방지한다. 이로 인해 사용자는 데이터를 반복적으로 복제하고 직렬화해야 하므로 불필요한 성능 및 리소스 비용이 추가된다. 우리는 function 간에 직접 메모리 공유를 지원하고 리소스 오버헤드를 줄이는 새로운 경량 격리 접근 방식이 필요하다고 생각한다. 고성능 서버리스 컴퓨팅을 위한 새로운 격리 추상화인 Faaslets를 소개한다. Faaslet 은 WebAssembl..