JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique
Transcript of JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique
![Page 1: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/1.jpg)
![Page 2: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/2.jpg)
JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique
Copyright โ 2015 KUJIRA HAND
Korean translation copyright โ 2017 J-PUB
Original Japanese language edition published by Socym Co., Ltd.
Korean translation rights arranged with Socym Co., Ltd. through Danny Hong Agency.
์ด ์ฑ ์ ํ๊ตญ์ดํ ์ ์๊ถ์ ๋๋ํ ์์ด์ ์๋ฅผ ํตํ ์ ์๊ถ์ฌ์์ ๋ ์ ๊ณ์ฝ์ผ๋ก ์ ์ดํ์ ์์ต๋๋ค.
์ ์๊ถ๋ฒ์ ์ํด ํ๊ตญ ๋ด์์ ๋ณดํธ๋ฅผ ๋ฐ๋ ์ ์๋ฌผ์ด๋ฏ๋ก ๋ฌด๋จ ์ ์ฌ์ ๋ฌด๋จ ๋ณต์ ๋ฅผ ๊ธํฉ๋๋ค.
์ดํ 1์ ๋ฐํ 2016๋ 12์ 30์ผ
์ง์์ด ์ฟ ์ง๋ผ ํ์ฝ์ฐ์ฆ์ฟ ์
์ฎ๊ธด์ด ์ด๋๊ท
ํด๋ธ์ด ์ฅ์ฑ๋
ํด๋ธ๊ณณ ์ ์ดํ
์ถํ์ ๊ณ 2009๋ 11์ 10์ผ ์ 406-2009-000087ํธ์ฃผ์ ๊ฒฝ๊ธฐ๋ ํ์ฃผ์ ํ๋๊ธธ 159 3์ธต 3โBํธ
์ ํ 070โ8201โ9010 / ํฉ์ค 02โ6280โ0405ํํ์ด์ง www.jpub.kr / ์๊ณ ํฌ๊ณ [email protected]๋ ์๋ฌธ์ [email protected] / ๊ต์ฌ๋ฌธ์ [email protected]ํธ์ง๋ถ ์ด๋ฏผ์, ํฉํ๋, ์ด ์ฌ, ์ด์ฃผ์ / ์ํตยท๊ธฐํํ ๋ฏผ์งํ, ํ์งํ
๋ณธ๋ฌธ๋์์ธ ๋ถ์์ด / ํ์ง๋์์ธ ๋ฏธ๋์ดํฝ์ค
์ฉ์ง ์์ค์์ด์นํ์ดํผ / ์ธ์ ํ์น์ธ์์ฌ / ์ ๋ณธ ๊ด์ฐ์ ์ฑ ์ฌ
ISBN 979-11-85890-66-1 (93000)๊ฐ 30,000์
โป ์ด ์ฑ ์ ์ ์๊ถ๋ฒ์ ๋ฐ๋ผ ๋ณดํธ๋ฅผ ๋ฐ๋ ์ ์๋ฌผ์ด๋ฏ๋ก ๋ฌด๋จ ์ ์ฌ์ ๋ฌด๋จ ๋ณต์ ๋ฅผ ๊ธ์งํ๋ฉฐ, ์ด ์ฑ ๋ด์ฉ์ ์ ๋ถ ๋๋ ์ผ๋ถ
๋ฅผ ์ด์ฉํ๋ ค๋ฉด ๋ฐ๋์ ์ ์๊ถ์์ ์ ์ดํ์ ์๋ฉด ๋์๋ฅผ ๋ฐ์์ผ ํฉ๋๋ค.
โป ์๋ชป๋ ์ฑ ์ ๊ตฌ์ ํ์ ์์ ์์ ๋ฐ๊พธ์ด ๋๋ฆฝ๋๋ค.
์ ์ดํ์ ๋ ์ ์ฌ๋ฌ๋ถ์ ์ฑ ์ ๊ดํ ์์ด๋์ด์ ์๊ณ ํฌ๊ณ ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค. ์ฑ ์ผ๋ก ํด๋ด๊ณ ์ ํ๋ ์์ด๋์ด๋ ์๊ณ ๊ฐ ์์ผ์ ๋ถ๊ป์
๋ ์ฑ ์ ๋ํ ๊ฐ๋จํ ๊ฐ์์ ์ฐจ๋ก, ๊ตฌ์ฑ๊ณผ ์ (์ญ)์ ์ฝ๋ ฅ ๋ฑ์ ๋ฉ์ผ๋ก ๋ณด๋ด ์ฃผ์ธ์. [email protected]
![Page 3: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/3.jpg)
![Page 4: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/4.jpg)
โป ๋๋ฆฌ๋ ๋ง์
โข ์ด ์ฑ ์ ๊ธฐ์ฌ๋ ๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ํ ์ด์ฉ ๊ฒฐ๊ณผ์ ๋ํด ์ ์, ์ญ์, ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๋ฐ ์ ๊ณต์, ์ ์ดํ
์ถํ์ฌ๋ ์ผ์ฒด์ ์ฑ ์์ ์ง์ง ์์ผ๋ฏ๋ก ์ํด ๋ฐ๋๋๋ค.
โข ์ด ์ฑ ์ ๋ฑ์ฅํ๋ ๊ฐ ํ์ฌ๋ช , ์ ํ๋ช ์ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ ํ์ฌ์ ๋ฑ๋ก ์ํ ๋๋ ์ํ์ ๋๋ค. ๋ณธ๋ฌธ ์ค์๋ TM, โธ, โ ๋งํฌ ๋ฑ์ด ํ์๋์ด ์์ง ์์ต๋๋ค.
โข ์ด ์ฑ ์์ ์ฌ์ฉํ๊ณ ์๋ ์ ํ ๋ฒ์ ์ ๋ ์์ ํ์ต ์์ ์ด๋ ํ๊ฒฝ์ ๋ฐ๋ผ ์ฑ ์ ๋ด์ฉ๊ณผ ๋ค๋ฅผ ์ ์์ต๋๋ค.
โข ๋ณธ๋ฌธ ์ค ์ผ๋ณธ ๋ด์ ์ค์ ์๋ง ๊ตญํ๋์ด ์๋ ๋ด์ฉ์ด๋ ๊ทธ๋ฆผ์ ์ผ๋ถ๋ฅผ ์ญ์ ํ๊ฑฐ๋ ๊ตญ๋ด ์ค์ ์ ๋ง๋๋ก
๋ณ๊ฒฝํ์์ผ๋ ์ฐธ๊ณ ๋ฐ๋๋๋ค.
โข ์ฑ ๋ด์ฉ๊ณผ ๊ด๋ จ๋ ๋ฌธ์์ฌํญ์ ์ฎ๊ธด์ด๋ ์ถํ์ฌ๋ก ์ฐ๋ฝํด ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
- ์ฎ๊ธด์ด: [email protected]
- ์ถํ์ฌ: [email protected]
![Page 5: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/5.jpg)
์ฎ๊ธด์ด ๋จธ๋ฆฌ๋ง xvi
๋จธ๋ฆฌ๋ง xviii
์ด ์ฑ ์ ์ฌ์ฉ ๋ฐฉ๋ฒ xix
๋ฒ ํ๋ฆฌ๋ ํ๊ธฐ xx
๊ฐ๋ฐ ํ๊ฒฝ 1
01 ์๋ฐ์คํฌ๋ฆฝํธ์์ง์์ด๋ชจ์ ๋ชจ _ 2
ECMAScript๊ฐ ์คํํ ๋ฒ์ฉ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ธ๊ณ _ 2์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ด๋ชจ์ ๋ชจ _ 3
์น ๋ธ๋ผ์ฐ์ ์์์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง _ 4 ๊ณ ์ ์์ง์์ ํ์ํ Node.js _ 4 ์๋ฐ์ ํ๋ถํ ์์ฐ
์ ์ด์ฉํ ์ ์๋ Rhino์ Nashorn _ 5 ์๋์ฐ์ ํ์ค์ผ๋ก ํ์ฌ๋ ์ ์ด์คํฌ๋ฆฝํธ _ 6
์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋ฐ์ดํฐ ์์ง์ ์ ํฉํ ์ด์ _ 6๋ฐฐ์ฐ๊ธฐ ์ฝ๋ค _ 6 ๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ค๋น๋์ด ์๋ค _ 7 ์ ์ฐ์ฑ์ด ๋์ ์ฝ๋๋ฅผ ๋น ๋ฅด๊ฒ ์์ฑํ
์ ์๋ค _ 7
02์์ด์ ํธ๋๋ฌด์์ธ๊ฐ? _ 8
์์ด์ ํธ์ ์๋ฏธ _ 8์ง๋ฅํ ์์ด์ ํธ _ 9
๋ฐ์ด์ด ์์ด์ ํธ _ 9 ์ฌ์ฉ์ ์์ด์ ํธ _ 9 ๊ฐ์ ์์ด์ ํธ _ 10 ๋ฐ์ดํฐ ๋ง์ด๋ ์์ด์ ํธ _ 10
03 ๊ฐ๋ฐํ๊ฒฝ๊ตฌ์ถ _ 11
๊ฐ์ ๋จธ์ ์ ์คํ ํ๊ฒฝ ๊ตฌ์ถ _ 11๊ฐ์ ๋จธ์ ์์ฑ _ 12
VirtualBox์ Vagrant ์ค์น _ 12 ๊ฐ์ ๋จธ์ ์ถ๊ฐ _ 13 ๊ฐ์ ๋จธ์ ๊ธฐ๋ _ 15 ๊ฐ์ ๋จธ์ ์ ์ด _
16
๊ฐ์ ๋จธ์ ์ ๋ก๊ทธ์ธํ๊ธฐ _ 16์๋์ฐ์์ ๊ฐ์ ๋จธ์ ์ ๋ก๊ทธ์ธํ๋ ๋ฐฉ๋ฒ _ 17
Node.js ์ค์น _ 19
1์ฅ์
์ฐจ๋ก
์ฐจ๋ก v
![Page 6: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/6.jpg)
git ์ค์น _ 21๊ฐ์ ๋จธ์ ์์ ์น ์๋ฒ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์ค์ _ 21
ํธ์คํธ ๋จธ์ ๊ณผ ๊ฐ์ ๋จธ์ ๊ฐ์ ํด๋ ๊ณต์ _ 21 ๊ฐ์ ๋จธ์ ์ ํด๋ ๊ณต์ ์ค์ ์ค ์๋ฌ๊ฐ ๋ฐ์ํ๋
๊ฒฝ์ฐ _ 22 ํธ์คํธ ๋จธ์ ์์ ๊ฐ๋ฐํ๊ณ ๊ฐ์ ๋จธ์ ์์ ์คํ _ 22
04 Node.js๋ชจ๋์ค์น _ 24
npm์ด๋? _ 24npm install๋ก ๋ชจ๋ ์ค์น _ 24
๋ชจ๋์ด ์ค์น๋๋ ๊ฒฝ๋ก _ 25 ๊ธ๋ก๋ฒ ์ค์น -g _ 26 ๊ธ๋ก๋ฒ ์ค์น ์ PATH์ ์ฃผ์ _ 27 CentOS์
nano ์๋ํฐ ์ค์น _ 29
๋ชจ๋ ์ญ์ _ 30
05 ๊ฐ๋ฐ์์ฐ์ฑ์๋์ฌ์ค๋ชจ๋ํ์๋ํฐ์๊ฐ _ 31
์๋ฐ์คํฌ๋ฆฝํธ ์์ฑ์ ํ์ํ ์๋ํฐ๋? _ 31Atom โ ํ๋ถํ ํ๋ฌ๊ทธ์ธ์ด ๋งค๋ ฅ _ 32
Atom์ ํ๋ฌ๊ทธ์ธ ์ถ๊ฐ _ 33
Sublime Text โ ํ์์ ์ธ ์ปค์คํฐ๋ง์ด์ง ๊ธฐ๋ฅ์ผ๋ก ์ฌ๋์ ๋น ์ง๊ฒ ๋๋ค๋ ํ์
์ ์๋ํฐ _ 34Sublime Text์ ํ๋ฌ๊ทธ์ธ์ ์ถ๊ฐ _ 35
Brackets โ HTML ํธ์ง์ ํนํ๋ ๋น๋๋ ์๋ํฐ _ 36ํต ํธ์ง โ ํธ๋ฆฌํ ์ธ๋ผ์ธ ์๋ํฐ _ 37
ํตํฉ ๊ฐ๋ฐ ํ๊ฒฝ์์์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ _ 38WebStorm โ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์ ํนํ๋ ๊ฐ๋ฐ ํ๊ฒฝ _ 39NetBeans โ ์๋ฐ๋ฟ๋ง ์๋๋ผ ๋ค์ํ ์น ๊ฐ๋ฐ ์ธ์ด๋ฅผ ์ง์ _ 40
์น ๋ฐ์ดํฐ ์์ง 41
01์นํ์ด์ง๋ค์ด๋ก๋ _ 42
๊ฐ์ฅ ๊ฐ๋จํ ๋ค์ด๋ก๋ ๋ฐฉ๋ฒ _ 42Node.js๋ก ๋ค์ด๋ก๋ํด ๋ณด์ _ 42์ฝ๋ ๋ฆฌํฉํ ๋ง _ 44Rhino/Narshon์ผ๋ก ๋ค์ด๋ก๋ํด ๋ณด๊ธฐ _ 46
02HTMLํด์(๋งํฌ์์ด๋ฏธ์ง์ถ์ถ) _ 48
์คํฌ๋ํ์ด๋? _ 48cheerio-httpcli ๋ชจ๋ ์ค์น _ 48
HTML ํ์ผ ๋ค์ด๋ก๋ _ 49HTML ํ์ผ์์ ๋งํฌ ์ถ์ถ _ 51
์๋ URL์ ์ ๋ URL๋ก ๋ณ๊ฒฝ _ 53
2์ฅ์
์ฐจ๋กvi
![Page 7: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/7.jpg)
์ด๋ฏธ์ง ํ์ผ ์ถ์ถ _ 55request ๋ชจ๋ ์ฌ์ฉ _ 57 ๋งํฌ๋ ์ด๋ฏธ์ง๋ฅผ ์ ๋ถ ๋ค์ด๋ก๋ _ 58
03 ์ฌ์ดํธ๋ฅผํต์งธ๋ก๋ค์ด๋ก๋ _ 61
ํต์งธ๋ก ๋ค์ด๋ก๋ํ๋ ์ด์ _ 61๋งํฌ๋ฅผ ๋ฐ๋ผ๋ค๋๋ฉฐ ๋ค์ด๋ก๋ํ๊ธฐ _ 61
ํ๋ก๊ทธ๋จ์ ๋ง๋ค์ด ๋ณด์ _ 62์ฌ๊ท ์ฒ๋ฆฌ๋? _ 64 ์๋ ๊ฒฝ๋ก๋ฅผ ์ ๋ ๊ฒฝ๋ก๋ก ๋ณ๊ฒฝ _ 66 Node.js์ ๋๊ธฐ ํจ์์ ๋น๋๊ธฐ ํจ์ _
66
04 XML/RSSํด์ _ 69
XML์ด๋? _ 69XML์ ๊ตฌ์กฐ ํ์ธ _ 70
Node.js์์ XML์ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ _ 71์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ฒด๋ก๋ถํฐ XML์ ์์ฑํ๋ ๊ฒฝ์ฐ _ 74
RSS๋? _ 76๊ธฐ์์ฒญ์ RSS ์ฝ๊ธฐ _ 76 ์ฃผ๊ฐ๊ธฐ์์๋ณด RSS ์ทจ๋ _ 78
XML/RSS ํ์ฑ์ cheerio-httpcli๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ _ 79
05 ์ ๊ธฐ์ ์ผ๋ก๋ค์ด๋ก๋ _ 82
์ ๊ธฐ์ ์ธ ์ฒ๋ฆฌ๋ฅผ ์ํ _ 82์ ๊ธฐ์ ์ธ ์คํ์ ์ํ ํํธ _ 82
ํ์จ์ ๋ณ๋์ ํ์ธํ๋ API ์ฌ์ฉ _ 83๋ฆฌ๋ ์ค/Mac OS X์ ๊ฒฝ์ฐ _ 85
ํ์์ ๋ฐ๋ผ nano ์๋ํฐ๋ฅผ ์ค์น _ 85 cron ์ค์ ์ ์ํ crontab _ 86 ํ๊ฒฝ ๋ณ์์ ์ฃผ์ _ 87
์์ ๋๋ ํฐ๋ฆฌ์ ์ฃผ์ _ 87 crontab ๋ค์ํ ์ค์ ๋ฐฉ๋ฒ _ 88
์๋์ฐ์ ๊ฒฝ์ฐ _ 90์ ๊ท ์์ ๋ง๋ค๊ธฐ _ 91
๋ก๊ทธ์ธ์ด ํ์ํ ์น์ฌ์ดํธ ํฌ๋กค๋ง 95
01 PhantomJS์CasperJS _ 96
PhantomJS์ CasperJS์ ๊ดํ์ฌ _ 96PhantomJS์ ๊ดํ์ฌ _ 97 CasperJS์ ๊ดํ์ฌ _ 97
PhantomJS์ CasperJS ์ค์น _ 98์์ ํ๋ก๊ทธ๋จ์ด ๋์ํ์ง ์๋ ๊ฒฝ์ฐ _ 99
๊ฐ๋จํ ์์ ํ๋ก๊ทธ๋จ _ 99ํ๋ฉด ์บก์ฒ ํ๋ก๊ทธ๋จ _ 101
3์ฅ์
์ฐจ๋ก vii
![Page 8: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/8.jpg)
ํ๋ฆฌ์ปค ์ด๋ฏธ์ง ๊ฒ์ ๊ฒฐ๊ณผ ์บก์ฒํ๊ธฐ _ 103CasperJS์ ํ๋ฆ _ 104
์์ดํฐ์ฉ ์น์ฌ์ดํธ ํ๋ฉด ์บก์ฒ _ 105์ธ์๋ก ์ง์ ํ ํ์ด์ง๋ฅผ ์บก์ฒํ๋ ๋๊ตฌ ์์ฑ _ 106
02 ๋ก๊ทธ์ธํ์๋ฐ์ดํฐ๋ฅผ๋ค์ด๋ก๋ _ 109
๋ก๊ทธ์ธ์ด ํ์ํ ๊ฒฝ์ฐ _ 109ํฐ์คํ ๋ฆฌ์ ๋ก๊ทธ์ธํ๊ธฐ _ 109๋ง์ฐ์ค ํด๋ฆญ _ 113
03 DOMํ์ฑ๋ฐฉ๋ฒ๊ณผCSS์ ํ์ _ 115
์น ๋ธ๋ผ์ฐ์ ์ ๊ฐ๋ฐ์ ๋๊ตฌ ์ฌ์ฉ๋ฒ _ 115CSS ์ ํ์ ์ฟผ๋ฆฌ _ 116
CSS ์ ํ์ ์ง์ ๋ฐฉ๋ฒ _ 118CSS ์ ํ์ ์ค์ ํธ _ 120
CSS ์ ํ์ ํด์ฆ _ 121
04 Electron์ผ๋ก๋ฐ์คํฌํฑ์ ํ๋ฆฌ์ผ์ด์ ์์ฑ _ 124
Electron์ด๋? _ 124์ ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ NW.js _ 125 Electron์ ์ฅ์ ๊ณผ ๋จ์ _ 126 ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ ๋๋ง๋๋ ํ์ด
์ง๋ OK _ 126
Electron ์ค์น ๋ฐฉ๋ฒ _ 127Electron์ผ๋ก ๊ฐ๋จํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋๋ ์์ _ 127
์์ 1: ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ํ ํ์ผ ์ค๋น _ 127 ์์ 2: Electron์ ํ๋ผ๋ฏธํฐ์ ํจ๊ป ์คํ _ 128
์ง์ ์ค๋นํ HTML์ Electron์ ํ์ _ 130๋ฉ์ธ ํ๋ก์ธ์ค์ ๋ ๋๋ง ํ๋ก์ธ์ค ๊ฐ์ ํต์ _ 132
๋๊ธฐ์ ์ธ IPC ํต์ _ 133 ๋น๋๊ธฐ์ ์ธ IPC ํต์ _ 134 IPC ํต์ ์ ์ํํ๋ ์ค์ ํ๋ก๊ทธ๋จ _
135
05 Electron์ผ๋ก์คํฌ๋ฆฐ์บก์ฒ _ 138
์คํฌ๋ฆฐ์ท์ ์ฐ๋ ์ ์ผ ๋น ๋ฅธ ๋ฐฉ๋ฒ _ 138Electron์ผ๋ก ์คํฌ๋ฆฐ์ท์ ์ฐ๋ ๋ฐฉ๋ฒ _ 138
์คํฌ๋ฆฐ์ท์ ์ฐ๋ ํ๋ก๊ทธ๋จ _ 139 ๋งค์ผ ์คํ ๋ค์ด๋ฒ ๊ธ์ต ํ์ด์ง๋ฅผ ์บก์ฒํ์ฌ ์ ์ฅ _ 141
๋ฏธ์ธํ ์กฐ์ ์ ์ํด ๋๋ ์ด ์ฃผ๊ธฐ _ 142์บก์ฒํ ๋ฒ์๋ฅผ ์ง์ _ 144
์ฐจ๋กviii
![Page 9: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/9.jpg)
๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐ ์ ์ฅ 147
01 ๋ฌธ์์ฝ๋์ํธํ _ 148
๋ฌธ์ ์ฝ๋๋? _ 148๋ฌธ์ ์ฝ๋๊ฐ ์ด๋ ค์ด ์ด์ _ 148 ํ์ฌ์ ์ฃผ๋ฅ, ์ ๋์ฝ๋ _ 149 ๋ฌธ์ ์งํฉ๊ณผ ๋ฌธ์ ๋ถํธํ ์คํด _
149
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฌธ์ ์ฝ๋ _ 150Node.js์ ๊ฒฝ์ฐ _ 150
Node.js์์ ๋ฌธ์ ์ฝ๋ ๋ณํ _ 151 ๋ฌธ์ ์ฝ๋๋ฅผ ๋ชจ๋ฅด๋ ํ ์คํธ๋ฅผ ์ฝ๋ ๊ฒฝ์ฐ _ 153
iconv-lite๋ฅผ ์ฌ์ฉํ ๋ฌธ์ ์ฝ๋ ๋ณํ _ 155Rhino๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ _ 156
02 ์ ๊ทํํ์์์ฌ์ฉํ๋ฐ์ดํฐ๋ณํ _ 157
์ ๊ท ํํ์์ด๋? _ 157์๋ฐ์คํฌ๋ฆฝํธ์์์ ์ ๊ท ํํ์ ์ฌ์ฉ๋ฒ _ 158
์ ๊ท ํํ์ ๋ฉ์๋ _ 158 RegExp.exec() ๋ฉ์๋ _ 159 RegExp.test() ๋ฉ์๋ _ 160 String.
match() ๋ฉ์๋ _ 161 String.search() ๋ฉ์๋ _ 162 String.replace() ๋ฉ์๋ _ 163
03 ๋ฐ์ดํฐํ์์๊ธฐ์ด _ 166
์น์ ์๋ ๋ฐ์ดํฐ ํ์ _ 166JSON ํ์์ด๋? _ 167JSON์ ๊ฐ๋ํ, JSON5 ํ์ _ 170CSON ํ์ _ 172XML/RSS ํ์ _ 174
๋ด์ค RSS ํ์ฑ _ 175
YAML ํ์ _ 177Node.js๋ก YAML ํ์ ๋ค๋ฃจ๊ธฐ _ 180
INI ํ์ผ ํ์ _ 181Node.js๋ก INI ํ์ผ์ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ _ 182
CSV/TSV ํ์ผ ํ์ _ 184Node.js๋ก CSV ํ์ผ์ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ _ 186
๊ทธ ์ธ์ ํ์ _ 188
04 ์ปคํผ์คํฌ๋ฆฝํธ _ 190
์ ์ปคํผ์คํฌ๋ฆฝํธ์ธ๊ฐ? _ 190์ปคํผ์คํฌ๋ฆฝํธ ์ค์น _ 191ํ๋ก๊ทธ๋จ ์คํ ๋ฐฉ๋ฒ _ 191์ปคํผ์คํฌ๋ฆฝํธ์ ๊ธฐ๋ณธ ๋ฌธ๋ฒ _ 192
์ฃผ์ ์ฒ๋ฆฌ _ 193 ์ ์ด ๊ตฌ๋ฌธ์ ๋ค์ฌ์ฐ๊ธฐ๋ก ๋ ๋ฒจ์ ๋ช ์ _ 193 ๋ณ์ ์ ์ธ _ 194 ๋ฌธ์์ด _ 194
4์ฅ์
์ฐจ๋ก ix
![Page 10: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/10.jpg)
์ฐธ๊ณผ ๊ฑฐ์ง _ 195๋ฐฐ์ด _ 196์ฐ์ฐ์ _ 197
๋ฒ์ ๋น๊ต _ 198 ๋ณ์์ ์กด์ฌ ์ฒดํฌ _ 198 ์ฐ์ํ๋ ์์น์ ํํ โ ๋ฒ์ ์ฐ์ฐ์ โ..โ _ 199
์ ์ด ๊ตฌ๋ฌธ _ 199if..else.. _ 199 if..then..else _ 200 unless _ 200 switch..when..else _ 201
while/until _ 201 for..in/for..of _ 202
ํจ์ ์์ฑ _ 203์ธ์์ ๊ธฐ๋ณธ๊ฐ _ 204 ๊ฐ๋ณ ๊ธธ์ด ์ธ์ _ 205 ๋ฌด๋ช ํจ์(์ต๋ช ํจ์) _ 206
๊ฐ์ฒด์งํฅ _ 206ํด๋์ค ์ ์ _ 206 ์์ _ 207 ์ ์ ๋ฉค๋ฒ _ 208 ๋ฉค๋ฒ๋ฅผ ๋์ ์ผ๋ก ์ถ๊ฐ _ 209
05 ๋ฐ์ดํฐ๋ฒ ์ด์ค์ฌ์ฉ๋ฒ _ 210
์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋๊ฐ? _ 210๊ด๊ณํ ๋ฐ์ดํฐ ๋ชจ๋ธ๊ณผ NoSQL _ 210๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค SQLite3 ์ฌ์ฉ _ 211์น์ผ๋ก๋ถํฐ ๋ค์ด๋ก๋ํ์ฌ SQLite์ ์ ์ฅ _ 213
SQLite์ ์ํ์ ์ ์ฅ _ 215
NoSQL LevelDB๋ฅผ ์ฌ์ฉ _ 217LevelDB์์ ๊ฒ์ํ๋ ๋ฒ _ 219
๋ฐ์ดํฐ๋ฅผ LevelDB์ ๋ณด๊ด _ 223
06 ๋ฆฌํฌํธ์๋์์ฑ _ 227
๋ฆฌํฌํธ ์๋ ์์ฑ _ 227๋ฆฌํฌํธ๋ฅผ ์ถ๋ ฅํ๋ ๋ชฉ์ ์ ๋ช ํํ ํ์ _ 227
์ถ๋ ฅ ํ์ _ 228๋ฆฌํฌํธ๋ฅผ ์น์ ๊ณต๊ฐํ๋ ๊ฒฝ์ฐ _ 228 ๋ณธ์ธ์ ์ํ ๋ฆฌํฌํธ ์ถ๋ ฅ์ ๊ฒฝ์ฐ _ 228 ๋ฆฌํฌํธ๋ฅผ ์ธ์ํ๋
๊ฒฝ์ฐ _ 229
PDF ์์ฑ _ 230๊ฐ๋จํ PDF๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ _ 230 PhantomJS๋ก HTML์ PDF๋ก ์ ์ฅํ๋ ๋ฐฉ๋ฒ _ 230 PDFKit์ ์ด์ฉํด์ ์ถ๋ ฅ _ 232 PDFKit์ผ๋ก ๊ทธ๋ํ ๊ทธ๋ฆฌ๊ธฐ _ 235 PDFKit ๊ด๋ จ ์ ๋ณด _ 238
์์ ํ์์ผ๋ก ์์ฑ _ 238Node.js + O๏ฟฝcegen ์ฌ์ฉ๋ฒ _ 238Rhino์ Apache POI ์ฌ์ฉ๋ฒ _ 239
๊ทธ ์ธ์ ๋ฐฉ๋ฒ _ 242
์น API๋ก ํ๋ํ ๊ฐ์ ์์ ์ ์ฐ๊ธฐ _ 242
์ฐจ๋กx
![Page 11: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/11.jpg)
ํ๊ธ ํํ์ ๋ถ์ 245
01 ํํ์๋ถ์์๊ดํ์ฌ _ 246
ํํ์ ๋ถ์์ด๋? _ 246์ด๋์ ํ์ฉํ ์ ์๋๊ฐ? _ 247
ํํ์ ๋ถ์์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ _ 247mecab-ko์ ์ค์น _ 248
์คํ ํ ์คํธ _ 249
02 ํน์ ํ์ฌ์๋จ์ด๋ค์์ถ์ถ _ 251
Node.js์์ mecab-ko๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ _ 251ํ๋ก๊ทธ๋จ์ ์ ๋ฆฌํ์ฌ ํํ์ ๋ถ์ ๋ชจ๋ ์์ฑ _ 254
mecab-ko ๋ชจ๋ ์์ฑ _ 255
ํน์ ํ์ฌ์ ๋จ์ด๋ค์ ์ถ์ถํ๋ ํ๋ก๊ทธ๋จ _ 257
03 ๋ง๋ฅด์ฝํ์ฒด์ธ์์ด์ฉํ๋ฌธ์์์ฝ _ 260
๋ง๋ฅด์ฝํ ์ฒด์ธ์ ์ด์ฉํ ๋ฌธ์ ์์ฝ _ 260๋ง๋ฅด์ฝํ ์ฒด์ธ์ ๊ตฌํ _ 261
ํ๋ก๊ทธ๋จ์ ๊ดํ์ฌ _ 264
04 ๊ฐ๋จํ๋ฌธ์ฅ๊ต์ ๋๊ตฌ์์ฑ _ 266
๋ฌธ์ฅ ๊ต์ ๋๊ตฌ์ ๊ดํ์ฌ _ 266๋ง๋ค ํ๋ก๊ทธ๋จ _ 266 ์ค์ ํ๋ก๊ทธ๋จ _ 267 ํ๋ก๊ทธ๋จ์ ๊ดํ์ฌ _ 269
05 ๋จ์ด์์ถํ๋น๋์กฐ์ฌ _ 271
๋จ์ด์ ์ถํ ๋น๋ ์กฐ์ฌ _ 271์กฐ์ฌ๋ ๊ตฌ๋์ ์ ์ ์ธ _ 273 ํ๋ก๊ทธ๋จ์ ๊ดํ์ฌ _ 275
ํฌ๋กค๋ง์ ์ํ ๋ฐ์ดํฐ ์์ค 277
01 ์ ์ตํ๋ฐ์ดํฐ์์ค๋ชฉ๋ก _ 278
๋ฐ์ดํฐ ์์ค์ ๊ดํ์ฌ _ 278SNS์ ํ์ฉ _ 278์์ ๋ถ๋งํฌ ํ์ฉ _ 279์ํ ์ ๋ณด ํ์ฉ _ 279์จ๋ผ์ธ ์ฌ์ ์ ํ์ฉ _ 280์คํ๋ผ์ธ ์ฌ์ ๋ฐ์ดํฐ ํ์ฉ _ 280๋ธ๋ก๊ทธ ์๋น์ค ํ์ฉ _ 281
5์ฅ์
6์ฅ์
์ฐจ๋ก xi
![Page 12: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/12.jpg)
์ผ๊ธฐ ์๋ณด, ๊ธฐ์ ์ ๋ณด ํ์ฉ _ 281์คํ ๋ฐ์ดํฐ ํ์ฉ _ 282
02 ํธ์ํฐํฌ๋กค๋ง _ 283
ํธ์ํฐ๋? _ 283ํธ์ํฐ API ์ค๋น _ 283
twit ๋ชจ๋ ์ค์น _ 285 ํธ์ํฐ API๋ฅผ ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋จ _ 286 ํธ์ํฐ API์ ์ ํ _ 287
twit ๋ชจ๋์ ๊ดํ์ฌ _ 288
03 ํ์ด์ค๋ถ _ 289
ํ์ด์ค๋ถ์ด๋? _ 289ํ์ด์ค๋ถ API _ 289
์ ํ๋ฆฌ์ผ์ด์ ์ ๊ท ์์ฑ _ 290 fb ๋ชจ๋ ์ค์น _ 293 ํ์ด์ค๋ถ์ ๋ณธ์ธ์ด ํฌ๊ณ ํ ํฌ์คํธ๋ฅผ ์ถ๋ ฅํ
๋ ํ๋ก๊ทธ๋จ _ 293 ํผ๋์ ์์์ ๋ฉ์์ง๋ฅผ ๊ธฐ๊ณ ํ๋ ํ๋ก๊ทธ๋จ _ 294
04 ๋ค์ด๋ฒAPI์ฌ์ฉ _ 297
๋ค์ด๋ฒ API _ 297์ ํ๋ฆฌ์ผ์ด์ ๋ฑ๋ก _ 297 ๋ค์ด๋ฒ ๋ธ๋ก๊ทธ๋ฅผ ๊ฒ์ํ๋ ํ๋ก๊ทธ๋จ _ 299
05 ์๋ง์กดAPI์ฌ์ฉ _ 302
์๋ง์กด์ ์ํ ์ ๋ณด _ 302API๋ฅผ ์ํ ๊ฐ๋ฐ์ ๊ณ์ ์์ฑ _ 303์๋ง์กด์ ๋์ ์ ๋ณด ๊ฒ์ _ 308
06 ํ๋ฆฌ์ปค์์ฌ์ง๋ค์ด๋ก๋ _ 311
ํ๋ฆฌ์ปค๋? _ 311API ํค ํ๋ _ 312ํ๋ฆฌ์ปค API๋ฅผ ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋จ ์ ์ _ 314
ํ๋ฆฌ์ปค์์ ๊ณ ์์ด๋ฅผ ๊ฒ์ํ๋ ํ๋ก๊ทธ๋จ _ 314 URL์ ์ฌ์ง์ ๋ค์ด๋ก๋ _ 316
07 ์ ํ๋ธ๋์์๋ค์ด๋ก๋ _ 319
์ ํ๋ธ๋ ๋ฌด์์ธ๊ฐ? _ 319youtube-dl ์ค์น _ 320
youtube-dl ์ฌ์ฉ๋ฒ _ 321 youtube-dl ์ ๋ฐ์ดํธ _ 321
์ ํ๋ธ ๊ฒ์ _ 322์ ํ๋ธ API ํค ํ๋ _ 322 Node.js ๋ชจ๋ youtube-node ์ค์น _ 324
์ ํ๋ธ ๊ฒ์ ํ๋ก๊ทธ๋จ _ 324 ๊ฒ์ ์ต์ ์ง์ _ 326
๋์์์ ๊ฒ์ํ๊ณ ๋ค์ด๋ก๋ _ 328
์ฐจ๋กxii
![Page 13: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/13.jpg)
08 Yahoo!Finance์์ํ์จ๋ฐ์ฃผ์์ ๋ณด์์ง _ 331
Yahoo! Finance _ 331FXยทํ์จ ์ ๋ณด ์ทจ๋ _ 332
ํ์จ ์ ๋ณด๋ฅผ ์ทจ๋ํ๋ ํ๋ก๊ทธ๋จ _ 333
์ฃผ๊ฐ ์ ๋ณด ์ทจ๋ _ 336์ฃผ๊ฐ ์ ๋ณด๋ฅผ ์ทจ๋ํ๋ ํ๋ก๊ทธ๋จ _ 337 HTML ์ถ์ถ ํ _ 338
09 ์ํคํผ๋์๋ค์ด๋ก๋ _ 339
์ํคํผ๋์๋? _ 339์ํคํผ๋์ ๋ค์ด๋ก๋ _ 340 ๋ฐ์ดํฐ ํ์์ ๊ดํ์ฌ _ 341 ์์ฝ ๋ฐ์ดํฐ ์ด์ฉ _ 341 ํ์ดํ ๋ชฉ๋ก
์ทจ๋ _ 342
์ํคํผ๋์์ ํ์ดํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง๋ค๊ธฐ _ 343ํ์ดํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ฉ _ 346
์ ๊ท ํํ์์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฒ์ _ 348
๋ฐ์ดํฐ์ ๋ถ๋ฅ, ์์ธก๊ณผ ๋จธ์ ๋ฌ๋ 351
01 ๋ฐ์ดํฐ์ํ์ฉ๋ฒ์๊ดํ์ฌ _ 352
๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ํ์ฉํ ๊ฒ์ธ๊ฐ? _ 352๋ฐ์ดํฐ ๋ง์ด๋์ด๋? _ 352๋ฐ์ดํฐ ๋ง์ด๋์ ๊ธฐ๋ณธ์ ์์ธก, ๋ถ๋ฅ, ์ฐ๊ด ๊ท์น ์ถ์ถ _ 353
์์ธก _ 353 ๋ถ๋ฅ _ 353 ์ฐ๊ด ๊ท์น ์ถ์ถ _ 354
๋ฐ์ดํฐ ๋ง์ด๋์ ์์ _ 354๋ํ์ ์ธ ๋ฐ์ดํฐ ๋ง์ด๋ ๊ธฐ๋ฒ _ 355
02 ๋ฒ ์ด์ง์ํํฐ๋ฅผํ์ฉํ๋ถ๋ฅ _ 356
๋ฒ ์ด์ง์ ํํฐ๋? _ 356๋์ด๋ธ ๋ฒ ์ด์ฆ ๋ถ๋ฅ ์๊ณ ๋ฆฌ์ฆ _ 357
๋ฒ ์ด์ฆ์ ์ ๋ฆฌ _ 357 ๋์ด๋ธ ๋ฒ ์ด์ฆ ๋ถ๋ฅ _ 358
๋ฒ ์ด์ง์ ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ _ 359๋ฒ ์ด์ง์ ํํฐ๋ก โ์ด์์ โ๊ณผ โ์ฅ์์คโ์ ํ์ _ 359 bayes ๋ชจ๋ ์ฝ๋ _ 361
03 ์ด๋ํ๊ท ์์ด์ฉํ์์ธก๊ณผ๊ทธ๋ํ์์ฑ _ 364
์์ ์์ธก์ ๊ดํ์ฌ _ 364๋จ์ ์ด๋ ํ๊ท ์ ๊ดํ์ฌ _ 365
๊ทธ๋ํ ๊ทธ๋ฆฌ๊ธฐ _ 365 ๊ณผ๊ฑฐ ๊ธฐ์ ๋ฐ์ดํฐ ๋ค์ด๋ก๋ _ 367 ๊ธฐ์จ์ ์ด๋ ํ๊ท ์ ๊ณ์ฐํ๊ณ ๊ทธ๋ํ๋ก
ํ์ _ 371
์ง์ ํํ๋ฒ์ ๊ดํ์ฌ _ 374
7์ฅ์
์ฐจ๋ก xiii
![Page 14: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/14.jpg)
๋ด์ผ์ ํ๊ท ๊ธฐ์จ์ ์์ธก _ 377
04 ์ฑํ ๋ด๊ณผ๋ํํ๊ธฐ _ 379
์ฑํ ๋ด _ 379์ฑํ ๋ด์ ๊ตฌ์กฐ _ 380
์ฌ๊ธฐ์ ๋ง๋ค ์ฑํ ๋ด _ 380๊ธฐ์ ์ ์๊ฑด ์ ์ _ 381 ๋ํ ๊ตฌ์กฐ _ 381 ํ๋ก๊ทธ๋จ ์คํ ๋ฐฉ๋ฒ _ 382 ๋ํ ์ฌ์ _ 384 ์ฑํ ๋ด
์ ํ๋ฉด _ 387 ์ฑํ ๋ด ์๋ฒ _ 389 ์ฑํ ๋ด์ ๋ํ ์์ฑ ๋ชจ๋ _ 391
05 ์ํฌํธ๋ฒกํฐ๋จธ์ ์ผ๋ก๋ฌธ์์ธ์(์ ํธ) _ 395
์ํฌํธ ๋ฒกํฐ ๋จธ์ ์ด๋? _ 395๋ฌธ์ ์ธ์์ ๋์ _ 397
SVM์์ ํ์ต ๋ชจ๋ธ์ ๋ง๋๋ ์๋๋ฆฌ์ค _ 397 ์๊ธฐ ์ซ์ ๋ฐ์ดํฐ ๋ค์ด๋ก๋ _ 398 ๋ฐ์ด๋๋ฆฌ ๋ฐ์ด
ํฐ๋ฅผ CSV๋ก ๋ณํ _ 399 node-svm ์ค์น _ 404 ํ์ต์ฉ ๋ฐ์ดํฐ ํ์ผ ๋ง๋ค๊ธฐ _ 404 SVM ํ์ผ
์ ํ์ต์์ผ ๋ชจ๋ธ ์์ฑ _ 406 ๋ถ๋ฅ์ ์ ๋ต๋ฅ ํ์ธ _ 407
06 ์ํฌํธ๋ฒกํฐ๋จธ์ ์ผ๋ก๋ฌธ์์ธ์(ํํธ) _ 409
node-svm ์ฌ์ฉ๋ฒ _ 409์์ผ๋ก ์ด ๋ฌธ์๋ฅผ ์ธ์ํ๋ ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ _ 411
๋ฌธ์ ์ธ์ ํ๋ก๊ทธ๋จ โ HTTP ์๋ฒ _ 413 ๋ฌธ์ ์ธ์ ํ๋ก๊ทธ๋จ โ ํด๋ผ์ด์ธํธ HTML _ 414
์๋ชป ์ธ์ํ๋ ๋ฌธ์ ํด๊ฒฐ _ 420libsvm ์ฌ์ฉ _ 422
๋ฐ์ดํฐ ์๊ฐํ์ ์์ฉ 427
01 ๊ตฌ๊ธ์ฐจํธ๋ฅผ์ด์ฉํ์ฐจํธ์์ฑ _ 428
๊ตฌ๊ธ ์ฐจํธ๋? _ 428ํ์ด ์ฐจํธ ๊ทธ๋ฆฌ๊ธฐ _ 429
ํ์ด ์ฐจํธ์ ์ต์ ๋ณ๊ฒฝํ๊ธฐ _ 431
๋ง๋ ๊ทธ๋ํ ๊ทธ๋ฆฌ๊ธฐ _ 432๊ธฐ๋ณธ์ ์ผ๋ก ์์ ์์ ๊ทธ๋ํ ๊ทธ๋ฆฌ๋ ๊ฒ๊ณผ ๊ฐ๋ค _ 434
์ ๊ทธ๋ํ ๊ทธ๋ฆฌ๊ธฐ _ 434์ฐจํธ์ ์ข ๋ฅ์ ๋งค๋ด์ผ _ 437
02 D3.js๋ก์์ ๋๋์์ฐจํธ์์ฑ _ 440
D3.js โ ๋ฐ์ดํฐ ๊ธฐ๋ฐ ๋ํ๋จผํธ ์์ฑ ๋ผ์ด๋ธ๋ฌ๋ฆฌ _ 440D3.js ์ค์น _ 441๋ง๋ ๊ทธ๋ํ ๊ทธ๋ฆฌ๊ธฐ _ 442
SVG์ ๊ดํ์ฌ _ 444
8์ฅ์
์ฐจ๋กxiv
![Page 15: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/15.jpg)
๋ง๋ ๊ทธ๋ํ์ ์ค์ผ์ผ ์๋ ๊ณ์ฐ _ 445๋ง๋ ๊ทธ๋ํ์ ๋๊ธ ๊ทธ๋ฆฌ๊ธฐ _ 446๊บพ์์ ๊ทธ๋ํ ๊ทธ๋ฆฌ๊ธฐ _ 449
03 D3.js๋ก์ง๋๊ทธ๋ฆฌ๊ธฐ _ 455
์ง๋ ์ ๋ณด ๊ทธ๋ฆฌ๊ธฐ _ 455TopoJSON์ผ๋ก ์ง๋ ๋ฐ์ดํฐ ํ์ _ 456์ง๋ ๋ฐ์ดํฐ ๋ด๋ ค๋ฐ๊ธฐ _ 456๋ฐ์ดํฐ ํ์ ๋ณํ _ 457D3.js๋ก ๋ํ๋ฏผ๊ตญ ์ง๋ ๊ทธ๋ฆฌ๊ธฐ _ 459
04 D3.js์์ํ์๋๋ผ์ด๋ธ๋ฌ๋ฆฌ _ 463
D3.js๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ _ 463NVD3.js์ ๊ดํ์ฌ _ 464
NVD3.js๋ก ๋๋ ์ฐจํธ ๊ทธ๋ฆฌ๊ธฐ _ 465 NVD3.js๋ก ๋ง๋ ๊ทธ๋ํ ๊ทธ๋ฆฌ๊ธฐ _ 467
C3.js ์ฌ์ฉํ๊ธฐ _ 469C3.js๋ก ๊ธฐ์จ ํ์ํ๊ธฐ _ 471
์๋์ฐ๋ Mac OS X์ ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ 475
Node.js ์ค์น _ 476์๋์ฐ์ ๊ฒฝ์ฐ _ 476 Mac OS X์ ๊ฒฝ์ฐ _ 476
Rhino ์ค์น _ 478์๋์ฐ์ ๊ฒฝ์ฐ _ 478 Mac OS X์ ๊ฒฝ์ฐ _ 480
Nashorn ์ค์น _ 480์๋์ฐ์ ๊ฒฝ์ฐ _ 480 Mac OS X์ ๊ฒฝ์ฐ _ 481
HTML/XML์ PATH ํ์ฑ์ ๊ฐ๋จํ๊ฒ ์ํ 483
cheerio์ cheerio-httpcli์ ๊ดํ์ฌ _ 484
๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ ๋ฐฉ๋ฒ _ 484
์ทจ๋ํ ์์์ ์์ ์์ ๊ฒ์ํ๊ธฐ _ 485
์์ฑ ๊ฐ ๊ฐ์ ธ์ค๊ธฐ _ 487
์์ ์์ ๋ฐ์ ํ๊ทธ ๊ฒ์ํ๊ธฐ _ 488
ํ ์ด๋ธ ๋ด์ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ _ 489cheerio ๋ง๋ฌด๋ฆฌ _ 490
์ฐพ์๋ณด๊ธฐ 492
1๋ถ๋ก
2๋ถ๋ก
์ฐจ๋ก xv
![Page 16: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/16.jpg)
Node.js๋ผ๊ณ ํ๋ฉด ๊ฒฝ๋ ์น ์๋ฒ๋ฅผ ๋ง์ด ๋ ์ฌ๋ฆฐ๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์น ํ์ด์ง๋ฅผ ๊พธ๋ฏธ๋
์ธ์ด ์ ๋๋ก ์๊ฐํ๋ ์ฌ๋์ด ์์ง ์์์ง๋ ๋ชจ๋ฅด๊ฒ ๋ค. ๊ทธ๋ฐ๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ์ Node.js ํ์
๋ ๋ง๋ฅ ์ธ์ด๋ก ์ ์ ์กฐ๋ช ์ ๋ฐ์ผ๋ฉฐ ์๋ผ๋๊ณ ์๋ค. npm์ด๋ผ๋ ๋ ๋ ํ ์ง์๊ตฐ์ ํ์ ์ด ์ํ
๋ ๊ธฐ๋ฅ์ ๋น ๋ฅด๊ฒ ๊ตฌํํ ์ ์์ด ๋๋ฌด๋๋ ํธ๋ฆฌํ ์ธ์ด๋ค. ์ ์์ ๋๋ฉด ์น ์๋ฒ, ๋ฐฐ์น ํ๋ก
๊ทธ๋จ์ ํจ๊ณผ์ ์ผ๋ก ๋ง๋ค ์ ์์ ๋ฟ๋ง ์๋๋ผ MongoDB, ์๋ผ์คํฑ์์น ๋ฑ์ ๋ค๋ฃฐ ๋๋ ์ง๊ฐ
์ ์ ์ผ๋ก ๋์์ด ๋๋ค.
์ด ์ฑ ์ ์ผ๋ณธ ์ฌํ ์ค ์ฐ์ฐํ ์์ ์์ ๋ง์ฃผ์ณค๋ ์ฑ ์ด๋ค. ๋ง์นจ ํ์ฌ์ ๋น ๋ฐ์ดํฐ ๋ถ์์ ๋ด๋น
ํ๋ ํ์์ ํฌ๋กค๋ง ์์คํ ์ ๊ฐ๋ฐํ๊ณ ์์์ผ๋ฏ๋ก ์์ฐ์ค๋ ์ง์ด ๋ค๊ฒ ๋์๋ค. ์ฑ ์ ๋๊ธฐ๋ฉด
์ ๋์์ด ๋ ๋งํ ๋ด์ฉ์ ์ค๋งํธํฐ์ผ๋ก ์ฐ๋ค ๋ณด๋ ๋ช์ญ ์ฅ์ด ๋์๊ณ , ์ฌํ ์ค์ด๋ผ ๋๋ ๋ถ์กฑ
ํ๊ณ ์ง๋ ๋ฌด๊ฑฐ์ ๋๋ฐ ์ ์ ์ด ์ฑ ์ ๊ตฌ๋งคํด์ผ๊ฒ ๋ค๋ ์๊ฐ๋ง์ด ๋จธ๋ฆฟ์์ ๊ฐ๋ํด์ก๋ค.
์ฌํ์์ ๋์์ ์ฑ ์ ์ฝ์ด ๋ณด๋ ํผ์ ๋ณด๊ธฐ ์๊น์ธ ์ ๋๋ก ๋ด์ฉ์ด ์ข์๋ค. IT ๋์๋ ์ด๋ ค์ด
์ฑ ๋ ๋ง์๋ฐ ์ด ์ฑ ์ ์ด๋ ต์ง๊ฐ ์์๊ณ , ์์ ๋ฅผ ๋ฐ๋ผ ํ๋ฉฐ ์ค๋ช ์ ์ฝ์ผ๋ ์์ฐ์ค๋ ์ดํด๊ฐ ๋
์๋ค. ์ฝ๊ฒ ์ฝํ๋ฉด์๋ ๋ค๋ฃจ๋ ๋ด์ฉ์ ์ ๋ง ์ค์ฉ์ ์ด๊ณ ํธ๋ฆฌํ ๊ฒ๋ค์ด๋ค. ์ด ์ฑ ์์ ๋ค๋ฃจ๋
Vagrant, Electron, Phantomjs ๋ฑ์ ์ฝ์ด ๋ณด๋ฉด ๊ฐ์ด์ด ๋๊ทผ๊ฑฐ๋ฆด ์ ๋๋ก ํธ๋ฆฌํ๊ณ ์ข์ ๋๊ตฌ๋ค
์ด๋ค. ํนํ, ์ํํธ์จ์ด ์คํํธ์ ์ ๊ด์ฌ์ด ์๋ ์ฌ๋๋ค์ ์ด ์ฑ ์ ๋ง์ ๋ถ๋ถ์์ ํฅ๋ถํ ์ง๋
๋ชจ๋ฅด๊ฒ ๋ค.
์ต์ ๊ธฐ์ ๋ค์ ์ฝ๊ฒ ๋ฐฐ์ธ ์ ์๊ณ , ๊ด์ฐฎ์ ํ๋ก๊ทธ๋๋ฐ ํ ํฌ๋๋ ์ผ๋ถ ํฌํจ๋์ด ์๋ค. ๋ฐ๋ผ์
์ด ์ฑ ์ ์ธ์ด์ ์๊ด์์ด ์ด๊ธ์์ ์ค๊ธ ์์ค์ ๋ ์๊ฐ ์ฝ์ผ๋ฉด ๋ฐ๋์ ํฐ ๋์์ด ๋ ์ฑ ์ด๋ค.
์ข์ ์ฑ ์ ๊ณต์ ํ๊ณ ์ถ๋ค๋ ์์ํ ์ผ๋ ํ๋๋ก ๋จผ์ ๋ฒ์ญ ์ ์์ ํ๋๋ฐ, ์ด๋ฆฐ ๋ง์์ผ๋ก ๊ฒ
ํ ํด ์ฃผ์๊ณ ๊ธฐํ๋ฅผ ์ฃผ์ ์ ์ดํ ์ถํ์ฌ ๊ด๊ณ์๋ถ๋ค๊ป ๊ฐ์ฌ์ ๋ง์์ ์ ํ๊ณ ์ถ๋ค.
์ฎ๊ธด์ด ๋จธ๋ฆฌ๋ง
์ฎ๊ธด์ด ๋จธ๋ฆฌ๋งxvi
![Page 17: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/17.jpg)
๋ง์ง๋ง์ผ๋ก, ์ข์ ์ทจ๋ฏธ ํ๋๋ฅผ ์ ์ํ๊ณ ์ถ๋ค. ๊ทธ๊ฒ์ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ , ๋ถ์ํ๊ณ , ๊ฐ์ํ
ํ๋ ์ทจ๋ฏธ๋ค. ์ํ๋ฉด ๊ด์ฐฎ์ ์ธ์ฌ์ดํธ๋ฅผ ์ป์ ์๋ ์๊ณ , ํ์ฉํ๊ธฐ์ ๋ฐ๋ผ ์์ต์ด ๋ ์ง๋ ๋ชจ
๋ฅธ๋ค. ์ ์ด๋ ์ฌ๋ฏธ์ ํจ๊ป ์ฌ๋ฌ ๊ธฐ์ ๋ค์ ์ต๋ํ ์ ์์ ๊ฒ์ด๋ค. ๋ฐ๋ก ์ด ์ฑ ์ผ๋ก ์์ํ ์
์๋ค. ๋ฐ์ดํฐ ์์ง๋ถํฐ ๋จธ์ ๋ฌ๋์ ์ด๋ฅด๊ธฐ๊น์ง ์ฝ๊ณ ์ฌ๋ฏธ์๊ฒ ์ ๋ฌธํ๊ณ ์ถ์ ๋ถ๋ค๊ป ์ด ์ฑ ์
์ถ์ฒํ๋ค.
์ฎ๊ธด์ด ์ด๋๊ท
์ฎ๊ธด์ด ๋จธ๋ฆฌ๋ง xvii
![Page 18: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/18.jpg)
์ด ์ฑ ์ ๋ค์ํ ์์ด์ ํธ๋ฅผ ๋ง๋ค์ด ์ฌ๋ฌ ์์ ์ ์๋ํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ค๋ฃฌ๋ค. ์น์์๋
์ ์ตํ ๋ฐ์ดํฐ๊ฐ ๊ฐ๋ํ๋ค. ๊ทธ๋ฌํ ๋ฐ์ดํฐ๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ์์งํ์ฌ ๋ถ์ํ๊ณ ํ์ฉํ๋ ๊ฒ์
์ฌ๋ฏธ์๋ ์ทจ๋ฏธ๊ฐ ๋ ์๋ ์๊ณ ์ ๋ฌด์๋ ๋์์ด ๋๋ค. ์ด ์ฑ ์์๋ ์น์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์์งํ
๋ ๋ฐฉ๋ฒ๊ณผ ๊ทธ๊ฒ๋ค์ ์ ๋ฆฌํ๊ณ ๋ถ์ํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๋ค.
์ด ์ฑ ์ ํตํด ์น ์ฌ์ดํธ๋ฅผ ์ํํ๋ ํฌ๋กค๋ฌ๋ฅผ ๋ง๋ค์ด ๋ณธ์ธ๋ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ตฌ์ถํด ๋ณผ ์
์๋ค. ํ์ง๋ง ๊ทธ๋ ๊ฒ ๋ชจ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํ์ฉํ์ง ์๊ณ ์ ๋ค๊ฒ ๋๋๊ธฐ์๋ ์๊น๋ค. ๊ทธ๋์
์ด ์ฑ ์์๋ ํฌ๋กค๋ง์ ํตํ ์์ง๋ง์ ๋ค๋ฃจ๋ ๋ฐ ๊ทธ์น์ง ์๊ณ , ์์ ์ด ์ ํธํ๋ ๊ธฐ์ฌ๋ฅผ ๊บผ๋ด๊ฑฐ
๋, ์ผ์ ํ ๊ท์น์ผ๋ก ์๋ ๋ถ๋ฅํ๊ฑฐ๋, ๋ค๋ฅธ ๋ฐ์ดํฐ์ ์กฐํฉํ๋ ๋ฑ ํ ๊ฑธ์ ๋ ๋์๊ฐ ํ์ฉ๋ฒ
์ ์ ์ํ๋ค. ํธ๋ ๋๋ฅผ ์กฐ์ฌํ์ฌ ์ฃผ์๊ณผ FX์ ํธ๋ ์ด๋์ ์ฐธ๊ณ ํ๊ฑฐ๋, ๊ด๊ณ ์์ต์ ํ์ฉํ๊ฑฐ
๋, ๋ณด๊ณ ์์ ์๋ ์์ฑ ๋ฐ ๋ฌธ์ฅ ์์ฝ๊ณผ ์ฌ์์ฑ ๋ฑ ๋ค์ํ ์์ฉ์ ์๊ฐํ ์ ์๋ค.
๊ฒ๋ค๊ฐ ์น์ ๋ํํ๋ ์ธ์ด์ธ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ์ฝ๋๋ฅผ ์ดํดํ๊ธฐ ์ฝ๊ณ ์์ ํ๊ธฐ์
๋ ์ฌ์ธ ๊ฒ์ด๋ค. ์ด ์ฑ ์์ ์๊ฐํ๋ ๊ธฐ์ ์ด๋ ํ๋ก๊ทธ๋จ์ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์๋ ๊ฒ๋ ๋ง์ง
๋ง, ์ฝ๊ฐ ์์ ๋ด์ผ๋ก์จ ๋ณด๋ค ์ค์ฉ์ ์ธ ํด์ด ๋ ์ ์๋ค. ์ด ์ฑ ์์ ์๊ฐํ๋ ๋ด์ฉ์ ๋ฐํ์ผ
๋ก ์น์ด๋ ์ ๋ฌด ์ ๋ฐ์ดํฐ์ ๋ฌปํ ์๋ ๋ณด๋ฌผ์ ๋ฐ๊ตดํ๊ธฐ ๋ฐ๋๋ค.
์ด ์ฑ ์ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ธฐ๋ณธ์ ์๊ณ ์๋ ๋ ์๋ ํ๋ก๊ทธ๋๋ฐ ์ค๊ธ์๋ฅผ ๋์์ผ๋ก ํ๋ค. ์๋ฐ
์คํฌ๋ฆฝํธ๋ฅผ ๋ชจ๋ฅด๋ ๋ ์๋ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ๋ฒ์ ๋ง์คํฐํ๊ณ ๋ ํ์ ์ฝ์ผ๋ฉด ๋ด์ฉ์ ๋์ฑ ์ฝ๊ฒ ์ด
ํดํ ์ ์์ ๊ฒ์ด๋ค.
์ง์์ด ์ฟ ์ง๋ผ ํ์ฝ์ฐ์ฆ์ฟ ์
๋จธ๋ฆฌ๋ง
๋จธ๋ฆฌ๋งxviii
![Page 19: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/19.jpg)
์ด ์ฑ ์ ์ง๋ฉด์์๋ ์์ค ์ฝ๋๋ฅผ ๋ด๊ณ ์์ง๋ง, ์ง๋ฉด ๊ด๊ณ์ ์ผ๋ถ๋ฅผ ์๋ตํ ๊ฒ์ด ์๋ค. ์์ค ์ฝ
๋๋ ๋ค์ ์ฌ์ดํธ์์ ๋ค์ด๋ก๋ํ ์ ์๋ค. ๋ค์ด๋ก๋ URL์ ๋ค์์ ์ฐธ๊ณ ํ์.
ํ๋ก๊ทธ๋จ ๋ค์ด๋ก๋ ๋ฐฉ๋ฒ
๋ค์์ ์ ์ดํ ์น ํฌ๋กค๋ฌ GitHub ํ์ด์ง์์ ํด๋น ๋์์ ์์ ์ฝ๋๋ฅผ ๋ค์ด๋ฐ์ผ์ค ์ ์์ต๋๋ค.
์น ํฌ๋กค๋ฌ GitHub ํ์ด์ง
URL https://github.com/Jpub/JSWebCrawler
์ด ์ฑ ์ ์ฌ์ฉ ๋ฐฉ๋ฒ
์์ค๋ค์ ๋๋ ํฐ๋ฆฌ ์ด๋ฆ๊ณผ ํ์ผ ์ด๋ฆ
์์ค(์ง๋ฉด ๊ด๊ณ์ ์ผ๋ถ ์๋ต๋์ด
์๊ธฐ๋ ํจ)
์คํ ๊ฒฐ๊ณผ
์ ์ ๋ง๋ฌด๋ฆฌ
์์ค(์ง๋ฉด ๊ด๊ณ์ ์ผ๋ถ ์๋ต๋์ด
์๊ธฐ๋ ํจ)
์ด ์ฑ ์ ์ฌ์ฉ ๋ฐฉ๋ฒ xix
![Page 20: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/20.jpg)
ํ์ฐฌ์(์ผ์ฑ์ ์)
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ๊ฒฐ๊ตญ์ ๋๊ตฌ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋๊ตฌ์ ๊ฐ์น๋ ๋๊ตฌ ์ค์ค๋ก๊ฐ ๊ฐ๋ ๊ธฐ๋ฅ๋
์ํฅ์ ๋ฏธ์น๊ฒ ์ง๋ง, ๊ถ๊ทน์ ์ผ๋ก๋ ์์ฑ๋ ๊ฒฐ๊ณผ์ ์ํด ๊ฒฐ์ ๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฐ ๋งฅ๋ฝ์์
์ด ์ฑ ์ ๋๊ตฌ๋ฅผ ์ด์ฉํด ์์ฑ๋ ๊ฒฐ๊ณผ๋ฌผ, ์ฐ์ถ๋ฌผ์ ๋ง๋ค์ด ๊ฐ๋ ์ฌ๊ณ ๊ณผ์ ๊ณผ ๊ทธ์ ๊ด๋ จ๋ ๋ถ๊ฐ
์ ์ธ ๊ณผ์ ๋ค์ ์ดํด๋ณผ ์ ์์ด์ ์ข์์ต๋๋ค.
๊น์ธ์(๊ฐ๋น์)
์ด ์ฑ ์ Node.JS๋ฟ๋ง ์๋๋ผ ๊ฐ์ํ๊ฒฝ ์ค์ ์ ์ํ Vagrant, ๋ค์ํ ์น ํฌ๋กค๋ง ๊ธฐ๋ฒ, ํ๊ธ ํ
ํ์ ๋ถ์ ๋ฑ ๋ง์ ๋ด์ฉ์ ๋ค๋ฃจ๊ณ ์์ต๋๋ค. ๋ณด๋ค๊ฐ ์ด๊ฑด ํ ์ด ํ๋ก์ ํธ๋ก ๋ฐ์ ์ํค๋ฉด ์ฌ๋ฐ๊ฒ
๋ค๊ณ ์๊ฐํ ๋ด์ฉ์ด ๋ง์์ต๋๋ค. ๊ทธ์ ์ฝ๊ธฐ๋ง ํ์ง ๋ง์๊ณ ๋ฐ๋์ ์ฝ๋๋ฅผ ์์ฑํด ๋ณด์ธ์.
์ด๋ณด๋ผ(์์ฃผ๋ํ๊ต ์ํํธ์จ์ด ํน์ฑํ๋ํ์ ์์ฌ๊ณผ์ )
์ด ์ฑ ์ ํฌ๋กค๋ฌ๋ถํฐ ์ฑ๋ด๊น์ง ์๋ฐ์คํฌ๋ฆฝํธ์ Node.js๋ฅผ ์ด์ฉํด ์์ฉํ ์ ์๋ ๋ค์ํ ๊ธฐ๋ฅ
๋ค์ ์๊ฐํ๊ณ ์์ต๋๋ค. ์ด๋ฐ ์ฑ ์ ๊ฐ์ฅ ์ข์ ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ชจ๋ ๋ฑ์ ์์ ํด์ ์๊ฐํ
๋ค๋ ์ ์ ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์ Node.js ์ ๋ฌธ์๋ฅผ ๋ค ์ฝ๊ณ , ๋ ๋ญ ๋ง๋ค์ด ๋ณผ๊น ๊ณ ๋ฏผํ๋ ๊ฐ๋ฐ
์์๊ฒ ๊ฐ์ฅ ์ ํฉํ ๋์์ ๋๋ค. ๋ค๋ฅธ ๋ถ๋ค๋ ์ค์ต์ ๋ฐ๋ผ ํด๋ณด์๋ฉด ๋ ์ค๋ฅด๋ ๋ค์ํ ํ๋ก์
ํธ ์์ด๋์ด๋ฅผ ๊ตฌํํด ๋ณด๊ณ ์ ํ๋ ์๊ตฌ๊ฐ ์์์ ๊ฒ์ ๋๋ค.
๋ฒ ํ๋ฆฌ๋ ํ๊ธฐ
๋ฒ ํ๋ฆฌ๋ ํ๊ธฐxx
![Page 21: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/21.jpg)
๊น์ฉํ(๋ง์ดํฌ๋ก์ํํธ MVP)
์๋ฐ์คํฌ๋ฆฝํธ๋ถํฐ ์์ํด์ ํซ ์ด์์ธ ์ปคํผ์คํฌ๋ฆฝํธ, ์น ํฌ๋กค๋ง, ์น ์๋ํ ํ ์คํ ์ผ๋ก ์ด์ด
์ง๋๋ SVM์ ๋จธ์ ๋ฌ๋์ ๋ค๋ฃจ๊ณ ์์ต๋๋ค. ๊ฐ ๋จ์์ด ์ด๋๋ฒ์ค์์ ๋จ์ ์ค๋ช ์ด ์๋๋ผ ์
ํํ๊ณ ๋๋ผ์ธ ๋งํผ ๋ ์๊ฐ ๊ถ๊ธํดํ๊ณ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฅํฉ๋๋ค. ์ฑ ์ ์ฒ์๋ถํฐ ๋ฐ๋ผ ํ๋ค
๋ณด๋ฉด ์ด๋์ ์ต์ IT ํ๋ฆ๋ณด๋ค ์์ ๊ฒฝํ์ ์ป๊ฒ ๋ ๊ฒ์ ๋๋ค. node.js๋ฅผ ์ด๋ป๊ฒ ํ์ฉํ ์ ์
์๊น ๋๋ ๊ณ ๋ฏผํ ํ์ ์์ต๋๋ค. ๊ทธ์ ์ด ์ฑ ์ ํผ์น์ธ์!
์ ์ดํ์ ์ฑ ์ ๋ํ ์ ์ ๊ณผ ๊ธฐ์ ์ ๋ํ ์ด์ ์ด ๋จ๊ฑฐ์ด ๋ฒ ํ๋ฆฌ๋๋ค๋ก ํ์ฌ๊ธ ์ถ๊ฐ๋๋ ๋ชจ๋ ์์ ์ ์ฌ์ ๊ฒ์ฆ์ ์ํํ๊ณ ์์ต๋๋ค.
Beta Readers...
๋ฒ ํ๋ฆฌ๋ ํ๊ธฐ xxi
![Page 22: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/22.jpg)
![Page 23: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/23.jpg)
๊ฐ๋ฐ ํ๊ฒฝ
1์ฅ์์๋ ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ดํด ์์๋ณผ ๊ฒ์ด๋ค. ์๋ฐ์คํฌ๋ฆฝํธ
(JavaScript)๋ ์ด์์ฒด์ ๋ฅผ ๊ฐ๋ฆฌ์ง ์๊ณ ์คํํ ์ ์๋ ์ฅ
์ ์ด ์์ง๋ง, ์ฌ๊ธฐ์๋ ๊ฐ์ ๋จธ์ ์ ์ด์ฉํ์ฌ ๋์ฑ ํธ๋ฆฌํ๊ฒ
๊ฐ๋ฐํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณผ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง
์ ๊ดํด ์์๋ณด๊ณ , ๊ฐ๋ฐ ์์ฐ์ฑ์ ๋์ฌ ์ค ์ต์ ์๋ํฐ๋ฅผ ์
๊ฐํ ์์ ์ด๋ค. ๋ณธ๊ฒฉ์ ์ธ ๋ฐ์ดํฐ ์์ง๊ณผ ๋ถ์์ด๋ผ๋ ์ฌ๋ฏธ์
๋ ๋ณด๋ฌผ์ฐพ๊ธฐ๋ฅผ ๋ ๋๊ธฐ ์ ์ ์ฅ๋น๋ถํฐ ๋จผ์ ๊ฐ์ถ์.
1์ฅ์
![Page 24: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/24.jpg)
ECMAScript๊ฐ ์คํํ ๋ฒ์ฉ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ธ๊ณ
ECMAScript๋ Ecma International์ ์ํด ํ์คํ๋ ์คํฌ๋ฆฝํธ ์ธ์ด์ ๋ช ์ธ์๋ค. ์ด ๋ช ์ธ์๋
์น ๋ธ๋ผ์ฐ์ ๋ณ๋ก ๋ฌ๋๋ ํด๋ผ์ด์ธํธ ๊ธฐ๋ฐ ์คํฌ๋ฆฝํธ์ ๊ตฌํ์ ํ์คํ์ํค๊ธฐ ์ํด ๋ง๋ค์ด์ก๋ค.
์ดํ ์๋ฐ์คํฌ๋ฆฝํธ๋ ISO/IEC JTC 1, ISO/IEC 16262๋ก ํ์คํ๋์๋ค. 2016๋ 11์ ํ์ฌ ์ต์
๋ฒ์ ์ 7๋ก, โThe Seventh Editionโ์ด๋ผ ๋ถ๋ฅด๋ฉฐ, ์ด๋ฌํ ํ์คํ ๋์ ์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ฐ๋ฐ ์ธ์ด
๋ก์์ ์ง์๋ฅผ ์ ์ฐจ ๋์ผ ์ ์์๋ค. ์์ผ๋ก ๋์ฌ ๋ฒ์ 8์๋ ๋์์ฑ ์ง์, CPU ๋ช ๋ น์ด ์ธํธ
๋ฅผ ์ด์ฉํ ๋ณ๋ ฌ ๊ณ์ฐ ๋ฑ์ผ๋ก ์ฑ๋ฅ์ด ๋์ฑ ํฅ์๋ ์์ ์ด๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ์น ๋ธ๋ผ์ฐ์ ๋ผ๋ ์ ์ฝ์ ๋ฐ์ด๋์ด ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋งคํฌ๋ก ์ธ์ด๋ก๋
์ฌ์ฉ๋๊ณ ์๋ค. ๋ํ์ ์ธ ์๊ฐ ํฌํ ์ต(Photoshop)์ด๋ ์ผ๋ฌ์คํธ๋ ์ดํฐ(Illustrator)๋ก ์ ๋ช ํ ์ด๋
๋น(Adobe)์ CC(Creative Cloud) ์๋ฆฌ์ฆ๋ค. ์ด๋ค ์ ํ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํด ๊ฐ์ข ์์ ์ ์
๋ํํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์๋์ฐ(Windows)์๋ ๊ธฐ๋ณธ์ผ๋ก JScript ์์ง์ด ํ์ฌ๋์ด ์๋ค. ์ด๋ฅผ ์ด
์ฉํ๋ฉด ์๋์ฐ์ ๋ค์ํ ๊ธฐ๋ฅ์ ์ข ๋ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๋ค.
์ 1์ฅ | ๊ฐ๋ฐ ํ๊ฒฝ
01์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ด๋ชจ์ ๋ชจ
์์ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฎ์ ํธํ์ฑ์ด ๊ฐ๋ฐ์์๊ฒ ์ปค๋ค๋ ๊ณ ๋ฏผ๊ฑฐ๋ฆฌ์๋ค. ๊ทธ๋ฌ๋ ํ์ฌ๋ ๋๋ถ๋ถ ํ์คํ๋
์ด์ ์น ๋ธ๋ผ์ฐ์ ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ๋ง์ ํ๊ฒฝ์์๋ ๋์ํ ์ ์๊ฒ ๋์๋ค. ์ฌ๊ธฐ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง
์ ๊ดํด ์ดํด๋ณด๊ฒ ๋ค.
โ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ํน์ง
โ ๊ฐ๋ฐ ํ๊ฒฝ ์ค์น ๋ฐฉ๋ฒ
์ฃผ์ ํ์ต ๋ด์ฉ
โ Node.js โ Rhino/Nashorn โ JScript
์ฃผ์ ๋๊ตฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ 1์ฅ ๊ฐ๋ฐ ํ๊ฒฝ2
![Page 25: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/25.jpg)
๋์ฑ์ด HTML5 ๋์ ์ค๋งํธํฐ ์ ํ๋ฆฌ์ผ์ด์ ๋ง์ ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๊ฐ๋ฐํ ์ ์๊ฒ ๋์๋ค.
ํฐ๊ฐญ(PhoneGap) ํ๋ ์์ํฌ์ฒ๋ผ HTML5๋ก ๋ง๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ดํฐ๋ธ ์ ํ๋ฆฌ์ผ์ด์ ์ผ
๋ก ๋ณํํ๋ ๊ธฐ์ ์ด ๋ฐ์ ํ์ฌ ์ฑ๋ฅ์์ ๋ฌธ์ ๋ ์์ด์ง๊ณ ์๋ค.
์ฆ, ์ด์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ฐฐ์ฐ๋ฉด ์น ์ ํ๋ฆฌ์ผ์ด์ ๋ถํฐ ๋ฐ์คํฌํฑ ์ ํ๋ฆฌ์ผ์ด์ , ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ
์ผ์ด์ , ๊ทธ๋ฆฌ๊ณ ๋ฐฐ์น ์ฒ๋ฆฌ ํ๋ก๊ทธ๋จ๊น์ง ๋ค์ํ ๋ถ์ผ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์๋ ์๋
๊ฐ ๋ ๊ฒ์ด๋ค. ๋ํ, ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ฐฐ์ฐ๊ธฐ ์ฝ๊ณ , ์ธ์ด์ ์ ์ฐ์ฑ์ด ๋์ผ๋ฉฐ, ๋ค์ํ ํ๊ฒฝ์์
์ฌ์ฉํ ์ ์์ด์ ๊ทธ ์ธ๊ธฐ๊ฐ ์ ์ ๋์์ง๊ณ ์๋ค.
IE(Internet
Explorer)์
์๋ฐ์คํฌ๋ฆฝํธ
ECMAScript์๋ฐ
์คํฌ๋ฆฝํธ๋ฅผ
ํ์คํ
๊ฐ ๋ธ๋ผ์ฐ์ ์
์๋ฐ์คํฌ๋ฆฝํธ
ํฌํ ์ต์ด๋
์๋ํฐ ๋ฑ
๋งคํฌ๋ก๋ก์์
์๋ฐ์คํฌ๋ฆฝํธ
Node.js/Rhino
๋ฑ ๋ฒ์ฉ์ ์ธ
์๋ฐ์คํฌ๋ฆฝํธ
์์ง
NN(Netscape
Navigator)์
์๋ฐ์คํฌ๋ฆฝํธ
โฒ ํ์คํ๋์ด ๋ค์ํ ๊ณณ์์ ์ฌ์ฉํ๊ฒ ๋์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ด๋ชจ์ ๋ชจ
์ด ์ฑ ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ ๋ถ์ํ๋ ํญ๋์ ์ ๋ณด ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์
์๊ฐํ๋ค. ์ ๋ง๋ก ์๋ฐ์คํฌ๋ฆฝํธ๋ง์ผ๋ก ์ด๋ฐ ๊ณ ๋์ ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ ๊ฒ์ด ๊ฐ๋ฅํ ๊น? ์ด๊ฒ์
๊ฐ๋ฅํ๊ฒ ํ๊ธฐ ์ํด์๋ ์คํ ์์ง์ ํ์ ๋น๋ ค์ผ ํ๋ค.
๋ฐ์ด๋ ํ๊ฐ๊ฐ ์ฌ๋ฌ ๊ฐ์ ๋ถ์ผ๋ก ์บ๋ฒ์ค์ ์๋ฆ๋ต๊ฒ ์ฑ์ํด ๋๊ฐ๋ ๊ฒ์ฒ๋ผ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง
๋ ๊ทธ ์ข ๋ฅ๊ฐ ๋ค์ํ์ฌ ๋ชฉ์ ์ ๋ฐ๋ผ ๊ตฌ๋ถํ์ฌ ์ฌ์ฉํ๋ค๋ฉด ๊ณ ๋์ ์์ ์ ๋ ์งง์ ์๊ฐ์ ์
ํํ ์ ์๋ค.
01 ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ด๋ชจ์ ๋ชจ 3
![Page 26: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/26.jpg)
์ด ์ฑ ์์๋ ์ฃผ๋ก Node.js(๋ ธ๋์ ์ด์์ค)๋ผ๋ ์คํ ์์ง์ ์ด์ฉํ ํ๋ก๊ทธ๋๋ฐ์ ์๊ฐํ ๊ฒ์ด๋ค.
Node.js์ ํ์ฉ๋๋ ๋ค๋ฅธ ์ด๋ค ์๋ฐ์คํฌ๋ฆฝํธ ์์ง๋ณด๋ค๋ ๋๋ค.
์น ๋ธ๋ผ์ฐ์ ์์์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง
์๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์น ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉ๋์๋ ์คํฌ๋ฆฝํธ ์ธ์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก ์๋ฐ์คํฌ๋ฆฝ
ํธ๋ผ๊ณ ํ๋ฉด ๋ง์ดํฌ๋ก์ํํธ ์ธํฐ๋ท ์ต์คํ๋ก๋ฌ(Microsoft Internet Explorer)๋ ๋ชจ์ง๋ผ ํ์ด์ดํญ
์ค(Mozilla Firefox), ๊ตฌ๊ธ ํฌ๋กฌ(Google Chrome), ์ ํ ์ฌํ๋ฆฌ(Apple Safari) ๋ฑ ์น ๋ธ๋ผ์ฐ์ ์์ ์ฌ
์ฉ๋ ์คํฌ๋ฆฝํธ ์ธ์ด๋ฅผ ๋งํ๋ค. ์ด๋ค ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๊ณ ์ํ๋์๊ณ , ๋ค์ํ ์ฒ๋ฆฌ๋ ๊ฐ๋ฅ
ํ๊ฒ ๋์๋ค. ๊ทธ๋ฌ๋ ์น ๋ธ๋ผ์ฐ์ ์ ํ์ฌ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๋ธ๋ผ์ฐ์ ์์์๋ง ๋์ํ
์ ์์ด ์ ํ์ด ๋ง์ ๊ฒ๋ ์ฌ์ค์ด๋ค. ๋ก์ปฌ PC ์์ ํ์ผ์ ์์ ๋กญ๊ฒ ์กฐ์ํ ์ ์๊ณ , ์น ์๋ฒ
๋ก ๋์ํ ์๋ ์๋ค. ๊ทธ๋์ ๋ฑ์ฅํ ๊ฒ์ด ์น ๋ธ๋ผ์ฐ์ ์ ์์กดํ์ง ์์ผ๋ฉด์๋ ๋ค์ํ๊ฒ ์ด์ฉ
ํ ์ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด๋ค.
๊ณ ์ ์์ง์์ ํ์ํ Node.js
Node.js๋ ์น ์๋ฒ์ฒ๋ผ ๋คํธ์ํฌ ํ๋ก๊ทธ๋๋ฐ์ ์ํด ๊ฐ๋ฐ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์คํ ํ๊ฒฝ์ด๋ค. ๊ทธ
์ฌ์ฅ๋ถ์๋ ๊ตฌ๊ธ ํฌ๋กฌ์ ํ์ฌ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง V8์ด ์๋ค. V8์ ๊ฐ์ฅ ํฐ ํน์ง์ ๊ณ ์ ์
ํ ๋ฅ๋ ฅ์ด๋ค. ์น ๋ธ๋ผ์ฐ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋ณด์ ๋๋ฌธ์ ํ์ผ ์ฒ๋ฆฌ ๋ฑ์ด ๋ถ๊ฐ๋ฅํ ๊ฒ์ ๋ฐํด
Node.js๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ผ ์ฒ๋ฆฌ๋ถํฐ ๋คํธ์ํฌ ์ฒ๋ฆฌ๊น์ง ๋ค์ํ ์์ ์ ์ํํ ์ ์๋ค. ๋ํ,
ํจํค์ง ๋งค๋์ ์ธ npm์ ์ฌ์ฉํ๋ฉด ๋ค์ํ ํ์ฅ ๊ธฐ๋ฅ์ ์ฝ๊ฒ ๋์ ํ ์๋ ์๋ค.
Node.js๋ ์๋ฒ์์ ์คํ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ค
โฒ Node.js ์น์ฌ์ดํธ(https://nodejs.org/ko/)
ํ ํ๊ฒฝ(๋ฐํ์)์ผ๋ก ๋ง์ด ์ฌ์ฉ๋๊ณ ์๋ค. ๊ทธ๋
์ ์ฃผ๋ก ์๋ฒ ๊ด๋ จ ๊ธฐ์ ๋ก๋ง ์ทจ๊ธ๋๊ธฐ๊ฐ ์ฝ๋ค.
๊ทธ๋ฌ๋ Node.js๋ก ์์ฑ๋ ์๋ง์ ์ ํ๋ฆฌ์ผ์ด์
์ด ์กด์ฌํ๋ค. ์๋์ ์ ๊น HTML5๋ก ์์ฑ๋
์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๋งํธํฐ ์ฑ์ผ๋ก ๋ณํํด ์ฃผ๋
ํฐ๊ฐญ์ ๋ํด ์๊ฐํ๋๋ฐ, ํฐ๊ฐญ๋ ๋ฐ๋ก Node.js
๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ๋์๋ค.
์ 1์ฅ ๊ฐ๋ฐ ํ๊ฒฝ4
![Page 27: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/27.jpg)
์๋ฐ์ ํ๋ถํ ์์ฐ์ ์ด์ฉํ ์ ์๋ Rhino์ Nashorn
๋ค์์ผ๋ก, Rhino(๋ผ์ด๋ ธ)์ Nashorn(๋์คํธ๋ฅธ)์ ๊ดํด ์์๋ณด์. ๋ค์ ํท๊ฐ๋ฆด ์ ์๋๋ฐ ์ด๋ค
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์๋ฐ๋ก ๊ตฌํ๋์๋ค. ๊ทธ๋์ ์๋ฐ์ ๊ฐ์ ๋จธ์ (JVM, Java Virtual Machine)
์์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋๋ฆด ์ ์๋ค.
์ด๋ค ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ต๋ ์ฅ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์๋ฐ์ ๊ธฐ๋ฅ์ ์ ๊ทผํ ์ ์๋ค๋ ๊ฒ
์ด๋ค. ์ฆ, ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์๋ฐ์ ๋ฐฉ๋ํ API๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ ์ ์๋ค. ์ด ์ฑ ์์๋
์๋ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ ํ๋ก๊ทธ๋๋ฐ์ ์๊ฐํ๋๋ฐ ์ด๊ฒ์ด ๊ฐ๋ฅํ ๊ฒ์ ์๋ฐ์คํฌ๋ฆฝํธ ์
์ง์ด ์๋ฐ์ ๊ฐ์ ๋จธ์ ์์์ ์ํ๋๊ธฐ ๋๋ฌธ์ด๋ค. ๋ํ, Rhino๋ ์๋ฐ 1.4 ์ดํ์์, ๊ทธ๋ฆฌ๊ณ
Nashorn์ ์๋ฐ SE 8 ์ดํ์์ ์ด์ฉํ ์ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด๋ค. ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ์ ๊ฐ
์ผ๋, Nashorn์ ์ต์ ์๋ฐ ๋ฒ์ ์ ๋ง๊ฒ ๋ค์ ์์ฑ๋์ด์ JVM์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ด์ฉํ ๊ณ ์
์ํ์ด ๊ฐ๋ฅํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ๋ฐ์ ์์ด ๋งค์ฐ ์ค์ํ ์ ์ด๊ธฐ๋ ํ๋ฐ ์๋ฌ ๋ฉ์์ง๊ฐ ์น์ ํ๊ฒ ๋
์ ๋๋ฒ๊น ์ด ์ฝ๋ค๋ ํน์ง์ด ์๋ค.
์ด์ฒ๋ผ Nashorn์ด ๊ฐ์ง ์ด์ ์ด ๋ง์ง๋ง, ์ด ์ฑ ์์๋ ์ด๋ ์ ๋ ์ค๋๋ PC์์๋ ๋์์ ํ ์ค
ํธํ ์ ์๋๋ก Rhino๋ฅผ ์ด์ฉํ ํ๋ก๊ทธ๋๋ฐ์ ์๊ฐํ ๊ฒ์ด๋ค.
โฒ Mozilla Rhino ์น์ฌ์ดํธ (https://developer.mozilla.org/ ko/docs/Rhino)
โฒ Nashorn ๋ธ๋ก๊ทธ ์ฌ์ดํธ(https://blogs.oracle.com/nashorn/entry/welcome_to_the_nashorn_blog)
01 ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ด๋ชจ์ ๋ชจ 5
![Page 28: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/28.jpg)
์๋์ฐ์ ํ์ค์ผ๋ก ํ์ฌ๋ ์ ์ด์คํฌ๋ฆฝํธ
์ ์ด์คํฌ๋ฆฝํธ(JScript)๋ ์๋์ฐ์์๋ง ์ด์ฉํ ์ ์๋ ๋จ์ ์ด ์์ผ๋, ๊ทธ๋งํผ ์๋์ฐ์ ํนํ๋
๋ค์ํ ๊ธฐ๋ฅ์ ๋ค๋ฃฐ ์ ์๋ ์ฅ์ ์ ๊ฐ์ง๋ค.
๊ตฌ์ฒด์ ์ผ๋ก, ์ ์ด์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ๋ฉด ์๋์ฐ์ ActiveX(COM) ๊ธฐ์ ์ ๋์ํ ๊ฐ์ข ์ ํ๋ฆฌ์ผ
์ด์ ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค. ์๋ฅผ ๋ค๋ฉด, ์์ ์ ์๋ ๋ช ๋ถ๋ฅผ ์๋๋ก ๋ง๋ ํธ์ง ์์์ ์์
์ธ์ ๋ผ์๋ฃ๋ ๊ฒ์ฒ๋ผ ์ค๋ฌด์์ ํธ๋ฆฌํ ๊ธฐ๋ฅ์ ์ฝ๊ฒ ์ด์ฉํ ์ ์๋ค. โJScript Excelโ ๋ฑ์ ํค์
๋๋ก ๊ฒ์ํด ๋ณด๋ฉด, ์์ ์ ์ข ๋ ์ ํ์ฉํ๊ธฐ ์ํ ๋ค์ํ ํ์ด ๊ฒ์๋๋ค.
โฒ JScript ๋ง์ดํฌ๋ก์ํํธ ๋งค๋ด์ผ
์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋ฐ์ดํฐ ์์ง์ ์ ํฉํ ์ด์
์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋ฐ์ดํฐ ์์ง์ ์ ํฉํ ์ด์ ๋ ๋ฌด์์ผ๊น? ๊ฐ์ฅ ํฐ ์ด์ ๋ก ์ฝ๋ ์์ฑ์ด ์ฌ์ด
์ ์ ๋ค ์ ์๋ค. ์์ฆ์๋ ๋ง์ ์น ํ์ด์ง์์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ด์ฉ๋๊ณ ์๋ ๋งํผ ๋๊ตฌ๋ผ๋
์กฐ๊ธ๋ง ๋ฐฐ์ฐ๋ฉด ๋ฐ์ดํฐ ์์ง์ ์ํ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค. ๋ํ, ์๋ฐ์คํฌ๋ฆฝํธ
๋ฅผ ์ํ ํ๋ถํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ค๋น๋์ด ์๋ค. ์ด์ ์ ๊ดํด ์ข ๋ ๊ตฌ์ฒด์ ์ผ๋ก ์ดํด๋ณด์.
๋ฐฐ์ฐ๊ธฐ ์ฝ๋ค
์๋ฐ์คํฌ๋ฆฝํธ์ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ๋ฒ์ ๋งค์ฐ ๊ฐ๋จํ๋ค. ๊ธฐ๋ณธ์ ์ธ ๋ถ๋ถ๋ง ๋๊ณ ๋งํ๋ค๋ฉด ์ฝ๊ฒ ํ์ต
ํ ์ ์๋ค๊ณ ๋งํ ์ ์์ ๊ฒ์ด๋ค. ์ด ์ฑ ์ ๋ ์๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ดํ ์ด๋ ์ ๋์ ์ง์์ด
์ 1์ฅ ๊ฐ๋ฐ ํ๊ฒฝ6
![Page 29: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/29.jpg)
์์์ ์ ์ ํ๊ณ ์๋๋ฐ, ๊ธฐ๋ณธ ๋ฌธ๋ฒ์ ์๊ณ ์๋ค๋ฉด ์ด ์ฑ ์ ํตํด ์๋ฐ์คํฌ๋ฆฝํธ์ ์ค์ ์ฝ๋ฉ
๊ธฐ์ ์ ์ตํ ์ ์์ ๊ฒ์ด๋ค.
๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ค๋น๋์ด ์๋ค
์์์ ์ด์ผ๊ธฐํ๋ฏ์ด ๋ค์ํ ์๋ฐ์คํฌ๋ฆฝํธ ์คํ ์์ง์ด ์กด์ฌํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ํตํด ๋ค์ํ
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ ํ๊ฒฝ์ด ํ์ฑ๋๊ณ ์๋ค. ์ด ์ฑ ์์๋ ์ฃผ๋ก Node.js๋ฅผ ๋ค๋ฃจ๋๋ฐ
Node.js๋ฅผ ์ํ ์๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ผ๋ฉฐ, ๊ทธ๊ฒ๋ค์ ํจํค์ง ๋งค๋์ ์ธ npm์ ์ด์ฉํด ์ฝ๊ฒ
์ค์นํ ์ ์๋ค.
์ ์ฐ์ฑ์ด ๋์ ์ฝ๋๋ฅผ ๋น ๋ฅด๊ฒ ์์ฑํ ์ ์๋ค
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ธ์ด์ ์ ์ฐ์ฑ์ด ๋งค์ฐ ๋์ ๊ฒ์ผ๋ก ์ ํ์ด ๋ ์๋ค. ํ๋กํ ํ์ ๊ธฐ๋ฐ์ ๊ฐ์ฒด
์งํฅ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ผ๋ฉฐ, Node.js์ ๊ฒฝ์ฐ๋ ๊ธฐ๋ฅ์ ๋ชจ๋ ๋จ์๋ก ๊ด๋ฆฌํ ์ ์๋ค.
โ ์ฌ๋ฌ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๊ดํด ์์๋ณด์๋ค.
โ ์๋ฐ์คํฌ๋ฆฝํธ์ ์คํ ํ๊ฒฝ์๋ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์๋ค.
โ ํนํ, Node.js๊ฐ ๋ง์ ๊ฐ๋ฐ์์ ์ง์ง๋ฅผ ๋ฐ๊ณ ์๋ค.
โ ์ด ์ฑ ์์๋ Node.js๋ฅผ ์ด์ฉํ ํ๋ก๊ทธ๋๋ฐ์ ์ฃผ๋ก ์๊ฐํ๋ค.
โ Rhino๋ Nashorn์ ์ฌ์ฉํ๋ฉด ์๋ฐ๋ก ์์ฑ๋ ๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ์์ ํ์ฉํ ์ ์๋ค.
์ด ์ ์ ๋ง๋ฌด๋ฆฌ
01 ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ด๋ชจ์ ๋ชจ 7
![Page 30: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/30.jpg)
์์ด์ ํธ์ ์๋ฏธ
์์ด์ ํธ(Agent)๋, ํ์ธ์ด๋ ํ ์กฐ์ง์ ์๋ขฐ๋ฅผ ๋ฐ๊ณ ๋์ ํ๋ํด ์ฃผ๋ ๊ฐ์ธ์ด๋ ์กฐ์ง์ ๋ปํ
๋ค. ๋๋ฆฌ์ธ, ๋๋ฆฌ์ ์, ์ค๊ฐ์ ์๋ก ๋ฐ๊ฟ ๋งํ ์ ์๋ค. ์ด๋์ ์๋ฅผ ๋์ ํด์ ํ๊ณผ ๊ต์ญํด ์ฃผ๋
์คํฌ์ธ ์์ด์ ํธ์ ๊ดํด ๋ค์ด ๋ณด์์ ๊ฒ์ด๋ค. ๋ํ, ์ฐ์๊ณ์์ ์ฐ์์ธ์ ๋์ ํด์ ๋ค์ํ ๊ต
์ญ์ ํด์ฃผ๋ ๊ฒ๋ ์์ด์ ํธ๋ค. ์ผ์์ํ์ ๊ฐ๊น์ด ์๋ก, ์ฌํ์๋ฅผ ๋์ ํด์ ์ฌํ์ ์ค๋นํด ์ฃผ
๋ ์ฌํ ์์ด์ ํธ๊ฐ ์๋ค. ๋, ํ ์ง์ ๊ฑด๋ฌผ์ ๊ฒฝ์ฐ์๋ ํ๋งค์์ ๊ตฌ๋งค์ ์ฌ์ด์ ์ ์ถฉ ์ ๋ฌด๋ฅผ
ํด์ฃผ๋ ๋ถ๋์ฐ ์์ด์ ํธ๊ฐ ์๋ค.
์ด๋ฐ ์์ , ์ฒ๋ฆฌ, ์ ๋ฌด๋ฅผ IT ๋ถ์ผ์ ์ ์ฉํ ๊ฒ์ด ์ํํธ์จ์ด ์์ด์ ํธ๋ค. ์ฌ์ฉ์ ํน์ ๋ค๋ฅธ ์
ํํธ์จ์ด๋ฅผ ๋์ ํด์ ๋ค์ํ ์์ ์ ์ํํด ์ฃผ๋ ํ๋ก๊ทธ๋จ์ ๋งํ๋ค. ์ด ์ฑ ์ ๋๋จธ์ง ๋ถ๋ถ์
์๋ ์ํํธ์จ์ด ์์ด์ ํธ๋ฅผ ์งง๊ฒ ์ค์ฌ ์์ด์ ํธ๋ผ ๋ถ๋ฅด๋๋ก ํ๊ฒ ๋ค.
์ด ์ฑ ์ ์น์ฌ์ดํธ๋ก๋ถํฐ ๋ค์ํ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ , ์ผ๋ จ์ ์ฒ๋ฆฌ๋ฅผ ์๋์ผ๋ก ์ํํด ์ฃผ๋ ์
์ด์ ํธ์ ์์ฑ๋ฒ์ ๋ค๋ฃฌ๋ค. ์ด๋ฅผ ์ํด ๋ฐ์ดํฐ ์์ง๋ถํฐ ์ฒ๋ฆฌ, ๋ณด๊ด, ํ๊ธ ํํ์ ๋ถ์, ๋ฐ์ดํฐ
๋ถ์ ๊ธฐ๋ฒ ๋ฑ ๋ค์ํ ๊ธฐ์ ์ ๊ด๋ฒ์ํ๊ฒ ๋ค๋ฃฌ๋ค. ์ฒ์๋ถํฐ ์์๋๋ก ์ฝ์ด๋ ์ข๊ณ , ํ์์ ๋ฐ
์ 1์ฅ | ๊ฐ๋ฐ ํ๊ฒฝ
02์์ด์ ํธ๋ ๋ฌด์์ธ๊ฐ?
์ด ์ฑ ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๋ค. ์ด๋ฒ ์ ์์๋ ์ด ์ฑ
์์ ๋ชฉํ๋ก ํ๋ ๋ด์ฉ์ ๊ดํด ์ค๋ช ํ๊ณ , ์ด๊ฒ์ ์คํํ๋ ํ๋ก๊ทธ๋จ์ธ ์์ด์ ํธ๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ด๋ค ๋ถ
์ผ์ ๊ธฐ์ ์ด ํ์ํ์ง ์์๋ณธ๋ค.
โ ์์ด์ ํธ์ ๊ดํ์ฌ
์ฃผ์ ํ์ต ๋ด์ฉ
โ ์์
์ฃผ์ ๋๊ตฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ 1์ฅ ๊ฐ๋ฐ ํ๊ฒฝ8
![Page 31: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/31.jpg)
๋ผ ์ ํ์ ์ผ๋ก ์ฝ์ ์๋ ์๊ฒ ๊ตฌ์ฑํ์๋ค.
์ง๋ฅํ ์์ด์ ํธ
์์ด์ ํธ์๋ ์ด๋ค ๊ฒ์ด ์์๊น? ๋ช ๊ฐ์ ์์ด์ ํธ์ ๊ดํด ๊ตฌ์ฒด์ ์ผ๋ก ์ดํด๋ณด์. ์ด ๋ถ์ผ์์
์ฃผ๋ชฉ๋ฐ๊ณ ์๋ ๊ฒ์ด ์ง๋ฅํ ์์ด์ ํธ(IA, Intelligent Agent)๋ค. ์ง๋ฅํ ์์ด์ ํธ๋ ์ธ๊ณต์ง๋ฅ์ผ๋ก
์ฌ์ฉ์๋ฅผ ๋๊ณ , ๋ฐ๋ณต๋๋ ์์ ์ ์ฌ์ฉ์ ๋์ ์ ์ฒ๋ฆฌํ๋ค. ์ง๋ฅํ ์์ด์ ํธ๋ ๋ค์๊ณผ ๊ฐ์ ํน
์ง์ด ์๋ค.
โโ ํ๊ฒฝ๊ณผ์ ์ํธ์์ฉ์ ํตํด ํ์ตํ๋ฉฐ ๋์์ด ๊ฐ์ ๋๋ค.
โโ ์จ๋ผ์ธ์ผ๋ก ์ค์๊ฐ ์ ์ํ๋ค.
โโ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ๊ณ ์์ผ๋ก ํ์ตํ๋ค.
โโ ์๋ก์ด ๋ฌธ์ ํด๊ฒฐ ๊ท์น์ ์ ์ํ๋ค.
โโ ์์ ์ ๋์์ ๋ํด ์ฑ๊ณต๊ณผ ์คํจ๋ฅผ ์ค์ค๋ก ๋ถ์ํ๋ค.
์ ํน์ง๋ค์ ์ฝ์ผ๋ฉด SF์์ค์ ๋์ค๋ ๊ณ ๋์ ์ง๋ฅ์ ์ง๋ ๋ก๋ด์ด ์์๋ ์ง ๋ชจ๋ฅด๊ฒ ๋ค. ๊ทธ๋ฌ๋
์ด๋ฏธ ์ฐ๋ฆฌ ๊ทผ์ฒ์์ ์ง๋ฅํ ์์ด์ ํธ๊ฐ ํ์ฝํ๊ณ ์๋ค. ์ค๋ก๋ฅผ ์ดํด๋ณด์.
๋ฐ์ด์ด ์์ด์ ํธ
๊ตฌ๋งค ๋ด์ด๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค. ์ฌ์ฉ์๊ฐ ์ธํฐ๋ท์์ ์ํ์ด๋ ์๋น์ค๋ฅผ ๋ฐ๊ฒฌํ๋ ๊ฒ์ ๋์์ฃผ๋
์์ด์ ํธ๋ค. ์๋ฅผ ๋ค๋ฉด, ์๋ง์กด์์ ์ผํํ ๋ ํ์ด์ง ๋ฐ์ ์ ์ฌ ์ํ๋ค์ด ํ์๋๋ค. ์ด๊ฒ์
๊ทธ ํ์ด์ง๋ฅผ ๋ณธ ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ๊ตฌ๋งคํ ์ํ์ด๋, ์ฌ์ฉ์๊ฐ ๋ณธ ๋ค๋ฅธ ์ํ์ ๊ฒฝํฅ ์ ๋ณด๋ฅผ ์ด์ฉ
ํ ๊ฒ์ด๋ค. ์ ๋ฌธ์ ์ ์ ์์ด๋ผ๋ฉด ์๋์ ์ด์ผ๊ธฐ๋ฅผ ๋ฃ๊ณ ์๋์๊ฒ ๋ฑ ๋ง๋ ์ํ์ ์ ํํด ์ค๋ค.
์ฝ์ฌ๋ ์๋์ ์ฆ์์ ๋ฃ๊ณ ๋ง๋ ์ฝ์ ์ถ์ฒํด ์ค๋ค. ์ด์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐ์ด์ด ์์ด์ ํธ๋ ์ฌ์ฉ
์์ ์ทจํฅ์ ๊ณ ๋ คํด์ ์ํ์ ์ถ์ฒํด ์ค๋ค.
์ฌ์ฉ์ ์์ด์ ํธ
์ธํฐ๋ท ์ธ๊ณ์์๋ ์ฌ์ฉ์ ์์ด์ ํธ๊ฐ ํฐ ํ์ฝ์ ํ๊ณ ์๋ค. ์๋ฅผ ๋ค๋ฉด, ์น ๋ธ๋ผ์ฐ์ ๋ ์ด๋ฉ
์ผ ํด๋ผ์ด์ธํธ์ ๊ฒฝ์ฐ ์ฌ์ฉ์๋ฅผ ์ํด ์๋์ผ๋ก ์์ ์ ์ํํ๋ค. ์ด๋ฉ์ผ ํด๋ผ์ด์ธํธ๋ ์๋ก
์ด ๋ฉ์ผ์ ์์ ํ๊ณ , ๊ท์น์ ๋ฐ๋ผ ๋ฉ์ผ์ ๋ถ๋ฅํ๊ณ , ์ค์ํ ๋ฉ์ผ์ด ์์ผ๋ฉด ์ฌ์ฉ์์๊ฒ ์๋ฆฌ๊ธฐ
๋ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์น ๋ธ๋ผ์ฐ์ ๋ ์ฌ์ฉ์์ ์น ์๋ฒ ์ฌ์ด์์ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ์์ด์ ํธ๋ค. ์ฌ
02 ์์ด์ ํธ๋ ๋ฌด์์ธ๊ฐ? 9
![Page 32: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/32.jpg)
์ฉ์๊ฐ ๋ณด๊ณ ์ถ์ ํ์ด์ง๋ฅผ ์น ๋ธ๋ผ์ฐ์ ์ ์ ๋ ฅํ๋ฉด ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ทจ๋ํด์
๋ณด๊ธฐ ์ฌ์ด ํํ๋ก ํ์ํด ์ค๋ค. ๋ณด๋ค ๊ณ ๋์ ์์ด์ ํธ์ ๊ฒฝ์ฐ ์ฌ์ฉ์์ ์ทจํฅ์ ๋ง๊ฒ ์น์ ๋ด
์ค๋ฅผ ๋ชจ์ผ๋ ์ผ๋ ํ๋ค. ๋, ๊ฒ์์ ์๋๊ฐ ๋๊ธฐ๋ ํ๊ณ ์ฌ์ฉ์์ ๋ํ๋ฅผ ํ๊ธฐ๋ ํ๋ค.
๊ฐ์ ์์ด์ ํธ
ํ๋ คํ์ง ์์ง๋ง ์์ด์๋ ์ ๋ ์ผ์ ํ๋ ๊ฒ์ด ๊ฐ์ ์์ด์ ํธ๋ค. ์ด ์์ด์ ํธ๋ ์ปดํจํฐ ๊ธฐ๊ธฐ
๋ ์์คํ ์ด ์ ์์ ์ผ๋ก ๋์ํ๊ณ ์๋์ง๋ฅผ ๊ฐ์ํ์ฌ ๋ณด๊ณ ํ๋ค. ๊ธฐ๊ธฐ๊ฐ ๊ณ ์ฅ ๋๊ฑฐ๋ ์์คํ ์ด
๋ค์ด๋๋ฉด ๊ด๋ฆฌ์์๊ฒ ํต์งํ๊ณ ์๋์ผ๋ก ๋ณต๊ตฌ๋ฅผ ์๋ํ๊ธฐ๋ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์๋งค์ ์ ์ฌ๊ณ ํ
ํฉ์ ๊ฐ์ํด์ ์ฌ๊ณ ๋ถ์กฑ์ ์์ธกํ์ฌ ๋ณด๊ณ ํ๋ ์ผ๋ ํ๋ค.
๋ฐ์ดํฐ ๋ง์ด๋ ์์ด์ ํธ
๋ฐ์ดํฐ ๋ง์ด๋์ด๋, ํฌ๊ณ ๋ค์ํ ๋ฐ์ดํฐ๋ก๋ถํฐ ์ ์ฉํ ์ ๋ณด๋ฅผ ๋ฐ๊ตดํ๋ ๊ฒ์ ๋งํ๋ค. ์ด ์์
์ ๊ด์ฐ์ ์๋ ๊ด์์ ์ฑ๊ตด(mining)ํ๋ ๊ฒ๊ณผ ๋น์ทํ์ฌ ๋ฐ์ดํฐ ๋ง์ด๋(data mining)์ด๋ผ ๋ถ๋ฅธ
๋ค. ๋ฐ์ดํฐ ๋ง์ด๋ ์์ด์ ํธ๋ ์ ๋ณด๋ฅผ ์์งํ๊ณ ๋ชจ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฅ, ๋ถ์ํ๋ค. ๊ทธ๋ฆฌ๊ณ ํธ๋ ๋
์ ์ ํ์ ๊ฒ์ถํ๊ฑฐ๋ ์๋ก์ด ์ ๋ณด๋ฅผ ์ฐพ์๋ธ๋ค.
์ ๋ช ํ ๋ฐ์ดํฐ ๋ง์ด๋์ ์๋ก, ์ํผ๋ง์ผ์ ํ๋งค ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ์ฌ ๋ค์๊ณผ ๊ฐ์ ์์ธ์ ์ ๋ณด
๋ฅผ ๋ฐ๊ฒฌํ ์ฌ๋ก๊ฐ ์๋ค.
โโ ๋งฅ์ฃผ๋ฅผ ์ฌ๋ ์๋์ ๊ธฐ์ ๊ท๋ฅผ ํจ๊ป ์ฌ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
โโ ๋น๊ฐ ์ค๋ ๋ ์ ๊ณ ๊ธฐ์ ํ๋งค๋์ด ๋ง๋ค.
์ด๋ฌํ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ๋งฅ์ฃผ์ ๊ธฐ์ ๊ท์ ํ๋งค๋๋ฅผ ๊ฐ๊น๊ฒ ํ๊ฑฐ๋ ๋น๊ฐ ์ค๋ ๋ ์ ์ง์ดํ๋
๊ณ ๊ธฐ์ ์ข ๋ฅ๋ฅผ ๋๋ฆฌ๋ ๊ฒ๊ณผ ๊ฐ์ ๊ฐ๋จํ ์ง์นจ์ ํตํด ๋งค์ถ ์ฆ๋๋ฅผ ๊ธฐ๋ํด ๋ณผ ์ ์๋ค.
์ด์ฒ๋ผ ์์ด์ ํธ๋ ์ด๋ฏธ ์ฐ๋ฆฌ์ ์ถ ๊ฐ๊น์ด์์ ์ฌ์ฉ๋๊ณ ์๋ค. ์ด ์ฑ ์์ ๋ชจ๋ ๋ด์ฉ์ ๋ง๋ผํ
์๋ ์์ง๋ง, ์ด ์ฑ ์ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์ ๋ฌธํ๋ค๋ฉด ๋ ์ฌ์คํ ๊ธฐ์ ์ ๋ค๊ฐ๊ฐ ์ ์์ ๊ฒ์ด๋ค.
โ ์์ด์ ํธ๋ ๋๊ตฐ๊ฐ๋ฅผ ๋์ ํด์ ์ด๋ค ์ผ์ ํด ์ฃผ๋ ์ฌ๋์ด๋ ์กฐ์ง, ์ํํธ์จ์ด๋ฅผ ๋งํ๋ค.
โ ์ฐ๋ฆฌ ์ฃผ๋ณ์๋ ์ด๋ฏธ ๋ค์ํ ์์ด์ ํธ๊ฐ ์์ด์ ์จ๋ผ์ธ ๋ง์ผ์ด๋ ๋ธ๋ผ์ฐ์ , ์ด๋ฉ์ผ ํด๋ผ์ด์ธํธ ๋ฑ์์ ์ญ
ํ ์ ์ํํ๊ณ ์๋ค.
โ ์ด ์ฑ ์์๋ ์ํํธ์จ์ด ์์ด์ ํธ์ ์์ฑ๋ฒ์ ์ค๋ช ํ๋ค.
์ด ์ ์ ๋ง๋ฌด๋ฆฌ
์ 1์ฅ ๊ฐ๋ฐ ํ๊ฒฝ10
![Page 33: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/33.jpg)
๊ฐ์ ๋จธ์ ์ ์คํ ํ๊ฒฝ ๊ตฌ์ถ
์ด ์ฑ ์์ ์ค๋ช ํ๋ ์ฝ๋๋ ์๋์ฐ, Mac OS X, ๋ฆฌ๋ ์ค ๋ชจ๋์์ ๋์ํ๋ค. ๊ทธ๋ฌ๋ ํ๋ก๊ทธ
๋จ์ ๊ฐ๋ฐํ ๋ ๊ฐ์ ํ๊ฒฝ์ ๊ตฌ์ถํด ๋์ผ๋ฉด ํธ๋ฆฌํ ์ ์ด ๋ง๋ค. ์ด ์ฑ ์์๋ ๊ฐ์ ๋จธ์ ์์
CentOS(์ผํธ์ค์์ค)๋ฅผ ์ค์นํ์ฌ ์ฌ์ฉํ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฉด ๋ ์์ ํ์์ ์ด์์ฒด์ ์ฐจ์ด๋ก ์๊ธฐ๋
์ฌ๋ฌ ์๋ฌ ๋ฉ์์ง์ ๊ดํ ๊ฑฑ์ ์์ด ์ฝ๋์ ์ค๋ช ์ ์ง์คํ ์ ์๋ค. ๋ํ, ๊ฐ์ ํ๊ฒฝ์ ๋ง๋ค๋ฉด
๋ค์ํ ์คํ์ ํด๋ณผ ์ ์์ผ๋ฉฐ, ๋ฌธ์ ๊ฐ ์๊ฒจ๋ ์ฝ๊ฒ ๋ณต๊ตฌํ ์ ์๋ค. ์ด๋ ํ ๋ฌด๋ฆฌํ ํ๋ก๊ทธ๋จ
์ ์คํ์์ผ๋ ํธ์คํธ ๋จธ์ ํ๊ฒฝ์ ์ํฅ์ ๋ฏธ์น์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ง์ ๊ฐ์ํ ๋๊ตฌ๊ฐ ๋ฌด๋ฃ๋ก ์ ๊ณต๋๊ณ ์์ด ๋ถ๋ด ์์ด ์ด์ฉํ ์ ์๋ค. ์ต๊ทผ์ PC๋ผ๋ฉด ๊ฐ์ ๋จธ
์ ์ ์ผ ๋ ์ฑ๋ก ์์ด๋ ํธ์คํธ ๋จธ์ ์ ํฐ ๋ถ๋ด์ด ๋์ง ์๋๋ค.
์ด ์ฑ ์์๋ ์ฝ์์ ํตํด ํ๋ก๊ทธ๋จ์ ์คํํ๊ฑฐ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ๋ฌผ๋ก ,
์๋์ฐ์๋ ์ฝ์์ด ์์ง๋ง, ๋ฆฌ๋ ์ค ๊ณ์ด์ ํฐ๋ฏธ๋์ด ์ฌ๋ฌ๋ชจ๋ก ํธ๋ฆฌํ๋ค. ๋ํ, ๋ฆฌ๋ ์ค์ ์๋
ํจํค์ง ๋งค๋์ ๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ํ ์ํํธ์จ์ด๋ค์ ์ฝ๊ฒ ์ค์นํ ์ ์๋ค.
์ 1์ฅ | ๊ฐ๋ฐ ํ๊ฒฝ
03๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ
์ด๋ฒ ์ ์์๋ ๊ฐ์ ๋จธ์ ์์ ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ์ ์์๋ณผ ๊ฒ์ด๋ค. ๊ฐ์ ๋จธ์ ์์์๋ผ๋ฉด ์์ฌํ
๊ณ ๋ง์๊ป ์ํํธ์จ์ด๋ฅผ ์ค์นํ๊ณ ์ํํด ๋ณผ ์ ์๋ค. ์ฌ๊ธฐ์๋ ๋ณด๋ค ์ฌ์ด ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ ๋จธ์ ๋ฐ ๊ฐ๋ฐ ํ
๊ฒฝ์ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ์ ์์๋ณผ ๊ฒ์ด๋ค.
โ ๊ฐ์ ๋จธ์ ์์ ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ
์ฃผ์ ํ์ต ๋ด์ฉ
โ Vagrant/VirtualBox โ Poderosa โ CentOS โ nvm โ Node.js โ git
์ฃผ์ ๋๊ตฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
03 ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ 11
![Page 34: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/34.jpg)
๊ฐ์ ๋จธ์ ์์ฑ
๊ทธ๋ฌ๋ฉด ๊ฐ์ ๋จธ์ ์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์. ์ฐ๋ฆฌ๋ VirtualBox(๋ฒ์ถ์ผ๋ฐ์ค) ์์ CentoOS
๋ฅผ ์ค์นํ ๊ฒ์ด๋ค. ๊ทธ๋ฐ๋ฐ ์ด์์ฒด์ ์ค์น๋ ๊ท์ฐฎ๊ณ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ์์ ์ด๋ค. ๊ทธ๋์ ์ฌ๊ธฐ
์๋ CentOS๊ฐ ๋ฏธ๋ฆฌ ์ค์น๋ ๋จธ์ ์ด๋ฏธ์ง๋ฅผ ํ ๋ฒ์ ๋ช ๋ น์ผ๋ก ๋ด๋ ค๋ฐ์ ์ ์๋ Vagrant(๋ฒ ์ด๊ทธ
๋ฐํธ)๋ผ๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ค.
VirtualBox์ Vagrant ์ค์น
๊ทธ๋ฌ๋ฉด VirtualBox์ Vagrant๋ฅผ ์ค์นํ์. VirtualBox๋ ๋ค์ URL์์ ๋ด๋ ค๋ฐ์ ์ ์๋ค. ์
๋์ฐ๋ผ๋ฉด โVirtualBox x.x.x for Windows hostsโ๋ฅผ ์ ํํ๊ณ , Mac OS X์ด๋ฉด โVirtualBox x.x.x
for OS X hostsโ๋ฅผ ์ ํํ๋ค. ์ธ์คํจ๋ฌ๊ฐ ์ค๋น๋์ด ์์ด ์๋ด์ ๋ฐ๋ผ ์ค์น๋ฅผ ์งํํ๋ฉด ๋๋ค.
VirtualBox > Downloadshttps://www.virtualbox.org/wiki/Downloads
โฒ VirtualBox์ ์น์ฌ์ดํธ
๋ค์์ผ๋ก, Vagrant๋ฅผ ์ค์นํ์. ๋ค์ URL์์ ๋ค์ด๋ฐ๋๋ค. ์ญ์, ์ธ์คํจ๋ฌ๊ฐ ์์ผ๋ ์ง์์
๋ฐ๋ผ ์ค์น๋ฅผ ์งํํ๋๋ก ํ๋ค.
์ 1์ฅ ๊ฐ๋ฐ ํ๊ฒฝ12
![Page 35: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/35.jpg)
Vagrant > Downloadhttps://www.vagrantup.com/downloads.html
โฒ Vagrant์ ์น์ฌ์ดํธ
๊ฐ์ ๋จธ์ ์ถ๊ฐ
์๋์ฐ์์๋ ๋ช ๋ น ํ๋กฌํํธ, Mac OS X์์๋ ํฐ๋ฏธ๋์ ์ด์ด์ ๊ฐ์ ๋จธ์ ์ ์์ฑํ๊ณ ์ถ์ ํด
๋๋ก ์ด๋ํ๋ค. ๊ทธ๋ฆฌ๊ณ โvagrant initโ์ด๋ผ๊ณ ์ ๋ ฅํ๋ค. ๊ทธ๋ฌ๋ฉด Vagrantfile์ด ์๋์ผ๋ก ์์ฑ๋๋ค.
$ vagrant init
์๋ํฐ๋ฅผ ์ฌ์ฉํด์ Vagantfile์ ํธ์งํ๋๋ก ํ๋ค. ํ์ผ ๋ด์ config.vm.box="base"๋ผ๊ณ ์ฐ์ฌ
์ง ๋ถ๋ถ์ ์ฐพ์์ ์๋์ ๊ฐ์ด ๋ฐ๊พธ๋๋ก ํ๋ค. ์ด๊ฒ์ Vagrant Cloud๋ก๋ถํฐ ์๋์ผ๋ก ๊ฐ์
๋จธ์ ํ์ผ(Box ํ์ผ)์ ๋ด๋ ค๋ฐ๋๋ก ํ๋ ์ค์ ์ด๋ค.1
#config.vm.box = "base" โ ์ฃผ์ ์ฒ๋ฆฌ
config.vm.box = "puphpet/centos65-x64" โ ์ถ๊ฐ
1ใ ์ด ๊ฐ์๋จธ์ ํ์ผ์ ์ฌ์ฉ์๋ค์ด ์์ฑํ์ฌ ์ฌ๋ฆฐ ๊ฒ์ผ๋ก, ๊ฒฝ์ฐ์ ๋ฐ๋ผ์๋ ์ด์ฉํ์ง ๋ชปํ ์๋ ์๋ค. ๋ง์ฝ, ํด๋น ์ด๋ฆ์ผ๋ก ์ค์น๊ฐ
์ ๋๋ฉด http://vagrantcloud.com์์ CentOS๋ฅผ ๊ฒ์ํด์ Box ํ์ผ ์ด๋ฆ์ ๊ธฐ์ฌํ์ฌ ์งํํ๋๋ก ํ๋ค.
03 ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ 13
![Page 36: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/36.jpg)
โฒ ํ ์คํธ ์๋ํฐ๋ก ํธ์ง
์ฌ๊ธฐ์๋ CentOS 6.5๋ฅผ ๋ด๋ ค๋ฐ๋๋ก ์ค์ ํ์๋๋ฐ, Vagrant Cloud์๋ ๊ทธ ์ธ์๋ ๋ค์ํ ๊ฐ์
๋จธ์ Box๊ฐ ๋ฑ๋ก๋์ด ์์ด ์ํ๋ ๊ฒ์ ๋ด๋ ค๋ฐ์ ์ฌ์ฉํ ์ ์๋ค.
Vagrant Cloud์ ์น์ฌ์ดํธ [URL] https://vagrantcloud.com
โฒ Box ํ์ผ ์ผ๋
์ 1์ฅ ๊ฐ๋ฐ ํ๊ฒฝ14
![Page 37: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/37.jpg)
๊ฐ์ ๋จธ์ ๊ธฐ๋
์ด๊ฒ์ผ๋ก ์ค๋น๊ฐ ์๋ฃ๋์๋ค. ๋ค์๊ณผ ๊ฐ์ด ๋ช ๋ น์ ์คํํด ๋ณด์. ๊ทธ๋ฌ๋ฉด ์๋์ผ๋ก Box ํ์ผ์
๋ด๋ ค๋ฐ๊ณ ๊ฐ์ ๋จธ์ ์ ๊ธฐ๋ํ๋ค.
$ vagrant up์ญ์ฃผ
โฒ ์ฒซ ์คํ ์์๋ Box ํ์ผ์ ๋ด๋ ค๋ฐ๋๋ค
์ฒซ ์คํ ์์๋ Box ํ์ผ์ ๋ด๋ ค๋ฐ๋ ์๊ฐ์ด ํ์ํ์ฌ ๋ค์ ์ค๋ ๊ฑธ๋ฆฌ์ง๋ง, ์ดํ์๋ ๊ทธ๋งํผ
์ค๋ ๊ฑธ๋ฆฌ์ง ์๋๋ค. ํํธ, ์ง๊ธ๊น์ง ์ค๋ช ํ ๊ฐ์ ๋จธ์ ์ ๋ค์ด๋ฐ๊ณ ๊ธฐ๋ํ๋ ๊ณผ์ ์ ๋ค์ ๋
์ค์ ๋ช ๋ น์ด๋ก ๋์ฒดํ ์ ์๋ค.
vagrant init puphet/centos65-x64vagrant up --provider virtualbox
์ญ์ฃผ ์๋์ฐ 10์์ vagrant up ์คํ ์ค ์๋ฌ๊ฐ ๋ฐ์ํ๋ค๋ฉด ์ค์น ๊ฒฝ๋ก์์ VirtualBox.exe ํ์ผ์ ์ฐพ์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ ํด๋ฆญ
์์ฑ ํธํ์ฑ ํญ์์ โ๊ด๋ฆฌ์๊ถํ์ผ๋ก ์คํโ์ ์ฒดํฌํด ์ค๋ค. ๊ทธ๋ฆฌ๊ณ VirtualBox.exe๋ฅผ ์คํํ์ฌ ๋์๋ง ๋ชจ๋ ๊ฒฝ๊ณ ์ด๊ธฐํ
๋ฅผ ํด๋ฆญํ๋ค.
03 ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ 15
![Page 38: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/38.jpg)
๊ฐ์ ๋จธ์ ์ ์ด
๊ฐ์ ๋จธ์ ์ ๊ธฐ๋ ์ํ๋ฅผ ํ์ธํ๊ธฐ ์ํด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ค. ์ ์์ ์ผ๋ก ๊ธฐ๋ ์ค์ด๋ฉด
โrunning(๋์ ์ค)โ์ด๋ผ๊ณ ํ์๋๋ค.
$ vagrant status
์คํ ์ค์ธ ๊ฐ์ ๋จธ์ ์ ์ข ๋ฃํ๊ธฐ ์ํด์๋ โvagrant haltโ๋ผ๊ณ ์ ๋ ฅํ๋ค. ์ด ์ธ์๋ ๋ค์๊ณผ ๊ฐ์
๋ช ๋ น์ผ๋ก ๊ฐ์ ๋จธ์ ์ ์ ์ดํ ์ ์๋ค.
โผ Vagrant ๊ด๋ จ ๋ช ๋ น์ด ์ผ๋
์ปค๋งจ๋ ์ ์ด ์ค๋ช
vagrant up ๊ฐ์ ๋จธ์ ์๋
vagrant halt ๊ฐ์ ๋จธ์ ์ ์ง
vagrant suspend ๊ฐ์ ๋จธ์ ํด๋ฉด
vagrant resume ๊ฐ์ ๋จธ์ ํด๋ฉด ์ํ์์ ๋ณต์
vagrant reload ๊ฐ์ ๋จธ์ ์ฌ์๋
vagrant status ๊ฐ์ ๋จธ์ ์ ์ํ ํ์ธ
vagrant destroy ๊ฐ์ ๋จธ์ ์ญ์
vagrant ssh ๊ฐ์ ๋จธ์ ์ ๋ก๊ทธ์ธ
๊ฐ์ ๋จธ์ ์ ๋ก๊ทธ์ธํ๊ธฐ
์ฐ๋ฆฌ๊ฐ ์์ ์ค์นํ CentOS ์ด๋ฏธ์ง๋ ์ต์ ๊ตฌ์ฑ์ด๋ฏ๋ก ๋ฐ์คํฌํฑ ํ๋ฉด์ ํฌํจํ์ง ์๋๋ค. ๋ฐ
๋ผ์ ํฐ๋ฏธ๋์ ํตํด ๊ฐ์ ๋จธ์ ์ ๋ก๊ทธ์ธํด์ผ ํ๋ค. Mac OS X์ด๋ผ๋ฉด ํฐ๋ฏธ๋์ ์ด๊ณ , ๋ค์๊ณผ
๊ฐ์ด ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด SSH๋ฅผ ํตํด ๊ฐ์ ๋จธ์ ์ ๋ก๊ทธ์ธํ๊ฒ ๋๋ค.
$ vagrant ssh
์ 1์ฅ ๊ฐ๋ฐ ํ๊ฒฝ16
![Page 39: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/39.jpg)
โฒ Mac OS X์์ ๊ฐ์ ๋จธ์ ์ ๋ก๊ทธ์ธํ ํ๋ฉด
์๋์ฐ์์ ๊ฐ์ ๋จธ์ ์ ๋ก๊ทธ์ธํ๋ ๋ฐฉ๋ฒ
์๋์ฐ์์๋ ๋ค์๊ณผ ๊ฐ์ด SSH ์ ์์ ํ์ํ ์ ๋ณด๋ง ํ์๋๋ค.
> vagrant ssh(์ดํ ํ์ ์)Host: 127.0.0.1Port: 2222Username: vagrantPrivate key: E:/vagrant/.vagrant/machines/default/virtualbox/private_key
๋จผ์ , SSH ํด๋ผ์ด์ธํธ๋ฅผ ์ค์นํ๊ณ ์ ์ ๋ณด๋ฅผ ์ค์ ํ์ฌ ์ ์ํ๋ค. ์ ๋ช ํ ์๋์ฐ์ฉ SSH ํด๋ผ
์ด์ธํธ๋ก๋ Putty(ํธํฐ), TeraTerm(ํ ๋ผํ ), Poderosa(ํฌ๋ฐ๋ก์ฌ) ๋ฑ์ด ์๋ค. ์ฌ๊ธฐ์๋ Poderosa์
์ฌ์ฉ๋ฒ์ ์๊ฐํ๊ฒ ๋ค.
๋ค์ ์ฃผ์์์ Poderosa๋ฅผ ๋ค์ด๋ก๋ํ๋ค. ZIP ํ์ผ์ ์์ถ ํด์ ํ๋ฉด Poderosa.exe๊ฐ ๋์ค๋
๋ฐ ์ด๊ฒ์ด ์คํ ํ์ผ์ด๋ค. ๋๋ธํด๋ฆญํ์ฌ ์คํํ๋ค.
Poderosa[URL] http://sourceforge.net/projects/poderosa/
Poderosa๋ฅผ ์คํํ ํ ๋ฉ๋ด์์ โFile New Telenet/SSH Connectionโ์ ํด๋ฆญํ๋ค. ๊ทธ๋ฆฌ๊ณ ์
์ โvagrant sshโ๋ก ํ๋ํ ์ ์ ์ ๋ณด๋ฅผ ์ ๋ ฅํ๋ค. Host์ โ127.0.0.1โ, Protocol์ SSH2, Port์
ํฌํธ ๋ฒํธ, Account์ vagrant, Authentication์๋ Public Key๋ฅผ ์ ํํ๊ณ , Key File(Private
03 ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ 17
![Page 40: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/40.jpg)
Key)์ ์ง์ ํ๋ค. ์ด๋ ํฌํธ ๋ฒํธ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์ฐ์ด๋ 22๊ฐ ์๋๋ผ 2222์ธ ๊ฒ์ ์ฃผ์ํ๋ค.
OK๋ฅผ ๋๋ฅด๋ฉด ๊ฐ์ ๋จธ์ ์ ์ ์ํ๋ค.
โฒ Poderosa๋ก ์ ์ํ๋ ํ๋ฉด
๋ณดํต ์ฌ๋งํ SSH ํด๋ผ์ด์ธํธ๋ ํ๋ฉด ์์ ๊ธฐํธ์ ๋ง๊ฒ ๋ฐ๊ฟ ์ ์๋๋ฐ Poderosa๋ ๋ฉ๋ด์
Tools Options์ Display ํญ์์ ํ๋ฉด ์์ ์ค์ ํ ์ ์๋ค.
โฒ Poderosa๋ฅผ ์คํํ ํ๋ฉด
์ 1์ฅ ๊ฐ๋ฐ ํ๊ฒฝ18
![Page 41: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/41.jpg)
์ด๊ธฐ ๊ณ์ ๊ณผ ๋น๋ฐ๋ฒํธ๋ ๋ชจ๋ vagrant๋ค.
โผ ๋ํดํธ ๊ณ์ ์ ๋ณด
๋ํดํธ
๊ณ์ vagrant
ํจ์ค์๋ vagrant
Node.js ์ค์น
๊ทธ๋ฌ๋ฉด ์ด ์ฑ ์์ ์ฃผ๋ก ์ฌ์ฉํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ธ Node.js๋ฅผ ์ค์นํ์. Vagrant๋ก ๊ธฐ๋
ํ ๊ฐ์ ๋จธ์ ์ ๋ก๊ทธ์ธํ๋ค. Node.js๋ ๋ฒ์ ์ ๋ฐ๋ผ ๋์์ด ๋ค๋ฅด๋ค. ๊ทธ๋์ nvm์ด๋ผ๋ ๋๊ตฌ๋ฅผ
์ฌ์ฉํด์ ํน์ ๋ฒ์ ์ Node.js๋ฅผ ์ค์นํ ๊ฒ์ด๋ค. ๋จผ์ , ๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ํตํด nvm์ ์ค
์นํ๋ค.
$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.25.3/install.sh | bash
์ค์น ํ ์ ธ์ ์ฌ์์์ ์ํด โlogoutโ ๋ช ๋ น์ด๋ฅผ ์ด์ฉํ์ฌ ๋ก๊ทธ์์ํ์๋ค๊ฐ ์ฌ์ ์ํ์ฌ ๋ค์
๋ก๊ทธ์ธํ๋ค. ์ด์ด Node.js 0.12.4๋ฅผ ์ค์นํ๋ค.
$ nvm install v0.12.4$ nvm alias default v0.12.4
์ ๋๋ก ์ค์น๋์๋์ง ํ์ธํด ๋ณด์. โnode โvโ ๋ช ๋ น์ด๋ก ์ค์น๋ Node.js์ ๋ฒ์ ์ ๋ณด๋ฅผ ํ์ธํ
์ ์๋ค. ๋ค์๊ณผ ๋น์ทํ๊ฒ ํ์๋๋ฉด ์ฑ๊ณตํ ๊ฒ์ด๋ค.
$ node -vv0.12.4
Node.js์๋ REPL(Read-Eval-Print-Loop)์ด๋ผ ๋ถ๋ฆฌ๋ ๋ํ ํ๊ฒฝ์ด ์ค๋น๋์ด ์๋ค. ํฐ๋ฏธ๋์์
์ธ์ ์์ด node ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด REPL์ด ์์๋๋ค. ์ฌ๊ธฐ์ 3 + 5๋ผ ์ ๋ ฅํ๊ณ , ์ํฐ๋ฅผ ๋๋ฌ
03 ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ 19
![Page 42: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/42.jpg)
๋ณด์. 8์ด๋ผ๋ ๊ฒฐ๊ณผ๊ฐ ํ์๋ ๊ฒ์ด๋ค.
$ node> 3 + 5 8
๊ทธ๋ฐ๋ฐ nvm์ ์ฌ์ฉํด์ Node.js๋ฅผ ์ค์นํ ๊ฒฝ์ฐ์๋ sudo ๋ช ๋ น์ด์ ํจ๊ป npm์ด๋ node ๋ช ๋ น
์ด๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ด๋ฅผ ์ํด sudo ๋ช ๋ น์ ์คํํ ๋์ ํจ์ค(PATH: ํ๋ก๊ทธ๋จ์ด๋ ๋ช ๋ น์ ์ฐพ๋
๊ธฐ๋ณธ ๊ฒฝ๋ก๋ฅผ ๋ด๊ณ ์๋ ํ๊ฒฝ ๋ณ์)๋ฅผ ์ผ๋ฐ ์ฌ์ฉ์์ ํจ์ค์ ๊ฐ๊ฒ ํด์ผ ํ๋ค. ๋จผ์ , โ.exitโ๋ฅผ ์ ๋ ฅํ
์ฌ REPL ํ๊ฒฝ์ ์ข ๋ฃํ๊ณ ๋ค์๊ณผ ๊ฐ์ด visudo ๋ช ๋ น์ด๋ฅผ ์คํํ๋๋ก ํ๋ค.
$ sudo visudo
๋ง์ ์ค์ ํญ๋ชฉ์ด ์๋๋ฐ env_keep์ ์ค์ ํ ํ์ ์ฐพ์์ ์ฃผ์ ํ์ โ#โ์ ์์ ๋๋ก ํ๋ค. ๊ทธ
๋ฐ๋ฐ visudo๋ฅผ ์คํํ๋ฉด vi ์๋ํฐ๊ฐ ์คํ๋๋ค. vi ์๋ํฐ๋ ๋ช ๋ น ๋ชจ๋์ ๋ฌธ์๋ฅผ ์ ๋ ฅํ ์ ์
๋ ์ ๋ ฅ ๋ชจ๋๋ฅผ ๋ฐ๊ฟ๊ฐ๋ฉด์ ํธ์ง์ ์ํํ๋ค. vi๋ฅผ ์คํํ๋ฉด ๋ช ๋ น ๋ชจ๋๋ก ์์๋๋ค. i ํค๋ฅผ ๋
๋ฌ ์ ๋ ฅ ๋ชจ๋๋ก ๋ณํํ์ฌ ํธ์ง์ ์ํํ๊ณ , ํธ์ง์ด ๋๋๋ฉด esc ํค๋ฅผ ๋๋ฌ ๋ช ๋ น ๋ชจ๋๋ก ๋์๊ฐ
๋๋ก ํ๋ค.
### ์ฒซ ๋ฒ์งธ ์์ (env_reset์ ๋ฌดํจํ)Defaults env_resetใใใใโDefaults !env_reset
### ๋ ๋ฒ์งธ ์์ (HOME์ ์ถ๊ฐ)#Defaults env_keep += "HOME"ใใใใโDefaults env_keep += "HOME"
### ์ธ ๋ฒ์งธ ์์ (sudo ๋ช ๋ น์ด ์คํ ์ ์ฌ์ฉํ ํจ์ค๋ฅผ ๋ฎ์ด์ฐ์ง ์๋๋ก ์ฃผ์ ์ฒ๋ฆฌํ๋ค)Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/binใใใใโ# Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
๋ช ๋ น ๋ชจ๋์์ :wq ํค๋ฅผ ๋๋ฅด๋ฉด ์ ์ฅ ํ vi๊ฐ ์ข ๋ฃ๋๋ค. ํ ๋ฒ ๋ก๊ทธ์์ํ๊ณ ๋ค์ ๋ก๊ทธ์ธํ๋ฉด
์ค์ ์ด ๋ฐ์๋๋ค.
์ 1์ฅ ๊ฐ๋ฐ ํ๊ฒฝ20
![Page 43: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/43.jpg)
git ์ค์น
๋ค์ํ ์คํ ์์ค ํ๋ก์ ํธ์ ์์ค ์ฝ๋๋ฅผ ๋ก์ปฌ ํ๊ฒฝ์ ๋ด๋ ค๋ฐ์ ์ ์๋๋ก git๋ ์ค์นํด ๋์.
$ sudo yum install git
๊ฐ์ ๋จธ์ ์์ ์น ์๋ฒ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์ค์
๊ฐ์ ๋จธ์ ์ ๋งํ์๋ฉด ์์ ์์ ๋ชจํ ์ ์์ด๋ค. ๊ทธ๋์ ๊ฐ์ ๋จธ์ ์ ์น ์๋ฒ๋ฅผ ๋ง๋ค์๋ค๋ฉด
๊ธฐ๋ณธ์ ์ผ๋ก ํธ์คํธ ๋จธ์ ์์ ์ ๊ทผํ ์๊ฐ ์๋ค. ์ ๊ทผํ ์ ์๊ฒ ํ๊ธฐ ์ํด์๋ Vagrant์ ์ค
์ ํ์ผ Vagrantfile์ ๋ค์ ๋ด์ฉ์ ์ถ๊ฐํ๋ค.
config.vm.network "forwarded_port", guest: 80, host: 8080config.vm.network "private_network", ip: "192.168.33.10"
์ค์ ํ์ผ์ ๋ง์ง๋ง ์ค์ ์๋ end ์์ ๊ธฐ์ ํ๋ค. ์ค์ ์ ์ ์ฅํ์ผ๋ฉด โvagrant reloadโ๋ฅผ ์ ๋ ฅ
ํ์ฌ ๊ฐ์ ๋จธ์ ์ ์ฌ๊ธฐ๋ํ๋ค.
์ฒซ ๋ฒ์งธ ํ์ด ์ํ๋๋ฉด์ ๊ฐ์ ๋จธ์ ์ ์น ์๋ฒ ํฌํธ 80์ด ํธ์คํธ ๋จธ์ ์ ํฌํธ 8080์ ํ ๋น๋
๋ค. ๋ ๋ฒ์งธ ํ์ด ์ํ๋๋ฉด์ ๊ฐ์ ๋จธ์ ์ IP ์ฃผ์๊ฐ 192.168.33.10์ ํ ๋น๋๋ค.
ํธ์คํธ ๋จธ์ ๊ณผ ๊ฐ์ ๋จธ์ ๊ฐ์ ํด๋ ๊ณต์
ํธ์คํธ ๋จธ์ ๊ณผ ๊ฐ์ ๋จธ์ ๊ฐ์ ํด๋๋ฅผ ๊ณต์ ํ ์๋ ์๋ค. ํน๋ณํ ์ค์ ์์ด๋ ๊ฐ์ ๋จธ์
์ /vagrant ํด๋๊ฐ ํธ์คํธ ๋จธ์ ์ ์ค์ ํด๋(Vagrantfile์ด ์๋ ํด๋)์ ๊ณต์ ๋๋ค. ๋ฌผ๋ก , ํธ์ค
ํธ ๋จธ์ ์ ์์์ ํด๋๋ฅผ ๊ฐ์ ๋จธ์ ์ ์์์ ํด๋์ ๊ณต์ ํ ์๋ ์๋ค. ์ด๋ฅผ ์ํด ์ค์ ํ์ผ
Vagrantfile์ ๋ค์๊ณผ ๊ฐ์ด ๊ธฐ์ฌํ๋ค.
[์์]config.vm.synced_folder "ํธ์คํธ ๋จธ์ ์ ๊ฒฝ๋ก", "๊ฐ์ ๋จธ์ ์ ๊ฒฝ๋ก"
์ค์ ์ ํธ์งํ์ผ๋ฉด ๋์ผํ๊ฒ โvagrant reloadโ ๋ช ๋ น์ด๋ก ๊ฐ์ ๋จธ์ ์ ์ฌ๊ธฐ๋ํ๋ค.
03 ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ 21
![Page 44: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/44.jpg)
๊ฐ์ ๋จธ์ ์ ํด๋ ๊ณต์ ์ค์ ์ค ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ
ํน์ ์์ ์ค๋ช ํ ๋ฐฉ์์ผ๋ก ๊ณต์ ๊ฐ ๋์ง ์๋๋ค๋ฉด vbox๋ฅผ ์ฌ๋น๋ํจ์ผ๋ก์จ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๊ธฐ๋
ํ๋ค. ๊ฐ์ ๋จธ์ ์ ๋ก๊ทธ์ธํ ํ์ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ค.
$ sudo /etc/init.d/vboxadd setup
ํน์ ํธ์คํธ ๋จธ์ ์ ํ๋ฌ๊ทธ์ธ์ ์ค์นํด ๋๋ฉด ํธ๋ฆฌํ๋ค. ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ๊ฐ์ ๋จ๋ง์
Virtualbox-guest-addition์ ์ค์น ์ฌ๋ถ๋ฅผ ํ์ธํ ํ ํ์ ์์ ์๋์ผ๋ก ์ค์น๊ฐ ์ด๋ค์ง๋ค.
$ vagrant plugin install vagrant-vbguest
ํธ์คํธ ๋จธ์ ์์ ๊ฐ๋ฐํ๊ณ ๊ฐ์ ๋จธ์ ์์ ์คํ
ํธ์คํธ ๋จธ์ ๊ณผ ๊ฐ์ ๋จธ์ ๊ฐ์ ํด๋๊ฐ ๊ณต์ ๋๋ฉด ํธ๋ฆฌํ ์ ์ด ๋ง๋ค. ์๋ฅผ ๋ค๋ฉด, ํธ์คํธ ๋จธ์ ์ธ
์๋์ฐ(ํน์ Mac OS X)์์ ํ๋ก๊ทธ๋จ์ ์์ฑํ ํ์ ๊ฐ์ ๋จธ์ ์์ CentOS์์ ํ๋ก๊ทธ๋จ์
์คํํ๋ ๊ฒ์ด ์ฌ์์ง๋ค. ๋ํ, ์ด ์ฑ ์ ์์ ์ฝ๋๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ์์ถ์ ํด์ ํ๋ ๊ฒ์ ํธ
์คํธ ๋จธ์ ์์ ์ํํ๊ณ , ์คํ์ ๊ฐ์ ๋จธ์ ์์ ํ ์๋ ์๋ค.
โฒ Mac OS X์์ ๊ฐ๋ฐํ๊ณ ๊ฐ์ ๋จธ์ ์์ ์คํํ๋ ์ฅ๋ฉด
์ 1์ฅ ๊ฐ๋ฐ ํ๊ฒฝ22
![Page 45: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/45.jpg)
โ ์ด ์ ์์๋ ๊ฐ์ ๋จธ์ ์ ์ฌ์ฉํด์ ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๋ค.
โ Vagrant๋ฅผ ์ด์ฉํด์ ๋น๊ต์ ๋น ๋ฅด๊ฒ ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ตฌ์ถํ ์ ์์๋ค.
โ ์ด ์ฑ ์ ๋๋จธ์ง ๋ถ๋ถ์์๋ ์ด๋ฒ ์ฅ์์ ๊ตฌ์ถํ ๊ฐ์ ๋จธ์ ์์์ ๋์์ ํ์ธํด ๋๊ฐ๊ฒ ๋ค.
์ด ์ ์ ๋ง๋ฌด๋ฆฌ
03 ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ 23
![Page 46: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/46.jpg)
npm์ด๋?
npm์ Node.js์ ๋ชจ๋์ ๊ด๋ฆฌํ๋ ํจํค์ง ๊ด๋ฆฌ์๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Node.js์ ๋ชจ๋์ ์ค์นํ๋
๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ Node.js๋ก ๋ง๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์นํ ์๋ ์๋ค.
npm install๋ก ๋ชจ๋ ์ค์น
๊ทธ๋ฌ๋ฉด npm์ ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ๋ฒ์ ์์๋ณด์. ๋ชจ๋์ ์ค์นํ ๋์๋ โnpm installโ์ ์ฌ์ฉํ๋ค.
์ปค๋งจ๋ ๋ผ์ธ ์ฐฝ์์ ๋ค์๊ณผ ๊ฐ์ด ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ค.
[์์] npm์ผ๋ก ๋ชจ๋ ์ค์น
$ npm install (๋ชจ๋ ์ด๋ฆ)
์ 1์ฅ | ๊ฐ๋ฐ ํ๊ฒฝ
04Node.js ๋ชจ๋ ์ค์น
Node.js์ ์ด์ ์ ๋ง์ ๋ชจ๋์ด ๊ณต๊ฐ๋์ด ์๋ค๋ ์ ์ด๋ค. ํจํค์ง ๊ด๋ฆฌ์์ธ npm์ ์ฌ์ฉํ๋ฉด ๋ชจ๋์ ์ฝ๊ฒ ์ค
์นํ ์ ์๋ค. ์ฌ๊ธฐ์๋ npm์ ๊ดํด ์์ธํ ์์๋ณด์.
โ npm์ ์ฌ์ฉ๋ฒ
์ฃผ์ ํ์ต ๋ด์ฉ
โ npm โ nano
์ฃผ์ ๋๊ตฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ 1์ฅ ๊ฐ๋ฐ ํ๊ฒฝ24
![Page 47: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/47.jpg)
์๋ฅผ ๋ค๋ฉด, ์น์ฌ์ดํธ๋ก๋ถํฐ ํ์ผ์ด๋ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ค๋ฐ์ ๋์๋ request ๋ชจ๋์ ๋ง์ด ์ฌ์ฉํ
๋ค. request ๋ชจ๋์ ์ค์นํ๊ธฐ ์ํด์๋ ๋ค์๊ณผ ๊ฐ์ด ์ ๋ ฅํ๋ฉด ๋๋ค.
$ npm install request
๊ทธ๋ฌ๋ฉด ๋ค์๊ณผ ๊ฐ์ ํ๋ฉด์ ๋ณผ ์ ์๋ค.
โฒ npm ์คํ ํ๋ฉด
์ ํ๋ฉด์์ ๋ณผ ์ ์๋ฏ์ด npm install์ ์คํํ๋ฉด ๊ทธ ๋ชจ๋์์ ์ฌ์ฉํ๋ ๋ค๋ฅธ ๋ชจ๋(์ฆ, ์์กด
๋ชจ๋)๋ ๊ฐ์ด ์ค์น๋๋ค. ๋ฐ๋ผ์ request ๋ชจ๋์ ์ฌ์ฉํ๊ธฐ ์ํด mime-types ๋ชจ๋๊ณผ form-data
๋ชจ๋์ ๋ฐ๋ก ์ค์นํ์ง ์์๋ ๋๋ค. ์ด๊ฒ์ npm์ ์ด์ฉํ ๋์ ์ปค๋ค๋ ์ฅ์ ์ผ๋ก ๋งค์ฐ ํธ๋ฆฌํ
๊ธฐ๋ฅ์ด๋ค.
๋ชจ๋์ด ์ค์น๋๋ ๊ฒฝ๋ก
๊ทธ๋ฌ๋ ์ฃผ์ํด์ผ ํ ์ ์ด ์๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก โnpm installโ๋ก ๋ชจ๋์ ์ค์นํ๋ฉด ์ด ๋ช ๋ น์ ์คํํ
ํ์ฌ ๋๋ ํฐ๋ฆฌ์ ๋ชจ๋์ด ๋ค์ด๋ก๋๋๋ค. ์ ํํ๊ฒ๋ ํ์ฌ ๋๋ ํฐ๋ฆฌ์ node_modules๋ผ๋ ๋๋
ํฐ๋ฆฌ๊ฐ ๋ง๋ค์ด์ง๊ณ , ๊ทธ ์์ ๋ชจ๋์ด ๋ค์ด๋ก๋๋๋ค.
04 Node.js ๋ชจ๋ ์ค์น 25
![Page 48: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/48.jpg)
โฒ ๋ชจ๋์ด ์ค์น๋ ๊ตฌ์กฐ
๊ทธ๋์ ํ ๋ฒ ๋ชจ๋์ ์ค์นํ์ด๋ ๋ค๋ฅธ ๋๋ ํฐ๋ฆฌ์ ๋ฐฐ์น๋ ํ๋ก์ ํธ์์๋ ๊ทธ ๋ชจ๋์ ์ ๊ทผํ
์ ์๋ค. ์ฌ๊ธฐ์ ์ ์ ์ ๋ฆฌํด ๋ณด์. ๋ค์๊ณผ ๊ฐ์ ๋๋ ํฐ๋ฆฌ ๊ตฌ์ฑ์ผ๋ก ๋ ๊ฐ์ ํ๋ก๊ทธ๋จ์ด ์๋ค
๊ณ ํ์.
+ <root>|---+ <ProjectA>| |---+ <node_modules>| |--- program-a.js| |---+ <ProjectB>| |--- program-b.js
<Project A>์ program-a.js์์ request ๋ชจ๋์ ์ฌ์ฉํ๊ธฐ ์ํด Project A์ ๋๋ ํฐ๋ฆฌ์์
npm install request๋ฅผ ์คํํ๋ค๊ณ ํ์. ๊ทธ๋ฌ๋ฉด program-a.js์์๋ request ๋ชจ๋์ ์ฌ์ฉํ ์
์๊ฒ ๋๋ค. ๊ทธ๋ฌ๋ Project B์ program-b.js์์๋ request ๋ชจ๋์ ๋ฐ๊ฒฌํ ์ ์์ผ๋ฏ๋ก Project
B์ ๋๋ ํฐ๋ฆฌ์์ ๋ค์ request ๋ชจ๋์ ์ค์นํด์ผ ํ๋ ๊ฒ์ด๋ค.
๊ธ๋ก๋ฒ ์ค์น -g
๊ทธ๋ฌ๋ ์์ฃผ ์ฌ์ฉ๋๋ ๋ชจ๋์ ๋งค๋ฒ ์ค์นํ๋ ๊ฒ์ ์ฑ๊ฐ์ ์ผ์ด๋ค. ๋ชจ๋ ํ๋ก์ ํธ ๋ฐ ํด๋์์
์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด ๋ชจ๋์ ์ค์นํ ๋ -g ์ต์ ์ ๋ถ์ธ๋ค. ๊ทธ๋ฌ๋ฉด ๊ธ๋ก๋ฒํ ๊ฒฝ๋ก์ ๋ชจ๋์ด ์ค์น๋๋ค.
์ 1์ฅ ๊ฐ๋ฐ ํ๊ฒฝ26
![Page 49: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/49.jpg)
# ๋ชจ๋์ ๊ธ๋ก๋ฒํ๊ฒ ์ค์น
$ npm install โg (๋ชจ๋ ์ด๋ฆ)
-g ์ต์ ์ ๋ถ์ฌ์ ์ค์นํ๋ ๊ฒ์ ๊ธ๋ก๋ฒ ์ค์น๋ผ๊ณ ํ๊ณ , ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ๋ฅผ ๋ก์ปฌ ์ค์น๋ผ๊ณ ํ
๋ค. ๊ธ๋ก๋ฒ ์ค์น๋ฅผ ํ ๋์ ์ฃผ์์ ์ ๋๋ถ๋ถ์ ํ๊ฒฝ์์ ๊ด๋ฆฌ์ ๊ถํ์ด ํ์ํ๋ค๋ ์ ์ด๋ค.
CentOS๋ Mac OS X์์๋ ๋ช ๋ น์ด ์์ sudo๋ฅผ ๋ถ์ฌ์ ๊ด๋ฆฌ์ ๊ถํ์ผ๋ก ๋ช ๋ น์ ์คํํ ์
์๋ค.
# ๊ด๋ฆฌ์ ๊ถํ์ผ๋ก ๊ธ๋ก๋ฒ ์ค์น
$ sudo npm install โg (๋ชจ๋ ์ด๋ฆ)
sudo๋ก ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด ํจ์ค์๋๋ฅผ ๋ฌผ์ด ๋ณด๋๋ฐ ์ด๋ ๊ด๋ฆฌ์ ํจ์ค์๋๋ฅผ ์ ๋ ฅํ๋๋ก ํ๋ค.
์ฌ๋ฐ๋ฅธ ํจ์ค์๋๋ก ๊ด๋ฆฌ์ ๊ถํ์ด ํ์ธ๋๋ฉด ๊ด๋ฆฌ์ ๊ถํ์ผ๋ก ๋ช ๋ น์ด๊ฐ ์คํ๋๋ค.
๊ธ๋ก๋ฒ ์ค์น ์ PATH์ ์ฃผ์
npm์ ํตํด ๋ชจ๋์ ๊ธ๋ก๋ฒํ๊ฒ ์ค์นํ๋ฉด CentOS5์์๋ /usr/lib/node_modules์ ์ค์น๋๋ค.
Mac OS X์ Homebrew๋ก ์ค์นํ ๊ฒฝ์ฐ์๋ /usr/local/lib/node_moduels์ ์ค์น๋๋ค. ์ด๋์
๋ชจ๋์ด ์ค์น๋๋์ง๋ ๋ค์ ๋ช ๋ น์ด๋ก ํ์ธํ ์ ์๋ค.
# ๊ธ๋ก๋ฒ ์ค์น ๊ฒฝ๋ก ํ์ธ
$ npm root -g
๊ทธ๋ฐ๋ฐ npm์ผ๋ก ๊ธ๋ก๋ฒํ๊ฒ ์ค์นํ ๋ชจ๋์ Node.js๊ฐ ์ฐพ์ ์ ์๋ค๋ฉฐ ๋ค์๊ณผ ๊ฐ์ ์๋ฌ ๋ฉ์
์ง๊ฐ ํ์๋๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
Error: Cannot find module '(๋ชจ๋ ์ด๋ฆ)'
์ด๊ฒ์ ํด๋น ๋ชจ๋์ ์์ง ์ค์นํ์ง ์์๊ฑฐ๋ Node.js์์ npm์ผ๋ก ๊ธ๋ก๋ฒํ๊ฒ ์ค์นํ ๋ชจ๋์
์ฐพ์ ์ ์์ ๋ ๋ฐ์ํ๋ ์๋ฌ ๋ฉ์์ง๋ค. ๊ทธ๋ ๋ค๋ฉด Node.js๊ฐ ๋ชจ๋์ ์ฐพ์ ๋ ์ด๋ค ๊ฒฝ๋ก๋ฅผ ๊ฒ
์ํ ๊น? ๋ค์ ๋ช ๋ น์ด๋ฅผ ํตํด ํ์ธํ ์ ์๋ค.
04 Node.js ๋ชจ๋ ์ค์น 27
![Page 50: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/50.jpg)
$ node โe "console.log(global.module.paths)"
CentOS์์๋ ๋ค์๊ณผ ๊ฐ์ด ๋ํ๋๋ค.
[ '/home/vagrant/test/node_modules', '/home/vagrant/node_modules', '/home/node_modules', '/node_modules' ]
์ ๋ณด๋ฉด ํ์ฌ ์์ ๋๋ ํฐ๋ฆฌ์ node_modules ํด๋, ๊ทธ๋ฆฌ๊ณ ๊ทธ ์์ ํด๋์ node_modules ํด๋,
๋ค์ ๊ทธ ์์ ํด๋์ node_modules ํด๋โฆ ์ด๋ฌํ ์์ผ๋ก ์ฐจ๋ก๋๋ก ๋ชจ๋์ ๊ฒ์ํ๋ ๊ฒ์ ์
์ ์๋ค. ์ด์ ๋ณ๊ฐ๋ก Node.js๋ ํ๊ฒฝ ๋ณ์ NODE_PATH์ ์ ์ฅ๋ ๊ฒฝ๋ก๋ ๊ฒ์ํ๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, npm์ ๊ธ๋ก๋ฒ ๋ชจ๋ ์ค์น ๊ฒฝ๋ก๋ฅผ ํ๊ฒฝ ๋ณ์ NODE_PATH์ ๋ฑ๋กํ๋ฉด Node.js์
์ ๋ชจ๋์ ์ฐพ์ ์ ์๊ฒ ๋๋ค.
๋ค์์ ๊ฐ์ ๋จธ์ ์ CentOS์์ โnpm root โgโ๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ค.
$ npm root -g/home/vagrant/.nvm/versions/node/v0.12.4/lib/node_modules
๋ฆฌ๋ ์ค(CentOS)๋ Mac OS X์์ ํ๊ฒฝ ๋ณ์ ๊ฐ์ ๋ฑ๋กํ๋ ค๋ฉด ์ฌ์ฉ์์ ํ ๋๋ ํฐ๋ฆฌ์ ์
๋ โ~/.bash_profileโ(๊ฐ์ ๋จธ์ ํ๊ฒฝ์์๋ โ/home/vagrant/.bash_profileโ)์ ํธ์งํ๋ค. ๋ค์๊ณผ ๊ฐ์ด
NODE_PATH์ npm์ ๊ธ๋ก๋ฒ ์ค์น ๊ฒฝ๋ก๋ฅผ ์ง์ ํ๋ค.
# ํ๊ฒฝ ๋ณ์ NODE_PATH ์ค์
export NODE_PATH=/home/vagrant/.nvm/versions/node/v0.12.4/lib/node_modules
ํ๊ฒฝ ๋ณ์ NODE_PATH๋ฅผ ์ฐธ์กฐํ๋ ๊ฒ์ ์๋์ฐ์ Node.js๋ ๋ง์ฐฌ๊ฐ์ง๋ค. ์๋์ฐ์์ ํ๊ฒฝ
๋ณ์๋ฅผ ํธ์งํ๋ ๊ฒ์ โ์ ์ดํ ์์คํ ๋ฐ ๋ณด์ ์์คํ ๊ณ ๊ธ ์์คํ ์ค์ ํ๊ฒฝ ๋ณ์โ
์์ ๊ฐ๋ฅํ๋ค.
์ 1์ฅ ๊ฐ๋ฐ ํ๊ฒฝ28
![Page 51: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/51.jpg)
CentOS์ nano ์๋ํฐ ์ค์น
๊ทธ๋ฐ๋ฐ CentOS์์ ํ์ผ์ ํธ์งํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น? ๋ณดํต์ ํ ์คํธ ์๋ํฐ์ธ vi๋ฅผ ์ฌ์ฉ
ํ๋ค. ๊ทธ๋ฌ๋ vi์ ์ฌ์ฉ๋ฒ์ ์ด๋ณด์์๊ฒ ๋ค์ ์ด๋ ค์ธ ์ ์๋ค. ํ๋ฒ vi๋ฅผ ์คํ์์ผ ๋ณด๋ฉด ๋ฌธ์
๋ฅผ ์ ๋ ฅํ๋ ๊ฒ๋, vi ์์ฒด๋ฅผ ์ข ๋ฃํ๋ ๊ฒ๋ ๋ชปํ ์ ์๋ค. ๋ง์ฝ, vi๊ฐ ์คํ ์ค์ด๋ผ๋ฉด โ:q!โ์ ์
ํฐ๋ฅผ ์ ๋ ฅํด์ ์ข ๋ฃ์ํจ๋ค.
์ฌ๊ธฐ์๋ vi ๋์ ์ ๋ฉ๋ชจ์ฅ์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ nano ์๋ํฐ๋ฅผ ์๊ฐํ๊ณ ์ ํ๋ค. CentOS์์
๋ ๋ค์ ๋ช ๋ น์ด๋ฅผ ํตํด nano๋ฅผ ์ค์นํ ์ ์๋ค.
$ sudo yum install nano
์ค์น๊ฐ ์๋ฃ๋๋ฉด โ~/.bash_profileโ์ ํธ์งํด ๋ณด์. ๋ค์๊ณผ ๊ฐ์ด ์ ๋ ฅํ๋ค.
$ nano ~/.bash_profile
ํธ์ง์ด ์๋ฃ๋์์ผ๋ฉด Ctrl ํค๋ฅผ ๋๋ฅด๋ฉด์ X ํค๋ฅผ ๋๋ฅธ๋ค. ๊ทธ๋ฌ๋ฉด ํธ์งํ ํ ์คํธ๋ฅผ ์ ์ฅํ ์ง ์ฌ
๋ถ๋ฅผ ๋ฌป๋๋ฐ Y ํค์ Enter ํค๋ฅผ ๋๋ฅธ๋ค. ํ์ผ ์ด๋ฆ์ ๋ฌผ์ผ๋ฉด ๊ทธ๋๋ก Enter ํค๋ฅผ ๋๋ฌ ๋ฎ์ด ์ฐ
๋๋ก ํ๋ค.
โฒ nano ์๋ํฐ ์คํ ํ๋ฉด
04 Node.js ๋ชจ๋ ์ค์น 29
![Page 52: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/52.jpg)
nano ์๋ํฐ์ ํ๋ฉด ํ๋จ์๋ ๋จ์ถํค๋ค์ด ๋์ด๋์ด ์๋ค. ์๋ฅผ ๋ค์ด โฬ Xโ๋ Ctrl ํค๋ฅผ ๋๋ฅด๋ฉด
์ Xํค๋ฅผ ๋๋ฅธ๋ค๋ ๋ป์ด๋ค.
๋ชจ๋ ์ญ์
๋ชจ๋์ ์ค์น ๋ฐฉ๋ฒ์ ์ด์ด ์ ๊ฑฐ ๋ฐฉ๋ฒ๋ ์์๋ณด์. ๋ชจ๋์ด ๋ถํ์ํ๊ฒ ๋์์ ๋๋ โnpm
uninstallโ๋ก ์ญ์ ํ ์ ์๋ค.
# ๋ชจ๋ ์ญ์
$ npm uninstall (๋ชจ๋ ์ด๋ฆ)
โ ์ด ์ ์์๋ Node.js์ ํจํค์ง ๋งค๋์ ์ธ npm์ ๊ดํด ์์๋ณด์๋ค.
โ ๋ชจ๋์ ์ค์น์ ์ ๊ฑฐ์ ๊ด๋ จํ์ฌ ์ฃผ์ํด์ผ ๋ ๋ถ๋ถ์ ๊ดํด ์์๋ณด์๋ค.
โ ๊ธ๋ก๋ฒ ์ค์น์ ๊ดํด์๋ ์ ์ดํดํด ๋์ด์ผ ํ๋ค.
์ด ์ ์ ๋ง๋ฌด๋ฆฌ
์ 1์ฅ ๊ฐ๋ฐ ํ๊ฒฝ30
![Page 53: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/53.jpg)
์๋ฐ์คํฌ๋ฆฝํธ ์์ฑ์ ํ์ํ ์๋ํฐ๋?
๊ฒฐ๋ก ๋ถํฐ ๋งํ๋ฉด, ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๋ ๋ฐ ํน๋ณํ ์๋ํฐ๊ฐ ํ์ํ ๊ฒ์ ์๋๋ค. ๋ง์์
๋๋ ํ ์คํธ ์๋ํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ทธ๋ง์ด๋ค. ์ด ์ฑ ์ ๋ง์ ํ๋ก๊ทธ๋จ์ ์ปค๋งจ๋ ๋ผ์ธ์์ ์คํํ
๋ ๊ฒ์ผ๋ก ๋์ด ์๋ค. ํ ์คํธ ์๋ํฐ์์ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ฝ๋๋ฅผ ํ์ธํ ํ, ์ปค๋งจ๋ ๋ผ์ธ์์
์คํํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํด ๋ณด๋ฉด ๋๋ค. ๊ทธ๋์ ํ ์คํธ ์๋ํฐ์ ์๊ตฌ๋๋ ๊ฒ์ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฌธ
๋ฒ์ ๋ฐ๋ผ ์ปฌ๋ฌ๋ง์ด ๋๋ ๊ฒ๊ณผ ์๋์์ฑ ๊ธฐ๋ฅ ์ ๋๊ฐ ๋๊ฒ ๋ค. ์ด๋ฒ ์ฅ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ์
๊ฐ๋ฐ ์์ฐ์ฑ์ ํฅ์์์ผ ์ค ์ฌ๋ฌ ๊ฐ์ง ๊ธฐ๋ฅ์ ๊ฐ์ถ, ๊ทผ๋์ ์ฃผ๋ชฉ๋ฐ๋ ์๋ํฐ๋ค์ ์๊ฐํ๊ฒ ๋ค.
์ 1์ฅ | ๊ฐ๋ฐ ํ๊ฒฝ
05๊ฐ๋ฐ ์์ฐ์ฑ์ ๋์ฌ ์ค ๋ชจ๋ํ ์๋ํฐ ์๊ฐ
์ด ์ ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์ ํธ๋ฆฌํ ํ ์คํธ ์๋ํฐ๋ฅผ ์๊ฐํ๋ค. ๋ง์ ํ ์คํธ ์๋ํฐ ์ค์์๋ ์์ฆ์
ํนํ ์ฃผ๋ชฉ๋ฐ๋ ๋ชจ๋ํ ์๋ํฐ๋ฅผ ์๊ฐํ๋๋ก ํ๊ฒ ๋ค. ์ฑ ์์ ํ๋ก๊ทธ๋จ์ ์์ ํ๊ณ ์คํํด ๋ณด๋ ๋ฐ ๋์์ด
๋ ๊ฒ์ด๋ค.
โ ๋ชจ๋ํ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ ์๋ํฐ ์๊ฐ
์ฃผ์ ํ์ต ๋ด์ฉ
โ Atom โ Sublime Text โ Brackets โ WebStorm โ NetBeans
์ฃผ์ ๋๊ตฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
05 ๊ฐ๋ฐ ์์ฐ์ฑ์ ๋์ฌ ์ค ๋ชจ๋ํ ์๋ํฐ ์๊ฐ 31
![Page 54: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/54.jpg)
Atom โ ํ๋ถํ ํ๋ฌ๊ทธ์ธ์ด ๋งค๋ ฅ
Atom ์๋ํฐ
[URL] https://atom.io/[OS] ์๋์ฐ/Mac OS X/๋ฆฌ๋ ์ค
[๋ผ์ด์ ์ค] MIT License
Atom(์ํฐ)์ ์คํ ์์ค๋ก ๊ฐ๋ฐ๋๊ณ ์๋ ํ ์คํธ ์๋ํฐ๋ค. ์ฃผ๋ก ๊นํ๋ธ(GitHub)์์ ๊ฐ๋ฐ๋๊ณ
์๋ค. Atom์ ์ต๋ ์ฅ์ ์ ๊ตฌ๊ธ ํฌ๋กฌ(Google Chrome)์ ๋ชจ์ฒด๊ฐ ๋๊ณ ์๋ ํฌ๋ก๋ฏธ์(Chromium)
์ ๊ธฐ๋ฐ์ผ๋ก ํ ์๋ํฐ๋ผ๋ ๊ฒ์ด๋ค. ์ฆ, ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์คํธ ์๋ํฐ๊ฐ ๋ง๋ค์ด์ง ๊ฒ
์ด๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํฌํจํ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํค์๋ ๊ฐ์กฐ ๊ธฐ๋ฅ์ ์ง์ํ๋ฉฐ, ์๋
์์ฑ ๊ธฐ๋ฅ๋ ์์ด ํธ๋ฆฌํ๋ค. ๋ํ, ๋ค์ํ ํ์ฅ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๋ค.
โฒ Atom ์๋ํฐ โ ํ๋ฉด ๋ถํ ๋ฐ ํญ ๋ถํ ๊ธฐ๋ฅ ์ง์
์ 1์ฅ ๊ฐ๋ฐ ํ๊ฒฝ32
![Page 55: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/55.jpg)
โฒ Atom ์๋ํฐ โ ํค์๋ ๊ฐ์กฐ๋ ์๋์์ฑ ๊ธฐ๋ฅ ์ง์
Atom์ ํ๋ฌ๊ทธ์ธ ์ถ๊ฐ
Atom์ ํจํค์ง(ํ๋ฌ๊ทธ์ธ)๋ ๋งค์ฐ ํ๋ถํ๋ฉฐ, ์ํ๋ ํ๋ฌ๊ทธ์ธ์ ๊ฒ์ํ ํ Install ๋ฒํผ์ ํด๋ฆญ
ํ๋ ๊ฒ๋ง์ผ๋ก ์ฝ๊ฒ ์ถ๊ฐํ ์ ์๋ค. ํ๋ฌ๊ทธ์ธ์ ์ถ๊ฐํ๋ ค๋ฉด ์๋์ฐ์์๋ ๋ฉ์ธ ๋ฉ๋ด์ โFile
Settings Installโ์ ํด๋ฆญํ๋ค. Mac OS X์์๋ ๋ฉ๋ด์ โAtom Preference Installโ์ ํด
๋ฆญํ๋ค.
โminimapโ ํ๋ฌ๊ทธ์ธ์ ์ค
โฒ Atom ์๋ํฐ โ ํจํค์ง ๊ฒ์ ํ๋ฉด
์นํ๋ฉด ์ ์ฒด ์์ค์ ๋ฏธ๋ฆฌ
๋ณด๊ธฐ๋ฅผ ๋ฏธ๋๋งต์ ํตํด ๋ณผ
์ ์๋ค. ๋ํ, โfile-iconsโ
ํ๋ฌ๊ทธ์ธ์ ์ค์นํ๋ฉด ํธ
๋ฆฌ ๋ทฐ ์์ ์์ด์ฝ์ ํ
์ผ์ ์ข ๋ฅ์ ๋ฐ๋ผ ๋ฐ๊ฟ
์ ์๋ค. ๊ทธ ์ธ์๋ ๋ฐฐ์
๊ด๋ จ ํ ๋ง๋ ํจํค์ง๋ก ๋ฐฐ
ํฌ๋๊ณ ์์ด์ ์ฝ๊ฒ ํ ๋ง
๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
05 ๊ฐ๋ฐ ์์ฐ์ฑ์ ๋์ฌ ์ค ๋ชจ๋ํ ์๋ํฐ ์๊ฐ 33
![Page 56: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/56.jpg)
Sublime Text โ ํ์์ ์ธ ์ปค์คํฐ๋ง์ด์ง ๊ธฐ๋ฅ์ผ๋ก ์ฌ๋์ ๋น ์ง๊ฒ ๋๋ค๋ ํ์ ์ ์๋ํฐ
Sublime Text [URL] http://www.sublimetext.com/ [OS] ์๋์ฐ/Mac OS X/๋ฆฌ๋ ์ค
[๋ผ์ด์ ์ค] (์ ๋ฃ) 70๋ฌ๋ฌ
Sublime Text(์๋ธ๋ผ์ ํ ์คํธ)๋ ๊ฐ๋ณ๊ณ ์ปค์คํฐ๋ง์ด์ฆ๊ฐ ๊ฐ๋ฅํ์ฌ ์ธ๊ธฐ๊ฐ ๋์ ์๋ํฐ๋ค. ์๋ฐ
์คํฌ๋ฆฝํธ๋ฟ๋ง ์๋๋ผ ๋ง์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ง์ํ๋ค. ๋ธ๋ก๊ทธ์ ์๊ฐ ๊ธฐ์ฌ๋ฅผ ๋ณด๋ฉด ์น ๊ฐ๋ฐ,
๋ฃจ๋น ๋ฑ์ LL ์ธ์ด(๊ฐ๋ณ๊ณ ๋น ๋ฅธ ์คํฌ๋ฆฝํธ ์ธ์ด) ๊ฐ๋ฐ๋ก ๋ง์ด ์ฌ์ฉ๋๊ณ ์๋ค๊ณ ํ๋ค. ์๋์์ฑ๊ณผ
๊ฐ์ข ํ๋ก๊ทธ๋จ ์ธ์ด์ ํค์๋ ๊ฐ์กฐ ๊ธฐ๋ฅ ๋ฑ ํ๋ก๊ทธ๋๋ฐ์ ์ด์ ์ ๋ ํ ์คํธ ํธ์ง ๊ธฐ๋ฅ์ด ๋งค๋ ฅ
์ ์ด๋ค. ์์์ ํ์ผ, ์ฌ๋ฒ, ํ์ ๋ฐ๋ก ์ด ์ ์๋๋ก ๊ณ ์๋์ด ์๋ค. 70๋ฌ๋ฌ์ ์ ๋ฃ ํ ์คํธ ์
๋ํฐ์ด์ง๋ง, ์ ์ฅํ ๋ ๋ผ์ด์ ์ค ๊ตฌ์ ๋ฉ์์ง๊ฐ ๊ฐ๋ ํ์๋๋ ๊ฒ ์ด์ธ์ ๊ธฐ๋ฅ ์ ํ์ด ์์ผ๋
๋ง์๊ป ์ฌ์ฉํด ๋ณผ ์ ์๋ค.
โฒ Sublime Text ์คํ ํ๋ฉด
์ 1์ฅ ๊ฐ๋ฐ ํ๊ฒฝ34
![Page 57: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/57.jpg)
Sublime Text์ ํ๋ฌ๊ทธ์ธ์ ์ถ๊ฐ
Sublime Text๋ ํจํค์ง๋ฅผ ์ค์นํจ์ผ๋ก์จ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๋ค. ์๊ณ ์งํ ์์ (2015๋ 6
์) 3,039๊ฐ์ ํจํค์ง๊ฐ ์ค๋น๋์ด ์๋ค. ๊ทธ๋ฌ๋ Sublime Text๋ ๊ธฐ๋ณธ์ผ๋ก ํจํค์ง ์ค์น ๊ธฐ๋ฅ์ด
์ค๋น๋์ด ์์ง ์๋ค. ๋ค์์ ์น์ฌ์ดํธ๋ฅผ ์ด์ด ์ปค๋งจ๋๋ฅผ ๋ณต์ฌํ๊ณ , Sublime Text์ ์ฝ์์ ์
๋ ฅํด์ผ ํ๋ค.
Package Controlhttps://packagecontrol.io/installation
์ฝ์์ ์ด๋ ค๋ฉด ๋ฉ๋ด์์ View Show Console์ ํด๋ฆญํ๋ค. ์๋ฅผ ๋ค์ด, ์๋์์ฑ ๊ธฐ๋ฅ์ผ๋ก
๊ฐ๋ฐ์ ์ ์ฉํ ํจํค์ง์ธ SublimeCodeIntel์ ์ค์นํ๋ค๊ณ ํ์. ํจํค์ง๋ฅผ ์ค์นํ๋ ์์๋ ๋ค
์๊ณผ ๊ฐ๋ค.
1. ๋ฉ๋ด์์ โPreferences Package Controlโ์ ํด๋ฆญํ๋ค.
2. โPackage Control: Install Packageโ๋ฅผ ์ ๋ ฅํ๊ณ , Enter ํค๋ฅผ ๋๋ฅธ๋ค.
3. ๊ทธ๋ฌ๋ฉด ํจํค์ง ์ค์น ํ๋ฉด์ด ๋์ค๋๋ฐ ํจํค์ง ์ด๋ฆ์ธ โSublimeCodeIntelโ์ ์ ๋ ฅํ์ฌ ์ค์นํ๋ค.
4. ํ์์ ๋ฐ๋ผ ์๋ํฐ๋ฅผ ์ฌ์์ํ๋ค.
05 ๊ฐ๋ฐ ์์ฐ์ฑ์ ๋์ฌ ์ค ๋ชจ๋ํ ์๋ํฐ ์๊ฐ 35
![Page 58: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/58.jpg)
โฒ Sublime Text ํจํค์ง ์ค์น
Sublime Text์๋ ๋ง์ ํจํค์ง๊ฐ ์ค๋น๋์ด ์์ด ๊ฐ๋จํ ๋ช ๋ น ์ ๋ ฅ์ผ๋ก ๊ธฐ๋ฅ์ ํ์ฅํ ์
์๋ค.
Brackets โ HTML ํธ์ง์ ํนํ๋ ๋น๋๋ ์๋ํฐ
Brackets[URL] http://brackets.io/[OS] Windows / Mac OS X / Linux[๋ผ์ด์ ์ค] MIT License
Brackets(๋ธ๋ํท)์ ํฌํ ์ต, ์ผ๋ฌ์คํธ๋ ์ดํฐ๋ก ์ ๋ช ํ ์ด๋๋น์ ์ฃผ๋๋ก ๊ฐ๋ฐ ์ค์ธ ์คํ ์์ค ํ
์คํธ ์๋ํฐ๋ค. ์น ๊ฐ๋ฐ์ ํนํ๋ ์๋ํฐ๋ก์ ์๋ฐ์คํฌ๋ฆฝํธ์ ํค์๋ ์กฐํ, ์ฝ๋ ์์ฑ๊ณผ ๊ฐ์
๊ธฐ๋ฅ์ ๊ฐ์ถ๊ณ ์๋ค. ๊ฒ๋ค๊ฐ ๋ผ์ด๋ธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊ธฐ๋ฅ๋ ์๋ค. ์ด๋ ํธ์งํ HTML ํ์ผ์ ๋ฐ๋ก
๋ธ๋ผ์ฐ์ ์์ ํ์ธํ ์ ์์ ๋ฟ๋ง ์๋๋ผ, ์ปค์๋ฅผ HTML ์ฝ๋์ ํน์ ๋ถ๋ถ์ผ๋ก ์ด๋์ํค๋ฉด
๋ธ๋ผ์ฐ์ ์์ ๊ทธ ๋ถ๋ถ์ด ๊ฐ์กฐ๋์ด ๋งค์ฐ ํธ๋ฆฌํ๋ค.
์ 1์ฅ ๊ฐ๋ฐ ํ๊ฒฝ36
![Page 59: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/59.jpg)
โฒ Brackets ํ๋ฉด
โฒ Brackets ๋ผ์ด๋ธ ํ๋ฆฌ๋ทฐ ํ๋ฉด
๊ทธ๋ฆฌ๊ณ Adobe Photoshop CC ๋ฑ์์ ์ฌ์ฉํ ์ ์๋ Extract ๊ธฐ๋ฅ์ Brackets์์๋ ์ฌ์ฉํ
์ ์๋ ๊ฒ๋ ์ฅ์ ์ค ํ๋๋ค. ๋ํ, ์ญ์๋ ํ์ฅ ๊ธฐ๋ฅ ๋งค๋์ ๊ฐ ์์ด์ ๋ฐฐ์ ํ ๋ง๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ
๋ ๋ค์ํ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๋ค.
ํต ํธ์ง โ ํธ๋ฆฌํ ์ธ๋ผ์ธ ์๋ํฐ
์ด ์ฑ ์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์ ์ฃผ๋ก ๋ค๋ฃจ๋ฏ๋ก ์ด ์ฑ ์ ์ฝ๋ ๋์์๋ ๊ทธ๋ค์ง ์ฌ์ฉํ ์ผ์ ์์ง
๋ง, Brackets์ ๋งค์ฐ ์ฐ์ํ ๊ธฐ๋ฅ ํ๋๋ฅผ ์๊ฐํ๊ณ ์ ํ๋ค. ๊ทธ๊ฒ์ ์ธ๋ผ์ธ ์๋ํฐ๋ค. <h3> ๋ฑ
์ ํ๊ทธ์ ์ปค์๋ฅผ ๋ ์ํ์์ ๋ฉ๋ด์ โ๋ค๋น๊ฒ์ดํธ ํต ํธ์งโ์ ํด๋ฆญํด ๋ณด์. ๊ทธ๋ฌ๋ฉด ๋ค๋ฅธ ํ
์ผ์ ์ ์ธํ CSS์ ํด๋น ๋ถ๋ถ(<h3>์ ์ ์)์ด ํ์ ์๋ํฐ๋ก ํ์๋๋ค. ์ด ํ์ ๋ ๋ถ๋ถ์ ํธ
์งํ๋ฉด CSS ํ์ผ์ ๋ด์ฉ๋ ๋ณ๊ฒฝ๋๋ค. ์ด ์ธ์๋ ๋ผ์ด๋ธ ํ๋ฆฌ๋ทฐ๋ ํต ํธ์ง ๋ฑ Brackets์๋
05 ๊ฐ๋ฐ ์์ฐ์ฑ์ ๋์ฌ ์ค ๋ชจ๋ํ ์๋ํฐ ์๊ฐ 37
![Page 60: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/60.jpg)
HTML ํธ์ง์ ํนํ๋ ๋ค์ํ ๊ธฐ๋ฅ์ ๊ฐ์ถ๊ณ ์๋ค.
โฒ Brackets์ ํธ๋ฆฌํ ์ธ๋ผ์ธ ์๋ํฐ ๊ธฐ๋ฅ
ํตํฉ ๊ฐ๋ฐ ํ๊ฒฝ์์์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ
์ง๊ธ๊น์ง ์๊ฐํ ์๋ํฐ๋ค ์ด์ธ์๋ PC ์์์ ๋ง์ด ์ฌ์ฉํ์ง๋ง WebStorm(์น์คํฐ),
NetBeans(๋ท๋น์ฆ), Eclipse(์ดํด๋ฆฝ์ค)์ ๊ฐ์ ํตํฉ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ๋ ์๋ค. ์ฌ์ค, ์ง
๊ธ๊น์ง ์๊ฐํ ํ ์คํธ ์๋ํฐ ์ด์์ผ๋ก ์ฝ๋ ๋ณด์ ๊ธฐ๋ฅ์ด ๋ฐ์ด๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋์ ํ
๋ก๊ทธ๋๋ฐ ์ธ์ด๋ผ์ ์ข์ฒ๋ผ ์ฝ๋ ๋ณด์์ด ์ด๋ ต๋ค. ๊ทธ๋ฌ๋ ์ง๊ธ๋ถํฐ ์๊ฐํ๋ ํตํฉ ๊ฐ๋ฐ ํ๊ฒฝ์
๊ฝค ํผ๋ฅญํ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ ๋ณด์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ์ค๋ค.
์ 1์ฅ ๊ฐ๋ฐ ํ๊ฒฝ38
![Page 61: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/61.jpg)
WebStorm โ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์ ํนํ๋ ๊ฐ๋ฐ ํ๊ฒฝ
WebStorm[URL] https://www.jetbrains.com/Webstorm/[OS] Windows / Mac OS X / Linux[๋ผ์ด์ ์ค] ๊ฐ์ธ 5.9๋ฌ๋ฌ/์, ์์ ์ฉ 12.9๋ฌ๋ฌ/์ (30์ผ๊ฐ ๋ฌด๋ฃ ์ฌ์ฉ ๊ฐ๋ฅ)
โฒ ์ฐ์ํ ์๋์์ฑ ๊ธฐ๋ฅ์ WebStorm
WebStorm์ ํตํฉ ๊ฐ๋ฐ ํ๊ฒฝ์ธ IntelliJ(์ธํ ๋ฆฌ์ ์ด)์์ ์น ๊ฐ๋ฐ์ ํนํ๋ ๊ธฐ๋ฅ๋ง์ ๋ชจ์ ๊ฒ
์ผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์ ํนํ๋ ๊ฐ๋ฐ ํ๊ฒฝ์ด๋ค. ์ด ์ฑ ์์๋ ์ฃผ๋ก Node.js๋ฅผ ์ฌ์ฉํ๋๋ฐ
Node.js๋ก ๊ฐ๋ฐํ ๋ ๋์์ด ๋ ๊ธฐ๋ฅ์ ๋ง์ด ๊ฐ์ถ๊ณ ์๋ค. ์ฝ๋ ์์ฑ ๊ธฐ๋ฅ๊ณผ ๋๋ฒ๊น , ์ฑ๋ฅ ํ
๋กํ์ผ๋ง ๋ฑ ๋ฌด์ฒ ํธ๋ฆฌํ ๊ธฐ๋ฅ์ด ๊ตฌ๋น๋์ด ์๋ค.
05 ๊ฐ๋ฐ ์์ฐ์ฑ์ ๋์ฌ ์ค ๋ชจ๋ํ ์๋ํฐ ์๊ฐ 39
![Page 62: JS+Node.js Ni Yoru Web Crawler Net Agent Kaihatsu Technique](https://reader031.fdocuments.in/reader031/viewer/2022012420/6174b118cef5953b7f379de4/html5/thumbnails/62.jpg)
NetBeans โ ์๋ฐ๋ฟ๋ง ์๋๋ผ ๋ค์ํ ์น ๊ฐ๋ฐ ์ธ์ด๋ฅผ ์ง์
NetBeans[URL] https://netbeans.org/[๋ผ์ด์ ์ค] CDDL,GPL2
ํตํฉ ๊ฐ๋ฐ ํ๊ฒฝ NetBeans(๋ท๋น์ฆ)๋ ์๋ฐ ์ ์ฉ ๊ฐ๋ฐ ํ๊ฒฝ์ผ๋ก ๋๋ฆฌ ์๋ ค์ก์ง๋ง, C/C++์ PHP์
ํนํ๋ ๊ฐ๋ฐ ๋๊ตฌ๋ก๋ ์ฌ์ฉํ ์ ์๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ๋ฐํ๋ ค๋ฉด NetBeans์ PHP ๋ฒ์ ์ ์
ํํด์ ๋ค์ด๋ก๋ํ๋ค. ํ๋ฌ๊ทธ์ธ์ผ๋ก Node.js๋ฅผ ์ถ๊ฐํ๋ฉด Node.js ํ๋ก์ ํธ๋ฅผ ์์ฑํ ์ ์๋ค.
โฒ NetBeans์์ Node.js ํ๋ก์ ํธ๋ฅผ ๋ง๋ ํ๋ฉด
โ ์ด ์ ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ๋ฐํ๋ ๋ฐ ๋์์ด ๋๋, ๊ทผ๋์ ์ฃผ๋ชฉ๋ฐ๋ ์ฌ๋ฌ ์๋ํฐ๋ค์ ์๊ฐํ๋ค.
โ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ๋ฐํ ๋ ์ด๋ค ์๋ํฐ๋ฅผ ๊ตณ์ด ์ฌ์ฉํ ํ์๋ ์๋ค.
โ ์์ฆ ๋์จ ์๋ํฐ๋ค์ ๊ฒํ ํ์ฌ ๋ณธ์ธ์๊ฒ ๊ฐ์ฅ ์ ๋ง๋ ์๋ํฐ๋ฅผ ์ฐพ๋ ๊ฒ์ ์์ฐ์ฑ์ ๋์ด๋ ๋ฐ ํฌ๊ฒ ๋
์์ด ๋๋ค.
์ด ์ ์ ๋ง๋ฌด๋ฆฌ
์ 1์ฅ ๊ฐ๋ฐ ํ๊ฒฝ40