ํ๋ก์ ํธ ์๊ฐ
์ด ํ๋ก์ ํธ๋ ๊ต๋ณด CDA 1๊ธฐ ๊ณผ์ ์ TIL ์ฑ๋ฆฐ์ง๋ฅผ ์ง์ํ๊ธฐ ์ํด ์งํ๋์์ต๋๋ค. ๋งค๋์ ๋๋ค์ด ์ง์ ์ํํ๋ ์ฑ๋ฆฐ์ง ๊ธ ๊ฒ์, ์ข์์ ์ง๊ณ, ์๋ณ ์ฃผ์ฐจ๋ณ ์ฐธ์ฌ ์ธ์ ์ ์ ์์ ์ TIL ์ฑ๋ฆฐ์ง ๋ด์ ํตํด ์๋ํํ์์ผ๋ฉฐ, ์ฃผ์ฐจ๋ณ ์ฐธ์ฌ ์ธ์๊ณผ ์ข์์ ์๋ฅผ ์นํ์ด์ง์์ ํ๋์ ๋ณผ ์ ์๋๋ก ์๊ฐํํ์ต๋๋ค.
๐ก TIL ์ฑ๋ฆฐ์ง๋?
๋งค์ฃผTIL N์ N์ฃผ์ฐจ๋ผ๋ ๋ฉ์์ง๋ฅผ ์ฌ๋(Slack)์ ๊ฒ์ํ๋ฉด, ๋ฉค๋ฒ๋ค์ ํด๋น ๋ฉ์์ง์ ๋ต๊ธ๋ก ์์ ์ด ์์ฑํ ๋ธ๋ก๊ทธ ๊ธ์ URL์ ์ฌ๋ฆฝ๋๋ค. ๋ค๋ฅธ ์ฌ์ฉ์๋ค์ ํด๋น ๊ธ์ ์ฝ๊ณ , ๋ง์์ ๋ค๋ฉด ์ข์์(๐)๋ฅผ ๋๋ฌ ์๋ก์ ํ์ต ๋ด์ฉ์ ๊ฒฉ๋ คํ๊ณ ๊ณต์ ํฉ๋๋ค.
ํ๋ก์ ํธ ๊ฐ์
๋ฐฐ๊ฒฝ
Slack ๊ธฐ๋ฐ TIL ์ฑ๋ฆฐ์ง์์๋ ์ ๋ต๊ธ์ด ๋ฑ๋ก๋ ๋, ํด๋น ๊ธ์ ์ฐธ์ฌํ ์ผ๋ถ ๋ฉค๋ฒ๋ง ์๋ฆผ์ ๋ฐ๊ณ , ์ฑ๋ฆฐ์ง์ ์ฐธ์ฌํ์ง ์์ ๋ฉค๋ฒ๋ค์ ์๋ก์ด ํ์ต ๋ด์ฉ์ด ๊ฒ์๋ ์ฌ์ค์ ์ ์ ์์์ต๋๋ค. ์ด๋ก ์ธํด โ์๋ก์ ํ์ต ๋ด์ฉ์ ๊ณต์ ํ๋คโ๋ ์ฑ๋ฆฐ์ง์ ๋ณธ๋ ์ทจ์ง๋ฅผ ์ด๋ฆฌ์ง ๋ชปํ๋ค๊ณ ์๊ฐํ์ต๋๋ค.
๋ํ, ๊ธฐ์กด์๋ ๋งค๋์ ๋์ด ๋งค์ฃผ ์๋์ผ๋ก TIL N์ N์ฃผ์ฐจ ๊ธ์ ์์ฑํ๊ณ , ์ฐธ์ฌ ํํฉ๊ณผ ์ข์์(๐) ์๋ฅผ ์ง์ ์ง๊ณํ๋ ๋ฐฉ์์ด ๋นํจ์จ์ ์ด๋ผ๊ณ ํ๋จํ์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด ๋ณธ ํ๋ก์ ํธ๋ฅผ ์์ํ๊ฒ ๋์์ต๋๋ค.
๋ชฉํ
- Slack ๊ธฐ๋ฐ TIL ์ฑ๋ฆฐ์ง์ ์ด์ ๊ณผ์ ์ ์๋ํ
- ์ฐธ์ฌ ํํฉ ๋ฐ ์ฑ๊ณผ๋ฅผ ๋ช ํํ ํ์ ํ ์ ์๋๋ก ํ๋ ์ฑ๋ด ๋ฐ ๋์๋ณด๋๋ฅผ ์ ๊ณต
๊ธฐ์ ์คํ
- Python, Slack API, AWS, React
์ฃผ์ ๊ธฐ๋ฅ
- TIL ์ฑ๋ฆฐ์ง ๋ฉ์ธ์ง ๋ฐ ์ฐธ์ฌ ์๋ฆผ ๋ฉ์์ง ๊ฒ์ ์๋ํ
- ๋งค์ฃผ ์์์ผ
TIL N์ N์ฃผ์ฐจ๋ฉ์์ง๋ฅผ Slack ์ฑ๋์ ์๋์ผ๋ก ๊ฒ์

- ๋ฉค๋ฒ๊ฐ ๋ธ๋ก๊ทธ URL์ ์ฒจ๋ถํ ๋ต๊ธ์ ๋ฌ๋ฉด ์ ์ฒด ์ฑ๋์ ์๋ฆผ ๋ฉ์์ง ๋ฐ์ก

- ๋งค์ฃผ ์์์ผ
- ์ข์์(๐) ์ง๊ณ ์๋ํ
- TIL ์ฑ๋ฆฐ์ง ๊ฒ์๊ธ์ ๋ต๊ธ์ ๋ฌ๋ฆฐ ๐ ์ด ์ถ๊ฐ/์ญ์ ๋ ๋๋ง๋ค ํด๋น ๋ฉค๋ฒ์ ์ข์์ ์๋ฅผ ์ค์๊ฐ ์ง๊ณ
- ์ข์์ ๋ฐ์ ์ Velog, Github, Naver ๋ธ๋ก๊ทธ ๋งํฌ ์ฌ๋ถ ์ฒดํฌ๋ฅผ ํตํด ์ค์ ์ฐธ์ฌ์ฌ๋ถ๋ฅผ ์ ํํ ๊ด๋ฆฌ
- ์๋ณ ์ฑ๋ฆฐ์ ์ ์ ์๋ํ
- ๋งค์ ์ฒซ ๋ฒ์งธ ์์์ผ์ ์ง๋๋ฌ ์ ์ฃผ์ฐจ์ ์ฐธ์ฌํ ๋ฉค๋ฒ ๋ฐ ๊ทธ ์ค ์ต๊ณ ์ข์์ ํ๋์๋ฅผ ์๋ ์ ์ ๋ฐ ๋ฐํ

- ๋งค์ ์ฒซ ๋ฒ์งธ ์์์ผ์ ์ง๋๋ฌ ์ ์ฃผ์ฐจ์ ์ฐธ์ฌํ ๋ฉค๋ฒ ๋ฐ ๊ทธ ์ค ์ต๊ณ ์ข์์ ํ๋์๋ฅผ ์๋ ์ ์ ๋ฐ ๋ฐํ
- ์ฐธ์ฌ ํํฉ ์๊ฐํ ๋์๋ณด๋ ์ ๊ณต
- S3์ ์ ์ฅ๋ JSON ๋ฐ์ดํฐ๋ฅผ React ๊ธฐ๋ฐ ์ ์ ์น์ผ๋ก ์๊ฐํ
- ์ฃผ์ฐจ๋ณ ์ฐธ์ฌ ์ธ์ ๋ฐ ์ข์์ ์๋ฅผ ํ๋์ ํ์ธ ๊ฐ๋ฅ

- ์ด์์ ์ํ Slack ๊ฐ์ธ DM ์ข์์ ๋ฐ ์๋ฌ ์๋ฆผ
- ์ข์์ ๋ณ๋ ์ ๋ณธ์ธ DM์ผ๋ก ์ํ ๋ฉ์์ง ์ ์ก
- ์์คํ ์๋ฌ ๋ฐ์ ์ ์๋ฌ ์๋ฆผ ๋ฉ์์ง ์ ์ก
์ํคํ ์ฒ

- ์๋ฒ๋ฆฌ์ค ์ํคํ
์ฒ(AWS Lambda) ์ ํ ์ด์
- ๋น ๋ฅธ ๋ฐฐํฌ, ๊ด๋ฆฌ ๋ถ๋ด ๊ฐ์, ์ฌ์ฉ๋ ๊ธฐ๋ฐ ๊ณผ๊ธ
- S3 ์ฌ์ฉ ์ด์
- ์๊ท๋ชจ JSON ๋ฐ์ดํฐ ๊ด๋ฆฌ์ ์ ํฉ, ๋จ์ ๊ตฌ์กฐ ์ ์ง
- SQS ๋์
- FIFO ํ๋ก ์์ฒญ ์ง๋ ฌ ์ฒ๋ฆฌ โ ๋์์ฑ ๋ฌธ์ ํด๊ฒฐ, ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ
๋ฌธ์ ํด๊ฒฐ ๊ฒฝํ
๋ฌธ์ 1 - S3 ๋์์ฑ ๋ฌธ์
์ด๊ธฐ์๋ API Gateway โ Lambda โ S3 ๊ตฌ์กฐ๋ก ์์ฒญ์ ์ฒ๋ฆฌํ์ต๋๋ค. ๋ํ, ์ฑ๋ฆฐ์ง ์ฐธ์ฌ์ ์๊ฐ 10๋ช
๋ด์ธ๋ก ๋ง์ง ์์ ๊ฐ๋จํ S3์ JSON ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ฝ๋ ๋ฐฉ์์ด์์ต๋๋ค. ๊ทธ๋ฌ๋ S3์๋ ํ์ผ ์ ๊ธ(ํ์ผ ๋ฝ) ๊ธฐ๋ฅ์ด ์์ด, ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ฐ๋ ์ํฉ์์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ด ๊นจ์ง ์ ์์์ต๋๋ค.
์๋ฅผ ๋ค์ด, A์ B๊ฐ ๋์์ ์ฑ๋ฆฐ์ง์ ์ฐธ์ฌํ๋ ๊ธ์ ๋จ๊ธธ ๋, Lambda๋ ๋์ผํ S3 JSON ํ์ผ์ ๋ถ๋ฌ์ ๊ฐ๊ฐ์ ์ฐธ์ฌ ์ ๋ณด๋ฅผ ์ถ๊ฐํฉ๋๋ค. A๊ฐ ๋จผ์ S3์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ํ๊ณ ์ ์ฅํ ์งํ, B๋ ์ด์ ์ํ์ S3 ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ค์ ์ ์ฅํ๋ ค ํ๋ฉด A์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฎ์ด์ฐ์ฌ์ ธ ๋ฐ์ดํฐ์ ๋ฐ์๋์ง ์์ ์ ์์ต๋๋ค.
๊ฐ์ ๋ฐฉ๋ฒ: SQS(FIFO) ๋์
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด AWS SQS์ FIFO ํ๋ฅผ ๋์ ํ์ต๋๋ค. ์๋ก์ด ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ด์ ๋ชจ๋ ์์ฒญ์ ๋จผ์ SQS์ ์ ์ฌ๋๋ฉฐ, FIFO ํ ํน์ฑ์ ๋ฉ์์ง๋ฅผ ์์๋๋ก ํ๋์ฉ Lambda ํจ์์ ์ ๋ฌํฉ๋๋ค. ๋ํ, SQS ํธ๋ฆฌ๊ฑฐ ์ค์ ์ ๋ฐฐ์น ์ฒ๋ฆฌ ์๋ฅผ 1๋ก ์ง์ ํ์ฌ Lambda๊ฐ ์ค์ง ํ๋์ ์์ฒญ๋ง ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ๋๋ก ํ์ต๋๋ค. ์ด๋ก์จ S3 ์ ๊ทผ ์ ๋ชจ๋ ์ด์ ์์ฒญ ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋ ์ํ๋ฅผ ๋ณด์ฅํ์ฌ, ๋์์ ๋ฐ์ํ ์ ์๋ ๋ฎ์ด์ฐ๊ธฐ ๋ฌธ์ ๋ฅผ ๊ทผ๋ณธ์ ์ผ๋ก ๋ฐฉ์งํ๊ณ S3 ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ํ๋ณดํ ์ ์์์ต๋๋ค.
๋ฌธ์ 2 - Slack ์ด๋ฒคํธ URL ๊ฒ์ฆ(Challenge ์์ฒญ) ๋ฌธ์
Slack ์ด๋ฒคํธ๋ฅผ ๊ตฌ๋
ํ๋ ค๋ฉด Slack์์ ์ ๊ณตํ๋ Challenge ์์ฒญ์ ์๋ตํด์ผ ํฉ๋๋ค. ์ด๋ Slack์ challenge๋ผ๋ ํค๋ฅผ ํฌํจํ ๊ฐ์ ๋ณด๋ด๋ฉฐ, ์๋ฒ๋ ํด๋น challenge ๊ฐ์ ๊ทธ๋๋ก ๋ฐํํด์ผ ์ด๋ฒคํธ ๊ตฌ๋
์ ์ธ์ ๋ฐ์ต๋๋ค.
ํ์ง๋ง ๊ธฐ์กด ๊ตฌ์กฐ(API Gateway โ SQS โ Lambda)์์๋ Slack์ด ์ํ๋ ์ฆ๊ฐ์ ์ธ ์๋ต์ ์ ๊ณตํ๊ธฐ ์ด๋ ค์ ์ต๋๋ค. Slack์ด challenge ์์ฒญ์ ๋ณด๋ด๋ฉด, API Gateway๋ ์ด๋ฅผ SQS์ ์ ๋ฌํ๊ณ , SQS๋ ๋ฉ์์ง ํ์ ์ฑ๊ณต์ ์ผ๋ก ์ ์ฅํ๋ค๋ ์๋ต์ API Gateway๋ก ๋ณด๋ด๋ ์์ผ๋ก ๋น๋๊ธฐ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์
๋๋ค.
๊ทธ ๊ฒฐ๊ณผ Slack์๊ฒ๋ challenge ๊ฐ ๋์ SQS ์ฒ๋ฆฌ ์ฑ๊ณต ์ ๋ณด๊ฐ ๋จผ์ ๋ฐํ๋์ด๋ฒ๋ฆฌ๊ณ , Slack์ URL ๊ฒ์ฆ์ ์คํจํ๊ฒ ๋ฉ๋๋ค. Lambda๊ฐ ๋์ค์ challenge ๊ฐ์ ๋ณด๋ด๋ ์ด๋ฏธ ๊ฒ์ฆ ์์ฒญ์ ๋๋ ์ํ์
๋๋ค.
๊ฐ์ ๋ฐฉ๋ฒ: Challenge ์ฒ๋ฆฌ ์ ์ฉ Lambda ์ถ๊ฐ
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Challenge ์์ฒญ์ ๋ํด์๋ง ์ฆ์ ์๋ต ๊ฐ๋ฅํ ๊ตฌ์กฐ๋ฅผ ๋์ ํ์ต๋๋ค. SQS๋ก ๋ณด๋ด๊ธฐ ์ Challenge ์์ฒญ ์ ์ฉ Lambda ํจ์๋ฅผ ์ถ๊ฐํ์ฌ, ์ด Lambda์์ Slack์
challenge๊ฐ์ ์ฆ์ ๋ฐํํ๋๋ก ํ์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด Slack์ด ๋ฐ๋ก ์ํ๋ ์๋ต์ ์ป์ ์ ์์ด ์ด๋ฒคํธ ๊ตฌ๋ ์ด ์ ์์ ์ผ๋ก ์๋ฃ๋ฉ๋๋ค.
์ดํ ์ผ๋ฐ ์ด๋ฒคํธ ์์ฒญ์ ๊ธฐ์กด๋๋ก SQS๋ฅผ ํตํด ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ฉด ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด Slack ์ด๋ฒคํธ URL ๊ฒ์ฆ์ ์คํจํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
๊ฒฐ๊ณผ ๋ฐ ์ฑ๊ณผ
- TIL ์ฑ๋ฆฐ์ง ์งํ ํ๋ก์ธ์ค ์์ ์๋ํ
- ์๋ก์ด ๊ธ ๊ฒ์ ๋ฐ ์ข์์ ๋ณ๋์ ๋ํ ์ค์๊ฐ ์๋ฆผ ์ ๊ณต
- ๊ด๋ฆฌ์ ์๋ ์ง๊ณ ์ ๋ฌด ์์ ๋์ฒด ๋ฐ ์๊ฐํ ๋์๋ณด๋ ์ ๊ณต
- AWS ์๋ฒ๋ฆฌ์ค ์ํคํ ์ฒ ๋์ ์ผ๋ก ์์ ์ ์ด๊ณ ํ์ฅ ๊ฐ๋ฅํ ์๋น์ค ์ด์ ์ญ๋ ๊ฐํ

์ด์ ๋ชจ๋ ์์ฒญ์ ๋จผ์ SQS์ ์ ์ฌ๋๋ฉฐ, FIFO ํ ํน์ฑ์ ๋ฉ์์ง๋ฅผ ์์๋๋ก ํ๋์ฉ Lambda ํจ์์ ์ ๋ฌํฉ๋๋ค. ๋ํ, SQS ํธ๋ฆฌ๊ฑฐ ์ค์ ์ ๋ฐฐ์น ์ฒ๋ฆฌ ์๋ฅผ 1๋ก ์ง์ ํ์ฌ Lambda๊ฐ ์ค์ง ํ๋์ ์์ฒญ๋ง ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ๋๋ก ํ์ต๋๋ค. ์ด๋ก์จ S3 ์ ๊ทผ ์ ๋ชจ๋ ์ด์ ์์ฒญ ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋ ์ํ๋ฅผ ๋ณด์ฅํ์ฌ, ๋์์ ๋ฐ์ํ ์ ์๋ ๋ฎ์ด์ฐ๊ธฐ ๋ฌธ์ ๋ฅผ ๊ทผ๋ณธ์ ์ผ๋ก ๋ฐฉ์งํ๊ณ S3 ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ํ๋ณดํ ์ ์์์ต๋๋ค.