Spring์ด๋?
1. ์คํ๋ง(Spring)์ด๋?
1.1 ์คํ๋ง์ ๊ฐ๋
Spring Logo
Spring์ ๋ฌด์์ผ๊น์? ์คํ๋ง์ ์๋ฐ ๊ธฐ๋ฐ์ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์๋ ํ๋ ์์ํฌ์ ๋๋ค. spring.io ์ฌ์ดํธ์์ ํ์ธํ๋ฉด ์คํ๋ง ํ๋ ์์ํฌ๋ ํ๋ ์๋ฐ ๊ธฐ๋ฐ์ ์ํฐํ๋ผ์ด์ฆ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ํ ํ๋ก๊ทธ๋๋ฐ ๋ฐ Configuration Model ์ ๊ณตํ๋ค๋ผ๊ณ ์ธ๊ธํ๊ณ ์์ต๋๋ค.
Python์ ์ด์ฉํ Django, Ruby๋ฅผ ์ด์ฉํ Ruby on Rails, Javascript๋ฅผ ์ด์ฉํ Node.js ๊ธฐ๋ฐ์ ์น ์๋ฒ ๊ฐ๋ฐ๊ณผ ๊ฐ์ด Java ๊ฐ๋ฐ์๋ค์ Spring์ ์ฌ์ฉํ์ฌ ์น ์๋น์ค๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. Spring ์ ์๋ง์ ๊ตญ๋ด ๊ธฐ์ ๊ณผ ํด์ธ ๊ธฐ์ ์์ ๋งค์ฐ ๋ง์ ์๋น์ค๋ฅผ ๋ง๋ค ๋ ์ฌ์ฉ๋๊ณ ์์ต๋๋ค. ์๋ฐ ๋ฐฑ์๋ ๊ฐ๋ฐ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋, ๋๋ถ๋ถ ์คํ๋ง์ ์ฌ์ฉํ๋ค๊ณ ํฉ๋๋ค. ์คํ๋ง์ ๊ตฌ์กฐ๋ ์๋์ ๊ฐ์ ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ์์ต๋๋ค.
Spring Architect
1.2. ์คํ๋ง์ ํน์ง
Spring์ ํน์ง๋ค์ ์๋์ ๊ฐ์ต๋๋ค.
- Spring์ ์๋ฐ ๊ฐ์ฒด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ๊ด๋ฆฌํด์ฃผ๋ฉฐ, ํฐ์บฃ๊ณผ ๊ฐ์ WAS ๊ฐ ๋ด์ฅ๋์ด ์์ด ์๋ฐ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ๋ํ ์ ์์ต๋๋ค.
- Spring์ ๊ฒฝ๋ ์ปจํ ์ด๋๋ก ์๋ฐ ๊ฐ์ฒด๋ฅผ ์ง์ Spring ์์์ ๊ด๋ฆฌํฉ๋๋ค. ๊ฐ์ฒด์ ์์ฑ ๋ฐ ์๋ฉธ๊ณผ ๊ฐ์ ์๋ช ์ฃผ๊ธฐ(Life cycle)์ ๊ด๋ฆฌํ๋ฉฐ, Spring ์ปจํ ์ด๋์์ ํ์ํ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ ์ฌ์ฉํฉ๋๋ค.
- Spring์ ๊ฐ์ฅ ํฐ ํน์ง์ผ๋ก IOC์ DI๊ฐ ๋ง์ด ์ธ๊ธ๋ฉ๋๋ค. IOC์ DI์ ๊ฐ๋จํ ๊ฐ๋
์ ์๋์ ๊ฐ์ต๋๋ค.
- ์ ์ด์ ์ญ์ (IOC, Inversion Of Control)
- ์ผ๋ฐ์ ์ผ๋ก ์ฒ์์ ๋ฐฐ์ฐ๋ ์๋ฐ ํ๋ก๊ทธ๋จ์์๋ ๊ฐ ๊ฐ์ฒด๋ค์ด ํ๋ก๊ทธ๋จ์ ํ๋ฆ์ ๊ฒฐ์ ํ๊ณ ๊ฐ ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ๊ณ ์กฐ์ํ๋ ์์ (๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ์ฌ ๋ฉ์๋ ํธ์ถ)์ ํ์ต๋๋ค. ์ฆ, ๋ชจ๋ ์์ ์ ์ฌ์ฉ์๊ฐ ์ ์ดํ๋ ๊ตฌ์กฐ์์ต๋๋ค. ์๋ฅผ ๋ค์ด A ๊ฐ์ฒด์์ B ๊ฐ์ฒด์ ์๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ผ๋ฉด, B ๊ฐ์ฒด๋ฅผ ์ง์ A ๊ฐ์ฒด ๋ด์์ ์์ฑํ๊ณ ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.
- ํ์ง๋ง IOC๊ฐ ์ ์ฉ๋ ๊ฒฝ์ฐ, ๊ฐ์ฒด์ ์์ฑ์ ํน๋ณํ ๊ด๋ฆฌ ์์ ์ฃผ์ฒด์๊ฒ ๋งก๊น๋๋ค. ์ด ๊ฒฝ์ฐ ์ฌ์ฉ์๋ ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ์ง ์๊ณ , ๊ฐ์ฒด์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ปจํธ๋กคํ๋ ์ฃผ์ฒด๋ ๋ค๋ฅธ ์ฃผ์ฒด๊ฐ ๋ฉ๋๋ค. ์ฆ, ์ฌ์ฉ์์ ์ ์ด๊ถ์ ๋ค๋ฅธ ์ฃผ์ฒด์๊ฒ ๋๊ธฐ๋ ๊ฒ์ IOC(์ ์ด์ ์ญ์ ) ๋ผ๊ณ ํฉ๋๋ค.
- ์์ฝํ๋ฉด Spring์ Ioc๋ ํด๋์ค ๋ด๋ถ์ ๊ฐ์ฒด ์์ฑ -> ์์กด์ฑ ๊ฐ์ฒด์ ๋ฉ์๋ ํธ์ถ์ด ์๋, ์คํ๋ง์๊ฒ ์ ์ด๋ฅผ ์์ํ์ฌ ์คํ๋ง์ด ๋ง๋ ๊ฐ์ฒด๋ฅผ ์ฃผ์ -> ์์กด์ฑ ๊ฐ์ฒด์ ๋ฉ์๋ ํธ์ถ ๊ตฌ์กฐ์ ๋๋ค. ์คํ๋ง์์๋ ๋ชจ๋ ์์กด์ฑ ๊ฐ์ฒด๋ฅผ ์คํ๋ง์ด ์คํ๋ ๋ ๋ง๋ค์ด์ฃผ๊ณ ํ์ํ ๊ณณ์ ์ฃผ์ ํด์ค๋๋ค.
- ์์กด์ฑ ์ฃผ์
(DI, Dependency Injection)
- ์ด๋ค ๊ฐ์ฒด(B)๋ฅผ ์ฌ์ฉํ๋ ์ฃผ์ฒด(A)๊ฐ ๊ฐ์ฒด(B)๋ฅผ ์ง์ ์์ฑํ๋๊ฒ ์๋๋ผ ๊ฐ์ฒด๋ฅผ ์ธ๋ถ(Spring)์์ ์์ฑํด์ ์ฌ์ฉํ๋ ค๋ ์ฃผ์ฒด ๊ฐ์ฒด(A)์ ์ฃผ์ ์์ผ์ฃผ๋ ๋ฐฉ์์ ๋๋ค. ์ฌ์ฉํ๋ ์ฃผ์ฒด(A)๊ฐ ์ฌ์ฉํ๋ ค๋ ๊ฐ์ฒด(B)๋ฅผ ์ง์ ์์ฑํ๋ ๊ฒฝ์ฐ ์์กด์ฑ(๋ณ๊ฒฝ์ฌํญ์ด ์๋ ๊ฒฝ์ฐ ์๋ก์๊ฒ ์ํฅ์ ๋ง์ด ์ค๋ค)์ด ๋์์ง๋๋ค. ํ์ง๋ง, ์ธ๋ถ(Spring)์์ ์ง์ ์์ฑํ์ฌ ๊ด๋ฆฌํ๋ ๊ฒฝ์ฐ์๋ A์ B์ ์์กด์ฑ์ด ์ค์ด๋ญ๋๋ค.
- ์ ์ด์ ์ญ์ (IOC, Inversion Of Control)
2. Spring Boot๋?
Spring Boot Logo
์คํ๋ง ๋ถํธ(Spring Boot)๋ ์คํ๋ง(Spring)์ ๋ ์ฝ๊ฒ ์ด์ฉํ๊ธฐ ์ํ ๋๊ตฌ๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค. ์คํ๋ง ์ด์ฉํ์ฌ ๊ฐ๋ฐ์ ํ ๋, ์ด๊ฒ์ ๊ฒ ์ธํ ์ ํด์ผ ๋ ์์๋ค์ด ๋ง์ต๋๋ค. ์ฌ๋ฌ๊ฐ์ง๋ฅผ ์ธํ ํด์ผ๋๋ ์ง์ ์ฅ๋ฒฝ์ด ์กด์ฌํ์ฌ Spring ์ ์ฒ์ ๋ฐฐ์ฐ๋ ค๋ ์ฌ๋๋ค์ ์ค๋์ ๊ทธ๋ง๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค๊ณ ํฉ๋๋ค. Spring Boot๋ ๋งค์ฐ ๊ฐ๋จํ๊ฒ ํ๋ก์ ํธ๋ฅผ ์ค์ ํ ์ ์๊ฒ ํ์ฌ, Spring ๊ฐ๋ฐ์ ์กฐ๊ธ ๋ ์ฝ๊ฒ ๋ง๋ค์ด์ฃผ๋ ์ญํ ์ ํ๊ณ ์์ต๋๋ค.
Spring Boot ๊ตฌ์กฐ
์์ ๊ตฌ์กฐ์์ ๋์จ ๊ฒ๊ณผ ๊ฐ์ด User๋ ์คํ๋ง์ ์ฌ์ฉํ๊ธฐ ์ํด์ ์ด๊ฒ์ ๊ฒ ๋ค์ํ ์ค์ ์ ์ง์ ํด์ค์ผ๋๋ค๋ ๋ฌธ์ ์ ์ด ์์ต๋๋ค. ๊ฐ๋ฐ์๊ฐ ์คํํ๊ฒฝ์ด๋ ์์กด์ฑ ๊ด๋ฆฌ ๋ฑ์ ์ธํ๋ผ ๊ด๋ จ ๋ฑ์ ์ฐ๋ ์๋์ง๊ฐ ์์๋ฉ๋๋ค. ํ๋ก๊ทธ๋๋ฐ์ ํ๋ ๋ฐ ์์ด ๋งค์ฐ ์ค์ํ ๋น์ฆ๋์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์กฐ๊ธ ๋ ์๋์ง๋ฅผ ํฌ์ ํ ์ ์๊ฒ Spring์ ๋ง์ ๋ถ๋ถ์ ์๋ํํ์๊ณ , ๋ง์ ๊ฐ๋ฐ์๋ค์ด ํ์ฌ Spring Boot์ ์ด์ฉํ์ฌ ๊ฐ๋ฐ์ ์งํํ๊ณ ์์ต๋๋ค.