โ— ๊ธฐ์ƒ์ฒญ ์ง€์ง„์ •๋ณด ํฌ๋กค๋ง

 

> ๋“ค์–ด๊ฐ€๋Š” ๋ง

1. ์ตœ๊ทผ ์‹œ๊ฐํ™” ์Šคํ„ฐ๋””๋ฅผ ์‹œ์ž‘ํ–ˆ๋‹ค.

2. ๊ทธ๋ƒฅ R&D ํ•˜๋Š” ๊ฑด ์žฌ๋ฏธ์—†๊ณ  ๋ฌด์–ธ๊ฐ€ ์˜๋ฏธ์žˆ๋Š” ๊ฑธ ๋งŒ๋“ค์–ด ๋ณด๊ณ  ์‹ถ์—ˆ๋‹ค.

3. ๊ทธ๋Ÿฐ๋ฐ ์ด๋ฒˆ ํฌํ•ญ ์ง€์ง„์„ ๋ณด๋ฉฐ ๊ถ๊ธˆํ•œ ๊ฒƒ์ด ์žˆ์—ˆ๋‹ค.

4. '๋งŒ์•ฝ ํฌํ•ญ์— ์ง€์ง„ ๊ฐ•๋„ 7์ด ๋ฐœ์ƒํ–ˆ๋‹ค๋ฉด ์„œ์šธ์—์„œ ์–ผ๋งˆ์˜ ๊ฐ•๋„๊ฐ€ ์ „ํ•ด์งˆ๊นŒ?' ์˜€๋‹ค.

5. ์ด๊ฑธ ์‹œ๊ฐํ™”ํ•ด๋ณด๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค.

 

> ์ •๋ณด ์ œ๊ณต ์‚ฌ์ดํŠธ

1. ๊ธฐ์ƒ์ฒญ 

- ์•„์‰ฌ์šด ๊ฑด ๊นŠ์ด ์ •๋ณด๊ฐ€ 2017๋…„ 7์›” 5์ผ๋ถ€ํ„ฐ ์ œ๊ณต๋œ๋‹ค๋Š” ๊ฑฐ๋‹ค.

- ๋ฉ”์ผ๋กœ ๋ฌธ์˜ํ•ด๋ณด๋‹ˆ ์ด์ „ ๋ฐ์ดํ„ฐ๋Š” ์ œ๊ณตํ•ด์ค„ ์ˆ˜ ์—†๋‹จ๋‹ค. ์—ญ์‹œ ์ด์œ ๋Š” ์—†๋‹ค. ์—ญ์‹œ ์ตœ๊ณ ์˜ ์ง์—…์€ ๊ณต๋ฌด์›์ด๋‹ค. 

- http://www.kma.go.kr/weather/earthquake_volcano/domesticlist.jsp

 

2. ์ง€์ง„์—ฐ๊ตฌ์„ผํ„ฐ - ์ตœ๊ทผ์— ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋“ค์ด ์‚ญ์ œ ๋˜์—ˆ๋‹ค. ๋ฌด์Šจ ์—ฐ์œ ์ธ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฌด์“ธ๋ชจ.

 

> ์‚ฌ์ดํŠธ ๋ถ„์„

1. 1978๋…„๋ถ€ํ„ฐ ์ง€์ง„ ์ •๋ณด๊ฐ€ ์ œ๊ณต๋œ๋‹ค. ์ด๊ฑด ์ฐธ ์ข‹๋‹ค.

 

 

2. ํ•œ๋ฒˆ์— 999๊ฐœ ๋ฐ–์— ๊ฒ€์ƒ‰์ด ์•ˆ๋œ๋‹ค. ๊ทธ๋ž˜์„œ 2012๋…„์„ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ ์„œ ์ด์ „, ์ดํ›„๋กœ ๋”ฐ๋กœ ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ ค์•ผ ํ•œ๋‹ค.

3. ๊ต‰์žฅํžˆ ์‰ฌ์šด ํฌ๋กค๋ง์ด๋‹ค. ๋‹ค๋งŒ ์ธ์ฝ”๋”ฉ์ด euc-kr์ด๋ผ๋Š” ์น ๋“์ด๋กœ ๋˜์–ด ์žˆ์–ด node์—์„œ ๊ทธ๋ƒฅ ๊ฐ€์ ธ์˜ค๋ฉด ๊นจ์ง„๋‹ค.

4. ๋‹คํ–‰ํžˆ iconv ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•ด utf8๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

5. for๋ฌธ๊ณผ request ๋ชจ๋“ˆ์€ ์ „ํ˜€ ์–ด์šธ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค. ๋น„๋™๊ธฐ ๋ฌธ์ œ๋‹ค.

6. 4๋ฒˆ๊ณผ 5๋ฒˆ์˜ ๋ฌธ์ œ๊ฐ€ ํ•จ๊ป˜ ๊ผฌ์—ฌ ์•ฝ๊ฐ„์˜ ๊ณ ์ƒ์„ ํ–ˆ๋‹ค.

7. ์˜ค๋žœ๋งŒ์— ์ฝ”๋”ฉ์„ ํ–ˆ๋”๋‹ˆ ๋ฒ„๋ฒ…๊ฑฐ๋ฆฐ๊ฒƒ๋„ ์žˆ๋‹ค.

 

 

8. ์–ด์จŒ๋“  ๋๋ƒˆ๋‹ค. ๋Œ€์ถฉ ๋งŒ๋“ค์—ˆ๋”๋‹ˆ ์ €๋ ‡๋‹ค. ์ด 1663๊ฐœ์˜ ์ง€์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™”๋‹ค. sleep()์„ ์•ˆํ•˜๊ณ  ๊ทธ๋ƒฅ ๊ฐ€์ ธ์™”๋”๋‹ˆ 1๋ถ„ ์ •๋„ ๋ฐ–์— ์•ˆ๊ฑธ๋ ธ๋‹ค. ๋ฏธ์•ˆ, ๊ธฐ์ƒ์ฒญ.

 

9. ์ด์ œ ์ด ์œ„๋„, ๊ฒฝ๋„ ์ •๋ณด๋ฅผ ์ผ๋‹จ ์ง€๋„ ์œ„์— ํ‘œ์‹œํ•ด๋ณด๋ คํ•œ๋‹ค. ๊ฐ€์žฅ ํฐ ๊ณ ๋ฏผ์€ ๊ตฌ๊ธ€์„ ์“ธ์ง€, ๋‹ค์Œ์ด๋‚˜ ๋„ค์ด๋ฒ„ ์ง€๋„๋ฅผ ์“ธ์ง€๋‹ค. ์ง€๋‚œ API๊ฒฝํ—˜์œผ๋กœ ๋ฏธ๋ฃจ์–ด ๊ตฌ๊ธ€ ์ง€๋„๊ฐ€ ์šฐ๋ฆฌ๋‚˜๋ผ ์ง€๋„์— ๋Œ€ํ•ด์„œ๋Š” ๋งŽ์ด ๋ถ€์‹คํ–ˆ๊ธฐ์— ์•ˆ์“ธ๊ฑฐ ๊ฐ™๋‹ค. ์•„๋งˆ ๋‹ค์Œ ์ง€๋„๋ฅผ ์“ธ๊ฑฐ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋‹ค์Œ์ด๋‚˜ ๋„ค์ด๋ฒ„ ์ง€๋„๋„ SVG์ง€์›์ด ์ž˜๋˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค. ๋‚ด์ผ ๋ช‡๊ฐ€์ง€ ๋” ํ™•์ธํ•ด ๋ณธ ํ›„ ๊ฒฐ์ •ํ•  ๊ฑฐ๋‹ค.

 

10. ๋‹จ์ˆœํ•˜๊ฒŒ ์ง€๋„์œ„์— ์ง€์ง„์„ ํ‘œ์‹œํ•˜๋Š” ๊ฑด ์ด๋ฏธ ๋งŽ์ด ์žˆ๋‹ค. ๋ณด๋ฉด ์•„๋ฌด ์˜๋ฏธ๊ฐ€ ์—†๋‹ค๋Š” ๊ฑธ ๊ธˆ๋ฐฉ ์•Œ์ˆ˜ ์žˆ๋‹ค. 

11. ๋‚œ '๊นŠ์ด'์™€ '๊ทœ๋ชจ'๋ฅผ ์ด์šฉํ•ด ๋‹จ์ˆœ ์ ์ด ์•„๋‹Œ ์˜์—ญ๊ณผ ๊ทธ๋ผ๋ฐ์ด์…˜์„ ๋งŒ๋“ค์–ด๋ณด๋ ค ํ•œ๋‹ค. ๋˜ ํƒ€์ž„๋žฉ์Šค๋ฅผ ์ด์šฉํ•ด ์‹œ๊ฐ„๋ณ€ํ™”์— ๋”ฐ๋ฅธ ์ง€์ง„ ์˜์—ญ์˜ ๋ณ€ํ™”๋ฅผ ๋ณผ ์ˆ˜๋„ ์žˆ๊ฒ ๋‹ค.

12. ์˜ค๋ฒ„์ผ ์ˆ˜ ์žˆ๊ฒ ์œผ๋‚˜ ์ง€๋„ ์œ„์— ํŠน์ • ๊ฐ•๋„์˜ ์ง€์ง„์„ ์ผ์œผํ‚ค๊ฒŒ ๋งŒ๋“ค์–ด ํ•ด๋‹น ์ง€์ง„์˜ ํŒŒ๊ธ‰ ์˜์—ญ์„ ๋ณด์—ฌ์ค„ ์ˆ˜๋„ ์žˆ๊ฒ ๋‹ค.

13. ๊ทธ ์œ„์— 5์ธต, 10์ธต์งœ๋ฆฌ ๊ฐ€์ƒ์˜ ๊ฑด๋ฌผ์„ ๋งŒ๋“ค๊ณ  ํ•ด๋‹น ๊ฐ•๋„์˜ ๊ฒฝ์šฐ ๊ฑด๋ฌผ์˜ ๋ถ•๊ดด์ •๋„๋ฅผ ๋ณด์—ฌ์ค„ ์ˆ˜๋„ ์žˆ๊ฒ ๋‹ค.

14. ๋ญ ๋‚ด๊ฐ€ ์ง€์ง„์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•„๋Š” ๊ฒƒ๋„ ์•„๋‹ˆ๊ณ  ๋ฐ์ดํ„ฐ์— pํŒŒ, sํŒŒ๊ฐ€ ๋‚˜์™€์žˆ๋Š” ๊ฒƒ๋„ ์•„๋‹ˆ๊ณ  ๊ฒŒ๋‹ค๊ฐ€ ๊นŠ์ด๋„ ์—†์œผ๋‹ˆ '๋Œ€~์ถฉ' ๋Ÿฌํ”„ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

15. ์ผ๋‹จ, ์žฌ๋ฐŒ์„ ๊ฒƒ ๊ฐ™๋‹ค. ๊ฒฐ๊ณผ๊ฐ€ ๋ฌด์ฒ™ ๊ถ๊ธˆํ•˜๊ธฐ๋„ ํ•˜๋‹ค. 

16. ์ด๊ฒŒ ์‹œ๊ฐํ™”์˜ ๋งค๋ ฅ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

17. ๊ทธ๋‚˜์ €๋‚˜ SVG๋„ ์ž˜ ๋ชจ๋ฅด๋Š”๋ฐ ใ…‹ใ…‹ใ…‹ ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์ง€ ์ด๋ก  ๊ณต๋ถ€๋„ ์ข€ ํ•ด์•ผํ•œ๋‹ค.

18. ์ž์ž. ์ƒˆ๋ฒฝ 6์‹œ๋‹ค. ใ…œ

 

 

 

โ— ์šฐ๋ฆฌ๋™๋„ค ์žฅ์• ์ธ ์ฃผ์ฐจ๊ตฌ์—ญ ๋ถˆ๋ฒ• ์ฃผ์ฐจ ํ†ต๊ณ„


> ๋“ค์–ด๊ฐ€๋Š” ๋ง

1. ์ง€๋‚œ 2017๋…„ 8์›” 27์ผ๋ถ€ํ„ฐ ์˜ค๋Š˜ 2017๋…„ 11์›” 6์ผ๊นŒ์ง€ ํ˜„์žฌ ๊ฑฐ์ฃผํ•˜๊ณ  ์žˆ๋Š” ์˜คํ”ผ์Šคํ…”์˜ ์žฅ์• ์ธ ์ฃผ์ฐจ๊ตฌ์—ญ ๋ถˆ๋ฒ• ์ฃผ์ฐจ ์ฐจ๋Ÿ‰๋“ค์— ๋Œ€ํ•ด ์กฐ์‚ฌํ–ˆ๋‹ค. ๋ฌผ๋ก  ์ƒํ™œ๋ถˆํŽธ์‹ ๊ณ  ์•ฑ์œผ๋กœ ์‹ค์ œ ์‹ ๊ณ ํ•˜๊ณ  '์ฒ˜๋ฆฌ'๊ฐ€ ์™„๋ฃŒ๋œ ์ฐจ๋“ค๋กœ๋งŒ ์ •๋ฆฌํ–ˆ๋‹ค.

2. ์ „์ฒด ๊ธฐ๊ฐ„์€ ์•ฝ 100์ผ์ด์ง€๋งŒ ์‹ค์ œ ์ฐ์€ ๋‚ ์งœ๋Š” ์•ฝ 60์ผ ๊ฐ€๋Ÿ‰์ด๋‹ค. 

3. ์ถ”์„ ์—ฐํœด์—๋„ ์ฐ์ง€ ๋ชปํ–ˆ๋‹ค.

4. ๊ฑฐ์˜ ๋Œ€๋ถ€๋ถ„ ์ƒˆ๋ฒฝ์‹œ๊ฐ„์— ์‹ ๊ณ ํ–ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‹ ๊ณ ๋‚ ์งœ๊ฐ€ 'ํ† ์š”์ผ'๋กœ ํ‘œ์‹œ๋œ ๊ฒƒ์€ ์‚ฌ์‹ค์ƒ '๊ธˆ์š”์ผ'์— ๋ถˆ๋ฒ• ์ฃผ์ฐจ๋œ ์ฐจ๋Ÿ‰์ด๋‹ค.

5. ์ฐจ๋Ÿ‰๋ฒˆํ˜ธ๋Š” ๊ณต๊ฐœํ•  ์ˆ˜ ์—†์–ด ์ฐจ ๋ธŒ๋žœ๋“œ๋กœ ๋Œ€์‹ ํ–ˆ๋‹ค.



> ์ฐจ๋Ÿ‰๋ณ„ ์‹ ๊ณ  ๊ฑด์ˆ˜ (์ด 66๊ฑด)


1. ์‹ ๊ณ ๋ฅผ ํ•˜๋ฉฐ ์ œ์ผ ๋†€๋ž€ ๊ฒƒ์€ '๊ณ„์† ์‹ ๊ณ 'ํ•ด๋„ '๊ณ„์† ๋ถˆ๋ฒ•์ฃผ์ฐจ'ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

2. ์œ„ ํ‘œ๋Š” ํ•ด๋‹น ๊ธฐ๊ฐ„๋™์•ˆ ๋ถˆ๋ฒ•์ฃผ์ฐจํ•œ ์ฐจ๋“ค์˜ ์ ๋ฐœ ๊ฑด์ˆ˜์ด๋‹ค.

3. ์ด 20๋Œ€๊ฐ€ ๋ถˆ๋ฒ• ์ฃผ์ฐจํ–ˆ์œผ๋ฉฐ ํ•œ๋ฒˆ๋งŒ ๋ถˆ๋ฒ•์ฃผ์ฐจํ•œ ์ฐจ๋Ÿ‰์ด 10๋Œ€, 2๋ฒˆ์ด์ƒ ๋ถˆ๋ฒ•์ฃผ์ฐจํ•œ ์ฐจ๋Ÿ‰์ด ๋˜‘๊ฐ™์ด 10๋Œ€์ด๋‹ค.

4. ์•„์šฐ๋”” ์ฐจ๋Ÿ‰์ด 10๋ฒˆ์œผ๋กœ ๋‹จ๋…์งˆ์ฃผํ•˜๊ณ  ์žˆ๋‹ค. ํ•ด๋‹น ์ฐจ๋Ÿ‰์€ ๋ฆฌ์Šค์ฐจ๋Ÿ‰์œผ๋กœ ์ด๋ฏธ ์ˆ˜๋ฐฑ๋งŒ์›์˜ ๊ณผํƒœ๋ฃŒ๊ฐ€ ๋ถ€๊ณผ๋˜์—ˆ๋Š”๋ฐ ํ˜„์žฌ ์—ฐ๋ฝ์ด ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ ์˜คํ”ผ์Šคํ…”์—๋Š” ์ •๊ธฐ์ ์œผ๋กœ ๊พธ์ค€ํžˆ ์žฅ์• ์ธ ๊ตฌ์—ญ ๋ถˆ๋ฒ•์ฃผ์ฐจํ•˜๊ณ  ์žˆ๋‹ค.

5. ์œ„ ํ‘œ์—์„œ ๋ฐ”์ดํฌ๋Š” ๋” ์ด์ƒ ๋ถˆ๋ฒ•์ฃผ์ฐจํ•˜์ง€ ์•Š๋Š”๋‹ค.

6. ๋‚˜๋จธ์ง€ n๋ฒˆ์˜ ๋ถˆ๋ฒ• ์ „๊ณผ ์ฐจ๋Ÿ‰๋“ค์€ ์ง€๊ธˆ๋„ ์„ฑ์‹คํžˆ ๋ถˆ๋ฒ•์ฃผ์ฐจ์ค‘์ด๋‹ค.


> ๋ธŒ๋žœ๋“œ๋ณ„ ์ ๋ฐœ ๊ฑด์ˆ˜



1. ์•„์šฐ๋””์™€ ๊ธฐ์•„๋Š” 1.2๋“ฑ ์ฐจ๋Ÿ‰์ด ๋…๋ณด์ ์œผ๋กœ ๋งŽ๊ธฐ๋„ ํ–ˆ์ง€๋งŒ ๋‹ค๋ฅธ ์ฐจ๋Ÿ‰๋“ค์˜ ๋ถˆ๋ฒ•์ฃผ์ฐจ๋„ ๋งŽ์•˜๋‹ค. (์ฒด๊ฐ์ ์œผ๋กœ๋Š” ๊ธฐ์•„๊ฐ€ 1๋“ฑ, ์•„์šฐ๋””๊ฐ€ 2๋“ฑ์ด์—ˆ๋‹ค)

2. ๊ทธ์— ๋ฐ˜ํ•ด ๋ฒค์ธ ์™€ ํ˜„๋Œ€๋Š” 3,4๋“ฑ ์ฐจ๋Ÿ‰์„ ์ œ์™ธํ•˜๊ณ  ๊ฑฐ์˜ ๋ถˆ๋ฒ•์ฃผ์ฐจ๊ฐ€ ์—†์—ˆ๋‹ค.



> ์š”์ผ๋ณ„ ์ ๋ฐœ ๊ฑด์ˆ˜


1. ์—ญ์‹œ ๊ธˆ์š”์ผ ๋ฐค์— ๋ถˆ๋ฒ•์ฃผ์ฐจ๊ฐ€ ์ œ์ผ๋งŽ์•˜๊ณ (์œ„์—์„œ ์ด๋ฏธ ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ ์ƒˆ๋ฒฝ์— ์ฐ์–ด ๋‚ ์งœ๊ฐ€ ํ•˜๋ฃจ์”ฉ ๋ฐ€๋ ธ๋‹ค) ๋‹ค์Œ์ด ํ† ์š”์ผ ๋ฐค ๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ์ด ์ผ์š”์ผ ๋ฐค ์ˆœ์ด๋‹ค.


> ๊ฒฐ๋ก 

1. ์ผ๋‹จ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์—‘์…€๋กœ ์ •๋ฆฌํ–ˆ๋‹ค.

2. ์ด ์˜คํ”ผ์Šคํ…”์— ์–ผ๋งˆ๋‚˜ ์žˆ์„์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์žˆ๋Š” ๋™์•ˆ์€ ๊ณ„์† ์‹ ๊ณ ํ•  ์ƒ๊ฐ์ด๋‹ค.

4. ๋ฐ์ดํ„ฐ๋งŒ ์žˆ๋‹ค๋ฉด ์‹œ๋„๋ณ„ ๋ถˆ๋ฒ•์ฃผ์ฐจ ํ˜„ํ™ฉ์ด๋‚˜ ๊ธฐ๊ฐ„๋ณ„ ์ถ”์ด๊ฐ™์€ ๊ฑธ ์‹œ๊ฐํ™”ํ•˜๊ฑฐ๋‚˜ ๋งŒ๋“ค์–ด๋ณด๊ณ  ์‹ถ์€๋ฐ,

4. ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋‹ค ใ…‹

5. ๋.

2008์„œ๋ฒ„์—์„œ IIS๋„ ์ž˜ ์„ค์น˜ ํ•˜์…จ๋‹ค๋ฉด ํ•ด๋‹น ํฌํŠธ๋„ ์—ด์–ด์ค˜์•ผ ์ ‘์†์ด ๊ฐ€๋Šฅํ•˜๋‹ค. (๋ฐฉํ™”๋ฒฝ์„ ์—ด์–ด์ค˜์•ผ ํ•œ๋‹ค.)

1. ์ œ์–ดํŒ -> ์‹œ์Šคํ…œ ๋ฐ ๋ณด์•ˆ-> Windows ๋ฐฉํ™”๋ฒฝ์„ ํด๋ฆญํ•˜๋ฉด ์˜ค๋ฅธ์ชฝ์— ๊ณ ๊ธ‰์„ค์ • ๋ฒ„ํŠผ์ด ์žˆ๋‹ค. ํด๋ฆญ!


2. ๊ณ ๊ธ‰ ๋ณด์•ˆ์ด ํฌํ•จ๋œ Widows ๋ฐฉํ™”๋ฒฝ ์ฐฝ์ด ๋‚˜์˜จ๋‹ค. 

    ์—ฌ๊ธฐ์„œ ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™, ์•„์›ƒ๋ฐ”์šด๋“œ ๊ทœ์น™์„ ๋ชจ๋‘ ์—ด์–ด์ค˜์•ผ ํ•œ๋‹ค. 
    ๋“ค์–ด์˜ค๋Š” ํฌํŠธ , ๋‚˜๊ฐ€๋Š” ํฌํŠธ๋ฅผ ์—ด์–ด์ค€๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.


3. ์ธ๋ฐ”์šด๋“œ๊ทœ์น™์—์„œ์˜ ํฌํŠธ๋ฅผ ์—ด์–ด์ฃผ๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด๊ฒ ๋‹ค.

    ์ธ๋ฐ”์šด๋“œ๊ทœ์น™์„ ํด๋ฆญํ•˜๋ฉด ์˜ค๋ฅธ์ชฝ์— ์ž‘์—… ๋ถ€๋ถ„์˜ "์ƒˆ ๊ทœ์น™..." ์š”๋†ˆ์„ ํด๋ฆญํ•œ๋‹ค.

 


 4. ์ƒˆ ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™ ๋งˆ๋ฒ•์‚ฌ ์ฐฝ์ด ๋œฌ๋‹ค. ๋‹จ๊ณ„๋ณ„๋กœ ์ง„ํ–‰์ด ๋œ๋‹ค.

    ๋จผ์ € ์šฐ๋ฆฌ๊ฐ€ ํ—ˆ์šฉํ•  ๊ฒƒ์€ ํฌํŠธ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‘๋ฒˆ์งธ ํฌํŠธ๋ฅผ ์„ ํƒํ•ด์ฃผ๊ณ  ๋‹ค์Œ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์ค€๋‹ค.


5. ๋‘๋ฒˆ์งธ ํ”„๋กœํ† ์ฝœ ๋ฐ ํฌํŠธ ๋ถ€๋ถ„์ด๋‹ค.

    ํฌํŠธ์˜ ์„ค์ • ๋ถ€๋ถ„์œผ๋กœ ๋‚˜์˜ ๊ฒฝ์šฐ Tomcat ํฌํŠธ๋ฅผ ์—ด์–ด์ฃผ๋Š” ๊ฒƒ์œผ๋กœ ์†์„ฑ์ด TCP์ด๋‹ค.
    ํŠน์ • ๋กœ์ปฌ ํฌํŠธ๋Š” ๋‚˜์˜ ๊ฒฝ์šฐ 9001 ๋กœ ์„ธํŒ…ํ•˜์—ฌ ๋‹ค์Œ์„ ํด๋ฆญํ•œ๋‹ค.
    (ํฌํŠธ์˜ ๊ฒฝ์šฐ Tomcat ์— ์„ค์ •ํ•œ๊ฒƒ์„ ์ ์–ด์ฃผ์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค. - ์„ค์ •์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.)


6. ์„ธ๋ฒˆ์งธ ์ž‘์—… ๋ถ€๋ถ„์ด๋‹ค. ์ฒซ๋ฒˆ์งธ ์—ฐ๊ฒฐ ํ—ˆ์šฉ์„ ์„ ํƒํ•˜๊ณ  ๋‹ค์Œ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์ค€๋‹ค.


7. ๋„ค๋ฒˆ์งธ ํ”„๋กœํ•„์ด๋‹ค. ๋‚˜์˜ ๊ฒฝ์šฐ ๋ชจ๋‘ ํด๋ฆญํ•˜๊ณ  ๋‹ค์Œ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์คฌ๋‹ค.(์—ฐ๊ฒฐ๋œ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)


8.๋งˆ์ง€๋ง‰ ์ด๋ฆ„. ์—ฌ๊ธฐ์„œ์˜ ์ด๋ฆ„์€ ์ฒ˜์Œ์— ๋ณด์•˜๋˜ ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™๋‚ด์—์„œ์˜ ๋ณผ์ˆ˜ ์žˆ๋˜ ๋ฆฌ์ŠคํŠธ์˜ ์ด๋ฆ„์ด๋‹ค. 

  ์•„๋ฌด๊ฑฐ๋‚˜ ์ ์–ด๋„ ์ƒ๊ด€ ์—†์ง€๋งŒ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๊ธฐ ์œ„ํ•ด Tomcat-9001 ๋กœ ์ ์–ด ์ฃผ์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งˆ์นจ.




 9. ์ด์ œ ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™ ๋ฆฌ์ŠคํŠธ์— ๋ฐฉ๊ธˆ์ „ ์ž‘์„ฑํ•œ ํฌํŠธ๊ฐ€ ์—ด๋ ค ์žˆ๋Š”๊ฒƒ์„ ๋ณผ์ˆ˜ ์žˆ๋‹ค.

 
10. ์•„์›ƒ๋ฐ”์šด๋“œ ๊ทœ์น™๋„ ๋˜‘๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ํฌํŠธ๋ฅผ ์—ด์–ด์ฃผ๋ฉด ๋ฐฉํ™”๋ฒฝ์—์„œ์˜ ์„ค์ •์€ ๋์ด ๋‚œ๋‹ค. 


โ— ๋ถ„๋ฅ˜๊ธฐ์˜ ํŠœ๋‹


> ๋“ค์–ด๊ฐ€๋Š” ๋ง

1. ์—„์ฒญ๋‚˜๊ฒŒ ๊ณ ์ƒํ–ˆ๋‹ค.

2. ์œˆ๋„์šฐ์—์„œ ๋ณ‘๋ ฌ ์ปดํ“จํŒ…์„ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฉ”์ธ๋ฃจํ”„๋ฅผ  "if __name__ == '__main__'"๋กœ ๊ฐ์‹ธ์•ผ ํ•œ๋‹ค. sklearn์˜ joblib ๋ชจ๋“ˆ ๋ฌธ์„œ๋ฅผ ์‚ดํŽด๋ณด๋ผ๋Š”๋ฐ ๋ด๋„ ๋ณ„๊ฑฐ ์—†๋‹ค. ์ด์   ์—๋Ÿฌ ๋ฉ”์„ธ์ง€๊นŒ์ง€ ๋‚˜ํ•œํ…Œ ๋ปฅ์„ ์นœ๋‹คใ…ก,ใ…ก ์–ด์จŒ๋“  ๊ฐ์‹ธ๊ณ  ๋‚˜๋‹ˆ ๊ทธ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€๋Š” ์—†์–ด์กŒ๋‹ค.

3. ๋งฅ์—์„œ๋Š” ๊ทธ๋ƒฅ ๋œ๋‹ค๊ณ  ํ•œ๋‹ค. 


> ์‹คํ–‰

1. MultinomialNB()์™€ SGDClassifier()์˜ ์ตœ์  ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ฐพ์•„๋ดค๋‹ค.

2. ์ด๊ฒƒ๋„ ์—„์ฒญ ๊ณ ์ƒํ–ˆ๋‹ค.

3. pipeline๊ณผ parameters๋“ค์„ set๊ณผ dictionary๋กœ ๋งŒ๋“ค์–ด ๋†“๋Š”๊ฒŒ ํ•ต์‹ฌ์ด๋‹ค.

4. ์ตœ์  ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ธก์ •ํ•  ๋ถ„๋ฅ˜๊ธฐ๋ฅผ MultinomialNB()๋‚˜ SGDClassifier() ๋‘˜ ์ค‘์— ์„ ํƒํ•œ๋‹ค.( KFold๋กœ ๊ต์ฐจ๊ฒ€์ฆ๋„ ํ•  ์ˆ˜ ์žˆ๋”๋ผ)




5. ๊ฐ๊ฐ์˜ parameters๊ฐ€ ๋‹ค๋ฅด๋ฏ€๋กœ ์ตœ์ ํ™”๋ฅผ ์ง„ํ–‰ํ•  ์ธ์ž๋ฅผ ๋„ฃ๋Š” ๊ฒƒ๋„ ๋‹ฌ๋ผ์ ธ์•ผ ํ•œ๋‹ค.


6. naive_bayes.py์˜ 664์ค„ np.log(smoothed_fc)์˜ smoothed_fc ๊ฐ’์— 0์ด ๋“ค์–ด๊ฐ€์„œ ๊ณ„์† ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค.

stackoverflow๋ฅผ ๋’ค์ ธ๋„ ๋”ฑํžˆ ์ด๊ฑฐ๋‹คํ•˜๋Š”๊ฒŒ ์—†์–ด ๋•œ๋นต์œผ๋กœ np.log(smoothed_fc +0.000000001) ์ด๋ ‡๊ฒŒ ๋„ฃ์—ˆ๋‹ค.

smoothed_fc ์ด ๋ฌด์—‡์ธ์ง€ ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๊ณ  ๋•œ๋นต์ฒ˜๋ฆฌํ•˜๋‹ˆ ๊ต‰์žฅํžˆ ์ฐ์ฐํ•˜๋‹ค. ํŒฌํ‹ฐ๋ฅผ ์ž…๊ณ  ๋˜ฅ์„ ์‹ผ ํ›„์— 2์‹œ๊ฐ„ ์•‰์•„ ์žˆ๋Š” ๊ธฐ๋ถ„์ด๋‹ค.


7. ์–ด์จŒ๋“  ๋ถ„๋ฅ˜๊ธฐ ๋ณ„๋กœ ๋ชจ๋‘ ์ตœ์ ํ™” ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ฐพ์•˜๋‹ค. ๊ฒฐ๊ณผ๋Š” ๋Œ€๋žต ์•„๋ž˜์™€ ๊ฐ™๋‹ค. weighted๊ฐ€ ๋ญ”์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์ด์ œ ์•ˆ์“ฐ๋Š”๋ฐ ํ˜ธ์ถœํ•˜๋‹ˆ ๋œจ๋Š” ๊ฒฝ๊ณ ๋‹ค. ์•ž์„œ ํ•˜๋„ ๋งŽ์€ ์—๋Ÿฌ๋ฅผ ๋งŒ๋‚ฌ๋”๋‹ˆ ์ด์ œ ๊ฒฝ๊ณ  ๋”ฐ์œ„ ์‹ ๊ฒฝ๋„ ์•ˆ์“ฐ์ธ๋‹ค.

Fitting 3 folds for each of 288 candidates, totalling 864 fits

[Parallel(n_jobs=-1)]: Done  42 tasks      | elapsed:   11.8s

[Parallel(n_jobs=-1)]: Done 192 tasks      | elapsed:  1.0min

[Parallel(n_jobs=-1)]: Done 442 tasks      | elapsed:  3.0min

[Parallel(n_jobs=-1)]: Done 792 tasks      | elapsed:  6.9min

[Parallel(n_jobs=-1)]: Done 864 out of 864 | elapsed:  8.2min finished

Best score: 0.7813333333333333

Best parameter set:

        clf__alpha: 1.0

        vect__max_features: None

        vect__ngram_range: (1, 2)

        vect__norm: None

        vect__smooth_idf: True

        vect__sublinear_tf: True

        vect__use_idf: True

Accurary: 0.806

C:\Users\Alice\Anaconda3\lib\site-packages\sklearn\metrics\classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring="f1_weighted" instead of scoring="f1".

  sample_weight=sample_weight)

Precision: 0.8136573785950023

C:\Users\Alice\Anaconda3\lib\site-packages\sklearn\metrics\classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring="f1_weighted" instead of scoring="f1".

  sample_weight=sample_weight)

Recall: 0.806

์œ„์—์„œ ๊ตฌํ•œ ์ตœ์ ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ด์šฉํ•ด ์•ž์œผ๋กœ ๋ถ„๋ฅ˜๊ธฐ๋ฅผ ์‚ฌ์šฉํ• ๋•Œ ๊ทธ์™€๊ฐ™์ด ์„ธํŒ…ํ•ด์ฃผ๋ฉด ๋˜๋Š”๊ฑฐ๋‹ค. ๋ญ ๊ทน์ ์œผ๋กœ ์ •ํ™•๋„๊ฐ€ ์˜ฌ๋ผ๊ฐ€๊ณ  ๊ทธ๋Ÿฐ๊ฑด ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค. ์ข€ ๋” (๋งŽ์€) ๊ณต๋ถ€๊ฐ€ ํ•„์š”ํ•ด๋ณด์ธ๋‹ค.



> ๋ฐ˜์„ฑ

1. ์ตœ๊ทผ์— ๋Š๋ผ๋Š” ์ ์ธ๋ฐ, ๋ฐ์ดํ„ฐ ๋ถ„์„์ด๋‚˜ ๊ณผํ•™ ๋˜๋Š” ์ธ๊ณต์ง€๋Šฅ๊ฐ™์€ ์‚ฌ์ „ ์ง€์‹ ์—†์ด ๊ทธ๋ƒฅ ์ด๋ ‡๊ฒŒ ๋ฐ”๋‹ฅ์„ ํŒŒ๋Š”๊ฒŒ ๋งž๋Š” ๊ฑด๊ฐ€ ์‹ถ๋‹ค. ์†”์งํžˆ ์–ด๋ ต์ง€๋Š” ์•Š๋‹ค. ํŒŒ๊ณ  ๋“ค์–ด๊ฐ€๋Š” ๋งŒํผ ์ดํ•ด๋„๊ฐ€ ๋†’์•„์ง€๋Š” ๊ฒƒ๋„ ์ •์งํ•˜๋‹ค. ์ผ๋‹จ์€ ์ด๋ ‡๊ฒŒ ๊ฐ•์‚ฌ๋‹˜์ด ๋‚ด๋ ค์ค€ '๋™์•„์ค„'์„ ๋ถ€์—ฌ์žก๊ณ  ์—ด์‹ฌํžˆ ๋”ฐ๋ผ๊ฐ€๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ด๊ณ  ์ข‹์€ ๊ฒƒ ๊ฐ™๋‹ค. ๋‹ค์Œ ์—ฌ์œ ๊ฐ€ ์žˆ์„ ๋•Œ ๊ด€๋ จ ์ฑ…๋“ค์„ ์ฝ์–ด์„œ ๊ธฐ๋ณธ๊ธฐ๋ฅผ ๋‹ฆ์•„์•ผ๊ฒ ๋‹ค. 


2. ์‹œ๊ฐ„๋‚ ๋•Œ๋งˆ๋‹ค ์ด๋ ‡๊ฒŒ ํ•ด๋„ ๊ฐ™์ด ์ˆ˜์—…์„ ๋“ฃ๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ์ ˆ๋ฐ˜๋„ ๋ชป๋”ฐ๋ผ๊ฐ€๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์ˆ˜์—… ์ค‘ ๋‚ด๊ฐ€ ํ•˜๋Š” ์งˆ๋ฌธ์€ ๊ฐ•์‚ฌ๋‹˜์˜ ๋‹ต๋ณ€์„ ๋“ฃ๊ณ ๋‚˜๋ฉด ๋‚ด๊ฐ€ ์ƒ๊ฐํ•ด๋„ ๋ถ€๋„๋Ÿฝ๊ธฐ ๊ทธ์ง€ ์—†๋Š”๋ฐ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ํ•˜๋Š” ์งˆ๋ฌธ์€ ์ผ๋‹จ ๋ฌด์Šจ ์งˆ๋ฌธ์ธ์ง€ ์ดํ•ด๊ฐ€ ๊ฐ€์ง€ ์•Š์•„ ๋ญ๋ผ ๋ง์„ ํ• ์ˆ˜๋„ ์—†๋‹คใ…ก,ใ…ก


3. ๊ทธ๋Ÿด ๋•Œ๋งˆ๋‹ค ๋‚˜๋Š” ์žฌ๋ฏธ๋กœ ๋ฐฐ์šฐ๋Š” ๊ฑฐ๋‹ˆ๊นŒ. ๊ทธ๋Ÿด ์ˆ˜๋„ ์žˆ์ง€ ํ•˜๋Š” '๋น„๊ฒํ•œ' ๋ณ€๋ช…์— ๋น ์ง„๋‹ค.

4. ํ•˜์ง€๋งŒ ์„ธ์ƒ์— ํ…์ŠคํŠธ ๋งˆ์ด๋‹์ด ์ ˆ์‹คํ•ด์„œ ๋ฐฐ์šฐ๋Š” ์‚ฌ๋žŒ์ด ๋ช‡๋ช…์ด๋‚˜ ์žˆ๊ฒ ๋Š”๊ฐ€. ์•„๋งˆ ์ € ๋ถ„๋“ค๋„ ์žฌ๋ฏธ๋กœ ๋ฐฐ์šฐ๋Š” ๊ฑธ๊ฑฐ๋‹ค.

5. ๊ทธ๋ž˜๋„ ๋‹คํ–‰์ธ ๊ฒƒ์€ '๋‚˜๋Š” ๋ฌด์–ธ๊ฐ€๋ฅผ ์ฒ˜์Œ ๋ฐฐ์šธ ๋•Œ ์–ธ์ œ๋‚˜ ๋‚จ๋“ค๋ณด๋‹ค ๋ช‡๋ฐฐ๋Š” ๋ชปํ–ˆ๋‹ค'๋Š” ์‚ฌ์‹ค์ด๋‹ค. ์ด๋ฒˆ์—๋„ ๋ณ€ํ•จ์ด ์—†๋Š” ๊ฒƒ ๋ฟ์ด๋‹ค.

6. ์™œ ์ž๊พธ ๋ˆ™๋ฌผ์ด ๋‚˜์ง€ ใ… ใ… 

โ— ํ•™์Šต ๋ชจ๋ธ ์ €์žฅ ๋ฐ ์ฝ์–ด์˜ค๊ธฐ


> ๋“ค์–ด๊ฐ€๋Š” ๋ง

ํ…Œ์ŠคํŠธ๋ฅผ ํ• ๋•Œ๋งˆ๋‹ค ๋งค๋ฒˆ ํ•™์Šต์„ ์‹œํ‚ฌ ์ˆ˜ ์—†์œผ๋‹ˆ ์ €์žฅํ•˜๋Š” ๊ฑด ๋‹น์—ฐํ•˜๋‹ค.

1. ํ•™์Šต ๋ชจ๋ธ์„ ์ €์žฅ ๋ฐฉ์‹์—๋Š” (ํ˜„์žฌ ๋‚ด๊ฐ€ ์•Œ๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ๋”ฑ) 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

2. pickle๋ชจ๋“ˆ๋กœ ์ง๋ ฌํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ•˜๋‚˜๊ณ 

3. skilearn.externals์˜ joblib๋ชจ๋“ˆ์ด ๋‹ค๋ฅธ ํ•˜๋‚˜๋‹ค.


> ๊ณผ์ •

1. pickle์ด ๊ฐ€์žฅ ๋ณดํŽธ์ ์ด๋ผ๊ณ  ํ•ด์„œ ์‚ฌ์šฉํ•ด ๋ณด๋‹ˆ ํŒŒ์ผ ์šฉ๋Ÿ‰์ด 42.5MB๊ฐ€ ๋‚˜์™”๋‹ค.

2. joblib๋กœ compress=9๋กœ ํ•ด์„œ ์ €์žฅํ•ด ๋ณด๋‹ˆ ํŒŒ์ผ ์šฉ๋Ÿ‰์ด 9.5MB๊ฐ€ ๋‚˜์™”๋‹ค.

3. ์†๋„๋Š” ๋‘˜๋‹ค ๋น„์Šท.

4. ํ•™์Šต ๋‚ด์šฉ์„ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ์ €์žฅํ•ด ๋†จ๋‹ค๊ฐ€ ๋‹ค์‹œ ๋กœ๋“œํ•ด์„œ ์“ฐ๋Š” ๋ฐฉ์‹์ด๋‹ค.

5. ์ง€๊ธˆ๊นŒ์ง€๋Š” ํ™•์‹คํ•˜๊ฒŒ joblib์˜ ์Šน๋ฆฌ๋‹ค.


> ์‹คํ–‰

1. GridSearchCV()๋ฅผ ๋Œ๋ ค ์ตœ์ ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์„ ์ฐพ์•„๋ดค๋‹ค.

Fitting 3 folds for each of 288 candidates, totalling 864 fits

[Parallel(n_jobs=-1)]: Done  42 tasks      | elapsed:   24.0s

[Parallel(n_jobs=-1)]: Done 192 tasks      | elapsed:  2.5min

[Parallel(n_jobs=-1)]: Done 442 tasks      | elapsed:  6.5min

[Parallel(n_jobs=-1)]: Done 792 tasks      | elapsed: 11.5min

[Parallel(n_jobs=-1)]: Done 864 out of 864 | elapsed: 13.4min finished

Best score: 0.60695468914647

Best parameter set:

        clf__alpha: 1.0

        vect__max_features: None

        vect__ngram_range: (1, 2)

        vect__norm: None

        vect__smooth_idf: False

        vect__sublinear_tf: True

        vect__use_idf: True

์ด๊ฒƒ์„ ๋ฐ”ํƒ•์œผ๋กœ MultinomialNB() ํด๋ž˜์Šค๋ฅผ ๋Œ๋ ค์„œ ๋‚˜์˜จ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค. ๋ช‡๋ฒˆ ๋Œ๋ ค๋ด๋„ ๊ทธ๋‹ค์ง€ ์ข‹์•„์ง„๊ฑธ ๋ชจ๋ฅด๊ฒ ๋‹ค ใ…ก,ใ…ก

์ตœ์ ํ™”๋Š” ์ข€ ๋” ๊ณต๋ถ€ํ•˜๊ณ  ์ €์žฅ๊ณผ ๋กœ๋“œ๋งŒ ์ˆ™๋‹ฌ์‹œ์ผœ์•ผ๊ฒ ๋‹ค.




2. SGDClassifier()ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด ํ•™์Šต์‹œํ‚จ ํ›„ ์ €์žฅ ๋ฐ ๋กœ๋“œ๋„ ํ•ด๋ดค๋‹ค. ์—ญ์‹œ ์ข‹๋‹ค. MultinomialNB() ์•„๋ฌด๋ฆฌ ์ตœ์ ํ™” ์‹œ์ผœ๋ดค์ž SGDClassifier() ์ƒˆ๋ฐœ์˜ ํ”ผ๋‹ค.





+ Recent posts