์Šคํ”„๋ง ๋ถ€ํŠธ์™€ ์›น ์„œ๋ฒ„ ์‹คํ–‰ ๋ฐ ๋นŒ๋“œ ๋ฐฐํฌ

2023. 4. 21. 09:06ใ†์ธํ”„๋Ÿฐ/์Šคํ”„๋ง ๋ถ€ํŠธ - ํ•ต์‹ฌ ์›๋ฆฌ์™€ ํ™œ์šฉ

728x90

 

0๏ธโƒฃ ์Šคํ”„๋ง ๋ถ€ํŠธ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ 

https://start.spring.io/

์ด ์‚ฌ์ดํŠธ๋กœ ๋“ค์–ด๊ฐ€์„œ ์Šคํ”„๋ง ๋ถ€ํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. 

๋ฒ„์ „์€ 3.0.x ๋ฒ„์ „๋Œ€๋ฅผ ์„ ํƒํ•˜๋ฉด ๋˜๊ณ , 3  ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ž๋ฐ” 17์ด์ƒ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž๋ฐ” 17์ธ์ง€๋„ ๊ผญ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค!! 

 

๊ทธ๋ฆฌ๊ณ  Dependencies ์—์„œ spring web ์„ ์„ ํƒํ•ด์ฃผ๊ณ  ํ”„๋กœ์ ํŠธ ์ƒ์„ฑํ•˜๋ฉด ๋œ๋‹ค! 

 

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

build.gradle์—์„œ ๋ณด๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „์ด ์—†๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ 

์Šคํ”„๋ง ๋ถ€ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ˜„์žฌ ๋ถ€ํŠธ ๋ฒ„์ „์— ๊ฐ€์žฅ ์ ์ ˆํ•œ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „์œผ๋กœ ์ž๋™ ์„ ํƒํ•ด์ค€๋‹ค!!

(์˜ˆ์ „์—๋Š” ์Šคํ”„๋ง ๋ฒ„์ „๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „์ด ์•ˆ๋งž์œผ๋ฉด ์•ˆ๋˜๊ณ  ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋งŽ์•˜๋Š”๋ฐ ๊ทธ๊ฒŒ ํ•ด๊ฒฐ๋˜๋‹ˆ๊นŒ ๊ต‰์žฅํžˆ ์ข‹๋‹ค) 

 

 

 

1๏ธโƒฃ ์Šคํ”„๋ง ๋ถ€ํŠธ ์‹คํ–‰ ๊ณผ์ • 

@SpringBootApplication
public class BootApplication {

   public static void main(String[] args) {
      SpringApplication.run(BootApplication.class, args);
   }

}

์Šคํ”„๋ง ๋ถ€ํŠธ์—์„œ๋Š” ์‹คํ–‰ํ•  ๋•Œ ์ž๋ฐ” main ๋ฉ”์„œ๋“œ์—์„œ SpringApplication.run() ์„ ํ˜ธ์ถœํ•ด์ฃผ๋ฉด ์‹คํ–‰๋œ๋‹ค. 

์—ฌ๊ธฐ์„œ ๋ณด๋ฉด BootApplication.class ๋ฉ”์ธ ์„ค์ • ์ •๋ณด๋ฅผ ๋„˜๊ฒจ์ฃผ๋Š”๋ฐ ๋ณดํ†ต์€ @SpringBootApplication ์• ๋…ธํ…Œ์ด์…˜์ด ์žˆ๋Š” ํ˜„์žฌ ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

 

๊ทธ๋ฆฌ๊ณ  ์ € @SpringBootApplication ์–ด๋…ธํ…Œ์ด์…˜ ์•ˆ์—๋Š” ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์„ ํฌํ•จํ•ด์„œ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์ด ์„ค์ •๋˜์–ด ์žˆ๋‹ค. 

๊ทธ๋ฆฌ๊ณ  ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์€ ๊ธฐ๋ณธ์œผ๋กœ ํ˜„์žฌ ํŒจํ‚ค์ง€์™€ ๊ทธ ํ•˜์œ„ ํŒจํ‚ค์ง€๋ฅผ ๋ชจ๋‘ ์Šค์บ”ํ•œ๋‹ค. (์ปดํฌ๋„ŒํŠธ ์Šค์บ” ๋ฒ”์œ„๋Š” ๋”ฐ๋กœ ์ง€์ •๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.) 

 

 

์ด์ œ ์Šคํ”„๋ง ๋ถ€ํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋‚ด๋ถ€์—์„œ 

- ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ

- ๋‚ด์žฅ ํ†ฐ์บฃ WAS ์ƒ์„ฑ 

 

์„ ํ•˜๊ณ  ๊ทธ ๋‹ค์Œ ๋‚ด๋ถ€์—์„œ ๋‚ด์žฅ ํ†ฐ์บฃ์„ ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์„ ๋“ฑ๋กํ•˜๊ณ  ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์™€ ์—ฐ๊ฒฐํ•ด์„œ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค! 

๊ทธ ์ „์— ๊ธ€์—์„œ ๊ณต๋ถ€ํ–ˆ๋˜ ๋‚ด์šฉ์ธ๋ฐ ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ์‹ค์ œ๋กœ ๋” ๋ณต์žกํ•˜๊ธด ํ•˜๊ฒ ์ง€๋งŒ ๋Œ€๋žต์ ์ธ ๋™์ž‘์€ ์ „์— ๊ธ€์—์„œ ์ง์ ‘ ํ•ด๋ดค๋˜ ๊ทธ ๊ณผ์ •์„ ์Šคํ”„๋ง ๋ถ€ํŠธ๊ฐ€ ์ž๋™์œผ๋กœ ํ•  ์ˆ˜์žˆ๋„๋ก ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋‘” ๊ฒƒ์ด์—ˆ๋‹ค!

 

 

2๏ธโƒฃ ์Šคํ”„๋ง ๋ถ€ํŠธ ๋นŒ๋“œ์™€ ๋ฐฐํฌ 

์Šคํ”„๋ง ๋ถ€ํŠธ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๋‹ค.

๊ทธ๋ƒฅ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ๋Š” ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•œ ๋‹ค์Œ gradlew clean build ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

๊ทธ๋Ÿฌ๋ฉด build/libs ํด๋”์— xxx-0.0.1-SNAPSHOT.jar ๊ฐ™์€ jar ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค. 

 

์ด jar ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๊ณ  localhost:8080/hello-spring ํ•ด๋ณด๋ฉด ์ •์ƒ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. (๋ฌผ๋ก  Controller๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์„œ requestMapping ํ•ด๋‘” ๊ฒƒ์ด๋‹ค.) 

 

์ƒ์„ฑ๋œ jar ํŒŒ์ผ์„ ์ด์ œ ์••์ถ• ํ’€์–ด๋ณด๋ฉด 

์ด๋ ‡๊ฒŒ ๊ธฐ์กด๊ณผ ๋‹ค๋ฅด๊ฒŒ ์ƒˆ๋กœ์šด ๊ตฌ์กฐ๊ฐ€ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

META-INF

  - MANIFEST.MF 

 

org/springframwork/boot/loader 

 - JarLancher.class : ์Šคํ”„๋ง ๋ถ€ํŠธ main ์‹คํ–‰ ํด๋ž˜์Šค 

 

BOOT-INF 

 - classes : ์šฐ๋ฆฌ๊ฐ€ ๊ฐœ๋ฐœํ•œ ํŒŒ์ผ๊ณผ ๋ฆฌ์†Œ์Šค ํŒŒ์ผ 

 

lib : ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ 

 

classpath.idx : ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฒฝ๋กœ 

layers.idx : ์Šคํ”„๋ง ๋ถ€ํŠธ ๊ตฌ์กฐ ๊ฒฝ๋กœ 

 

 

jar ํŒŒ์ผ์„ ํ’€์–ด๋ณด๋ฉด lib ํด๋” ์•ˆ์— ๋ณด๋ฉด  jar ํŒŒ์ผ์ด ๋“ค์–ด์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์›๋ž˜ ๋ณด๋ฉด jar ๋‚ด๋ถ€์— jar ํŒŒ์ผ์ด ๋‹ด๊ฒจ ์žˆ๋‹ค๊ณ  ํ•ด๋„ ์ธ์‹ํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋Š”๋ฐ ์Šคํ”„๋ง ๋ถ€ํŠธ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ ๋•๋ถ„์— ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. 

 

 

 

3๏ธโƒฃ Excutable Jar ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ jar 

๋‚ด์žฅ ํ†ฐ์บฃ ๋นŒ๋“œ, ๋ฐฐํฌ (Fat Jar) (tistory.com)

 

๋‚ด์žฅ ํ†ฐ์บฃ ๋นŒ๋“œ, ๋ฐฐํฌ (Fat Jar)

WAR ๋ฐฐํฌ ๋ฐฉ์‹ ๋‹จ์ ๊ณผ ๋‚ด์žฅ ํ†ฐ์บฃ (tistory.com) WAR ๋ฐฐํฌ ๋ฐฉ์‹ ๋‹จ์ ๊ณผ ๋‚ด์žฅ ํ†ฐ์บฃ 0๏ธโƒฃ WAR ๋ฐฐํฌ ๋ฐฉ์‹์˜ ๋‹จ์  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๊ณ  ๋ฐฐํฌํ•˜๋ ค๋ฉด ์šฐ์„  ํ†ฐ์บฃ ๊ฐ™์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋ฅผ ๋ณ„๋„๋กœ ์„ค

hyejin.tistory.com

์ €๋ฒˆ ๊ธ€์—์„œ Fat Jar์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ดค๋Š”๋ฐ Fat Jar๋Š” ํ•˜๋‚˜์˜ Jar ํŒŒ์ผ์•ˆ์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํด๋ž˜์Šค๋“ค๊ณผ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. 

๊ทผ๋ฐ ์ด Fat Jar์˜ ๋‹จ์ ์œผ๋กœ๋Š” ์šฐ์„  jar ๋ฅผ ๋‹ค ์••์ถ•ํ•ด์ œํ•ด์„œ ํด๋ž˜์Šค๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํฌํ•จ๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์—ˆ์œผ๋ฉฐ, ์—ฌ๊ธฐ์— ํด๋ž˜์Šค ํŒŒ์ผ๋ช… ์ค‘๋ณต๋œ๋‹ค๋ฉด ํ•˜๋‚˜๋ฅผ ํฌ๊ธฐํ•ด์•ผ ํ•œ๋‹ค๋Š” ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. 

 

 

์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ์ด๋Ÿฌํ•œ ๋‹จ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ jar ๋‚ด๋ถ€์— jar ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” ํŠน๋ณ„ํ•œ ๊ตฌ์กฐ์˜ jar๋ฅผ ๋งŒ๋“ค๊ณ  ๋™์‹œ์— ๋งŒ๋“  jar ๋ฅผ ๋‚ด๋ถ€ jar๋ฅผํฌํ•จํ•ด์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ–ˆ๋‹ค. ์ด๋Ÿฐ ๊ฒƒ์„ ์‹คํ–‰๊ฐ€๋Šฅํ•œ jar (Excutable Jar) ๋ผ๊ณ  ํ•œ๋‹ค. 

 

์ด๋Ÿฐ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ jar๋Š” Fat Jar์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. 

์šฐ์„  jar ๋‚ด๋ถ€์— jar๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ๋ฐ”๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ , 

jar ๋‚ด๋ถ€์— jar๋ฅผ ํฌํ•จํ•ด์„œ ๊ฐ๊ฐ์˜ jar ๋‚ด๋ถ€์— ๊ฐ™์€ ๊ฒฝ๋กœ์˜ ํŒŒ์ผ์ด ์กด์žฌํ•œ๋‹ค๊ณ  ํ•ด๋„ ๋‘˜๋‹ค ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

4๏ธโƒฃ ์Šคํ”„๋ง ๋ถ€ํŠธ ์‹คํ–‰ ๊ณผ์ • 

 

- java -jar xxx.jar ์‹คํ–‰ 

 

- META-INF/MAINFEST-,MF 

: ์—ฌ๊ธฐ์„œ Main-class๋ฅผ ์ฝ์–ด์„œ main() ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. 

Main-Class๋ฅผ ๋ณด๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์ƒ๊ฐํ•œ BootApplication์ด ์•„๋‹ˆ๋ผ JarLauncher์ธ ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ๊ฐ€ ๋นŒ๋“œ์‹œ์— ๋„ฃ์–ด์ฃผ๋Š” ๊ฒƒ์œผ๋กœ 

JarLauncher๊ฐ€ jar ๋‚ด๋ถ€์— jar๋ฅผ ์ฝ์–ด ๋“ค์ด๋Š” ๊ธฐ๋Šฅ์ด๋‚˜ ํ•˜๋Š” ์ผ๋“ค์„ ์ฒ˜๋ฆฌํ•ด์ค€ ๋‹ค์Œ Start-Class์— ์ง€์ •๋œ main() ์„ ํ˜ธ์ถœํ•œ๋‹ค. 

 

* ์Šคํ”„๋ง ๋ถ€ํŠธ ๋กœ๋” 

org/springframwork/boot/loader ํ•˜์œ„์— ์žˆ๋Š” ํด๋ž˜์Šค๋กœ JarLauncher ๋ฅผ ํฌํ•จํ•œ ์Šคํ”„๋ง ๋ถ€ํŠธ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ Jar๋ฅผ ์‹ค์ œ๋กœ ๊ตฌ๋™์‹œํ‚ค๋Š” ํด๋ž˜์Šค๋“ค์ด ํฌํ•จ๋˜์–ด ์žˆ๊ณ , ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ๋นŒ๋“œ์‹œ์— ์ด ํด๋ž˜์Šค๋“ค์„ ํฌํ•จํ•ด์„œ ๋งŒ๋“ค์–ด์ค€๋‹ค. 

 

- JarLauncher.main() ์‹คํ–‰ 

 

- BootApplication.main() ์‹คํ–‰ 

 

 

 

 

 

 

 

 

 

 

 

 

728x90