๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋…ธ๋ ฅ์„ ์ด๊ธฐ๋Š” ์žฌ๋Šฅ์€ ์—†๊ณ 
๋…ธ๋ ฅ์„ ์™ธ๋ฉดํ•˜๋Š” ๊ฒฐ๊ณผ๋„ ์—†๋‹ค.
- ์ด์ฐฝํ˜ธ 9๋‹จ

OPEN SOURCE/TELEGRAM

๋‚˜๋งŒ์˜ ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡(TELEGRAM BOT)๋งŒ๋“ค๊ธฐ - 3. JAVA๋กœ ๋ฉ”์‹œ์ง€ ๋ณด๋‚ด๊ธฐ

  Junesker   2020. 3. 24.
๋ฐ˜์‘ํ˜•

ํ…”๋ ˆ๊ทธ๋žจ BotFather ๋ด‡์„ ํ†ตํ•ด ๋งŒ๋“  @StudyJ001Bot์„ ํ†ตํ•ด Java ์–ธ์–ด๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ณ  ๋™์ผํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ด‡์„ ๋งŒ๋“ค์–ด๋ณด๊ณ ์ž ํ•œ๋‹ค. ์›น ์ƒ์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ธ ๋ฐฉ์‹์€ @StudyJ001Bot์ด ๋‚˜์—๊ฒŒ “text“๋ผ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋‹ด๊ธด ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ–ˆ๋‹ค. ์ด๋ฒˆ Java ์–ธ์–ด๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ณ  ๋™์ผํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ฑด ์‚ฌ์šฉ์ž๊ฐ€ @StudyJ001Bot์—๊ฒŒ ”Hello World!“๋ผ๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋ฉด @StudyJ001Bot์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ”Hello World!“๋ผ๊ณ  ๋™์ผํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•ด์ฃผ๋Š” ๋ด‡์„ ๋งŒ๋“ค์–ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ œ์ผ ๋จผ์ € Javaํ”„๋กœ์ ํŠธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์ž‘์„ฑ์ž๋Š” eGovFramework๋ฅผ ์ด์šฉํ•ด ์ž‘์„ฑํ•˜์˜€๋‹ค.

 

ํ…”๋ ˆ๊ทธ๋žจ @StudyJ001Bot์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ค€๋น„ํ•œ ์ŠคํŽ™์ด๋‹ค.

๊ฐœ๋ฐœTool eGovFrameDev-3.7.0
Maven maven-3.6.3
jdk jdk1.8

๋ณธ ์ž‘์„ฑ์ž๋Š” Mavenํ”„๋กœ์ ํŠธ๋ฅผ ์ด์šฉํ•ด @StudyJ001Bot์œผ๋กœ ๋™์ผํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ด‡์„ ๋งŒ๋“ค์–ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ์ˆœ์„œ๋Œ€๋กœ ์ฐจ๊ทผ์ฐจ๊ทผ ๊ณผ์ •์„ ๋ฐŸ์•„๊ฐ€๋ณด๊ฒ ๋‹ค.

 

 

 

 

 

1.  ๋ฉ”์ด๋ธ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ ๋‹ค.

 

๋ฉ”์ด๋ธ ํ”„๋กœ์ ํŠธ ๊ฐœ์„ค
๋ฉ”์ด๋ธ ํ”„๋กœ์ ํŠธ ๊ฐœ์„ค

์ดํด๋ฆฝ์Šค ์ƒ๋‹จ ๋ฉ”๋‰ด๋ฐ”์— File > New > Maven project๋ฅผ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ์ดํด๋ฆฝ์Šค Project Explorer์œ„์น˜์—์„œ Ctrl+N์„ ๋ˆŒ๋Ÿฌ maven์„ ๊ฒ€์ƒ‰ํ•ด Maven project๋ฅผ ์„ ํƒํ•ด ๊ฐœ์„คํ•  ์ˆ˜ ์žˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ด๋ฆ„๊ณผ ์œ„์น˜๋ฅผ ์„ ํƒํ•˜๋Š” ํ™”๋ฉด์—์„œ๋Š” "Create a simple project(skip archetype selection)"์„ ์ฒดํฌํ•˜๊ณ  Next๋กœ ๋„˜์–ด๊ฐ„๋‹ค. ๊ทธ๋ฃน์•„์ด๋””์™€ ์•„ํ‹ฐํŽ™ํŠธ ์•„์ด๋””๋ฅผ ์ž…๋ ฅํ•˜๋Š” ํ™”๋ฉด์—์„œ Group id์™€ Artifact id๋ฅผ ์ž…๋ ฅํ•ด์ค€๋‹ค. ์ž‘์„ฑ์ž๋Š” Group id๋กœ "com.project"๋ฅผ Artifact id๋กœ "studyj001bot"์œผ๋กœ ์ž…๋ ฅํ•˜๊ณ  packaging์„ "war"๋กœ ์„ ํƒ ํ›„ Finishํ•ด์ฃผ์—ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ ๊ผญ Maven project๋ฅผ ์„ ํƒํ•˜์ง€ ์•Š์•„๋„ ์ƒ๊ด€์€ ์—†๋‹ค. ์ž์‹ ์ด ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ณ  ๋ชฉ์ ์— ๋งž๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ทธ ๋ถ€๋ถ„์œผ๋กœ ๊ฐœ์„คํ•˜๋„๋ก ํ•œ๋‹ค.

 

 

 

 

 

2.  ํ…”๋ ˆ๊ทธ๋žจ BOT API๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋“ฑ๋กํ•œ๋‹ค.

 

Maven project์˜ pom.xml์—์„œ๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉ๋  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ dependency๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. telegrambots ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋“ฑ๋กํ•œ๋‹ค.

<!-- https://mvnrepository.com/artifact/org.telegram/telegrambots -->
<dependency>
	<groupId>org.telegram</groupId>
	<artifactId>telegrambots</artifactId>
	<version>4.5</version>
</dependency>

pom.xml์˜ ํ…”๋ ˆ๊ทธ๋žจ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋“ฑ๋กํ–ˆ๋‹ค๋ฉด, ํ”„๋กœ์ ํŠธ๋ฅผ maven update๋ฅผ ์‹คํ–‰ํ•ด ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„ ์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ์ ์šฉํ•œ๋‹ค. ์—ฌ๊ธฐ๊นŒ์ง€ ํ–ˆ๋‹ค๋ฉด ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ค€๋น„๋Š” ๋‹ค ๋๋‚ฌ๋‹ค. ๊ทธ ์™ธ์— ํ•„์š”ํ•œ ๋‹ค๋ฅธ ์„ค์ •๋„ ํ•ด์ฃผ๊ธฐ๋กœ ํ•œ๋‹ค.(์Šคํ”„๋ง, ๋กœ๊น…, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“ฑ๋“ฑ)

 

 

 

 

 

3.  StudyJ001Bot์„ ์‹คํ–‰ ํ•  ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ ๋‹ค.

 

StudyJ001Bot ์‹คํ–‰ ํด๋ž˜์Šค

MainController์—์„œ main์„ ์‹คํ–‰ํ•ด StudyJ001Bot์„ ์ž‘๋™ํ•  ์ค€๋น„๋ฅผ ํ•œ๋‹ค. ApiContextInitializer.init()๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ Api๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „ ์ดˆ๊ธฐํ™”๋ฅผ ๋จผ์ € ์ง„ํ–‰ํ•œ๋‹ค. ๊ทธ๋Ÿฐ ํ›„, TelegramBotsApi ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑ ํ›„ ๋‚ด๊ฐ€ ๋“ฑ๋กํ•  ๋ด‡ ํด๋ž˜์Šค๋ฅผ ๋“ฑ๋กํ•ด ์‚ฌ์šฉ ์ค€๋น„ํ•œ๋‹ค. ์‚ฌ์šฉ ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์œผ๋ฉด ์ถœ๋ ฅ๋ฌธ "TELEGRAM StudyJ001BOT STARTED...!"๊ฐ€ ์ฝ˜์†”์— ์ถœ๋ ฅ๋œ๋‹ค.

 

 

 

 

 

4.  StudyJ001Bot ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ ๋‹ค.

 

StudyJ001Bot ํด๋ž˜์Šค

TelegramLongPollingBot ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š”๋‹ค. ์ƒ์†๋ฐ›์„๋•Œ ํ•จ๊ป˜ ๊ตฌํ˜„ํ•ด์•ผํ•˜๋Š” ์˜ค๋ฒ„๋ผ์ด๋“œ ๋ฉ”์„œ๋“œ๋„ ํ•จ๊ป˜ ์ž‘์„ฑ๋œ๋‹ค. getBotUsername() ๋ฉ”์„œ๋“œ์—๋Š” "StudyJ001Bot"๊ณผ ๊ฐ™์ด ๋ด‡์˜ ์ด๋ฆ„์„ ๋ช…๋ช…ํ•œ๋‹ค. getBotToken() ๋ฉ”์„œ๋“œ์—๋Š” Bot API Token ํ‚ค๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. onUpdateReceived() ๋ฉ”์„œ๋“œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•  ๋ฉ”์„œ๋“œ์ด๋‹ค. onUpdateReceived() ๋ฉ”์„œ๋“œ๋Š” StudyJ001Bot์— ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ด๋ฉด onUpdateReceived() ๋ฉ”์„œ๋“œ๊ฐ€ ๋ฐœ๋™ํ•˜๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ ๋ฉ”์„ธ์ง€๋ฅผ ์ปจํŠธ๋กค ํ•  ๊ฒƒ์ด๋‹ค.

 

onUpdateReceived()๋ฉ”์„œ๋“œ์˜ Update๊ฐ์ฒด์•ˆ์—๋Š” ๋งŽ์€ ์ •๋ณด๋“ค์ด ๋‹ด๊ฒจ์žˆ๋Š”๋ฐ, ๊ทธ ์ค‘์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ด์šฉํ•ด ๋ณด๋‚ธ ํ…์ŠคํŠธ์™€ ์ฑ„ํŒ… ์•„์ด๋””๋กœ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ธ๋‹ค.

 

StudyJ001Bot onUpdateReceived ๋ฉ”์„œ๋“œ

๋ณด๋‚ผ ๋ฉ”์„ธ์ง€ ๊ฐ์ฒด์ธ SendMessage ์ธ์Šคํ„ดํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  enableHtml(true)๋กœ ๋ฉ”์‹œ์ง€ ํƒ€์ž…์„ html๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒํ•˜๋ฉด "<b>๊ตต์€ ํ…์ŠคํŠธ</b>", "<a href=''></a>" ์™€ ๊ฐ™์€ htmlํƒœ๊ทธ๋ฅผ ํ•จ๊ป˜ ๋ณด๋‚ด ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ๊ตต์€, ์ดํƒœ๋ฆญ์ฒด, ๋งˆํฌ๋‹ค์šด๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ธ์Šคํ„ดํŠธ ์ƒ์„ฑ๋œ ๋ฉ”์‹œ์ง€๋ฅผ Update๊ฐ์ฒด์•ˆ์— ๋ฐ›์€ ๋ฉ”์‹œ์ง€ ๊ทธ๋Œ€๋กœ๋ฅผ setText()๋กœ ๋„ฃ์–ด์ค€ ํ›„, ์ฑ„ํŒ… ์•„์ด๋””๋„ setChatId()์— ๋„ฃ์–ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ตœ์ข… execute()๋ฉ”์„œ๋“œ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•œ๋‹ค.

 

 

 

 

 

5.  StudyJ001Bot ์‹คํ–‰ ํ›„, ๋ฉ”์‹œ์ง€ ์ „์†ก ํ™•์ธ

 

MainController ํด๋ž˜์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํ…”๋ ˆ๊ทธ๋žจ ๋ฉ”์‹ ์ €์˜ StudyJ001Bot์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋ณด์ž. ๋‚ด๊ฐ€ ์ž…๋ ฅํ•œ ๋ฉ”์‹œ์ง€ ๊ทธ๋Œ€๋กœ๋ฅผ StudyJ001Bot์ด ๋™์ผํ•˜๊ฒŒ ๋ณด๋‚ด์ฃผ๋Š”๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

StudyJ001Bot ๋ฉ”์‹œ์ง€ ์ „์†ก ํ™•์ธ

์ž‘์„ฑ์ž๊ฐ€ ๋ณด๋‚ธ ํ…์ŠคํŠธ 3๊ฐœ๊ฐ€ ๋™์ผํ•œ ๋ฉ”์‹œ์ง€๋กœ ์ „์†ก๋จ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. Java๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋‚ด๊ฐ€ ๋ณด๋‚ธ ๋ฉ”์‹œ์ง€๋ฅผ ๋™์ผํ•œ ๋ฉ”์‹œ์ง€๋กœ ๋ณด๋‚ด์ฃผ๋Š” ๋ด‡์„ ๋งŒ๋“ค์–ด๋ณด์•˜๋‹ค. ๋‹ค์Œ์—๋Š” ํŠน์ • ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด์„œ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด๋ณด๊ณ ์ž ํ•œ๋‹ค.

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€