공부하는 스누피
클린 아키텍처: 소프트웨어 구조와 설계의 원칙 본문
[클린 코드]의 저자이자 SOLID 원칙을 창안한 로버트 C. 마틴의 책으로, 저자의 아키텍트로서의 경험을 토대로 ‘훌륭한 아키텍처’란 무엇인가에 대해 이야기한다. 아키텍처란 추상적인 개념을 독자가 정확히 알게 하고 SOLID를 포함한 여러 설계 원칙들을 통해 아키텍처를 분석할 수 있게 한다. 아키텍처 관련 책이니만큼 다양한 컴포넌트 다이어그램을 볼 수 있다. 이 책은 나쁜 설계부터 시작하여 왜 이 설계가 나쁜 것인지 설명하고 어떻게 개선해 나갈 수 있는지에 대한 방법을 제시한다. 자바, 임베디드 구별 없이 소프트웨어 아키텍트가 되고 싶다면 좋은 책이다.
이 책은 소프트웨어 구조와 설계 원칙에 대한 기본적인 개념들을 저자의 원칙과 함께 자세히 설명해준다. 예를 들자면 구조적, 객체 지향, 함수형 프로그래밍을 다음과 같이 정의내린다.
- 구조적 프로그래밍은 제어흐름의 직접적인 전환에 부과되는 규율이다.
- 객체 지향 프로그래밍은 제어흐름의 간접적인 전환에 부과되는 규율이다.
- 함수형 프로그래밍은 변수 할당에 부과되는 규율이다.
마치 위키피디아같이 바로 이해하긴 어렵지만 표현 면에서는 훨씬 더 명확하다. 각 챕터에서 왜 그렇게 정의내릴 수 있는지 자세히 설명해 주니 이해가 더 쉬울 것이다. 비슷한 방식으로 SOLID 원칙을 하나하나 사례를 들어 설명한다. 리스코프 치환 원칙을 설명할 때 정사각형-직사각형 문제로 잘못된 의존 관계에 대해 이야기한다. (정사각형-직사각형 문제가 유명하다는 건 나중에 알게 되었다) 설계에 대해 설명한 다음 좀 더 큰 단위로 나아가는데, 컴포넌트-아키텍처 순이다.
저자는 아키텍처가 반드시 명확해야 한다고 한다. 설계에서 어영부영 넘어가버리면 반드시 큰 문제가 생긴다. 이를 통해 아키텍처 경계를 올바르게 정의할 수 있으며 잘 통제된 의존성을 가진 소프트웨어를 만들 수 있을 것이다. 책을 읽으면서 처음 알게 된 것이 웹, 프레임워크 그리고 데이터베이스까지 세부 사항이므로 설계 단계에서 중요하게 고려하지 않아도 된다는 것이었다. 어느 데이터베이스, 프레임워크를 쓰더라도 작동이 되게끔하는 아키텍처가 바람직하다고 한다 (책에서는 아키텍처가 세부 사항을 모르게 하라고 한다). 저자의 경험 중 개발 완료 후 데이터베이스를 교체해야 했던 경험이 이를 잘 뒷받침해준다. 이 책에 따르면, 아키텍처는 어떤 서비스를 위한 것인지 직관적으로 나타낼 수 있어야 한다. 프레임워크나 계층형 아키텍처에 얽매여 본래의 의도를 잃어버린다면, 직관적이라고 할 수 없다.
[클린 코드]와는 달리 이 책은 개발자를 위한 교과서가 아닌 필수 교양 서적이다. 저자의 아키텍트로서의 경험을 갈무리한 자서전이라고 해도 된다. 그래서 꼼꼼히 메모해가며 읽기보다는 주기적으로, 혹은 3년에 한 번씩이라도 눈으로 훑으며 읽어보는 것이 좋다고 느꼈다. 책을 읽을 때마다 관심사가 달라져 있을 텐데, 읽다 보면 궁금했던 부분을 설명해주는 챕터가 하나씩은 있을 것이다. 나같은 경우는 SOLID에 대한 챕터가 그런 챕터였고, 그 부분은 메모해가며 주의 깊게 읽었다. 다른 부분은, 특히 뒤로 갈수록 실무 경험이 없는 초보 개발자에게는 어렵게 느껴졌다. 상용 서비스를 직접 배포해보고 유지보수까지 직접 해본 뒤라면 이 책을 다시 읽었을 때 느끼는 바가 다르지 않을까 한다. 책을 다 읽는 데 2주 정도 걸렸는데, 아마도 자기 전에 한 두 챕터씩만 읽어서 생각보다 오래 걸렸던 것 같다.
'IT 도서' 카테고리의 다른 글
컴퓨터 구조 및 설계 (3) | 2020.11.18 |
---|---|
인프라 엔지니어의 교과서 (0) | 2020.11.17 |
컴퓨터 네트워킹: 하향식 접근 (0) | 2020.11.05 |
클린 코드 (0) | 2020.10.31 |
초보 웹 개발자를 위한 스프링5 프로그래밍 입문 (0) | 2020.10.01 |