[Architecture] Multi-Module Architecture vs MSA

황성현·2025년 9월 30일

Architecture

목록 보기
3/3

🔑 1. 멀티모듈 아키텍처 (Multi-Module Architecture)

  • 하나의 애플리케이션(프로젝트) 안을 여러 모듈로 나누어 관리하는 방식.
  • 보통 Gradle, Maven 같은 빌드 툴에서 모듈을 정의해서 공통 코드, 도메인별 코드 등을 분리함.
  • 하나의 프로세스로 동작 → 배포 시에도 하나의 애플리케이션으로 패키징/배포
  • 모듈 간 의존성을 빌드 툴로 관리 → 컴파일 타임에 강하게 결합
  • 주로 코드 재사용과 관심사 분리가 목적
  • CI/CD 파이프라인도 대부분 하나

ex :
core 모듈 → DTO, 유틸, 공통 로직
domain-user, domain-order 모듈 → 각 도메인별 비즈니스 로직
api 모듈 → Controller, REST API endpoint
하나로 빌드해서 app.jar 로 배포 => 모듈로만 나누어져 있고, 동일 JVM 내에 메서드 호출로 동작

Multi-Module-App/
 ├── common/         # 공통 DTO, 유틸
 ├── user/           # 사용자 도메인 (UserService, UserRepository)
 ├── order/          # 주문 도메인 (OrderService, OrderRepository)
 └── api/            # Controller, REST API

🔑 2. MSA (Microservice Architecture)

  • 애플리케이션을 완전히 독립적인 서비스 단위로 쪼개어 배포하는 아키텍처.
  • 각 서비스가 독립된 프로세스로 동작 → 네트워크 통신(REST, gRPC, 메시지 큐 등)으로 연결
  • 각각 별도 배포/스케일링 가능
  • DB까지 분리하는 경우가 많음 (폴리글랏 퍼시스턴스)
  • 팀별로 독립적으로 개발할 수 있음
  • 장애 격리 가능 (특정 서비스가 죽어도 전체 서비스는 유지 가능)
  • CI/CD 파이프라인도 서비스별로 따로 운영

ex :

user-service, order-service, payment-service → 각각 Spring Boot 애플리케이션
각자 따로 빌드 & 배포 → 컨테이너 기반(Kubernetes)으로 스케일링 가능

MSA-Architecture/
 ├── user-service/   # 사용자 서비스
 └── order-service/  # 주문 서비스
  1. user-service/src/main/java/.../UserController.java
@RestController
public class UserController {
    @PostMapping("/users")
    public UserDto createUser(@RequestParam String name) {
        return new UserDto(1L, name);
    }
}
  1. order-service/src/main/java/.../OrderController.java
@RestController
@RequiredArgsConstructor
public class OrderController {
    private final RestTemplate restTemplate = new RestTemplate();

    @PostMapping("/orders")
    public String createOrder(@RequestParam String username) {
        // user-service 호출
        UserDto user = restTemplate.postForObject(
                "http://localhost:8081/users?name=" + username,
                null,
                UserDto.class
        );
        return user.name() + "님의 주문 생성 완료";
    }
}

➡️ 실행 순서

user-service (8081 포트) 실행

order-service (8082 포트) 실행

POST /orders?username=철수 요청 → order-service → 내부에서 user-service HTTP 호출 → 결과 조합

서비스별 별도 배포 & 실행

통신은 HTTP (네트워크)

user-service 만 따로 스케일링 가능


결론 : 멀티모듈은 코드 구조 정리를 주된 목적으로 / MSA는 배포 단위를 쪼개는 것을 목적으로 하는 아키텍처임. 따라서 멀티모듈은 하나의 AP이고, MSA는 여러개의 AP들이 모여서 동작하는 형태

0개의 댓글