DevLog ๐Ÿ˜ถ

[์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค] ์šฐํ…Œ์ฝ” 5๊ธฐ ๋ฐฑ์—”๋“œ ํ•ฉ๊ฒฉ, ํ•ฉ๊ฒฉ๊นŒ์ง€์˜ ๊ธฐ๋ก ๋ณธ๋ฌธ

์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค/ํ”„๋ฆฌ์ฝ”์Šค

[์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค] ์šฐํ…Œ์ฝ” 5๊ธฐ ๋ฐฑ์—”๋“œ ํ•ฉ๊ฒฉ, ํ•ฉ๊ฒฉ๊นŒ์ง€์˜ ๊ธฐ๋ก

dolmeng2 2023. 1. 7. 22:13

- ์‚ฌ์‹ค ์šฐํ…Œ์ฝ” ํ•ฉ๊ฒฉ ๋ฐœํ‘œ๋Š” ๊ฝค ์ „์— ๋‚ฌ์ง€๋งŒ, ๋ฏธ๋ฃจ๋‹ค๊ฐ€ ๊ฒจ์šฐ ํšŒ๊ณ ๋ก์„ ์ž‘์„ฑํ•œ๋‹ค.

์šฐํ…Œ์ฝ” ํ•ฉ๊ฒฉ์ด๋ผ๋‹ˆ... ๋‹ค์‹œ ๋ด๋„ ๊ฐ๊ฒฉ์Šค๋Ÿฌ์šด ๋ฉ”์ผ์ด๋‹ค. ๐Ÿฅน

์šฐํ…Œ์ฝ” ์‹œ์ž‘ํ•˜๋ฉด ๋ธ”๋กœ๊ทธ ์ž‘์„ฑ์— ์Šต๊ด€์„ ๋“ค์ผ ์˜ˆ์ •์ด์–ด์„œ, ์‹œ์ž‘ ์ „์— ๊ฐ„๋‹จํ•˜๊ฒŒ ์–ด๋–ค ๊ณผ์ •์„ ๊ฑฐ์ณค๋Š”์ง€ ๊ธฐ๋กํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.

 


| 1. ์ž๊ธฐ์†Œ๊ฐœ์„œ

- ์‚ฌ์‹ค ์šฐํ…Œ์ฝ”๋Š” ์ž๊ธฐ์†Œ๊ฐœ์„œ๊ฐ€ ๊ฝค๋‚˜ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. 

'๋‚ด๊ฐ€ ์–ผ๋งˆ๋‚˜ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์ธ๊ฐ€?'์— ์ดˆ์ ์„ ๋‘๊ณ , ์ „๊ณต ์ง€์‹๋ณด๋‹ค๋Š” ๋‚ด ์ง„์†”ํ•œ ๊ฒฝํ—˜์„ ๋‹ด์œผ๋ ค๊ณ  ๋งŽ์ด ๋…ธ๋ ฅํ–ˆ๋‹ค.

 

 

1. ๊ณ ๋“ฑํ•™๊ต/๋Œ€ํ•™๊ต ์ „๊ณต์„ ํฌํ•จํ•˜์—ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ต์œก ์ด๋ ฅ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

- ํ˜„์žฌ ์žฌํ•™ ์ค‘์ธ ๋Œ€ํ•™๊ต์™€, ๋Œ€ํ•™๊ต ๋‚ด์—์„œ ์ง„ํ–‰ํ•œ ์†Œ๋ชจ์ž„ (๋ฐฑ์—”๋“œ ๊ด€๋ จ X), ๊ทธ๋ฆฌ๊ณ  ๋ฐฑ์—”๋“œ ๊ด€๋ จ ๊ณต๋ถ€ ์ค‘์ด๋ผ๊ณ  ์ž‘์„ฑํ–ˆ๋‹ค.

๊ตณ์ด ๊ธ€๋กœ ํ’€์–ด์“ฐ์ง€ ์•Š๊ณ , ๊ทธ๋ƒฅ 3์ค„๋กœ ์งค๋ง‰ํ•˜๊ฒŒ ์ž‘์„ฑํ–ˆ๋‹ค. 

 

2. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•™์Šต ๊ณผ์ •์€?

- ํฌ๊ฒŒ 2๊ฐœ๋กœ ๋‚˜๋ˆ„์–ด์„œ ์ž‘์„ฑํ•˜์˜€๋‹ค. 

1๋ฒˆ์€ ์ž๋ฐ”๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ„๋‹จํ•œ ์ฝ˜์†” ๊ฒŒ์ž„์„ ๋งŒ๋“ค์—ˆ๋˜ ๋‚ด์šฉ์„ ์œ„์ฃผ๋กœ, ์ž๋ฐ” ๊ฐœ๋…์„ ์–ด๋–ค ์‹์œผ๋กœ ํ™œ์šฉํ•˜์˜€๋Š”์ง€๋ฅผ ์ž‘์„ฑํ•˜์˜€๋‹ค. 

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

2๋ฒˆ์€ ํ•™์Šต ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•ด์„œ ์ž‘์„ฑํ•˜์˜€๋‹ค. 1๋ฒˆ์ด๋ž‘ ์ด์–ด์ง€๊ฒŒ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ '๋‚ด๊ฐ€ ์–ด๋–ค ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์‹ถ์€๊ฐ€'๋ฅผ ์œ„์ฃผ๋กœ ๊ธ€์„ ์ž‘์„ฑํ•˜์˜€๋Š”๋ฐ, ๊ทธ๋Ÿฌ๋ฉด์„œ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์„ ์–ด๋–ค ์‹์œผ๋กœ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋Š”์ง€๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.

๋‚˜ ๊ฐ™์€ 1์ผ 1์ปค๋ฐ‹์„ ํ–ˆ๋˜ ๋‚ด์šฉ์„ ์ž‘์„ฑํ–ˆ์œผ๋ฉฐ, ๋ญ ์ปค๋ฐ‹ํ•˜๋ฉด์„œ ์–ด๋–ค ์‹์œผ๋กœ ๊ณต๋ถ€๋ฅผ ํ–ˆ๋Š”์ง€...๋ฅผ ์ ์œผ๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ๋‹ค.

 

3. ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋˜๋ ค๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

- ์ด 3๊ฐœ๋กœ ๋‚˜๋ˆ„์–ด์„œ ์ž‘์„ฑํ–ˆ๋‹ค.

1๋ฒˆ์€ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ ์ „์— ์ง„๋กœ๋กœ ์žก์•˜๋˜ '๋จธ์‹ ๋Ÿฌ๋‹ ์—”์ง€๋‹ˆ์–ด'์— ๋Œ€ํ•œ ๊ณ„๊ธฐ๋ฅผ ๋‹ด์•˜์œผ๋ฉฐ, ์›์ดˆ์ ์œผ๋กœ '๊ฐœ๋ฐœ' ์ž์ฒด์— ์–ด์ฉŒ๋‹ค๊ฐ€ ํฅ๋ฏธ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜์—ˆ๋Š”์ง€ ์ž‘์„ฑํ•˜์˜€๋‹ค. ์‚ฌ์‹ค ์ด ๋ถ€๋ถ„์—์„œ ์ง„๋กœ๋ฅผ ๋ฐ”๊ฟจ๋‹ค๋Š” ๋ถ€๋ถ„์ด ์˜คํžˆ๋ ค ๋ˆ๊ธฐ ์—†๋Š” ์‚ฌ๋žŒ์œผ๋กœ ๋ณด์—ฌ์งˆ๊นŒ๋ด ๊ฑฑ์ •ํ–ˆ๋Š”๋ฐ, ๊ทธ๋ ‡๊ฒŒ๋Š” ์•ˆ ๋ด์ฃผ์‹  ๊ฒƒ ๊ฐ™์•„์„œ ๋‹คํ–‰...

2๋ฒˆ์€ ๋จธ์‹ ๋Ÿฌ๋‹ ์—”์ง€๋‹ˆ์–ด์—์„œ ์™œ ์›น ๊ฐœ๋ฐœ์ž๋ฅผ ์„ ํƒํ–ˆ๋Š”์ง€์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ์ ์—ˆ๊ณ , 3๋ฒˆ์€ ์›น ๊ฐœ๋ฐœ์ž๋ฅผ ์„ ํƒํ•˜๋ฉด์„œ ์–ด๋–ค ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์‹ถ์€์ง€๋ฅผ ์ž‘์„ฑํ•˜๋ฉฐ ๋‚ด๊ฐ€ ํ–ˆ๋˜ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ๊ฐ„๋žตํ•˜๊ฒŒ ์ž‘์„ฑํ•˜์˜€๋‹ค. 

๊ฐ€์žฅ ํฐ ์ฃผ์ œ๋กœ '์‚ฌ์šฉ์ž๋“ค์„ ์œ„ํ•œ ์„œ๋น„์Šค ๊ฐœ๋ฐœ'์„ ์žก๊ณ , ์ด์— ๋Œ€ํ•ด์„œ ํ’€์–ด๋‚˜๊ฐ€๋ฉฐ ์ž‘์„ฑํ•˜์˜€๋‹ค.

 

4. ๋งˆ์Œ์ด ๋Œ๋ฆฌ๋Š” ๋ฌด์—‡์ธ๊ฐ€์— ๊ธด์‹œ๊ฐ„ ๋™์•ˆ ๋ชฐ์ž…ํ•ด๋ณธ ๊ฒฝํ—˜์ด ์žˆ๋‚˜์š”?

- ์‚ฌ์‹ค ๊ฐ€์žฅ ๋งŽ์ด ๊ณ ๋ฏผํ•œ ์ฃผ์ œ์ด๋‹ค. 10๊ฐœ์›” ๋™์•ˆ ๋ชฐ์ž…ํ•ด๋ณธ ๊ฒฝํ—˜... ์•„๋งˆ ์ด ๋ถ€๋ถ„์„ ๋‹ค๋“ค ๋ง์„ค์ผ ๊ฒƒ ๊ฐ™๋‹ค.

์ฒ˜์Œ์—๋Š” 1์ผ 1์ปค๋ฐ‹์„ ์ž‘์„ฑํ• ๊นŒ ํ•˜๋‹ค๊ฐ€, ๋”ฑํžˆ ๋ชฐ์ž…ํ•œ ๊ฒฝํ—˜์ด๋ผ๊ณ  ๋‘๊ธฐ๋„ ๊ทธ๋ ‡๊ณ ,

๊ทธ๋ ‡๋‹ค๊ณ  ํ”„๋กœ์ ํŠธ ๊ฒฝํ—˜์„ ์“ฐ๊ธฐ์—๋Š” 10๊ฐœ์›” ์ด์ƒ ํ•ด๋ณธ ์ ์ด ์—†์–ด์„œ (๋‹จ๊ธฐ ํ”„๋กœ์ ํŠธ...)

ํ•™๊ต ๋‹ค๋‹ˆ๋ฉด์„œ ์ง„ํ–‰ํ–ˆ๋˜ ๋™์•„๋ฆฌ์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ์ผ๋‹ค. ๋‹คํ–‰ํžˆ๋„ ๋™์•„๋ฆฌ๋ฅผ 2๋…„ ์ •๋„ ์ง„ํ–‰ํ•ด์„œ...ใ…Ž

๊ตณ์ด ๊ฐœ๋ฐœ์— ๊ด€๋ จ๋œ ์ด์•ผ๊ธฐ๋ฅผ ์“ฐ์ง€ ์•Š์•„๋„ ๋  ๊ฒƒ ๊ฐ™๋‹ค. ์˜คํžˆ๋ ค ์ฆ๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” ๋‚ด์šฉ์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒŒ ์ œ์ผ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๋™์•„๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋„ค์ด๋ฒ„ ๋ธ”๋กœ๊ทธ์— ๊ธ€์„ ๋ช‡ ๊ฐœ ์ž‘์„ฑํ–ˆ์—ˆ์–ด์„œ, ๊ทธ๊ฑธ ์ฆ๋น™ ์ž๋ฃŒ๋กœ ๋„ฃ์—ˆ๋‹ค. 

 

5. ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค์— ์ฐธ์—ฌํ•˜๋ ค๋Š” ์ด์œ ๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€์š”?

- ์—ฌ๊ธฐ์—๋Š” ํ…Œ์ฝ”ํ†ก ์ด์•ผ๊ธฐ๋ฅผ ์ž‘์„ฑํ•˜๊ณ , ํ˜‘์—…์— ๊ด€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ์ž‘์„ฑํ•˜์˜€๋‹ค.

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

๊ทธ๋ฆฌ๊ณ  ํ…Œ์ฝ”ํ†ก... ๊ผญ ํ•ด๋ณด๊ณ  ์‹ถ๋‹ค. ใ…Žใ…Žใ…Žใ…Ž ์‚ฌ์‹ฌ ๊ฐ€๋“!

 

+ ์ฆ๋น™ ์ž๋ฃŒ ์ž‘์„ฑ

- ์ฆ๋น™ ์ž๋ฃŒ๋Š” ๋…ธ์…˜์— ์ •๋ฆฌํ•ด์„œ ์˜ฌ๋ ธ๋‹ค.

2๋ฒˆ์—์„œ ๋งŒ๋“ค์—ˆ๋˜ ์ฝ˜์†” ๊ฒŒ์ž„์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ์™€ ๊นƒํ—ˆ๋ธŒ ๋งํฌ, ๊ทธ๋ฆฌ๊ณ  ๋™์•„๋ฆฌ ํ™œ๋™ํ•˜๋ฉด์„œ ์ž‘์„ฑํ•˜์˜€๋˜ ๊ธ€์„ ์ฒจ๋ถ€ํ•˜์˜€๋‹ค.

์‚ฌ์‹ค ์ฆ๋น™ ์ž๋ฃŒ๋Š” ๋ณธ์ธ์˜ ๊ฒฝํ—˜์„ ๋‹ด๋Š” ๊ฒŒ ๊ฐ€์žฅ ์ค‘์š”ํ•ด์„œ...

์ž๊ธฐ์†Œ๊ฐœ์„œ์—์„œ๋„ ์›ฌ๋งŒํ•˜๋ฉด '์ฆ๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝํ—˜'์„ ๋‹ด์•„๋‚ด๋Š” ๊ฒŒ ๊ฐ€์žฅ ์ค‘์š”ํ•  ๊ฒƒ ๊ฐ™๋‹ค.

์ฆ๋น™ ์ž๋ฃŒ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ ์ตœ๋Œ€ํ•œ ๊ธฐ์ˆ ์ ์ธ ๋‚ด์šฉ์€ ๋นผ๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ๋‹ค. 

๋‚ด๊ฐ€ ์ „๊ณต์ž๊ณ , ๊ทธ๋ž˜์„œ ์ด์ •๋„์˜ ์ง€์‹์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ๊ฑธ ๋ณด์—ฌ์ฃผ๋Š” ๊ฑด ์˜คํžˆ๋ ค ์—ญํšจ๊ณผ์ผ ๊ฒƒ ๊ฐ™์•„์„œ,

์ตœ๋Œ€ํ•œ ๋‹ด๋ฐฑํ•˜๊ฒŒ ๋‚ด๊ฐ€ ์ปค๋ฒ„ํ•  ์ˆ˜ ์žˆ๋Š” ์ง€์‹ ์ •๋„๋กœ๋งŒ ์ž‘์„ฑํ•˜์˜€๋‹ค.

(์• ์ดˆ์— ๋‚ด์„ธ์šธ๋งŒํ•œ ์ง€์‹๋„ ์—†์Œ)

 


| 2. 4์ฃผ๊ฐ„์˜ ํ”„๋ฆฌ์ฝ”์Šค

- ์ด๋ฒˆ ์šฐํ…Œ์ฝ”๋Š” ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์—, ์„œ๋ฅ˜ ์ ‘์ˆ˜๋ฅผ ์ง„ํ–‰ํ•œ ๋ชจ๋‘๊ฐ€ ํ”„๋ฆฌ์ฝ”์Šค์— ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

ํ”„๋ฆฌ์ฝ”์Šค๋Š” ๋”ฐ๋กœ ๋ธ”๋กœ๊ทธ ๊ธ€์„ ์ž‘์„ฑํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”...!

 

โœ” 1์ฃผ์ฐจ ํ”„๋ฆฌ์ฝ”์Šค

 

[์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค] 5๊ธฐ ๋ฐฑ์—”๋“œ 1์ฃผ์ฐจ ํ”„๋ฆฌ์ฝ”์Šค ํšŒ๊ณ ๋ก

- 2์ฃผ์ฐจ๊ฐ€ ๋๋‚˜์„œ์•ผ ์ž‘์„ฑํ•˜๋Š” 1์ฃผ์ฐจ ํ”„๋ฆฌ์ฝ”์Šค ํšŒ๊ณ ๋ก...(?) - 1์ฃผ์ฐจ์—๋Š” ์ •์‹ ์—†์ด ๊ตฌํ˜„ํ•˜๊ณ  ์ปค๋ฐ‹ํ•˜๊ณ  ๋ฆฌํŒฉํ† ๋งํ•˜๊ณ  ๊ทธ๋Ÿฌ๋Š๋ผ ํ•œ ์ฃผ๊ฐ€ ๊ฐ€๋Š”์ง€๋„ ๋ชจ๋ฅด๊ฒŒ ๋๋‚ฌ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ๋‹ค๋ฅธ ๋ถ„๋“ค์ด ๋งค์ฃผ ํšŒ๊ณ ๋ก์„

cl8d.tistory.com

 

โœ” 2์ฃผ์ฐจ ํ”„๋ฆฌ์ฝ”์Šค

 

[์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค] 5๊ธฐ ๋ฐฑ์—”๋“œ 2์ฃผ์ฐจ ํ”„๋ฆฌ์ฝ”์Šค ํšŒ๊ณ ๋ก

- ๋ฒŒ์จ 2์ฃผ์ฐจ ๋งˆ๋ฌด๋ฆฌ...? ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ๋นจ๋ผ์„œ ๋ฏฟ๊ธฐ์ง€ ์•Š๋Š”๋‹ค. ์˜ค๋Š˜ ํ•˜๋ฃจ ํšŒ๊ณ ๋ž‘ ํ•จ๊ป˜ ์‰ฌ๋ฉด์„œ ๋‹ค์‹œ 3์ฃผ์ฐจ ๋‹ฌ๋ฆด ์ค€๋น„ํ•ด์•ผ์ง€...๐Ÿ˜ต‍๐Ÿ’ซ | 1์ฃผ์ฐจ ํšŒ๊ณ ๋ก [์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค] 5๊ธฐ ๋ฐฑ์—”๋“œ 1์ฃผ์ฐจ ํ”„๋ฆฌ์ฝ”์Šค ํšŒ

cl8d.tistory.com

 

โœ” 3์ฃผ์ฐจ ํ”„๋ฆฌ์ฝ”์Šค

 

[์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค] 5๊ธฐ ๋ฐฑ์—”๋“œ 3์ฃผ์ฐจ ํ”„๋ฆฌ์ฝ”์Šค ํšŒ๊ณ ๋ก

- ๋ฒŒ์จ 3์ฃผ์ฐจ๊ฐ€ ๋๋‚ฌ๋‹ค. ์‚ฌ์‹ค ๋๋‚œ ์ง€ ์ดํ‹€ ๋๋Š”๋ฐ ์ •์‹  ์—†์–ด์„œ ์ด์ œ ํšŒ๊ณ ๋ก์„ ์ž‘์„ฑํ•œ๋‹ค... | 2์ฃผ์ฐจ ํšŒ๊ณ ๋ก [์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค] 5๊ธฐ ๋ฐฑ์—”๋“œ 2์ฃผ์ฐจ ํ”„๋ฆฌ์ฝ”์Šค ํšŒ๊ณ ๋ก - ๋ฒŒ์จ 2์ฃผ์ฐจ ๋งˆ๋ฌด๋ฆฌ...? ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด

cl8d.tistory.com

 

โœ” 4์ฃผ์ฐจ ํ”„๋ฆฌ์ฝ”์Šค

- ์–ด์ฉŒ๋‹ค ๋ณด๋‹ˆ 4์ฃผ์ฐจ ํ”„๋ฆฌ์ฝ”์Šค ๊ธ€์„ ์ž‘์„ฑ์„ ๋ชปํ–ˆ๋‹ค... ใ…Ž (๋‹น์‹œ์— ๋„ˆ๋ฌด ๋ฐ”๋นด๋‹ค...)

 

| 4์ฃผ์ฐจ ์ฝ”๋“œ

 

GitHub - Cl8D/java-bridge

Contribute to Cl8D/java-bridge development by creating an account on GitHub.

github.com

4์ฃผ์ฐจ ๋ฏธ์…˜์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ํšŒ๊ณ ํ•˜์ž๋ฉด, '๋‹ค๋ฆฌ ๊ฑด๋„ˆ๊ธฐ' ๊ฒŒ์ž„์ด์—ˆ๋‹ค.

ํ™•์‹คํžˆ 1~3์ฃผ์ฐจ์— ๋น„ํ•ด์„œ ๊ฐ€์žฅ ๊นŒ๋‹ค๋กœ์šด ๋ฏธ์…˜์ด์—ˆ๋˜ ๊ฒƒ ๊ฐ™์€๋ฐ, ํŠนํžˆ ๋‹ค๋ฆฌ ๋งต์„ ์ถœ๋ ฅํ•˜๋Š” ๊ฒŒ ๊ฐ€์žฅ ๊นŒ๋‹ค๋กœ์› ๋‹ค...ใ…Ž

์ด๋ฒˆ์—๋Š” ๊ตฌํ˜„ ๊ธฐ๋Šฅ ๋ฌธ์„œ๋ฅผ ์ œ๋Œ€๋กœ ์ž‘์„ฑํ•˜๋ ค๊ณ  ๋งŽ์ด ๋…ธ๋ ฅํ–ˆ๋‹ค.

์ด๋Ÿฐ ์‹์œผ๋กœ ๊ตฌํ˜„ํ•œ ๋ฉ”์„œ๋“œ ๋„ค์ž„๋„ ํ•จ๊ป˜ ์ž‘์„ฑํ•ด๋‘์—ˆ๋‹ค :D

์‚ฌ์‹ค ์ฝ”๋“œ๊ฐ€ ๋งˆ์Œ์— ์•ˆ ๋“œ๋Š” ๋ถ€๋ถ„์ด ๋„ˆ๋ฌด ๋งŽ์•„์„œ... ๊ฐ„๋‹จํžˆ ํšŒ๊ณ ๋ก๋งŒ ์บก์ณ!

- ๊ฐ€์žฅ ์‹ ๊ฒฝ ์“ด ๋ถ€๋ถ„์€ enum ํด๋ž˜์Šค์™€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์— ๋Œ€ํ•œ ๋ถ€๋ถ„์ด์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ์ฒด๋ฅผ ๊ฐ์ฒด๋‹ต๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ.

getter๋กœ ๋ฐ›์•„์˜ค์ง€ ์•Š๊ณ , ์ตœ๋Œ€ํ•œ ํ•ด๋‹น ๊ฐ์ฒด์—๊ฒŒ ์žฌ์งˆ๋ฌธํ•˜๋Š” ํ˜•ํƒœ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์•„์ง๊นŒ์ง€๋„ ๋ชจ๋ฅด๊ฒ ๋Š” ๊ฑด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ๋ฒ•... ์—ฌ์ „ํžˆ ๋„ˆ๋ฌด ์–ด๋ ต๋‹ค ;ใ……; ๊ฐœ์ธ์ ์œผ๋กœ ์šฐํ…Œ์ฝ” ๋“ค์–ด๊ฐ€์„œ ๊ฐ€์žฅ ๋ฐฐ์šฐ๊ณ  ์‹ถ์€ ๋ถ€๋ถ„ ์ค‘ ํ•˜๋‚˜!

 


| 3. ์ตœ์ข… ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ

- ์ตœ์ข… ์ฝ”ํ…Œ ๋Œ€์ƒ์ž ๋ฉ”์ผ์ด ๊ต‰์žฅํžˆ ๋Šฆ๊ฒŒ ์™”๋˜ ๊ธฐ์–ต์ด ์žˆ๋‹ค.

์‚ฌ์‹ค ์šฐํ…Œ์ฝ” ์Šฌ๋ž™๋„ ๊ตฌ๊ฒฝํ•˜๊ณ , ์šฐํ…Œ์ฝ” ๋‹จํ†ก๋ฐฉ๋„ ๊ตฌ๊ฒฝ ๋งŽ์ด ํ–ˆ๋Š”๋ฐ ๋‹ค๋“ค ์ •๋ง ์—ด์‹ฌํžˆ ์ค€๋น„ํ•˜์‹œ๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ์ž์‹ ์ด ์—†์—ˆ๋‹ค.

๋‹น์‹œ ์—„์ฒญ ๋ฐ”๋นด๋˜ ์‹œ๊ธฐ์—ฌ์„œ ํฌ๊ฒŒ ์ค€๋น„๋Š” ๋ชปํ•˜๊ณ , ๊ทธ๋ƒฅ 4๊ธฐ ์ตœ์ข… ๊ณผ์ œ๋งŒ ํ’€์–ด๋ณด์•˜๋‹ค...

๊ทผ๋ฐ 4๊ธฐ ์ตœ์ข… ์ฝ”ํ…Œ๊ฐ€ ์ƒ๊ฐ๋ณด๋‹ค ๋” ์–ด๋ ค์›Œ์„œ (ํŽ˜์–ด๋งค์นญ) 5์‹œ๊ฐ„ ์•ˆ์— ๊ตฌํ˜„์€ ๋ฌด์Šจ...ใ…Ž ๊ฑฐ์˜ ์ผ์ฃผ์ผ ์žก๊ณ  ๊ตฌํ˜„ํ–ˆ๋‹ค.

 

๊ทธ๋ž˜๋„ ์šฐํ…Œ์ฝ” ๋””์Šค์ปค์…˜ ๊ตฌ๊ฒฝํ•˜๋ฉด์„œ, validation ๊ณผ์ •์—์„œ supplier๋ฅผ ํ™œ์šฉํ•˜์‹  ๋ถ„์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด์„œ

์ด๊ฑฐ๋Š” ๊ผญ ์ตœ์ข… ์ฝ”ํ…Œ ๋•Œ ์จ๋จน์–ด์•ผ์ง€! ํ•˜๋ฉด์„œ ๊ธฐ๋กํ•ด๋‘์—ˆ๋‹ค. (์‹ค์ œ๋กœ ์จ๋จน์Œ. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค...)

 

- ์ถ”๊ฐ€์ ์œผ๋กœ ์ตœ์ข… ์ฝ”ํ…Œ๋Š” 2๋ฐฐ์ˆ˜๋กœ ๋ฝ‘์€ ๊ฒƒ ๊ฐ™๋‹ค. ์‹ค์ œ๋กœ ์ตœ์ข… ์ฝ”๋”ฉํ…Œ์ŠคํŠธ PR์„ ํ™•์ธํ•ด๋ณด๋‹ˆ๊นŒ 197์ด๋‹ค.

 

 

โœ” ์ตœ์ข… ์ฝ”ํ…Œ ์ฝ”๋“œ

 

GitHub - Cl8D/java-menu

Contribute to Cl8D/java-menu development by creating an account on GitHub.

github.com

- ์ตœ์ข… ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋Š” '์ ์‹ฌ ๋ฉ”๋‰ด ์ถ”์ฒœ' ํ”„๋กœ๊ทธ๋žจ ๊ตฌํ˜„ํ•˜๊ธฐ์˜€๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ๋Š” 4๊ธฐ ์ตœ์ข… ๊ณผ์ œ๋ณด๋‹ค๋Š” ์‰ฌ์› ๋‹ค๊ณ  ์ƒ๊ฐ๋œ๋‹ค. (๋งŽ์ด๋“ค ๊ทธ๋ ‡๊ฒŒ ๋ง์”€ํ•˜์‹œ๋Š” ๊ฒƒ ๊ฐ™์•˜๊ณ .)

์‚ฌ์‹ค ์ด๋ ‡๊ฒŒ ๋งํ–ˆ์ง€๋งŒ ๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ๋„ ๊ตฌํ˜„์€ ์‹œํ—˜ ์ข…๋ฃŒ 30๋ถ„ ์ „์— ๊ฒจ์šฐ ํ–ˆ๋‹ค.

 

์ฝ”ํ…Œ ๋ณด๋ฉด์„œ ๋ชฉํ‘œ๋ฅผ ํฌ๊ฒŒ 4๊ฐ€์ง€๋กœ ์žก์•˜๋‹ค.

1. ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์šฐ์„ ์œผ๋กœ ํ•˜๊ธฐ

2. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ์‹œ๊ฐ„์ด ๋‚จ์œผ๋ฉด ํ•˜๊ธฐ

3. ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๋ฌธ์„œ ์ž‘์„ฑํ•˜๊ณ , ์ปค๋ฐ‹ ๊ผฌ๋ฐ•๊ผฌ๋ฐ•ํ•˜๊ธฐ!

4. Supplier ์‚ฌ์šฉํ•˜๊ธฐ (์ด๊ฑฐ๋Š” ๊ทธ๋ƒฅ ๋‚ด ์ž‘์€ ๋ชฉํ‘œ)

 

- ์• ์ดˆ์— ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์— ์ •๋ง ์ž์‹ ์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ทธ๋ƒฅ ํฌ๊ธฐํ•˜๋Š” ํŒจ๋กœ ๊ฐ€์ง€๊ณ  ๊ฐ”๋‹ค.

์‚ฌ์‹ค ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์˜ ์›๋ž˜ ๋ชฉ์ ์€ ๊ธฐ๋Šฅ ๊ตฌํ˜„์ด ๋๋‚  ๋•Œ๋งˆ๋‹ค ์ž‘์„ฑํ•˜๋ฉด์„œ ๋ฐ”๋กœ ์ˆ˜์ •ํ•˜๋„๋ก ํ•ด์•ผ ๋˜๋Š” ๊ฑด๋ฐ,

๋‚˜๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊นŒ์ง€ ์ค‘๊ฐ„์ค‘๊ฐ„ ์ž‘์„ฑํ–ˆ๋‹ค๋ฉด ๋ถ„๋ช… ์‹œํ—˜์—์„œ ๋–จ์–ด์กŒ์„ ๊ฒƒ ๊ฐ™๋‹ค... ใ…Žใ…Ž 

๋‹คํ–‰ํžˆ๋„ ๊ตฌํ˜„ ์™„๋ฃŒ ํ›„ 30๋ถ„ ์ •๋„ ๋‚จ์•„์„œ, ๊ทธ๋•Œ ์งค๋ง‰ํ•˜๊ฒŒ validation์— ๊ด€ํ•œ ๋ถ€๋ถ„๋งŒ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์˜€๋‹ค.

 

์—ฌ๋‹ด์ด์ง€๋งŒ... ์‹œํ—˜ ๋‹น์ผ์— ๋ชธ์ด ๋„ˆ๋ฌด๋„ˆ๋ฌด ์•„ํŒŒ์„œ ๊ฑฐ์˜ ์‹œํ—˜์„ ๋ชป ๋ณด๋Ÿฌ ๊ฐˆ ๋ป”ํ–ˆ๋‹ค. ์‹œํ—˜๋„ ๊ฑฐ์˜ ์ •์‹ ๋ ฅ์œผ๋กœ ๋ดค๋‹ค... ๐Ÿฅน

5์‹œ๊ฐ„์€ ์ƒ๊ฐ๋ณด๋‹ค ๊ธธ๋ฉด์„œ ์งง์€ ์‹œ๊ฐ„์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋“ค ๋ฐฅ์€ ๊ผญ ๋จน๊ณ  ๊ฐ€์‹œ๊ธธ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค...

 

์•„๋ฌดํŠผ! ์‹œํ—˜ ๋•Œ๋ฅผ ์ฒœ์ฒœํžˆ ํšŒ๊ณ ํ•ด๋ณด๋ฉด, ๊ฐ€์žฅ ๋จผ์ € ๊ธฐ๋Šฅ ๋ฌธ์„œ ์ž‘์„ฑ๋ถ€ํ„ฐ ์‹œ์ž‘ํ–ˆ๋‹ค.

- ํ”„๋ฆฌ์ฝ”์Šค ๋•Œ์ฒ˜๋Ÿผ ๋‹ค์–‘ํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ƒ๊ฐ์€ ์•ˆ ํ–ˆ๊ณ , ๊ทธ๋ƒฅ ๋”ฑ ๊ธฐ๋Šฅ๋งŒ ์ž‘์„ฑํ–ˆ๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ ์ด ๋‹จ๊ณ„์— 2~30๋ถ„์€ ํˆฌ์žํ•˜๋Š” ๊ฑธ ์ถ”์ฒœํ•˜๊ณ  ์‹ถ๋‹ค.

์ฝ”๋“œ ์ž์ฒด๋„ ๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด์„œ ์ž‘์„ฑํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ๋ฆ„์„ ์žก์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ฌด์กฐ๊ฑด ๊ผญ! ์ž‘์„ฑํ•˜์‹œ๊ธฐ๋ฅผ...

ํŠนํžˆ, ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ถ€๋ถ„์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋‹ค ๋ณด๋ฉด ์ถ”๊ฐ€์ ์œผ๋กœ ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋Ÿด ๋•Œ๋งˆ๋‹ค ์ˆ˜์ •ํ•ด์ฃผ๋ฉด ์ข‹๋‹ค.

(์‚ด์•„์žˆ๋Š” ๋ฌธ์„œ๋ฅผ ๋งŒ๋“ค์ž ๐Ÿ˜Ž)

 

 

โœ”๏ธ ํŒจํ‚ค์ง€ ๊ตฌ์กฐ

 

- ์›ฌ๋งŒํ•˜๋ฉด mvc ๊ตฌ์กฐ๋กœ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ๊ฑธ ์ถ”์ฒœ!

- ๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๋ฌธ์„œ ์ž‘์„ฑ ํ›„์—, ๊ฐ€์žฅ ๋จผ์ € ์ƒ์ˆ˜ ๋ถ€๋ถ„์„ ์ •์˜ํ–ˆ๋‹ค.

์˜์™ธ๋กœ ์ฝ˜์†”์— ์ถœ๋ ฅ๋  ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•ด ์š”๊ตฌ์‚ฌํ•ญ ๋ณด๋ฉด์„œ ์‹น ์ •๋ฆฌํ•ด๋‘๋ฉด, ๋‚˜์ค‘์— ์ถœ๋ ฅํ•  ๋•Œ ๋นผ๋จน์ง€ ์•Š์•„์„œ ์ข‹๋‹ค.

๊ทธ๋ฆฌ๊ณ  enum ํ™œ์šฉํ•˜๊ณ  ์‹ถ์–ด์„œ enum์œผ๋กœ ์ž‘์„ฑํ•˜๊ธด ํ–ˆ๋Š”๋ฐ, ์ด๊ฑด ์ทจํ–ฅ ์ฐจ์ด์ผ ๊ฒƒ ๊ฐ™๋‹ค.

 

- ์ปจํŠธ๋กค๋Ÿฌ๋Š” 2๊ฐœ๋กœ ๋‚˜๋ˆ„์—ˆ๋Š”๋ฐ (์ฒ˜์Œ ๊ฑฐ๋Š” ๊ทธ๋ƒฅ ์ƒ์†์šฉ interface) ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ํ๋ฆ„์€ ์ถ”์ฒœ ์ปจํŠธ๋กค๋Ÿฌ์— ๋‹ด์•˜๋‹ค.

๋ฉ”๋‰ด ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋ฌธ์ œ์—์„œ ์ œ์‹œํ•œ ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๋ฉ”๋‰ด๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด๋‘๋Š” ์šฉ์œผ๋กœ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

์—ฌ๊ธฐ์„œ ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๋ฉ”๋‰ด๋ฅผ ๊ทธ๋ƒฅ ์ƒ์ˆ˜๋กœ ๋‹ค ์ž‘์„ฑํ•ด๋‘˜๊นŒ ๊ณ ๋ฏผํ–ˆ์—ˆ๋Š”๋ฐ,

์ž‘๋…„ 4๊ธฐ ์ตœ์ข… ์ฝ”ํ…Œ์˜ ํŒŒ์ผ ์ž…์ถœ๋ ฅ์ด ์ƒ๊ฐ๋‚˜์„œ ํŒŒ์ผ ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด์„œ ๊ด€๋ฆฌํ–ˆ๋‹ค.

์•„๋งˆ ์ฝ”๋“œ ์‹ฌ์‚ฌํ•ด์ฃผ์‹œ๋Š” ๋ถ„๋„ ์ด ๋ถ€๋ถ„์„ ์ข‹๊ฒŒ ๋ด์ฃผ์‹œ์ง€ ์•Š์•˜์„๊นŒ ์‹ถ์€...!

public class ResourceReader {

    public List<String> readResource(String path) {
        List<String> resources = new ArrayList<>();
        try {
            BufferedReader bufferedReader = new BufferedReader(new FileReader(path));
            String resourceName = null;
            while ((resourceName = bufferedReader.readLine()) != null) {
                resources.add(resourceName);
            }
            return resources;
        } catch (IOException e) {
            return null;
        }
    }
}

- ํŒŒ์ผ์€ ์ด๋Ÿฐ ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ–ˆ๋‹ค.

 

<MenuController.java>

public class MenuController implements Controller {

    private final MenuService menuService;
    private final ResourceReader resourceReader = new ResourceReader();

    public MenuController(MenuService menuService) {
        this.menuService = menuService;
    }

    /**
     * ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๋ฉ”๋‰ด์— ๋Œ€ํ•ด ์‚ฌ์ „์— ์ •์˜ํ•ด๋‘”๋‹ค.
     */
    @Override
    public void process() {
        for (Category category : Category.values()) {
            List<String> menuNames = Category.getCategoryWithMenus(category, resourceReader);
            menuService.saveCategoryAndMenus(category, menuNames);
        }
    }
}

 

- ๊ทธ๋ฆฌ๊ณ , ์—ฌ๊ธฐ์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฑด MenuController์—์„œ ์„ ์–ธํ•œ MenuService๋ฅผ RecommendController์—์„œ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€? ์ด์ ์ด๋‹ค.

์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์Šคํ”„๋ง์—์„œ ๋นˆ ๋“ฑ๋ก๊ณผ๋„ ์—ฐ๊ด€๋˜์–ด ์žˆ๋Š” ๋ถ€๋ถ„์ธ๋ฐ, ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ฑ๊ธ€ํ†ค์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด๊ฐ€ ํ•˜๋‚˜๋งŒ ๋งŒ๋“ค์–ด์ ธ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

    public RecommendController() {
        MenuController menuController = new MenuController(menuService);
        menuController.process();
        }

- ๊ทธ๋ž˜์„œ, RecommendController์˜ ์ƒ์„ฑ์ž์—์„œ MenuController์˜ ์ƒ์„ฑ์ž์— menuService๋ฅผ ์ฃผ์ž…ํ•ด์ฃผ์—ˆ๋‹ค.

์‚ฌ์‹ค ์ดˆ๊ธฐ์—๋Š” ์ด๊ฑธ ์ƒ๊ฐ ๋ชปํ•˜๊ณ  ๊ตฌํ˜„ํ•ด์„œ ์ž๊พธ ๋ฉ”๋‰ด ๊ฐ์ฒด๋“ค์ด null์ด ๋œจ๋Š” ๋ฌธ์ œ๋กœ ์—„์ฒญ ๋‹นํ™ฉํ–ˆ๋Š”๋ฐ, ์ฐจ๋ถ„ํ•˜๊ฒŒ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ๊นŒ ๋‹น์—ฐํ•œ ๊ฑฐ์˜€๋‹ค...ใ…Ž

 

์‹œ๊ฐ„์ด ๋œ๋‹ค๋ฉด ์‚ฌ์‹ค ์ „์ฒด์ ์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด ์ €์žฅ์†Œ ์—ญํ• ์˜ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ,

๊ตฌํ˜„ํ•˜๋Š”๋ฐ ๋ฐ”๋น ์„œ ์ด์ •๋„๊นŒ์ง€๋ฐ–์— ๋ชปํ–ˆ๋‹ค..........

๊ทธ๋ž˜๋„ ์•„๋งˆ ์ด ๋ถ€๋ถ„๋„ ์ฝ”๋“œ ์ฑ„์ ํ•ด์ฃผ์‹œ๋Š” ๋ถ„๋“ค์ด ๋˜๊ฒŒ ์ข‹๊ฒŒ ๋ณธ ํฌ์ธํŠธ๊ฐ€ ์•„๋‹๊นŒ ์‹ถ๋‹ค!

 

public class InputService {

    private final InputView inputView = new InputView();
    private final OutputView outputView = new OutputView();

    /**
     * ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋‹ค์‹œ ์žฌ์ž…๋ ฅ์„ ๋ฐ›๋Š” ๋ฉ”์„œ๋“œ.
     */
    public <T> T getUserInput(Supplier<T> inputReader) {
        try {
            return inputReader.get();
        } catch (IllegalArgumentException e) {
            outputView.printMessage(e.getMessage());
            return getUserInput(inputReader);
        }
    }

    public <T, R> R getUserInputWithParam(Function<T, R> inputReader, T param) {
        try {
            return inputReader.apply(param);
        } catch (IllegalArgumentException e) {
            outputView.printMessage(e.getMessage());
            return getUserInputWithParam(inputReader, param);
        }
    }

    public List<String> getCoachNames() {
        outputView.printMessage(GET_COACH_NAME.getValue());
        return inputView.getCoachNames();
    }

    public List<String> getNotEatFoods(String coachName) {
        outputView.printMessage(String.format(GET_NOT_EAT_MENU.getValue(), coachName));
        return inputView.getNotEatFoods();
    }
}

- ๊ทธ๋ฆฌ๊ณ  ๋˜ ๋งˆ์Œ์— ๋“œ๋Š” ๋ถ€๋ถ„์ธ ์ž…๋ ฅ ์„œ๋น„์Šค ๋ถ€๋ถ„์ด๋‹ค.

ํ˜ผ์ž๋งŒ์˜ ์ž‘์€ ๋ชฉํ‘œ(?)์˜€๋˜ Supplier์™€, ์ถ”๊ฐ€์ ์œผ๋กœ Function๊นŒ์ง€ ํ™œ์šฉํ•œ ์ ์ด๋‹ค.

์‚ฌ์‹ค Function์€ ์ธํ„ฐ๋„ท์˜ ๋„์›€์„ ์ข€ ๋ฐ›์•˜์ง€๋งŒ...ใ…Ž ์•„๋ฌดํŠผ!

์ œ๋„ค๋ฆญ์„ ํ™œ์šฉํ•œ ๋•๋ถ„์— ์‚ฌ์šฉ์žํ•œํ…Œ ์ž…๋ ฅ์„ ๋ฐ›๊ณ , ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์žฌ๊ท€๋ฅผ ํ†ตํ•ด ์žฌ์ž…๋ ฅ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค.

 

public enum Category {
    JAPAN("์ผ์‹", "src/main/resources/japan-menu.md", 1),
    KOREA("ํ•œ์‹", "src/main/resources/korea-menu.md", 2),
    CHINA("์ค‘์‹", "src/main/resources/china-menu.md", 3),
    ASIAN("์•„์‹œ์•ˆ", "src/main/resources/asian-menu.md", 4),
    WESTERN("์–‘์‹", "src/main/resources/western-menu.md", 5);

    private final String name;

    private final String filePath;

    private final Integer index;

    public static List<String> getCategoryWithMenus(Category category, ResourceReader resourceReader) {
        return resourceReader.readResource(category.filePath);
    }

    public static Category getCategoryByIdx(int index) {
        return Arrays.stream(Category.values())
                .filter(category -> index == category.index)
                .findFirst()
                .orElseThrow();
    }

    public static String getCategoryNames(List<Category> categories) {
        List<String> categoryNames = categories.stream().map(category -> category.name).collect(Collectors.toList());
        return "[ ์นดํ…Œ๊ณ ๋ฆฌ | " + String.join(" | ", categoryNames) + " ]\n";
    }


    Category(String name, String filePath, Integer index) {
        this.name = name;
        this.filePath = filePath;
        this.index = index;
    }


}

- ๊ทธ๋ฆฌ๊ณ , ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ ์ตœ๋Œ€ํ•œ '๊ฐ์ฒด์—๊ฒŒ ์งˆ๋ฌธํ•˜์ž'๋ฅผ ๋– ์˜ฌ๋ ธ๋‹ค.

static์„ ๋„ˆ๋ฌด ๋งŽ์ด ์‚ฌ์šฉํ•œ ๊ฑด๊ฐ€ ์‹ถ๊ธฐ๋„ ํ•˜์ง€๋งŒ... ๋•๋ถ„์— getter์—†์ด ์ง์ ‘ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋ฟŒ๋“ฏํ–ˆ๋‹ค.

์—ฌ๊ธฐ์„œ๋„ ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ, ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ์งˆ๋ฌธํ•ด์„œ ์–ป์–ด์˜ค๋„๋ก ์ง„ํ–‰ํ•˜๊ณ ,

์นดํ…Œ๊ณ ๋ฆฌ ์ด๋ฆ„์„ ์ถœ๋ ฅํ•  ๋•Œ๋„ ๋‚ด๋ถ€์—์„œ ๋ณ€์ˆ˜๋ฅผ .์œผ๋กœ ์ ‘๊ทผํ•ด์„œ ์–ป์–ด์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค.

 

  public void recommend(DayWeek dayWeek, List<Coach> coaches) {
        Category findCategory = categoryService.getRecommendCategory();
        findCategory = checkCategoryAlreadySave(findCategory);
        for (Coach coach : coaches) {
        recommendResultService.saveCategoryResult(dayWeek, findCategory);
        String recommendMenu = menuService.getRecommendMenu(findCategory);
        recommendMenu = checkMenuAlreadyRecommend(findCategory, coach, recommendMenu);
        recommendMenu = checkMenuNotEatFood(findCategory, coach, recommendMenu);
        recommendResultService.createAndSaveResult(coach, dayWeek, recommendMenu);
        }
        }

- ์ถ”์ฒœ ์„œ๋น„์Šค์— ์žˆ๋Š” ๋ฉ”์„œ๋“œ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ์‚ฌ์‹ค ๊ตฌํ˜„์„ ๋Šฆ๊ฒŒ ๋งˆ๋ฌด๋ฆฌํ•œ ๊ฒƒ๋„ ๋ฌธ์ œ๋ฅผ ์ž˜๋ชป ์ดํ•ดํ•ด์„œ์˜€๋‹ค.

 

- ์ฝ”์น˜๋“ค์€ ์›”, ํ™”, ์ˆ˜, ๋ชฉ, ๊ธˆ์š”์ผ์— ์ ์‹ฌ ์‹์‚ฌ๋ฅผ ๊ฐ™์ด ํ•œ๋‹ค.
- ๋ฉ”๋‰ด๋ฅผ ์ถ”์ฒœํ•˜๋Š” ๊ณผ์ •์€ ์•„๋ž˜์™€ ๊ฐ™์ด ์ด๋ค„์ง„๋‹ค.
  1) ์›”์š”์ผ์— ์ถ”์ฒœํ•  ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๋ฌด์ž‘์œ„๋กœ ์ •ํ•œ๋‹ค.
  2) ๊ฐ ์ฝ”์น˜๊ฐ€ ์›”์š”์ผ์— ๋จน์„ ๋ฉ”๋‰ด๋ฅผ ์ถ”์ฒœํ•œ๋‹ค.
  3) ํ™”, ์ˆ˜, ๋ชฉ, ๊ธˆ์š”์ผ์— ๋Œ€ํ•ด i, ii ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

- ์—ฌ๊ธฐ ๋ณด๋ฉด, ์กฐ๊ฑด ์ž์ฒด๊ฐ€ 1. ์š”์ผ๋ณ„๋กœ, 2. ๊ฐ ์š”์ผ๋งˆ๋‹ค ์ฝ”์น˜๋ณ„๋กœ ์ด๋ ‡๊ฒŒ ํ•ด์•ผ ๋˜๋Š”๋ฐ,

๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๊ฐ ์ฝ”์น˜๋ณ„๋กœ -> ์š”์ผ๋ณ„๋กœ ๋ฉ”๋‰ด๋ฅผ ์ถ”์ฒœํ•˜๋‹ค ๋ณด๋‹ˆ๊นŒ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋˜ ๊ฒƒ์ด์—ˆ๋‹ค.

์ด๊ฑฐ๋ฅผ ์‹œํ—˜ ๋๋‚˜๊ธฐ 40๋ถ„ ์ „์— ์•Œ์•„์„œ ์ง„์งœ ํ—ˆ๊ฒ์ง€๊ฒ ์ˆ˜์ •ํ–ˆ๋‹ค... ใ…Žใ…Žใ…Žใ…Ž (๋ฌธ์ œ๋ฅผ ์ž˜ ์ฝ์ž!)

 

๋งŒ์•ฝ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์—์„œ 10์ดˆ ์ด์ƒ ๊ฑธ๋ ธ๋‹ค๋“ ์ง€, ํƒ€์ž„์•„์›ƒ์ด ๋–ด๋‹ค๋ฉด... ๋Œ€๋ถ€๋ถ„ ๋ฌธ์ œ๋ฅผ ์ž˜๋ชป ์ดํ•ดํ•ด์„œ ์ž˜๋ชป๋œ ๊ตฌํ˜„ ๋•Œ๋ฌธ์—

mock.when.thenReturn ๊ณผ์ •์—์„œ ์ •๋‹ต์ธ ์‹คํ–‰ ํšŸ์ˆ˜๋ณด๋‹ค ๋” ์‹คํ–‰๋˜๋‹ค ๋ณด๋‹ˆ ๊ณ„์† ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋ฉด์„œ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ์ผ ๊ฒƒ์ด๋‹ค.

(์ด ๋ถ€๋ถ„์€ ํ”„๋ฆฌ์ฝ”์Šค 2์ฃผ์ฐจ์—์„œ๋„ ๊ฒผ์—ˆ๋˜ ๋ฌธ์ œ์˜€์–ด์„œ ๋‹คํ–‰ํžˆ ์žก์•„๋‚ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค... ใ… ใ… )

 

public class RecommendResultRepository {

    private final Map<DayWeek, Category> categoryResultStorage = new ConcurrentHashMap<>();

    private final Map<Coach, List<RecommendResult>> menuResultStorage = new ConcurrentHashMap<>();

    public void saveCategoryResult(DayWeek dayWeek, Category category) {
        categoryResultStorage.put(dayWeek, category);
    }

    public void saveMenuResult(Coach coach, RecommendResult recommendResult) {
        List<RecommendResult> results = menuResultStorage.getOrDefault(coach, new ArrayList<>());
        results.add(recommendResult);
        menuResultStorage.put(coach, results);
    }

    public List<Category> findCategoryByDayWeek() {
        List<Category> categories = new ArrayList<>();
        for (DayWeek dayWeek : DayWeek.values()) {
            Category categoryResult = categoryResultStorage.get(dayWeek);
            categories.add(categoryResult);
        }
        return categories;
    }

    public List<RecommendResult> findRecommendResultByCoach(Coach coach) {
        return menuResultStorage.get(coach);
    }
}

- ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ ๋ถ€๋ถ„ ์ฝ”๋“œ์ด๋‹ค. 

DB ์ €์žฅ์†Œ๋ฅผ ์ƒ๊ฐํ•˜๋ฉด์„œ Map์„ ํ™œ์šฉํ•œ ๊ฐ€์ƒ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ๋งŒ๋“ค์—ˆ๊ณ , ํ˜น์‹œ ๋ชฐ๋ผ์„œ ๋™์‹œ์„ฑ ์ด์Šˆ ๋•Œ๋ฌธ์— ConcurrentHashMap์œผ๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค.

 

๋‚ด๋…„ 6๊ธฐ ์ฝ”ํ…Œ์—์„œ๋„ ์ด๋Ÿฐ ์‹์œผ๋กœ repository๋ฅผ ํ™œ์šฉํ•ด์„œ ๊ฐ’์„ ์ €์žฅ์‹œํ‚จ ๋‹ค์Œ ๊บผ๋‚ด๋Š” ๋ฌธ์ œ๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š์„๊นŒ ์‹ถ๋‹ค...! 

(4๊ธฐ์—์„œ๋„ ์ด๋Ÿฐ ์‹์˜ ๋ฌธ์ œ์˜€๋Š”๋ฐ, ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๊ฐ€์žฅ ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์„ ์ž˜ ๋ณผ ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์€ ๊ฒƒ ๊ฐ™๋‹ค ใ…Žใ…Ž)

 


| ์—ฌ๋‹ด (๋ณ„๋‚ด์šฉ ์—†์Œ)

์•„๋ฌดํŠผ, ์ฝ”๋“œ ํšŒ๊ณ ๋Š” ์ด ์ •๋„๋กœ ๋งˆ๋ฌด๋ฆฌ ์ง“๊ณ ์ž ํ•œ๋‹ค.

์ง€๊ธˆ ๋‹ค์‹œ ๋ณด๋‹ˆ ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์˜ ์ฝ”๋“œ๊ฐ€ ๋งŽ์ง€๋งŒ, 5์‹œ๊ฐ„ ์—ด์‹ฌํžˆ ๊ตฌํ˜„ํ•œ ๊ฑธ๋กœ ์ด์ •๋„๋ฉด ๋งŒ์กฑ...!

 

์‚ฌ์‹ค ๊ฐœ์ธ์ ์œผ๋กœ ์šฐํ…Œ์ฝ”๋ฅผ ํ•˜๋Š” ๊ฒŒ ๋งž๋Š” ๊ฒƒ์ธ์ง€, ๊ทธ๋ƒฅ ์ทจ์—… ์ค€๋น„๋ฅผ ๋” ํ•ด์•ผ ๋ ์ง€,

์•„๋‹ˆ๋ฉด ์ธํ„ด์„ ์ง„ํ–‰ํ–ˆ๋˜ ํšŒ์‚ฌ์˜ ์ •๊ทœ์ง์„ ๊ฐˆ์ง€ ์ •๋ง ์—„์ฒญ ๋งค์šฐ ๊ณ ๋ฏผ์„ ๋งŽ์ด ํ–ˆ์—ˆ๋Š”๋ฐ...

์ฃผ๋ณ€ ์‚ฌ๋žŒ๋“คํ•œํ…Œ ๋ฌผ์–ด๋ดค์„ ๋•Œ๋„ ๋„ˆ๋ฌด ๊ฐˆ๋ ธ๋‹ค. ์ง€๊ธˆ ๋‚ด๊ฐ€ ์šฐํ…Œ์ฝ”๋ฅผ ํ•˜๋Š” ๊ฑด ๋Šฆ์€ ๊ฑด๊ฐ€ ์‹ถ๊ธฐ๋„ ํ–ˆ๊ณ ...

 

ํ•˜์ง€๋งŒ ์ธํ„ด์„ ํ•˜๋ฉด์„œ ์งง์€ ๊ณต๋ถ€ ๊ธฐ๊ฐ„์—์„œ ์˜ค๋Š” ์ง€์‹์˜ ๋ถ€์กฑํ•จ, ๊ทธ๋ฆฌ๊ณ  ์ฒด๊ณ„ํ™”๋œ ํ˜‘์—…์„ ๊ฒฝํ—˜ํ•ด๋ณด์ง€ ๋ชปํ•œ ์ ์ด ํฌ๊ฒŒ ๋‹ค๊ฐ€์™”๋‹ค.

๋ฐฑ์—”๋“œ + ์ž๋ฐ” ๊ณต๋ถ€๋ฅผ 2022๋…„ 2~3์›”๋ถ€ํ„ฐ ์‹œ์ž‘ํ–ˆ๊ณ , 7์›”๊นŒ์ง€ ๋น ์ง ๊ณต๋ถ€ํ–ˆ๋‹ค ๋ณด๋‹ˆ ๊ฒจ์šฐ ๊ณต๋ถ€ ๊ธฐ๊ฐ„์ด 5๊ฐœ์›”์ธ ์…ˆ์ด์—ˆ๋‹ค.

์Šคํ”„๋ง์ด๋“ , JPA์ด๋“ , ์ž๋ฐ”์ด๋“  ์ง€์‹์ด ๋„ˆ๋ฌด ๋ถ€์กฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹ค๋ฌด์—์„œ๋„ ๊ณ„์† ๋ง‰ํž ์ˆ˜๋ฐ–์— ์—†์—ˆ๊ณ ,

์—ฌ๋Ÿฌ ๋ช…์˜ ์ธ์›์ด์„œ ํ˜‘์—…์„ ์ฒด๊ณ„์ ์œผ๋กœ ํ˜‘์—…์„ ์ง„ํ–‰ํ•˜๊ฑฐ๋‚˜, ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ›์•„๋ณธ ์ ์ด ๋ณ„๋กœ ์—†์–ด์„œ ๊ทธ๋Ÿฐ ์ ์ด ์•„์‰ฌ์—ˆ๋‹ค.

 

๋ฌด์—‡๋ณด๋‹ค ๋‚ด ์ž์‹ ์˜ ์‹ค๋ ฅ์— ๋„ˆ๋ฌด ๋งŒ์กฑํ•  ์ˆ˜ ์—†์—ˆ๋‹ค. ๋‚˜๋Š”... ์ž˜ํ•˜๊ณ  ์‹ถ์–ด...!!!!!!

ํŠนํžˆ, ์ตœ์ข… ์ฝ”ํ…Œ๋ฅผ ์˜คํ”„๋ผ์ธ์œผ๋กœ ๋ณด๋ฉด์„œ ์‹œํ—˜์žฅ์—์„œ ๋‹ค๋“ค ์—ด์‹ฌํžˆ ์ฝ”๋”ฉํ•˜๋Š” ๋ชจ์Šต์„ ๋ณด๊ณ  ๋‚˜ ์ž์‹ ๋„ ๊ฐ์„ฑํ•˜๊ฒŒ ๋œ ๊ฒƒ ๊ฐ™๋‹ค.

๊ทธ๋ž˜์„œ 1๋…„์€ ๊ณต๋ถ€ํ•˜๋Š” ๊ธฐ๊ฐ„์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด์„œ, ์šฐํ…Œ์ฝ”๋ฅผ ์„ ํƒํ–ˆ๋‹ค. 

์•„๋งˆ ํ›„ํšŒํ•˜์ง€๋Š” ์•Š์„ ๊ฒƒ ๊ฐ™๋‹ค. ๋ฌผ๋ก  ํ›„ํšŒํ•˜์ง€ ์•Š๋„๋ก ์šฐํ…Œ์ฝ”๋Š” ์ •๋ง ์—ด์‹ฌํžˆ ์ฐธ์—ฌํ•  ๊ฑฐ๋‹ˆ๊นŒ!

 

๊ฐ€์„œ ๋ฐ›์€ ๊ท€์—ฌ์šด ๋ณผํŽœ๊ณผ ์ฑ…์œผ๋กœ ํฌ์ŠคํŒ… ๋งˆ๋ฌด๋ฆฌ :D (์•„์ง ์•„๊นŒ์›Œ์„œ ๋ชป ์”€)

์–ผ๋ฅธ ์šฐํ…Œ์ฝ” ํ•˜๊ณ  ์‹ถ๋‹ค...... ๊ฐ€์„œ ๊ณต๋ถ€ ์—ด์‹ฌํžˆ ํ•˜๊ณ , ๋” ๋‚˜์€ ๊ฐœ๋ฐœ์ž๋กœ ์„ฑ์žฅํ•ด๋‚˜๊ฐ€๊ณ  ์‹ถ๋‹ค!

2023๋…„์€ ์ง€์‹์ด ๊ฝ‰ ์ฑ„์›Œ์ง„ ์ƒํƒœ๋กœ ๋งˆ๋ฌด๋ฆฌํ•  ์ˆ˜ ์žˆ๊ธธ... ๐Ÿ™

Comments