2022. 11. 4. 17:18ใProgramming Project ์์ ์ค
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."
๐ Google ์ค๋ฌธ์ง ์์ฑ ์๋ฆผ ์๋ํ
๐ฝ Google App Script
๐ฆ ๊ฐ์
Google App script๋ Google Work Space Platform์์ ๊ฐ๋ฒผ์ด Application ๊ฐ๋ฐ์ ์ํด Google์ด ๊ฐ๋ฐํ Script Platform์ด์์.
Google App Script๋ JavaScript 1.6์ ๊ธฐ๋ฐ์ ๋๊ณ ์์ผ๋, ECMA Script 5 API์ ํ์ ์งํฉ ๋ฐ 1.7, 1.8์ ์ผ๋ถ ๊ธฐ๋ฅ๋ ํฌํจํ๊ณ ์๋ค๊ณ ํด์.
App Script Project๋ Google Infra์ Server Side๋ก ์คํ๋๋ค๊ณ ํฉ๋๋ค.
Google์ด ๋งํ๊ธธ Google Script๋ Google ์ ํ๊ณผ Third Party Servie ๊ฐ Task๋ฅผ ์๋ํ๊ธฐ ์ฉ์ดํ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๊ณ ์๋ค๊ณ ํ๋ต๋๋ค.
๋ํ, App Script๋ Google Drive์ฉ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ ์ฉํ ๋๊ตฌ์ด๊ธฐ๋ ํด์.
๐ฝ ์์ํ๊ธฐ
๐ฆ ์ด๊ธฐ๊ตฌ์ฑ
์ฃผ๋ํ๋์ ์ข์ ๊ฐ๋ฐ์๊ฐ ๋๊ธฐ ์ํด ๋ฉ์ง ๊ฐ๋ฐ์๊ฐ ๋๊ธฐ ์ํด Side Project๋ฅผ ํ๊ณ ์๊ณ , Crew ๋ค์ด ๋ ๋ง์ ๊ฒ์ ๊ฒฝํํ๊ณ , ๊ณต์ ํ๊ธธ ๋ฐ๋ผ๋ ๊ฒ์ด์์.
๊ทธ๋์ Sub Project๋ฅผ ์ค๋นํ๊ณ ์๊ณ , ์ด๋ฅผ ํตํด ๊ณ ๊ฐ์๊ฒ ์ค๋ฌธ์ง๋ฅผ ๋ฐ๋๋ค๋ผ๋ ๊ฐ์ ์ ํ๊ณ , ์ด๋ฅผ Service ํ๊ธฐ ์ํ Model์ ์ค๋นํ๊ธฐ ์ํด Google ์ค๋ฌธ์ง๋ฅผ ์ด์ฉํด์ ๊ณ ๊ฐ์๊ฒ ์ด๋ค ๋ฌธ์๋, ์์ฒญ์ ๋ฐ๊ฒ ๋๊ณ , ์ด๋ฅผ ํตํด Google ์คํ๋ ๋์ํธ์ ๊ฐ์ด ์ ์ฅ์ด ๋๋ฉด ์ด๋ฅผ Slack์ผ๋ก ์๋ ค์ฃผ๋ ค๊ณ ํด์.
์ต์ด ์ฃผ๋ํ๋์ ์์ ๊ฐ์ด Google ์ค๋ฌธ์ง๋ฅผ ๋ง๋ค์ด ์ฃผ์์ด์.
ํด๋น ์ค๋ฌธ์ง๊ฐ ์์ฑ์ด ๋๋ฉด ์๋์ผ๋ก ์คํ๋ ๋ ์ํธ์ ์
๋ ฅ๊ฐ์ ๋ฐ๊ธฐ ์ํด ์์ ๊ฐ์ด ์ค์ ์ ํด์ฃผ์ด์ผ ํฉ๋๋ค.
์์ ๊ฐ์ด ์๋์ผ๋ก ์คํ๋ ๋ ์ํธ๊ฐ ๋ง๋ค์ด์ก๊ณ , ๊ฐ๊ฐ์ ๊ฐ์ ์ด์ ๋ฐ์ ์ ์๋๋ก ์ฒซ๋ฒ์งธ ํ์ ์ค๋น๊ฐ ๋ ๊ฒ์ ๋ณผ ์ ์์ด์.
๐ฆ ์ด๊ธฐ ๊ตฌ์ฑ
์ฃผ๋ํ๋์ ์์ ๊ฐ์ด ๊ฐ์ด ์
๋ ฅ์ด ๋๋ฉด Slack์ผ๋ก ์๋ฆผ์ ๋ฐ๊ณ ์ถ์ ๊ฒ์ด์์.
์ด๋ฐ ๊ฒ๋ค์ด ๊ฐ๋ฅํ๋ค๋ ์ ๋ง ๊ฐ๋ฐ์ ๋๋ฌด ์ฌ๋ฐ๋ ๊ฒ์ด์์.
์ต์ด ์์ ๊ฐ์ด ํ์ฅ ํ๋ก๊ทธ๋จ์ ์ ํํ ๋ค Apps Script๋ฅผ ์ ํํด ์ค๋๋ค.
๊ทธ๋ผ ์์ ๊ฐ์ด JavaScript ๋ฌธ๋ฒ์ ํตํด Coding ํ ์ ์๋ ์ฐฝ์ด ๋์ฌ๊ฑฐ์์.
๐ฆ Trigger ๊ตฌ์ฑ
์ต์ด ์ฃผ๋ํ๋์ ์คํ๋ ๋ ์ํธ์ ๊ฐ์ด ์
๋ ฅ๋๋ฉด ์๋์ผ๋ก
Trigger๊ฐ ์๋ํ์ฌ ์ง์ ๋ Function์ด ์๋ํ ์ ์๋๋ก ์์ฑํด ์ฃผ์์ด์.
Initalize()๋ผ๋ ํจ์๋ฅผ ๋ง๋ค์ด ์ฃผ๊ณ , ProjectTriggers ํจ์๋ฅผ ๋์ ์์ผ ๊ทธ ๊ฐ์ triggers ๋ณ์์ ๋ด๋๋ก ํ์์ต๋๋ค.
์ด ์ ์ ์๋ํ๊ณ ์๋ Trigger๊ฐ ์์ ์ ์๊ธฐ ๋๋ฌธ์ ์ด Trigger๋ฅผ ์ง์์ฃผ์ด์ผ ํด์.
4 ~ 6๋ฒ์งธ ๋ฐ๋ณต๋ฌธ์ด ๊ทธ ์์
์ ํด์ฃผ๋ ๊ฒ์ด์์.
๋ณธ๊ฒฉ์ ์ผ๋ก ์คํ๋ ๋ ์ํธ์ ๊ฐ์ด ์
๋ ฅ์ด ๋๋ฉด ์ด๋ค ํจ์๋ฅผ ์๋ ์์ผ์ฃผ์ด์ผ ํด์.
๊ทธ๋ฌ๊ธฐ ์ํด 8๋ฒ์งธ ์ค์์ ์๋ก์ด Trigger๋ฅผ ๋ง๋๋๋ฐ, ์ด ๋ ์๊ดํธ ์์ ์๋ ์ํฌ ํจ์ ์ด๋ฆ์ ๋ฃ์ด์ฃผ๋ฉด ๋์.
์ด๊ฒ์ Google App Script์ Class SpreadsheetTriggerBuilder๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด๊ณ ,
์คํ๋ ๋ ์ํธ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ํ ๋น๋์์.
์ฃผ์ ํจ์๋ ์๋์ ๊ฐ์์.
Function Name | Return Type | Contants |
create() | Trigger | ํธ๋ฆฌ๊ฑฐ๋ฅผ ๋ง๋ค๊ณ ๋ฐํ |
onChange() | SpreadsheetTirggerBuilder | ์คํ๋ ๋ ์ํธ์ ๋ด์ฉ ๋๋ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋ ๋ ์คํ๋๋ ํธ๋ฆฌ๊ฑฐ ์ง์ |
onEdit() | SpreadsheetTirggerBuilder | ์คํ๋ ๋ ์ํธ๋ฅผ ์์ ํ ๋ ์คํํ ํธ๋ฆฌ๊ฑฐ ์ง์ |
onFormSubmit() | SpreadsheetTirggerBuilder | ์คํ๋ ๋ ์ํธ์ ์์์ด ์ ์ถ๋๋ฉด ์คํ๋๋ ํธ๋ฆฌ๊ฑฐ ์ง์ |
onOpen() | SpreadsheetTirggerBuilder | ์คํ๋ ๋ ์ํธ๋ฅผ ์ด ๋ ์คํํ ํธ๋ฆฌ๊ฑฐ ์ง์ |
9๋ฒ์งธ ์ค์์ forSpreadsheet๋ ์ง์ ๋ ์คํ๋ ๋์ํธ ์ฆ, ์๊ดํธ ์์ ์
๋ ฅ๋ ์คํ๋ ๋ ์ํธ์ ์ฐ๊ฒฐ๋ SpreadsheetTriggerBuilder๋ฅผ ๋ง๋ค๊ณ ๋ฐํํ๋ ์ญํ ์ํด์.
๊ทธ๋ฆฌ๊ณ , SpreadsheetApp.getActiveSpreadsheet()๋ ํ์ฌ ์ฌ์ฉ ์ค์ธ ์คํ๋ ๋ ์ํธ๋ฅผ ๋ฐํํ๊ฑฐ๋,
์์ ๊ฒฝ์ฐ null์ ๋ฐํํด์ฃผ๋ ํจ์์์.
์คํ๋ ๋ ์ํธ์ Context์์ ์คํ๋๋ ํจ์๋ ์ด ํจ์๋ฅผ ํธ์ถํ์ฌ
ํด๋น Spreadsheet ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋๋ก ๋์ ์ค๋ต๋๋ค.
์ฆ, ์ฃผ๋ํ๋์ ์คํ๋ ๋ ์ํธ์ ์ด๋ค ๊ฐ์ด ์ผ๋ ฅ์ด ๋๋ฉด ์๋์ผ๋ก ํธ๋ฆฌ๊ฑฐ๊ฐ ์๋ ๋๋๋ก ๋ง๋ค์ด ์ค ๊ฒ์ด์์.
๋ณธ๊ฒฉ์ ์ผ๋ก Trigger ์ฒ๋ฆฌ๋ฅผ ํด๋ณผ๊ฒ์.
ํธ๋ฆฌ๊ฑฐ ์ถ๊ฐ๋ฅผ ๋๋ฌ์ค๊ฒ์.
์ต์ด Trigger๊ฐ ์๋ํ๋ฉด ํธ์ถํ ํจ์๋ฅผ ์ ํํด ์ฃผ์ด์ผ ํด์.
์ฃผ๋ํ๋์ ์ฌ๋ฌ ํจ์๋ฅผ ๋๋ ๋์๊ณ , ์ฒซ ์์ ํจ์๋ฅผ mainFunction()์ผ๋ก ํ๊ธฐ ๋๋ฌธ์ ์์ ๊ฐ์ด ์ ํ์ ํ์ด์.
๊ทธ๋ฆฌ๊ณ , ์ด๋ฒคํธ ์ ํ์ ์์ ์ ์ถ ์๋ก ํด์ผ ์ค๋ฌธ์ง๊ฐ ์์ฑ์ด ๋๋ฉด Trigger๊ฐ ์๋๋ ๊ฒ์ด์์.
Trigger๊ฐ ์คํจํ๋ฉด ์ฆ์ ์๋ฆผ์ ๋ฐ๋๊ฒ ์ข๊ฒ ์ด์!
๐ฆ mainFunction()
๋ณธ๊ฒฉ์ ์ผ๋ก Google App Script๋ฅผ ๊ฐ์ง๊ณ ๋์ ๋ณผ๊ฒ์.
์ต์ด ๋ณ์๋ค์ ์ ์ธํด ์ฃผ์์ด์.
15๋ฒ์งธ ์ค์ getActiveSheet()๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ด ์น๊ตฌ๋ ์คํ๋ ๋ ์ํธ์์ ํ์ฑ ์ํธ๋ฅผ ๊ฐ์ ธ์ค๋ ํจ์๋ก ์คํ๋ ๋ ์ํธ์ ํ์ฑ ์ํธ๋ ์คํ๋ ๋ ์ํธ UI์ ํ์๋๊ณ ์๋ ์ํธ๋ฅผ ๋งํด์.
๊ทธ๋ฐ ๋ค 16๋ฒ์งธ ์ค์ getDataRange()๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ด ์น๊ตฌ๋ Range Data๊ฐ ์๋ ์ฐจ์์ ํด๋น ๊ฐ์ ๋ฐํํ๋๋ฐ, Sheet.getLastColumn(), Sheet.getLastRow()๋ก
์ง์ ๋ Range๋ฅผ ๋ง๋๋ ๊ฒ๊ณผ ๋์ผํ ๋ด์ฉ ์ด์์.
17๋ฒ์งธ ์ค๋ถํฐ 19๋ฒ์งธ ์ค์ ์คํ๋ ๋ ์ํธ์ ๊ฐ ๊ฐ์ ํธํ๊ฒ ๊ฐ์ ธ์ค๊ธฐ ์ํด
๋ง์ง๋ง ํ, ๋ง์ง๋ง ์ด, ์ฒซ๋ฒ์งธ ์ด์ ๊ณ์ฐํ์ฌ ๋ณ์์ ๋ด๋๋ก ํ์์ด์.
์ฃผ๋ํ๋์ ์ด๋ฅผ ํตํด Slack์ ์๋ฆผ์ ๋ฐ๊ณ ์ถ๊ธฐ ๋๋ฌธ์ ์ฐจํ์ Slack Web Hook URL์ ๋ฐ์ ์
๋ ฅ๋ ํด์ค๊ฑฐ์์.
์ฃผ๋ํ๋์ ํด๋น Program Version์ ๊ด๋ฆฌํ๊ณ ์ถ์ด์ Version ๋ณ์๋ฅผ ๋ง๋ค์ด ์ฃผ์๊ณ ,
Slack์ด๋, Email ์ ์ก ์ค ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด ๊ทธ๊ฒ ๋ํ Slack์ ์๋ฆผ์ ๋ฐ๊ณ ์ถ์ด์ ๊ฐ๊ฐ์ ๋ฌธ์ ๋ด์ฉ์ ๋ด์ responseValue[] ๋ฅผ ์ ์ธํด ์ฃผ์์ด์.
๊ทธ๋ฆฌ๊ณ , Slcak์ ๋ณด๋ผ ์ฒซ ๋ฌธ์ฅ์ ๋ฏธ๋ฆฌ slackMessage ๋ณ์์ ๋ด์ ์ฃผ์์ด์.
์คํ๋ ๋ ์ํธ๋ ํ๊ณผ ์ด๋ก ์ด๋ค์ ธ ์๊ณ , ์ด ์์ ๊ฐ์ ์ฒ๋ฆฌํ๋ ค๋ฉด ๋ฐ๋ณต๋ฌธ์ด ํ์ํ ๊ฒ์ด์์.
ํด๋น ๋ด์ฉ์ ์ฒ๋ฆฌํ spreadsheetLoop()๋ฅผ ๋ง๋ค์ด ์ฃผ์๊ณ ,
๊ทธ ์์ activeSheet, firstCol ๋ฑ๋ฑ์ ๋ณ์๋ค์ ์ ๋ฌํด ์ฃผ์์ด์.
ํด๋น ์ฒ๋ฆฌ๊ฐ ๋๋ฌ์ ๋, ์ด๋ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ผ๋ฉด ๊ทธ๊ฒ์ ํ์ธํ๋ Logic์ธ errorCheck()๋ ๋ง๋ค์ด ์ฃผ์์ต๋๋ค.
๐ฆ spreadSheetsLoop()
์์์ ์ด์ผ๊ธฐ ํ๋ ๋ฐ๋ณต๋ฌธ ์ฒ๋ฆฌ๋ฅผ ์ํ ํจ์์์.
๋ฐ๋ณต๋ฌธ ์ฒ๋ฆฌ๋ฅผ ์ํด ์ต์ด 1ํ์ ๊ฐ๊ฐ์ ๋ด์ฉ์ ์ ๋ชฉ์ด ์๊ธฐ ๋๋ฌธ์ 2ํ ๋ถํฐ ์์ํ๊ฒ ํ๊ธฐ ์ํด row ๋ณ์๋ฅผ 2๋ก ์ฃผ์์ด์.
๊ทธ๋ฐ ๋ค ๋ง์ง๋ง ํ๋ณด๋ค ๋ฐ๋ณต๋ฌธ์ ํ ๊ฐ์ด ์์ ๋๊น์ง ๋ฐ๋ณตํ๊ฒ ๋ง๋ค์ด ์ฃผ์์ด์.
timeStamp๋ผ๋ ๋ณ์๋ ๊ตฌ๊ธ ์คํ๋ ๋ ์ํธ์ ํ์์คํ
ํ ์ฆ, ํด๋น ์ค๋ฌธ์ง ์์ฑํ ์ผ์๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋ณ์์์.
45๋ฒ์ฌ ์ค if๋ฌธ์ ํด๋น ํ์์คํฌํ ๊ฐ์ด ์๋ค๋ฉด ๋ฌธ์ ๊ฐ ์๋ ๋ด์ฉ์ด๊ธฐ ๋๋ฌธ์ ๋ฐ๋ณต๋ฌธ์ ๋ฉ์ถ๊ฒ ํด ์ค ์ฅ์น์์.
49๋ฒ์งธ ์ค์ timeStamp ๋ณ์์ ๊ฐ์ GMT+9 (๋ํ๋ฏผ๊ตญ ํ์ค์)์ ๋ง์ถ์ด
yyyy๋
MM์dd์ผ HH(24์๊ฐ์ )MM๋ถ ํ์์ผ๋ก ๋ฐ๊ธฐ ์ํด ๋ง๋ค์ด ์ค ๊ฒ์ด์์.
๋ง์ฝ ์๊ฐ์ 12์๊ฐ์ ๋ก ๋ฐ๊ณ ์๋ค๋ฉด HH๋ฅผ hh๋ก ๋ฐ๊พธ์ด ์ฃผ๋ฉด ๋ฉ๋๋ค.
์ด๋ ๊ฒ ํ๋ ์ด์ ๋ timeStamp๋ ์๋์ ๊ฐ์ด ๊ฐ์ด ๋ค์ด์ค๊ธฐ ๋๋ฌธ์ด์์.
Sat Nov 05 2022 00:00:00 GMT+0900 (Korean Standard Time)Sat Dec 30 1899 04:28:32 GMT+0827 (Korean Standard Time)
๋ง์ฝ ์์ ๊ฐ์ด ์ฒ๋ฆฌ ํ์ง ์์ผ๋ฉด ๋์ค์ Slack์ ์๋์ ๊ฐ์ด ๊ฐ์ด ๋ค์ด ์ฌ๊ฑฐ์์.
๋ค์ ๊ฐ๊ฐ์ ๋ณ์๋ค์ ๋ฐ๋ณต๋ฌธ์ ๋ ๋, ๊ฐ๊ฐ์ ํ์์ ๊ฐ ์ด์ ๊ฐ์ ๊ฐ์ ธ์ ๋ณ์๋ก ๋ด๊ธฐ ์ํด ๋ง๋ค์ด ์ค ๋ณ์๋ค์ด์์.
์ด ์ค For ๋ฌธ์ ์ด์ฉํ๋ฉด ๋ณ์๋ฅผ ์ค์ผ์๋ ์๊ฒ ์ผ๋, ์๊ฐ ๋ณต์ก๋๊ฐ ์ฌ๋ผ๊ฐ๊ธฐ ๋๋ฌธ์ ์์ ๊ฐ์ด ์ฒ๋ฆฌํด ์ฃผ์์ด์.
emailTest๋ผ๋ ๋ณ์๋ ์ฐจ ํ Email ๋ฐ์ก Test ๋, ์ ์ฒญ ๊ณ ๊ฐ์๊ฒ ๋ฉ์ผ์ด ๋ฐ์ก๋๋ฉด ์๋๊ธฐ ๋๋ฌธ์
๊ทธ๋ฐ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ง๋ค์ด ์ค ๋ณ์์์.
์ด์ ๋ฐ๋ณต๋ฌธ์ ๋๋ฉด์ ๊ฐ ํ์์ ๊ฐ์ ธ์จ ๊ฐ๋ค์ Slack์ผ๋ก ๋ณด๋ผ Message ๋ณ์์ ๋ด์ ์ค๋๋ค.
94๋ฒ์งธ ์ค์์ ์์์ ๋ฐ์ Slack Message๋ฅผ Slack์ผ๋ก ๋ณด๋ด๊ธฐ ์ํ ํจ์ sendSlack์ ํธ์ถํ๊ณ , slack Web Hooks URL๊ณผ ๋ณด๋ผ Message, ์คํ๋ ๋ ์ํธ URL, Program Version ์ ๋ณด๋ฅผ ๋ด์ ๋ณ์๋ฅผ ์ ๋ฌํด ์ฃผ์์ด์.
๊ทธ๋ฐ ๋ค ๋ฐํ๊ฐ์ slackSendReturnValue ๋ณ์์ ๋ด์ ์ฃผ์์ต๋๋ค.
์ด ๋ณ์๋ Slack์ Message๋ฅผ ๋ณด๋ด๋ฉด์ ๋ฌธ์ ๊ฐ ์๊ฒผ๋์ง ํ์ธ์ ํ๊ธฐ ์ํด ์ ์ธํด ์ค ๊ฒ์ด์์.
95๋ฒ์งธ ๋ณ์๋ ์ ์ฒญ ๊ณ ๊ฐ์๊ฒ Mail์ ๋ณด๋ด๋ Logic์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๋ด์ฉ์ ๋ด์ ์ฃผ๊ธฐ ์ํ ๋ณ์์์.
97๋ฒ์งธ ๋ถํฐ 101๋ฒ์งธ๊น์ง if๋ฌธ์ ์คํ๋ ๋ ์ํธ์ Email ๋ฐ์ก ์ฌ๋ถ ๊ฐ์ด undefined ์ด๊ฑฐ๋, ๋ฏธ๋ฐ์ก ์ด๋ผ๋ ๊ฐ์ด ์๋ค๋ฉด Mail ๋ฐ์ก์ ํ๊ธฐ ์ํด ์กฐ๊ฑด๋ฌธ์ ์ค ๊ฒ์ด์์.
์์ ๊ฐ์ด ์คํ๋ ๋ ์ํธ์ Email ๋ฐ์ก ์ฌ๋ถ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋๋ก ์ฒ๋ฆฌํด ์ฃผ์์ด์.
๋ง์ฝ ์์ ์กฐ๊ฑด๋ฌธ์ ๋ง๊ฒ ๋๋ค๋ฉด Mail ๋ฐ์ก ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๋ ํจ์๊ฐ ํธ์ถ๋๊ณ ,
๋ฐํ๊ฐ์ emailSendReturnValue ๋ณ์์ ๋ด์ ๋ฌธ์ ์ฌ๋ถ๋ฅผ ํ์ธ ํ๋ ค๊ณ ํด์.
103๋ฒ์งธ ๋ฐฐ์ด์ ํ๋ ๋ง๋ค์ด ์ฃผ๋๋ฐ, ์ด๋ Slack์์ ๋ฌธ์ ๋ด์ฉ๊ณผ Mail ๋ฐ์ก ์์ ๋์จ ๋ฌธ์ ๋ค์ ๋ด์
ํ๋ฒ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ง๋ค์ด ์ค ๊ฒ์ด์์.
๊ทธ๋ฐ ๋ค 105 ~ 106๋ฒ์งธ ์ค์ ๊ฐ๊ฐ์ ๋ฌธ์ ๋ด์ฉ์ ํด๋น ๋ฐฐ์ด์ ๋ฐ๋๋ก ํ๊ณ , ๊ทธ ๋ฐฐ์ด์ ๋ฐํํ๊ฒ ํด ์ฃผ์์ด์.
๐ฆ Slack ๊ตฌ์ฑํ๊ธฐ
Slack์ Web Hook ์ค์ ํ๋ ๋ฐฉ๋ฒ์ด์์.
์ต์ด ์์ ๊ฐ์ด Web Hook์ ์ฐ๋ํ ์ฑ๋์ ์ฐํด๋ฆญ ํ ๋ค ์ฑ๋ ์ธ๋ถ ์ ๋ณด ๋ณด๊ธฐ๋ฅผ ์ ํํด ์ค๊ฒ์.
์์ ๊ฐ์ด ํตํฉ์์ ์ฑ ์ถ๊ฐ๋ฅผ ๋๋ฌ์ค๊ฒ์.
์์ ๊ฐ์ด incoming WebHooks๋ฅผ ์ฐพ๊ณ , ์ค์น๋ฅผ ๋๋ฌ ์ค๋๋ค.
Slack์ ์ถ๊ฐ๋ฅผ ๋๋ฌ์ค๊ฒ์.
์ฑ๋ ์ ํ์์ ์๋ฆผ์ ๋ฐ์ ์ฑ๋์ ์ ํํด ์ฃผ์ธ์.
๊ทธ๋ฐ ๋ค ์์ ์นํํฌ ํตํฉ ์ฑ ์ถ๊ฐ๋ฅผ ๋๋ฌ์ค๋๋ค.
์ฃผ๋ํ๋์ ์์ ๊ฐ์ด ์ค์ ์ ํด์ฃผ๋ ค๊ณ ํด์.
Web Hook URL์ ์ ์ ๋ฆฌํด ๋์ด์ผ ํด์.
์ค์ ์ ์ฅ์ ๋๋ฌ์ค๊ฒ์.
๐ก ์ฐธ๊ณ ์ฌํญ
Slack Incoming Web Hooks
์์ ๊ฐ์ด ์ฒ๋ฆฌ๋ฅผ ํ ๋ค ๋ณธ๊ฒฉ์ ์ผ๋ก Slack์ Message๋ฅผ ๋ด๋นํ ํจ์๋ฅผ ๋ถ์ํด ๋ณผ๊ฒ์.
117๋ฒ์งธ ์ค์ Slack ์ฒ๋ฆฌ ์์ ๋ฌธ์ ๊ฐ ์๋ค๋ฉด ํด๋น ๋ด์ฉ์ ๋ด์ ๋ณ์๋ฅผ ์ ์ธํด ์ฃผ์์ด์.
๊ทธ๋ฐ ๋ค payload ๊ฐ์ฒด ์์ text๋ผ๋ Key๋ก Value๋ slackMessage๋ฅผ ๋ฃ์ด ์ฃผ์์ด์.
option์ด๋ผ๋ ๊ฐ์ฒด ์์๋ Slack์ ๋ด์ฉ์ ๋ณด๋ผ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ Http Method๋ฅผ POST๋ก ์ง์ ํด ์ฃผ๊ณ , contentType์ json Type์ผ๋ก ๋ณด๋ผ ์ ์๋๋ก ์ฒ๋ฆฌ ํด ์ค ๋ค ์ค์ Payload ๊ฐ์ JSON์ผ๋ก ๋ฐ๊พธ์ด ์ ์ฅํด ์ฃผ์์ด์.
129๋ฒ์งธ ์ค๋ถํฐ 133๋ฒ์งธ ์ค๊น์ง ์ค์ ๋ก Slack์ Message๋ฅผ ๋ณด๋ด๋ Logic์ด์์.
์ด ๊ณณ์์ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๊ธฐ ๋๋ฌธ์ try - catch๋ก ๋ฌถ์ด ์ฃผ์์ด์.
๋ง์ฝ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค๋ฉด ์์์ ๋ง๋ค์๋ slackErrorCheck ๋ณ์์ ์ด๋ค ๋ฌธ์ ๊ฐ ์๊ฒผ๋์ง๋ฅผ ๋ด๋๋ก ํ์์ด์.
๊ทธ๋ฆฌ๊ณ , ๋ฐํ๊ฐ์ผ๋ก ํด๋น ๋ณ์๋ฅผ ๋ฐํํ๊ฒ ํด ์ฃผ์๋ต๋๋ค.
๐ฆ ์๋์ผ๋ก Mail ๋ณด๋ด๋๋ก ํ๊ธฐ
์ด๋ฒ์ Gmail์ ํตํด Mail์ด ๊ฐ ์ ์๋๋ก ์ฒ๋ฆฌํด ๋ณผ๊ฒ์.
๋จผ์ Email ์ ๋ชฉ์ ๋ฃ๊ธฐ ์ํด emailSubject ๋ณ์์ ๋ด์ฉ์ ๋ฃ์ด ์ฃผ์์ด์.
๊ทธ๋ฆฌ๊ณ , Email ๋ณธ๋ฌธ ๊ฐ์ emailBody์ ๋ฃ์ด ์ฃผ์์ต๋๋ค.
161๋ฒ์งธ ์ค์ ๋ณ์๋ Mail์ ๋ณด๋ด๋ค๊ฐ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด ํด๋น ๋ด์ฉ์ ๋ฐ๊ธฐ ์ํ ๋ณ์์์.
163 ~ 165๋ฒ์งธ ์ค์ Mail ๋ฐ์ก Test ์์ ๋ณ์๋ฅผ ํ์ธํด์Mail ๋ฐ์ก Test๋ผ๋ฉด
์ฃผ๋ํ๋์๊ฒ Mail์ด ์ฌ ์ ์๋๋ก ์ฒ๋ฆฌํด ์ฃผ๋ ๊ฒ์ด์์.
๊ทธ๋ฐ ๋ค Try catch ๋ฌธ์ ์ด์ฉํด์ ๋ฌธ์ ์ ๋ํ ๋๋น๋ฅผ ํด ์ฃผ๊ณ , try ๋ฌธ์ ํตํด Mail์ด ๋ฐ์ก๋๋ Logic์ ์ฒ๋ฆฌํด ์ฃผ์์ด์.
169๋ฒ์งธ ์ค์๋ ํด๋น Mail์ด ๋ณด๋ด์ง๋ฉด ์คํ๋ ๋ ์ํธ ํด๋น ํ 16๋ฒ์งธ ํ์
'๋ฐ์ก'์ด๋ผ๋ Data๊ฐ ์๋์ผ๋ก ๋จ๊ฒ ํด ์ฃผ์์ด์.
๊ทธ๋์ผ ๋ค์ ์คํ ๋๋ Mail์ด ๋์ผ์ธ์๊ฒ ๋ฐ์ก๋๋ ๊ฑธ ๋ง์ ์ ์๊ธฐ ๋๋ฌธ์ด์์.
๋ง์ฝ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด 161๋ฒ์งธ ์ค ๋ณ์์ ์ด๋ค ๋ฌธ์ ๊ฐ ์๊ฒผ๋์ง๋ฅผ ๋ด๋๋ก ํด ์ฃผ๊ณ , ์ด๋ฅผ ๋ฐํํด ์ฃผ๋๋ก ์ฒ๋ฆฌํด ์ฃผ์์ด์.
๐ฆ Error Check
Slack๊ณผ Mail ๋ฐ์ก ์์ ์ด๋ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ฉด ๊ทธ ๋ฌธ์ ๋ฅผ ๋ค์ Slack์ผ๋ก ๋ณด๋ด๊ธฐ ์ Logic์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ํจ์์์.
์ฃผ๋ํ๋์ด ํด๋น Message์ ๋จ๊ธฐ๊ณ ์ถ์ ๋ด์ฉ์ ๋จผ์ ๋ณ์์ ๋ด์ ์ฃผ๊ณ , ์์์ ํด๋น ๊ฐ๋ค์ ๋ฐ๊ธฐ ์ํด ์ ์ธํ๋ responseValue ๋ฐฐ์ด์ ๊ฐ์ ํ๋์ฉ ๊บผ๋ด ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ฐ๋ณต๋ฌธ์ ๋๋ ค ์ฃผ์์ด์.
ํด๋น ๋ฐฐ์ด์ idx ๊ฐ ๋ด์ฉ์ด ๋น ๊ฐ์ด ์๋๋ผ๋ฉด errorSlackMessage์ Error ๋ด์ฉ์ ๋ด์์ฃผ๊ณ ,
ํด๋น ๋ด์ฉ์ Slack์ผ๋ก ๋ณด๋ด๊ธฐ ์ํ ํจ์๋ฅผ ํธ์ถํ๋๋ก ํ๊ณ ์์ด์.
๐ฆ Slack Error Value Send
๋ฌธ์ ๊ฐ ์๊ธด ๋ด์ฉ์ Slack์ผ๋ก ๋ณด๋ด๊ฒ ํ๊ธฐ ์ํ Logic์ด์์.
203๋ฒ์งธ ์ค์ ๋ค๋ฅธ ์ฑ๋์ ํด๋น ๊ฐ์ ๋ฐ๊ธฐ ์ํด Web Hooks URL์ ์๋ก ๋ฐ์ ์ฃผ์์ด์.
๊ทธ๋ฐ ๋ค ์์ Slack Send Logic๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ์ ๋ณด๋ด๋๋ก ์ฒ๋ฆฌ๋ฅผ ํ์๋ต๋๋ค.
๐ฝ Test
๐ฆ ์ ์ ์๋ ์ฌ๋ถ ํ์ธ
์ด์ ์ ์๋ํ๋ ์ง ํ๋ฒ ํ์ธํด ๋ณผ๊ฒ์.
Test๋ฅผ ์ํด ์ต์ด ์๋ํ ํจ์๋ฅผ ์ ํํด ์ฃผ๊ณ , ์คํ Button์ ๋๋ฌ์ค๋๋ค.
๊ทธ๋ผ ์์ ๊ฐ์ด ๊ฒฝ๊ณ ๊ฐ ๋ฐ์ํ ํ
๋ฐ, ์ด๋ Email Logic์ ์ฒ๋ฆฌํ๊ธฐ ์ ๊ณ์ ์ค์ ์ ํด์ฃผ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด์์.
ํ์ฌ Login๋ ๊ณ์ ์ ์ ํํฉ๋๋ค.
....(์์ ํ์ง ์์)์ ๋๋ฌ์ฃผ์ธ์.
์์ ๊ฐ์ด ๋์ค๋ฉด ํ์ฉ์ ๋๋ฌ์ค๋๋ค.
์คํ์ด ์ ์์ ์ผ๋ก ๋๋ฉด ์์ ๊ฐ์ด Slack์ด ์ค๋ ๊ฒ์ ํ์ธํ ์ ์์ด์.
Mail๋ ์ ์์ ์ผ๋ก ์จ ๊ฒ์ ํ์ธํ ์ ์์ด์.
์คํ๋ ๋ ์ํธ์๋ Mail์ด ๊ฐ ๋ค ๋ฐ์ก์ด๋ผ๋ ๊ฐ์ด ๋จ์ ๊ฑธ ํ์ธํ ์ ์์ด์.
Slack์ ๋ฐ์กํ๋ ค๋ค๊ฐ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ ๊ฒฝ์ฐ๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด 130๋ฒ์งธ fetch ๋งค๊ฐ๋ณ์์ URL ๋ณ์๋ช
์ ์กฐ์ํด ๋ณด์์ด์.
์์ ๊ฐ์ด Slack์ ๋ณด๋ด๋ค๊ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค๊ณ Slack์ผ๋ก ์ค๋ ๊ฒ์ ํ์ธํ ์ ์์ด์.
์ด๋ฒ์ Mail์ ๋ณด๋ด๋ค๊ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ํฉ์ ๊ฐ์ ํด ๋ณผ๊ฒ์.
์ต์ด Slack์ ์ ์์ ์ผ๋ก ๋์ฐฉ์ ํ์ด์.
ํ์ง๋ง Mail ๋ณด๋ผ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค๊ณ ๋์ค๋ ๊ฒ์ ํ์ธํ ์ ์์ด์.
๋ ๋ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ํด๋ฒ๋ฆฌ๋ฉด ์ด๋ ๊ฒ ๋ ๋ค ๋ฌธ์ ๊ฐ ์๋ค๊ณ ์๋ ค์ฃผ๋ ๊ฒ๋ ํ์ธ์ ํ์๋ต๋๋ค.
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."