일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 프로그래머스
- 디자인 패턴
- 개발자 취업
- 항해99
- Spring multimodule
- 1주일회고
- 코딩테스트 준비
- 프로그래머스 이중우선순위큐
- JavaScript
- spring batch 5.0
- KPT회고
- 디자인패턴
- 커스텀 헤더
- 전략패턴 #StrategyPattern #디자인패턴
- 구글 OAuth login
- Python
- infcon 2024
- TiL
- @FeignClient
- 파이썬
- 개발자부트캠프추천
- 빈 충돌
- 99클럽
- DesignPattern
- 단기개발자코스
- 취업리부트코스
- jwttoken
- 빈 조회 2개 이상
- jwt
- 인프콘 2024
- Today
- Total
m1ndy5's coding blog
Ditto 프로젝트 멀티 모듈 도입 1편 - 모듈 나누기에 대한 고민 본문
Ditto 프로젝트 멀티 모듈 도입 1편 - 모듈 나누기에 대한 고민
정민됴 2024. 2. 2. 07:44뭔가 실행으로 옮기는 데는 많은 시간이 걸리진 않았지만 정말 많은 고민을 했던 부분이었던 것같다.
기존 모놀리식 구조에서의 패키지는
auth(인증, 인가), member(회원가입, 팔로우/팔로잉), post(게시글 crud, 게시글 좋아요), comment(댓글 crud, 댓글 좋아요), newsfeed(팔로잉하는 사용자들의 활동에 대한 알림, 게시글), global(공통적으로 사용 ex. BaseEntity, BaseResponse, Config etc) 이런식으로 나누어져있었다.
일단 첫 번째로 4개의 모듈을 만들었다.
ditto-module-user(멤버 엔티티와 관련), ditto-module-activity(게시글, 댓글과 관련), ditto-module-newsfeed(뉴스피드와 관련), ditto-module-common(공통적으로 사용되는 것들)
이렇게 네개로 나누었고 각각의 모듈에 해당하는 패키지를 넣어놨었다.
여기서 가장 먼저 발생했던 문제가 있었다.
모듈 간의 의존성을 주입해주던 중 circular dependency가 일어났기 때문이다ㅜㅜ
그 이유는 내가 newsfeed를 fanout on write방식으로 구성했기 때문에 post와 comment가 작성될 때 newsfeedService의 createNewsfeed, createNewsfeedPost 메서드를 사용했고,
NewsfeedService에서도 해당 팔로잉들의 게시글을 보여줘야했기 때문에 Post엔티티를 사용하고 있어서 뉴스피드 모듈에서도 Activity 모듈을 사용하고 있었기 때문에 ActivityModule은 NewsfeedModule이 필요하고 NewsfeedModule은 ActivityModule이 필요한 계속해서 순환하고 있었던 것이다ㅠㅠ
사실 이문제 말고도 모든 엔티티들도 전역으로 쓰이고 있었기 때문에(Member 같은 엔티티는 Post, Comment, Newsfeed에 전부 다쓰임) 엔티티 때문에 계속해서 circular dependency가 발생했다.
일단 첫번째로 해결했던 방법은 이렇다.
ditto-module-common에 엔티티를 몰아서 넣었다. 모든 엔티티들이 다양한 곳에서 사용이 되고 있었으므로 공통적으로 사용되고 있다고 판단했다. 두번째로 각종 Exception들도 common모듈에 넣었다. 나는 Exception을 Custom해서 사용하고 있었는데 이 또한 공통으로 다 쓰이고 있었기 때문이다. 또한 기존 Global 패키지도 넣었고 Jwt, Redis에 해당하는 파일들도 넣었다.
위와 같이 설계를 했더니
Activity와 Member모듈에서는 Common과 Newsfeed모듈만을 필요로 했고,
Newsfeed모듈은 Common 모듈만 필요했기 때문에 더 이상 circular dependency가 일어나지 않았다.
하지만 여기서 또 고려해봐야했던 점은
1. 도메인을 common에 몰아넣는 것이 진정하게 모듈이 잘 분리된 것이라고 얘기할 수 있을까??
2. 더 나아가서 common 모듈이 존재하는 것이 진정하게 모듈이 잘 분리된 것이라고 얘기할 수 있을까??
였다,,,,,
확실하게 느꼈던 점은 내가 이전 게시글에서 정리했던 바운디드 컨텍스트를 고려해서 모듈을 나누진 않았구나 였다!!!
.. 갈 길이 멀구나... ㅋㅋㅋㅋㅋㅋㅋ
어떻게 하면 바운디드 컨텍스트를 고려해서 모듈을 나눌 수 있는지 고민해보고 2탄으로 돌아오겠다~!~!
'Toy Projects > Ditto - Discuss Today's Topic' 카테고리의 다른 글
Ditto 프로젝트 멀티 모듈 도입 3편 - Gateway 도입하기 (2) | 2024.02.06 |
---|---|
Ditto 프로젝트 멀티 모듈 도입 2편 - Entity 연관관계 끊기 (0) | 2024.02.06 |
DDD? MSA? 멀티 모듈? (0) | 2024.01.31 |
[SpringBoot 3.0] JWT로 로그아웃을???(feat. Redis) (2) | 2024.01.25 |
[SpringBoot 3.0] 이메일 인증을 통한 회원가입 기능 만들기 (0) | 2024.01.24 |