
클린 아키텍처
소프트웨어 아키텍처의 보편 원칙을 적용하면 소프트웨어 수명 전반에서 개발자 생산성을 획기적으로 끌어올릴 수 있다. 《클린 코드》와 《클린 코더》의 저자이자 전설적인 소프트웨어 장인
www.aladin.co.kr
소프트웨어 아키텍처의 보편 원칙을 적용하면 소프트웨어 수명 전반에서 개발자 생산성을 획기적으로 끌어올릴 수 있다. 《클린 코드》와 《클린 코더》의 저자이자 전설적인 소프트웨어 장인인 로버트 C. 마틴은 이 책 《클린 아키텍처》에서 이러한 보편 원칙들을 설명하고 여러분이 실무에 적용할 수 있도록 도와준다.
단순히 선택지들을 나열하는 책이 아니다. 상상할 수 있는 모든 분야의 소프트웨어 환경에서 반 세기를 살아온 저자의 경험에 기초하여, 성공하기 위해서는 어떤 선택을 해야 하고 무엇이 결정적인지를 이야기해 준다. 저자의 명성에 걸맞게 이 책에는 여러분이 직면할 현실적인 도전들을 극복할 수 있는 진지한 해결책으로 가득 차 있다.
얼마 전 원티드 온보딩 챌린지를 통해 추상화 원칙에 따른 좋은 컴포넌트 작성법을 공부할 때 많이 인용되고 소개되었던 책이었다.
비단 프론트 엔드 혹은 더 작은 영역인 React 뿐만 아니라 프로그래밍에 모두 적용 가능한 내용이 들어있다.
1. 서문
나는 수많은 앱을 만들었다. 수많은 시스템을 구축했다. 그리고 이 모두를 경험하고 고민한 끝에 놀라운 무언가를 깨달았다.
아키텍처 규칙은 동일하다!
- 클린 아키텍처(xx)

2. 1부 소개
반면 소프트웨어를 제대로 만들게 되면 마법과도 같은 일이 벌어진다.
...
제대로 된 소프트웨어를 만들면 아주 적은 인력만으로도 새로운 기능을 추가하거나 유지보수할 수 있다. 변경은 단순해지고 빠르게 반영할 수 있다.
- 클린 아키텍처 (2p)
개발에 가장 많은 시간이 할애되는 부분이 유지보수라고 한다. 그렇기에 그 시간을 줄이기 위해 가장 많이 고민하고 개선법을 찾으려 하는 것 같다. 자연스레 자료와 정보도 많이 있다.
빨리 가는 유일한 방법은 제대로 가는 것이다.
- 클린 아키텍처 (13p)
가장 담백하게 한 마디로 잘 표현한 것 같다.
개발자가 속는 거짓말로 "지저분한 코드를 작성하면 단기간에는 빠르게 갈 수 있고, 장기적으로 볼 때만 생산성이 낮아진다."라고 표현을 했는데, 실제 실험을 통해 단순한 프로그램을 개발할 때도 TDD를 사용한 것이 사용하지 않을 때 보다 개발 시간이 빠르다고 한다.

3. 3부 설계원칙
좋은 소프트웨어 시스템은 깔끔한 코드로부터 시작한다. 좋은 벽돌을 사용하지 않으면 빌딩의 아키텍처가 좋고 나쁨은 그리 큰 의미가 없는 것과 같다. 반대로 좋은 벽돌을 사용하더라도 빌딩의 아키텍처를 엉망으로 만들 수 있다. 그래서 좋은 벽돌로 좋은 아키텍처를 정의하는 원칙이 필요한데, 그게 바로 SOLID다.
...
1. 변경에 유연하다.
2. 이해하기 쉽다.
3. 많은 소프트웨어 시스템에 사용될 수 있는 컴포넌트 기반이 된다.
- 클린 아키텍처 (62p)
서문에서 말한 것처럼 많은 경험을 통해 좋은 아키텍처를 위한 공통점을 발견하였는데 그 기준으로 3부 설계원칙에선 SOLID 원칙을 하나하나 소개해 준다.

4. 4부 컴포넌트 원칙
컴포넌트 사용자들을 필요하지 않는 것에 의존하게 강요하지 말라.
- 클린 아키텍처 (111p)
CRP(Common Reuse Principle) 공통 재사용 원칙을 설명하는 첫 문장이다. 재사용되는 경향이 있는 클래스와 모듈들은 같은 컴포넌트에 포함해야 한다고 말한다. 재사용 가능한 클래스는 다른 클래스와 상호작용을 하는 경우가 많기 때문이다.
https://medium.com/@anca.rebeca/clean-architecture-component-cohesion-principles-8c9722abd9bd
Clean Architecture: Component Cohesion Principles
In software development, component principles are a guide for organising classes into components to make them more organised and…
medium.com
컴포넌트 의존성 그래프에 순환이 있어서는 안 된다.
- 클린 아키텍처 (116p)
ADP(Acyclic Dependencies Principle) 의존성 비순환 법칙
어제 퇴근 전까지 잘 되던 코드가 야근했던 동료가 내가 작성한 코드 중 의존하고 있던 무언가를 수정한다면 오늘 아침 문제가 발생할 수 있다. 책에선 이러한 현상을 '숙취 증후군'이라고 부른다.
이를 방지하기 위해 개발 환경을 릴리스 가능한 컴포넌트 단위로 분리하여 컴포넌트 간 순환 의존성을 제거해야 한다.
A Brief Introduction to Acyclic Dependencies Principle of Development Process
This article is going to have a gist of the Acyclic Dependencies Principle (ADP) of Development Process.
medium.com
변경이 쉽지 않은 컴포넌트가 변동이 예상되는 컴포넌트에 의존하게 만들어서는 절대로 안 된다. 한번 의존하게 되면 변동성이 큰 컴포넌트도 결국 변경이 어려워진다.
...
모듈을 만들 때는 변경하기 쉽도록 설계했지만, 이 모듈에 누군가가 의존성을 매달아 버리면 당신의 모듈도 변경하기 어려워진다.
- 클린 아키텍처 (125p)
SDP(Stable Dependencies Principle) 안정된 의존성 법칙
https://medium.com/javarevisited/uncle-bobs-advice-on-stability-and-abstraction-b96ea8623e97
Uncle Bob’s Advice on Stability and Abstraction
My brief and concise summary of Uncle Bob’s old Clean Code series. Namely, the episode about Acyclic Dependencies, Stable Dependencies, and…
medium.com