Engineering/Architecture
-
[Domain Driven Design] 도메인 모델 정리Engineering/Architecture 2021. 5. 25. 00:44
도메인 모델 도메인 모델이란 사용자가 당면한 문제 영역을 해결하기 위해 사용하는 소프트웨어를 개발할 때, 이와 관련된 지식에 대한 복잡성을 선택적으로 단순화하고 구조화한 형태이다. 도메인 모델은 도메인 전문가의 머릿속에만 존재하는 지식이 아니라 해당 지식을 구성하고 선택적으로 추상화한 것이다. 도메인 주도 설계에서의 모델의 유용성 모델과 핵심 설계는 서로 영향을 주며 구체화된다. 모델과 구현간의 긴밀한 연결은 모델을 이해한 바에 근거하여 코드를 해석할 수 있기 때문에 유지보수와 계속되는 기능 개선에도 도움이 된다. 모델은 모든 팀 구성원이 사용하는 언어의 중추이다. 모델과 구현이 서로 연결돼 있으므로 개발자는 이 언어를 토대로 프로그램에 관해 의견을 나눌 수 있다. 모델은 지식의 정수만을 뽑아낸 것이다...
-
[Clean Architecture] 컴포넌트 결합Engineering/Architecture 2020. 6. 29. 23:34
이번 포스트에서는 컴포넌트 사이의 관계에 대한 세 가지 원칙에 대해서 정리해보겠습니다. ADP : 의존성 비순환 원칙 (Acyclic Dependencies Principle) 컴포넌트 의존성 그래프에 순환이 있어서는 안 된다. 많은 개발자가 동일한 소스 파일을 수정하는 환경에서는 '숙취 증후군(The morning after syndrome)'이 발생합니다. 여기서 말하는 '숙취 증후군'은 내가 잘 동작하도록 만든 소스 코드가 다음날 아침에는 다른 사람의 수정으로 인해 동작하지 않는 현상을 말합니다. 이 문제를 해결하기 위해서는 개발 환경을 릴리스 가능한 컴포넌트 단위로 분리해야 합니다. 이를 통해 컴포넌트 개발자 또는 단일 개발팀이 책임을 질 수 있는 작업 단위가 됩니다. 담당 개발자는 이 컴포넌트에..
-
[Clean Architecture] 컴포넌트 응집도Engineering/Architecture 2020. 6. 27. 22:48
컴포넌트란? 컴포넌트는 배포 단위입니다. 컴포넌트는 시스템의 구성 요소로 배포할 수 있는 가장 작은 단위입니다. 자바의 경우 jar 파일이 컴포넌트입니다. 루비에서는 gem, 닷넷에서는 DLL입니다. 컴파일형 언어에서 컴포넌트는 바이너리 파일의 결합체입니다. 인터프리터형 언어의 경우는 소스 파일의 결합체입니다. 모든 언어에서 컴포넌트는 배포할 수 있는 단위 입자입니다. 컴포넌트 응집도 그렇다면 어떤 클래스를 어느 컴포넌트에 포함시켜야할까요? 이는 중요한 결정이므로, 제대로 된 소프트웨어 엔지니어링 원칙의 도움을 받아야 합니다. 그 원칙으로는 아래의 세 가지 원칙이 있습니다. REP : 재사용/릴리스 등가 원칙 (Reuse/Release Equivalence Principle) CCP : 공통 폐쇄 원칙 ..
-
[Clean Architecture] 3부. 설계 원칙Engineering/Architecture 2020. 6. 11. 22:27
클린 아키텍처 3부 (설계 원칙) 좋은 소프트웨어 아키텍처를 위한 유명한 원칙 SOLID 에 대해서 알아보겠습니다. SOLID 원칙은 함수와 데이터 구조를 클래스로 배치하는 방법, 그리고 이들 클래스를 서로 결합하는 방법을 설명합니다. '클래스'라는 단어를 사용했다고 해서 SOLID 원칙이 객체 지향 소프트웨어에만 적용된다는 뜻은 아닙니다. 여기에서 클래스는 단순히 함수와 데이터를 결합한 집합을 가리킵니다. 소프트웨어 시스템은 모두 이러한 집합을 포함하며, 이러한 집합이 클래스라고 불릴 수도 있고 아닐 수도 있습니다. SOLID 원칙 SRP : 단일 책임 원칙(Single Responsibility Principle) 소프트웨어 모듈은 변경의 이유가 하나, 단 하나여야만 합니다. 이 원칙은 모든 모듈은 ..