따맵 백엔드를 구현하고 코드를 통합하면서 클로드가 헥사고날과 DDD 방향으로
코드를 통합한 잇슈 .. 패키지 구조를 하나도 못알아보겠는 까막눈 잇슈 ..
헥사고날 아키텍처와 DDD는 둘 다 도메인(비지니스 로직)을 중심에 둔다는 공통점이 있지만,
헥사고날 아키텍처는 "시스템을 어떻게 계층화하고 의존성을 배치할까?"에 초점
DDD는 "도메인을 어떻게 모델링할까?"에 초점
기존에 주로 개발하던 계층형 구조는 단순하고 직관적이다.
Controller
: 외부 요청을 받는 역할Service
: 비지니스 로직Repository
: DB 접근하지만 계층형 구조의 문제점은 의존성 방향에 있다.
Controller
→ Service
→ Repository
순서로
아래로 내려가야 하고, Service
레이어는 DB같은 외부 인프라에 강하게 의존하게 된다.
따라서 비지니스 로직이 DB나 프레임워크에 종속되는 상황이 발생할 수 있다 ! !
따라서 어떤 프레임워크나 DB를 쓰더라도 비지니스 로직은 흔들리지 않는게 핵심이다.
Domain
: 순수한 핵심 규칙(비지니스 로직), DB/웹/프레임워크를 모름Application
: 유스케이스(Service 역할), Domain
을 이용해 시나리오 실행Port
: Application이 외부에 기대는 인터페이스(Ex. UserRepository)Adapter
: Port를 구현한 구체체(Ex. JPA 기반 JpaUserRepository)즉, 헥사고날 아키텍처는 비지니스 로직을 외부 기술에서 독립시키는 구조
보통 개발을 하면 발생하는 문제점:
DDD는 도메인(비지니스 문제)를 중심에 두고, 이를 코드에 직접 반영하려는 접근
(뭔 소릴까 ..?)
approvePayment()
로 반영DDD에서는 코드를 도메인 개념에 맞게 나눈다.
ID
로 구별되는 객체User(id=1, name="의연")
→ 이름 바뀌어도 id=1이면 같은 UserID
없음❌)Money(1000, "KRW")
, Email("velog@gmail.com")
Order (root)
→ OrderItem(entity)
, Money(VO)
어렵땅 ...