Spring Boot - Code Structure

Stella·2022년 4월 14일
0

Java

목록 보기
3/18

Spring Boot – Code Structure

  • Spring Boot Project를 위해 따로 정해진 layout이나 code structure은 없지만, 모범 사례가 몇 개 있다.
  1. Project를 layer로 나누는 것.
    • service layer, entity layer, repository layer, etc.
  2. Project를 module로 나누는 것.
    • 만약 parent project가 두개의 childe module을 가지고 있따면, 첫번째 module은 data layer이고 두번째 module은 web layer.
  3. Project를 feautre로 나누는 것.

Main Application Class

  • Main Application Class는 @SpringBootApplication, @ComponentScan, @EnableAutoConfiguration 같은 annotation과 함께 root package에 있는 걸 추천.
@SpringBootApplication
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

}

feature별로 나누는 structure과 Layer 별로 나누는 structure가 가장 많이 쓰인다.

Structure 1: By feature

com
 +- gfg
     +- demo
         +- MyApplication.java
         |
         +- customer
         |   +- Customer.java
         |   +- CustomerController.java
         |   +- CustomerService.java
         |   +- CustomerRepository.java
         |
         +- order
             +- Order.java
             +- OrderController.java
             +- OrderService.java
             +- OrderRepository.java

Feature별로 나눌 때 장점

  1. class를 쉽게 찾음.
  2. 특정 하위 package를 삭제하면 특정기능과 관련된 모든 class 삭제 가능.
  3. Testing과 Refactoring이 쉬움.
  4. 기능 별로 전달 가능.

Structure 2: By Layer

com
 +- gfg
     +- demo
         +- MyApplication.java
         |
         +- domain
         |   +- Customer.java
         |   +- Order.java
         |
         +- controllers
         |     +- OrderController.java
         |   +- CustomerController.java
         |
         +- services
         |    +- CustomerService.java
         |    +- OrderService.java
         |
         +- repositories
              +- CustomerRepository.java
              +- OrderRepository.java  

위의 구조는 layer별로 class를 찾기 쉬워보이며, feature에 비해 단점이 존재.

단점

  1. Feature와 module은 따로 전달 불가.
  2. 특정기능과 관련된 class를 찾기 어려움.
  3. 특정 기능에 대한 code refactoring은 feature class가 모든 layer에 위치하기 때문에 어려움.
  4. github이나 bitbucket등으로 협업하는 개발자들이 merge할 때 충돌 발생가능.

Ref:
https://www.geeksforgeeks.org/spring-boot-code-structure/

profile
Hello!

0개의 댓글