티스토리 뷰
■결정장애를 위한 패키지 구조 선택법
안녕하세요 박스여우입니다. 얼마 전에 프로젝트를 진행하며 패키지를 어떻게 해야 효율적이고 예뻐 보일까 고민에 빠진 적이 있었습니다. 이렇게 할까, 저렇게 할까 고민하다 패키지구조를 몇 번이나 수정했는지 모르겠습니다... 그래서 이번 포스팅에서는! 조금 가벼운 주제로 저처럼 패키지 구조를 선택하는 대에 어려움을 겪고 계시는 분들을 위해 패키지의 구조와 어떤 구조가 적합한지 선택하는 방법에 대해서 알아보도록 하겠습니다.
■레이어 우선 구조
우선 첫 번째 구조인 레이어 우선 구조입니다. 레이어 우선 구조는 각각의 이름을 가진 모듈을 하위에 두고 service, dto, dao 등 각 클래스들의 역할로 묶은 구조입니다.
- com.boxfox.service.modulename
- com.boxfox.datamodel.modulename
- com.boxfox.dao.modulename
- com.boxfox.dto.modulename
위와 같은 레이어 우선 구조의 경우 각 패키지가 서로 의존을 하는 상태인 circular dependency가 발생할 가능성이 작아지며 같은 기능을 하는 코드끼리 모아두어 중복되는 부분들을 제거하기가 쉬워진다는 장점이 있습니다.
하지만 레이어 우선 구조의 가장 큰 문제점은 프로젝트의 규모가 커졌을 때 발생합니다. 만약 프로젝트 구조가 커졌을 때 패키지 구조는 아래와 같아질 것 입니다.
- com.boxfox.service.module1
- com.boxfox.service.module2
- com.boxfox.service.module3
- com.boxfox.service.module4
- com.boxfox.datamodel.module1
- com.boxfox.datamodel.module2
- com.boxfox.datamodel.module3
- com.boxfox.datamodel.module4
■모듈 우선 구조
두 번째로 모듈 우선 구조입니다. 모듈 우선 구조는 이름 그대로 모듈을 우선으로 패키징 하고 service, dao 등의 도메인을 하위에 두는 구조입니다.
- com.boxfox.modulename.service
- com.boxfox.modulename.datamodel
- com.boxfox.modulename.dao
- com.boxfox.modulename.dto
모듈 우선 구조는 기능 단위로 개발하는 경우에 적합하며 모듈별로 분리해내기가 매우 쉽습니다. 하지만 모듈 우선 구조에는 각 패키지 간 circular dependency가 발생할 가능성이 높으며 모듈 간 중복된 코드가 발생할 수 있습니다.
■마치며
사실 저도 패키지 구조를 선택할 때 심각한 결정 장애를 겪고 있습니다만, 그래도 모듈 우선 구조를 조금 더 좋아하지 않나 싶습니다. 무엇보다 한가지만을 고수하는 것이 아닌 해당 프로젝트에 맞는, 해당 개발 방식에 맞는 구조를 상황에 맞게 선택하는 것이 좋을 것 같습니다.
'프로그래밍' 카테고리의 다른 글
웹사이트 스크래핑 라이브러리 Puppeteer 소개 (390) | 2019.08.15 |
---|---|
rxjs map operator 총 정리 (5384) | 2019.08.13 |
Ubuntu 에서 NodeJS 설치 및 HTTP 서버 구동 (416) | 2017.02.10 |
DataBase 회복기법 (376) | 2016.11.16 |
프로토콜과 OSI 7계층 (0) | 2016.09.23 |