본문 바로가기

전체 글34

[클린아키텍처] 5부. 아키텍처 소프트웨어 아키텍처 소프트웨어 구조(software architecture)는 소프트웨어의 구성요소들 사이에서 유기적 관계를 표현하고 소프트웨어의 설계와 업그레이드를 통제하는 지침과 원칙이다. 소프트웨어 아키텍처란 시스템이 구축되는 형태이다. 이러한 형태는 시스템이 컴포넌트로 분할되는 것, 분할된 컴포넌트들이 배치하는 방법, 컴포넌트끼리의 통신 방식에 따라 결정된다. 이러한 형태가 결정되면, 쉽게 개발, 배포, 운영, 유지보수가 되도록 만들어진다. 여기서, 아키텍처의 중요한 목적은 시스템의 생명주기를 지원하는 것이다. 좋은 아키텍처는 시스템을 쉽게 이해하고, 개발하며, 유지보수하고 배포하게 해준다. 결국 아키텍처의 궁극적인 목표는 유지보수비용은 최소화하고, 프로그래머의 생산성은 최대화 하는데 의의가 있다.. 2021. 4. 18.
[클린아키텍처] 4부. 컴포넌트 결합 원칙 ADP 컴포넌트 사이의 관계는 어떤 원칙을 가지고 개발되어야 하는가? ADP: 의존성 비순환 원칙 컴포넌트 의존성 그래프에 순환(Cycle)이 있어서는 안된다. 개발환경은 릴리스 가능한 컴포넌트 단위로 분리하여야 한다. 이를 통해 컴포넌트는 개별 개발자 또는 단일 개발팀이 책임질 수 있는 작업 단위가 된다. 왜 릴리즈 가능한 컴포넌트 단위로 분리하여야 하는가? A라는 컴포넌트가 새로 릴리즈가 되었다고 생각해보자. A 컴포넌트를 사용하고 있던 다른 컴포넌트들은 릴리즈 된 것을 그대로 사용하지 않아도 된다. 과거 버전의 릴리즈를 계속 사용해도 되고, 변경사항에 대한 준비가 완료되면 새로운 릴리즈를 사용해도 된다. 하지만, 위의 절차가 정상적으로 동작하고 실제 반영이 되기 위해서는 컴포넌트 사이의 의존성 구조를 반드.. 2021. 3. 26.
[클린아키텍처] 4부. 컴포넌트 응집도 어떤 클래스를 어떤 컴포넌트에 포함시켜야 할지에 대해서는 아래와 같이 컴포넌트 응집도와 관련된 세가지 원칙이 존재한다. REP: 재사용/릴리즈 등가 원칙(Reuse/Release Equivalence Principle) CCP: 공통 폐쇄 원칙 (Common Closure Principle) CRP: 공통 재사용 원칙(Common Reuse Principle) 응집도는 모듈 내부에 존재하는 구성 요소들 사이의 밀접한 정도를 나타낸다. 모듈 안의 구성요소들이 얼마나 서로간의 의존도가 높은지에 따라 평가된다. 즉, 응집도가 높다는 것은 꼭 필요한 구성요소들로만 이루어져 있다는 것이다. REP - 재사용/릴리즈 등가 원칙 재사용의 단위는 릴리스 단위와 같다. 현대의 개발자는 Maven, Gradle 과 같은 .. 2021. 3. 21.
[클린아키텍처] 4부. 컴포넌트 앞서 SOLID 원칙이 벽과 방에 벽돌을 배치하는 방법을 알려준다면, 컴포넌트 원칙은 빌딩에 방을 배치하는 방법을 설명해 준다. 그러면 컴포넌트란 무엇일까? 컴포넌트는 시스템의 구성요소로 배포할 수 있는 가장 작은 단위이다. 자바의 경우 jar, 루비는 gem, 닷넷은 dll 파일이 컴포넌트이다. 컴포넌트는 플러그인과 같이 다른 컴포넌트들과 결합하여 실행 가능한 단일 파일로도 생성이 가능하다. 컴포넌트의 간략한 역사 초기 개발자들은 프로그램을 로드할 메모리의 위치를 정하는 일을 가장 먼저 결정해야 했다. 메모리의 위치가 한번 결정되면 위치에 대한 재배치가 불가능 했기 때문에, 라이브러리 함수의 소스 코드를 애플리케이션코드에 직접 포함시켜 단일 프로그램으로 컴파일하여 사용하였다. 이러한 방식은 함수 라이브.. 2021. 3. 15.
[클린아키텍처] 3부. 설계 원칙 DIP 소프트웨어에서 좋은 아키텍처를 정의하는 원칙이 바로 SOLID이다. SOLID의 원칙의 목적은 중간 수준(=모듈)의 소프트웨어 구조가 아래와 같도록 만드는 데 있다. 1. 변경에 유연하다. 2. 이해하기 쉽다. 3. 많은 소프트웨어 시스템에 사용될 수 있는 컴포넌트의 기반이 된다. ** 모듈 : 독립적인 개발 단위. 라이브러리 또는 API 인터페이스 등. 단순히 함수와 데이터구조로 구성된 집합인 클래스를 의미하기도 함. DIP: 의존성 역전 원칙 DIP (The Dependency Inversion Principle) 추상화에 의존해야 하며, 구체화에 의존하면 안 된다. 즉, 하위의 모듈이 상위 모듈에 정의한 추상 타입(인터페이스)에 의존 의존성 역전 원칙에서 말하는 "유연성이 극대화된 시스템"은 소스코.. 2021. 3. 2.
[클린아키텍처] 3부. 설계원칙 ISP 소프트웨어에서 좋은 아키텍처를 정의하는 원칙이 바로 SOLID이다. SOLID의 원칙의 목적은 중간 수준(=모듈)의 소프트웨어 구조가 아래와 같도록 만드는 데 있다. 1. 변경에 유연하다. 2. 이해하기 쉽다. 3. 많은 소프트웨어 시스템에 사용될 수 있는 컴포넌트의 기반이 된다. ** 모듈 : 독립적인 개발 단위. 라이브러리 또는 API 인터페이스 등. 단순히 함수와 데이터구조로 구성된 집합인 클래스를 의미하기도 함. ISP: 인터페이스 분리 원칙 ISP (The Interface Segregation Principle) 클라이언트에 밀접하게 작게 쪼개진 인터페이스를 유지한다. 인터페이스의 단일 책임. 하나의 책임만을 가지는 작은 규모의 인터페이스로 분리 위의 그림에서, 다수의 사용자가 OPS 클래스의.. 2021. 3. 2.
[클린아키텍처] 3부. 설계원칙 LSP 소프트웨어에서 좋은 아키텍처를 정의하는 원칙이 바로 SOLID이다. SOLID의 원칙의 목적은 중간 수준(=모듈)의 소프트웨어 구조가 아래와 같도록 만드는 데 있다. 1. 변경에 유연하다. 2. 이해하기 쉽다. 3. 많은 소프트웨어 시스템에 사용될 수 있는 컴포넌트의 기반이 된다. ** 모듈 : 독립적인 개발 단위. 라이브러리 또는 API 인터페이스 등. 단순히 함수와 데이터구조로 구성된 집합인 클래스를 의미하기도 함. LSP: 리스코프 치환 원칙 LSP (The Liskov Subsitution Principle) 상속 받은 클래스는 기반 클래스를 대체할 수 있어야 한다. 인터페이스, 예외처리에 이르기 까지 동일한 규격으로 다형성 및 확장성을 확보 OCP가 이루어지기 위해서는 LSP가 만족되어야 한다... 2021. 3. 1.
[클린아키텍처] 3부. 설계원칙 OCP 소프트웨어에서 좋은 아키텍처를 정의하는 원칙이 바로 SOLID이다. SOLID의 원칙의 목적은 중간 수준(=모듈)의 소프트웨어 구조가 아래와 같도록 만드는 데 있다. 1. 변경에 유연하다. 2. 이해하기 쉽다. 3. 많은 소프트웨어 시스템에 사용될 수 있는 컴포넌트의 기반이 된다. ** 모듈 : 독립적인 개발 단위. 라이브러리 또는 API 인터페이스 등. 단순히 함수와 데이터구조로 구성된 집합인 클래스를 의미하기도 함. OCP: 개방-폐쇄 원칙 OCP (The Open Closed Principle) 개방 폐쇄의 원칙 클래스는 확장에 열려 있어야 하며, 변경에 닫혀 있어야 한다. 추상화와 다형성을 통한 확장, 기존 구성요소의 변경 최소화를 의미 확장 되어야 할 것과 변경하지 않을 것을 명확히 구분한다. .. 2021. 3. 1.