본문 바로가기
PlayGround/마실가실 리팩토링

[1년 후 마실가실] 패키지 구조

by HJ0216 2024. 9. 3.

1년 전 진행했던 마실가실 프로젝트를 🛠️리팩토링하며 정리한 내용입니다.

 

 

JWT를 사용해서 로그인과 로그아웃 구현에 성공하였으나..

 

Redis 추가 설정, Spring Security 추가 설정, 리팩토링 전과 후의 Controller 등..

쓰지 않거나 리팩토링 대상이 아닌 파일들을 삭제할 겸 패키지 구조도 재정비를 하였습니다.

 

패키지 구성 관련해서는 공부해본 적이 없어서 이참에 간단하게 정리해보고자 합니다!

 

 

패키지 구조 종류

1. 계층형

각 계층을 대표하는 디렉터리를 기준으로 패키지 구성

  * 예: controller 패키지 안에 UserController, ScheduleController 등 모든 Controller가 위치

  * 장점: 프로젝트에 대한 이해가 상대적으로 낮아도 전체적인 구조를 빠르게 파악할 수 있음

  * 단점: 패키지에 너무 많은 클래스들이 모일 수 있음

             도메인과 관련된 변경이 발생했을 경우, 여러 패키지에서 수정이 발생

 

2. 도메인형

도메인을 기준으로 패키지 구성

  * 예: user 패키지 안에 controller, service, repository 패키지가 존재

  * 장점: 관련된 코드들이 응집해 있음

            도메인과 관련된 변경이 발생했을 경우, 하나의 패키지에서 수정이 발생(= 변경 범위가 적음)

  * 단점: 프로젝트에 대한 이해도가 낮을 경우 전체적인 구조를 파악하기 어려움

            개발자의 관점에 따라 어느 패키지에 둘지 애매한 클래스들이 존재

 

기존 패키지 구조
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
├─admin
│  ├─controller
│  ├─dao
│  └─service
├─api
│  └─controller
├─main
│  ├─controller
│  ├─dao
│  └─service
├─msgs
│  ├─chatbot
│  ├─dto
│  ├─entity
│  │  ├─destination
│  │  ├─review
│  │  ├─schedule
│  │  └─user
│  ├─error
│  ├─imageupload
│  ├─jwt
│  │  ├─controller
│  │  └─service
│  └─redis
├─mypage
│  ├─controller
│  ├─dao
│  ├─dto
│  └─service
├─transport
│  ├─controller
│  ├─dao
│  └─service
├─tripplace
│  ├─controller
│  ├─dao
│  └─service
├─tripschedule
│  ├─controller
│  ├─dao
│  ├─repository
│  └─service
├─tripstory
│  ├─controller
│  ├─dto
│  ├─repository
│  └─service
└─user
    ├─controller
    ├─dao
    ├─repository
    └─service

 

 

변경된 패키지 구조
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
32
33
├─domain
│  ├─tripschedule
│  │  ├─controller
│  │  ├─domain
│  │  ├─dto
│  │  ├─exception
│  │  ├─repository
│  │  └─service
│  ├─tripstory
│  │  ├─controller
│  │  ├─domain
│  │  ├─dto
│  │  ├─exception
│  │  ├─repository
│  │  └─service
│  └─user
│      ├─controller
│      ├─domain
│      ├─dto
│      ├─exception
│      ├─repository
│      └─service
├─global
│  ├─common
│  │  ├─error
│  │  ├─jwt
│  │  ├─model
│  │  └─redis
│  ├─config
│  └─util
└─infra
    ├─chatbot
    └─imageupload

 

 

 

🙋‍♀️

본 포스트는 공부 목적으로 작성하였습니다.
보시는 도중 잘못된 부분이나 개선할 부분이 있다면 댓글로 알려주시면 수정하도록 하겠습니다.

 

📑

참고 자료

 

[아키텍쳐] 패키지 구조 : 계층형 VS 도메인형 어떤 것을 선택할까?

🎯 0. 들어가기 전 MVC 패턴 & 자바 기반의 콘솔 애플리케이션에서는 관성적으로 model(domain) & controller & view 패키지를 만들고 시작하는 경우가 대부분이었다. 웹 애플리케이션을 구현하면서, 설계

ksh-coding.tistory.com

 

Spring Guide - Directory - Yun Blog | 기술 블로그

Spring Guide - Directory - Yun Blog | 기술 블로그

cheese10yun.github.io

 

Java Practices->Package by feature, not layer

Package by feature, not layer The first question in building an application is "How do I divide it up into packages?". For typical business applications, there seems to be two ways of answering this question. Package By Feature Package-by-feature uses pack

www.javapractices.com