Clean Architecture

33 posts

클린아키텍쳐-프레임워크는 세부사항이다.

프레임워크는 세부사항이다. 아무리 해도 프레임워크는 아키텍처가 될수 없다. 프레임워크 제작자는 당신이 풀어야 할 특별한 관심사를 염두에 두지 않는다. 프레임워크와의 결합은 우리가 만들어 놓은 프로그램을 프레임워크에 틀에 맞춰 버린다. 이 상황에서 모든 위험과 부담은 우리가 감수한다. 프레임워크와 결혼하지 말라. 프레임워크

1 min read

클린아키텍쳐-데이터베이스는 세부사항이다

데이터베이스는 세부사항이다. 아키텍처 관점에서 볼 때 데이터베이스는 엔티티가 아니다. 즉 데이터베이스는 세부사항이라서 아키텍처의 구성요소 수준으로 끌어 올릴수 없다. 데이터 베이스는 데이터 모델이 아니다. 데이터 베이스는 일개 소프트웨어 일 뿐이다. 관계형 데이터베이스 애드거 커드는 1970년에 관계형 데이터 베이스의 원

3 min read

클린아키텍쳐-클린 임베디드 아키텍처

클린 임베디드 아키텍처 먼저 동작하게 만들어라 소프트웨어가 동작하지 않는다면 사업은 망한다. 그리고 올바르게 만들어라 코드를 리팩터링해서 당신을 포함한 나머지 사람들이 이해할 수 있게 만들고 요구가 변경되거나 요구를 더 잘 이해하게 되었을 때 코드를 개선할 수 있게 만들어라. 그리고 빠르게 만들어라 코드를 리팩터링해서 요

2 min read

클린아키텍쳐-테스트 경계

테스트 경계 테스트는 시스템의 일부이며 아키텍처에도 관여한다. 시스템 컴포넌트인 테스트 테스트는 태생적으로 의존성 규칙을 따른다. 테스트는 세부적이며 구체적인것 의존성은 항상 테스트 대상이 되는 코드를 향한다. 테스트는 시스템 컴포넌트 중에서 가장 고립되어 있다. 테스트를 고려한 설계 테스트가 지닌 극단적인 고립성이 테스

3 min read

클린아키텍쳐-크고 작은 모든 서비스들

크고 작은 모든 서비스들 SOA 와 MSA가 최근 큰인기를 끌고 있다. 그 이유는? 서비스를 사용하면 상호 결합이 철저하게 분리되는 것처럼 보인다.(이는 일부만 맞는 말이다.) 서비스를 사용하면 개발과 배포 독립성을 지원하는 것처럼 보인다.(이는 일부만 맞는 말이다.) SOA 아키텍처 관점에서 꼭 중요하다보 볼수는 없다.

3 min read

클린아키텍쳐-메인 컨포넌트

메인 컨포넌트 모든 시스템에는 최소한 하나의 컴포넌트가 존재하고 나머지 컴포넌트를 생성하고 조정하며 관리한다. 메인 컴포넌트는 궁극적인 세부사항으로 가장 낮은 수준의 정책이다. 메인은 시스템 초기 진입점이다. 운영체제를 제외하면 어떤 것도 메인에 의존하지 않는다. 의존성 주입 프레임워크를 이용해 의존성을 주입은 바로 이

1 min read

클린아키텍쳐-계층과 경계

계층과 경계 시스템이 세가지 컴포넌트로(UI, 업무규칙, 데이터베이스)로만 구성된다고 생각하기 쉽다. 몇몇 단순한 시스템에서는 이 정도로 충분하다. 대다수의 시스템에서 컴포넌트의 개수는 이보다 훨씬 많다. 시스템에서 아키텍처의 경계를 발견하는 법을 차근차근 설명하고 있다. 변경의 축에서 정의되는 아키텍처 경계를 가로지르고

2 min read

클린아키텍쳐-부분적 경계

부분적 경계 아키텍처 경계를 완벽하게 만드는 데는 비용이 많이 든다. 마지막 단계를 건너뛰기 부분적 경계를 생성하는 방법 하나는 독립적으로 컴파일하고 배포할 수 있는 컴포넌트를 만들기위한 작업은 모두 수행한 후, 단일 컴포넌트에 그대로 모아만 두는 것이다. 일차원 경계 완벽한 형태의 아키텍처 경계는 양방향으로 격리된 상태

2 min read

클린아키텍쳐-프레젠터와 험블객체

프레젠터와 험블객체 프레젠터는 험블 객체 패턴을 따른 형태로 아키텍처 경계를 식별하고 보호하는데 도움이 됨 험블 객체 패턴 디자인 패턴으로, 테스트하기 어려운 행위와 테스트하기 쉬운 행위를 단위 테스트 작성자가 분리하기 쉽게 하는 방법으로 고안 되었다. 프레젠터와 뷰 뷰는 험블 객체이고 테스트 하기 어렵다. 이 객체에 포

2 min read

클린아키텍쳐-클린 아키텍처

클린 아키텍처 육각형 아키텍처 data context and interaction(DCI) boundary control entity(BCE) 이들 아키텍처는 세부적인 면에서는 다소 차이가 있더라도 그내용은 상당히 비슷하다. 이들의 목표는 같은데 바로 관심사의 분리이다. 이들 아키텍처는 모두 시스템이 다음과 같은 특징을

3 min read

클린아키텍쳐-소리치는 아키텍처

소리치는 아키텍처 아키텍처의 테마 이바 야콥슨이 Object Oriented Software Engineering이란 책에서 소프트웨어 아키텍처도 애플리케이션 유스케이스에 대해 소리처야 한다라고 말한다. 아키텍처를 프레임워크 중심으로 만들어버리면 유스케이스가 중심이 되는 아키텍처는 절대 나올수 없다. 아키텍처의 목적 좋은

3 min read

클린아키텍쳐-업무규칙

업무규칙 업무규칙은 사업적으로 수익을 얻거나 비용을 줄일 수 있는 규칙 또는 절차다. 컴퓨터상으로 구현했는지와 상관없이, 업무규칙은 사업적으로 수익을 얻거나 비용을 줄일 수 있어야 한다. 핵심 규칙과 핵심 데이터는 본질적으로 결합되어 있기 때문에 객체로 만들 좋은 후보가 된다. 우리는 이러한 유형의 객체를 엔티티라고 한다

3 min read

클린아키텍쳐-정책과수준

정책과수준 소프트웨어 시스템이란 정책을 기술한것 동일한 이유로 동일한 시점에 변경되는 정책은 동일한 수준에 위치하며, 동일한 컴포넌트에 속해야 한다. 수준 수준을 엄밀하게 정의하자면 입력과 출력까지의 거리이다. 시스템의 임력과 출력 모두로부터 멀리 위치할수록 정책의 수준은 높아진다. 입력과 출력을 다루는 정책이라면 시스템

2 min read

클린아키텍쳐-경계 해부학

경계 해부학 경계 횡단하기 런타임에 경계를 횡단한다. 적절한 위치에서 경계를 횡단하게 하는 비결은 소스코드 의존성 관리에 있다. 두려운 단일체 아키텍처 경계 중에서 가장 단순하며 가장 흔한 형태는 물리적으로 엄격하게 구분되지 않는 형태다. 이 형태에선 함수와 데이터가 단일 프로세서에서 같은 주소 공간을 공유하며 그저 나름

4 min read

클린아키텍쳐-선긋기

선긋기(Boundaries) 소프트웨어 아키텍처는 선을 긋는 기술이며 이 선을 경계라 부른다. 관련이 있는 것과 없는 것 사이에 선을 긋는다. 경계는 변경의 축이 있는 지점에 그어진다. GUI와 업무 규칙과는 다른 시점에 다른 속도로 변경되므로 둘사이엔 반드시 경계가 필요하다. 단일 책임 원칙은 어디에 경계를 그어야 할지

1 min read

클린아키텍쳐-독립성

독립성 좋은 아키텍처는 다음을 지원해야 된다. 시스템의 유즈케이스 시스템의 운영 시스템의 개발 시스템의 배포 유즈케이스 시스템의 아키텍처는 시스템의 의도를 지원해야 한다는 뜻이다. 운영 운영 관점에서는 덜 실질적이며 덜 피상적인 업무를 맡는다. 개발 시스템을 설계하는 조직이라면 어ㅣ뜬지 그 조직의 의사소통 구조와 동일한

4 min read

클린아키텍쳐-아키텍처란?

아키텍처란? 소프트웨어 아키텍트는 프로그래머이며, 앞으로도 계속 프로그래머로 남는다. 아키텍처의 주된 목적은 시스템 생명주기를 지원하는 것이다. 시스템의 수명과 관련된 비용은 최소화하고, 프로그래머의 생산성은 최대화하는 데 있다. 개발 팀 구조가 다르다면 아키텍처 관련 결정에서도 차이가 난다. 일례로 팀이 개발자 다섯 명

5 min read

클린아키텍쳐-컴포넌트 결합도

컴포넌트 결합도 ADP: 의존성 비순환 원칙 컴포넌트 의존성 그래프에 순환이 있어서는 안된다. 숙취 증후군은 많은 개발자가 동일한 소스파일을 수정하는 환경에서 발생한다. 해결책으로 두가지 방법이 있다 주단위 빌드 의존성 비순환 원칙 주 단위 빌드 일주일에 4일동안은 서로를 신경쓰지 않다가 금요일날 변경된 코드를 통합하여

4 min read

클린아키텍쳐-컴포넌트 응집도

컴포넌트 응집도 어떤 클래스는 어떤 컴포넌트에 포함시켜야 할까? REP : 재사용/릴리스 등가 원칙 CCP : 공통 폐쇄 원칙 CRP : 공통 재사용 원칙 REP : 재사용/릴리스 등가 원칙 재사용 단위는 릴리스 단위와 같다. 메이븐, 라이닝언, RVM 같은 모듈 관리 도구가 등장한 시기 이 기간에 재사용 가능한 컴포넌트

3 min read

클린아키텍쳐-컴포넌트

컴포넌트(Components) 컴포넌트는 배포 단위다. 컴포넌트는 시스템의 구성 요소로 배포할 수 있는 가장 작은 단위다. 잘설계된 컴포넌트라면 반드시 독립적으로 배포 가능한 따라서 독립적으로 개발 가능한 능력을 갖춰야 한다. 링킹 로더의 등장으로 프로그래머는 프로그램을 개별적으로 컴파일하고 로드 할수있는 단위로 분할할수

2 min read

클린아키텍쳐-리스코프 치환 원칙

리스코프 치환 원칙(LSP Liskov Substitution Principle) 1988년 바바라 리스코프는 하위 타입을 아래와 같이 정의했다. 상속을 사용하도록 가이드하기 정사각형/ 직사각형 문제 아키텍처 관점에서 LSP를 이해하는 최선의 방법은 이원칙을 어겼을때 시스템 아키텍처에ㅓㅅ 무슨일이 일어나는지 관찰하는 것이

2 min read

클린아키텍쳐-개방 폐쇄 원칙

개방 폐쇄 원칙(OCP, Open Closed Principle) 버트란트 마이어가 1988년에 만들었는데 컴포넌트의 의존성 방향은 단방향으로 할려고 해야 되고 화살표 방향은 변경으로부터 보호하려는 컴포넌트를 향하도록 그려야 한다. 컴포넌트의 방향성을 제어하기 위해 컴포넌트를 추가 하기도 한다. 시스템을 컴포넌트 단위로

2 min read

클린아키텍쳐-단일책임원칙

단일책임원칙(SRP: The Single Responsibility Principle) 이름만으로 헷갈릴수가 있다 모듈이 하나의 일만 해야 된다는 것으로 하나의 일만 해야 되는것은 함수이다. 단일 모듈의 변경이유는 하나여야만 한다. 모듈이란 무엇인가? 응집된 집합 단일 책임을 묶어주는 힘은 응집성이다. 징후1: 우발적 중

4 min read

클린아키텍쳐-설계원칙

클린아키텍쳐 설계원칙 좋은 소프트 웨어 시스템은 클린코드로 부터 시작한다. 좋은 벽돌로 좋은 아키텍쳐를 정의하는 원칙이 SOLID 이다. SOLID는 함수와 데이터구조를 클래스로 배치하는 방법 그리고 이들 클래스를 서로결합하는 방법을 설명해준다. SRP : 단일책임원칙 모듈의 변경이유는 단하나여야 한다. OCP : 개방폐

2 min read

클린아키텍쳐-함수형 프로그래밍

클린아키텍쳐 함수형 프로그래밍 함수형 프로그래밍 개념은 프로그래밍 그 자체보다 앞서 등장했다. 이 패러다임에서 핵심이 되는 기반은 람다 계산법으로 알론조 처치가 1930년대 발명했다 클로저와 자바의 극단적인 차이를 집어보면 자바는 가변변수를 사용하는데 클로저는 불변변수를 사용한다. 함수형 언어에서 변수는 변경되지 않는다.

4 min read

클린아키텍쳐-구조적 프로그래밍

클린아키텍쳐 객체지향 프로그래밍 객체 지향이란 무엇인가? 데이터와 함수의 조합? 이것은 만족스러운 대답이 아니다. 캡슐화, 상속, 다형성 캡슐화 OO를 정의하는 요소중 캡슐화를 언급하는 이유는 데이터와 함수를 쉽고 효과적으로 캡슐화 하는 방법을 OO언어가 제공하기 때문이다. 헤더와 구현체를 분리하는 방식을 버리면서 강력한

4 min read

클린아키텍쳐-구조적 프로그래밍

클린아키텍쳐 구조적 프로그래밍 데이크스트라가 초기에 인식한 문제는 프로그래밍은 어렵고, 프로그래머는 프로그래밍을 잘하지 못한다는 사실이였다. 데이크스트라는 증명이라는 수학적인 원리를 적용하여 이문제를 해결하고자 했다. 그의 비전은 유클리드 계층구조를 만드는것이였다. 데이크스트라는 이연구를 진행하면서 goto문이 모듈을 더

3 min read

클린아키텍쳐-패러다임 개요

클린아키텍쳐 패러다임 개요 구조적 프로그래밍 최초로 적용된 패러다임은 구조적 프로그래밍으로 데이크스트라가 발견했다. 데이크스트라는 점프(goto 문장)은 프로그램 구조에 해롭다는 사실을 제시 이러한 구조를 (if/then/else do/while/until)로 대채했다. 구조적 프로그래밍은 제어흐름의 직접적인 전환에 대해

4 min read

클린아키텍쳐-두가지 가치에 대한 이야기

클린아키텍쳐 두가지 가치에 대한 이야기 행위 (Behavior) 첫번째 가치는 행위 기계가 수익을 창출하거나 비용을 절약하도록 만들기 위해서이다. 아키텍처 부드러운 제품 소프트웨어가 가진 본연의 목적을 추구하려면 소프트웨어는 부드러워야 한다. 다시 말해 변경하기 쉬워야 한다. 소프트웨어의 개발 비용의 증가를 결정짓는 주된

2 min read

클린아키텍쳐-설계와 아키텍쳐란?

클린아키텍쳐 설계와 아키텍쳐란? 설계와 아키텍쳐와 차이점은 고수준이냐 저수준이냐의 차이일뿐 둘의 차이는 없다. 목표는? 소프트웨어 아키턱처의 목표는 필요한 시스템을 만들고 유지보수하는 데 투입되는 인력을 최소화하는 데 있다. 빨리가는 유일한 방법은 제대로 가는것이다. 참조

1 min read