cleanArchitecture(39)
-
27장. '크고 작은 모든' 서비스들
소개 클린아키텍처: 소프트웨어 구조와 설계의 원칙 책을 읽고 정리하며 소감을 적는 포스트입니다. '크고 작은 모든' 서비스들 서비스 지향 아키텍처와 마이크로서비스 아키텍처가 최근 큰 인기를 끌고 있는 이유는 다음과 같다. 서비스를 사용하면 상호 결합이 철저하게 분리되는 것처럼 보인다. 나중에 보겠지만, 일부만 맞는 말이다. 서비스를 사용하면 개발과 배포 독립성을 지원하는 것처럼 보인다. 나중에 보겠지만, 일부만 맞는 말이다. 서비스 아키텍처? 서비스를 사용한다는 것인 본질적으로 아키텍처에 해당하는가? 개념적으로는 아니다. 시스템의 아키텍처는 의존성 규칙을 준수하며 고수준의 정책을 저수준의 세부사항으로부터 분리하는 경계에 의해 정의 된다. 단순히 애플리케이션의 행위를 분리할 뿐인 서비스라면 값비싼 함수 호..
2023.05.31 -
26장. 메인(Main) 컴포넌트
소개 클린아키텍처: 소프트웨어 구조와 설계의 원칙 책을 읽고 정리하며 소감을 적는 포스트입니다. 메인(Main) 컴포넌트 모든 시스템에는 최소한 하나의 컴포넌트가 존재하고, 이 컴포넌트가 나머지 컴포넌트를 생성하고, 조정하며 관리한다. 나는 이 컴포넌트를 메인(Main)이라고 부른다. 궁극적인 세부사항 메인 컴포넌트는 궁극적인 세부사항으로, 가장 낮은 수준의 정책이다. 메인은 시스템의 초기 진입점이다. 운영체제를 제외하면 어떤 것도 메인에 의존하지 않는다. 의존성을 주입하는 일은 바로 메인 컴포넌트에서 이뤄져야 한다. 메인에 의존성이 일단 주입되고 나면, 메인은 의존성 주입 프레임워크를 사용하지 않고도 일반적인 방식으로 의존성을 분배할 수 있다. 메인을 가장 지저분한 컴포넌트라고 생각하면 된다. 아래는 ..
2023.05.30 -
25장. 계층과 경계
소개 클린아키텍처: 소프트웨어 구조와 설계의 원칙 책을 읽고 정리하며 소감을 적는 포스트입니다. 계층과 경계 시스템이 세 가지 컴포넌트(UI, 업무 규칙, 데이터베이스)로만 구성된다고 생각하기 쉽다. 하지만 대다수의 시스템에서 컴포넌트 개수는 이보다 훨씬 많다. 움퍼스 사냥 게임 1972년에 발매된 인기있는 모험게임인 움퍼스 사냥(Hunt thw Wumpus)는 텍스트를 기반으로 하는 GO EAST와 SHOOT WEST와 같은 매우 단순한 명령어를 사용한다. 여기서 텍스트 기반 UI는 그대로 유지하되, 게임 규칙과 UI를 분리해서 우리 제품을 여러 시장에서 다양한 언어로 발매할 수 있게 만든다고 가정해 보자. 게임 규칙은 언어 독립적인 API를 사용해서 UI 컴포넌트와 통신할 것이고, UI는 API를 사..
2023.05.30 -
24장. 부분적 경계
소개 클린아키텍처: 소프트웨어 구조와 설계의 원칙 책을 읽고 정리하며 소감을 적는 포스트입니다. 부분적 경계 아키텍처 경계를 완벽하게 만드는 데는 비용이 많이 든다. 엄청난 노력을 기울여야 하고, 유지하는 데도 또 엄청난 노력이 든다. 많은 경우에, 뛰어난 아키텍트라면 이러한 경계를 만드는게 비용이 너무 많이 든다고 판단하면서도, 나중에 필요할 수도 있으니 경계에 필요한 공간을 확보하기 원할 수 있다. 애자일 커뮤니티에 속한 사람 중 많은 이가 이러한 종류의 선행적인 설계를 탐탁지 않게 여기는데, YAGNI(You Aren't Going to Need It) 원칙을 위반하기 때문이다. 하지만 아키텍트라면 이 문제를 검토하면서 "그래, 하지만 어쩌면 필요할지도."라는 생각이 든다면 부분적 경계(partia..
2023.05.29 -
23장. 프레젠터와 험블 객체
소개 클린아키텍처: 소프트웨어 구조와 설계의 원칙 책을 읽고 정리하며 소감을 적는 포스트입니다. 프레젠터와 험블 객체 프레젠터는 험블 객체(Humble Object) 패턴을 따른 형태로, 아키텍처 경계를 식별하고 보호하는 데 도움이 된다. 실제로 이전 장 "클린 아키텍처"는 험블 객체 구현체들로 가득 차 있다. 험블 객체 패턴 험블 객체 패턴은 디자인 패턴으로 테스트하기 어려운 행위와 테스트하기 쉬운 행위를 단위 테스트 작성자가 분리하기 쉽게 하는 방법으로 고안되었다. 아이디어는 매우 단순하다. 행위들을 두 개의 모듈 또는 클래스로 나눈다. 이들 모듈 중 하나가 험블(Humble)이다. 가장 기본적인 본질은 남고, 테스트 하기 어려운 행위를 모두 험블 객체로 옮긴다. 나머지 모듈에는 험블 객체에 속하지 ..
2023.05.29 -
22장. 클린 아키텍처
소개 클린아키텍처: 소프트웨어 구조와 설계의 원칙 책을 읽고 정리하며 소감을 적는 포스트입니다. 클린 아키텍처 지난 수십 년간 시스템 아키텍처들이다. 육각형 아키텍처(Hexagonal Architecture) 포트와 어댑터(Ports and Adapters)라고도 알려졌으며, 앨리스터 코오빈(Alistair Cockburn)이 개발했다. 그리고 스티브 프리먼(Steve Freeman)과 냇 프라이스(Nat Pryce)가 그들의 훌륭한 저서인 테스트 주도 개발로 배우는 객체지향 설계와 실천에서 차용했다. DCI(Data, Context and Interaction) 제임스 코플리언(James Coplien)과 트리그베 린스쿠주(Trygve Reenskaug)가 만들었다. BCE(Boundary-Contro..
2023.05.28