지금 구조는 parking-system-backend 아래에 여러 모듈이 있는 멀티모듈 프로젝트입니다.
예를 들면 보통 이런 식입니다.
- domain
- application
- framework
- bootstrap
이런 구조에서는 각 모듈을 따로따로 실행하기보다 루트 프로젝트에서 관리하는 것이 기본입니다.
즉, IntelliJ에서도 보통
Gradle > parking-system-backend > Tasks > build > build
이렇게 루트 기준으로 빌드하는 것이 맞습니다.
1. 왜 루트에서 빌드해야 하나요?
올려주신 Gradle 설정에는 이런 코드가 있습니다.
implementation project(':domain')
implementation project(':application')
이 뜻은 현재 모듈이 domain, application 모듈을 참조하고 있다는 뜻입니다.
즉, 이 프로젝트는 모듈끼리 연결되어 있어서
하나의 모듈만 따로 빌드하면 의존성이 꼬일 수 있고,
루트 프로젝트에서 전체를 같이 관리해야 정상적으로 동작합니다.
그래서 보통은 아래처럼 루트에서 실행합니다.
./gradlew build
IntelliJ에서는 이것과 같은 동작이:
Gradle > parking-system-backend > Tasks > build > build
입니다.
2. IntelliJ에서 build를 누르면 무엇이 되나요?
루트에서 build를 실행하면 Gradle이 전체 모듈에 대해 보통 아래 작업을 수행합니다.
- 소스 코드 컴파일
- 테스트 실행
- jar 생성
- 전체 빌드 완료
즉, 빌드를 하면 jar 파일이 생성될 수 있습니다.
하지만 여기서 중요한 점이 있습니다.
3. jar 파일은 다 같은 jar가 아닙니다
초보자분들이 가장 많이 헷갈리는 부분인데,
jar에는 크게 2종류가 있습니다.
A. 일반 jar
이건 라이브러리 모듈에서 만들어지는 jar입니다.
예를 들면:
- domain/build/libs/domain-버전.jar
- application/build/libs/application-버전.jar
- framework/build/libs/framework-버전.jar
이 파일들은 보통 다른 모듈이 참조하기 위한 jar입니다.
즉, 바로 실행하는 용도는 아닙니다.
이런 jar를 java -jar로 실행하면 안 될 가능성이 큽니다.
B. 실행 가능한 jar
이건 실제 서버를 띄울 수 있는 jar입니다.
보통 Spring Boot 메인 클래스가 들어 있는 실행 모듈에서 생성됩니다.
대부분의 멀티모듈 프로젝트에서는 이 역할을 bootstrap 모듈이 담당합니다.
예를 들면:
- bootstrap/build/libs/bootstrap-버전.jar
이 jar가 보통 실제로 실행하는 파일입니다.
4. 그럼 루트에서 build 하면 실행 가능한 jar도 생기나요?
답은:
생길 수도 있지만, 무조건 그런 것은 아닙니다.
이유는 실행 가능한 jar가 만들어지려면
해당 모듈에 Spring Boot 실행 설정이 들어 있어야 하기 때문입니다.
지금 보여주신 Gradle 설정을 보면
현재 보여주신 설정은 이런 플러그인을 사용하고 있습니다.
plugins {
id 'java-library'
id 'io.spring.dependency-management' version '1.1.7'
}
여기서 핵심은 java-library 입니다.
이건 보통 라이브러리 모듈에서 많이 씁니다.
즉, 지금 보여주신 모듈은 실행용 모듈이라기보다 공통 기능이나 기술 구현용 모듈일 가능성이 높습니다.
반면, 실행 가능한 Spring Boot 애플리케이션 모듈은 보통 이런 식입니다.
plugins {
id 'org.springframework.boot'
id 'io.spring.dependency-management'
id 'java'
}
즉, 실행 가능한 jar는 현재 보여주신 모듈이 아니라 bootstrap 같은 모듈에서 만들어질 가능성이 큽니다.
5. jar 파일은 어디에 생성되나요?
Gradle은 보통 각 모듈의 build/libs 폴더 아래에 jar를 생성합니다.
예상 위치는 보통 이렇습니다.
parking-system-backend/domain/build/libs/
parking-system-backend/application/build/libs/
parking-system-backend/framework/build/libs/
parking-system-backend/bootstrap/build/libs/
즉, 빌드 후에는 각 모듈 안으로 들어가서 build/libs를 확인하면 됩니다.
가장 먼저 확인해야 할 위치
실행 가능한 jar를 찾고 싶다면 보통 가장 먼저 여기부터 보시면 됩니다.
parking-system-backend/bootstrap/build/libs/
여기에 파일이 있다면 보통 그것이 실행용 jar일 가능성이 큽니다.
예:
bootstrap/build/libs/bootstrap-0.0.1.jar
6. IntelliJ에서 어떻게 빌드하면 되나요?
전체 빌드
가장 기본적인 방법은 이것입니다.
Gradle > parking-system-backend > Tasks > build > build
이렇게 하면 전체 모듈을 한 번에 빌드합니다.
터미널 명령으로는 아래와 같습니다.
./gradlew build
이 방법은:
- 전체 프로젝트가 잘 컴파일되는지 확인 가능
- 모듈 간 의존성까지 함께 체크 가능
- 각 모듈 jar 생성 가능
이런 장점이 있습니다.
7. 실행 가능한 jar를 확실하게 만들고 싶다면?
루트 build는 전체를 빌드하는 명령입니다.
하지만 초보자 입장에서는 **“실행용 jar 하나만 확실히 만들고 싶다”**는 경우가 많습니다.
그럴 때는 보통 실행 모듈인 bootstrap에 대해 아래처럼 실행합니다.
./gradlew :bootstrap:bootJar
이 명령은 실행 가능한 Spring Boot jar 생성용입니다.
생성 위치는 보통:
bootstrap/build/libs/
입니다.
즉,
- 전체 빌드는 build
- 실행용 jar만 만들고 싶으면 bootJar
이렇게 이해하시면 됩니다.
8. IntelliJ에서 실행은 어떻게 하나요?
실행은 보통 bootstrap 모듈 기준으로 합니다.
방법은 두 가지가 많습니다.
방법 1. Gradle의 bootRun 사용
bootstrap 모듈에 Spring Boot 설정이 있다면 IntelliJ Gradle 창에서 bootRun이 보일 수 있습니다.
보통:
- Gradle > bootstrap > Tasks > application
또는 - Gradle > bootstrap > Tasks > other
쪽에 bootRun이 있습니다.
터미널에서는:
./gradlew :bootstrap:bootRun
이렇게 실행합니다.
이건 서버를 직접 띄우는 명령입니다.
방법 2. 메인 클래스 실행
bootstrap 안에 이런 클래스가 있으면:
@SpringBootApplication
public class ParkingSystemApplication {
public static void main(String[] args) {
SpringApplication.run(ParkingSystemApplication.class, args);
}
}
이 파일을 IntelliJ에서 열고 Run 버튼으로 실행할 수도 있습니다.
하지만 처음에는 환경 설정이 꼬일 수 있어서
초보자라면 Gradle의 bootRun 방식이 더 안전한 편입니다.
9. 실행 가능한 jar인지 어떻게 구분하나요?
만약 어떤 jar가 실행용인지 헷갈리면 아래처럼 실행해보면 됩니다.
java -jar bootstrap/build/libs/파일명.jar
정상 실행되면 그건 실행 가능한 jar입니다.
반대로 이런 에러가 나오면:
- no main manifest attribute
- could not find or load main class
그 jar는 보통 일반 jar일 가능성이 큽니다.
즉, 실행용이 아니라 라이브러리용일 수 있습니다.
10. 초보자 기준으로 가장 쉽게 정리하면
이 프로젝트에서는 보통 이렇게 생각하시면 됩니다.
빌드할 때
전체 프로젝트 빌드는:
IntelliJ
- Gradle > parking-system-backend > Tasks > build > build
터미널
cd /mnt/c/dev/parking-system-backend
./gradlew build
jar 찾을 때
각 모듈의 아래 경로를 확인합니다.
각모듈/build/libs
예:
- domain/build/libs
- application/build/libs
- framework/build/libs
- bootstrap/build/libs
실행 가능한 jar 찾을 때
대부분은 여기를 먼저 봅니다.
bootstrap/build/libs
실행용 jar만 확실히 만들고 싶을 때
./gradlew :bootstrap:bootJar
앱을 바로 실행하고 싶을 때
./gradlew :bootstrap:bootRun
11. 결론
정리하면:
- 이 프로젝트는 멀티모듈 구조이므로 루트 프로젝트에서 빌드하는 것이 맞습니다
- IntelliJ에서는
Gradle > parking-system-backend > Tasks > build > build
로 전체 빌드하면 됩니다 - 빌드 후 jar는 보통 각 모듈의 build/libs 폴더에 생성됩니다
- 다만 생성된 jar가 모두 실행 가능한 것은 아닙니다
- 보통 실행 가능한 jar는 bootstrap/build/libs 에 생성됩니다
- 실행용 jar를 확실히 만들고 싶으면
./gradlew :bootstrap:bootJar - 서버를 바로 띄우고 싶으면
./gradlew :bootstrap:bootRun
'개발 > spring boot' 카테고리의 다른 글
| 헥사고날 아키텍처 — 싱글 모듈에서 멀티 모듈로 (0) | 2026.03.05 |
|---|---|
| self-invocation 때문에 서비스 검증(@Validated)이 안 걸리는 문제 코드와, 실무에서 제일 흔한 해결책인 검증이 필요한 메서드를 다른 빈으로 분리 방법 (0) | 2026.02.26 |
| 헥사고날 아키텍처 구조 설명 (0) | 2026.02.12 |
| (Spring) sso 외부 인증 토큰을 검증하고 세션에 사용자 정보를 저장하는 흐름 (0) | 2026.01.07 |
| resolveLocale(req)가 하는 일 - 이 요청의 언어/국가(locale)를 어떻게 정할까? (0) | 2025.10.15 |