본문 바로가기

로버트 C. 마틴(Robert C. Martin)38

클린 아키텍처:소프트웨어 구조와 설계의 원칙(Clean Architecture) - 5부 : 아키텍처 (18장) [18장] 경게 해부학 시스템 아키텍처는 일련의 소프트웨어 컴포넌트와 그 컴포넌트들을 분리하는 경계의 의해 정의된다. [경계 횡단하기] ‘런타임에 경계를 횡단한다’함은 그저 경계 한 쪽에 있는 기능에서 반대편 기능을 호출하여 데이터를 전달하는 일에 불과하다. 경계는 변경이 전파되는 것을 막는 방화벽을 구축하고 관리하는 수단으로써 존재한다. [두려운 단일체] 아키텍처 경계 중에서 가장 단순하며 가장 흔한 형태는 물리적으로 엄격하게 구분되지 않는 형태다. 이 형태에서는 함수와 데이터가 단일 프로세서에서 같은 주소 공간을 공유하며 그저 나름의 규칙에 따라 분리되어 있을 뿐이다. 배포 관점에서 볼 때 단일체는 경계가 드러나지 않는다. 이러한 아키텍처는 거의 모든 경웨 특정한 동적 다형성에 의존하여 내부 의존성을.. 2020. 3. 12.
클린 아키텍처:소프트웨어 구조와 설계의 원칙(Clean Architecture) - 5부 : 아키텍처 (17장) [17장] 경계: 선 긋기 소프트웨어 아키텍처는 선을 긋는 기술이며, 나는 이러한 선을 경계(boundary)라고 부른다. 경게는 소프트웨어 요소를 서로 분리하고, 경계 한편에 있는 요소가 반대편에 있는 요소를 알지 못하도록 막는다. 핵심적인 업무 로직을 오염시키지 못하게 만들려는 목적으로 쓰인다. 아키텍트의 목표는 필요한 시스템을 만들고 유지하는 데 드는 인적 자원을 최소화하는 것이라는 사실을 상기하자. 시스템의 업무 요구사항, 즉 유스케이스와 아무런 관련이 없는 결정이다. 좋은 시스템의 아키텍처란 이러한 결정이 부수적이며, 결정을 연기할 수 있는 아키텍처다. 이러한 결정을 가능한 한 최후의 순간에 내릴 수 있게 해주며, 결정에 따른 영향이 크지 않게 만든다. [두 가지 슬픈 이야기] [FitNesse.. 2020. 3. 11.
클린 아키텍처:소프트웨어 구조와 설계의 원칙(Clean Architecture) - 5부 : 아키텍처 (16장) [16장] 독립성 좋은 아키텍처는 다음을 지원해야 한다. -시스템의 유스케이스 -시스템의 운영 -시스템의 개발 -시스템의 배포 [유스케이스] 시스템의 아키텍처는 시스템의 의도를 지원해야 한다. 아키텍트의 최우선 관심사는 유스케이스이며, 아키텍처에서도 유스케이스가 최우선이다. 아키텍처는 시스템의 행위에 그다지 큰 영향을 주지 않는다. 행위와 관련하여 아키텍처가 열어 둘 수 있는 선택사항은 거의 없다. 좋은 아키텍처가 행위를 지원하기 위해 할 수 있는 일 중에서 가장 중요한 사항은 행위를 명확히 하고 외부로 드러내며, 이를 통해 시스템이 지닌 의도를 아키텍처 수준에서 알아볼 수 있게 만드는 것이다. [운영] 아키텍처에서 각 컴포넌트를 적절히 격리하여 유지하고 컴포넌트 간 통신 방식을 특정 형태로 제한하지 않.. 2020. 3. 10.
클린 아키텍처:소프트웨어 구조와 설계의 원칙(Clean Architecture) - 5부 : 아키텍처 (15장) [5부] 아키텍처 [15장] 아키텍처란? 소프트웨어 아키텍처는 기술적 성취의 정점에 서 있다. 소프트웨어 아키텍트는 코드와 동떨어져서는 안 된다. 소프트웨어 아키텍트는 최고의 프로그래머이며, 앞으로도 계속 프로그래밍 작업을 맡을 뿐만 아니라 도시에 나머지 팀원들이 생산성을 극대화할 수 있는 설계를 하도록 방향을 이끌어 준다. 소프트웨어 시스템의 아키텍처란 시스템을 구축했던 사람들이 만들어낸 시스템의 형태다. 그 모양은 시스템을 컴포넌트로 분할하는 방법, 분할된 컴포넌트를 배치하는 방법, 컴포넌트가 서로 의사소통하는 방식에 따라 정해진다. 그리고 그 형태는 아키텍처 안에 담긴 소프트웨어 시스템이 쉽게 개발, 배포, 운영, 유지보수되도록 만들어진다. 시스템 아키텍처는 시스템의 동작 여부와는 거의 관련이 없다.. 2020. 3. 9.
클린 아키텍처:소프트웨어 구조와 설계의 원칙(Clean Architecture) - 4부 : 컴포넌트 원칙 (14장) [14장] 컴포넌트 결합 ADP: 의존성 비순환 원칙 컴포넌트 의존성 그래프에 순환이 있어서는 안 된다. 하루 종일 일해서 무언가를 작동하게 만들어 놓고 퇴근했는데, 이튿날 출근해 보면 전혀 돌아가지 않는 경험을 해본 적이 있지 않은가? 왜냐하면 누군가 당신보다 더 늦게까지 일하면서 당신이 의존하고 있던 무언가를 수정했기 때문이다. ‘숙취 증후군’은 많은 개발자가 동일한 소스 파일을 수정하는 환경에서 발생한다. 프로젝트와 개발팀 규모가 커지면 숙취는 지독한 악몽이 될 수도 있다. 2가지 해결책 : ‘주 단위 빌드(weekly build)’, ‘의존성 비순환 원칙(Acyclic Dependencies Principle, ADP)’ 먼저 모든 개발자는 일주일의 첫 4일 동안은 서로를 신경 쓰지 않는다. 개발.. 2020. 3. 8.
클린 아키텍처:소프트웨어 구조와 설계의 원칙(Clean Architecture) - 4부 : 컴포넌트 원칙 (13장) [13장] 컴포넌트 응집도 컴포넌트 응집도와 관련된 세가지 원칙 1.REP: 재사용/릴리스 등가 원칙(Reuse/Release Equivalence Principle) 2.CCP: 공통 폐쇄 원칙(Common Closure Principle) 3.CRP: 공통 재사용 원칙(Common Reuse Principle) [REP: 재사용/릴리스 등가원칙] 재사용 단위는 릴리스 단위와 같다. 릴리스 번호가 없다면 재사용 컴포넌트들이 서로 호환되는지 보증할 방법이 전혀 없다. 릴리스 절차에는 적절한 공지와 함께 릴리스 문서 작성도 포함되어야 한다. 그래야 개발자가 충분한 정보를 바탕으로 새 릴리스를 통합할지, 한다면 언제 할지를 결정할 수 있다. 컴포넌트를 구성하는 모든 모듈은 서로 공유하는 중요한 테마나 목적이.. 2020. 3. 7.