← 모든 글
Spring

2-1. Simple Application Modules

애플리케이션의 메인 패키지는 메인 애플리케이션 클래스가 위치한 패키지에요.

by rati·

애플리케이션의 메인 패키지는 메인 애플리케이션 클래스가 위치한 패키지에요. 메인 애플리케이션 클래스는 보통 다음과 같은 특징을 가지고 있어요.

package com.example.temp;  
  
import org.springframework.boot.SpringApplication;  
import org.springframework.boot.autoconfigure.SpringBootApplication;  
  
@SpringBootApplication  
public class MainApplication {  
  
    public static void main(String[] args) {  
       SpringApplication.run(ModularityStudyApplication.class, args);  
    }  
  
}
  • @SpringBootApplication 어노테이션이 붙어 있음.
  • 이를 실행하는 데 사용되는 main(…) 메서드를 가지고 있음.

Spring Modulith 는 메인 패키지의 각 직속 하위 패키지를 하나의 애플리케이션 모듈 패키지로 간주해요. 각 애플리케이션 모듈 패키지가 하위 package를 포함하지 않는다면, simple application modules로 간주해요.

Example
╰─  src/main/java
   ├─  example                        
   │  ╰─  Application.java
   ├─  example.inventory              
   │  ├─  InventoryManagement.java
   │  ╰─  SomethingInventoryInternal.java
   ╰─  example.order
      ├─  OrderManagement.java
      ╰─  SomethingOrderInternal.java

이 방식에서는 Java Package Scope 를 사용해요.

// public이 없음! (package-private 상태)
class SomethingInventoryInternal { ... }

이렇게 SomethingInventoryInternal를 구성하면 example.order 폴더에서는 해당 클래스를 알 수 없고, 해당 클래스는 InventoryManagement.java 에서만 사용할 수 있어요.

반대로 example.order 과 example.inventory 는 협력을 해야할 때에도 있어요. 그런 경우에는 다음과 같이 클래스를 구성해야 해요.

// public을 붙임!
public class InventoryManagement { ... }

결국 public 클래스들이 모듈의 API, 즉, Provided Interface 가 되요

장점

  • Spring Modulith의 설정과 그 외 툴을 따로 설정하지 않아도 자바 컴파일러를 통해 캡슐화가 가능하다.
  • 낮은 복잡도
  • public 를 통한 직관적인 api

단점

  • 비즈니스 로직이 복잡해지면, 파일 관리의 어려움.
  • public 클래스 생성 남발 시 경계가 모호해짐.
끝까지 읽어주셔서 감사합니다.
DISCUSSION

이 글에 대해 이야기해요

질문이나 다른 관점을 남겨 주세요.