티스토리 뷰

프로그래밍

패키징 구조의 장단점

박스여우 2017. 2. 9. 20:07

결정장애를 위한 패키지 구조 선택법

안녕하세요 박스여우입니다. 얼마 전에 프로젝트를 진행하며 패키지를 어떻게 해야 효율적이고 예뻐 보일까 고민에 빠진 적이 있었습니다. 이렇게 할까, 저렇게 할까 고민하다 패키지구조를 몇 번이나 수정했는지 모르겠습니다... 그래서 이번 포스팅에서는! 조금 가벼운 주제로 저처럼 패키지 구조를 선택하는 대에 어려움을 겪고 계시는 분들을 위해 패키지의 구조와 어떤 구조가 적합한지 선택하는 방법에 대해서 알아보도록 하겠습니다.



레이어 우선 구조

우선 첫 번째 구조인 레이어 우선 구조입니다. 레이어 우선 구조는 각각의 이름을 가진 모듈을 하위에 두고 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를 개발하다 datamodel을 개발하기 위해 헤매야 하는 상황이 발생할 수도 있습니다. 또한, 레이어 우선 구조는 추후에 모듈 단위로 분리할 때 어렵다는 단점이 있습니다.



모듈 우선 구조

두 번째로 모듈 우선 구조입니다. 모듈 우선 구조는 이름 그대로 모듈을 우선으로 패키징 하고 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
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함