Monthly Archives - agosto 2019

ํŒ์ •๋ฒ• ์˜ˆ์ œ

์ฝ˜ํ…Œ์ŠคํŠธ์—์„œ ์‹ฌ์‚ฌ ๊ธฐ์ค€์€ ์ฐธ๊ฐ€์ž๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‹ฌ์‚ฌ์œ„์›์—๊ฒŒ ์ถœํ’ˆ์ž‘์˜ ์˜ˆ์ƒ ๊ฒฐ๊ณผ์— ์ดˆ์ ์„ ๋งž์ถ”๊ธฐ ์œ„ํ•œ ์‹œ๋„์ž…๋‹ˆ๋‹ค. ์ ์ ˆํ•˜๊ฒŒ ์„ค๊ณ„๋œ ์‹ฌ์‚ฌ ๊ธฐ์ค€์€ ์‹ฌ์‚ฌ์œ„์›์˜ ๋ฌด์˜์‹์  ํŽธ๊ฒฌ์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ํ‰๊ฐ€๋ฐ ๊ฐ€์น˜ ๋˜๋Š” ์ ์ˆ˜๋ฅผ ํ• ๋‹นํ•  ์ž์งˆ์— ์ง‘์ค‘ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‹ฌ์‚ฌ ๊ธฐ์ค€ ์ ์ˆ˜ ์‹œํŠธ๋Š” ๊ฐ’์„ "์ฐฝ์˜์„ฑ์˜ ๊ฒฝ์šฐ 33.3%, ๋…์ฐฝ์„ฑ์— ๋Œ€ํ•œ 33.3%๋กœ ์ˆœ์œ„๋ฅผ ๋งค๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  33.3% ์ฃผ์ œ์— ๋Œ€ ํ•œ ์ค€์ˆ˜์— ๋Œ€ ํ•œ." ํŒ์‚ฌ๋Š” ๋ฒ•์› ์ ˆ์ฐจ๋ฅผ ์ฃผ์žฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ๋ฒ• ๊ด€์œผ๋กœ ์„ ์ถœ๋˜๊ฑฐ๋‚˜ ์ž„๋ช… ๋œ ๊ฐœ์ธ์ž…๋‹ˆ๋‹ค. ๋ฏผ์‚ฌ ๋ฐ ๋ฒ•์  ์ ˆ์ฐจ ๋ชจ๋‘์—์„œ ํŒ์‚ฌ๋Š” ๋ฒ•๋ฅ  ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๊ณ , ๋‹น์‚ฌ์ž ๊ฐ„์˜ ์‹ฌํŒ ์—ญํ• ์„ํ•˜๋ฉฐ, ์ฆ์–ธ ๋ฐ ์ฆ๊ฑฐ์˜ ํ—ˆ์šฉ ์— ๋Œ€ํ•œ ๊ทœ์น™๋ฐ ๋ฐฐ์‹ฌ์›์—๊ฒŒ ์‚ฌ๊ฑด์„ ์‹ฌ์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐœ๋…์„ ์‚ดํŽด๋ณด๋ ค๋ฉด ๋‹ค์Œ ํŒ์‚ฌ ์ •์˜๋ฅผ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค. ๋…ธ๋™ ํ†ต๊ณ„๊ตญ์— ๋”ฐ๋ฅด๋ฉด, 2014 ๋…„ 5 ์›”์— ๊ฐ€์žฅ ๋งŽ์€ ํŒ์‚ฌ๋ฅผ ๊ณ ์šฉํ•˜๋Š” ์ฃผ์—๋Š” ํŒ์‚ฌ๊ฐ€ ๋ฒ•์›์— ์ œ๊ธฐ๋˜๋Š” ๊ฐ ์‚ฌ๊ฑด์„ ์ฃผ์žฌํ•ฉ๋‹ˆ๋‹ค. ํŒ์‚ฌ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์— ๊ณต์ •ํ•œ ํ‰๊ฐ€์ž๊ฐ€ ๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ž์‹ ์˜ ์‚ฌ๊ฑด์— ๋Œ€ํ•œ ์กฐ์–ธ์„ ์ค„ ์ˆ˜๋Š” ์—†์ง€๋งŒ, ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ถŒ๋ฆฌ๊ฐ€ ๋ฌด์—‡์ธ์ง€, ํ˜•์‚ฌ ์‚ฌ๊ฑด์—์„œ ๊ฐ€๋Šฅํ•œ ์ฒ˜๋ฒŒ์ด ๋ฌด์—‡์ธ์ง€ ์— ๋Œ€ํ•œ ์กฐ์–ธ์„ ํ•  ์ฑ…์ž„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ์ฃ„ํŒ๊ฒฐ์„ ๋ฐ›์€ ๊ฒƒ์œผ๋กœ ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค. 2014๋…„ 8์›” 9์ผ, ๋ฏธ๊ตญ ์ง€๋ฐฉ ๋ฒ•์› ํŒ์‚ฌ ๋งˆํฌ ํ’€๋Ÿฌ๋Š” ํ’€๋Ÿฌ๊ฐ€ ๊ทธ๋…€๋ฅผ ๋•…์— ๋˜์ง€๊ณ  ๋จธ๋ฆฌ๋ฅผ ๋ฝ‘์•„ ๋ฐœ๋กœ ์ฐจ์„œ ๋ถ€์ƒ์„ ์ž…์€ ์•„๋‚ด์— ๋Œ€ํ•œ ๊ฐ€์ • ํญ๋ ฅํ˜์˜๋กœ ์ฒดํฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ถ„๋ช…ํžˆ, ํ’€๋Ÿฌ๋Š” ๋ฒ•๋ฅ  ์„œ๊ธฐ์™€ ๋ฐ”๋žŒ์„ ํ”ผ์šฐ๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๊ทธ๋ฅผ ๋Œ€๋ฉดํ•˜๋Š” ์•„๋‚ด์˜ ๋ฐ˜์‘์ด์—ˆ๋‹ค. ํ’€๋Ÿฌ๋Š” ๊ฒฝ๋ฒ”์ฃ„ ๋ฐฐํ„ฐ๋ฆฌ๋กœ๋งŒ ์ถฉ์ „๋˜์—ˆ๊ณ  ๊ฐ์˜ฅ์—์„œ ํ•˜๋ฃป๋ฐค์„ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค. ํ’€๋Ÿฌ๋Š” ๊ฐ€์ • ํญ๋ ฅ์˜ ์ด์ „ ๊ธฐ๋ก์„ ๊ฐ€์ง€๊ณ , ๊ทธ๋Ÿฌ๋‚˜, ์ด์ „ ๊ฒฐํ˜ผ์—์„œ ์ž์‹ ์˜ ์ดํ˜ผ ๊ธฐ๋ก์€ ๊ฐ€์ • ํญ๋ ฅ, ์•ฝ๋ฌผ ๋‚จ์šฉ, ํ˜ผ์™ธ ์ •์‚ฌ๋ฅผ ์„ค๋ช…์œผ๋กœ.

ํŒ์‚ฌ, ํŒ๊ฒฐ, ์ค‘์žฌ, ๊ฒฐ์ •, ๊ฒฐ์ •, ์‹ฌํŒ, ๊ทœ์น™ (on), ์ •์ฐฉ, ์‹ฌํŒ, ๋Œ€๋ถ€๋ถ„์˜ ํŒ์‚ฌ๋Š” ๋ฒ•๋ฅ  ํ•™์œ„๋ฅผ ์†Œ์œ ํ•˜๊ณ  ๋ฒค์น˜๋ฅผ ๋ณต์šฉํ•˜๊ธฐ ์ „์— ๋ณ€ํ˜ธ์‚ฌ๋กœ์„œ์˜ ๊ฒฝํ—˜์„ ์Œ“์•˜์ง€๋งŒ ๋ชจ๋“  ๊ด€ํ• ๊ถŒ์—์„œ ์š”๊ตฌ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ํŒ์‚ฌ๊ฐ€ ํ˜•์‚ฌ ๋ฐ ๋ฏผ์‚ฌ ์†Œ์†ก ์ ˆ์ฐจ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฒ•์› ์‹œ์Šคํ…œ ๋ฐ ๊ด€ํ• ๊ถŒ์˜ ๊ทœ์น™์„ ์ž˜ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฌ๊ณ ํ•œ ๋ถ„์„, ๋…ผ๋ฆฌ์  ์ถ”๋ก  ๋ฐ ์ค‘์š”ํ•œ ์˜์‚ฌ ๊ฒฐ์ • ๊ธฐ์ˆ ์„ ๊ฐ€์ง„ ๊ฐœ์ธ์€ ๋‹ค์–‘ํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ฑด์ „ํ•œ ํŒ๋‹จ์„ ๋‚ด๋ ค์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๊ณ ์˜ ์‹ฌ์‚ฌ์œ„์›์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์šฐ์ˆ˜ํ•œ ์—ฐ๊ตฌ ๋ฐ ์“ฐ๊ธฐ ๊ธฐ์ˆ ์„ ํ†ตํ•ด ํŒ์‚ฌ๋Š” ๊ฐ„๊ฒฐํ•œ ์˜๊ฒฌ, ์ ˆ์ฐจ, ๊ฐ์„œ ๋ฐ ๊ธฐํƒ€ ๋ฒ•๋ฅ  ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒ์‚ฌ์—๊ฒŒ ํŽธ์ง€๋ฅผ ์“ฐ๋ ค๋ฉด ๋จผ์ € ์ž์‹ ์„ ์†Œ๊ฐœํ•˜๊ณ  ์ง์—…์„ ์ง„์ˆ ํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ, ํ”ผ๊ณ ๊ฐ€ ๊ธ€์„ ์“ฐ๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ์•Œ๊ณ  ์žˆ๋Š”์ง€ ์„ค๋ช…ํ•ด ์ฃผ์‹ญ์‹œ์˜ค. ๋‘ ๋ฒˆ์งธ ๋‹จ๋ฝ์—์„œ๋Š” ํŒ์‚ฌ์—๊ฒŒ ํ”ผ๊ณ ์˜ ์ž˜๋ชป์„ ์•Œ๊ณ  ์žˆ์œผ๋ฉฐ ์—ฌ์ „ํžˆ ๊ทธ๋ฅผ ๊ธฐ๊บผ์ด ์ง€์›ํ•  ์˜์‚ฌ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ ค์คŒ์œผ๋กœ์จ ์ผ๋ฐ˜์ ์ธ ์ง€์› ์ง„์ˆ ์„œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์„ธ ๋ฒˆ์งธ ๋‹จ๋ฝ์—์„œ ํ”ผ๊ณ ์˜ ๊ธ์ •์  ์ธ ์„ฑ๊ฒฉ ํŠน์„ฑ์„ ๊ฐ•์กฐํ•˜์—ฌ ํŒ์‚ฌ์—๊ฒŒ ๊ทธ๋“ค์ด ์ข‹์€ ์‚ฌ๋žŒ์ด๋ผ๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ, ํ”ผ๊ณ ์ธ์ด ๊ฐ€ํ˜นํ•œ ํ˜•์„ ๋ฐ›์„ ์ž๊ฒฉ์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์ด์œ ๋ฅผ ์ง„์ˆ ํ•˜์—ฌ ํŽธ์ง€๋ฅผ ๋งˆ๋ฌด๋ฆฌํ•˜์‹ญ์‹œ์˜ค. ํŽธ์ง€์˜ ์ƒ๋‹จ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๊ฐ™์€ ๋ฏผ์‚ฌ ์†Œ์†ก ๊ณต๋™ ์ €์ž๋กœ๋ถ€ํ„ฐ ์ž์„ธํ•œ ๋‚ด์šฉ์„ ๋ณด๋ ค๋ฉด ๊ธฐ์‚ฌ๋ฅผ ๊ณ„์† ์ฝ์œผ์‹ญ์‹œ์˜ค! ์˜์–ด ํ•™์Šต์ž ํŒ์‚ฌ ์ •์˜ (2์˜ ํ•ญ๋ชฉ 2) ์ „๋ฌธ ์‹ฌ์‚ฌ์œ„์›์„ ์ฐพ์„ ์ˆ˜์—†๋Š” ๊ฒฝ์šฐ, ์‹ฌ์‚ฌ ๊ธฐ์ค€์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ์ดํ•ด์™€ ์ดํ•ด ๋˜๋Š” ํŽธ๊ฒฌ์˜ ์ถฉ๋Œ์ด์—†๋Š” ๊ฐœ์ธ ๋˜๋Š” ๊ทธ๋ฃน์€ ์‹ฌ์‚ฌ์œ„์›์œผ๋กœ ๋ด‰์‚ฌ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ฌ์‚ฌ์œ„์›๋‹จ์€ ์‹ฌ์‚ฌ ๊ธฐ์ค€์„ ๋„˜์–ด์„œ์„œ ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›์€ ์ž‘ํ’ˆ์˜ ์‚ฌ๋ก€๋ฅผ ์ถฉ๋ถ„ํžˆ ๋ณด์•˜์–ด์•ผ ํ•˜๋ฉฐ, ๊ธฐ์ค€ ๋‚ด์—์„œ ๊ฐ€๋‚œํ•˜๊ณ  ํ‰๊ท ์ ์ด๋ฉฐ ์˜ˆ์™ธ์ ์ธ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜๋Š” ๊ฒƒ์„ ๊ฒฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์—๋””ํ„ฐ ์˜ˆ์ œ

์Šคํ‚ค๋งˆ๋Š” ์ •๋ณด๊ฐ€ ๋ชจ๋“  ๋ฐฉํ–ฅ์—์„œ ์—ฌ๋Ÿฌ๋ถ„์—๊ฒŒ ๋‹ค๊ฐ€์˜ฌ ๋•Œ ์œ ์šฉํ•˜์ง€๋งŒ ์Šคํ‚ค๋งˆ๊ฐ€ ์„ธ์ƒ์„ ์ƒ‰์น ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ๋„์›€์ด ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์–ด๋ฆฐ ์‹œ์ ˆ๋ถ€ํ„ฐ ์ €๋Š” ์ œ ์ž์‹ ์— ๋Œ€ํ•œ ๋Š์ž„์—†๋Š” ํ‘œ์ค€์„ ์ง€์ผฐ์Šต๋‹ˆ๋‹ค. ๋‚ด ๊ธฐ์ค€์ด ๋„ˆ๋ฌด ๋†’์•„์„œ ๊ทธ๋“ค์„ ๋งŒ๋‚  ์ˆ˜ ์—†์„ ๋•Œ๊นŒ์ง€ ์ด๊ฒƒ์€ ๋‚˜์œ ์ผ์ด ์•„๋‹ˆ๋ฉฐ, ์ธก์ •ํ•˜์ง€ ์•Š์„ ๋•Œ, ๋‚˜๋Š” ์ž์‹ ์„ ๋ฏธ์›Œํ•˜๊ณ  ์ฃผ์š” ์šฐ์šธ์ฆ์˜ ์—ํ”ผ์†Œ๋“œ๋กœ ํ…Œ๋‘๋ฆฌ๋ฅผ ๋– ๋‚ฌ๋‹ค. ๋˜ํ•œ ์•ฑ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋” ๋งŽ์€ ์˜ˆ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๋‚œ 7์›” ํƒ€์ž„์‚ฌ ํƒ€์ดํ‹€์—์„œ ์‚ฌ์ž„ํ•œ ์ธ์Šคํƒ€์ผ ์ „ ํŽธ์ง‘๊ตญ์žฅ ์•„๋ฆฌ์—˜ ํญ์Šค๋งŒ์€ ๊ทธ ๊ธธ์„ ๊ฑธ์—ˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ž์‹ ์ด ์ปจ์„คํ„ดํŠธ๋ผ๋Š” ์‚ฌ์‹ค์„ ๋ถ€์ธํ•จ์œผ๋กœ์จ ํ•œ ๋ฐœ ๋” ์˜ฌ๋ผ๊ฐ„ ์‚ฌ๋žŒ์˜ ์ข‹์€ ์˜ˆ์ž…๋‹ˆ๋‹ค. ์—ฌ์„ฑ์œผ๋กœ์„œ ์šฐ๋ฆฌ๋Š” ์‹ธ์šฐ๊ธฐ ์œ„ํ•ด ํ—˜๋‚œํ•œ ์‹ธ์›€์„ ๋ฒŒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ๋ชจ๋‘๋Š” ๊ทธ๋ ‡๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ค‘๊ณ ๋“ฑํ•™๊ต์— ๋‹ค๋‹ˆ๊ณ  ์žˆ๋Š” ์†Œ๋…€๋“ค์€ ์ด์ œ ๊ทธ ์ „ํˆฌ์— ์ง๋ฉดํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋‚˜์ด๊ฐ€ ๋“ค์–ด๊ฐ์— ๋”ฐ๋ผ ์ ์  ๋” ์–ด๋ ค์›Œ์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ์„ฑ์œผ๋กœ์„œ ์šฐ๋ฆฌ๋Š” ์ Š์€ ์„ธ๋Œ€์—๊ฒŒ ์ข‹์€ ๋ชจ๋ฒ”์„ ๋ณด์ด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ํ•จ๊ป˜ ๋ญ‰์ณ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๋“ค์ด ์›ํ•˜๋Š” ์–ด๋–ค ์ข…๋ฅ˜์˜ ์—ฌ์„ฑ์ด ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๊ทธ๋“ค์—๊ฒŒ ๋ณด์—ฌ์ค„ ํ•„์š”๊ฐ€, ๊ทธ๋“ค์€ ๊ทธ ๊ณฐํŒก์ด์— ๋งž๊ฒŒ ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์–ด์ฉŒ๋ฉด ์šฐ๋ฆฌ๊ฐ€ ๊ณผ๊ฑฐ๋ณด๋‹ค ๋” ๋‚˜์€ ๋ชจ๋ฒ”์„ ์„ธ์šด๋‹ค๋ฉด, ์„ธ์ƒ์€ ๋” ๋‚˜์€ ๊ณณ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์–ด์ฉŒ๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์ Š์€ ์‚ฌ๋žŒ๋“ค์ด ์šฐ๋ฆฌ๋ฅผ ๋ณด๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•œ๋‹ค๋ฉด, ์šฐ๋ฆฌ๋Š” ๋” ๋‚˜์€ ๋ชจ๋ฒ”์„ ๋ณด๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ตœ๊ทผ์˜ ์˜ˆ๋กœ๋Š” ๋ฐ€๋ ˆ๋‹ˆ์—„ ์„ธ๋Œ€๋ฅผ ์œ„ํ•œ ์—ฌ์„ฑ ์—ญ๋Ÿ‰ ๊ฐ•ํ™” ๊ฐ€์ด๋“œ์ธ ์ „ ์„ธ๋ธํ‹ด ์—๋””ํ„ฐ ์•ค ์‡ผ์ผ“, ์˜ฌํ•ด ์ดˆ ๋‚˜์˜จ "๋น… ๋ผ์ดํ”„", ํ˜„์žฌ ํ•˜ํผ์ฝœ๋ฆฐ์Šค์˜ ํšŒ๊ณ ๋ก์„ ์ž‘์—… ์ค‘์ธ ์ „ ์„ธ๋ถ€ ํŽธ์ง‘์ž ๋Œ„ ํŽ˜๋ ˆ์Šค, ์ „ ๋‰ด์š• ํƒ€์ž„์ฆˆ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. 2015๋…„ ์‚ฌ์ด๋จผ ์Šˆ์Šคํ„ฐ์™€ ๊ณ„์•ฝ์„ ๋งบ๊ณ  ๋ฏธ๋””์–ด ์‚ฐ์—…์˜ ์ง„ํ™” ํ•˜๋Š” ์ƒํƒœ์— ๊ด€ํ•œ ์ฑ…์„ ์ง‘์•ฝํ•œ ์งˆ ์—์ด๋ธŒ๋žŒ์Šจ(Jill Abramson) ํŽธ์ง‘์žฅ์€ ์ดํ›„ ๋ฐ”์ด์Šค ์ฃผ๋ณ€์„ ์Šค๋‹ˆํ•‘ํ•˜๋Š” ๋ชจ์Šต์„ ๋ชฉ๊ฒฉํ–ˆ๋‹ค. ๋‹ค๋ฅธ ์‹œ๊ฐ„์—, ์ด๊ฒƒ์€ ๋ฐ–์œผ๋กœ ํŒ๋งค ํ•˜ ๊ณ  ๋‹ค๋ฅธ ์ชฝ์œผ๋กœ ๊ฐ€๋Š” ๊ฒƒ์œผ๋กœ ์กฐ๋กฑ ๋˜์—ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์š”์ฆ˜์—๋Š” ๋ถ€๋Ÿฌ์›€๊ณผ ํฌ๋ง์ด ์„ž์ธ ํŽธ์ง‘๊ณ„์—์„œ ๋ณผ ๊ฐ€๋Šฅ์„ฑ์ด ๋” ํฝ๋‹ˆ๋‹ค. ์›ฐ์Šค๋Š” ์ด ์˜ต์…˜์˜ ๊ฐ€์žฅ ์ข‹์€ ์˜ˆ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 24๋…„ ๋™์•ˆ Allure์˜ ํŽธ์ง‘์žฅ์œผ๋กœ ์ผํ•ด์˜จ ๊ทธ๋…€๋Š” 2015๋…„ ์ฝ˜๋ฐ ๋‚˜์ŠคํŠธ(Condรฉ Nast) ๋ทฐํ‹ฐ ํƒ€์ดํ‹€์—์„œ ๊ฐ‘์ž‘์Šค๋Ÿฝ๊ฒŒ ํƒˆํ‡ดํ–ˆ์Šต๋‹ˆ๋‹ค. ์›ฐ์Šค๋Š” ๋ช‡ ๋‹ฌ ๋งŒ์— ๋‰ด์š•์˜ ๋” ์ปท(The Cut)์„ ๋ทฐํ‹ฐ ์—๋””ํ„ฐ๋กœ ๋‘๋“œ๋ ธ๊ณ  ํ—ˆ์ŠคํŠธ(Hearst)์— ๊ณ ์šฉ๋˜์–ด ํšŒ์‚ฌ์˜ ๋ช…์„ฑ ํƒ€์ดํ‹€์„ ์œ„ํ•œ ๋ทฐํ‹ฐ ํŒจํ‚ค์ง€๋ฅผ ์ œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ถˆ๊ณผ 1๋…„ ํ›„, ์›ฐ์Šค๋Š” ๋ ˆ๋ธ”๋ก ์˜ ์ตœ๊ณ  ํฌ๋ฆฌ์—์ดํ‹ฐ๋ธŒ ์ฑ…์ž„์ž๊ฐ€ ๋˜์–ด ๋ ˆ๊ฑฐ์‹œ ๋ฉ”์ดํฌ์—… ํšŒ์‚ฌ๋ฅผ ๋Œ์•„๋ณด๋Š” ์ž„๋ฌด๋ฅผ ๋งก์•˜์Šต๋‹ˆ๋‹ค. "๋ชจ๋“  ์‚ฌ๋žŒ์ด ๋ฐ›์€ ๋ฉ”์‹œ์ง€๋Š” ๋‹น์‹ ์ด ํ•œ ๋ชจ๋“  ์ผ๋“ค, ๋ฐฐ์šด ๋ชจ๋“  ๊ฒƒ, ์—๋„ˆ์ง€์™€ ํฅ๋ถ„์„ ์ฃผ์—ˆ๋˜ ๋ชจ๋“  ๊ฒƒ๋“ค - ๊ทธ๋“ค์€ ๋ชจ๋‘ ๋๋‚˜๊ณ , ๋๋‚˜๊ณ , ๊ทธ ๋ฌธ์€ ๋‹ซํ˜€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค"๋ผ๊ณ  Linda ์ˆ˜์„ ์˜ ์ „ ๋งค๋ ฅ ํŽธ์ง‘์ž๋Š” ์„ค๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ทฐํ‹ฐ ์ปจ์„คํ„ดํŠธ์ด์ž ๋‰ด์š• ๋งค๊ฑฐ์ง„๋” ์ปท์˜ ํŽธ์ง‘์žฅ์œผ๋กœ ํ™œ๋™ํ•œ ํ›„ ์ง€๋‚œ 2์›” Revlon์˜ ์ตœ๊ณ  ํฌ๋ฆฌ์—์ดํ‹ฐ๋ธŒ ์ฑ…์ž„์ž๊ฐ€ ๋œ ์›ฐ์Šค.

๋ฆฌ์•กํŠธ ๋กœ๊ทธ์ธ ์˜ˆ์ œ

์ฐธ๊ณ : ์ด ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์ด ๋ฌธ์„œ์—์„œ ๋‹ค๋ฃจ์ง€ ์•Š์€ ํ•ญ๋ชฉ์ธ React ๊ตฌ์„ฑ ์š”์†Œ์˜ ์ˆ˜๋ช… ์ฃผ๊ธฐ์— ๋Œ€ํ•ด ๋‹ค๋ฃจ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ React, ๊ตฌ์„ฑ ์š”์†ŒDidMount ๋ฉ”์„œ๋“œ์—์„œ ์ œ๊ณตํ•˜๋Š” ํ™•์žฅ ์ง€์  ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์ž์Šต์„œ๋ฅผ ๋”ฐ๋ฅด๊ธฐ ์œ„ํ•ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์ดํ•ดํ•  ํ•„์š”๋Š” ์—†์ง€๋งŒ ์™„๋ฃŒ ํ•œ ํ›„์—๋Š”์ด ์ฃผ์ œ์— ๋Œ€ํ•ด ๋ฐฐ์›Œ์•ผํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ๋ฐฑ ์—”๋“œ API์— ์š”์ฒญ์„ ๋ฐœํ–‰ํ•˜๋Š” submitAnswer ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•˜๊ณ  (์‚ฌ์šฉ์ž์˜ ID ํ† ํฐ์„ ์‚ฌ์šฉํ•˜์—ฌ) refreshQuestion๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋Š” ๋‘ ๊ฐ€์ง€ ์ƒํ™ฉ์—์„œ ์งˆ๋ฌธ์˜ ๋‚ด์šฉ์„ ์ƒˆ๋กœ ๊ณ ์นฉ๋‹ˆ๋‹ค., ์ฒ˜์Œ์œผ๋กœ React ๋ Œ๋”๋ง์ด ๊ตฌ์„ฑ ์š”์†Œ (๊ตฌ์„ฑ ์š”์†ŒDidMount) ๊ทธ๋ฆฌ๊ณ  ๋ฐฑ ์—”๋“œ API submitAnswer ๋ฉ”์„œ๋“œ์˜ POST ์š”์ฒญ์— ์‘๋‹ต ํ›„ ๋ฐ”๋กœ. ์ฐธ๊ณ : ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ์–ป์œผ๋ ค๋ฉด React๊ฐ€ setState()๊ฐ€ ์ด.์ƒํƒœ๋ฅผ ์ฆ‰์‹œ ์—…๋ฐ์ดํŠธํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์—…๋ฐ์ดํŠธํ•  ํ•ญ๋ชฉ์ด ๋” ๋งŽ์„ ๋•Œ ๋” ๋‚˜์€ ๊ธฐํšŒ๋ฅผ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ setState()๋ฅผ ํ˜ธ์ถœํ•œ ์งํ›„์ด.state๋ฅผ ์ฝ๋Š” ๊ฒƒ์€ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ setState()์˜ ๊ณต์‹ ์„ค๋ช…์„œ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ์ด ์„น์…˜์—์„œ๋Š” React๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋™์•ˆ ์—ผ๋‘์— ๋‘์–ด์•ผ ํ•  ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋ณธ ๊ฐœ๋…์— ๋Œ€ํ•ด ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด ์ฃผ์ œ์˜ ๋ชฉ์ ์€ ์ด๋Ÿฌํ•œ ์ฃผ์ œ์— ๋Œ€ํ•œ ์™„์ „ํ•œ ์„ค๋ช…์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋Š” ์ ์— ์œ ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชฉํ‘œ๋Š” ์ฒซ ๋ฒˆ์งธ React ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“œ๋Š” ๋™์•ˆ ์ง„ํ–‰ ๋˜๋Š” ๋‚ด์šฉ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์ถฉ๋ถ„ ํ•œ ์ปจํ…์ŠคํŠธ๋ฅผ ์ œ๊ณต ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. React๋กœ ๋‹ค์ด๋น™ํ•˜๊ธฐ ์ „์— Q&A ์•ฑ์„ ์ง€์›ํ•˜๋Š” ๋ฐฑ์—”๋“œ API๋ฅผ ์‹ ์†ํ•˜๊ฒŒ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค. ์ด ์„น์…˜์—์„œ๋Š” Node.js์™€ ํ•จ๊ป˜ Express๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด API๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ต์Šคํ”„๋ ˆ์Šค๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋˜๋Š” ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๋ชจ๋ฅด๋Š” ๊ฒฝ์šฐ ๊ฑฑ์ •ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ต์Šคํ”„๋ ˆ์Šค๋Š” ๊ณต์‹ ๋ฌธ์„œ์—์„œ ์–ธ๊ธ‰ํ•œ ๋ฐ”์™€ ๊ฐ™์ด Node.js์— ๋Œ€ํ•œ ๋น„์˜๊ฒฌ์ด ์—†๋Š” ๋ฏธ๋‹ˆ๋ฉ€ํ•œ ์›น ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๊ธฐ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ์„œ๋ฒ„(์˜ˆ: ๋ฐฑ์—”๋“œ ์•ฑ)์—์„œ ์‹คํ–‰๋˜๋Š” ์•ฑ์„ ๋น ๋ฅด๊ฒŒ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์˜ ์ƒˆ ๋ฒ„์ „์—์„œ๋Š” react-router-dom ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ BrowserRouter๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์ด ๋ผ์šฐํ„ฐ ๋‚ด๋ถ€์˜ ์•ฑ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์บก์Аํ™”ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋ฆฌ์•ก๋Œ€์‘ ๋ผ์šฐํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋งŒํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ํ•„์ˆ˜๋Š” ์•„๋‹ˆ์ง€๋งŒ ์ด React ์•ฑ ์ž์Šต์„œ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— JavaScript, HTML ๋ฐ CSS์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์‚ฌํ•ญ์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ผ๋ผ๋ฒจ ์˜ˆ์ œ

ํ„ฐ๋ฏธ๋„ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์—ด๊ณ  ์ด ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์€ ๋งํฌ๊ฐ€ ์œ ํšจํ•œ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  RefreshDatabase ํŠน์„ฑ์„ ํฌํ•จํ•˜์—ฌ ์ ์ ˆํ•œ ์ข…์†์„ฑ์„ ๊ฐ€์ง„ ์ƒˆ ํ…Œ์ŠคํŠธ ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ํด๋ž˜์Šค `์•ฑHttp์ปจํŠธ๋กค๋Ÿฌ๊ณต์œ `๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค... ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ... ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค/๋งˆ์ด๊ทธ๋ ˆ์ด์…˜/xxxxxx_create_contacts_table ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํŒŒ์ผ์„ ์—ด๊ณ  ๊ทธ์— ๋”ฐ๋ผ ์—…๋ฐ์ดํŠธ: ์ด๋™ ํ•˜๊ธฐ ์ „์—์ด ์„œ์‹ ํŒŒ์ผ์— ๋Œ€ํ•ด ์กฐ๊ธˆ ์ด์•ผ๊ธฐ ํ•ด ๋ด…์‹œ๋‹ค. ์ฒซ์งธ, @extends ์ง€์‹œ๋ฌธ์€ ๋ฆฌ์†Œ์Šค/๋ทฐ/๋ ˆ์ด์•„์›ƒ/app.blade.php์—์„œ ์ •์˜ํ•œ ๋ ˆ์ด์•„์›ƒ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Œ์„ Blade์— ์•Œ๋ฆฝ๋‹ˆ๋‹ค. @section(`์ฝ˜ํ…์ธ `)๊ณผ @endsection ์‚ฌ์ด์˜ ๋ชจ๋“  ์ฝ˜ํ…์ธ ๋Š” app.blade.php ๋ ˆ์ด์•„์›ƒ ๋‚ด์˜ @yield(`content`) ์ง€์‹œ๋ฌธ ์œ„์น˜์— ์‚ฝ์ž…๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ, ๋ช…๋ น ์ค„์„ ์‹คํ–‰ (๊ทธ๋ฆฌ๊ณ  ํ™ˆ ์Šคํ…Œ๋“œ ๊ฐ€์ƒ ๋จธ์‹ ์— ์—ฐ๊ฒฐ, ๋‹น์‹ ์€ Laravel Homestead๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ), ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ธฐ๋ณธ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•˜๊ณ , ์ƒˆ๋กœ์šด ์ž๋™์ฐจ ๋ชจ๋ธ์„ ์ƒ์„ฑํ•˜๋Š” ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ : Eloquent๋Š” Laravel์˜ ๊ธฐ๋ณธ ORM์ž…๋‹ˆ๋‹ค ( ๊ฐ์ฒด ๊ด€๊ณ„ํ˜• ๋งคํผ)๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. Eloquent๋Š” ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜๋œ "๋ชจ๋ธ"์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์ €์žฅํ•˜๋Š” ๋ฐ ์–ด๋ ค์›€์„ ๊ฒช์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ Eloquent ๋ชจ๋ธ์€ ๋‹จ์ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”๊ณผ ์ง์ ‘ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๋ฝ์ฒ˜ ํ…Œ์ด๋ธ”์— first_name, last_name, ์ด๋ฉ”์ผ, job_title, ๋„์‹œ ๋ฐ ๊ตญ๊ฐ€ ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋ถ€ํŠธ ์ŠคํŠธ๋žฉ CSS ์ƒ์šฉ๊ตฌ์˜ ์ผ๋ถ€๋ฅผ ๊ฑด๋„ˆ ๋›ฐ๊ณ  ์ค‘์š”ํ•œ ๊ฒƒ๋“ค์—๋งŒ ์ดˆ์ ์„ ๋งž์ถœ ๊ฒƒ์ž…๋‹ˆ๋‹ค. GitHub์—์„œ ์ด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์ „์ฒด ์†Œ์Šค๋ฅผ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Laravel์€ ํ™˜์ƒ์ ์ธ ๋‚ด์žฅ ๋ช…๋ น์ค„ ์ธํ„ฐํŽ˜์ด์Šค์ธ Artisan CLI์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋ฉฐ, ์ด ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ์œ ์šฉํ•œ ๋ช…๋ น์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ๋กœ๋Š” ๋‹ค์Œ ์„น์…˜์—์„œ ๊ตฌํ˜„ ํ•ด์•ผ ํ•˜๋Š” ๋‹ค์–‘ ํ•œ ContactController ๋ฉ”์„œ๋“œ์— ๋งคํ•‘ ๋ฉ๋‹ˆ๋‹ค. ๋จผ์ € ๋ณด๊ธฐ ํด๋”์— ์—ฐ๋ฝ์ฒ˜ ํด๋” ๋งŒ๋“ค๊ธฐ: ์ด ๋ช…๋ น์€ ์•ฑ/Http/์ปจํŠธ๋กค๋Ÿฌ/PhotoController.php์—์„œ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ์—๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐ ๋ฆฌ์†Œ์Šค ์ž‘์—…์— ๋Œ€ํ•œ ๋ฉ”์„œ๋“œ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋จผ์ € ์ž๋™์ฐจ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ชจ๋ธ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. . ์นœ์• ํ•˜๋Š” ์ฟ ๋‚ , CRUD ํŽ˜์ด์ง€ Ex๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์Šต์„œ๋ฅผ ๊ฒŒ์‹œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค; ์šฐ๋ฆฌ์— ๋Œ€ํ•ด (์ œ๋ชฉ, ๋ชธ๊ณผ ์ด๋ฏธ์ง€) ๋‚ด๊ฐ€ ๋ณธ ๋ชจ๋“  ๊ณณ ๊ฒŒ์‹œ๋ฌผ ์ปจํŠธ๋กค๋Ÿฌ์™€ ํ•จ๊ป˜ ๊ฒŒ์‹œ๋ฌผ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

ํŽธ์ง‘ ๋ฐ ๊ฒŒ์‹œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋ฐ˜ ํŽ˜์ด์ง€๊ฐ€์žˆ๋Š” ๋ธ”๋กœ๊ทธ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ์ด๊ฒƒ์„ ๊ณต์œ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์˜ ์œ„๋Œ€ํ•œ ์ž์Šต์„œ๋ฅผ ๋”ฐ๋ฅด๊ณ  ์žˆ์–ด์š”. . ๊ฐ ํ•„๋“œ์— ์ตœ๋Œ€ ๊ธธ์ด ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ ํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ MySQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด node_modules ํด๋”๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ณ  ์ข…์†์„ฑ์ด ์„ค์น˜๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ UI ์Šคํƒ€์ผ๋ง์„ ์œ„ํ•œ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๋ถ€ํŠธ์ŠคํŠธ๋žฉ๋„ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ญ์ œ ๋ฒ„ํŠผ์ด ์žˆ์–ด์•ผ ํ•˜๋Š” ์ฝ”๋“œ์— "TODO" ๋ฉ”๋ชจ๋ฅผ ๋‚จ๊ฒผ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ tasks.blade.php ๋ณด๊ธฐ ๋‚ด์˜ ์ž‘์—… ๋ชฉ๋ก์˜ ๊ฐ ํ–‰์— ์‚ญ์ œ ๋‹จ์ถ”๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ชฉ๋ก์˜ ๊ฐ ์ž‘์—…์— ๋Œ€ํ•ด ์ž‘์€ ๋‹จ์ผ ๋‹จ์ถ” ์–‘์‹์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋‹จ์ถ”๋ฅผ ํด๋ฆญ ํ•˜๋ฉด DELETE /์ž‘์—… ์š”์ฒญ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ์ „์†ก ๋ฉ๋‹ˆ๋‹ค: ์ƒˆ ํ…Œ์ŠคํŠธ/๊ธฐ๋Šฅ/SubmitLinksTest.php ํŒŒ์ผ์„ ์—ด๊ณ  ์šฐ๋ฆฌ๊ฐ€ ๋ฐ–์œผ๋กœ ์œก์ฒดํ•˜๋ ค๊ณ  ํ•˜๋Š” ํด๋ž˜์Šค์˜ ๋ณธ๋ฌธ์— ๋ช‡ ๊ฐ€์ง€ ๊ณจ๊ฒฉ ํ…Œ์ŠคํŠธ๋ฅผ ์ •์˜ ํ•˜์ž: Route::get (```,`), ` ShareController@index`)-์ด๋ฆ„(`์ธ๋ฑ์Šค`); ๊ฒฝ๋กœ::๋ฆฌ์†Œ์Šค(`๊ณต์œ `, `๊ณต์œ  ์ปจํŠธ๋กค๋Ÿฌ`); ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๊ฐ€ ๋  ๊ฒƒ์ด๋ฉฐ Laravel Artisan ๋ช…๋ น์ค„ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”๋กœ ์ž‘์—…ํ•˜๋ ค๋ฉด ๋ช‡ ๊ฐ€์ง€ ๋ฐ์ดํ„ฐ์™€ ๋ชจ๋ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Laravel์€ ์ด์— ๋„์›€์ด ๋˜๋Š” ๋‘ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค: ์ฒซ ๋ฒˆ์งธ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ฐ์ดํ„ฐ๋กœ ์ฑ„์šฐ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ๋”์ด๊ณ , ๋‘ ๋ฒˆ์งธ๋Š” ๊ฐœ๋ฐœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ ํ…Œ์ŠคํŠธ๋ฅผ ์ฑ„์šฐ๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์งœ ๋ชจ๋ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋ธ ํŒฉํ„ฐ๋ฆฌ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. sharecontroller.php ์˜ 5 ์ค„ ์•„๋ž˜์—์ด ํ•˜๋‚˜๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค ๋‹จ์ผ ๊ฒฝ๋กœ ์ •์˜๋Š” ์ž๋™์ฐจ ๋ฆฌ์†Œ์Šค์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ๊ฒฝ๋กœ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค : ์šฐ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ ์žฅ์†Œ์™€ ๋ชจ๋ธ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

visitor ์˜ˆ์ œ

์˜ˆ๋ฅผ ๋“ค์–ด ์ƒˆ YamlElement๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์ด ์š”์†Œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์›ํ•˜๋Š” ์ƒˆ ๋ฉ”์„œ๋“œ๋กœ ๋ชจ๋“  ๊ธฐ์กด ๋ฐฉ๋ฌธ์ž๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋”ฐ๋ผ 10๋ช… ์ด์ƒ์˜ ๊ตฌ์ฒด์ ์ธ ๋ฐฉ๋ฌธ์ž๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋ชจ๋“  ๋ฐฉ๋ฌธ์ž๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์ด ๋ฒˆ๊ฑฐ๋กœ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค์—์„œ accept() ๋ฉ”์„œ๋“œ์˜ ๊ตฌํ˜„, ๋ฐฉ๋ฌธ์ž์˜ ํ˜ธ์ถœ visit() ๋ฉ”์„œ๋“œ ๋ฐ ์ธ์ˆ˜๋กœ ์ž์‹ ์„ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋ฐฉ๋ฌธ์ž ํŒจํ„ด์— ๋Œ€ํ•œ ์ธ์ •๋œ ์ด์˜์ œ๊ธฐ๋Š” ํ•จ์ˆ˜๋ถ„ํ•ด์— ๋Œ€ํ•œ ํšŒ๊ท€๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค-์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ฒด๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌํ•œ๋‹ค. ์ด๊ฒƒ์€ ํ•ฉ๋ฒ•์ ์ธ ํ•ด์„์ด์ง€๋งŒ, ์•„๋งˆ๋„ ๋” ๋‚˜์€ ๊ด€์ /๊ทผ๊ฑฐ๋Š” ๋น„์ „ํ†ต์ ์ธ ๋™์ž‘์„ ์ „์ฒด ๊ฐ์ฒด ์ƒํƒœ๋กœ ์Šน๊ฒฉ์‹œํ‚ค๋Š” ๋ชฉํ‘œ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์˜ˆ์ œ๋Š” JSON ๋ฐ XML ์ฝ˜ํฌ๋ฆฌํŠธ ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋œ ์‚ฌ์šฉ์ž ์ง€์ • ๋ฌธ์„œ ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค. ์š”์†Œ๋Š” ๊ณตํ†ต ์ถ”์ƒ ์ˆ˜ํผ ํด๋ž˜์Šค์ธ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฐฉ๋ฌธ์ž ํŒจํ„ด์„ ํŒจํ„ด์œผ๋กœ ์•„์ง ๋””์ž์ธ๋˜์ง€ ์•Š์€ ์ฝ”๋“œ๋กœ ๋ฆฌํŒฉํ„ฐ๋งํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฐฉ๋ฌธ์ž ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ชจํ˜ธํ•ด ๋ณด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฉ๋ฌธ์ž๋Š” ๊ฐ•๋ ฅํ•˜์ง€๋งŒ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์ฝ”๋“œ Java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํŒจํ„ด ๋ช‡ ๊ฐ€์ง€ ์˜ˆ์ž…๋‹ˆ๋‹ค: ๋ฐฉ๋ฌธ์ž [1] ๋””์ž์ธ ํŒจํ„ด์€ ์œ ์—ฐํ•˜๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด ์ง€ํ–ฅ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์„ค๊ณ„ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ˜๋ณต๋˜๋Š” ๋””์ž์ธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๋Š” ์ž˜ ์•Œ๋ ค์ง„ GoF ๋””์ž์ธ ํŒจํ„ด 23 ๊ฐœ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์„ ์‚ฌ์šฉ, ๋ณ€๊ฒฝ, ํ…Œ์ŠคํŠธ ๋ฐ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค. ConcreteVisitor - ๋ฐฉ๋ฌธ์ž์˜ ๊ฐ ์œ ํ˜•์— ๋Œ€ํ•œ ๋ชจ๋“  ๋ฐฉ๋ฌธ ๋ฐฉ๋ฒ•, ์ถ”์ƒ ๋ฐฉ๋ฌธ์ž์— ์„ ์–ธ, ๊ตฌํ˜„ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ฐฉ๋ฌธ์ž๋Š” ๋‹ค๋ฅธ ์ž‘์—…์— ๋Œ€ํ•œ ์ฑ…์ž„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฐฉ๋ฌธ์ž๋Š” ๊ฒฐ๊ตญ ํ†ต๊ณผํ•˜๋Š” ์š”์†Œ์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ง‘๊ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์—์„œ, ์šฐ๋ฆฌ๋Š” ๋งฅ๊ณผ ๋ฆฌ๋ˆ…์Šค ์šด์˜ ์ฒด์ œ์— ๋Œ€ํ•ด ๊ตฌ์„ฑ๋œ ๋ผ์šฐํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ์ฐฝ์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ, ๋‚˜๋Š” ์–ด๋–ค ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค, ๊ทธ๋ƒฅ ์ƒˆ ๋ฐฉ๋ฌธ์ž ๋ฅผ ์ •์˜ ์œˆ๋„์šฐ๊ตฌ์„ฑ ๋ฐ ๋ผ์šฐํ„ฐ ๋ฐฉ๋ฌธ์ž ์ธํ„ฐํŽ˜์ด์Šค์— ์ •์˜ ๋œ ๋ฐฉ๋ฌธ() ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„. ๊ทธ๊ฒƒ์€ ๋” ์ด์ƒ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณต ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ฐฉ๋ฌธ์ž ๋””์ž์ธ ํŒจํ„ด์˜ ์ข‹์€ ์˜ˆ์ž…๋‹ˆ๋‹ค, ๋‚˜๋Š” "๋ฐฉ๋ฌธ์ž ํŒจํ„ด ํ˜œํƒ"์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ๊ฐœ์ธ์ ์ธ ์˜๊ฒฌ์„ hava. ๋ฐฉ๋ฌธ์ž ๋””์ž์ธ ํŒจํ„ด์—์„œ๋Š” ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ์ƒˆ ์ž‘์—…์„ ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์š”์•ฝ ๊ฐ€์ค‘์น˜(๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ)์™€ ๊ฐ™์€ ์ž‘์—…์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ShoppingCartVisitor์˜ ๊ตฌํ˜„์„ ์ถ”๊ฐ€ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ํŒŒ์ผ์ด ์ถ”๊ฐ€๋˜๊ณ  ๋‘ ๊ฐœ์˜ ํŒŒ์ผ์ด ์ˆ˜์ •๋ฉ๋‹ˆ๋‹ค.

🙂 ๋ฐฉ๋ฌธ์ž ๋””์ž์ธ ํŒจํ„ด์˜ ์ข‹์€ ์„ค๋ช… /์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋‘˜๋Ÿฌ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ์ง€๊ธˆ๊นŒ์ง€ ๊ฐ€์žฅ ์ข‹์€ ์˜ˆ / ์„ค๋ช…์ž„์„ ์ธ์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ €์ž์—๊ฒŒ ์ฐฌ์‚ฌ๋ฅผ ๋ณด์•„์ฃผ์„ธ์š”! ๋ฐฉ๋ฌธ์ž ํŒจํ„ด์€ ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ๊ฐœ์ฒด์˜ ๊ณ„์ธต ๊ตฌ์กฐ์— ์ƒˆ ์ž‘์—…์„ ๋„์ž…ํ•˜๋ ค๋Š” ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ๋ฌธ์ œ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์ด ์†”๋ฃจ์…˜์—์„œ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ฆ‰, ๋„์ž… ํ•˜ ์—ฌ ์ด์ค‘ ๋””์ŠคํŒจ์น˜ ๊ธฐ์ˆ ์„ ๊ตฌํ˜„ ํ•ฉ๋‹ˆ๋‹ค.

swing gridlayout ์˜ˆ์ œ

์ด ์˜ˆ์ œ์—์„œ๋Š” UI๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๋™์•ˆ GridLayout์„ ์‚ฌ์šฉํ•˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋ณด์—ฌ ์ฃผ๋ฉฐ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์‚ฌ์šฉ์— ๋Œ€ ํ•œ ์ˆ˜๋งŽ์€ ์ด๋Ÿฌํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์ฝ๊ธฐ๋ฅผ ์œ„ํ•ด ์ œ๊ณต๋œ ๋งํฌ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์˜ˆ์ œ์—์„œ๋Š” ๊ทธ๋ฆฌ๋“œ์— ๊ฐ„๋‹จํ•œ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ํฌํ•จ๋˜๋Š” GridLayout์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ๊ณ„์‚ฐ๊ธฐ๋ฅผ ๋””์ž์ธํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๋“œ๋ ˆ์ด์•„์›ƒ์˜ ์ƒ์„ฑ์ž(์˜ˆ: ์ƒˆ GridLayout(3, 2)๋Š” 3๊ฐœ์˜ ํ–‰๊ณผ 2๊ฐœ์˜ ์—ด์ด ์žˆ๋Š” GridLayout์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์Šค์œ™์—์„œ, ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ํ˜•ํƒœ๋กœ ๋ฐฐ์—ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, ๋Œ€ํ™”์ƒ์ž ๋“ฑ์„ ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ๋ฐฉ์‹์œผ๋กœ ๋ ˆ์ด์•„์›ƒ ๋งค๋‹ˆ์ €๊ฐ€ ๋งค์šฐ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ฐํ˜€์กŒ๋‹ค. ์—ฌ๋Ÿฌ ๋ ˆ์ด์•„์›ƒ ๊ด€๋ฆฌ์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ์€ ์ด๋Ÿฌํ•œ ๋ ˆ์ด์•„์›ƒ ๊ด€๋ฆฌ์ž์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ž๋ฐ”์˜ GridLayout์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค. ์ด ์˜ˆ์ œ์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค: GridLayoutTest.zip ์œ„์˜ ์ฝ”๋“œ๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Jframe์„ ์ธ์Šคํ„ด์Šคํ™”ํ•˜๊ณ  ์„ค์ •ํ•œ ํ›„ ํ–‰, ์—ด ๋ฐ ๊ฐ€๋กœ ๋ฐ ์ˆ˜์ง ๊ฐ„๊ฒฉ์„ ์„ ์–ธํ•˜์—ฌ GridLayout์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ setLayout() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ธ์Šคํ„ด์Šคํ™” ๋œ GridLayout์„ ์ปจํ…Œ์ด๋„ˆ์˜ ๋ ˆ์ด์•„์›ƒ์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ ˆ์ด์•„์›ƒ์— ํฌํ•จํ•˜๋ ค๋ฉด ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ์ด ์•„๋‹Œ JFrame์— ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์ œ์—์„œ๋Š” ์ผ๋ถ€ ๊ตฌ์„ฑ ์š”์†Œ(JtextArea ๋ฐ JButton)๋ฅผ ํ”„๋ ˆ์ž„์— ์ง์ ‘ ์ถ”๊ฐ€ํ•˜๊ณ  ์ผ๋ถ€๋Š” ๋™์ ์œผ๋กœ ํ•ด๋‹น ํ˜•์‹์˜ ๋ฐฐ์—ด(JButtons ๋ฐฐ์—ด)์œผ๋กœ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์ œ์—์„œ๋Š” 2๊ฐœ์˜ ํ–‰๊ณผ 3๊ฐœ์˜ ์—ด๋กœ ๊ตฌ์„ฑ๋œ GridLayout์ด ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค. 5๋ฒˆ์งธ ์…€์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์…€์—์„œ JEditPane์ด ๋ถ€์ฐฉ๋ฉ๋‹ˆ๋‹ค. 5๋ฒˆ์งธ ์…€์—์„œ ํ•˜๋‚˜์˜ JSplitPane ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. JSplitPane ๊ตฌ์„ฑ ์š”์†Œ์˜ ์˜ค๋ฅธ์ชฝ์— ์…€ ๋ฒˆํ˜ธ๋ฅผ ํ‘œ์‹œํ•˜๋Š” JList ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ํ•˜๋‚˜ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

JSplitPane์˜ ์˜ค๋ฅธ์ชฝ์— ๋Š” ์‹œ์Šคํ…œ ๋“œ๋ผ์ด๋ธŒ์— .txt ํŒŒ์ผ๋งŒ ํ‘œ์‹œํ•˜๋„๋ก JFileChooser๊ฐ€ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์ œ์˜ ์‹คํ–‰์€ ๋‹ค์Œ ์ด๋ฏธ์ง€์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. GridLayout ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“ค ๋•Œ ํ–‰ ์ˆ˜์™€ ์—ด ์ˆ˜๋ฅผ ์ฐธ์กฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ ๋ ˆ์ด์•„์›ƒ = ์ƒˆ ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ(2,3). ์—ฌ๊ธฐ์„œ 2๋Š” ํ–‰ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ  3์€ ์—ด ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ ํ•œ ๊ทธ๋ฆฌ๋“œ์—๋Š” 6 ๊ฐœ์˜ ์…€์ด ์žˆ์œผ๋ฉฐ ๊ฐ ํ–‰์—๋Š” 3 ์…€์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํŠน์ • ์…€์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋™์•ˆ ํ–‰ ๋ฒˆํ˜ธ์™€ ์—ด ๋ฒˆํ˜ธ๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 0,0 ์…€ ๋ฒˆํ˜ธ๋Š” ์ฒซ ๋ฒˆ์งธ ์ฆ‰ ๋งจ ์œ„ ํ–‰์˜ ๋งจ ์™ผ์ชฝ ์…€์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

์ž์„ธํ•œ ์„ค๋ช…: ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ์ด ๋ ˆ์ด์•„์›ƒ์˜ ์—ด ์ˆ˜๋ฅผ ์ง€์ •๋œ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋Š” ๋ชฉ๋ก์—์„œ ์˜ต์…˜์ด ์„ ํƒ๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์— ์˜ํ•ด ๊ฒŒ์‹œ ๋จ: Koushik ์‚ฐ์ž˜ ์Šค์œ™ 1 ์›” 9 ์ผ, 2018 0 ๋ณด๊ธฐ ๊ตฌ์„ฑ ์š”์†Œ์˜ ๋ฐฉํ–ฅ์€ ์ˆ˜ํ‰ ๋ฐ ์™ผ์ชฝ-์˜ค๋ฅธ์ชฝ, ๊ตฌ์„ฑ ์š”์†Œ ๋ฐฉํ–ฅ ์†์„ฑ์˜ ๊ธฐ๋ณธ๊ฐ’ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GridLayout ํด๋ž˜์Šค๋Š” ์‚ฌ๊ฐํ˜• ๊ทธ๋ฆฌ๋“œ์— ์ง€์ •๋œ ์ˆ˜์˜ ํ–‰๊ณผ ์—ด์ด ์žˆ๋Š” ๋ ˆ์ด์•„์›ƒ ๊ด€๋ฆฌ์ž๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

spring boot ๋กœ๊ทธ์ธ ์˜ˆ์ œ

์ผ๋ฐ˜์ ์œผ๋กœ ์Šคํ”„๋ง MVC ์•ฑ์— @EnableWebMvc ์ถ”๊ฐ€ํ•˜์ง€๋งŒ ํด๋ž˜์Šค ๊ฒฝ๋กœ์—์„œ ์Šคํ”„๋ง webmvc๋ฅผ ๋ณผ ๋•Œ ์Šคํ”„๋ง ๋ถ€ํŒ…์ด ์ž๋™์œผ๋กœ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์›น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ํ”Œ๋ž˜๊ทธ๋ฅผ ์„ค์ •ํ•˜๊ณ  DispatcherServlet ์„ค์ •๊ณผ ๊ฐ™์€ ์ฃผ์š” ๋™์ž‘์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด ์„œ๋น„์Šค๋ฅผ ์™ธ๋ถ€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์„œ๋ฒ„์— ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์กด ์›น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์•„์นด์ด๋ธŒ ๋˜๋Š” WAR ํŒŒ์ผ๋กœ ํŒจํ‚ค์ง•ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์•„๋ž˜์„ค๋ช…๋ณด๋‹ค ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์€ ๋…๋ฆฝ ์‹คํ–‰ํ˜• ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋‹จ์ผ JAR ํŒŒ์ผ๋กœ ํŒจํ‚ค์ง•ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ์˜ค๋ž˜๋œ Java main() ๋ฉ”์„œ๋“œ์— ์˜ํ•ด ๊ตฌ๋™๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์™ธ๋ถ€ ์ธ์Šคํ„ด์Šค์— ๋ฐฐํฌํ•˜๋Š” ๋Œ€์‹  Tomcat ์„œ๋ฒจ๋ › ์ปจํ…Œ์ด๋„ˆ๋ฅผ HTTP ๋Ÿฐํƒ€์ž„์œผ๋กœ ํฌํ•จํ•˜๊ธฐ ์œ„ํ•œ Spring์˜ ์ง€์›์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์ ธ์˜ค๊ธฐ com.springbootapp.auth.model.User; import com.springbootapp.auth.repository.RoleRepository; import com.springbootapp.auth.repository.UserRepository; import org.springframework.beans.factory.annotation.Autowired; ๊ฐ€์ ธ์˜ค๊ธฐ org.springframework.security.crypto.bcrypt.BCrypt์•”ํ˜ธ ์—”์ฝ”๋”; ๊ฐ€์ ธ์˜ค๊ธฐ org.springframework.stereotype.Service; @ComponentScan Hello ํŒจํ‚ค์ง€์—์„œ ๋‹ค๋ฅธ ๊ตฌ์„ฑ ์š”์†Œ, ๊ตฌ์„ฑ ๋ฐ ์„œ๋น„์Šค๋ฅผ ์ฐพ์•„ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก Spring์— ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด build.gradle ํŒŒ์ผ์ด Spring Boot ๋ฒ„์ „ 2.1.4๋ฅผ ๋กœ๋“œํ•˜๊ณ  ์›น ๋ฐ ๋ณด์•ˆ ๊ธฐ๋Šฅ ๋ชจ๋“ˆ์„ ์ถ”๊ฐ€ํ•œ๋‹ค๋Š” ๋ชจ๋“  ์š”์•ฝ์ž…๋‹ˆ๋‹ค. ๋ด„์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ๋ชจ๋“  ์Šคํƒ€ํ„ฐ์˜ ๋ชฉ๋ก์€ ์ž์‹ ์˜ ๋ฌธ์„œ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์ ธ์˜ค๊ธฐ com.springbootapp.auth.model.User; ๊ฐ€์ ธ์˜ค๊ธฐ org.springframework.data.jpa.repository.JpaRepository; ์ธ์ฆํ•˜์ง€ ์•Š์„ ๋•Œ CSS ๋ฐ "์›น์ž๋ฅด /๋ถ€ํŠธ ์ŠคํŠธ๋žฉ / 3.3.7 / css / bootstrap.min.css"๋ฅผ๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ๋„๋ก SpringSecurityConfig.java์— ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค! ์ œ์•ˆ ๋œ ์ฝ๊ธฐ:๋ด„ ๋ถ€ํŒ… ๋ฐ ๋ด„ ๋ณด์•ˆ XML ๊ตฌ์„ฑ์— ์ตœ๊ณ ์˜ ์ธํ„ฐ๋ทฐ ์งˆ๋ฌธ โ€“ webSecurityConfig.xml: ํ•„ํ„ฐ โ€“ ์œ„์ž„FilterProxy โ€“ ๋‹จ์ˆœํžˆ ๋ด„ ๊ด€๋ฆฌ ์ฝฉ์— ์œ„์ž„ โ€“ ํ•„ํ„ฐ ์ฒด์ธ ํ”„๋ก์‹œ โ€“ ๊ทธ ์ž์ฒด๊ฐ€ ํ˜œํƒ์„ ๋ˆ„๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ์ „์ฒด ๋ด„ ์ฝฉ ์ˆ˜๋ช… ์ฃผ๊ธฐ ๊ด€๋ฆฌ ๋“ฑ์—์„œ.

๋ด„ ๋ณด์•ˆ ์Šคํ”„๋ง ๋ถ€ํŠธ ์Šคํ”„๋ง ๋ด„ ๋ฐ์ดํ„ฐ JPA JSP ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐJPA JSP ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ์— ๋Œ€ํ•ด JPA JSP ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ์— ๋Œ€ํ•ด ์„œโ–ก,---- ์ฃผ์š” -- -- ์ž๋ฐ”์—์„œ -- -- ์ž๋ฐ”์—์„œ -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ์Šคํ”„๋ง๋ถ€ํŠธapp ๋ชจ๋ธ์—์„œ , -- -- -- -- -- -- -- -- -- -- -- -- -- -- ๋ณธ์ธ -- ์‚ฌ์šฉ์ž ๋ ˆํฌ์ง€ํ† ๋ฆฌ. "-- bootstrap.min.js -- โ ๋กœ๊ทธ์ธ.jsp โ”‚ ๋กœ๊ทธ์ธ.-- ๋“ฑ๋ก.jsp -- โ–ก...

rest framework ์˜ˆ์ œ

erdem/DRF-TDD ์˜ˆ์ œ์—์„œ ์ƒˆ ๋ฆด๋ฆฌ์Šค์— ๋Œ€ํ•œ ์•Œ๋ฆผ์„ ์›ํ•˜์‹ญ๋‹ˆ๊นŒ? REST ํ”„๋ ˆ์ž„์›Œํฌ ๊ฐœ๋ฐœ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ์˜ ๊ฒฝ์šฐ ํŠธ์œ„ํ„ฐ์—์„œ ์ž‘์„ฑ์ž๋„ ํŒ”๋กœ์šฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋˜ํ•œ cdrf.co ์ด ์ž์›์ด ์œ ์šฉํ•˜๋‹ค๊ณ  ๋ฐœ๊ฒฌํ–ˆ๋‹ค. ํ•ด๋‹น ๊ตฌ์กฐ๋ฅผ ๋ณด๋ ค๋Š” ๊ฒฝ์šฐ DRF ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋ชจ๋“  ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. API ๊ฐ€์ด๋“œ๋Š” REST ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“  ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์™„์ „ํ•œ ์ฐธ์กฐ ์„ค๋ช…์„œ์ž…๋‹ˆ๋‹ค. API๊ฐ€ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์™€ ํ†ต์‹ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณต์œ ๋˜๋Š” ์ •๋ณด๋Š” ํ‘œ์ค€ ์›น ํŽ˜์ด์ง€์— ์ „์†ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์š”์ฒญํ•˜๋Š” ๊ฒฝ์šฐ(์˜ˆ: Google ํ™ˆํŽ˜์ด์ง€) HTTP ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  HTML, CSS, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ, ์ด๋ฏธ์ง€ ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ HTTP ์‘๋‹ต์„ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‹จ๊ณ„๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? RESTful API๋ฅผ ๊ฐ•๋ ฅํ•˜๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ๊ถŒํ•œ ๋ฐ ์ œํ•œ์„ ๊ตฌํ˜„ํ•˜์—ฌ ์ธ์ฆ ์ž๊ฒฉ ์ฆ๋ช… ๋ฐ ์†๋„ ์ œํ•œ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ œํ•œ๋œ ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•˜์—ฌ ๋ชจ๋“  ์ข…๋ฅ˜์˜ DDoS ๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ Browsable API์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†๋„๋ก ํ•˜๋Š” ๊ฒƒ๋„ ์žŠ์ง€ ๋งˆ์„ธ์š”. ํ…Œ์ŠคํŠธ ๋ชฉ์ ์œผ๋กœ ์™„์„ฑ๋œ ํŠœํ† ๋ฆฌ์–ผ API์˜ ๋ผ์ด๋ธŒ ์˜ˆ์ œ API๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ API์—๋Š” ์ฝ”๋“œ ์กฐ๊ฐ์„ ํŽธ์ง‘ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์— ๋Œ€ํ•œ ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด ์„น์…˜์—์„œ๋Š” Django REST ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ์žฅ๊ณ ์™€ ๋งค์šฐ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ•จ์ˆ˜ ๊ธฐ๋ฐ˜ ๋ทฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์œ„์˜ ์˜ˆ์ œ์™€ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ํ›จ์”ฌ ์ ์€ ์ฝ”๋“œ๋กœ๋งŒ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ˆ˜์ค€ ์ž์Šต์„œ/urls.py ํŒŒ์ผ์—์„œ URLconf๋ฅผ ํŽธ์ง‘ํ•˜์—ฌ ๋ˆˆ์น์ด ์žˆ๋Š” API์— ๋กœ๊ทธ์ธ ๋ณด๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฝ๋กœ api-auth/์— rest_framework.url์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ณต์‹ ํŠœํ† ๋ฆฌ์–ผ์˜ ์„น์…˜ 6์€ ์šฐ๋ฆฌ๊ฐ€ ๋ณด๊ธฐ ๋ฐ ๋ผ์šฐํ„ฐ๋ณด๊ธฐ ๋ฐ ๋ผ์šฐํ„ฐ๋กœ ๋ณด๊ธฐ ๋ฐ URL์—์„œ ์ „ํ™˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์„ ํƒ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๋„ ์ ์šฉ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ฝ”๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ API ๋์ ์€ ์—ฌ์ „ํžˆ ๋™์ผํ•ฉ๋‹ˆ๋‹ค! ์ง€์›์€ REST ํ”„๋ ˆ์ž„์›Œํฌ ํ† ๋ก  ๊ทธ๋ฃน์„ ์ฐธ์กฐํ•˜๊ฑฐ๋‚˜, irc.freenode.net #restframework ์ฑ„๋„์„ ์‚ฌ์šฉํ•ด ๋ณด๊ฑฐ๋‚˜, IRC ์•„์นด์ด๋ธŒ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜, ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์— ๋Œ€ํ•œ ์งˆ๋ฌธ์„ ์ œ๊ธฐํ•˜์—ฌ `django-rest-framework` ํƒœ๊ทธ๋ฅผ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

php mysql ํšŒ์›๊ฐ€์ž… ์˜ˆ์ œ

์•ˆ๋…•ํ•˜์„ธ์š” ๋ฏธ์–€๋งˆ์—์„œ ์„ ์ƒ๋‹˜ I. ๋‚˜๋Š” php mysql์™€ ๋ฏธ๋‹ˆ ํ”„๋กœ์ ํŠธ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์›ํ•œ๋‹ค. ๋‹น์‹ ์ด ํ™•์ธํ•˜๋ฉด ์•ˆ๋…•ํ•˜์„ธ์š”, ๋‹น์‹ ์€ mysql์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜จ๋ผ์ธ์œผ๋กœ ์ •๋ฆฌ ์–‘์‹์— ๋Œ€ํ•œ ์ฝ”๋“œ๋ฅผ ๋„์™€์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค์ด ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์•ผ ํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ์งธ, mysql_real_escape_string - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž…๋ ฅ์„ ์ •๋ฆฌํ•˜๋Š” ๋ฐ ๋งค์šฐ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์•ˆ์ „ ์กฐ์น˜, ํ•˜์ง€๋งŒ์ด ์šฐ๋ฆฌ์˜ ๋กœ๊ทธ์ธ ์–‘์‹์— ๋„ฃ์–ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค ๋ฌด์—‡์ด ๋“ ์˜ ์›์น˜ ์•Š๋Š” ๋ถ€๋ถ„์„ ์ œ๊ฑฐ ํ•˜ ์—ฌ ๊ฑฐ๊ธฐ ๋ฐ–์œผ๋กœ ์•…์˜์ ์ธ ํ•ด์ปค์˜ ๋Œ€๋ถ€๋ถ„์„ ๋ฐ–์œผ๋กœ ์œ ์ง€ ๋ฉ๋‹ˆ๋‹ค. ๋‘˜์งธ, md5. ์—ฌ๊ธฐ์— ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜์ง€๋งŒ,์ด ๊ธฐ๋Šฅ์€ ๋‹จ์ˆœํžˆ ๊ทธ๊ฒƒ์— ์ „๋‹ฌ๋˜๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์•”ํ˜ธํ™”ํ•ฉ๋‹ˆ๋‹ค -์ด ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž์˜ ์•”ํ˜ธ - ์บ๊ณ  ๋ˆˆ์ด ๊ทธ๊ฒƒ์„ ์ฝ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด. ๋กœ๊ทธ์ธ ์‹œ ๋‹ค์Œ ์˜ˆ์ œ์—์„œ ์„ค๋ช…ํ•œ ๋Œ€๋กœ PHP password_verify() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ์•”ํ˜ธ ํ•ด์‹œ๋กœ ์ง€์ •๋œ ์•”ํ˜ธ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž์Šต์„œ๋Š” ์„ธ์…˜์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์†Œ๊ฐœ๋ฐ PHP์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์ž์Šต์„œ์˜ ์ตœ์ข… ๊ฒฐ๊ณผ๋Š” ์ฆ‰์‹œ ์œ ์šฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ,์ด ํŠœํ† ๋ฆฌ์–ผ์—์„œ ์–ป์€ ๊ธฐ์ˆ ์€ ์ž์‹ ์˜ ํšŒ์› ์‹œ์Šคํ…œ์„ ์ƒ์‚ฐํ•˜๊ธฐ ์œ„ํ•ด ๊ณ„์† ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค; ์ž์‹ ์˜ ์š”๊ตฌ์— ๋งž๊ฒŒ.

์•„๋งˆ๋„ ๋ช…๋ช… ๊ตฌ์กฐ - ์˜ˆ๋ฅผ ๋“ค์–ด, ํ™ˆํŽ˜์ด์ง€์— ๋ฉ”์ธ index.html์„ ๊ฐ€์ง€๊ณ  ๋‹ค์Œ ํ•˜์œ„ ํด๋” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ, ์ด๋Š” ์ฐจ๋ก€๋กœ index.html ํŒŒ์ผ, ์ž์‚ฐ ํด๋” ๋ฐ API ํด๋”๋ฅผ ํฌํ•จ - ์ฆ‰, ๊ทธ๋“ค์ด se์—์žˆ๋Š” ๊ฒฝ์šฐ์—๋„ ๋‘ ๊ฐœ์˜ index.html ํŒŒ์ผ์ด ์žˆ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค ํŽ˜์ด๋ ˆ์ดํŠธ ์œ„์น˜? ๋งˆํ‹ด ํŠœํ† ๋ฆฌ์–ผ์€ ๋งค์šฐ ์ข‹์€, ๋‚˜๋Š” ๋˜ํ•œ ์ตœ๊ทผ์— PHP ๋“ฑ๋ก์— ๋Œ€ํ•œ ์ž์Šต์„œ๋ฅผ ์ผ๋‹ค, ๋‹น์‹ ์€ ๋„ˆ๋ฌด ๋„์›€์ด ์ฐพ์„ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.http://www.allphptricks.com/๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ์ž ๋“ฑ๋ก - ๋กœ๊ทธ์ธ ์Šคํฌ๋ฆฝํŠธ - PHP-์™€ mysqli / ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์˜ ๊ฐ๊ฐ์€ ๋ณ„๋„์˜ ์ˆ˜ํ–‰ ์„ ์—ฐ๊ฒฐํ•˜์ง€๋งŒ ์—ฐ๊ฒฐ๋œ ์ž‘์—…์ž…๋‹ˆ๋‹ค. mysql_connect ํ•จ์ˆ˜๋Š” ์œ„์—์„œ ์ œ๊ณตํ•œ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•˜๊ณ  mysql_select_db ํ•จ์ˆ˜๋Š” ์Šคํฌ๋ฆฝํŠธ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์™„๋ฃŒ๋˜์ง€ ์•Š์œผ๋ฉด ๋‹ค์ด ํ•จ์ˆ˜๊ฐ€ ์ž๋™์œผ๋กœ ๋“ค์–ด์™€ ์Šคํฌ๋ฆฝํŠธ์ฒ˜๋ฆฌ๊ฐ€ ์ค‘์ง€๋˜์–ด ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ MySQL ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋‹ค๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚จ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ข‹์€ ์•„์ด๋””์–ด ๋งˆํ‹ด. ๋‚˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ๋” ๋น ๋ฅด๊ณ  ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ์˜ ํ•„์š”ํ•œ ์ •๋ณด๊ฐ€์—†๋Š” ๋“ฑ๋ก ์–‘์‹์˜ ์—ด๋ ฌํ•œ ํŒฌ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋˜ํ•œ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ๋งค์šฐ ๊ฐ€์น˜์žˆ๋Š” ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜์žˆ๋Š” ๊ฐ€์žฅ ์ข‹์€ ์žฅ์†Œ์ž…๋‹ˆ๋‹ค ... ์˜ˆ๋ฅผ ๋“ค์–ด ๋‰ด์Šค๋ ˆํ„ฐ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Chrome์—์„œ๋Š” ๋” ์ด์ƒ .dev ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ ๋„๋ฉ”์ธ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. .dev ๋Œ€์‹  .dev๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‘ ์ค„์€ ์‚ฌ์šฉ์ž์˜ ์ „์ž ๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ ์‹คํ–‰ํ•œ ์ฟผ๋ฆฌ์—์„œ ์ด ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ด ์ •๋ณด์— ์‰ฝ๊ฒŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ฒ€์ƒ‰๋œ ๋ฐ์ดํ„ฐ์˜ ๋ฐฐ์—ด์„ ์–ป์Šต๋‹ˆ๋‹ค.์ด ๊ฒฝ์šฐ PHP ํ•จ์ˆ˜ mysql_fetch_array๋ฅผ ์‚ฌ์šฉ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‚˜์ค‘์— ์‚ฌ์šฉํ•  ๋ณ€์ˆ˜์— EmailAddress ํ•„๋“œ์˜ ๊ฐ’์„ ํ• ๋‹นํ–ˆ์Šต๋‹ˆ๋‹ค. โ€” ์œ„์˜ ์˜ˆ์ œ (์ฆ‰, ๊ฐ€์ž… ์–‘์‹)์˜ ์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค : ์œ„์˜ ์˜ˆ์—์„œ, ์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅ ํ•œ ์•”ํ˜ธ ๋ฌธ์ž์—ด์—์„œ ์•”ํ˜ธ ํ•ด์‹œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด PHP password_hash() ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค (๋ผ์ธ no-75). ์ด ํ•จ์ˆ˜๋Š” ๊ฐ•๋ ฅํ•œ ๋‹จ๋ฐฉํ–ฅ ํ•ด์‹ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์•”ํ˜ธ ํ•ด์‹œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋˜ํ•œ ์•”ํ˜ธ๋ฅผ ํ•ด์‹œํ•  ๋•Œ ์ž„์˜์˜ ์†”ํŠธ๋„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋‘ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์ผํ•œ ์•”ํ˜ธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋”๋ผ๋„ ์•”ํ˜ธ ํ•ด์‹œ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ์žฅ์  / ๋‹จ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ, ์šฐ๋ฆฌ์˜ ๋กœ๊ทธ์ธ ์‹œ์Šคํ…œ์€ ์œ ์šฉ์„ฑ์ด ๋†’์ง€๋งŒ ๋ณด์•ˆ์€ ๋งค์šฐ ๋†’์ง€ ์•Š์œผ๋ฏ€๋กœ ํฌ๋Ÿผ ๋“ฑ๋ก, ์‚ฌ์ดํŠธ ๋ฉค๋ฒ„์‹ญ ๋ฐ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š” ์„œ๋น„์Šค์—๋งŒ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๋กœ๊ทธ์ธ ๋ฐ ๊ฐ€์ž…์„ ์œ„ํ•œ APIhttps://codinginfinite.com/restful-web-services-php-example-php-mysql-source-code/ ํŒŒ์ผ ๋ ๊ทผ์ฒ˜์˜ __get magic ๋ฉ”์„œ๋“œ(๋ฌธ์„œ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ฐœ์ฒด์˜ ์†์„ฑ ์•ก์„ธ์Šค๋ฅผ ์บก์ฒ˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

mfc ํฌ๋ฆฌํ‹ฐ์ปฌ ์„น์…˜ ์˜ˆ์ œ

์—ฌ๊ธฐ์„œ lpCriticalSection [in, out]์€ ์ž„๊ณ„ ์„น์…˜ ๊ฐœ์ฒด์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ์ž…๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ์„น์…˜์—์„œ๋Š” CRITICAL_SECTION ๊ตฌ์กฐ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ณ  ์ž„๊ณ„ ์„น์…˜์„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. Iniailize์ž„๊ณ„ ์„น์…˜ ๋ฐ ์ดˆ๊ธฐํ™”์ž„๊ณ„ ์„น์…˜๋ฐ ์Šคํ•€ ์นด์šดํŠธ๋Š” ์ž„๊ณ„ ์„น์…˜์„ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ž„๊ณ„ ์„น์…˜์„ ์ดˆ๊ธฐํ™”ํ•˜๋ฉด EnterCriticalsection, TryEnterCriticalSection ๋˜๋Š” LeaveCriticalSection ํ•จ์ˆ˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. EnterCriticalsection ํ•จ์ˆ˜๋Š” ์ž„๊ณ„ ์„น์…˜์„ ์ž…๋ ฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ TryEnterCriticalSection์€ ์ฐจ๋‹จํ•˜์ง€ ์•Š๊ณ  ์ž„๊ณ„ ์„น์…˜์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. LeaveCricalSection์€ ์ž„๊ณ„ ์„น์…˜์„ ๋ฒ—์–ด๋‚˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ํฌํ•จ๋œ ๋ฉ”์„œ๋“œ ํด๋ž˜์Šค์— CCriticalSection ํ˜•์‹ ๋ฐ์ดํ„ฐ ๋ฉค๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ํ•„์š”ํ•  ๋•Œ ๋ฐ์ดํ„ฐ ๋ฉค๋ฒ„๋ฅผ ์ž ๊ทธ๋ฉด ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์™€ ํด๋ž˜์Šค๋ฅผ ๊ณต์œ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ์˜ ์ค‘์š”ํ•œ ์„น์…˜์€ CriticalSection ๊ฐœ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์ฒด์ ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ CriticalSectionLock ๊ฐœ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์ž„๊ณ„ ์„น์…˜์„ ์ž ๊ทธ์–ด ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์˜ ๋™์‹œ ์•ก์„ธ์Šค๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šค๋ ˆ๋“œ๊ฐ€ ์ž„๊ณ„ ์„น์…˜์„ ์ž…๋ ฅํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ EnterCriticalSection()์„ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ž„๊ณ„ ์„น์…˜์— ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ํ˜ธ์ถœ ์Šค๋ ˆ๋“œ๋Š” ํ˜ธ์ถœ ์Šค๋ ˆ๋“œ๋ฅผ ํš๋“ํ•˜๊ณ  ์‹คํ–‰์„ ๊ณ„์†ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ž„๊ณ„ ์„น์…˜์— ์žˆ๋Š” ๊ฒฝ์šฐ ํ˜ธ์ถœ ์Šค๋ ˆ๋“œ๋Š” ์ž„๊ณ„ ์„น์…˜์„ ์‹คํ–‰ํ•˜๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ LeaveCriticalSection()๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์Šค๋ ˆ๋“œ๋ฅผ ๋– ๋‚  ๋•Œ๊นŒ์ง€ ์ ˆ์ „ ๋ชจ๋“œ๋กœ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. LeaveCriticalSection()๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์Šค๋ ˆ๋“œ๋Š” ์ž„๊ณ„ ์„น์…˜์˜ ์†Œ์œ ์ž์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. EnterCriticalSection()๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์Šค๋ ˆ๋“œ๋Š” ์ž„๊ณ„ ์„น์…˜์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์–ป์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜ํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„ ์‹œ๊ฐ„์— ๋Œ€ํ•œ ๊ฐœ๋…์€ ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฝ”๋“œ๋Š” ์ž„๊ณ„ ์„น์…˜ ๊ตฌ์กฐ๋ฅผ ์„ ์–ธํ•œ ๋‹ค์Œ InitializeCriticalSection()์„ ํ˜ธ์ถœํ•˜์—ฌ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์ด ์™„๋ฃŒ๋˜๋ฉด DeleteCriticalSection()๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค: ์‹œ๊ฐ„ ๋Œ€๊ธฐ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ CCriticalSection ๊ฐœ์ฒด ๋Œ€์‹  CMutex ๊ฐœ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋™๊ธฐํ™” ๊ฐœ์ฒด ์ด๋ฆ„์ด ์ž„๊ณ„ ๋‹จ๋ฉด ๊ฐœ์ฒด์™€ ๊ฐ™์œผ๋ฉด ์ž„๊ณ„ ์„น์…˜ ๊ฐœ์ฒด๊ฐ€ ์†Œ์œ ๊ถŒ์„ ๋ฌดํ•œํžˆ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ์ž„๊ณ„ ๋‹จ๋ฉด ์˜ค๋ธŒ์ ํŠธ๋Š” ๊ฐ์ฒด๋ฅผ ์ด๋™ํ•˜๊ฑฐ๋‚˜ ๋ณต์‚ฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์—์„œ ์Šค๋ ˆ๋“œ๋ฅผ ๋™๊ธฐํ™”ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ Mutex ๊ฐœ์ฒด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์‚ญ์ œCriticalSection ํ•จ์ˆ˜๋Š” ๋ชจ๋“  ์ž„๊ณ„ ์„น์…˜ ๊ฐœ์ฒด๋ฅผ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค. ์‚ญ์ œ ์ž„๊ณ„ ์„น์…˜์„ ํ˜ธ์ถœ ํ•œ ํ›„ EnterCriticalsection ๋˜๋Š” LeaveCriticalSection์„ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. CCriticalSection ํด๋ž˜์Šค๋Š” ์ค‘์š”ํ•œ ์„น์…˜ ๋™๊ธฐํ™” ๊ฐœ์ฒด์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋Š” ์ž„๊ณ„ ์„น์…˜ ๊ฐœ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ž ๊ธˆ ๋ฐ ์ž ๊ธˆ ํ•ด์ œ ํ•จ์ˆ˜๋Š” ๋™๊ธฐํ™” ๊ฐœ์ฒด์˜ ๋ฆฌ์†Œ์Šค ์•ก์„ธ์Šค๋ฅผ ์ œ์–ดํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ž„๊ณ„ ์„น์…˜ ๋ฐ CriticalSectionLock ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ SimbaEngine C++ API ์ฐธ์กฐ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ์ค‘์š” ์„น์…˜์€ ์†๋„๊ฐ€ ์ค‘์š”ํ•˜๊ณ  ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฒฝ๊ณ„๋ฅผ ๋„˜์–ด ๋ฆฌ์†Œ์Šค๊ฐ€ ์‚ฌ์šฉ๋˜์ง€ ์•Š์„ ๋•Œ ๋ฎคํ…์Šค(CMutex ์ฐธ์กฐ)๋Œ€์‹  ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ž„๊ณ„ ์„น์…˜ ๋Œ€์‹  ๋ฎคํ…์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ค‘์š”ํ•œ ์„น์…˜ ์Šค๋ ˆ๋“œ ๋™๊ธฐํ™” ๊ฐœ์ฒด๋Š” ๋‹ค๋ฅธ ๋™๊ธฐํ™” ๊ฐœ์ฒด์— ๋น„ํ•ด ์•ฝ๊ฐ„ ๋น ๋ฆ…๋‹ˆ๋‹ค. ์ž„๊ณ„ ์„น์…˜ ๊ฐœ์ฒด๋Š” ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ž„๊ณ„ ์„น์…˜์—์„œ๋Š” ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋งŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž„๊ณ„ ์„น์…˜ ๊ฐœ์ฒด๋Š” ๋ฎคํ…์Šค ์˜ค๋ธŒ์ ํŠธ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Mutex ๊ฐœ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ์„ธ์Šค ์ „์ฒด์—์„œ ๊ฐœ์ฒด๋ฅผ ๋™๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ž„๊ณ„ ์„น์…˜ ๊ฐœ์ฒด๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์™€์˜ ๋™๊ธฐํ™”๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž„๊ณ„ ์„น์…˜์€ ํ”„๋กœ์„ธ์Šค ๊ฒฝ๊ณ„ ๋‚ด์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๋™๊ธฐํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. MFC CMutex, CCriticalSection, CSemaphore ๋ฐ CEvent ํด๋ž˜์Šค๋Š” Microsoft Foundation ํด๋ž˜์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์Šค๋ ˆ๋“œ๋ฅผ ๋™๊ธฐํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋…๋ฆฝ ์‹คํ–‰ํ˜• ๋ฉ”์„œ๋“œ ๋…๋ฆฝ ์‹คํ–‰ํ˜• CCriticalSection ๊ฐœ์ฒด๋ฅผ ์‚ฌ์šฉ ํ•˜๋ ค๋ฉด ํ•„์š”ํ•  ๋•Œ CCriticalSection ๊ฐœ์ฒด๋ฅผ ๊ตฌ์„ฑ ํ•ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑ์ž์—์„œ ์„ฑ๊ณต์ ์œผ๋กœ ๋ฐ˜ํ™˜๋œ ํ›„ Lock ์„ ํ˜ธ์ถœํ•˜์—ฌ ๊ฐœ์ฒด๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ž ๊ธ‰์ „์ง€ํ•ฉ๋‹ˆ๋‹ค.