ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

์ด ํ”„๋กœ์ ํŠธ๋Š” ๊ต๋ณด CDA 1๊ธฐ ๊ณผ์ •์˜ TIL ์ฑŒ๋ฆฐ์ง€๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์ง„ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋งค๋‹ˆ์ €๋‹˜๋“ค์ด ์ง์ ‘ ์ˆ˜ํ–‰ํ•˜๋˜ ์ฑŒ๋ฆฐ์ง€ ๊ธ€ ๊ฒŒ์‹œ, ์ข‹์•„์š” ์ง‘๊ณ„, ์›”๋ณ„ ์ฃผ์ฐจ๋ณ„ ์ฐธ์—ฌ ์ธ์› ์„ ์ • ์ž‘์—…์„ TIL ์ฑŒ๋ฆฐ์ง€ ๋ด‡์„ ํ†ตํ•ด ์ž๋™ํ™”ํ•˜์˜€์œผ๋ฉฐ, ์ฃผ์ฐจ๋ณ„ ์ฐธ์—ฌ ์ธ์›๊ณผ ์ข‹์•„์š” ์ˆ˜๋ฅผ ์›นํŽ˜์ด์ง€์—์„œ ํ•œ๋ˆˆ์— ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ์‹œ๊ฐํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก TIL ์ฑŒ๋ฆฐ์ง€๋ž€?
๋งค์ฃผ TIL N์›” N์ฃผ์ฐจ๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์Šฌ๋ž™(Slack)์— ๊ฒŒ์‹œํ•˜๋ฉด, ๋ฉค๋ฒ„๋“ค์€ ํ•ด๋‹น ๋ฉ”์‹œ์ง€์— ๋‹ต๊ธ€๋กœ ์ž์‹ ์ด ์ž‘์„ฑํ•œ ๋ธ”๋กœ๊ทธ ๊ธ€์˜ URL์„ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋“ค์€ ํ•ด๋‹น ๊ธ€์„ ์ฝ๊ณ , ๋งˆ์Œ์— ๋“ค๋ฉด ์ข‹์•„์š”(๐Ÿ‘)๋ฅผ ๋ˆŒ๋Ÿฌ ์„œ๋กœ์˜ ํ•™์Šต ๋‚ด์šฉ์„ ๊ฒฉ๋ คํ•˜๊ณ  ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.


ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

๋ฐฐ๊ฒฝ

Slack ๊ธฐ๋ฐ˜ TIL ์ฑŒ๋ฆฐ์ง€์—์„œ๋Š” ์ƒˆ ๋‹ต๊ธ€์ด ๋“ฑ๋ก๋  ๋•Œ, ํ•ด๋‹น ๊ธ€์— ์ฐธ์—ฌํ•œ ์ผ๋ถ€ ๋ฉค๋ฒ„๋งŒ ์•Œ๋ฆผ์„ ๋ฐ›๊ณ , ์ฑŒ๋ฆฐ์ง€์— ์ฐธ์—ฌํ•˜์ง€ ์•Š์€ ๋ฉค๋ฒ„๋“ค์€ ์ƒˆ๋กœ์šด ํ•™์Šต ๋‚ด์šฉ์ด ๊ฒŒ์‹œ๋œ ์‚ฌ์‹ค์„ ์•Œ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด โ€˜์„œ๋กœ์˜ ํ•™์Šต ๋‚ด์šฉ์„ ๊ณต์œ ํ•œ๋‹คโ€™๋Š” ์ฑŒ๋ฆฐ์ง€์˜ ๋ณธ๋ž˜ ์ทจ์ง€๋ฅผ ์‚ด๋ฆฌ์ง€ ๋ชปํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ, ๊ธฐ์กด์—๋Š” ๋งค๋‹ˆ์ €๋‹˜์ด ๋งค์ฃผ ์ˆ˜๋™์œผ๋กœ TIL N์›” N์ฃผ์ฐจ ๊ธ€์„ ์ž‘์„ฑํ•˜๊ณ , ์ฐธ์—ฌ ํ˜„ํ™ฉ๊ณผ ์ข‹์•„์š”(๐Ÿ‘) ์ˆ˜๋ฅผ ์ง์ ‘ ์ง‘๊ณ„ํ•˜๋Š” ๋ฐฉ์‹์ด ๋น„ํšจ์œจ์ ์ด๋ผ๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋ณธ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ชฉํ‘œ

  • Slack ๊ธฐ๋ฐ˜ TIL ์ฑŒ๋ฆฐ์ง€์˜ ์šด์˜ ๊ณผ์ •์„ ์ž๋™ํ™”
  • ์ฐธ์—ฌ ํ˜„ํ™ฉ ๋ฐ ์„ฑ๊ณผ๋ฅผ ๋ช…ํ™•ํžˆ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ฑ—๋ด‡ ๋ฐ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์ œ๊ณต

๊ธฐ์ˆ  ์Šคํƒ

  • Python, Slack API, AWS, React

์ฃผ์š” ๊ธฐ๋Šฅ

  1. TIL ์ฑŒ๋ฆฐ์ง€ ๋ฉ”์„ธ์ง€ ๋ฐ ์ฐธ์—ฌ ์•Œ๋ฆผ ๋ฉ”์‹œ์ง€ ๊ฒŒ์‹œ ์ž๋™ํ™”
    • ๋งค์ฃผ ์›”์š”์ผ TIL N์›” N์ฃผ์ฐจ ๋ฉ”์‹œ์ง€๋ฅผ Slack ์ฑ„๋„์— ์ž๋™์œผ๋กœ ๊ฒŒ์‹œ
    • ๋ฉค๋ฒ„๊ฐ€ ๋ธ”๋กœ๊ทธ URL์„ ์ฒจ๋ถ€ํ•œ ๋‹ต๊ธ€์„ ๋‹ฌ๋ฉด ์ „์ฒด ์ฑ„๋„์— ์•Œ๋ฆผ ๋ฉ”์‹œ์ง€ ๋ฐœ์†ก
  2. ์ข‹์•„์š”(๐Ÿ‘) ์ง‘๊ณ„ ์ž๋™ํ™”
    • TIL ์ฑŒ๋ฆฐ์ง€ ๊ฒŒ์‹œ๊ธ€์˜ ๋‹ต๊ธ€์— ๋‹ฌ๋ฆฐ ๐Ÿ‘ ์ด ์ถ”๊ฐ€/์‚ญ์ œ๋  ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ๋ฉค๋ฒ„์˜ ์ข‹์•„์š” ์ˆ˜๋ฅผ ์‹ค์‹œ๊ฐ„ ์ง‘๊ณ„
    • ์ข‹์•„์š” ๋ฐ˜์˜ ์‹œ Velog, Github, Naver ๋ธ”๋กœ๊ทธ ๋งํฌ ์—ฌ๋ถ€ ์ฒดํฌ๋ฅผ ํ†ตํ•ด ์‹ค์ œ ์ฐธ์—ฌ์—ฌ๋ถ€๋ฅผ ์ •ํ™•ํžˆ ๊ด€๋ฆฌ
  3. ์›”๋ณ„ ์ฑŒ๋ฆฐ์ € ์„ ์ • ์ž๋™ํ™”
    • ๋งค์›” ์ฒซ ๋ฒˆ์งธ ์›”์š”์ผ์— ์ง€๋‚œ๋‹ฌ ์ „ ์ฃผ์ฐจ์— ์ฐธ์—ฌํ•œ ๋ฉค๋ฒ„ ๋ฐ ๊ทธ ์ค‘ ์ตœ๊ณ  ์ข‹์•„์š” ํš๋“์ž๋ฅผ ์ž๋™ ์„ ์ • ๋ฐ ๋ฐœํ‘œ
  4. ์ฐธ์—ฌ ํ˜„ํ™ฉ ์‹œ๊ฐํ™” ๋Œ€์‹œ๋ณด๋“œ ์ œ๊ณต
    • S3์— ์ €์žฅ๋œ JSON ๋ฐ์ดํ„ฐ๋ฅผ React ๊ธฐ๋ฐ˜ ์ •์  ์›น์œผ๋กœ ์‹œ๊ฐํ™”
    • ์ฃผ์ฐจ๋ณ„ ์ฐธ์—ฌ ์ธ์› ๋ฐ ์ข‹์•„์š” ์ˆ˜๋ฅผ ํ•œ๋ˆˆ์— ํ™•์ธ ๊ฐ€๋Šฅ
  5. ์šด์˜์„ ์œ„ํ•œ 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 ์„œ๋ฒ„๋ฆฌ์Šค ์•„ํ‚คํ…์ฒ˜ ๋„์ž…์œผ๋กœ ์•ˆ์ •์ ์ด๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์„œ๋น„์Šค ์šด์˜ ์—ญ๋Ÿ‰ ๊ฐ•ํ™”