'클린 아키텍처'를 읽고
밥 아저씨의 책을 읽어보았다.
워낙 클린코드로 유명하신 분이라 저자에 대한 설명은 말이 필요없을 것 같다.
이 책을 읽는 내내 들었던 느낌은 decoupling, DIP였다.
용어는 바뀌어도 DIP의 확장 개념으로 생각됐다. DIP를 위해 중간 인터페이스 역할은 필수적이겠구나란 생각도 함께 들었다.
고수준 모듈이 저수준 모듈로 의존하지 않기 위해 중간 인터페이스 역할(모듈이 될 수도 있고 코드가 될 수도 있고)을 통해 저수준 모듈이 인터페이스로 의존성이 향하게 하고 고수준 모듈도 인터페이스를 통해 저수준의 모듈에 의존성이 얽매이지 않는 것이다.
후반부에는 밥 아저씨의 개발자 인생사를 써둔 목차가 있는데, 그 시대의 소프트웨어나 하드웨어를 잘 모르는지라 좀 건성으로 읽었다.
decoupling, dip가 내게 인상깊었던 부분이지만 그 외에 클린 아키텍처 달성을 위해 여러 개념을 통해 설명한다.
SOLID 원칙도 짧지만 예시를 들어 설명이 되어있어 SOLID에 대해 개념은 알지만 감이 잘 안 오는 분들에게 괜찮은 목차로 보인다.
회사 면접들을 보러 다닐 때 SOLID에 대해 질문들도 자주 받았어서 읽어두면 면접 때도 도움이 되지 않을까나?
이 책의 가장 좋았던 점은 애매모호했던 용어를 정리해줌과 동시에 좋은 아키텍처를 위해 어떤 부분을 고려해야하는지 어떤 규칙을 지키면 좋고 버려야하는지를 알려줘서 였다.
'컴포넌트란 배포할 수 있는 가장 작은 단위, 자바로 예를 들면 jar' 라는 식으로 명확하게 설명해주니 머릿속으로 용어 정의에 대해 추측할 필요가 없었다.
개발 방법론은 제각기마다 다르겠지만 회사의 사정이나 개발팀의 정해진 스펙으로 인해 인프라, 프레임워크가 정해진 상태에서 개발을 하는게 현실이다.
흔한 예시로 들자면 프레임워크는 spring에 RDB는 mysql, 언어는 java가 주를 이루고 있는 회사가 적지 않을 것이다.
이 책에서는 이 모든 것들이 세부사항이다!라고 강력하게 말한다. 클린 아키텍처란 세부사항에 의존하면 안된다. 추상화된 상위 개념에 하위 개념이 의존해야지 말이다.
크게 3개로 세부사항을 말하는데, 아래와 같다.
1. 데이터베이스
2. 웹
3. 프레임워크
이 부분을 읽으면서 DDD가 생각났다. DDD에서는 어떤 도메인 객체들이 책임을 맡고 역할을 수행할지를 고민이 먼저고 그 후에 이 도메인 객체들을 어떻게 persist할지, 외부와 통신할지를 고민하니까 말이다.
습관적으로 기술 스펙부터 정하고 개발하기보단 먼저 지금 진행할 프로젝트의 설계를 어떻게 할 것인가를 고민하는게 어떨까