| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
- 스프링부트
- HashMap
- math
- list
- 인텔리제이
- 정규식
- Visual Studio Code
- CSS
- js
- 배열
- 문자열
- vscode
- html
- junit5
- SpringBoot
- Java
- Array
- Eclipse
- 자바
- ArrayList
- javascript
- java테스트
- IntelliJ
- junit
- string
- 단위테스트
- 자바스크립트
- 자바문법
- 테스트자동화
- input
- Today
- Total
어제 오늘 내일
[Spring Boot] "톰캣 설치 안 해요?" 실행 가능한 Jar (Fat Jar) 만들기 & 배포하기 (Gradle) 본문
[Spring Boot] "톰캣 설치 안 해요?" 실행 가능한 Jar (Fat Jar) 만들기 & 배포하기 (Gradle)
hi.anna 2026. 3. 17. 01:40
"개발 끝났다!" 하고 좋아하기엔 이릅니다. 진짜 끝은 서버에서 돌아가는 것을 확인해야 끝이죠.
Spring Boot가 혁명적인 이유는 바로 내장 톰캣(Embedded Tomcat) 덕분입니다. 서버를 설치하는 게 아니라, 서버를 내 코드 안에 넣어버리는 것이죠.
이 모든 것을 가능하게 하는 실행 가능한 Jar(Executable Jar)의 비밀과 빌드 방법을 알아보겠습니다.
1. 일반 Jar vs 실행 가능한 Jar (Fat Jar)
우리가 평소에 라이브러리로 쓰는 Jar 파일과 Spring Boot가 만드는 Jar 파일은 다릅니다.
- 일반 Jar (Skinny Jar): 내가 짠 코드(
.class)만 들어있습니다. 이것만으로는 실행 못 합니다. (의존성 라이브러리가 없으니까요) - 실행 가능한 Jar (Fat Jar / Uber Jar): 내 코드 + 모든 의존성 라이브러리(Spring, Jackson 등) + 내장 톰캣까지 몽땅 하나로 뭉친 파일입니다.
그래서 이 파일 하나만 있으면, 자바가 깔린 어떤 컴퓨터에서도 더블 클릭 하듯 실행할 수 있는 것입니다.
2. Gradle로 빌드하기 ()
인텔리제이 같은 IDE에서 버튼 눌러서 실행하는 건 개발할 때뿐입니다. 서버에 올릴 파일을 만들려면 터미널을 열어야 합니다.
① Gradle Wrapper 사용하기 ()
프로젝트 폴더에 보면 gradlew (윈도우는 gradlew.bat) 파일이 있습니다.
- 왜 그냥
gradle안 쓰고gradlew를 쓰나요? - 내 컴퓨터랑 서버랑 Gradle 버전이 다르면 빌드가 깨질 수 있습니다.
- Wrapper(
w)를 쓰면 프로젝트 생성 시점의 Gradle 버전을 그대로 가져와서 실행하므로, 어디서든 똑같은 빌드 환경을 보장합니다.
② 빌드 명령어 실행
터미널에서 프로젝트 루트 경로로 이동한 뒤 입력하세요.
# 1. 기존 빌드 파일 삭제하고 깨끗하게 다시 빌드 (추천!)
$ ./gradlew clean build
# (윈도우라면)
> .\gradlew.bat clean build
3. 결과물 확인하기 ()
빌드가 성공하면(BUILD SUCCESSFUL), 프로젝트 폴더 안에 결과물이 생깁니다.
- 위치:
build/libs폴더 - 파일:
프로젝트이름-0.0.1-SNAPSHOT.jar(이게 바로 그 Fat Jar입니다!)
참고:
plain이라고 적힌 파일도 같이 생길 수 있는데, 이건 의존성이 빠진 껍데기(Skinny Jar)이니 무시하셔도 됩니다.
4. 실행해보기 ()
이제 만들어진 Jar 파일을 가지고 놀아볼까요? 터미널에서 해당 폴더로 이동 후 명령어를 입력합니다.
$ java -jar build/libs/demo-0.0.1-SNAPSHOT.jar
결과:
스프링 부트 로고가 뜨면서 서버가 시작됩니다! 이제 브라우저에서 localhost:8080으로 접속하면 잘 동작하는 것을 볼 수 있습니다.
💡 실전 꿀팁: 운영 환경(Profile)으로 실행하기
지난번에 배운 Profile 기억나시죠? 빌드된 파일은 그대로 두고, 실행할 때 옵션만 바꿔주면 됩니다.
# 운영(prod) 설정으로 실행해라!
$ java -jar -Dspring.profiles.active=prod demo.jar
이렇게 하면 application-prod.yml 설정을 읽어서 실행됩니다. (DB 주소 등이 바뀌겠죠?)
5. Jar 파일 내부가 궁금해요! (Deep Dive)
압축 프로그램으로 Jar 파일을 열어보면 재미있는 구조를 볼 수 있습니다.
BOOT-INF/classes: 우리가 짠 소스 코드 (.class)BOOT-INF/lib: 스프링, 톰캣, 로깅 등 모든 라이브러리 (.jar)META-INF/MANIFEST.MF: 명세서 파일
MANIFEST.MF 파일을 열어보면, Main-Class가 우리가 만든 클래스가 아니라 JarLauncher로 되어 있습니다.
이 녀석이 바로 BOOT-INF 안에 숨어있는 라이브러리들을 다 로딩해 주고, 마지막에 우리의 main() 메서드를 호출해 주는 역할을 합니다.
마치며
오늘의 결론입니다.
- Spring Boot는 톰캣을 내장하고 있어서 별도 설치가 필요 없다.
./gradlew clean build명령어로 모든 것이 포함된 Fat Jar를 만든다.java -jar 파일명.jar명령어로 어디서든 실행할 수 있다.
이제 이 파일 하나만 AWS 같은 클라우드 서버에 복사해 넣으면 배포 끝입니다! 정말 간단하죠?
하지만 매번 수동으로 빌드하고 서버에 복사하는 건 귀찮습니다. 다음 포스팅에서는 "코드를 올리면(Push) 자동으로 빌드되고 배포까지 되는" CI/CD 파이프라인(GitHub Actions)의 세계로 안내해 드리겠습니다.
