2023. 4. 21. 09:06ใ์ธํ๋ฐ/์คํ๋ง ๋ถํธ - ํต์ฌ ์๋ฆฌ์ ํ์ฉ
0๏ธโฃ ์คํ๋ง ๋ถํธ ํ๋ก์ ํธ ์์ฑ
์ด ์ฌ์ดํธ๋ก ๋ค์ด๊ฐ์ ์คํ๋ง ๋ถํธ ํ๋ก์ ํธ๋ฅผ ์์ฑํ ์ ์๋ค.
๋ฒ์ ์ 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์ ๋ํด์ ์์๋ดค๋๋ฐ 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() ์คํ
'์ธํ๋ฐ > ์คํ๋ง ๋ถํธ - ํต์ฌ ์๋ฆฌ์ ํ์ฉ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์คํ๋ง ๋ถํธ Auto Configuration (0) | 2023.04.25 |
---|---|
์คํ๋ง ๋ถํธ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด๋ฆฌ์ ์คํ๋ง ๋ถํธ ์คํํฐ (0) | 2023.04.24 |
์คํ๋ง ๋ถํธ 3.xx ๋น๋ ์ค๋ฅ (Could not resolve org.springframework.boot:spring-boot-dependencies:3.0.5.) (0) | 2023.04.20 |
๋ถํธ ํด๋์ค ๋ง๋๋ ๋ฒ (0) | 2023.04.18 |
๋ด์ฅ ํฐ์บฃ ๋น๋, ๋ฐฐํฌ (Fat Jar) (0) | 2023.04.18 |