강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

수박님의 프로필 이미지
수박

작성한 질문수

토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1

백오피스 개발에도 헥사고날 아키텍처가 유용할까요?

작성

·

46

0

토비님 강의를 듣고 모든 시스템에 헥사고날 아키텍처 도입하고 싶은 욕구가 생겼습니다.

다만 백오피스는 업무의 80% 정도가 단순 CRUD인데 이러한 경우에도 계층형 아키텍처에 비해 헥사고날 아키텍처가 가지는 장점이 큰지? 백오피스에 핵사고날은 오버엔지니어링은 아닌지 궁금합니다.

답변 2

1

토비님의 프로필 이미지
토비
지식공유자

우선 헥사고날 아키텍처를 사용하는 것이 도메인 모델 패턴을 사용하거나 DDD 스타일의 패턴을 적용해야 하는 것은 아닙니다. 강의에서는 이 두가지를 결합해서 적용했지만, 순수하게 헥사고날 아키텍처 패턴만 따라서 개발하더라도 유익이 많습니다.

반복적인 CRUD가 많이 등장하는 데이터 처리 중심의 애플리케이션이더라도, 20%쯤에 해당하는 간단하지 않은 로직을 처리하는 코드는 테스트가 잘 작성되는 것이 중요할 겁니다. 백오피스라면 더더욱 버그 없이 작성된 코드를 만드는 것이 중요하고 그런 면에서 헥사고날 스타일로 작성해서 충실한 테스트를 만드는 것이 주는 장점이 많습니다.

그런데 요즘 스프링을 이용한 개발을 충실하게 하시면 사실 대부분 헥사고날 아키텍처에 거의 가깝게 개발하고 계실 겁니다. 스프링 데이터 JPA를 쓴다면 더더욱 그렇고요. 그렇다면 계층형 스타일과 다른 점은 크지 않습니다.

중요한 것은 서비스에 인터페이스를 반드시 정의하고, 어떤 의도로 어떤 기능을 사용하는지를 잘 담아두고요. 서비스 계층의 비즈니스 로직이 외부로 노출되지 않도록 주의하면 됩니다. 그리고 리포지토리를 비롯해 서비스에서 외부 시스템을 사용하는 코드도 인터페이스를 충실하게 작성하고 이를 서비스 모듈 안에 정의해두고, 어떤 환경에서는지 테스트하기 좋게 만들어서 중요하다고 생각되는 작업에는 반드시 테스트를 작성하시면 됩니다.

헥사고날 아키텍처 자체는 그리 어려운 것이 아니고, 스프링에서는 계층형 아키텍처와 구조적으로 거의 차이가 없습니다. 강의에서 강조드린 헥사고날 아키텍처의 특징과 요구사항이 어떤 것인지만 잘 생각해보시고 그걸 따를 수 있도록 하시면 좋겠습니다.

CRUD에 대해서 다 테스트를 만들어야 할지도 고민이 될 수 있는데, 매번 동일한 형식의 구조이고 별다른 로직이 없다면 처음부터 안 만드셔도 괜찮습니다. 그보다는 상태 변화와 복잡한 조회, 여러 엔티티가 한번에 바뀌는 로직 등에 대해서만 테스트를 잘 작성해보세요.

도메인 모델 패턴은 헥사고날 아키텍처가 요구하는 것은 아닙니다. CRUD 중심이라면 도메인 모델 패턴을 쓴다고 해도 아주 단순한 구조가 되겠죠. 하지만 20%에 해당하는 로직을 처리하는 코드에서 엔티티가 가진 정보를 이용하는 코드는 엔티티 내부에 작성하는 정도만 충실하게 하셔도 충분합니다.

제 생각에는 헥사고날 아키텍처가 오버엔지니어링이 될 가능성은 거의 없습니다. 시중에 잘못 알려진 복잡한 형식을 요구하는 오해를 가진 잘못된 헥사고날 아키텍처를 따르지만 않는다면요.

수박님의 프로필 이미지
수박
질문자

정성스러운 답변 너무 감사합니다.

헥사고날 아키텍처와 DDD 스타일의 패턴이 무조건 함께 사용해야 된다고

오해했었습니다.

한참을 고민하던 문제였는데 토비님 덕분에 해소 되어 감사합니다.

1

안녕하세요, 인프런 AI 인턴입니다. 수박님!

백오피스와 같은 시스템에 헥사고날 아키텍처를 도입하는 것에 대한 고민이 있으시군요. 헥사고날 아키텍처는 시스템의 확장성과 유지보수성을 높이는 데 매우 유용하지만, 모든 상황에서 최적의 선택은 아닐 수 있습니다. 특히 단순 CRUD 작업이 주를 이루는 백오피스 시스템에서는 몇 가지 고려해야 할 사항이 있습니다.

헥사고날 아키텍처의 특징

헥사고날 아키텍처는 도메인 로직을 외부 환경과 독립적으로 유지함으로써, 외부 변화(데이터베이스 교체, UI 변경 등)에 유연하게 대응할 수 있습니다. 이는 복잡한 비즈니스 로직을 가진 시스템에 매우 적합하지만, CRUD 중심의 백오피스에는 과도한 구조가 될 가능성도 있습니다.

백오피스에 대한 고려 사항

  1. 오버엔지니어링 우려: 단순한 CRUD 작업이 주요 기능이라면, 헥사고날 아키텍처의 복잡한 계층과 인터페이스가 오히려 오버헤드가 될 수 있습니다.

  2. 유연성 및 확장성: 하지만 백오피스 기능이 확장될 가능성이 있거나, 다양한 외부 시스템과의 통합이 필요할 수 있다면 헥사고날 아키텍처가 유리할 수 있습니다.

  3. 개발 팀의 경험: 팀이 헥사고날 아키텍처에 익숙하다면, 표준화된 코드 구조와 테스트 용이성에서 이점을 얻을 수 있습니다.

결론적으로, 현재 시스템의 요구사항과 미래의 확장성을 고려하여 최적의 아키텍처를 선택하는 것이 중요합니다. 또한, 백오피스 시스템에 대해 좀 더 가벼운 아키텍처를 우선 도입한 뒤, 필요에 따라 헥사고날 아키텍처로 점진적 변화를 고려해볼 수도 있습니다.

관련하여 더 깊이 있는 논의를 하고 싶다면, 아래 게시물들을 참조하시면 도움이 될 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

수박님의 프로필 이미지
수박

작성한 질문수

질문하기