You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
저희 프로젝트가 현재 멀티 모듈로 구성돼 있는데요.
payment-api / payment-core / payment-infra 입니다.
모듈 사이에 참조 방향이 어떤 게 맞을까요?
==============
1-1)
api -> core
core -> infra
==============
1-2)
api -> core
infra -> core
==============
core 모듈에서도 jpa 의존성 추가해두는 게 맞는지?
============================================
2-1) core 에도 jpa를 추가한다 =>
그러면 jpa를 연결하기 위해 db 설정 같은 게 필요한데 infra 모듈과 중복으로 다 넣어주나요?
============================================
2-2) core 에는 jpa를 추가하지 않는다 =>
entity 나 repository 같은 건 infra 에 두고 쓰겠다는 건데
그러면 core 모듈이 infra 모듈을 참조하는 게 맞는 건가요?
============================================
repository 를 POJO 로 추상화한 interface 계층을 어느 모듈에 두어야 할까요?
core모듈은 jpa 를 의존하지 않으므로 순수 java 로 작성한 pojo interface 만을 참조할 수 있잖아요.
그러면 jpa 를 사용하지 않는 repository 를 interface 로 추상화하여 한 계층을 더 만들어야 하는데요.
이 추상화한 interface 계층을 core 모듈과 infra 모듈 중 어디에 넣어둬야 하는지 의문이었어요.
구현하다 보니 어느 쪽이든 이렇게 구현하는게 맞을지 의심스럽더라구요.
구현하면서 아래와 같은 의문들이 들었는데요.
3-1) 추상화한 interface 를 infra 모듈에 둔다면?
core 모듈 독립성이 보장되지 않음.
core 모듈은 최대한 외부 의존성을 줄이고 순수하게 비지니스 로직으로 넣자는 건데.
infra 모듈을 의존하고 그 안에 있는 JPA나 database 기술 등에 의존하게 되면
멀티 모듈을 쓰는 의미가 사라짐.
3-2) 그래서 만약 pojo interface 를 core 모듈에 둔다면?
그럼 그 안에 전달 인자로 주고 받아야 하는 entity 나 DTO들은?
테이블과 맵핑되는 entity 들은 JPA를 사용하므로 infra 모듈에 있고, 따라서 core 모듈에서는 가져다 쓸 수 없음.
그러면 core 모듈 안에서 자체적으로 만든 POJO DTO 를 써야 함.
그러면 core 모듈의 DTO 와 infra 모듈의 entity 는 완전히 분리됨.
전에 멘토님이 entity 와 dto 를 또렷하게 분리하지 않고 쓰는 쪽이 더 바람직하다고 하셨는데요.
이렇게 되면 멘토님이 말씀해주셨던 JPA 를 사용하는 장점이 흐려진다고 생각했어요.
core 모듈의 dto 와 infra 모듈의 entity 사이에 변화하는 번거로움도 생기고요.
3-3) 아니면 core 모듈과 infra 모듈 사이에 추상화한 interface 계층을 한 겹 더 끼워넣는다는 접근 자체가 잘못된 걸까요?
db entity 와 domain dto 를 또렷하게 구분하지 않고 쓰는 게 JPA의 컨셉에 부합한다고 했는데...
그 이유를 아래와 같이 추측해봤는데 맞을까요?
JPA를 만든 발상은 database 의 table 을 application 의 entity 처럼 객체 지향적으로 쓰고 싶다는 의미.
즉 table 데이터를 담고 있는 entity 를 애플리케이션 안에서 객체지향적으로 사용하고자 하는 거고,
그러니 entity 자체도 객체지향적인 성격의 DTO 처럼 구분없이 쓰자고 하는 것.
이렇게 추측했는데 혹시 틀렸거나 다른 이유가 있다면 알려주세요!
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
멘토링 시간 : 20:00 ~ 21:00 (1시간)
All reactions