์ถ์ฒ : ๋ด์ผ๋ฐฐ์์บ ํ
1. ์๊ตฌ์ฌํญ ํ์ธ
- ํค์๋๋ก ์ํ ๊ฒ์ํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ชฉ๋ก์ผ๋ก ๋ณด์ฌ์ฃผ๊ธฐ
- ๊ด์ฌ์ํ ๋ฑ๋กํ๊ธฐ
- ๊ด์ฌ์ํ ์กฐํํ๊ธฐ
- ๊ด์ฌ์ํ ์ต์ ๊ฐ ๋ฑ๋กํ๊ธฐ
2. ๋ค์ด๋ฒ ์คํ์์ค API๋ฅผ ํ์ฉ
3. ์ํ ๊ฒ์ API์ ๋์ ์์
4. ํ๋ก์ ํธ ์์ฑ ๋ฐ ์ธํ
1) Controller, Service, Dto ํจํค์ง ๋ฐ ํด๋์ค ์์ฑ
2) org.json ํจํค์ง ์ค์น ~ from maven repository
3) Postman์ผ๋ก ํ์ธ
4) UI ์ฌ์ ์์ : ์ด๋ฏธ์ง, HTML, JS, CSS ์ค๋น
5. AllInOneController๋ก ๊ฐ๋ฐํด๋ณด๊ธฐ : ํ๊ณ์ ํ์ ๋ชฉ์
1) ํ ๊ฐ์ ํด๋์ค์ ๋๋ฌด ๋ง์ ์์ ์ฝ๋๊ฐ ์กด์ฌ
- ์ฝ๋ ์ดํด๊ฐ ์ด๋ ค์: ์ฒ์๋ถํฐ ๋๊น์ง ๋ค ์ฝ์ด์ผ ์ฝ๋ ๋ด์ฉ์ ์ดํดํ ์ ์์
2) ํ์ ์์๋ ์ฝ๋ ์ถ๊ฐ ํน์ ๋ณ๊ฒฝ ์์ฒญ์ด ๊ณ์ ์๊น
2-1) ๊ด์ฌ ์ํ ๋ฑ๋ก ์ Client ์๊ฒ ์๋ต (Response) ํ๋ ๊ฐ ๋ณ๊ฒฝ
2-1-1) ๋ฑ๋ก๋ Product ์ ์ฒด ์ ๋ณด → ๋ฑ๋ก๋ Product ์ id
2-2) ์ต์ ๊ฐ (Myprice) ์ ๋ฐ์ดํธ ์กฐ๊ฑด ๋ณ๊ฒฝ
2-2-1) Client ๊ฐ ์ต์ ๊ฐ๋ฅผ 0์ ์ดํ๋ก ์ ๋ ฅ → ์๋ฌ ๋ฐ์
2-3) DB ํ ์ด๋ธ ์ด๋ฆ ๋ณ๊ฒฝ
2-3-1) Product ํ ์ด๋ธ์ lprice → lowprice ๋ณ๊ฒฝ
AllInOneController : ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ : ํ๋์ ๊ฐ์ฒด์ ํ๋์ ์ญํ (์๋ฏธ)
- ์ฒ์์ "์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ"
- "๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ"์ผ๋ก ๋ฆฌํฉํ ๋ง
๋ฆฌํฉํ ๋ง
1) ์ญํ ๋ถ๋ด : Controller, Service, Repository
2) ๊ฐ์ฒด ์ค๋ณต ์์ฑ ๋ฌธ์
๋นํจ์จ์ ์ธ ๊ฐํ ๊ฒฐํฉ : Repository์ ์์ฑ์ด ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ, ๊ทธ ์์ฑ์ ๊ฐ์ ธ๋ค ์ฐ๋ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ์์ ํด์ผํจ
๊ฐํ ๊ฒฐํฉ -> ์ฝํ ๊ฒฐํฉ : ์ ์ด์ ์ญ์ (Inversion Of Control)
์ฝํ ๊ฒฐํฉ : ์ฌ์ฉ์๊ฐ ์ฉ๋์ ๋ง๊ฒ ํ์ํ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ๋ค ์ฌ์ฉํ๋ ํํ
~ DI (Dipendency Injection) : ์์กด์ฑ ์ฃผ์
-> ์ฌ์ฉ์๊ฐ ์๋ฒ์์ ๋ง๋ค์ด์ง ๊ฐ์ฒด์ ์์กดํ์ฌ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋๋ก "์ฃผ์ "
Bean : ์คํ๋ง์ด ๊ด๋ฆฌํ๋ ๊ฐ์ฒด
IOC ์ปจํ ์ด๋ : Bean์ ๋ชจ์๋ ํต
๋น ๋ฑ๋ก๋ฐฉ๋ฒ
1) ๋น ํด๋์ค ์ค์ ๋ฐฉ๋ฒ (์๋์ค์ )
@Component : ํด๋์ค ์์ ์ค์ -> ์คํ๋ง ์๋ฒ ์คํ ์ ์คํ๋ง IOC์ ๋น ์ ์ฅ
(์ด๋ฆ : ํด๋์ค์ ์ ๊ธ์๋ง ์๋ฌธ์๋ก ๋ณ๊ฒฝ)
์ ์ฉ ๋ฒ์ : @ComponentScan์ ์ค์ ํด ๋ ํจํค์ง ๋ฐ ํ์ ํจํค์ง ์ค @Component๊ฐ ์๋ ํด๋์ค
(ex: @Component(basePackages = "com.sparta.myselectshop")
2) ๊ฐ์ฒด๋ฅผ ์ง์ Bean์ผ๋ก ์ค์ ํ๋ ๋ฐฉ๋ฒ (์ง์ ์ค์ )
@Bean
+ @Configuration ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ @Bean์ด ๋ค์ด๊ฐ ์ค์ ํด๋์ค๋ฅผ ์์ฑํ ํ @Bean ์ด๋ ธํ ์ด์ ์ Bean์ ์ ์ฅํ๊ณ ์ถ์ ํด๋์ค์ ์์ฑ์ ์์ ์ค์ ํ์ฌ ๊ทธ ๊ฐ์ฒด๋ฅผ Bean์ผ๋ก ์ง์ ์ค์ ํ๋ค.
๋น ์ฌ์ฉ ๋ฐฉ๋ฒ
1) ๊ฐ์ฒด์ @Autowired ์ค์ -> Bean์ ์ฌ์ฉํ ๋ฉ์๋์ @Autowired ์ค์
์กฐ๊ฑด : ์คํ๋ง IOC ์ปจํ ์ด๋์ ์ํด ๊ด๋ฆฌ๋๋ ํด๋์ค์์๋ง ์ฌ์ฉ๊ฐ๋ฅ
์์ฑ์ ์ ์ธ์ด 1๊ฐ์ผ ๋๋ง ์๋ต๊ฐ๋ฅ
public class A {
@Autowired // ์๋ต ๋ถ๊ฐ
public A(B b) { ... }
@Autowired // ์๋ต ๋ถ๊ฐ
public A(B b, C c) { ... }
}
+ Lombok ๋ผ์ด๋ธ๋ฌ๋ฆฌ
@RestController
@RequiredArgsConstructor // final๋ก ์ ์ธ๋ ๋ฉค๋ฒ ๋ณ์๋ฅผ ์๋์ผ๋ก ์์ฑํฉ๋๋ค.
public class ProductController {
private final ProductService productService;
// ์์ฑ์๊น์ง ์๋ตํ ์ฝ๋ ์์ฑ์ด ๊ฐ๋ฅํ๋ค
// @Autowired
// public ProductController(ProductService productService) {
// this.productService = productService;
// }
}
2) ApplicationContext : ์ปจํ ์ด๋์์ ๋น์ ์๋์ผ๋ก ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ
** ์คํ๋ง 3๊ณ์ธต ์ด๋ ธํ ์ด์ ( @Controller & @RestController / @Service / @Repository )์
๋ชจ๋ @Component ์ด๋ ธํ ์ด์ ์ ํฌํจํ๊ณ ์๋ค.
+ JPARepository๋ฅผ ์์ํ๋ ์ธํฐํ์ด์ค ๋ ํฌ์งํ ๋ฆฌ๋ Spring Date JPA์ ์ํด ์๋์ผ๋ก @Repository๊ฐ ์ถ๊ฐ๋๋ค.
+ ์ค์ผ์ฅด๋ฌ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์๋์ผ๋ก ์ต์ ๊ฐ๋ฅผ ์ ๋ฐ์ดํธ ํด์ฃผ๋ ๊ธฐ๋ฅ ์ถ๊ฐ
'Spring๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์คํ๋ง ์๋ จ : Project MySelectShop (3) (0) | 2022.12.15 |
---|---|
์คํ๋ง ์๋ จ : Project MySelectShop (2) (0) | 2022.12.15 |
T ์์นด๋ฐ๋ฏธ : JPA ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ด (2) (1) | 2022.12.13 |
T ์์นด๋ฐ๋ฏธ : JPA ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ด (1) (0) | 2022.12.13 |
JPA : ORM ์ด์ ๊น์ง ํ๋ฆ (0) | 2022.12.05 |