본문 바로가기
Tech Stack/Backend

🍃빌드 시스템(Maven/Gradle) 이해 및 프로젝트 기본 구조

by 박수무당벌레 2026. 6. 19.

1. 빌드 시스템 및 리포지토리 (Maven vs Gradle)

과거 레거시에서 쓰던 Ant 대신, 현재는 Maven이나 Gradle 같은 모던 빌드 시스템을 사용

1) Maven 리포지토리 메커니즘

  • 리포지토리(Repository): 빌드에 필요한 Artifact(주로 .jar 라이브러리 파일)들을 저장하는 공간. pom.xml에 필요한 Dependency(의존성)를 선언하여 사용함.
  • 로컬 리포지토리 (.m2 폴더): 빌드 시스템이 라이브러리를 찾을 때 가장 먼저 확인하는 개인 PC 내의 로컬 경로.
  • 원격 리포지토리 (Maven Central Repository): 로컬(.m2)에 필요한 라이브러리가 없으면, 네트워크를 통해 자동으로 Maven Central 리포지토리에서 다운로드하여 로컬에 저장함.

2) Maven vs Gradle 빌드 시스템 비교

  • Maven: pom.xml 설정을 기반으로 작동하며, 정해진 라이브러리 관리 규칙과 빌드 생명주기를 따름
    • mvn compile: 소스 코드를 컴파일하는 명령어 (STS 같은 통합개발환경을 쓸 때는 IDE가 자동으로 해주므로 직접 입력할 일이 거의 없음).
    • package: 컴파일된 코드를 배포 가능한 .jar 파일로 묶는 단계.
    • 순수 스프링 구동: <dependency>로 spring-context 라이브러리 추가
  • Gradle: build.gradle를 작성하면, 그루비(Groovy) 가상머신 위에서 실행되는 빌드 시스템
    • 빌드 명세서를 자바와 유사한 그루비 언어(또는 Kotlin)로 작성
    • 단순 설정을 나열하는 것을 넘어 빌드 시스템 자체를 코딩하여 프로젝트에 맞게 자유롭게 커스텀할 수 있다는 장점이 있음
    • 순수 스프링 구동: implementation 'org.springframework:spring-context:6.1.x'
🔍 기타 용어
플러그인(Plugin): 그 자체로 주체성을 가지고 컴파일, 패키징 등 특정 작업을 직접 수행하는 실행 파일 또는 빌드 프로세스를 확장하는 도구(빌드 도구를 직접 장착)
라이브러리(Library): 스스로 실행되지 않고 개발자가 호출해서 사용할 수 있도록 코드 기능만 묶어 놓은 집합. (프레임워크도 넓은 의미에서 라이브러리와 유사하게 코드를 제공받아 사용함)
ℹ️ 순수 스프링을 구동하려면 부트 스타터 대신 spring-context 라이브러리를 직접 주입해야 함.

2. Spring Boot & 프로젝트 구조

1) Spring Boot 특징

  • Maven/Gradle 위에서 실행되는 고급 프레임워크 패키지
  • Starter 자원 관리 및 버전 제어 (BOM & Parent): spring-boot-starter 시리즈(이름 그대로의 형태를 가진 패키지)를 통해 복잡한 의존성 설정을 알아서 최적의 버전으로 묶어 관리해 줌. (전이적 종속성 자동 관리)
  • 실행 방식: 프로젝트를 Run As ▶️ Spring Boot App으로 실행하면 내장 톰캣 등이 구동되며 스프링 부트 애플리케이션이 실행됨.
  • 참고: 현재 컴파일러 아키텍처가 순수 Spring Framework 기반으로 잡혀있을 때는 Run As 시 일반 Java Application으로 실행 될 수 있다. (이 경우 spring-boot-maven-plugin 설정이 필요)
ℹ️ 클래스 내에 main 메서드가 없으면 IDE의 실행(Run As) 메뉴에 Java Application이나 Spring Boot App 옵션이 나타나지 않는다.

2) 프로젝트 구조 및 파일 역할 미리보기

  • src/main/java: 실제 자바 소스 코드(package 및 클래스 파일)를 생성하고 개발하는 핵심 공간.
  • src/test/java: JUnit 같은 테스트 라이브러리를 사용해 단위 테스트 코드를 작성하고 실행하는 공간. (빌드 시스템이 이 폴더를 인식하여 배포 전 자동으로 테스트를 수행함)
  • target/(Maven 구조): 기본 자바 프로젝트의 bin 폴더와 같은 역할로, 빌드 및 컴파일된 결과물(.class 파일 등)이 저장되는 곳
  • STS4 종속 파일: 프로젝트 루트에 있는 .settings/ 폴더, .classpath, .project 파일 등은 STS4 IDE가 해당 프로젝트를 인식하고 관리하기 위해 내부적으로 사용하는 환경 설정 파일들.
ℹ️ JUnit 단위 테스트 (Toby Spring 기반)
개념: 자바에서 단위 테스트(Unit Test)를 수행할 수 있도록 도와주는 대표적인 테스트 라이브러리.
사용법: @Test 어노테이션이 붙은 메서드는 하나의 독립적인 테스트 항목이 되어 개별적으로 코드가 수행됨.
비즈니스 코드뿐만 아니라, 이 단위 테스트 코드가 꼼꼼하게 작성되어 있는 프로젝트가 건강하고 유지보수하기 좋은 프로젝트임