" 내가 리뷰한 코드는 현재 총학생회 산하 기구인 IT지원위원회에서의 프로젝트에 대한 경험 내용이다.
올해 9월부터 IT지원위원회 소속이 되면서 총학생회 벡엔드 홈페이지에 대한 래거시 코드에 대한 리팩토링 역할을 담당했다.
지금까지 내가 참여했던 프로젝트들은 모두 Feature First 아키텍처였었다. 그런데 아지위(IT지원위원회)에서는 DDD 아키텍처를 사용하고 있었다. 나는 듣기만 했었던 DDD 아키텍처를 처음 경험했고 어떤 구조가 더 나은 구조인가를 고민해보았다."

[DDD 아키텍처의 나의 소감]
DDD구조를 처음 마주쳤을 때는 번거로움이 느껴졌다.
우선 구조는 다음과 같았다. 최상위 디렉토리는 [application], [domain], [global], [infra]로 구성되어 있었다.
application에는 Controller와 Service가,
domain에는 Domain, Service(Reader, Appendar, Modifier), Repository(인터페이스),
global에는 인증 및 에러처리, config파일들,
infra에는 jpa(entity, JpaRepository, Repository구현체)가 존재했다.
[내가 느낀 프로젝트의 큰 특징]
첫 번째,
infra부분과 실제 비즈니스 로직 사이에 의존성 주입으로 분리가 되어 있었다. 또한 동일하게 Entity와 Domain이 분리되어 있었다.
그러다 보니 안정적일까라는 의문이 먼저 들었다. 예를 들어 enum값 같은 경우를 파라미터로 받을 경우 String으로 불러온 다음 나중에 Mapper를 통해 변화해주는 과정을 거쳤다. 또한 Repository인터페이스의 구현체인 RepositoryImp에서 jpaRepository를 사용하는 구조다 보니 유지보수에 대한 번거로움이 떠올랐다.
두 번째,
비즈니스 로직이 들어가는 Service와 Repository를 호출하는 Reader, Appendar, Modifier Service로 나누어져 있는 구조였다. 처음 보는 순간 신기했었다. 서비스가 나뉘어져 있어 역할 분리가 잘 되어 있다라고 느껴졌다.
세 번째,
ACL이었다. spring aspect를 활용해 AOP로 조회 시 사용자의 권한을 체크해 response로 함께 권한 정보를 넘기고 있었다.
지금까지 acl에 대해서 적용해본 적이 없어서 백엔드 개발자로서 모랐던 것에 부끄러움이 느껴졌다. 아쉬움이 있다면 acl로 권한 차단은 이루어져 있지 않아서 나중에 리팩토링 해보고 싶다는 생각이 들었다.

[Feature First 아키텍처와 비교했을 때의 나의 생각]
우선 겪어본 바로는 Feature First가 개발하기에는 직관적이고 유지보수가 더 쉽다는 생각이 들었다.
하지만 DDD 아키텍처를 겪고 나니 규모가 큰 서비스일 수록 초기 개발 비용이 더 들겠지만 장기적으로 보았을 구분이 잘 되어 있고
코드 확장에 더 안정적인 구조가 아닐까라고 생각했다. 나중에 내가 개발을 하게 된다면 서비스 규모를 생각해서 선택을 할 것 같다.
확장성의 가능성이 크고 서비스 규모가 큰 경우라면 DDD로 하고 규모가 작으면서 빠른 구현을 요구한다면 Feature First 아키텍처로 구현할 것 같습니다.
[Feature First 아키텍처와 비교했을 때의 일반적인 시각]
" Feature-First 아키텍처와 DDD는 접근 철학이 다릅니다.
Feature-First는 기능 단위로 폴더를 구성하여 빠른 개발과 유지보수를 중시하는 실용적 구조화 방식입니다.
반면 DDD는 비즈니스 규칙과 도메인 개념을 중심으로 설계하여, 복잡한 비즈니스 로직의 일관성과 도메인 모델의 명확성을 강조합니다. Feature-First는 상대적으로 가볍고 초기 개발 속도가 빠르지만, 복잡한 비즈니스 로직을 다루기에는 한계가 있습니다.
DDD는 설계 난이도와 초기 비용이 높지만, 장기적으로는 확장성·유지보수성·도메인 일치성이 뛰어납니다.
그래서 많은 팀이 초기엔 Feature-First로 시작해, 규모가 커질수록 점진적으로 DDD 구조로 진화시키는 방식을 택합니다."
[결론]
여러 아키텍처를 경험하면서 어느 아키텍처가 더 좋다 안좋다 보다
현재 상황에 어떤 구조가 더 적절하다로 접근해야함을 배울 수 있었다.