본문 바로가기
Java/Spring, SpringBoot

[SpringBoot] 폴더링에 관련해서 (설 맞이 해커톤 1일차)

by 마라민초닭발로제 2025. 1. 29.

이번에 프로젝트하면서 폴더링 고민을 했습니다. 고민내용은 다음과 같습니다. 

 

 

1. 폴더링을 어떻게 가져갈까?

일단 폴더링을 어떻게 가져갈까에 대해서 고민했습니다. 정통적인 방식인 controller, domain, service로 분리를 하였습니다. 실제로 분리하면 다음과 같은 폴더 구조가 생성됩니다. 

 

(1) 진입 폴더에 Controller, Domain, Dto, Service, Repository, Entity 분리 

 

상기 폴더링은 이전 프로젝트에서 했던 폴더링이었습니다. 위와같은 폴더링은 폴더 하나에 너무많은 파일이 응집되어 있어 찾기 불편하다는 점 이었습니다. 예를 들어 HealthCheck Controller 와 TODO Controller를 하나의 폴더에서 관리하는 것이 응집성을 떨어뜨린다고 생각했습니다. 그래서 어떻게 하면 괜찮게 분리할 수 있을까에 대해서 고민했습니다. 

 

2. 아이디어 얻기 

이러한 방식에 대해서 좋지 않은 인식을 갖고 있었습니다. 이유는 프로젝트가 커지면 커질수록 다음과 같은 문제점에 직면할 수 있기 때문입니다.

1. 30개의 controller한개의 controller폴더에 적재하면, 그것이 과연 좋은 설계일까?

2. 어떤 class가 어떻게 연결되어있는지 파악하기 힘들다.

 

이를 어떻게 해결했는지를 알기 위해서 몇가지 프로젝트를 살펴 봤습니다. 선정 기준은 dnd 에서 많은 star수를 갖고 있는 java 프로젝트를 선정하였습니다. 

(1) 프로젝트 살펴보기

https://github.com/dnd-side-project/dnd-11th-7-backend

 

 

 

https://github.com/dnd-side-project/dnd-9th-2-backend

 

 

아래 프로젝트에서 폴더링만 가져왔습니다. 폴더링을 가져왓는데 둘의 공통점이 있었는데,

1. Domain을 중점으로 폴더링을 하였습니다. 

2. DomainEntity와 DBEntity를 나누지 않았습니다.

3. Domain 하위controller, service, dto를 두었습니다.

 

 

3.  프로젝트 설계 해보기 

 

 

예시 프로젝트와 다른 점은 나는 Domain entity와 DB Entity를 분리 했다는 점 입니다. 분리한 이유는 DDD에 대해서 공부가 필요할 것 같습니다. DDD를 잘 모르고 흉내만 내는 것은 할 수 있습니다. 하지만 철학이라던가 설계 방법이라던가  다양한 시행착오를 겪어보지 않은 상태에서 적용하기는 힘들 것으로 생각했습니다.(Service에서 다른 Service에 핑퐁하는 경우 DB Entity를 들고 있는게 과연 맞는 것일까?.. 기타 등등) 이로 인해 생산성 저하를 우려했습니다. 기회가 된다면 DDD를 적용하면 좋을 것으로 생각했습니다.

 

 

 

 

레퍼런스

https://stackoverflow.com/questions/51564704/ddd-entity-in-orm-and-java

https://namocom.tistory.com/980

https://github.com/dnd-side-project/dnd-9th-2-backend

https://github.com/ok-su-su/oksusu-susu-api/blob/develop/api/src/main/kotlin/com/oksusu/susu/api/friend/application/FriendRelationshipService.kt