์„œ๋ฒ„ ๋ถ€ํ•˜ ๊ณ ๋ คํ•œ AI ๋ชจ๋ธ ์žฌํ•™์Šต ์Šค์ผ€์ค„๋ง ํ™˜๊ฒฝ ๊ตฌ์ถ• (crontab)

 

 

 

1. ๊ฐœ์š”

์กธ์—… ์ž‘ํ’ˆ์œผ๋กœ POI (Point Of Interest) ์ถ”์ฒœ ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

 

ํŒ€์› ์ค‘ 2๋ช…์ด Python์„ ์‚ฌ์šฉํ•˜์—ฌ AI ๋ชจ๋ธ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ถ€๋ถ„์„ ๋งก์•˜๊ณ , 

๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•˜์—ฌ DB์— ๋„ฃ๊ณ , ํ•™์Šต๋œ AI ๋ชจ๋ธ์„ ์„œ๋น„์Šค๋กœ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋„๋ก ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ์—ญํ• ์„ ๋งก์•˜๋‹ค. 

 

AI ๋ชจ๋ธ์˜ ํ•™์Šต ๋ฐ์ดํ„ฐ๋กœ๋Š” Yelp์˜ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์…‹์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ๋ฐ์ดํ„ฐ์…‹์—๋Š” ์•ฝ 900๋งŒ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์—ˆ๊ณ , ์ด ๋ฐ์ดํ„ฐ์™€ ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ AI๋ฅผ ์žฌํ•™์Šตํ•ด์•ผ ํ–ˆ๋‹ค.

 

์ฒ˜์Œ์—๋Š” Spring ์„œ๋ฒ„๋ฅผ ๋„์šฐ๊ณ , ์Šคํ”„๋ง ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Python ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜์—ฌ ์žฌํ•™์Šต์„ ์ง„ํ–‰ํ•  ๊ณ„ํš์ด์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋๋‹ค.

 

์ผ๋ฐ˜์ ์œผ๋กœ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์—๋Š” Spring Batch๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Chunk ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€๋งŒ, ์ €ํฌ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ค์› ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๊ฐ€์ ธ์˜จ ๋’ค์— AI ๋ชจ๋ธ์„ ํ•™์Šต์‹œํ‚ค๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„ ์ธก๋ฉด์—์„œ๋Š” Python ํŒŒ์ผ ํ•˜๋‚˜๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ ์ด์™ธ์—๋Š” ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์—ˆ๋‹ค.

 

 

 

๊ณ ๋ฏผ ๋์—, ์Šค์ผ€์ค„๋ง์„ ๋งก์•„ ํ•˜๋Š” ์„œ๋ฒ„ ํ•˜๋‚˜, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋Œ์•„๊ฐ€๋Š” ์„œ๋ฒ„ ํ•˜๋‚˜, ์ด๋ ‡๊ฒŒ ์ด 2๊ฐœ์˜ ์„œ๋ฒ„๋ฅผ ์šด์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.  

spark๋ฅผ ํ™œ์šฉํ•œ ๋ถ„์‚ฐ์ฒ˜๋ฆฌ๋„ ์ƒ๊ฐํ•ด๋ดค๋Š”๋ฐ ํŒŒ์ด์ฌ ํ•™์Šต ์ฝ”๋“œ์—์„œ๋‚˜ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๊ฑฐ๋ผ ์šฐ์„ ์€ ์œ„ ๋ฐฉ๋ฒ•๋Œ€๋กœ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.

 

 

์ตœ์ข… ์•„ํ‚คํ…์ฒ˜๋Š” ์•„๋ž˜ ์‚ฌ์ง„๊ณผ ๊ฐ™๋‹ค

 

 

 

 

 

 

 

2. ํฌ๋ก ํƒญ(crontab)

์Šคํ”„๋ง์˜ ์Šค์ผ€์ค„๋ง์€ ์ด์ „์—๋„ ๋งŽ์ด ์จ๋ดค์ง€๋งŒ ๋ฆฌ๋ˆ…์Šค๋‚˜ ์œ ๋‹‰์Šค ํ™˜๊ฒฝ์—์„œ ๊ฐ€๋ณ๊ฒŒ ์Šค์ผ€์ค„๋ง์„ ํ•  ์ˆ˜ ์žˆ๋Š” ํฌ๋ก ํƒญ์— ๋Œ€ํ•ด์„  ์ฒ˜์Œ ์•Œ๊ฒŒ๋˜์—ˆ๊ณ , ๋ฌด๊ฒ๊ฒŒ ์Šคํ”„๋ง ์„œ๋ฒ„๋ฅผ ๋„์›Œ ์Šค์ผ€์ค„๋ง์œผ๋กœ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๋ณด๋‹จ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•˜์—ฌ ๋„์ž…ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. 

 

 

ํฌ๋ก ํƒญ์ด๋ž€??

๋ฆฌ๋ˆ…์Šค๋‚˜ ์œ ๋‹‰์Šค ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์ •ํ•œ ์‹œ๊ฐ„์— ์ž๋™์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค. 

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

์‹œ์Šคํ…œ ์œ ์ง€๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์ž๋™ํ™”๋ฅผ ์œ„ํ•ด ์ด์šฉ๋˜๊ณ  ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ๋‚˜ ์ •๊ธฐ์  ์ด๋ฉ”์ผ ๋‹ค์šด๋กœ๋“œ๋ฅผ ์œ„ํ•œ ์ž‘์—…์—๋„ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค.

 

ํฌ๋ก ํƒญ ์„ค์น˜๋Š” ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํฌ๋ก ํƒญ ์„ค์น˜

$ sudo apt install cron # ํฌ๋ก ํƒญ ์„ค์น˜
$ sudo service cron status # status ํ™•์ธ, ์ •์ƒ: active
$ sudo service cron start # ํฌ๋ก ํƒญ ์„œ๋น„์Šค ์‹œ์ž‘

 

 

์ž‘์—… ํ• ๋‹น

 $ crontab -e

 

 

ํ• ๋‹น๋œ ์ž‘์—… ๋ฆฌ์ŠคํŠธ ํ™•์ธ

$ crontab -l

 

 

 

๋ช‡ ์ค„๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด ์ •๋ง ๊ฐ„๋‹จํ•˜๊ฒŒ ์Šค์ผ€์ค„๋ง ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. 

 

์ž‘์—… ํ• ๋‹นํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ž์„ธํ•˜๊ฒŒ ์•Œ์•„๋ณด์ž.

 

๋‚˜๋Š” ์‰˜ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์Šค์ผ€์ค„๋ง์— ๋“ฑ๋กํ–ˆ๋‹ค. 

ํ…Œ์ŠคํŠธ์šฉ์œผ๋กœ ๋“ฑ๋กํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— 1๋ถ„๋งˆ๋‹ค ๋Œ์•„๊ฐ€๋„๋ก ์„ค์ •ํ•ด์ฃผ์—ˆ๋‹ค. 

์•„๋ž˜ ๋ช…๋ น์–ด๋Š” "1๋ถ„๋งˆ๋‹ค /home/kevin/scheduler/test.sh ํŒŒ์ผ์„ source ๋ช…๋ น์–ด๋กœ ์‹คํ–‰์‹œ์ผœ๋ผ" ์ด๋‹ค.

* * * * * source /home/kevin/scheduler/test.sh

 

 

ํฌ๋ก  ํ˜•์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

   *          *          *         *          *
๋ถ„(0-59)  ์‹œ๊ฐ„(0-23)  ์ผ(1-31)   ์›”(1-12)   ์š”์ผ(0-7)

์œ„์™€ ๊ฐ™์ด ๋ชจ๋‘ ๋ณ„ํ‘œ์‹œ๋ฉด ๋งค๋ถ„, ๋งค์‹œ๊ฐ„, ๋งค์ผ, ๋งค์›”, ๋งค์š”์ผ์„ ์˜๋ฏธํ•œ๋‹ค. ์š”์ผ์€ 0, 7์€ ์ผ์š”์ผ์„ ์˜๋ฏธํ•˜๋ฉฐ ์›”์š”์ผ์€ 1, ํ† ์š”์ผ์€ 6์— ํ•ด๋‹นํ•œ๋‹ค.

 

์•„๋ž˜๋Š” ๋ช‡๊ฐ€์ง€ ์˜ˆ์‹œ์ด๋‹ค.

// ํฌ๋ก ํƒญ ์ฃผ๊ธฐ
* * * * * {์‹คํ–‰ ๋ช…๋ น}


// ์œ„ ์ˆœ์„œ๋Œ€๋กœ ๋ถ„ ์‹œ ์ผ ์›” ์š”์ผ {์‹คํ–‰ ๋ช…๋ น}
๋ถ„ : 0-59
์‹œ : 0-23
์ผ : 0-31
์›” : 0-12
์š”์ผ : 0-6 (์ผ-ํ†  : 0๊ณผ 7์€ ์ผ์š”์ผ์ด๋ฉฐ 1๋ถ€ํ„ฐ ์›”์š”์ผ)


// ๋งค ๋ถ„๋งˆ๋‹ค ์‹คํ–‰
* * * * * {์‹คํ–‰ ๋ช…๋ น} or /1 * * * * {์‹คํ–‰ ๋ช…๋ น}


// ๋งค ์‹œ ์ •๊ฐ์— ์‹คํ–‰
0 * * * * {์‹คํ–‰ ๋ช…๋ น}


// ๋งค์ผ ์˜คํ›„ 13์‹œ ์ •๊ฐ์— ์‹คํ–‰
0 13 * * * {์‹คํ–‰ ๋ช…๋ น}


// ๋งค์ฃผ ์›”์š”์ผ ์ž์ •์— ์‹คํ–‰
0 0 * * 1 {์‹คํ–‰ ๋ช…๋ น}


// ๋งค๋‹ฌ 5์ผ ์ž์ •์— ์‹คํ–‰
0 0 5 * * {์‹คํ–‰ ๋ช…๋ น}


// ๋งค์‹œ 25๋ถ„, 55๋ถ„์— ์‹คํ–‰
25,55 * * * * {์‹คํ–‰ ๋ช…๋ น}


// 15๋ถ„๋งˆ๋‹ค ์‹คํ–‰
 */15 * * * * {์‹คํ–‰ ๋ช…๋ น}


// ๋งค์ผ 3์‹œ์— ์‹คํ–‰
0 3 * * * {์‹คํ–‰ ๋ช…๋ น}


// ๋งค 6์‹œ๊ฐ„๋งˆ๋‹ค(00:30, 06:30, 12:30, 18:30) ์‹คํ–‰
30 */6 * * * {์‹คํ–‰ ๋ช…๋ น}


// 1์‹œ๋ถ€ํ„ฐ ๋งค 6์‹œ๊ฐ„๋งˆ๋‹ค(01:30, 07:30, 13:30, 19:30) ์‹คํ–‰
30 1-23/6 * * * {์‹คํ–‰ ๋ช…๋ น}


// ํ‰์ผ(์›”์š”์ผ~ํ† ์š”์ผ) 06:00์— ์‹คํ–‰
0 6 * * 1-6 {์‹คํ–‰ ๋ช…๋ น}


// ํ† ์š”์ผ 07:00์— ์‹คํ–‰
0 7 * * 6 {์‹คํ–‰ ๋ช…๋ น}

 

 

ํฌ๋ก ํƒญ ์žฌ์‹œ์ž‘

crontab ์„ค์ • ๋ณ€๊ฒฝ ํ›„ ํ•ญ์ƒ cron ์„œ๋น„์Šค๋ฅผ ์žฌ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค.

์•„๋ž˜ ๋ช…๋ น์–ด์ค‘ ํ•˜๋‚˜๋ฅผ ์‹คํ–‰ํ•˜๋ฉด๋œ๋‹ค.

 

cron restart ๊ฐ€ ์•ˆ๋œ๋‹ค crond restart ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

service cron restart

service crond restart

 

password๋ฅผ ์น˜๊ณ  ์žฌ์‹œ์ž‘ ํ•ด์ฃผ์ž

 

 

 

 

 

 

 

2. SCP

์œ„์—์„œ ํฌ๋ก ํƒญ์œผ๋กœ ์‰˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ์‹œ์ผฐ๋Š”๋ฐ,

ํŒŒ์ด์ฌ ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ ์‰˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰์‹œํ‚จ ์ด์œ ๋Š” ํŒŒ์ด์ฌ ์ฝ”๋“œ๋ฅผ ๋Œ๋ ค ๋‚˜์˜จ ๊ฒฐ๊ณผ ํŒŒ์ผ(์ถ”์ฒœ ๋ชจ๋ธ)์„ ์Šคํ”„๋ง ์„œ๋ฒ„๋กœ ์ „์†กํ•ด์ค˜์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

 

 

์•„์ง ai ๋‹ด๋‹น ํŒ€์›๋“ค๋„ ๊ฐœ๋ฐœ ์ค‘์ด๊ธฐ ๋•Œ๋ฌธ์— ์™„์„ฑ๋๋‹ค ๊ฐ€์ •ํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•ด๋ณด์•˜๋‹ค.

 

๋‚ด ์‰˜ ์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ์™€ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

- test.sh

python3 /home/kevin/scheduler/batch.py

# ํŒŒ์ด์ฌ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ํ›„ ์ƒ์„ฑ๋œ result.txt ํŒŒ์ผ์„ xxx ํ˜ธ์ŠคํŠธ๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
scp /home/kevin/scheduler/result.txt kevin@*.*.*.*:/home/kevin

 

- batch.py

# ํŒŒ์ผ open
with open("/home/kevin/scheduler/result.txt", "w") as file:
    for i in range(10):
        file.write("test\n")

 

 

SCP๋ฅผ ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด์„  ๋ชฉ์  ์„œ๋ฒ„์— ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ๊ณผ์ •์„ ์ƒ๋žตํ•˜๊ธฐ ์œ„ํ•ด ๊ณต๊ฐœํ‚ค๋ฅผ ๋“ฑ๋กํ•ด์ฃผ์—ˆ๋‹ค.

 

ssh-keygen -t rsa

์œ„ ๋ช…๋ น์„ ์ž…๋ ฅํ•˜๋ฉด ๋ช‡๊ฐ€์ง€๋ฅผ ๋ฌผ์–ด๋ณด๋Š”๋ฐ ํŠน๋ณ„ํ•œ ์ด์œ ๊ฐ€ ์—†๋‹ค๋ฉด ๊ทธ๋ƒฅ ์—”ํ„ฐ๋ฅผ ๊ณ„์† ๋ˆŒ๋Ÿฌ์„œ ์™„๋ฃŒํ•˜๋ฉด ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ์ƒ์„ฑํ•˜๊ณ ๋‚˜๋ฉด ๊ฐœ์ธํ‚ค๋Š” ~/.ssh/id_rsa๋กœ ๊ณต๊ฐœํ‚ค๋Š” ~/.ssh/id_rsa.pub๋กœ ์ƒ์„ฑ๋œ๋‹ค. ์ด์ œ๋Š” ๊ณต๊ฐœํ‚ค๋ฅผ ๋ณด๋‚ด๋ ค๋Š” ๋ชฉ์ ์ง€ ์„œ๋ฒ„์— ๋“ฑ๋กํ•ด์•ผ ํ•œ๋‹ค.

 

scp /userId/.ssh/id_dsa.pub [host๋ช…]@[ip]:/home/kevin

 

๋ชฉ์ ์ง€ ์ด๋™ ํ›„ ๊ณต๊ฐœํ‚ค๊ฐ€ ์ž˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ๋“ฑ๋กํ•ด์ค€๋‹ค.

authorized_keys ๋ผ๋Š” ํŒŒ์ผ์„ ๋งŒ๋“ ํ›„ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•˜๋Š”๋ฐ, authorized_keys ํŒŒ์ผ์ด ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์˜ ํ‚ค๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ์„ ์ˆ˜ ์žˆ๊ธฐ๋•Œ๋ฌธ์—, ํŒŒ์ผ์— ์ด๋ฏธ ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด (์ƒˆํŒŒ์ผ์„ ๋ฎ์–ด์“ฐ์ง€์•Š๊ณ ) ๊ณต๊ฐœํ‚ค ํŒŒ์ผ ๋‚ด์šฉ์„ ๋’ค์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.

 

cat id_dsa.pub >> /userId/.ssh/authorized_keys

 

 

๋ณด์•ˆ์„ ์œ„ํ•ด ํผ๋ฏธ์…˜์„ ๋ณ€๊ฒฝ

$ chmod 700 /userId/.ssh/

$ chmod 644 /userId/.ssh/authorized_keys

 

 

 

 

 

์ด๋ ‡๊ฒŒ ํ…Œ์ŠคํŠธ๋Š” ๋์ด๋‚ฌ๋‹ค. 

 

 

๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฌ ๊ฒฝํ—˜์ด ์ฒ˜์Œ์ด๋ผ ๋ฐ์ดํ„ฐ์…‹ ๊ฐ€๊ณต๊ณผ DB ๋Œ€๋Ÿ‰ ์‚ฝ์ž… ๋“ฑ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์–ด๋ ค์›€์ด ์žˆ์—ˆ๋‹ค. ๋˜ํ•œ ์ธ๋ฑ์‹ฑ์˜ ์ค‘์š”์„ฑ์„ ์ ˆ์‹คํžˆ ๋Š๋‚„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.  ์ธ๋ฑ์‹ฑ์„ ํ•˜์ง€ ์•Š์•˜์„ ๋•Œ์˜ ์ฐจ์ด๋Š” ์ •๋ง ์–ด๋งˆ๋ฌด์‹œ....

 

๋‚ด๊ฐ€ ์ƒ๊ฐํ•ด๋‚ธ ๋ฐฉ์‹์ด ์ตœ์„ ์ธ์ง€์— ๋Œ€ํ•œ ์˜๋ฌธ์ด ๋“ค์—ˆ๊ณ , ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์กฐ์–ธ์„ ๊ตฌํ•˜๊ณ  ์•Œ์•„๋ณด์•˜์ง€๋งŒ, ๋งˆ๋•…ํžˆ ๋‹ค๋ฅธ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์ง€ ๋ชปํ–ˆ๋‹ค.

 

๋‚จ์€ ์กธ์ž‘ ๊ธฐ๊ฐ„๋™์•ˆ ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‚˜ ๊ณ„์† ์ฐพ์•„๋ณผ ์˜ˆ์ •์ด๋‹ค..