Home > Server > πŸ§‘β€πŸ’»[Server] `jar` 파일만 μ‹€ν–‰ν–ˆλŠ”λ° μ„œλ²„κ°€ λ™μž‘μ΄ κ°€λŠ₯ν•œ μ΄μœ λŠ” λ¬΄μ—‡μΌκΉŒμš”?

πŸ§‘β€πŸ’»[Server] `jar` 파일만 μ‹€ν–‰ν–ˆλŠ”λ° μ„œλ²„κ°€ λ™μž‘μ΄ κ°€λŠ₯ν•œ μ΄μœ λŠ” λ¬΄μ—‡μΌκΉŒμš”?
Server

πŸ§‘β€πŸ’»[Server] jar 파일만 μ‹€ν–‰ν–ˆλŠ”λ° μ„œλ²„κ°€ λ™μž‘μ΄ κ°€λŠ₯ν•œ μ΄μœ λŠ” λ¬΄μ—‡μΌκΉŒμš”?

  • Spring Boot μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ JAR 파일만 싀행해도 μ„œλ²„κ°€ λ™μž‘ν•˜λŠ” μ΄μœ λŠ” Spring Bootκ°€ μ œκ³΅ν•˜λŠ” 자체 λ‚΄μž₯ μ›Ή μ„œλ²„ λ•λΆ„μž…λ‹ˆλ‹€.

1️⃣ Spring Boot의 λ‚΄μž₯ μ„œλ²„.

  • Spring BootλŠ” μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•˜κΈ° μœ„ν•΄ μ™ΈλΆ€ WAS(Web Application Server, 예: Tomcat, Jetty λ“±)λ₯Ό λ³„λ„λ‘œ μ„€μΉ˜ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.
  • Spring BootλŠ” λ‚΄μž₯ μ›Ή μ„œλ²„λ₯Ό ν¬ν•¨ν•˜μ—¬ JAR 파일둜 νŒ¨ν‚€μ§•λ˜λ©°, μ‹€ν–‰ μ‹œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό μ›Ή μ„œλ²„λ₯Ό λ™μ‹œμ— κ΅¬λ™ν•©λ‹ˆλ‹€.

1️⃣ μ£Όμš” λ‚΄μž₯ μ„œλ²„.

  • Tomcat(κΈ°λ³Έ)
  • Jetty
  • Undertow

2️⃣ JAR 파일 μ‹€ν–‰κ³Ό λ‚΄μž₯ μ„œλ²„ ꡬ동.

  • Spring Boot μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λΉŒλ“œν•˜λ©΄ Mavenμ΄λ‚˜ Gradle에 μ˜ν•΄ μ‹€ν–‰ κ°€λŠ₯ν•œ JAR 파일이 μƒμ„±λ©λ‹ˆλ‹€.
    • 이 JAR νŒŒμΌμ—λŠ” λ‹€μŒμ΄ ν¬ν•¨λ©λ‹ˆλ‹€.
        1. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œ(μ‚¬μš©μžκ°€ μž‘μ„±ν•œ Java μ½”λ“œ 및 μ„€μ •)
        1. 쒅속 라이브러리(Spring Framework, λ°μ΄ν„°λ² μ΄μŠ€ λ“œλΌμ΄λ²„ λ“±)
        1. λ‚΄μž₯ μ›Ή μ„œλ²„(예: Tomcat)
    • JAR νŒŒμΌμ„ μ‹€ν–‰ν•˜λ©΄ λ‹€μŒμ΄ μΌμ–΄λ‚©λ‹ˆλ‹€.
        1. java -jar λͺ…λ ΉμœΌλ‘œ main() λ©”μ„œλ“œκ°€ μ‹€ν–‰λ©λ‹ˆλ‹€.
        1. Spring BootλŠ” λ‚΄μž₯된 Tomcat λ“±μ˜ μ„œλ²„λ₯Ό μ‹œμž‘ν•©λ‹ˆλ‹€.
        1. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ»¨ν…μŠ€νŠΈλ₯Ό μ΄ˆκΈ°ν™”ν•˜κ³ , @Controller, @RestController λ“±μœΌλ‘œ μ •μ˜λœ μ—”λ“œν¬μΈνŠΈλ₯Ό λ§€ν•‘ν•©λ‹ˆλ‹€.
        1. λ‚΄μž₯ μ›Ή μ„œλ²„κ°€ μ§€μ •λœ 포트(κΈ°λ³Έ 8080)μ—μ„œ HTTP μš”μ²­μ„ μˆ˜μ‹ ν•©λ‹ˆλ‹€.

3️⃣ JAR 파일 ꡬ쑰.

  • Spring Boot의 μ‹€ν–‰ κ°€λŠ₯ν•œ JAR νŒŒμΌμ€ 일반 JAR 파일과 ꡬ쑰가 λ‹€λ¦…λ‹ˆλ‹€.
    • 이λ₯Ό β€œFat JAR” λ˜λŠ” β€œUber JAR”라고 λΆ€λ¦…λ‹ˆλ‹€.
      • Fat JAR은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ½”λ“œμ™€ λͺ¨λ“  쒅속 라이브러리λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.

1️⃣ Fat JAR μ£Όμš” ꡬ성

library-app-0.0.1-SNAPSHOT.jar
β”œβ”€β”€ BOOT-INF/
β”‚   β”œβ”€β”€ classes/       # μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 컴파일된 클래슀 파일
β”‚   β”œβ”€β”€ lib/           # λͺ¨λ“  쒅속 라이브러리
β”‚   └── META-INF/      # 메타데이터
└── org/               # Spring Boot λ‘œλ” (Spring Boot μ‹€ν–‰ κ΄€λ ¨ μ½”λ“œ)

2️⃣ Spring Boot Loader

  • org.springframework.boot.loader νŒ¨ν‚€μ§€μ˜ μ½”λ“œλŠ” JAR νŒŒμΌμ„ μ‹€ν–‰ κ°€λŠ₯ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μœΌλ‘œ λ§Œλ“­λ‹ˆλ‹€.
  • μ‹€ν–‰ μ‹œ λ‚΄μž₯ μ„œλ²„λ₯Ό μ΄ˆκΈ°ν™”ν•˜κ³ , μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ main() λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€.

4️⃣ λ‚΄μž₯ μ„œλ²„μ˜ λ™μž‘ 원리.

  • Spring BootλŠ” λ‚΄μž₯ μ„œλ²„λ₯Ό μžλ™μœΌλ‘œ κ΅¬μ„±ν•©λ‹ˆλ‹€.
    • 예λ₯Ό λ“€μ–΄ κΈ°λ³Έ λ‚΄μž₯ μ„œλ²„μΈ Tomcat의 λ™μž‘μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.
        1. Spring Bootκ°€ Tomcat의 EmbeddedServletContainerλ₯Ό μ΄ˆκΈ°ν™”ν•©λ‹ˆλ‹€.
        1. μ‚¬μš©μžκ°€ μž‘μ„±ν•œ @Controller λ˜λŠ” @RestControllerμ—μ„œ μ •μ˜ν•œ μ—”λ“œν¬μΈνŠΈλ₯Ό Tomcat의 μ„œλΈ”λ¦ΏμœΌλ‘œ λ“±λ‘ν•©λ‹ˆλ‹€.
        1. μ„œλ²„λŠ” μ§€μ •λœ 포트(κΈ°λ³Έκ°’: 8080)μ—μ„œ μš”μ²­μ„ μˆ˜μ‹  λŒ€κΈ°ν•©λ‹ˆλ‹€.

1️⃣ λ‚΄μž₯ μ„œλ²„μ™€ μ™ΈλΆ€ μ„œλ²„ 비ꡐ.

ν•­λͺ© λ‚΄μž₯ μ„œλ²„ μ™ΈλΆ€ μ„œλ²„
μ„€μΉ˜ ν•„μš” μ—¬λΆ€ μ„€μΉ˜ λΆˆν•„μš” 사전 μ„€μΉ˜ λΆˆν•„μš”
μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 배포 JAR 파일둜 μ‹€ν–‰ κ°€λŠ₯ WAR νŒŒμΌμ„ μ„œλ²„μ— 배포해야 함
μ‚¬μš© νŽΈμ˜μ„± κ°„λ‹¨ν•˜κ³  빠름 μ„€μ • 및 μœ μ§€λ³΄μˆ˜ ν•„μš”

5️⃣ μ‹€ν–‰ κ°€λŠ₯ν•œ JAR 파일의 μž₯점.

  • 1. λ‹¨μˆœν™” : 개발, λΉŒλ“œ, 배포, μ‹€ν–‰ 과정이 κ°„λ‹¨ν•©λ‹ˆλ‹€.
  • 2. 이식성 : JAR 파일만 있으면 Javaκ°€ μ„€μΉ˜λœ λͺ¨λ“  ν™˜κ²½μ—μ„œ μ‹€ν–‰ κ°€λŠ₯ν•©λ‹ˆλ‹€.
  • 3. 독립성 : μ™ΈλΆ€ WASκ°€ ν•„μš”ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ 쒅속성이 μ€„μ–΄λ“­λ‹ˆλ‹€.
  • 4. λΉ λ₯Έ μ‹€ν–‰ : λ³„λ„μ˜ μ„œλ²„ μ„€μ • 없이 λ°”λ‘œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ ꡬ동할 수 μžˆμŠ΅λ‹ˆλ‹€.

6️⃣ κ²°λ‘ .

  • Spring Boot μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ JAR νŒŒμ΄λž€ μ‹€ν–‰ν–ˆμ„ λ•Œ μ„œλ²„κ°€ λ™μž‘ν•˜λŠ” 이유
      1. λ‚΄μž₯된 μ›Ή μ„œλ²„(Tomcat, Jetty, Undertow λ“±)κ°€ ν¬ν•¨λ˜μ–΄ 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.
      1. JAR 파일 μ•ˆμ— μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œμ™€ λͺ¨λ“  쒅속 λΌμ΄λΈŒλŸ¬λ¦¬κ°€ ν¬ν•¨λœ Fat JAR ν˜•νƒœλ‘œ νŒ¨ν‚€μ§•λ˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.
        • 이 μ ‘κ·Ό 방식은 배포와 싀행을 κ°„μ†Œν™”ν•˜κ³ , κ°œλ°œμžκ°€ λΉ λ₯΄κ²Œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•  수 μžˆλ„λ‘ μ§€μ›ν•©λ‹ˆλ‹€.