책/CleanArchitecture

    클린 아키텍처 17장, 18장, 19장 리뷰

    17장 경계: 선 긋기 경계 경계는 한편에 있는 요소가 반대편에 있는 요소를 알지 못하도록 막는다. 프로젝트 초기에 작성되는 경우도 있고, 매우 나중에 그어지는 경우도 있다. 초기에 경계를 긋는 경우 가능한 한 결정을 오랫동안 연기시키기 위해. 즉, 핵심적인 업무 로직을 오염시키지 못하게 만들려는 목적 경계를 지어야하는 이유 시스템의 업무 요구사항과 관련없는 결정에 따른 결합은 생산성을 떨어트리기 때문. (프레임워크, DB, 웹서버, 유틸리티 라이브러리, 의존성 주입 등에 대한 결정) 좋은 아키텍처는 이러한 결정에 의존하지 않는다. Good Example 어떠한 DB를 사용할 것인지에 대한 결정 어떤 DB를 사용하더라도 상관없는 형태로 설계함으로써 의도적으로 DB에 대한 결정을 미루었다. 방법 : 모든 ..

    클린 아키텍처 15장, 16장 리뷰

    15장 아키텍처란? 소프트웨어 아키텍트는 최고의 프로그래머이며, 코드와 동떨어져서는 안된다. 동시에,나머지 팀원들이 생산성을 극대화 할 수 있는 설계를 하도록 이끈다. 아키텍처의 주된 목적은 시스템의 생명주기를 지원하는 것이다. 좋은 아키텍처는 시스템을 쉽게 이해하고, 쉽게 개발하며, 쉽게 유지보수하고, 쉽게 배포하게 해준다. 아키텍처의 궁극적인 목표는 시스템의 수명과 관련된 비용은 최소화하고, 프로그래머의 생산성은 최대화하는데 있다. 개발 개발하기 힘든 시스템이라면 수명이 길지도 않고 건강하지도 않을 것이다. 시스템 아키텍처는 개발팀이 시스템을 쉽게 개발할 수 있도록 만들어야 한다.배포소프트웨어 시스템이 사용될 수 있으려면 반드시 배포할 수 있어야 한다. 배포 비용이 높을수록 시스템의 유용성은 떨어진다..

    클린 아키텍처 12장, 13장, 14장 리뷰

    12장 컴포넌트 컴포넌트 : 시스템의 구성 요소로 배포할 수 있는 가장 작은 단위 컴파일러형 언어 : 바이너리 파일의 결합체 인터프리터형 언어 : 소스 파일의 결합체 ex) java - .jar , ruby - .gem , .net -> .dll 컴포넌트가 마지막으로 어떤 형태로 배포되든, 잘 설계된 컴포넌트라면 반드시 독립적으로 배포가 가능해야 하며 독립적으로 개발 가능한 능력을 갖춰야 한다. 컴포넌트의 간략한 역사 소프트웨어 개발 초창기 : 프로그램이 로드될 주소 직접 제어 구시대의 라이브러리 함수 접근 : 라이브러리 함수의 소스 코드를 application 코드에 직접 포함시켜 단일 프로그램으로 컴파일 이 때문에, 컴파일 과정 오래 걸리고, 메모리는 한정적 컴파일 시간 단축을 위해 함수 라이브러리를..

    클린 아키텍처 8장, 9장, 10장, 11장 리뷰

    8장 OCP : 개방폐쇄 원칙 소프트웨어 개채(artifact)는 확장에 열려 있어야 하며, 변경에는 닫혀 있어야 한다. 개체의 행위는 확장할 수 있어야 하지만, 이 때 산출물을 변경해서는 안된다. 사고 실험 A기능을 이용해 B형태로 보여주는 기능이 있다 이 때, B 형태에 추가적인 사항이 생겨 새로운 C 형태로 보여주는 기능이 추가 되어야 할 때 이상적인 코드 변경량 : 0 (변경되는 코드의 양을 최소화해야한다.) 위 그림에서 FinancialDataMapper은 구현관계를 통해, FinancialDataGateway를 알고 있지만, FinancialDataGateway는 FinancialDataMapper를 알지 못한다. : 인터페이스 : 데이터 구조 -> : 호출 관계 -ᐅ : 구현 / 상속 관계 ..

    클린 아키텍처 6장, 7장 리뷰

    6장 함수형 프로그래밍(FP) FP 패러다임의 람다(lambda)계산법으로 1930년 발명 정수를 제곱하기 리스프에서 파생한 클로저(Clojure)는 함수형 언어 Java는 가변 변수(Mutable Variable) 사용 - 가변 변수는 프로그램 실행중에 상태가 변할 수 있다. 클로저는 이러한 가변 변수 존재 X 함수형 언어에서는 변수는 한 번 초기화되면 절대로 변하지 않는다. 불변성(Immutable)과 아키텍처 가변 변수에 의해 아키텍처에서 발생하는 문제 Race Condition DeadLock 동시 업데이트(Concurrent Update) 아키텍트는 동시성(Concurrency) 문제에 대해 고려할 줄 알아야한다. 가변성의 분리 불변성과 관련하여 가변 컴포넌트와 불변 컴포넌트를 분리하는 것이 중..

    클린 아키텍처 1장, 2장, 3장, 4장, 5장 리뷰

    클린 아키텍처 1장. 설계와 아키텍처 설계(design) vs 아키텍처(architecture) 전체 설계의 구성요소 관점에서는 설계와 아키텍처를 구분지을 필요 X 아키텍처는 고수준, 설계는 저수준의 세부사항이라고 하지만 건축/SW 설계에서는 개별적으로 존재할 수 없다. 좋은 SW 설계의 목표 필요한 시스템을 만들고 유지보수하는데 투입되는 리소스를 최소화 새로운 feature 때마다 비용이 증가한다면 나쁜 설계 나쁜 신호 직원이 많아지지만, 코드 생산성(LoC)가 그대로라면 생산성은 떨어지는 것 시스템 급하게 개발, 코드와 설계의 구조를 클린하게 하고자하지 않으면 생산성은 떨어짐 토끼 개발자와 거북이 개발자 토끼 개발자 : 일만 계속하지만, 설계의 중요성을 알고서도 실천하지않음. 생산성 유지할 수 있을 ..