์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์™€ ํŠธ๋žœ์žญ์…˜

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์— ๋Œ€ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€ํ‘œ์ ์ธ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ ๋ฐฉ์‹

1. ์„ ์  ์ž ๊ธˆ

2. ๋น„์„ ์  ์ž ๊ธˆ

 

์„ ์  ์ž ๊ธˆ

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ์‚ฌ์šฉ์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ํ—ค๋”ฉ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ๋ชปํ•œ๋‹ค.

ex) agg1์ด ์ˆ˜์ •ํ•˜๋Š” ๋™์•ˆ agg2๋Š” ์ž ๊ธˆ์ด ํ•ด์ œ๋  ๋•Œ๊นŒ์ง€ ๋ธ”๋กœํ‚น๋œ๋‹ค.

 

์„ ์  ์ž ๊ธˆ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ ์ถฉ๋Œ ๋ฌธ์ œ๋ฅผ ํ•ด์†Œํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ต์ฐฉ ์ƒํƒœ์— ๋น ์งˆ ์ˆ˜ ์žˆ๋‹ค.

 

๊ต์ฐฉ ์ƒํƒœ๋ž€?

์Šค๋ ˆ๋“œ๊ฐ€ ๊ฐ์ž ๋‹ค๋ฅธ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๋ฅผ ์„ ์ ํ•˜๋‹ค๊ฐ€ ์„œ๋กœ์˜ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒฝ์šฐ

๊ต์ฐฉ ์ƒํƒœ์— ๋ฐ”์ง€๋ฉด ์‹œ์Šคํ…œ์€ ๋งˆ๋น„๋˜๋ฉฐ, ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์„ ์ˆ˜๋ก ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ๋‹ค.

์ตœ๋Œ€ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์„ค์ •ํ•ด์คŒ์œผ๋กœ์จ ๊ต์ฐฉ ์ƒํƒœ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋น„์„ ์  ์ž ๊ธˆ

๋ณ€๊ฒฝํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์ œ DBMS์— ๋ฐ˜์˜ํ•˜๋Š” ์‹œ์ ์— ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ํ™•์ธ

-> ๋ฒ„์ „ ๊ฐ’์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

๋งŒ์•ฝ ์ปค๋ฐ‹ ์‹œ์— ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ๋ฒ„์ „์ด ๋‹ค๋ฅด๋ฉด ๋ฐ์ดํ„ฐ ์ˆ˜์ •์— ์‹คํŒจํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ๋ฃจํŠธ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ์™ธ ๋‹ค๋ฅธ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ๋ณ€๊ฒฝ ๋˜์—ˆ์„ ๊ฒฝ์šฐ, ๋ฒ„์ „์ด ๊ทธ๋Œ€๋กœ์ธ ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ๊ฐ•์ œ๋กœ ๋ฒ„์ „์„ ์ฆ๊ฐ€์‹œํ‚ฌ์ˆ˜ ์žˆ๋‹ค.

 

์˜คํ”„๋ผ์ธ ์„ ์  ์ž ๊ธˆ

์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์— ๊ฑธ์ณ ๋™์‹œ ๋ณ€๊ฒฝ์„ ๋ง‰๋Š”๋‹ค.

์ฒซ ๋ฒˆ์งธ ํŠธ๋žœ์žญ์…˜์—์„œ ์˜คํ”„๋ผ์ธ ์ž ๊ธˆ์„ ์„ ์ ํ•˜๊ณ  , ๋งˆ์ง€๋ง‰์— ์ž ๊ธˆ์„ ํ•ด์ œํ•œ๋‹ค.

 

๋งŒ์•ฝ ์˜คํ”„๋ผ์ธ ์„ ์  ์ž ๊ธˆ์„ ํ•˜๊ณ  ํ•ด์ œํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜๊ธฐ ์œ„ํ•ด ์ž ๊ธˆ ์œ ํšจ ์‹œ๊ฐ„์„ ์„ค์ •ํ•ด์•ผํ•œ๋‹ค.

ํ•„์š”์— ๋”ฐ๋ผ์„œ ์—ฐ์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๋„๋ฉ”์ธ ๋ชจ๋ธ๊ณผ ๊ฒฝ๊ณ„

 

ํ•œ ๊ฐœ์˜ ๋ชจ๋ธ๋กœ ์—ฌ๋Ÿฌ ํ•˜์œ„ ๋„๋ฉ”์ธ์„ ๋ชจ๋‘ ํ‘œํ˜„ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋งž์ง€ ์•Š๋Š” ๋ชจ๋ธ์„ ๋งŒ๋“ค๊ฒŒ ๋œ๋‹ค.

ex) ์นดํƒˆ๋กœ๊ทธ์—์„œ์˜ ์ƒํ’ˆ๊ณผ ์žฌ๊ณ  ๊ด€๋ฆฌ์—์„œ์˜ ์ƒํ’ˆ์€ ๋‹ค๋ฅธ ์˜๋ฏธ์ด๋‹ค.

 

๋ชจ๋ธ์€ ํŠน์ •ํ•œ ์ปจํ…์ŠคํŠธ ํ•˜์—์„œ ์™„์ „ํ•œ ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š”๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋ช…์‹œ์ ์œผ๋กœ ๊ตฌ๋ถ„๋˜๋Š” ๊ฒฝ๊ณ„๋ฅผ ๊ฐ€์ ธ์„œ ์„ž์ด์ง€ ์•Š๋„๋ก ํ•ด์•ผํ•œ๋‹ค.

 

๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ

๋ชจ๋ธ์˜ ๊ฒฝ๊ณ„๋ฅผ ๊ฒฐ์ •ํ•˜๋ฉฐ ๋…ผ๋ฆฌ์ ์œผ๋กœ ํ•œ ๊ฐœ์˜ ๋ชจ๋ธ์„ ๊ฐ–๋Š”๋‹ค.

์‹ค์ œ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ฌผ๋ฆฌ์  ์‹œ์Šคํ…œ์œผ๋กœ ๋„๋ฉ”์ธ์„ ๊ตฌํ˜„ํ•œ๋‹ค.

 

๋งŒ์•ฝ ํ•˜๋‚˜์˜ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ์—์„œ ๊ฐœ๋ฐœํ•  ๋•Œ๋Š” ํ•˜์œ„ ๋„๋ฉ”์ธ ๋ชจ๋ธ์ด ์„ž์ด์ง€์•Š๋„๋ก ํ•ด์•ผํ•œ๋‹ค.

 

 

๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ ๊ตฌํ˜„

๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ๋Š” ํ‘œํ˜„ ์˜์—ญ , ์‘์šฉ ์„œ๋น„์Šค , ์ธํ”„๋ผ๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•œ๋‹ค.

๋ณต์žกํ•œ ๋กœ์ง์„ ๊ฐ–์ง€ ์•Š๋Š”๋‹ค๋ฉด CRUD ๋กœ ๊ตฌํ˜„ํ•ด๋„ ์ƒ๊ด€์—†๋‹ค.

 

๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์„ ํ˜ผํ•ฉํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

-> CQRS ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ธฐ๋Šฅ๊ณผ ์ฟผ๋ฆฌ ๊ธฐ๋Šฅ์„ ๊ตฌ๋ถ„

 

 

 

๋„๋ฉ”์ธ ์„œ๋น„์Šค

 

์—ฌ๋Ÿฌ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๊ฐ€ ํ•„์š”ํ•˜๊ณ  ์ฑ…์ž„์ด ์• ๋งคํ•  ๋•Œ ๋„๋ฉ”์ธ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋„๋ฉ”์ธ ์„œ๋น„๋Š” ๋‹ค์Œ ์ƒํ™ฉ์— ์ด์šฉ๋œ๋‹ค.

1. ๊ณ„์‚ฐ๋กœ์ง

2. ์™ธ๋ถ€ ์‹œ์Šคํ…œ ์—ฐ๋™์ด ํ•„์š”ํ•œ ๋กœ์ง

 

๋„๋ฉ”์ธ ์„œ๋น„์Šค๋Š” ์ƒํƒœ ์—†์ด ๋กœ์ง๋งŒ ๊ตฌํ˜„ํ•œ๋‹ค.

๋„๋ฉ”์ธ ์„œ๋น„์Šค๋ฅผ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ๊ฐ์ฒด์— ์ฃผ์ž…ํ•˜๋ฉด ์•ˆ๋œ๋‹ค!

 

์™ธ๋ถ€ ์‹œ์Šคํ…œ ์—ฐ๋™๊ณผ ๋„๋ฉ”์ธ ์„œ๋น„์Šค

public interface API {
	...
}

๋„๋ฉ”์ธ ๋กœ์ง ๊ด€์ ์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ž‘์„ฑํ•ด์•ผํ•œ๋‹ค.

 

์‘์šฉ ์„œ๋น„์Šค๋Š” ์ด ๋„๋ฉ”์ธ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•ด์„œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๋„๋ฉ”์ธ ์„œ๋น„์Šค์˜ ๋กœ์ง์ด ๊ณ ์ •๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด , ๋„๋ฉ”์ธ ์„œ๋น„์Šค ์ž์ฒด๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋„๋ฉ”์ธ ์„œ๋น„์Šค์˜ ๊ตฌํ˜„์ด ํŠน์ • ๊ธฐ์ˆ ์— ์˜์กดํ•˜๊ฑฐ๋‚˜ ์™ธ๋ถ€ API๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ถ”์ƒํ™”ํ•ด์•ผํ•œ๋‹ค.

 

 

 

ํ‘œํ˜„ ์˜์—ญ๊ณผ ์‘์šฉ ์˜์—ญ

์‘์šฉ ์˜์—ญ๊ณผ ํ‘œํ˜„ ์˜์—ญ์€ ์‚ฌ์šฉ์ž์™€ ๋„๋ฉ”์ธ์„ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๋งค๊ฐœ์ฒด ์—ญํ• ์ด๋‹ค.

 

ํ‘œํ˜„ ์˜์—ญ์€ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ํ•ด์„ํ•˜๊ณ  ๊ทธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์‘์šฉ ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

์‘์šฉ ์˜์—ญ์€ ์‹ค์ œ ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

 

๋‘ ์˜์—ญ์€ ์„œ๋กœ ์š”๊ตฌํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ํ˜•์‹์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์š”์ฒญ์„ ๋ณ€ํ™˜ํ•ด์•ผํ•œ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ์ƒํ˜ธ์ž‘์šฉ์€ ํ‘œํ˜„ ์˜์—ญ์ด ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์‘์šฉ ์„œ๋น„์Šค๋Š” ํ‘œํ˜„ ์˜์—ญ์— ์˜์กดํ•˜์ง€ ์•Š์•„์•ผํ•œ๋‹ค.

 

์‘์šฉ ์„œ๋น„์Šค์˜ ์—ญํ• 

์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ์—์„œ ๋„๋ฉ”์ธ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•œ๋‹ค.

 

public Result func(Req req){
	// ๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ์—์„œ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๋ฅผ ๊ตฌํ•จ
	Agg agg = AggRepository.finById(req.getId());
    
    // ์• ๊ทธ๊ฑฐํŠธ์˜ ๋„๋ฉ”์ธ ๊ธฐ๋Šฅ ์‹คํ–‰
    add.doFunc(req.getValue());
    
    // ๊ฒฐ๊ณผ ๋ฆฌํ„ด
    return createSuccessResult(agg)

}

 

 

๋„๋ฉ”์ธ ๋กœ์ง์„ ๋„๋ฉ”์ธ ์˜์—ญ๊ณผ ์‘์šฉ ์„œ๋น„์Šค์— ๋ถ„์‚ฐํ•ด์„œ ๊ตฌํ˜„ํ•˜๋ฉด ์—ฌ๋Ÿฌ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

1. ์ฝ”๋“œ์˜ ์‘์ง‘์„ฑ์ด ๋–จ์–ด์ง„๋‹ค.

2. ๋™์ผํ•œ ๋„๋ฉ”์ธ ๋กœ์ง์„ ๊ตฌํ˜„ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง„๋‹ค.

 

์‘์šฉ ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ๋ช‡๊ฐ€์ง€ ๊ณ ๋ คํ•  ์‚ฌํ•ญ์ด ์žˆ๋‹ค.

1. ์‘์šฉ ์„œ๋น„์Šค์˜ ํฌ๊ธฐ

๋„๋ฉ”์ธ๊ณผ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ์„ ํ•œ ์„œ๋น„์Šค์— ๋„ฃ๋Š”๋‹ค๋ฉด ํด๋ž˜์Šค๊ฐ€ ์ปค์ง€๊ณ  ๊ด€๋ จ์—†๋Š” ์ฝ”๋“œ๊ฐ€ ๋’ค์„ž์ผ ์ˆ˜ ์žˆ๋‹ค.

ํ•œ ์‘์šฉ ํด๋ž˜์Šค์—์„œ ํ•œ๊ฐœ ๋‚ด์ง€ 2~3๊ฐœ์˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ์„œ๋น„์Šค ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์ž

 

2. ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ํ•„์š”ํ•œ ์ง€

๊ตฌํ˜„ ํด๋ž˜์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ, ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ถˆํ•„์š”ํ•˜๋‹ค.

 

์‘์šฉ ์„œ๋น„์Šค์—์„œ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ์ž์ฒด๋ฅผ ๋ฆฌํ„ดํ•˜๋ฉด ๋„๋ฉ”์ธ ๋กœ์ง์„ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค.

๋”ฐ๋ผ์„œ ์‘์šฉ ์„œ๋น„์Šค์—์„œ๋Š” ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๋ฆฌํ„ดํ•˜๋Š” ๊ฒƒ์ด ์‘์ง‘๋„๋ฅผ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

์‘์šฉ ์„œ๋น„์Šค์˜ ๊ตฌํ˜„

 

์‘์šฉ ์„œ๋น„์Šค๋Š” ํ‘œํ˜„ ์˜์—ญ์— ์˜์กดํ•˜์ง€ ์•Š์•„์•ผํ•œ๋‹ค.

๊ทธ ์ด์œ ๋Š” 

1. ์‘์šฉ ์„œ๋น„์Šค๋งŒ ๋‹จ๋…์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค.

2. ํ‘œํ˜„ ์˜์—ญ์˜ ์—ญํ• ๊นŒ์ง€ ๋Œ€์‹ ํ•˜๊ฒŒ ๋œ๋‹ค.

 

ํ‘œํ˜„ ์˜์—ญ์˜ ์ƒํƒœ๋ฅผ ์‘์šฉ ์„œ๋น„์Šค์—์„œ ๋ณ€๊ฒฝํ•ด๋ฒ„๋ฆฌ๋ฉด ๋กœ์ง์„ ์ถ”์ ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค. -> ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ ์ฆ๊ฐ€

์ด๋ฅผ ์œ„ํ•ด์„œ ์„œ๋น„์Šค ๋ฉ”์„œ๋“œ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋ฆฌํ„ด ํƒ€์ž…์ด ํ‘œํ˜„ ์˜์—ญ์˜ ๊ตฌํ˜„ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด๋‹ค.

 

ํ‘œํ˜„ ์˜์—ญ

1. ์‚ฌ์šฉ์ž๊ฐ€ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์•Œ๋งž์€ ํ๋ฆ„์„ ์ œ๊ณตํ•œ๋‹ค.

2. ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์— ๋งž๊ฒŒ ์‘์šฉ ์„œ๋น„์Šค์— ๊ธฐ๋Šฅ ์‹คํ–‰์„ ์š”์ฒญํ•œ๋‹ค.

3. ์‘์šฉ ์„œ๋น„์Šค์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์•Œ๋งž์€ ํ˜•์‹์œผ๋กœ ์ œ๊ณตํ•œ๋‹ค.

4. ์‚ฌ์šฉ์ž ์„ธ์…˜์„ ๊ด€๋ฆฌํ•œ๋‹ค.

 

๊ฐ’ ๊ฒ€์ฆ

์›์น™์ ์œผ๋กœ ๋ชจ๋“  ๊ฒ€์ฆ์€ ์‘์šฉ ์„œ๋น„์Šค์—์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ๊ฐ๊ฐ์˜ ์˜ˆ์™ธ๋ฅผ ๋”ฐ๋กœ ๋˜์งˆ ๊ฒฝ์šฐ, ์‚ฌ์šฉ์ž๋Š” ํ•˜๋‚˜์˜ ์ด์œ ๋งŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ์—๋Ÿฌ ์ฝ”๋“œ๋ฅผ ๋ชจ์•„ ํ•˜๋‚˜์˜ ์˜ˆ์™ธ๋กœ ๋˜์งˆ ์ˆ˜๋„ ์žˆ๋‹ค.

 

ํ‘œํ˜„ ์˜์—ญ์—์„œ ํ•„์ˆ˜ ๊ฐ’๊ณผ ํ˜•์‹์„ ๊ฒ€์‚ฌํ•˜๋ฉด ์‘์šฉ์„œ๋น„์Šค์—์„œ๋Š” ๋…ผ๋ฆฌ์  ์˜ค๋ฅ˜๋งŒ ๊ฒ€์‚ฌํ•˜๋ฉด ๋œ๋‹ค.

 

์กฐํšŒ ์ „์šฉ ๊ธฐ๋Šฅ๊ณผ ์‘์šฉ ์„œ๋น„์Šค

์‘์šฉ ์„œ๋น„์Šค๊ฐ€ ์‚ฌ์šฉ์ž ์š”์ฒญ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ๋ณ„๋‹ค๋ฅธ ๊ธฐ์—ฌ๋ฅผ ํ•˜์ง€ ๋ชปํ•œ๋‹ค๋ฉด ๊ตณ์ด ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

 

 

 

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ

๊ฐ์ฒด ๋ชจ๋ธ์ด ๋ณต์žกํ•ด์ง€๋ฉด ๊ฐœ๋ณ„ ๊ตฌ์„ฑ์š”์†Œ ์œ„์ฃผ๋กœ ๋ชจ๋ธ์„ ์ดํ•ดํ•˜๊ฒŒ ๋˜๊ณ  ์ „๋ฐ˜์ ์ธ ๊ตฌ์กฐ๋‚˜ ํฐ ์ˆ˜์ค€์—์„œ ๋„๋ฉ”์ธ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค.

-> ์ƒ์œ„ ์ˆ˜์ค€์—์„œ ๋ชจ๋ธ์„ ์กฐ๋งํ•ด์•ผํ•˜๋Š”๋ฐ , ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์• ๊ทธ๋ฆฌ๋ฆฌ๊ฑฐํŠธ๋Š” ๋ณต์žกํ•œ ๋„๋ฉ”์ธ์„ ๋‹จ์ˆœํ•œ ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์— ์†ํ•œ ๊ฐ์ฒด๋Š” ์œ ์‚ฌํ•˜๊ฑฐ๋‚˜ ๋™์ผํ•œ ๋ผ์ดํ”„ ์‚ฌ์ดํด์„ ๊ฐ€์ง€๋ฉฐ ๋‹ค๋ฅธ ์• ๊ทธ๋ฆฌ์ปคํŠธ์— ์†ํ•œ ๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ ์• ๊ทธ๋ฆฌ์ปคํŠธ์—

์†ํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ๋ฃจํŠธ

 

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ์ „์ฒด๋ฅผ ๊ด€๋ฆฌํ•  ์ฃผ์ฒด๊ฐ€ ํ•„์š”ํ•œ๋ฐ, ์ด ์ฑ…์ž„์„ ์ง€๋Š” ๊ฒƒ์ด ๋ฃจํŠธ ์—”ํ‹ฐํ‹ฐ์ด๋‹ค.

ex) Order -> (OrderLine) , (Orderer) , (Address)

 

ํ•ต์‹ฌ ์—ญํ• ์€ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์˜ ์ผ๊ด€์„ฑ์ด ๊นจ์ง€์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋ฃจํŠธ๋Š” ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๊ฐ€ ์ œ๊ณตํ•ด์•ผํ•  ๋„๋ฉ”์ธ์„ ๊ตฌํ˜„ํ•œ๋‹ค.

 

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ์™ธ๋ถ€์—์„œ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์— ์†ํ•œ ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ๋ณ€๊ฒฝํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

Info info = order.info();
info.setAddress(newAddress);

 

๋„๋ฉ”์ธ ๋ชจ๋ธ์— ๋Œ€ํ•ด ๋‹ค์Œ ๋‘๊ฐ€์ง€๋ฅผ ์ง€์ผœ์•ผํ•œ๋‹ค.

1. ๋‹จ์ˆœํ•œ set ๋ฉ”์†Œ๋“œ๋ฅผ ๊ณต๊ฐœ ๋ฒ”์œ„๋กœ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค.

2. ๋ฐธ๋ฅ˜ ํƒ€์ž…์€ ๋ถˆ๋ณ€์œผ๋กœ ํ•œ๋‹ค.

 

์ž ๊ธˆ ๋Œ€์ƒ์ด ๋งŽ์•„์ง„๋‹ค๋Š” ๊ฒƒ์€ ๊ทธ๋งŒํ‹ˆ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํŠธ๋žœ์žญ์…˜ ๊ฐœ์ˆ˜๊ฐ€ ์ค„์–ด๋“ ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. 

-> ์„ฑ๋Šฅ์˜ ์ €ํ•˜

 

ํ•œ ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ๋Š” ํ•œ ๊ฐœ์˜ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๋งŒ ์ˆ˜์ •ํ•ด์•ผํ•œ๋‹ค.

ํ•œ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๊ฐ€ ๋‹ค๋ฅธ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์˜ ๊ธฐ๋Šฅ์— ์˜์กดํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ๊ฐ„ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋†’์•„์ง„๋‹ค.

 

๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ์™€ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ

๊ฐ์ฒด์˜ ์˜์†์„ฑ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ๋Š” ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ๋‹จ์œ„๋กœ ์กด์žฌํ•œ๋‹ค.

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ์ „์ฒด๋ฅผ ์ €์žฅ์†Œ์— ์˜์†ํ™”ํ•ด์•ผํ•œ๋‹ค.

 

ID๋ฅผ ์ด์šฉํ•œ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ์ฐธ์กฐ

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์—์„œ ๋‹ค๋ฅธ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์˜ ๋คํŠธ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๋ฅผ ์ง์ ‘ ์ฐธ์กฐํ•  ๋•Œ ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ๋Š” ํŽธ๋ฆฌํ•จ์„ ์˜ค์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

-> ID๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋‹ค๋ฅธ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๋ฅผ ์ฐธ์กฐํ•˜์ž

 

ID๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ฐธ์กฐํ•˜๋ฉด ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ์ฐธ์กฐ๋กœ ์—ฐ๊ฒฐ๋˜์ž ์•Š๊ณ  ํ•œ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์— ์†ํ•œ ๊ฐ์ฒด๋“ค๋งŒ ์ฐธ์กฐ๋กœ ์—ฐ๊ฒฐ๋œ๋‹ค.

 

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๋ฅผ ํŒฉํ† ๋ฆฌ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•ด์„œ ๋‹ค๋ฅธ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๋‹ค๋ฅธ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์— ํŒฉํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด๋ณด์ž

 

 

๋„ค ๊ฐœ์˜ ์˜์—ญ

ํ‘œํ˜„ ์˜์—ญ

HTTP ์š”์ฒญ์„ ํ•„์š”๋กœ ํ•˜๋Š” ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์‘์šฉ ์˜์—ญ์— ์ „๋‹ฌํ•˜๊ณ  ๋‹ค์‹œ ์‘๋‹ต์„ HTTP ์‘๋‹ต์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ „์†ก

ex) mvc ํ”„๋ ˆ์ž„์›Œํฌ

 

์‘์šฉ ์˜์—ญ(์„œ๋น„์Šค ๊ณ„์ธต)

๋„๋ฉ”์ธ ์˜์—ญ์˜ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•ด์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ๋‹ค.

๋กœ์ง์„ ์ง์ ‘ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋ณด๋‹จ ๋„๋ฉ”์ธ ๋ชจ๋ธ์— ๋กœ์ง ์ˆ˜ํ–‰์„ ์œ„ํž˜

 

๋„๋ฉ”์ธ ์˜์—ญ

๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ๊ตฌํ˜„ํ•˜๊ณ  ํ•ต์‹ฌ ๋กœ์ง์„ ๊ตฌํ˜„

 

public cancelOrder(String orderId) {
	Order order = findOrderById(orderId); // ๋„๋ฉ”์ธ ๋ชจ๋ธ์— ์œ„์ž„
    ...
}

 

์ธํ”„๋ผ ์ŠคํŠธ๋Ÿญ์ณ ์˜์—ญ

๋…ผ๋ฆฌ์  ๊ฐœ๋… ๋ณด๋‹ค๋Š” ๊ตฌํ˜„ ๊ธฐ์ˆ ์„ ๋‹ค๋ฃฌ๋‹ค.

ex) DB ,SMTP , ์นดํ”„์นด

 

๊ณ„์ธต ๊ตฌ์กฐ ์•„ํ‚คํ…์ฒ˜

์•„ํ‚คํ…์ฒ˜๋Š” ๋ณดํ†ต

ํ‘œํ˜„ -> ์‘์šฉ -> ๋„๋ฉ”์ธ -> ์ธํ”„๋ผ์ŠคํŠธ๋Ÿญ์ณ ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋‹ค.

 

์ƒ์œ„ ๊ณ„์ธต์€ ํ•˜์œ„ ๊ณ„์ธต์— ์˜์กดํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ทธ ๋ฐ˜๋Œ€๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

๊ผญ ๋ฐ”๋กœ ์•„๋ž˜ ๊ณ„์ธต์—๋งŒ ์˜์กดํ•˜์ง€ ์•Š๊ณ  ์œ ์—ฐ์ ์œผ๋กœ ์˜์กด์„ฑ์„ ๊ฐ€์ ธ๊ฐ€๊ธฐ๋„ ํ•œ๋‹ค.

ex) ์‘์šฉ -> ์ธํ”„๋ผ

 

ํ•˜์ง€๋งŒ ์ด ๊ฒฝ์šฐ ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค

1. ๊ตฌํ˜„ ์„ค์ •์„ ๋ชจ๋‘ ๋๋‚ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธ๊ฐ€ ์–ด๋ ค์›€ 

2. ๊ตฌํ˜„ ๋ฐฉ์‹์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์–ด๋ ค์›€

 

๋”ฐ๋ผ์„œ DIP๋ฅผ ์ ์šฉํ•˜๋ฉด ์œ„์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

DIP

๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ

- ์˜๋ฏธ ์žˆ๋Š” ๋‹จ์ผ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“ˆ

- ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ•˜์œ„ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๋‹ค

 

์ €์ˆ˜์ค€ ๋ชจ๋“ˆ

- ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์˜ ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ 

ex) JPA , Drools

 

๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์ด ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์— ์˜์กดํ•˜๋ฉด ์•ž์„œ ๋งํ•œ ๋‘๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค.

๊ทธ๋ž˜์„œ DIP๋Š” ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์ด ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์— ์˜์กดํ•˜๋„๋ก ๋ฐ”๊พผ๋‹ค.

์ด๋•Œ ์ถ”์ƒํ™”ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋” ์ด์ƒ ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์ด ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์— ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ด๋ฅผ ์˜์กด ๊ด€๊ณ„ ์—ญ์ „(DIP)๋ผ๊ณ  ํ•œ๋‹ค.

 

DIP๋ฅผ ํ†ตํ•ด ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

1. ๊ธฐ์ˆ  ๊ต์ฒด๋ฅผ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

// ์‚ฌ์šฉํ•  ์ €์ˆ˜์ค€ ๊ฐ์ฒด ์ƒ์„ฑ
Rule Discounter ruleDiscounter = new DroolsRuleDiscounter();

// ์ƒ์„ฑ์ž ๋ฐฉ์‹์œผ๋กœ ์ฃผ์ž…
CalculateDiscountService disService = new CalculateDiscountService(ruleDiscounter);

2. ํ…Œ์ŠคํŠธ๊ฐ€ ์šฉ์ดํ•˜๋‹ค.

๊ธฐ์กด์—๋Š” ๊ธฐ์ˆ ์ด ๊ตฌํ˜„๋˜์–ด์•ผ ํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ ์ด์   ๋Œ€์—ญ๊ฐ์ฒด(mock)์„ ์ด์šฉํ•ด์„œ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ง„ํ–‰ํ• ์ˆ˜ ์žˆ๋‹ค.

์Šคํ…์ด๋‚˜ ๋ชจ์˜ ๊ฐ์ฒด์™€ ๊ฐ™์€ ํ…Œ์ŠคํŠธ ๋ชฉ์ ์˜ ๋Œ€์—ญ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฑฐ์˜ ๋ชจ๋“  ์ƒํ™ฉ์„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋‹ค !

 

* ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์—์„œ ์ถ”์ถœํ•˜์ง€ ์•Š์•„์•ผํ•œ๋‹ค !!

* ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ์ถ”์ƒํ™”ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ ๊ด€์ ์—์„œ ๋„์ถœํ•œ๋‹ค !!

 

๋„๋ฉ”์ธ ์˜์—ญ์˜ ์ฃผ์š” ๊ตฌ์„ฑ์š”์†Œ

์—”ํ‹ฐํ‹ฐ

- ๊ณ ์œ ์˜ ์‹๋ณ„์ž๋ฅผ ๊ฐ€์ง€๊ณ  ๋„๋ฉ”์ธ์˜ ๊ณ ์œ ํ•œ ๊ฐœ๋…์„ ํ‘œํ˜„ํ•œ๋‹ค.

 

๋ฐธ๋ฅ˜

- ๊ฐœ๋…์ ์œผ๋กœ ํ•˜๋‚˜์ธ ๊ฐ’์„ ํ‘œํ˜„

ex) ์ฃผ์†Œ , ๊ธˆ์•ก

 

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ

- ์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ์™€ ๋ฐธ๋ฅ˜ ๊ฐ์ฒด๋ฅผ ๊ฐœ๋…์ ์œผ๋กœ ๋ฌถ์€ ๊ฒƒ

 

๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ

- ๋„๋ฉ”์ธ ๋ชจ๋ธ์˜ ์˜์†์„ฑ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

 

๋„๋ฉ”์ธ ์„œ๋น„์Šค

- ํŠน์ • ์—”ํ‹ฐํ‹ฐ์— ์†ํ•˜์ง€ ์•Š์€ ๋„๋ฉ”์ธ ๋กœ์ง

- ๋„๋ฉ”์ธ ๋กœ์ง์ด ์—ฌ๋Ÿฌ ์—”ํ‹ฐํ‹ฐ์™€ ๋ฐธ๋ฅ˜๋ฅผ ํ•„์š”๋กœ ํ•˜๋ฉด ๋„๋ฉ”์ธ ์„œ๋น„์Šค์—์„œ ๋กœ์ง์„ ๊ตฌํ˜„ํ•œ๋‹ค.

 

๋„๋ฉ”์ธ ์—”ํ‹ฐํ‹ฐ VS DB ์—”ํ‹ฐํ‹ฐ

 

๋„๋ฉ”์ธ ์—”ํ‹ฐํ‹ฐ

- ๋ฐ์ดํ„ฐ์™€ ํ•จ๊ป˜ ๋„๋ฉ”์ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

- ๋„๋ฉ”์ธ ๊ด€์ ์—์„œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์บก์Šํ™”ํ•ด์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž„์˜๋กœ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š”๋‹ค.

- ๊ฐœ๋…์ ์œผ๋กœ ํ•˜๋‚˜์ธ ๊ฒฝ์šฐ ๋ฐธ๋ฃจ ํƒ€์ž…์„ ์ด์šฉํ•ด์„œ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ

- ๊ฐœ๋ณ„ ๊ฐ์ฒด๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ƒ์œ„ ์ˆ˜์ค€์—์„œ ๋ชจ๋ธ์„ ๋ณผ ์ˆ˜ ์žˆ์–ด์•ผ ์ „์ฒด ๋ชจ๋ธ์˜ ๊ด€๊ณ„์™€ ๊ฐœ๋ณ„ ๋ชจ๋ธ์„ ์ดํ•ดํ•˜๋Š” ๋ฐ

๋„์›€์ด ๋œ๋‹ค.

- ๊ด€๋ จ ๊ฐ์ฒด๋ฅผ  ํ•˜๋‚˜๋กœ ๋ฌถ์€ ๊ตฐ์ง‘

- ๊ฐ์ฒด ๊ตฐ์ง‘ ๋‹จ์œ„๋กœ ๋ชจ๋ธ์„ ๋ฐ”๋ผ๋ณธ๋‹ค.

- ๋ฃจํŠธ ์—”ํ‹ฐํ‹ฐ๋Š” ์—๊ทธ๋ฆฌ๊ฑฐํŠธ์— ์†ํ•ด ์žˆ๋Š” ์—”ํ‹ฐํ‹ฐ์™€ ๋ฐธ๋ฅ˜ ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด์„œ ๊ตฌํ˜„ํ•ด์•ผํ•  ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

- ๋ฃจํŠธ ์—”ํ‹ฐํ‹ฐ๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ์—”ํ‹ฐํ‹ฐ๋‚˜ ๋ฐธ๋ฅ˜ ๊ฐ์ฒด์— ์ ‘๊ทผํ•œ๋‹ค.-> ์บก์Šํ™”

 

๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ

- ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ๋‹จ์œ„๋กœ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ •์˜ํ•œ๋‹ค.

- ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ฝ”๋“œ๋Š” ๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ๋ฅผ ํ†ตํ•ด ๋„๋ฉ”์ธ ๊ฐ์ฒด๋ฅผ ๊ตฌํ•œ ๋’ค์— ๋„๋ฉ”์ธ ๊ฐ์ฒด์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ

 

 

 

 

์š”๊ตฌ ์‚ฌํ•ญ

์š”๊ตฌ์‚ฌํ•ญ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋ฉด ์—‰๋šฑํ•œ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค๊ฒŒ ๋œ๋‹ค.

(Garbage in , Garbage out)

-> ์ฝ”๋”ฉ์— ์•ž์„œ ์š”๊ตฌ์‚ฌํ•ญ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค !

 

๋„๋ฉ”์ธ ๋ชจ๋ธ

ํŠน์ • ๋„๋ฉ”์ธ์„ ๊ฐœ๋…์ ์œผ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์„ ๋„๋ฉ”์ธ ๋ชจ๋ธ์ด๋ผ๊ณ  ํ•œ๋‹ค.

๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ๊ด€๊ณ„์ž๋“ค์ด ๋™์ผํ•œ ๋ชจ์Šต์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ข…๋ฅ˜๋กœ ๋ชจ๋ธ๋ง ํ•  ์ˆ˜ ์žˆ๋‹ค.

ex) ๊ฐ์ฒด , ์ƒํƒœ ๋‹ค์ด์–ด๊ทธ๋žจ, ๊ทธ๋ž˜ํ”„

 

๋„๋ฉ”์ธ ๋ชจ๋ธ ํŒจํ„ด

๋„๋ฉ”์ธ ๊ณ„์ธต์€ ๋„๋ฉ”์ธ์˜ ํ•ต์‹ฌ ๊ทœ์น™์„ ๊ตฌํ˜„ํ•œ๋‹ค.

์•„๋ž˜์˜ ์ฝ”๋“œ๋Š” ์ฃผ๋ฌธ ์ƒํƒœ์— ๋”ฐ๋ผ ๋ฐฐ์†ก์ง€๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์— ๋Œ€ํ•œ ์ฝ”๋“œ๋ฅผ ๋„๋ฉ”์ธ ๋ชจ๋ธ ํŒจํ„ด์œผ๋กœ ๊ตฌํ˜„

public class Order {
	private OrderState state;
    private ShippingInfo info;
    
    public void changeShippingInfo(ShippingInfo info) {
    	if(!state.isShippingChangeable()) {
        	// ์˜ˆ์™ธ์ฒ˜๋ฆฌ
        }
        ...
    }
    ...
}

public enum OrderState {
	PAYMENT_WAITING {
    	public boolean isShippingChangeable() {
        	return true;
        }
    }
    ...
}

ํ˜น์€ ์ด๋ ‡๊ฒŒ๋„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

public class Order {
	private OrderState state;
    private ShippingInfo info;
    
    public void changeShippingInfo(ShippingInfo info) {
    	if(!state.isShippingChangeable()) {
        	// ์˜ˆ์™ธ์ฒ˜๋ฆฌ
        }
        ...
    }
    
	private boolean isShippingChangeable() {
    	return state == OrderState.PAYMENT_WAITING || ...
    }
    ...
}

public enum OrderState {
	PAYMENT_WAITING
    ...
    ;
    
}

์ค‘์š”ํ•œ ์ ์€ Order , OrderState ๊ฐ™์€ ์ฃผ๋ฌธ ๋„๋ฉ”์ธ ๋ชจ๋ธ์— ๊ตฌํ˜„ ํ–ˆ๋‹ค๋Š” ์ ์ด๋‹ค.

์ด๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ ์š”๊ตฌ์‚ฌํ•ญ์ด ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ ๋‹ค๋ฅธ ์ฝ”๋“œ์— ์˜ํ–ฅ์„ ๋œ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

 

๋„๋ฉ”์ธ ๋ชจ๋ธ ๋„์ถœ

๊ตฌํ˜„์„ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋„๋ฉ”์ธ์— ๋Œ€ํ•œ ์ดˆ๊ธฐ ๋ชจ๋ธ์ด ํ•„์š”ํ•˜๋‹ค.

 

๋ช‡๊ฐ€์ง€ ์š”๊ตฌ์‚ฌํ•ญ์œผ๋กœ ๋ถ€ํ„ฐ ๊ตฌํ˜„ํ•ด์•ผํ•  ๊ธฐ๋Šฅ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

ex)

์ตœ์†Œ ํ•œ ์ข…๋ฅ˜ ์ด์ƒ์˜ ์ƒํ’ˆ ์ฃผ๋ฌธ -> ๋กœ์ง ๊ตฌํ˜„ ํ•„์š”

ํ•œ ์ƒํ’ˆ์„ ํ•œ ๊ฐœ ์ด์ƒ ์ฃผ๋ฌธํ•  ์ˆ˜ ์žˆ๋‹ค. -> ๊ตฌ๋งค ์ƒํ’ˆ ์ •๋ณด๋Š” ์ƒํ’ˆ ๊ฐœ์ˆ˜๋ฅผ ํฌํ•จํ•œ๋‹ค

 

์—”ํ‹ฐํ‹ฐ

์—”ํ‹ฐํ‹ฐ์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ ์‹๋ณ„์ž๋ฅผ ๊ฐ€์ง€๋Š” ๊ฒƒ์ด๋‹ค.

์‹๋ณ„์ž๋Š” ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์†์„ฑ์„ ๋ฐ”๊พธ๊ณ  ์‚ญ์ œํ•  ๋•Œ๊นŒ์ง€ ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค.

์ฆ‰ ์‹๋ณ„์ž๊ฐ€ ๊ฐ™์œผ๋ฉด ๊ฐ™์€ ์—”ํ‹ฐํ‹ฐ์ด๋‹ค.

 

์‹๋ณ„์ž๋Š” ์‚ฌ์šฉํ•˜๋Š” ๋„๋ฉ”์ธ์˜ ํŠน์ง•๊ณผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์ˆ ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋ฉฐ, DB์—์„œ ์ƒ์„ฑํ•ด์ฃผ๊ธฐ๋„ ํ•œ๋‹ค.

(์ด ๊ฒฝ์šฐ DB์— ์ €์žฅํ•ด์•ผ ์•Œ ์ˆ˜ ์žˆ์Œ)

 

๋ฐธ๋ฃจ(value) ํƒ€์ž… 

๊ฐœ๋…์ ์œผ๋กœ ์™„์ „ํ•œ ํ•˜๋‚˜๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ ๋ฐธ๋ฃจ ํƒ€์ž…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

private String receiverName;
private String receiverPhoneNumber;

//๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œํ˜„ ๊ฐ€๋Šฅ
private Receiver receiver;

 

๋ฌด์กฐ๊ฑด ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ•„๋“œ๋ฅผ ๊ฐ€์ ธ์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

public class Money {
	private int value;
    
    public Money(int value) {
    	this.value = value;
    }
}

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์ˆ˜ํ˜•์˜ value๋ฅผ Money ๋กœ ํ‘œํ˜„ํ•จ์œผ๋กœ์จ ์˜๋ฏธ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ ํ•ด๋‹น ํด๋ž˜์Šค ๋‚ด์— ๋”ํ•˜๊ธฐ , ๊ณฑํ•˜๊ธฐ ๊ฐ™์€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ฐธ๋ฃจ ํƒ€์ž…์€ ์•ˆ์ „ํ•œ ์ฝ”๋“œ ์ž‘์„ฑ์„ ์œ„ํ•ด ๋ถˆ๋ณ€์œผ๋กœ ํ‘œํ˜„ํ•œ๋‹ค.

*๋ถˆ๋ณ€ : ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Œ

 

๋„๋ฉ”์ธ ๋ชจ๋ธ์ด set ๋ฉ”์†Œ๋“œ๋ฅผ ๋„ฃ์ง€ ์•Š๋Š” ์ด์œ 

 

1. ํ•ต์‹ฌ ๊ฐœ๋…์ด๋‚˜ ์˜๋„๋ฅผ ์ฝ”๋“œ์—์„œ ์‚ฌ๋ผ์ง€๊ฒŒ ํ•œ๋‹ค.

// ๋„๋ฉ”์ธ๊ณผ ์˜๋„๊ฐ€ ๋ช…ํ™•ํ•จ
public void completePayment();

// ํ•„๋“œ๊ฐ’๋งŒ ๋ณ€๊ฒฝํ•˜๊ณ  ๋, ์˜๋„๊ฐ€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Œ
pubic void setStatus();

 

2. ๋„๋ฉ”์ธ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์˜จ์ „ํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

Order order = new Order();

// set ๋ฉ”์†Œ๋“œ๋กœ ๊ฐ’์„ ์ „๋‹ฌ
order.setOrderLines(lines);

๋งŒ์ผ ์œ„์™€ ๊ฐ™์ด set ๋ฉ”์†Œ๋“œ๋กœ ๊ฐ’์„ ์ „๋‹ฌํ•œ๋‹ค๋ฉด ๋‚˜์ค‘์— ํ•„๋“œ๊ฐ€ null์ธ์ง€ ๊ฒ€์‚ฌํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

ํ•˜์ง€๋งŒ ์ƒ์„ฑํ•  ๋•Œ๋ถ€ํ„ฐ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š”๋‹ค๋ฉด ์ƒ์„ฑํ•˜๋Š” ์‹œ์ ์— ๊ฒ€์‚ฌํ•˜๋ฉด ๋˜๋ฏ€๋กœ ํ•ด๋‹น ๋กœ์ง์ด ํ•„์š”๊ฐ€ ์—†์–ด์ง„๋‹ค.

 

๋„๋ฉ”์ธ ์šฉ์–ด์™€ ์œ ๋น„์ฟผํ„ฐ์Šค ์–ธ์–ด

๋„๋ฉ”์ธ ์šฉ์–ด๋ฅผ ์ฝ”๋“œ์— ๋ฐ˜์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ํ•ด์„ํ•˜๋Š”๋ฐ ๋ถ€๋‹ด์ด ๋œ๋‹ค.

// ๋„๋ฉ”์ธ ์šฉ์–ด๊ฐ€ ๋ฐ˜์˜๋˜์ง€ ์•Š์Œ
public OrderState {
	STEP1,STEP2,STEP3,STEP4;
}

// ๋„๋ฉ”์ธ ์šฉ์–ด๊ฐ€ ๋ฐ˜์˜๋˜์„œ ์ง๊ด€์ ์ž„
public OrderState {
	PAYMENT_WAITING,PREPARING,SHIPPED,DELIVERING;
}

๋„๋ฉ”์ธ ์šฉ์–ด์— ์•Œ๋งž์€ ๋‹จ์–ด๋ฅผ ์ฐพ๋Š” ์‹œ๊ฐ„์„ ์•„๊นŒ์›Œํ•˜์ง€ ๋ง์ž!

+ Recent posts