클린 아키텍처 1회독을 했다. 시간은 약 3주정도 걸렸다. SOLID 라는 게 무엇인지 블로그나 칼럼을 보고 피상적으로 정리했던 지식을 한 번 제대로 정리했던 시간이었고 추상화의 중요성을 알게 되었다. 읽고 남았던 기억을 간단히 요약하라고 하면
일 듯 하다.
얻은 지식을 코드에 적용해 보기 위해, 이를 코드로 녹여내는 연습을 중간중간 계속해서 하다보니, 코드 자체로는 SOLID 한 코드를 작성할 수 있긴 하다. 그러나, TypeScript
, 그리고 NestJS
라는 프레임워크를 통해 작성한 내 실제 작업물에서는 해당 내용을 적용하기가 쉽지 않았다.
일단 TypeScript 같은 경우, interface
를 통해서 추상화를 진행할 수 없다. 왜냐면, 이것이 JavaScript
로 변경되는 과정에서 interface 가 사라지기 때문이다. 그래서 NestJS 에서 권장하는 대로 abstract class
를 사용하고 그걸 extends 하여 provide 엔 abstract class 를, 그리고 useClass 에서는 그걸 통해 구현한 concrete class 로 IoC container 에 provider 를 제공해주거나, 아니면 interface 로 추상화를 한 뒤, string token 을 provider 로 제공한 다음 useClass 를 통해 implement interface
를 통해 만든 Class 를 useClass
로 제공해주어야 하는데 무엇이 더 좋은 방법일지는 모르겠다.
그리고 더 나아가서 service logic 이 커질 것 같으면 module 단위로 쪼개버리는 게 좋을지, 아니면 그냥 하나의 module 에서 여러개의 servie 를 만들고 그걸 한 번에 제어하는 facade class 를 만들어 사용할지도 모르겠다. 실제 코드레벨에 적용하기는 너무 어려운 문제이다.
그리고 부끄럽게도 뒤의 아키텍처 단락부터는 정말 너무 어려워서 거의 대부분을 이해하지 못 했다. 큰 방향의 철학정도만을 공감하는 수준으로 읽었는데, 그걸 어떻게 코드로 녹여낼지는 너무 어려운 문제인 거 같다. 그래서 집중해서 그냥 읽기만 했다. 조금 더 시행착오를 겪고, 여러가지를 공부해서 깊은 생각을 할 수 있는 상태가 되고, 그 때 2회독을 할 땐 보이는 게 있겠지 하는 마음으로.
작성한 글들의 내용은 여기 단락에 정리해놓았다. velog 에 올리기엔 거친 글이라 작성한 개인 notion 링크만 거는 것으로 갈음한다.