Spring Boot๋ฅผ ์ฒ์ ๊ณต๋ถํ๋ ์ฌ๋์ด ๊ณต๋ถํ ๋ด์ฉ์ ์ ๋ฆฌํด์ ์์ฑํ ํฌ์คํธ์ ๋๋ค. ์ค๊ฐ๋ ๋ฐ ์ค๋ฅ๊ฐ ์์ ์ ์์ผ๋, ๋ฐ๊ฒฌํ์ ๋ค๋ฉด ๊ฐ๊ฐ์์ด ๋๊ธ์ ํตํด์ ์๋ ค์ฃผ์ธ์! ํ์ธํ๋ ๋๋ก ์ ํํ ์ ๋ณด๋ฅผ ํ์ธํด์ ๊ณ ์น๋๋ก ํ๊ฒ ์ต๋๋ค.
๊ฐ์
์ด๋ฒ Spring Boot ์คํฐ๋๋ ๋ฐฐ๋ฌ์ ๋ฏผ์กฑ์ ๊น์ํ๋๊ป์ ์ธํ๋ฐ์ ์ฌ๋ ค์ฃผ์๋ ์๋ฐ ์คํ๋ง ์์ ์ ๋ณต ์๋ฆฌ์ฆ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์งํํ๋ค. ๊ทธ ์๋ฆฌ์ฆ์ ๊ฐ์ฅ ์ฒซ ๊ฐ์์ธ ์คํ๋ง ์ ๋ฌธ - ์ฝ๋๋ก ๋ฐฐ์ฐ๋ ์คํ๋ง ๋ถํธ, ์น MVC, DB ์ ๊ทผ ๊ธฐ์ ์ ๋ค์ด๋ณด๊ณ ๊ฐ๋จํ ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค.
ํด๋น ๊ฐ์๋ ๋ด๊ฐ ๋๋ผ๊ธฐ์ ํฌ๊ฒ ๋ค์์ ์ปจํ ์ธ ๋ฅผ ๊ฐ์ง๊ณ ์์๋ค.
- Spring ๊ธฐ์ด ๊ธฐ๋ฅ ์จ๋ณด๊ธฐ
- Spring Bean๊ณผ ์์กด ๊ด๊ณ
- ํ์ ๊ด๋ฆฌ ์์ ๊ตฌํํ๊ธฐ
- Controller - Service - Repository ํจํด ์ ์ฉ
- Spring MVC ์ ์ฉ
- ์์ ์์ ์ ๋ค์ํ DB ์ ๊ทผ ๊ธฐ์ ์ ์ฉ
- JDBC
- JDBC Template
- JPA
- Spring Data JPA
- ์์ ์์ ์ ๊ฐ๋จํ AOP ์ ์ฉ
์ด ํฌ์คํธ์์๋ ํ์ ๊ด๋ฆฌ ์์ ๊ตฌํํ๊ธฐ์ ๋ํด์ ์ ๋ฆฌํด๋ณด๋๋ก ํ๊ฒ ๋ค.
Spring Bean๊ณผ ์์กด ๊ด๊ณ
Spring Bean
Spring Bean์ Spring IoC ์ปจํ
์ด๋์์ ๊ด๋ฆฌํ๋ ์๋ฐ ๊ฐ์ฒด์ด๋ค. ์ฐ๋ฆฌ๊ฐ Spring Bean์ ๋ง๋ค๋ฉด ๊ทธ๊ฒ์ Spring ์ปจํ
์ด๋์์ ๊ด๋ฆฌํด์ฃผ๊ณ , ์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ์ ํ์๋ก ํ ๋ ์ง์ new
ํค์๋๋ก ๋ง๋ค์ด์ ์ฐ๋ ๊ฒ์ด ์๋๋ผ Spring์ด ๊ด๋ฆฌํ๋ ๊ฐ์ฒด๋ฅผ ์ฃผ์
๋ฐ์ ์ฌ์ฉํ๊ฒ ๋๋ค.
์๋ฅผ ๋ค์ด SampleController
๋ผ๋ ์ปจํธ๋กค๋ฌ์์ SampleService
๋ผ๋ ์๋น์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค๊ณ ํ์. ๊ทธ๋ฌ๋ฉด Spring์์๋ SampleController
์์ new SampleService();
๋ฅผ ํตํด ์ง์ SampleService
๋ฅผ ๋ง๋ค์ด ์ฐ๋ ๊ฒ์ด ์๋๋ผ, ๋ค์๊ณผ ๊ฐ์ ํํ๋ก ์ฌ์ฉํด์ผ ํ๋ค.
@Controller
public class SampleController {
private final SampleService sampleService;
@Autowired
public SampleController(SampleService sampleService) {
this.sampleService = sampleService;
}
}
๋ณด๋ฉด, SampleService
๋ฅผ ์์ฑ์์ ์ธ์๋ก ์ ๋ฌ๋ฐ์์ ๊ทธ๊ฒ์ ์ธ์คํด์ค์ ๋ฑ๋กํ์ฌ ์ฌ์ฉํ๋ ํํ๋ก ๋์ด์๋ค. ๊ทธ๋ฌ๋ฉด ์ SampleService
๋ฅผ ์ ๋ฌํด์ฃผ๋ ํจ์(์ด๋ฅผ ํ
๋ฉด main
ํจ์)๋ ์ด๋ ์๋์ง ๊ถ๊ธํ ์ ์๋ค. ๋๋๊ฒ๋, ํ์๊ฐ ์๋ค! ์์ฑ์ ์์ @Autowired
๋ผ๋ ์ด๋
ธํ
์ด์
์ ๋ถ์ฌ๋๋ฉด Spring์ด ๊ตฌ๋๋๋ฉด์ ์ฐ๊ด๋ ๊ฐ์ฒด๋ฅผ ์ปจํ
์ด๋์์ ์ฐพ์์ ๋ฃ์ด์ค๋ค. ์ด๋ ๊ฒ ๊ฐ์ฒด ์์กด๊ด๊ณ๋ฅผ ์ธ๋ถ์์ ๋ฃ์ด์ฃผ๋ ๊ฒ์ DI(Dependency Injection), ์์กด์ฑ ์ฃผ์
์ด๋ผ๊ณ ํ๋ค.
๊ทธ๋ฐ๋ฐ, Spring ์ปจํ ์ด๋์์ ์ฐ๊ด๋ ๊ฐ์ฒด๋ฅผ ์ฐพ์์ ๋ฃ์ด์ค๋ค๊ณ ํ๋ค. ๊ทธ๋ฌ๋ฉด ๋น์ฐํ Spring ์ปจํ ์ด๋์ ๊ฐ์ฒด๊ฐ ๋ฑ๋ก์ด ๋์ด์์ด์ผ ํ ๊ฒ์ด๋ค. ๋ค๋ฅธ ๋ง๋ก, ์ฃผ์ ๋ฐ๊ณ ์ ํ๋ ๊ฐ์ฒด๊ฐ Spring Bean์ด์ด์ผ ํ๋ค. ์ด Spring Bean์ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ์ 2๊ฐ์ง๊ฐ ์๋ค.
- ์ปดํฌ๋ํธ ์ค์บ๊ณผ ์๋ ์์กด ๊ด๊ณ ์ค์
- SpringConfig๋ก ์ง์ ๋ฑ๋ก
ํ๋์ฉ ๊ฐ๋ตํ๊ฒ ์์๋ณด์.
์ปดํฌ๋ํธ ์ค์บ๊ณผ ์๋ ์์กด ๊ด๊ณ ์ค์
Spring์ด ๊ตฌ๋๋ ๋, ์ปดํฌ๋ํธ๋ผ๋ ๊ฒ๋ค์ ์ฐพ์ผ๋ฉด์ ์ด๊ฒ๋ค์ Spring Bean์ผ๋ก ์๋ ๋ฑ๋กํ๋ค. ์ฆ, Spring Bean์ผ๋ก ํน์ ๊ฐ์ฒด๋ฅผ ๋ฑ๋กํ๊ณ ์ถ๋ค๋ฉด ์ด๊ฒ์ด ์ปดํฌ๋ํธ๋ผ๋ ๊ฒ์ ๋ช ์ํด๋๋ฉด ๋๋ค.
๋ช
์ํ๋ ๋ฐฉ๋ฒ์ ์์ฃผ ๊ฐ๋จํ๋ฐ, ๊ทธ๋ฅ ํด๋์ค ์์ @Component
์ด๋
ธํ
์ด์
์ ๋ถ์ด๋ฉด ๋๋ค. @Controller
๊ฐ ์๋์ผ๋ก Spring Bean์ผ๋ก ๋ฑ๋ก๋๋ ์ด์ ๋, @Controller
๋ผ๋ ์ด๋
ธํ
์ด์
์ ๋ด๋ถ ๊ตฌํ์ @Component
๊ฐ ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
@Controller
, @Service
, @Repository
์ด 3๊ฐ์ ์ด๋
ธํ
์ด์
์ ๋ด๋ถ ๊ตฌํ์๋ ๋ชจ๋ @Component
๊ฐ ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ์, ์ ์ด๋
ธํ
์ด์
์ด ๋ถ์ด ์์ผ๋ฉด ์๋์ผ๋ก Spring Bean์ผ๋ก ๋ฑ๋ก๋๋ค.
์ฐธ๊ณ ๋ก, Spring์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ปจํ ์ด๋์ Spring Bean์ ๋ฑ๋กํ ๋, ๊ธฐ๋ณธ์ผ๋ก ์ฑ๊ธํค์ผ๋ก ๋ฑ๋กํ๋ค. ํ๋์ ์ธ์คํด์ค๋ฅผ ๊ณต์ ํด์ ๋๋ ค์ด๋ค๋ ์๋ฏธ์ด๋ค. ๋ฐ๋ผ์ ๊ฐ์ Spring Bean์ด๋ฉด ๋ชจ๋ ๊ฐ์ ์ธ์คํด์ค์ด๋ค. ์ค์ ์ ํตํด์ ์ฑ๊ธํค์ด ์๋๊ฒ ์ค์ ํ ์ ์์ง๋ง, ์ ๋ง ํน๋ณํ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๋ฉด ๋๋ถ๋ถ ์ฑ๊ธํค์ ์ฌ์ฉํ๋ค๊ณ ํ๋ค.
SpringConfig๋ก ์ง์ ๋ฑ๋ก
<์ด๋ฆ>SpringBootApplication
ํด๋์ค๊ฐ ์๋ ๊ฒฝ๋ก์ SpringConfig
๋ผ๋ ํ์ผ์ ์์ฑํ๋ฉด, ์คํ๋ง์ด ๊ตฌ๋๋ ๋ ์ด ํ์ผ์ ๋ด์ฉ์ ์ฐธ์กฐํ์ฌ ์ค์ ์ ์ ์ฉํ๋ค.
์๋ฅผ ๋ค์ด SampleService
๋ฅผ Spring Bean์ผ๋ก ๋ฑ๋กํ๊ณ ์ถ์ผ๋ฉด, SpringConfig
ํด๋์ค์ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํํ๋ฉด ๋๋ค.
@Configuration
public class SpringConfig {
@Bean
public SampleService sampleService() {
return new SampleService();
}
}
๋ญ ์จ์ผ๋์ง?
์์ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ ์ค, ์ด๋ค ๊ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋์ ๋ฐฉ์์ธ์ง ๊ณ ๋ฏผ์ด ๋ค์๋ค. ์ค๋ฌด์์๋ ์ฃผ๋ก ์ ํํ๋, ์ด๋ ธํ ์ด์ ์ผ๋ก ์ ๊ณต๋๋ Controller, Service, Repository์๋ ์ปดํฌ๋ํธ ์ค์บ์ ์ฌ์ฉํ๋ค๊ณ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ ํํ ๋์ง ์๊ฑฐ๋ ์๋๋ฉด ์ํฉ์ ๋ฐ๋ผ ์ธํฐํ์ด์ค๋ง ์ ์งํ๊ณ ๊ตฌํ ํด๋์ค๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ ์ํฉ์๋ ์ค์ ์ ํตํด์ ์ง์ Spring Bean์ผ๋ก ๋ฑ๋กํ๋ค๊ณ ํ๋ค. ์๋ฌด๋๋ ์ด๋ ๊ฒ ํ๋ ํธ์ด ํด๋์ค๋ค์ ์ด๋ ธํ ์ด์ ์ ๋ถ์๋ค ๋ผ์๋ค ํ๋ ๊ฒ๋ณด๋ค ๋์ ๊ฒ ๊ฐ๋ค.
๋ค์์
๋ค์ ํฌ์คํธ์์๋ ํ์ ๊ด๋ฆฌ ์์ ๋ฅผ ๋ง๋ ๊ฐ์ ๋ด์ฉ์ ๋ํด ๊ฐ๋ตํ ์ ๋ฆฌํด๋ณด๋๋ก ํ๊ฒ ๋ค.
๋.