๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Spring๐Ÿƒ

์Šคํ”„๋ง ์ˆ™๋ จ : Project MySelectShop (1)

728x90

์ถœ์ฒ˜ : ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„

 

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 ํ…Œ์ด๋ธ”์˜ lpricelowprice ๋ณ€๊ฒฝ

 

AllInOneController : ์ ˆ์ฐจ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ : ํ•˜๋‚˜์˜ ๊ฐ์ฒด์—” ํ•˜๋‚˜์˜ ์—ญํ• (์˜๋ฏธ)

  1. ์ฒ˜์Œ์—” "์ ˆ์ฐจ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ"
  2. "๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ"์œผ๋กœ ๋ฆฌํŒฉํ† ๋ง

๋ฆฌํŒฉํ† ๋ง

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๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค.

 

+ ์Šค์ผ€์ฅด๋Ÿฌ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋™์œผ๋กœ ์ตœ์ €๊ฐ€๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€

 

728x90