후기
S/W아키텍쳐를 배우고 사용하는데 필독서라고 해 바로 구매한 클린 아키텍쳐, 설날을 맞이해 하루종일 앉아서 읽어봤습니다.
처음 이 책을 봤을땐 디자인이 참 이쁜게 읽고싶게 생겼다는 느낌이 들었습니다.
책을 끝까지 읽은 느낌은 저자의 경험을 녹여서 클린 아키텍쳐를 만들기위해 필요한 내용을 안내하고 있어 성공한 개발자의 강의를 한편 보는듯했지만 책의 초반은 천공카드부터 객체지향을 넘어서 함수형까지의 발전을 하나씩 읊어주는 느낌을 받았으며, '오래된 자서전'이다. 라는 느낌도 강했습니다.
저자가 말한대로 프로그래밍의 구조가 수십년동안 크게 변하지 않았지만, 책이 나온지는 너무 오래되었고 이 책을 읽는 사람도 그만큼 세대가 교체되었기에 컴퓨터의 역사를 잘 알지 못하면 이래서 구조를 이렇게 짜기로 했구나? 까지의 설명을 읽다보면 조금 지치는감이 있었습니다.
내 생각엔 이 책은 클린 아키텍쳐는 뭐고 어떻게 짜는건데요?가 궁금한 사람보다는, 그래서 클린 아키텍쳐라는건 왜 생겨난거고 어떻게 생겼는데요?가 궁금한 사람이 보는것이 좋다고 생각합니다.
이 책을 읽기위해서 필요한 기술
- UML도 어느정도 숙지가 되어있으면 좋고,
- OOP에대한 기본 내용
- JAVA spring을 기반으로 한 설명이 많아서 해봤으면 좋습니다.
- 의존성 역전의 중요성을 말해주는 느낌이라 의존성 역전에 대한 내용을 명확히 알고 보는것이 좋습니다.
저는 다 읽고나서 용어 정리를 했지만,
읽어가면서 용어를 정리하고 뒤에 용어가 또 나올때 그 용어만 한번 보고 쭉쭉 읽어나가는 것이 좋아보입니다.
배운점
1. 빨리가는 유일한 방법은 제대로 가는 것이다.
- 프로그램은 소프트웨어이다. 말그대로 계속해서 변할 수 있다는 뜻이다.
- 어차피 프로그램은 변하기 때문에 구조를 명확히 잡지 못하면 비용이 발생하고 먼 미래에 불상사가 일어날 수 있다.
내가 이제까지 이 프로젝트는 수정하기 너무 어렵다고 생각했던 이유는 구조가 잡히지 않은상태였다는 것을 나타냈다.
2. 선택사항 열어두기
- 아키텍쳐를 설계할때 중요한것은 모든 가능성을 열어두는것이다.
- DB, 프론트, 서버, REST 해당 내용들을 지금 미리 결정해둘 필요가 없다는것이다.
- 프로그램은 장치 독립성이 중요하며 범용적으로 작성되어야 한다.
3. 경계:선긋기
- 소프트웨어 아키텍쳐는 선을 긋는 기술이며, 저자는 이러한 선을 경계라고 표현한다.
- 선은 관련이 있는것과 없는것 사이에 긋고, 이를 조작하기 위해 의존성 역전을 사용한다.
- 선을그어 서로를 분리시켜 독립성을 얻는것이 중요하다.
4. 업무 규칙
- 업무 규칙은 말그대로 프로그램이 작동하는 핵심적인 기능이다.
- 업무 규칙은 UI나 DB와 같은 저수준의 관심사로 인해 오염되면 안된다.
- 가장 독립적이며 가장 많이 재사용할 수 있는 코드여야 한다.
5. 클린 아키텍쳐
- 이 책의 제목과 같은 단락이다.
- 저자가 가장 중요시 여기는 내용이 들어있으며, 정리하자면 다음과 같다.
- 의존성 규칙 : 소스 코드 의존성은 반드시 안쪽으로, 고수준의 정책을 향해야 한다.
- 서로는 서로가 하는일을 모르며, 분리되어있고 일을 시킬때는 인터페이스를 통해 연락해 작업한다.
★ 의존성 역전과 컴포넌트의 분리를 통한 독립성
이 책에서 클린 아키텍쳐를 위해 가장 중요시 여기는 부분이라고 강조하는느낌이였다.
용어 정리
저수준, 고수준의 정책
S/W 시스템이란 정책을 기술한 것이다.
컴퓨터 프로그램은 각 입력을 출력으로 변환하는 정책을 상세하게 기술한 설명서이다.
수준 : 입력과 출력까지의 거리이며 멀어질수록 고수준이라고 할 수 있다.
저수준 컴포넌트는 고수준 컴포넌트에 의존하도록 설계되어야한다.
내가 이해하기론 정책은 클래스에 내가 작성한 기능이라고 생각한다.
예를들면 카메라를 제어하는 클래스가있다고 치면, 버튼을 누르면 카메라가 Open된다.
카메라를 제어하는 클래스 : 고수준
버튼을 누르는(입출력) 클래스 : 저수준
이런식으로 클래스를 분리하면
입출력이 어떻게 변하던 카메라를 제어하는부분은 변경되지 않는다.
저수준 정책은 고수준 정책보다 자주 변경될 확률이 높다.
(예를 들면 카메라 사용법이 변하는것보다, 사용자UI가 변경될 확률이 확실히 높다.)
서비스, 마이크로서비스
서비스 = 프로세스
마이크로서비스 : 느슨하게 결합된 서비스의 모음으로 응용프로그램을 구성하는 아키텍쳐 스타일
모노리틱, 컴포넌트 시스템
모노리틱 시스템 : jar, dll등 동적 라이브러리를 사용하지 않은 통짜 시스템
컴포넌트 시스템 : jar, dll등 동적 라이브러리(컴포넌트)를 사용한 분할 시스템
컴포넌트 : 최소 배포단위
'리뷰&후기 > 개발자가되고싶다면' 카테고리의 다른 글
[강의 후기] 리팩터링 구루 - 리팩터링 코스 (0) | 2023.07.01 |
---|---|
[책 후기] 리팩터링(Refactoring) - 마틴 파울러 (2) | 2023.06.10 |
[책 후기] C#을 다루는 기술(C# In Depth) - 존 스킷 (0) | 2023.05.29 |
[책 후기] 커리어 스킬 - 존 손메즈 (0) | 2022.11.11 |
[프로그래밍] 문제 해결력을 높이는 알고리즘과 자료구조 후기 (0) | 2022.03.26 |
3년차 WPF 개발자입니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!