๐ฅJava Spring Framework & Spring Boot : ์ค์ ๋ก ์ดํด๊ฐ ๋๋ ๊ฐ๋จํ๊ณ ์ง์ค์ ์ธ ๊ฐ์ด๋
Source: Dev.to
Spring Framework & Spring Boot ์ ์ํ, ํํ ํฌ, ํต์ , ์ ์์๊ฑฐ๋, ๋ฌผ๋ฅ, ์ ๋ถ ํ๋ซํผ ๋ฑ ์ ์ธ๊ณ ๋ฐฑ์๋ ์์คํ ์ ์ ๋ฐ ์ด์์ ์กฐ์ฉํ ๊ตฌ๋ํฉ๋๋ค.
5๋ ์ , ์ฒ์์ผ๋ก Spring ํ๋ก์ ํธ๋ฅผ ์์ํ์ ๋ ๋ชจ๋ ๊ฒ์ด ์๋์ ์ผ๋ก ๋๊ปด์ก์ต๋๋ค: ์ด๋ ธํ ์ด์ , ๋น, IoC, DI, ์ปจํธ๋กค๋ฌ, ์ค์ โฆ โSpring ์ผ๋ก ์ด ๋ชจ๋์ ๋ง๋ค๋ผโ๋ ๋งค๋์ ์ ๋ง์ ๊ธฐ์ตํฉ๋๋ค. ์ ๋ โ๋คโ๋ผ๊ณ ๋๋ตํ์ง๋ง ์์ผ๋ก๋ โSpring? ์ด๋ Spring?โ์ด๋ผ๊ณ ์๊ฐํ์ฃ . ์๋ธ๋ฆฟ, JSP, Struts ๋ฅผ ์ฌ์ฉํด ๋ณธ ๊ฒฝํ๋ ์๊ณ MVC ๋ฅผ ์ดํดํ์ผ๋ฉฐ Java ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํด ๋ณธ ์ ๋ ์์์ง๋ง, Spring ์ ๋ง์น ๋ค๋ฅธ ํ์ฑ์์ ์จ ์ธ๊ณ ํ๋ ์์ํฌ์ฒ๋ผ ๋๊ปด์ก์ต๋๋ค.
STS ์ ํ๋ก์ ํธ๋ฅผ ์ด์์ ๋ ํ๋ฉด์ ๋ฏ์ ๊ฐ๋ ๋ค๋ก ๊ฐ๋ํ์ต๋๋ค:
@Autowired@Controller@Component- beans
- contexts
- configurations
application.properties- XML vs. annotation
- IoC container
์ ๋ ๊ณ์ ์ค์ค๋ก์๊ฒ ๋ฌผ์์ต๋๋ค:
- โ
main()์ ์ด๋์ ์์ง?โ - โ๋๊ฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์์ง?โ
- โ์ด๊ฒ ๋ฌด์จ ๋ง๋ฒ์ธ๊ฐ? ์ ๋ช ํํ์ง ์์๊ฐ?โ
๋ฌธ์, ๋ธ๋ก๊ทธ, StackOverflow ์์๋ ๋์ฑ ํผ๋์ค๋ฌ์ด ์ฉ์ด๋ค์ ์ฌ์ฉํ์ต๋๋ค: Inversion of Control, Dependency Injection, AOP, bean lifecycle, application context. ์ฌ๋ฌ ์ฐจ๋ก ์๋ ๋์ ๋๋์ด @RestController ๋ฅผ ๋ง๋ค์ด โHello Worldโ ๋ฅผ ๋ฐํํ์ ๋๋ ๋น๋ฐ ์ฝ๋๋ฅผ ํด๋
ํ ๋ฏํ์ง๋ง, ํ์ต ๊ณก์ ์ ๊ฐํ๋ฅด๊ณ ์์งํ ๋ถํ์ํ๊ฒ ๋๊ปด์ก์ต๋๋ค.
์ด ๊ฐ์ด๋๋ฅผ ์์ฑํ๋ ์ด์ ๋ ์ค๋๋ ์ ์ด๋ณด์๋ค์ด ์ ์ ๊ฐ์ ํผ๋์ ๊ฒช์ง ์๋๋ก, ์ ํต์ ์ธ Java ๊ธฐ์ ์์ ์จ ์ฌ๋์ด๋ผ๋ ์ฝ๊ฒ ์ดํดํ ์ ์๊ฒ ํ๊ธฐ ์ํจ์ ๋๋ค.
Spring ์ด ์ ์กด์ฌํ ๊น?
Spring ์ด์ ์ Java ๊ฐ๋ฐ์๋ค์ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ์ ์ง๋ฉดํ์ต๋๋ค:
- ๊ณผ๋ํ ๋ณด์ผ๋ฌํ๋ ์ดํธ ์ฝ๋
- ์๋ ๊ฐ์ฒด ๊ด๋ฆฌ
- ๋ฐ๋ณต์ ์ธ ์ค์ (์ฃผ๋ก XML)
- ๊ฐํ ๊ฒฐํฉ๋์ ํ ์คํธํ๊ธฐ ์ด๋ ค์ด ์ฝ๋
- ๋ฌด๊ฑฐ์ด J2EE ์๋ฒ(WebSphere, WebLogic)
๊ทธ ๊ฒฐ๊ณผ ๋น๋๊ฐ ๋๋ ค์ง๊ณ , ํ ์คํธ๊ฐ ๊ณ ํต์ค๋ฝ๊ณ , ๊ฐ๋ฐ์๋ค์ ์ข์ ๊ฐ์ด ์ปค์ก์ต๋๋ค.
Rod Johnson ์ 2002๋ ์ ์ Expert OneโonโOne J2EE Design and Development ์ ๋ค์๊ณผ ๊ฐ์ ๋ ๊ฐ๋จํ ์ ๊ทผ๋ฒ์ ์ ์ํ์ต๋๋ค:
- ๊ฒฝ๋ ์ปจํ ์ด๋
- ์์กด์ฑ ์ฃผ์
- EJB ๋์ POJO
2003๋ ์ ์ถ์๋ Spring ์ โ์ํฐํ๋ผ์ด์ฆ Java ๋ฅผ ๋ ๊ฐ๋จํ๊ณ , ์์ฐ์ ์ด๋ฉฐ, ์ฆ๊ฒ๊ฒ ๋ง๋ ๋คโ ๋ผ๋ ๋ชฉํ๋ฅผ ๊ฐ์ก์ต๋๋ค. ๋ฌด๊ฑฐ์ด EJB ์ปจํ ์ด๋์์ ๊ฒฝ๋ IoC ์ปจํ ์ด๋๋ก, XMLโ์ค์ฌ ์ค์ ์์ ์ด๋ ธํ ์ด์ ๋ฐ ์๋ ์ค์ ์ผ๋ก, ์๋ ๋ฐฐ์ ์์ ์์กด์ฑ ์ฃผ์ ์ผ๋ก์ ๋ณํ๋ฅผ ๋์ ํ์ต๋๋ค.
| ๊ธฐ์กด Java (Spring ์ด์ ) | Spring ์ฌ์ฉ ์ |
|---|---|
| ๋ฌด๊ฑฐ์ด EJB ์ปจํ ์ด๋ | ๊ฒฝ๋ IoC ์ปจํ ์ด๋ |
| XML์ด everywhere | ์ด๋ ธํ ์ด์ & ์๋ ์ค์ |
| ํ ์คํธ๊ฐ ์ด๋ ค์ | ์ฌ์ด ๋จ์ ํ ์คํธ |
| ์๋ ๊ฐ์ฒด ๋ฐฐ์ | ์์กด์ฑ ์ฃผ์ |
| ๋๋ฆฌ๊ณ ๋น์ฉ์ด ๋ง์ด ๋๋ ๋ฐฐํฌ | ์๋ฒ ๋๋ ์๋ฒ๋ก ๋น ๋ฅธ ์์ |
| ์๊ฒฉํ๊ณ ๊ฒฝ์ง๋ ์ค๊ณ | ์ ์ฐํ๊ณ ๋ชจ๋ํ๋ ์ํคํ ์ฒ |
Spring ์ Java ๊ฐ๋ฐ์ ํ๋ํํ๊ณ , ์ดํ Spring Boot ๊ฐ ์ด๋ฅผ ๋์ฑ ์์ฝ๊ฒ ๋ง๋ค์์ต๋๋ค.
Spring Framework ๋?
Spring Framework ์ Java ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ๋จ์ํํ๋ ๋๊ตฌ์ ๊ธฐ๋ฅ๋ค์ ๋ชจ์์ ๋๋ค.
ํต์ฌ ๊ฐ๋
- Dependency Injection (DI) โ Spring ์ด ๊ฐ์ฒด ์์ฑ๊ณผ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํด ์ฝ๋๋ฅผ ๊น๋ํ๊ณ , ํ ์คํธ ๊ฐ๋ฅํ๋ฉฐ, ๊ฐ๋ ์ฑ ์๊ฒ ์ ์งํฉ๋๋ค.
- Inversion of Control (IoC) โ ์ฝ๋๊ฐ ํ๋ฆ์ ์ ์ดํ๋ ๊ฒ์ด ์๋๋ผ ํ๋ ์์ํฌ๊ฐ ํ๋ฆ์ ์ ์ดํฉ๋๋ค. ํ์ํ ๊ฒ์ ์ ์ธํ๋ฉด Spring ์ด ์ ๊ณตํด ์ค๋๋ค.
์ฃผ์ ๋ชจ๋
- Spring MVC โ ์น ์ ํ๋ฆฌ์ผ์ด์
- Spring Data JPA โ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ
- Spring Security โ ์ธ์ฆ, JWT, OAuth
- Spring AOP โ ํก๋จ ๊ด์ฌ์ฌ
- Spring Test โ ํ ์คํธ ์ ํธ๋ฆฌํฐ
Spring Boot ๋?
Spring Boot (2014 ์ถ์)๋ Spring ์์ ๊ตฌ์ถ๋์ด ์ด์ ์ IKEA ์ฑ ์์ ์กฐ๋ฆฝํ๋ฏ์ด ๋ณต์กํ๋ ์ค์ ์ ์์ ์ค๋๋ค.
์ฃผ์ ํน์ง
- Zero configuration โ ํด๋์คํจ์ค ์์กด์ฑ์ ๊ธฐ๋ฐํ ์๋ ์ค์
- Embedded servers โ Tomcat, Jetty, Undertow ๊ฐ ํฌํจ๋ ์คํ ๊ฐ๋ฅํ JAR
- Starters โ ์๊ฒฌ์ด ๋ฐ์๋ ์์กด์ฑ ๋ฒ๋ค(์:
spring-boot-starter-web) - Actuator โ ํ๋ก๋์ ์์ค ๋ชจ๋ํฐ๋ง ๋ฐ ๊ด๋ฆฌ ์๋ํฌ์ธํธ
- Simplified deployment โ WAR ํ์ผ ์์ด, ์ธ๋ถ ์๋ฒ ์ค์ ์์ด ๋ฐฐํฌ ๊ฐ๋ฅ
| Feature | Spring Framework | Spring Boot |
|---|---|---|
| Setup | Heavy | Super light |
| Configuration | Manual | Autoโconfig |
| Packaging | WAR | JAR |
| Embedded Server | No | Yes |
| Speed | Slower | FAST |
| Ideal For | Complex, legacy apps | Microservices, cloud, DevOps |
๋ง๋ฌด๋ฆฌ ์๊ฐ โ Spring Boot ๋ฅผ ๋ฐฐ์์ผ ํ๋ ์ด์
- ๊ฑฐ๋ํ ์ฑ์ฉ ์์ฅ โ ์ ์ธ๊ณ ๊ธฐ์ ์ด Spring/Boot ์ ์์กดํ๊ณ ์์ต๋๋ค.
- ์ค์ ์ํฅ๋ ฅ โ ์ํ๋ถํฐ ์ ๋ถ ํ๋ซํผ๊น์ง ๋ค์ํ ๋ถ์ผ์ ์ ์ฉ๋ฉ๋๋ค.
- ๊นจ๋ํ๊ณ ์ ์ง๋ณด์ ์ฌ์ด ์ฝ๋ โ DI ์ IoC ๊ฐ ํ ์คํธ ๊ฐ๋ฅ์ฑ๊ณผ ๊ฐ๋ ์ฑ์ ๋์ ๋๋ค.
- ํด๋ผ์ฐ๋โ์ฐ์ ์ํคํ ์ฒ โ ๋ง์ดํฌ๋ก์๋น์ค์ ์ปจํ ์ด๋ ๋ฐฐํฌ์ ์ต์ ํ๋์์ต๋๋ค.
- ๋ฏธ๋ ์งํฅ์ ์ธ ์คํฌ โ ์ง์์ ์ธ ์งํ์ ๊ฐ๋ ฅํ ์ปค๋ฎค๋ํฐ ์ง์์ ๋ฐ์ต๋๋ค.
์์งํ ๋งํด์, Spring Boot ๋ก ๊ฐ๋ฐํ๋ ๊ฑด ์ ๋ง ์ฌ๋ฏธ์์ต๋๋ค!