이 게시글에서는 "만들면서 배우는 클린 아키텍처"를 읽으면서 얻은 것들을 기록하려고 한다. 나중에 성장한 후에 현재의 나를 되돌아볼 수 있도록, 다른 글과는 다르게 두서없이 지금의 생각을 그대로 담아 작성할 예정이다.
평소 여러 아키텍처에 관심이 있던 나는 [NHN FORWARD 22] 클린 아키텍처 애매한 부분 정해 드립니다.를 시청하고, 영상에서 "만들면서 배우는 클린 아키텍처"를 추천해주었기 때문에 책을 읽게 되었다.
영상에서 알 수 있듯이, 잘 모르겠다면 헥사고날 아키텍처를 추천하였고, 책 이름인 클린 아키텍처와는 다르게 "만들면서 배우는 클린 아키텍처"에서는 헥사고날 아키텍처에 대해 다루고 있어 기본 개념을 익히기 좋다고 했기 때문에, 좋은 마음으로 읽게 되었다.
사실 책을 읽으면서 헥사고날 아키텍처에 대해 완벽히 이해했다고 말할 수는 없을 것 같다. 그러나 이 책을 통해 평소에 사용해왔던 계층형 아키텍처에서 발생할 수 있는 문제점들을 더 잘 이해하게 되었다는 점은 큰 수확이었다. 특히, 계층형 아키텍처가 가지는 의존성 문제로 인해, 하나의 기능을 개발하는 사람이 계속해서 개발을 이어가야 하며, 협업이 어렵다는 구조적 한계를 명확히 인식하게 되었다.
또한, 책에서는 테스트 코드의 중요성과 그 작성 방법에 대해서도 언급하고 있다. 이 과정에서 [생각정리] 지속 가능한 테스트 코드 작성하기에서 다룬 것처럼, 내가 평소에 작성했던 테스트 코드의 문제점을 명확히 깨닫게 되었고, 더 나아가 지속 가능한 테스트 코드를 작성하기 위해 다양한 노력을 기울여 보았다.
이러한 배움을 바탕으로 Spring_Study: Hexagonal-Architecture_Study에서 볼 수 있듯이, 실제로 코드를 작성하며 공부를 이어갔다. 책에서 제시하는 코드 자체는 비교적 단순해 보였지만, 이를 실제 프로젝트에 적용하는 과정에서는 여러 가지 고민해야 할 부분들이 많았다. 특히, 계층형 아키텍처와 비교했을 때 헥사고날 아키텍처는 훨씬 많은 포트와 어댑터 관련 코드가 추가되며, JPA의 변경 감지 기능과 같은 기존에 익숙한 기능들을 사용할 수 없다는 점이 고민으로 다가왔다.
그럼에도 불구하고, 헥사고날 아키텍처를 프로젝트에 성공적으로 적용한다면, 협업의 용이성뿐만 아니라, 소프트웨어의 유연성과 확장성 측면에서 계층형 아키텍처와 비교할 수 없을 정도로 많은 장점을 제공할 것이라는 확신이 생겼다. 평소 계층형 아키텍처로 프로젝트를 진행하면서 global 폴더에 관리하기 어려운 코드들을 몰아넣는 등 다양한 문제에 직면했었는데, 헥사고날 아키텍처를 도입하면 이러한 문제들을 효과적으로 해결할 수 있을 것 같다는 기대감이 생겼다.
물론 헥사고날 아키텍처를 성공적으로 적용하기 위해서는 관련 지식의 습득은 물론, 팀원들 모두가 이 아키텍처의 필요성을 공감하고 있어야 한다고 생각한다. 또한, 프로젝트의 규모가 헥사고날 아키텍처를 적용할 만큼 충분히 커야만 이 아키텍처가 가진 장점들이 제대로 발휘될 수 있을 것이다. [생각정리] 멀티모듈 구조에 대한 고찰에서 다룬 것처럼, 멀티 모듈을 적용하면서 좋다고 알려진 폴더 구조를 시도해 보았지만, 프로젝트의 규모 때문에 그 구조의 장점을 크게 느끼지 못했기 때문이다.
결론적으로는, 헥사고날 아키텍처는 여러 방면에서 굉장히 매력적인 아키텍처로 다가왔으며, 앞으로 진행할 프로젝트에 이를 적용해보고 싶은 마음이 커졌다. 이를 위해 앞으로도 지속적으로 공부하고, 실제로 프로젝트에 적용할 수 있는 역량을 키우는 것이 필요하다는 다짐을 하게 되었다. 열심히 공부하자!