Run Spring
์คํ๋ง์ ์คํํ๋ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค
์๊ฒ ์ต๋๋ค! ๋ฒํธ ์์ด ์ ๋ฆฌํ๊ฒ ์ต๋๋ค.
Startup startup = Startup.create();
์ ํ๋ฆฌ์ผ์ด์
์ ์คํ ์์ ์์ ์ ๊ธฐ๋กํ๊ธฐ ์ํ Startup
๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค. ์คํ ์๊ฐ์ ์ถ์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
if (this.registerShutdownHook)
์ ํ๋ฆฌ์ผ์ด์
์ข
๋ฃ ์ ์์ ํ๊ฒ ์ข
๋ฃ๋ ์ ์๋๋ก JVM์ shutdown hook์ ๋ฑ๋กํฉ๋๋ค. ์ด hook์ ์ ํ๋ฆฌ์ผ์ด์
์ด ์ข
๋ฃ๋ ๋ ํธ์ถ๋์ด ๋ฆฌ์์ค ์ ๋ฆฌ ๋ฐ ๋น ์ข
๋ฃ ๋ฑ์ ์์
์ ์ฒ๋ฆฌํฉ๋๋ค.
DefaultBootstrapContext bootstrapContext = createBootstrapContext();
์ ํ๋ฆฌ์ผ์ด์
๋ถํธ์คํธ๋ฉ ๊ณผ์ ์์ ํ์ํ ๊ฐ์ฒด๋ค์ ์ ์ฅํ๋ DefaultBootstrapContext
๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค. ์ด๋ ์ปจํ
์คํธ๊ฐ ์์ ํ ์ด๊ธฐํ๋๊ธฐ ์ ์ ํ์ํ ์ ๋ณด๋ฅผ ๋ด๋ ์ญํ ์ ํฉ๋๋ค.
configureHeadlessProperty();
ํค๋๋ฆฌ์ค ๋ชจ๋๋ฅผ ์ค์ ํฉ๋๋ค. ์๋ฒ ํ๊ฒฝ์์ UI๊ฐ ์๋ ์ํ๋ก ์ ํ๋ฆฌ์ผ์ด์
์ด ์คํ๋๋๋ก ์ค์ ํ๋ ์ต์
์
๋๋ค.
SpringApplicationRunListeners listeners = getRunListeners(args);
์ ํ๋ฆฌ์ผ์ด์
์คํ ๊ณผ์ ์์ ๋ฐ์ํ๋ ์ด๋ฒคํธ๋ฅผ ๊ฐ์งํ ์ ์๋ ๋ฆฌ์ค๋๋ค์ ์ด๊ธฐํํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์
์๋ช
์ฃผ๊ธฐ ๋์ ๋ค์ํ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
listeners.starting(bootstrapContext, this.mainApplicationClass);
์ ํ๋ฆฌ์ผ์ด์
์ด ์์๋์์์ ๋ฆฌ์ค๋๋ค์๊ฒ ์๋ฆฝ๋๋ค. BootstrapContext
์ ๋ฉ์ธ ์ ํ๋ฆฌ์ผ์ด์
ํด๋์ค ์ ๋ณด๋ฅผ ์ ๋ฌํฉ๋๋ค.
ApplicationArguments applicationArguments = new DefaultApplicationArguments(args);
์ปค๋งจ๋๋ผ์ธ์์ ์ ๋ฌ๋ ์ ํ๋ฆฌ์ผ์ด์
์ธ์๋ค์ ApplicationArguments
๊ฐ์ฒด๋ก ๋ณํํ์ฌ ์ ์ฅํฉ๋๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์
์คํ ์ค์ ํ์ํ ์ ์๋ ์ธ์ ์ ๋ณด๋ค์ ๋ด๊ณ ์์ต๋๋ค.
ConfigurableEnvironment environment = prepareEnvironment(listeners, bootstrapContext, applicationArguments);
์ ํ๋ฆฌ์ผ์ด์
ํ๊ฒฝ์ ์ค์ ํฉ๋๋ค. ํ๋กํ์ผ, ํ๋กํผํฐ ์์ค ๋ฑ์ ์ค์ ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์คํ ํ๊ฒฝ์ ์ค๋นํฉ๋๋ค.
Banner printedBanner = printBanner(environment);
์ ํ๋ฆฌ์ผ์ด์
์์ ์ ์ฝ์์ ์ถ๋ ฅ๋๋ Spring ๋ฐฐ๋๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
context = createApplicationContext();
ApplicationContext
๋ฅผ ์์ฑํฉ๋๋ค. Spring์ ํต์ฌ ์ปจํ
์ด๋๋ก, ๋ชจ๋ ๋น๊ณผ ์ค์ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋ ์ญํ ์ ํฉ๋๋ค.
context.setApplicationStartup(this.applicationStartup);
์ ํ๋ฆฌ์ผ์ด์
์ ์์ ์ ๋ณด๋ฅผ ApplicationContext
์ ์ค์ ํฉ๋๋ค.
prepareContext(bootstrapContext, context, environment, listeners, applicationArguments, printedBanner);
์ ํ๋ฆฌ์ผ์ด์
์ปจํ
์คํธ๋ฅผ ์ด๊ธฐํํ๊ณ , Environment
, ๋ฆฌ์ค๋, ์ ํ๋ฆฌ์ผ์ด์
์ธ์ ๋ฑ์ ์ ์ฉํฉ๋๋ค.
refreshContext(context);
ApplicationContext
๋ฅผ ์๋ก๊ณ ์นจํ์ฌ ๋ชจ๋ ๋น์ด ์ด๊ธฐํ๋๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ด ์ค๋น๋๋๋ก ํฉ๋๋ค.
afterRefresh(context, applicationArguments);
์ปจํ
์คํธ ์๋ก๊ณ ์นจ ์ดํ ์ถ๊ฐ์ ์ธ ์์
์ ์ฒ๋ฆฌํฉ๋๋ค. ์ถ๊ฐ์ ์ธ ์ด๊ธฐํ๋ ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ฑ์ด ํฌํจ๋ ์ ์์ต๋๋ค.
startup.started();
์ ํ๋ฆฌ์ผ์ด์
์ด ์ฑ๊ณต์ ์ผ๋ก ์์๋์์์ ๊ธฐ๋กํฉ๋๋ค.
if (this.logStartupInfo)
์ ํ๋ฆฌ์ผ์ด์
์ ์์ ์ ๋ณด๋ฅผ ๋ก๊ทธ๋ก ์ถ๋ ฅํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์
์ด ์คํ๋ ๋ฉ์ธ ํด๋์ค, ์คํ ์๊ฐ ๋ฑ์ ๊ธฐ๋กํฉ๋๋ค.
listeners.started(context, startup.timeTakenToStarted());
์ ํ๋ฆฌ์ผ์ด์
์ด ์์๋์๋ค๋ ์ด๋ฒคํธ๋ฅผ ๋ฆฌ์ค๋๋ค์๊ฒ ์ ๋ฌํฉ๋๋ค.
callRunners(context, applicationArguments);
ApplicationRunner
๋๋ CommandLineRunner
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๋น๋ค์ ์คํํฉ๋๋ค. ์ด ๋น๋ค์ ์ ํ๋ฆฌ์ผ์ด์
์ด ์์๋ ํ ์ถ๊ฐ์ ์ธ ์์
์ ์ํํฉ๋๋ค.
catch (Throwable ex)
์ ํ๋ฆฌ์ผ์ด์
์คํ ์ค ๋ฐ์ํ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๊ณ , ์คํจ ์ ์ ์ ํ๊ฒ ๋ฆฌ์์ค๋ฅผ ์ ๋ฆฌํ๊ฑฐ๋ ์ข
๋ฃ ์์
์ ์ํํฉ๋๋ค.
Last updated