์ ๋ ๋ถ๊ณผ 10์ฃผ ์ ๋ถํฐ IT ์ธ๊ณ์ ๋น ์ ธ๋ค๊ธฐ ์์ํ์ต๋๋ค. ์ง์งํ๊ฒ, XNUMX์ฃผ ์ ์๋ HTML ๊ตฌ๋ฌธ๋ ์ดํดํ์ง ๋ชปํ๊ณ , ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ํ ์๊ฐ๋ XNUMX๋ ์ ํ๊ต ์ปค๋ฆฌํ๋ผ์ธ ํ์ค์นผ๋ก ๋๋ฌ์ต๋๋ค. ํ์ง๋ง ์์ด๋ค์ด ๋ด์ ๋ง๋ค์ด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ์์ IT์บ ํ์ ๊ฐ๊ธฐ๋ก ํ์ด์. ๋๋ ๊ทธ๊ฒ์ด ๊ทธ๋ค์ง ์ด๋ ต์ง ์๋ค๊ณ ๊ฒฐ์ ํ์ต๋๋ค.
๋๋ ๋ค์๊ณผ ๊ฐ์ ๊ธด ์ฌ์ ์ ์์ํ์ต๋๋ค.
- Ubuntu๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ผ์ฐ๋ ์๋ฒ๋ฅผ ๋ฐฐํฌํ์ต๋๋ค.
- GitHub์ ๋ฑ๋ก๋์ด ์์ผ๋ฉฐ,
- ๊ธฐ๋ณธ JavaScript ๊ตฌ๋ฌธ์ ๋ฐฐ์ ์ต๋๋ค.
- ์์ด์ ๋ฌ์์์ด๋ก ๋ ์๋ง์ ๊ธฐ์ฌ๋ฅผ ์ฝ๊ณ ,
- ๋๋์ด ๋ด์ ๋ง๋ค์์ต๋๋ค
- ๋๋์ด ์ด ๊ธ์ ์ฐ๊ฒ ๋์์ต๋๋ค.
์ต์ข ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์์ต๋๋ค.
์ด ๊ธ์ ์ด๋ณด์๋ฅผ ์ํ ๊ธ์ด๋ผ๊ณ ๋ฐ๋ก ๋ง์๋๋ฆฌ๊ฒ ์ต๋๋ค. ๊ธฐ๋ณธ์ ์ธ ์์
์ ์ฒ์๋ถํฐ ์ํํ๋ ๋ฐฉ๋ฒ์ ์ดํดํ๊ธฐ ์ํ ๊ฒ์
๋๋ค.
๋ํ ๊ณ ๊ธ ํ๋ก๊ทธ๋๋จธ์ ๊ฒฝ์ฐ ์ฝ๊ฐ ์๊ฒ ๋ง๋ค ์๋ ์์ต๋๋ค.
1. JS์์ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
๋๋ ์ ์ด๋ ์ธ์ด์ ๊ตฌ๋ฌธ์ ๋จผ์ ์ดํดํ๋ ๊ฒ์ด ๊ฐ์น๊ฐ ์๋ค๋ ๊ฒ์ ์ดํดํ์ต๋๋ค. ์ ํ์ JavaScript๋ก ์ด๋ฃจ์ด์ก์ต๋๋ค. ์๋ํ๋ฉด ์ ์ ๋ค์ ๋จ๊ณ๋ ReactNative์์ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๋๋ ๊ฒ์ด์๊ธฐ ๋๋ฌธ์
๋๋ค. ๋๋ ์์ํ๋ค
2. ๋ด์ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ธ๊ฐ์?
์ด๊ฒ ์ด๋ฐ์ ๋ง์ ๋์์ด ๋์ด์
3. ๋ด ์ฝ๋๋ ์ด๋ค ๋ชจ์ต์ธ๊ฐ์?
์ค๋ซ๋์ ๊ธฐ์ฌ๋ฅผ ์ฐ๊ตฌํ ํ Telegram API๋ฅผ ์ฐ๊ตฌํ๊ณ ์ฒ์๋ถํฐ ํฐ ์ฝ๋ ์กฐ๊ฐ์ ์์ฑํ๋ ๊ฒ์ ๋ํด ๊ฑฑ์ ํ ํ์๊ฐ ์๋๋ก ์ผ์ข
์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(๋ชจ๋ ํ์์ ํ์ฌ ์ฝ๋)๋ฅผ ์ฌ์ฉํ ๊ฐ์น๊ฐ ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ํ๋ ์์ํฌ๋ฅผ ์ฐพ์์ต๋๋ค
3. 100๋ฃจ๋ธ์ ํด๋ผ์ฐ๋ ์๋ฒ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ
๋ง์ ๊ฒ์ ๋์ ์ ๊ทธ๋ฆผ์ 'npm' ๋ช ๋ น์ด ๋ช ๋ น์ค์ ์๋ฏธํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ๋ช ๋ น์ค์ ์ด๋์๋ ์์ง๋ง ์คํํ๋ ค๋ฉด NodePackageManager๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค. ๋ฌธ์ ๋ ChromeOS๊ฐ ์ค์น๋ PixelBook์์ ํ๋ก๊ทธ๋๋ฐ์ ํ๊ณ ์๋ค๋ ๊ฒ์ด์์ต๋๋ค. ์ฌ๊ธฐ์๋ ๋ด๊ฐ Linux๋ฅผ ์ด๋ป๊ฒ ๋ฐฐ์ ๋์ง์ ๋ํ ํฐ ๋ธ๋ก์ ๊ฑด๋๋ฐ๊ฒ ์ต๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋น์ด ์๊ณ ๋ถํ์ํฉ๋๋ค. Windows๋ MacBook์ด ์๋ค๋ฉด ์ด๋ฏธ ์ฝ์์ด ์๋ ๊ฒ์ ๋๋ค.
๊ฐ๋จํ ๋งํด์ Crostini๋ฅผ โโํตํด Linux๋ฅผ ์ค์นํ์ต๋๋ค.
ํ์ง๋ง ๊ทธ ๊ณผ์ ์์ ๋ด์ด ์ง์์ ์ผ๋ก ์๋ํ๋ ค๋ฉด(๋ด ์ปดํจํฐ๊ฐ ์ผ์ ธ ์์ ๋๋ง์ด ์๋๋ผ) ํด๋ผ์ฐ๋ ์๋ฒ๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ๋๋ ์ ํํ๋ค
4. ๋ด์ ์คํํ๊ธฐ ์ํ ์๋ฒ ์ค๋น ๋ฐฉ๋ฒ
๊ทธ ํ, ์๋ฒ์ ์ฝ๋ ํ ์คํธ๊ฐ ํฌํจ๋ ํ์ผ์ ์ ์ฅํ ์ผ์ข ์ ํด๋๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ์ด๋ฅผ ์ํด ์ฝ์("Open console" ๋ฒํผ์ ํตํด ์น์ฌ์ดํธ์์ ์ง์ ์คํ)์ ๋ค์์ ์ ๋ ฅํ์ต๋๋ค.
mkdir bot
bot - ์ด๊ฒ์ด ๋ด ํด๋์ ์ด๋ฆ์ด ๋์์ต๋๋ค. ๊ทธ ํ npm๊ณผ Node.js๋ฅผ ์ค์นํ๋๋ฐ, ์ด๋ฅผ ํตํด *.js ํด์๋์ ํ์ผ์์ ์ฝ๋๋ฅผ ์คํํ ์ ์์์ต๋๋ค.
sudo apt update
sudo apt install nodejs
sudo apt install npm
์ด ๋จ๊ณ์์๋ ์ฝ์์ ํตํด ์๋ฒ์ ๋ํ ์ฐ๊ฒฐ์ ์ค์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ฌ๊ธฐ
5. ์ฒซ ๋ฒ์งธ ๋ด์ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ.
ํ์ง๋ง ์ด์ ๊ทธ๊ฒ์ ๋์๊ฒ ๋จ์ง ํ๋์ ๋ฐ๊ฒฌ์ผ ๋ฟ์
๋๋ค. ๋ชจ๋ ํ๋ก๊ทธ๋จ์ ๋จ์ง ํ
์คํธ ์ค์ผ ๋ฟ์
๋๋ค. ์ด๋์๋ ์ฝ์
ํ ์ ์๊ณ , ์ํ๋ ํ์ฅ๋ช
์ผ๋ก ์ ์ฅํ ์ ์์ต๋๋ค. ๊ทธ๊ฒ ์ ๋ถ์
๋๋ค. ์๋ฆ๋ค์ฐ์ธ์. ๋๋ ์ฌ์ฉํ๋ค
๋๋ ์๋ก์ด ํ์ผ์ ๋ง๋ค์๊ณ , ์ฌ๊ธฐ์ telegraf ํ์ด์ง์ ์์ ์ฝ๋๋ฅผ ์ฝ์ ํ๊ณ index.js ํ์ผ์ ์ ์ฅํ์ต๋๋ค(์ผ๋ฐ์ ์ผ๋ก ํ์ผ ์ด๋ฆ์ ๊ทธ๋ฐ ์์ผ๋ก ์ง์ ํ ํ์๋ ์์ง๋ง ์ด๊ฒ์ด ๊ด๋ก์ ๋๋ค). ์ค์ - BOT_TOKEN ๋์ ๋ ๋ฒ์งธ ๋จ๋ฝ์ API ํค๋ฅผ ์ฝ์ ํ์ธ์.
const Telegraf = require('telegraf')
const bot = new Telegraf(process.env.BOT_TOKEN)
bot.start((ctx) => ctx.reply('Welcome!'))
bot.help((ctx) => ctx.reply('Send me a sticker'))
bot.on('sticker', (ctx) => ctx.reply(''))
bot.hears('hi', (ctx) => ctx.reply('Hey there'))
bot.launch()
6. github๋ฅผ ํตํด ์๋ฒ์ ์ฝ๋๋ฅผ ์ ๋ก๋ํ๋ ๋ฐฉ๋ฒ
์ด์ ์ด๋ป๊ฒ๋ ์ด ์ฝ๋๋ฅผ ์๋ฒ์ ์
๋ก๋ํ๊ณ ์คํํด์ผ ํ์ต๋๋ค. ์ด๊ฒ์ ๋์๊ฒ ํ๋์ ๋์ ์ด ๋์๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ง์ ์๋ จ ๋์ ์ฝ์์์ ๋ช
๋ น์ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ์
๋ฐ์ดํธํ ์ ์๋ ํ์ผ์ github์ ๋ง๋๋ ๊ฒ์ด ๋ ์ฌ์ธ ๊ฒ์ด๋ผ๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ์ ๊ณ์ ์ ๋ฑ๋กํ์ต๋๋ค
7. Github๋ฅผ ํตํด ์๋ฒ์ ํ์ผ์ ์ ๋ก๋ํ๋ ๋ฐฉ๋ฒ 2๋ถ
Git์์ ํ์ผ์ ๋ค์ด๋ก๋ํ๋ ํ๋ก๊ทธ๋จ์ ์๋ฒ์ ์ค์นํด์ผ ํ์ต๋๋ค. ์ฝ์์ ์ ๋ ฅํ์ฌ ์๋ฒ์ git์ ์ค์นํ์ต๋๋ค.
apt-get install git
๊ทธ๋ฐ ๋ค์ ํ์ผ ์ ๋ก๋๋ฅผ ๊ตฌ์ฑํด์ผ ํ์ต๋๋ค. ์ด๋ฅผ ์ํด ๋ช ๋ น์ค์ ์ ๋ ฅํ์ต๋๋ค.
git clone git://github.com/b0tank/bot.git bot
๊ฒฐ๊ณผ์ ์ผ๋ก ํ๋ก์ ํธ์ ๋ชจ๋ ๋ด์ฉ์ด ์๋ฒ์ ์ ๋ก๋๋์์ต๋๋ค. ์ด ๋จ๊ณ์ ์ค์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฏธ ์กด์ฌํ๋ ๋ด ํด๋ ์์ ๋ ๋ฒ์งธ ํด๋๋ฅผ ๋ง๋ค์๋ค๋ ๊ฒ์ ๋๋ค. ํ์ผ ์ฃผ์๋ */bot/bot/index.js์ ๊ฐ์์ต๋๋ค.
๋๋ ์ด ๋ฌธ์ ๋ฅผ ๋ฌด์ํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
์ฝ๋์ ์ฒซ ๋ฒ์งธ ์ค์์ ์์ฒญํ๋ telegraf ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ก๋ํ๋ ค๋ฉด ์ฝ์์ ๋ช ๋ น์ ์ ๋ ฅํ์ธ์.
npm install telegraf
8. ๋ด ์คํ ๋ฐฉ๋ฒ
์ด๋ ๊ฒ ํ๋ ค๋ฉด ํ์ผ์ด ์๋ ํด๋์ ์๋ ๋์(์ฝ์์ ํตํด ํด๋์์ ํด๋๋ก ์ด๋ํ๋ ค๋ฉด format ๋ช
๋ น์ ์คํํ์ธ์) cd bot
ํ์ฌ ํ์ํ ์์น์ ์๋์ง ํ์ธํ๊ธฐ ์ํด ์ฝ์์ ์๋ ๋ชจ๋ ํ์ผ๊ณผ ํด๋๋ฅผ ํ์ํ๋ ๋ช
๋ น์ ์
๋ ฅํ ์ ์์ต๋๋ค. ls -a
์์ํ๋ ค๋ฉด ์ฝ์์ ๋ค์ด๊ฐ์ต๋๋ค.
node index.js
์ค๋ฅ๊ฐ ์์ผ๋ฉด ๋ชจ๋ ๊ฒ์ด ์ ์์ด๋ฉฐ ๋ด์ด ์๋ํ๋ ๊ฒ์ ๋๋ค. ํ ๋ ๊ทธ๋จ์์ ๊ทธ๋ฅผ ์ฐพ์๋ณด์ธ์. ์ค๋ฅ๊ฐ ์๋ ๊ฒฝ์ฐ 1๋ฒ ํญ๋ชฉ์ ์ง์์ ์ ์ฉํ์ธ์.
9. ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ด์ ์คํํ๋ ๋ฐฉ๋ฒ
๋น์ ์ ์ฝ์์ ์์ ์์ ๋๋ง ๋ด์ด ์๋ํ๋ค๋ ๊ฒ์ ์์ฃผ ๋นจ๋ฆฌ ๊นจ๋ซ๊ฒ ๋ ๊ฒ์ ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ต๋๋ค.
screen
๊ทธ๋ฌ๋ฉด ์ผ๋ถ ํ
์คํธ๊ฐ ํฌํจ๋ ํ๋ฉด์ด ๋ํ๋ฉ๋๋ค. ์ด๋ ๋ชจ๋ ๊ฒ์ด ๊ด์ฐฎ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๊ทํ๋ ํด๋ผ์ฐ๋ ์๋ฒ์ ๊ฐ์ ์๋ฒ์ ์์ต๋๋ค. ๋ชจ๋ ๊ฒ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ ์ ์ดํดํ๋ ค๋ฉด -
node index.js
10. ๋ด ์๋ ๋ฐฉ์ ๋ฐ ๊ธฐ๋ฅ ํ์ฅ ๋ฐฉ๋ฒ
์์ ๋ด์ ๋ฌด์์ ํ ์ ์๋์? ๊ทธ๋ ํ ์์๋ค
bot.start((ctx) => ctx.reply('Welcome!'))
"ํ์ํฉ๋๋ค!" ์์ ์๊ฐ (ํ ์คํธ๋ฅผ ๋ณ๊ฒฝํด ๋ณด์ธ์)
bot.help((ctx) => ctx.reply('Send me a sticker'))
ํ์ค /help ๋ช ๋ น์ ๋ํ ์๋ต์ผ๋ก "์คํฐ์ปค๋ฅผ ๋ณด๋ด์ฃผ์ธ์"๋ผ๋ ๋ฉ์์ง๋ฅผ ๋ณด๋ ๋๋ค.
bot.on('sticker', (ctx) => ctx.reply(''))
์คํฐ์ปค์ ๋ํ ์๋ต์ผ๋ก ์น์ธ ๋ณด๋ด๊ธฐ
bot.hears('hi', (ctx) => ctx.reply('Hey there'))
๊ทธ ์ฌ๋์๊ฒ "์๋
"์ด๋ผ๊ณ ์ฐ๋ฉด "์๋
ํ์ธ์"๋ผ๊ณ ๋๋ตํ์ธ์
bot.launch()
์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ctx.replyWithPhoto
ํน์ ํ
์คํธ์ ๋ํ ์๋ต์ผ๋ก ์ง์ ๋ ์ฌ์ง์ด๋ GIF๋ฅผ ๋ณด๋ผ ์ ์์ต๋๋ค.
์ฝ๋์ ์๋น ๋ถ๋ถ์ ์ ๊ฐ ๋ด์ ๋ํ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ 11~13์ธ ์ด๋ฆฐ์ด๊ฐ ์์ฑํ ๊ฒ์ ๋๋ค. ๊ทธ๋ค์ ์ฌ์ฉ์ ์ฌ๋ก๋ฅผ ์ ๋ ฅํ์ต๋๋ค. ์ด๋ ๋ถ๋ถ์ด ์ด๋ ๋ถ๋ถ์์ ๋ง๋ค์ด์ก๋์ง ์ฝ๊ฒ ์ ์ ์์ ๊ฒ ๊ฐ์์.
์๋ฅผ ๋ค์ด, "Jake"๋ผ๋ ๋ฉ์์ง๋ ๋งํ Adventure Time์ ์ ๋ช ํ ์บ๋ฆญํฐ๊ฐ ํฌํจ๋ GIF๋ฅผ ๋ฐ๊ฒ ๋ฉ๋๋ค.
๋ด์ ๋์ฑ ๋ฐ์ ์ํค๋ ค๋ฉด ํค๋ณด๋๋ฅผ ์ฐ๊ฒฐํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
11. ์ฝ๋๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ๋ด์ ๋ค์ ์์ํ๋ ๋ฐฉ๋ฒ
Github๋ฟ๋ง ์๋๋ผ ์๋ฒ์์๋ ์ฝ๋๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํ๋ค๋ ์ ์ ์์ง ๋ง์ธ์. ์ด๋ ์ฝ์ต๋๋ค. ๋ด์ ์ค์งํ๊ณ (ctrl+c ๋๋ฅด๊ธฐ),
- ๋์ ํด๋์ ์๋ ๋์ ์ฝ์์ ๋ค์ด๊ฐ์ญ์์ค. git pull
โ ๋ค์ ๋ช
๋ น์ ์ฌ์ฉํ์ฌ ๋ด์ ๋ค์ ์์ํฉ๋๋ค. node index.js
END
์ด ํ์ผ์ ์ค๋ช ๋ ๋ง์ ๋ด์ฉ์ ๊ณ ๊ธ ํ๋ก๊ทธ๋๋จธ์๊ฒ๋ ๋งค์ฐ ๋ถ๋ช ํฉ๋๋ค. ํ์ง๋ง ๋ ์์ ์ด ํ์ ๋ฐ์ด ๋์ด ๋ด์ ์ธ๊ณ๋ก ๋จ๋ฒ์ ๋ฐ์ด ๋ด๋ ค๊ณ ํ์ ๋ ๊ทธ๋ฐ ๊ฐ์ด๋๊ฐ ์ ๋ง ๊ทธ๋ฆฌ์์ก์ต๋๋ค. IT ์ ๋ฌธ๊ฐ๋ผ๋ฉด ๋๊ตฌ๋ ๋น์ฐํ๊ณ ๊ฐ๋จํ ๊ฒ๋ค์ ๋์น์ง ์๋ ์๋ด์.
์์ผ๋ก ๊ฐ์ ์คํ์ผ๋ก ReactNative์์ ์ฒซ ๋ฒ์งธ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ฒ์๋ฌผ์ ๊ณํ ์ค์
๋๋ค.
์ถ์ฒ : habr.com