728x90
반응형

자바 프로젝트를 할 때 pom.xml과 build.gradle… 도대체 뭐가 더 좋은 걸까요?
지금부터 Maven과 Gradle의 개념, 차이, 실무 적용 팁까지 정리해드립니다!


🛠 Maven이란?

  • Apache Maven은 자바용 프로젝트 빌드 & 라이브러리 관리 도구입니다.
  • 기존에 쓰이던 Ant의 대안으로 만들어졌고, 지금도 많이 사용되고 있어요.
  • 오픈소스(아파치 라이선스)로 배포됩니다.

📌 Maven의 핵심은 POM!

<!-- pom.xml 예시 -->
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>demo-app</artifactId>
  <version>1.0.0</version>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
  </dependencies>
</project>
 

💡 Maven 특징 요약

항목설명
🔗 POM 기반 Project Object Model (pom.xml) 중심 구조
📦 의존성 관리 자동으로 관련된 라이브러리도 같이 가져옴
🧱 표준화된 빌드 구조 설정이 정형화되어 있어 진입장벽 낮음
🧩 플러그인 중심 빌드 compile, test, package, install 등 명확
 

⚙ Gradle이란?

  • Gradle은 차세대 빌드 시스템으로, 빌드 속도가 빠르고 유연한 스크립트 작성이 강점이에요.
  • 특히 Android 앱 공식 빌드 도구로 사용되며, 최근에는 자바 서버에서도 많이 채택됩니다.
  • Groovy 또는 Kotlin DSL 기반으로 동작합니다.

🧠 Gradle은 이렇게 생겼어요

// build.gradle 예시
plugins {
    id 'java'
    id 'application'
}

group = 'com.example'
version = '1.0.0'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
}

💡 Gradle 특징 요약

항목설명
빠른 빌드 속도 캐시 및 병렬 빌드 지원
🧑‍💻 유연한 스크립트 기반 Groovy/Kotlin으로 빌드 로직 작성
📱 Android 필수 도구 Android Studio 기본 빌드 시스템
🧩 다양한 언어 지원 Java, C/C++, Python 등 다언어 빌드 가능
 

🔍 Maven vs Gradle 비교표

항목MavenGradle
설정 방식 XML (pom.xml) Groovy/Kotlin DSL
가독성 ❌ 길고 정형화됨 ✅ 간결하고 유연함
빌드 속도 느린 편 빠름 (캐시 활용)
멀티 모듈 설정 상속 기반 설정 주입 가능 → 더 유리함
대중성 기존 레거시/공공 시스템 다수 사용 최근 Spring, Android 중심 확산
학습 난이도 초보자에게 쉬움 유연하지만 초반 진입장벽 있음
 

🧑‍💻 그럼 어떤 걸 써야 할까?

상황추천
새 프로젝트 / Spring Boot Gradle 추천 (속도 + 유연함)
안드로이드 앱 개발 무조건 Gradle
공공기관 / 보수적 환경 Maven 유지보수 쉬움
기존 Maven 프로젝트 확장 그대로 Maven 사용 or Gradle로 전환 고려
멀티 모듈 + 빠른 빌드 원하는 경우 Gradle 확실히 유리함
 

✅ 마무리 요약

  • Maven은 표준적이고 안정적인 XML 기반 빌드 시스템
  • Gradle은 속도와 유연성 모두 잡은 차세대 빌드 도구
  • 실무에서는 Gradle이 점점 Maven을 대체하는 추세
728x90
728x90
반응형

자바 개발을 하다 보면 JAR, WAR, EAR 같은 단어를 많이 듣게 됩니다.
“이게 대체 뭐고 언제 뭘 써야 하지?”
아래 이미지와 함께 구조적 차이Spring Boot에서의 선택 기준을 쉽게 설명드릴게요.


📦 JAR / WAR / EAR 구조 한눈에 보기

위 그림을 보면 구조를 직관적으로 알 수 있어요:

  • JAR: 클래스 파일과 설정이 들어간 기본 단위
  • WAR: 웹 애플리케이션 배포용, WEB-INF, web.xml 포함
  • EAR: 여러 WAR + JAR 묶은 엔터프라이즈 통합 패키지

🔍 각 파일의 의미

✅ JAR (Java ARchive)

  • 자바 클래스와 메타정보를 하나로 압축한 파일
  • 애플리케이션이나 라이브러리를 배포할 때 사용
  • .class, META-INF/manifest.mf 포함

✅ WAR (Web Application Archive)

  • 웹 애플리케이션을 위한 구조
  • JSP, Servlet 기반 웹 프로젝트를 배포하는 데 사용
  • WEB-INF/web.xml, classes, lib 등 구조 고정

✅ EAR (Enterprise ARchive)

  • 기업용 대규모 시스템 통합 배포에 사용
  • 여러 WAR, JAR 모듈을 하나로 묶은 컨테이너
  • WebLogic, JBoss 같은 Java EE 서버 환경에 최적화

🚀 Spring Boot에서의 JAR vs WAR

항목                                          JAR (기본값)                                                             WAR
WAS 포함 ✅ 내장 Tomcat 내장 ❌ 외부 WAS 필요
실행 방식 java -jar로 바로 실행 Tomcat, WebLogic 등에서 배포
설정 편의성 간단한 구조, 빠른 실행 web.xml, 복잡한 디렉토리 구조
JSP 지원 ❌ JSP 미지원 (공식 비권장) ✅ JSP 사용 가능
활용 예시 REST API, 간단한 마이크로서비스 JSP/Servlet 중심 웹 프로젝트, 전통 웹앱

 

🧩 JSP + Spring Boot = WAR 필요?

Spring Boot에서 JSP를 사용하려면 아래 조건이 필요합니다:

  1. 프로젝트를 WAR로 패키징
  2. application.properties에 아래 설정 추가:
properties
복사편집
spring.mvc.view.prefix=/WEB-INF/views/ spring.mvc.view.suffix=.jsp
  1. JSP 파일은 src/main/webapp/WEB-INF/views/에 위치

📌 JAR로 배포할 경우 JSP는 작동하지 않음!
→ Thymeleaf, Mustache 등 템플릿 엔진 사용을 권장합니다.


✅ 정리 요약

구분                                                           JAR                                     WAR                                    EAR
내장 Tomcat ✅ 있음 ❌ 없음 ❌ 없음
실행 단독 실행 가능 WAS 필요 Java EE 서버 필요
JSP ❌ (제한적)
구조 단순 정형화 필요 매우 복잡
Spring Boot 기본
 

🏁 마무리

  • 개인 프로젝트, 마이크로서비스, REST API → JAR 추천
  • JSP, 레거시 웹앱 → WAR 필요
  • 대규모 엔터프라이즈 시스템 → EAR (하지만 요즘은 잘 안 씀)

Spring Boot는 기본적으로 JAR 중심 구조이며,
WAR는 외부 WAS와 JSP 기반 웹앱에 한정해서 사용하는 경우가 많습니다.

728x90

+ Recent posts