- 강의 질문
- 개발/데이터
강의 수준이 너무 아쉽습니다.
강의 전반에 대한 피드백
1장부터 8장까지의 강의에서 이론 설명은 상당히 설득력 있게 진행되지만,
실습에 들어가면서 그 이론과 정면으로 배치되는 구현이 반복적으로 등장합니다.
1. 헥사고날 아키텍처 및 DDD 적용의 불일치
강의 초반에는 DDD와 헥사고날 아키텍처를 강조하시며,
고수준 컴포넌트(도메인, 애플리케이션)는 저수준 컴포넌트(어댑터, DB 기술 등)의 존재를 몰라야 하고
외부로의 의존은 반드시 Port를 통해 이루어져야 한다고 설명하십니다.
그러나 실습에서는 다음과 같은 문제가 반복됩니다.
Out Port의 반환 타입이 JPA Entity인 경우가 다수 존재
Application Service가 JPA Entity를 직접 다루며 도메인으로 매핑
이로 인해 Application Layer가 특정 DB 기술(JPA)에 오염
결과적으로 Out Port를 사용하는 의미 자체가 사라짐
이는 헥사고날 아키텍처의 기본 전제를 정면으로 위반하는 설계로 보입니다.
이론과 실습 간 괴리가 상당히 큽니다.
2. Axon Framework 동작 방식에 대한 이해 부족
물론 강사님이 처음 사용하신다고 언급은 하셨지만, 누군가를 가르치려면 그래도 올바른 지식을 전파하는게 정상이라고 생각합니다.
Axon Framework의 기본적인 처리 흐름은 다음과 같아야 합니다.
Client
→ CommandGateway
→ Aggregate @CommandHandler
→ AggregateLifecycle.apply()
→ @EventSourcingHandler (상태 변경)
→ EventStore(Axon Server) commit
→ EventProcessor
→ @EventHandler / Saga / Projection
그러나 강의 자료 및 실습 코드에서는 이 흐름이 자주 무너집니다.
commandGateway.send()의CompletableFuture.whenComplete()에서 DB insert/update 수행 -> 원래는 Projection을 만들고 Event Handler 에서 처리해야 함Aggregate에 Out Port를 주입하여 외부 시스템 접근 -> 사가 컴포넌트에서 하는게 맞음
다른 서비스 통신할 때 Event 를 공유해서 Axon Event 로 전파하고 있음 -> MSA 의 기본 철학 붕괴 -> 본래는 다른 서비스 간 통신은 카프카 이벤트를 이용
3. 레이어 및 패키지 구조 붕괴
헥사고날 아키텍처 기준으로 보면 다음과 같이 배치되는 것이 자연스럽습니다.
Aggregate / Event → Domain
Command / Saga → Application
Projection / Repository → Out Adapter
하지만 강의에서는 이 모든 요소가 하나의 패키지에 섞여 있으며,
결과적으로 레이어 간 책임 분리가 무너진 상태로 실습이 진행됩니다.
4. 학습자 관점에서의 문제점
강의 중 많은 부분이 “시간이 없다”는 이유로 생략되며,
그마저도 기본 설계 원칙이 지켜지지 않아 수강생이 직접 구조를 재설계해야 하는 상황이 반복됩니다.
특히 주니어 개발자에게는 잘못된 아키텍처 패턴을 정답으로 학습할 위험이 큼
이론과 실습이 일관되지 않아 혼란을 야기
강의를 그대로 따라가기보다는 별도의 자료 조사와 수정이 필수적
물론 이 과정을 통해 학습 효과를 얻은 부분도 있지만,
유료 강의로서의 완성도와 신뢰도에는 아쉬움이 큽니다.
이것저것 반복적으로 쉬운 작업만 하기 보다 MSA 에서 정상적인 케이스 딱 하나만 정석에 가깝게 구현하고 설명했다면 좋았을 거라고 생각합니다.
5. 총평
기술 주제 자체는 매우 좋고, 이론 설명 또한 의미가 있습니다.
다만 실습 코드와 강의 자료 전반에 대해 한 번 더 점검하고,
이론과 일관된 구현으로 정리한 뒤 제공되었다면 훨씬 좋은 강의가 되었을 것이라 생각합니다.