다이어그램
리팩토링 전
기존 모놀리식 프로젝트 패키지 구조랑 똑같이 구성하고 있었다.
컨트롤러 - 서비스 - 리포지토리 구조의 레이어드 아키텍쳐다. 그런데 이렇게 하면, DB 중심의 아키텍쳐가 되기 쉽다고 한다.
리팩토링 후
- 컨트롤러 패키지에 있던 것들 중, 컨트롤러와 리퀘스트와 관련된 dto들은 in.web 패키지로 보냈다.
- feign 클라이언트, 카프카 메시지, 리스폰스와 관련된 dto들은 out 패키지에 보냈다.
- 도메인 패키지에 있던 리포지토리들은 out.persistence 패키지에 보냈다.
- 서비스는 인터페이스와 구현체로 나누었다.
리팩토링하고 느낀 점
- in과 out이라는 패키지 구조가 직관적으로 와닿았다. 특히 좋았던 것은 dto들을 역할에 따라 in과 out으로 구분하니 더 찾기 쉬워졌다는 것이다.
- 카프카 메시지와 관련된 패키지들은 어디에 두어야 할까 고민했었는데, 그 고민을 해결할 수 있었다.
- 도메인 내 리포지토리를 전부 out.persistence 로 보냄으로써, 도메인 패키지 내 코드들은 순수 POJO가 되었다.
- 서비스를 인터페이스와 구현체로 나누는 것은 아직 잘 모르겠다. 다형성때문인가?
나중에 클린 아키텍쳐
공부해서 이론을 좀 보강해야 할 것 같다. ㅎㅎ