๐Ÿ”ฅ TIL - Day 15

Kim Dae Hyunยท2021๋…„ 9์›” 29์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
17/93

๐Ÿ“Œ AWS ์ฒซ ๊ณผ๊ธˆ.. ๊ธˆ์•ก์€ ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค. ๋งค์šฐ ๋ฌด์„œ์› ๋‹ค.

๊ฐ‘์ž๊ธฐ ๋น„์šฉ์ด ๋ฐœ์ƒํ–ˆ๋‹ค. EC2์—์„œ ๋ฐœ์ƒํ•œ ๋น„์šฉ์ด๋‹ค.
๊ธˆ์•ก์€ ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค. ์ด์œ ๋ฅผ ์•Œ์•„์•ผ ํ•œ๋‹ค..!!

๋น„์šฉ์ด ๋ถ€๊ณผ๋œ ๋ถ€๋ถ„์„ ๋ณด๋ฉด Elastic IP address not attached to a running instance per hour ๋ผ๊ณ  ํ•œ๋‹ค. ํƒ„๋ ฅ์  IP๊ฐ€ ์‹คํ–‰์ค‘์ธ ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ๋ง์ด๋‹ค.

๋งž๋‹ค. ์–ด์ œ ๊ฑฐ์˜ ์™„์„ฑ๋œ ํ”„๋กœ์ ํŠธ๋ฅผ ์—ฐ์Šต์‚ผ์•„ EC2์— ๋ฐฐํฌํ–ˆ๋‹ค. ๊ณผ๊ธˆ์ด ๋ฌด์„œ์›Œ์„œ ์ค‘์ง€, ์‹œ์ž‘์„ ๋ฐ˜๋ณตํ–ˆ๋Š”๋ฐ IP๊ฐ€ ์ž๊พธ ๋ณ€๊ฒฝ๋˜์„œ ์ฝ”๋“œ๋ฅผ ๊ณ„์† ๋ณ€๊ฒฝํ–ˆ๋‹ค.

์ด๋Ÿฐ ์ž‘์—…์ด ๋ฒˆ๊ฑฐ๋กœ์›Œ์„œ ํƒ„๋ ฅ์  IP๋ฅผ ์„ค์ •ํ•˜๊ณ  ๋ฐฐํฌ ํ…Œ์ŠคํŠธ๋ฅผ ์ด์–ด๊ฐ”๋‹ค. ํ…Œ์ŠคํŠธ๋ฅผ ๋งˆ์น˜๊ณ  ์—ญ์‹œ ๊ณผ๊ธˆ์ด ๋ฌด์„œ์›Œ์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ข…๋ฃŒ(์‚ญ์ œ)ํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋…ธํŠธ๋ถ์„ ๋‹ซ์•˜๋‹ค..

AWS ๋ฌธ์„œ๋ฅผ ๋ณด๋‹ˆ ํƒ„๋ ฅ์  IP์— ๋Œ€ํ•ด ์š”๊ธˆ์ด ๋ถ€๊ณผ๋˜์ง€ ์•Š๋Š” ์กฐ๊ฑด์ด 3๊ฐ€์ง€ ์žˆ๋‹ค.

  • ํƒ„๋ ฅ์  IP๊ฐ€ ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค.
  • ํƒ„๋ ฅ์  IP๊ฐ€ ์—ฐ๊ฒฐ๋œ ์ธ์Šคํ„ด์Šค๊ฐ€ ์‹คํ–‰ ์ค‘์ด๋‹ค.
  • ํƒ„๋ ฅ์  IP์— ์—ฐ๊ฒฐ๋œ ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•˜๋‚˜์ด๋‹ค.

์ด ์„ธ๊ฐ€์ง€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด ์š”๊ธˆ์ด ๋ถ€๊ณผ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•œ๋‹ค.
๋‚˜๋Š” ์–ด์ œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ข…๋ฃŒํ•˜๊ณ  ํƒ„๋ ฅ์  IP๋ฅผ ํ•ด์ œํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ 3๊ฐœ ์กฐ๊ฑด์„ ๋ชจ๋‘ ์œ„๋ฐ˜ํ•œ ๊ฒƒ์ด๋‹ค...

๐Ÿ“Œ ๋งˆ๋ฌด๋ฆฌ
AWS ์ž…๋ฌธ์ž๋ผ๋ฉด ๊ต‰์žฅํžˆ ์ž์ฃผ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์ƒ์„ฑํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ ์™€์ค‘์— ํƒ„๋ ฅ์  IP๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๊ผญ EC2 ์ธ์Šคํ„ด์Šค์™€ ํƒ„๋ ฅ์  IP์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ฐ™๊ฒŒ ํ•˜์ž.
(์ธ์Šคํ„ด์Šค ์ข…๋ฃŒ -> ์—ฐ๊ฒฐ๋œ ํƒ„๋ ฅ์  IP ํ•ด์ œ)


๐Ÿ“Œ ํ”„๋กœ์ ํŠธ ์ด์Šˆ1 - Flask์—์„œ ์Šค์ผ€์ค„๋Ÿฌ ๊ตฌํ˜„

์กฐํšŒ์ˆ˜์— ๋”ฐ๋ผ ์ˆœ์œ„๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์—ˆ๊ณ  1์œ„๋ถ€ํ„ฐ 5์œ„๊นŒ์ง€ ์ˆœ์œ„๋ฅผ ๋ณด์—ฌ์คฌ๋‹ค. ์ˆœ์œ„๊ถŒ์— ์žˆ๋Š” ๋ชฉ๋ก์€ ๋‹ค๋ฅธ ๋ชฉ๋ก๋ณด๋‹ค ์กฐํšŒ๋  ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ฒˆ ์ˆœ์œ„๊ถŒ์— ์˜ฌ๋ผ๊ฐ€๋ฉด ์ž˜ ๋‚ด๋ ค์˜ค์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

์กฐ๊ธˆ์ด๋ผ๋„ ์ˆœ์œ„๊ฐ€ ์ˆœ์œ„๋‹ต๋„๋ก ์ผ์ฃผ์ผ๋งˆ๋‹ค ์ˆœ์œ„๋ฅผ ์ดˆ๊ธฐํ™”์‹œํ‚ค๋ ค ํ–ˆ๋‹ค.
ํŠน์ • ์‹œ์ ์— ํŠน์ • ์ž‘์—…์„ ํ•˜๊ธฐ ์œ„ํ•ด ์Šค์ผ€์ค„๋ง์„ ๋„์ž…ํ–ˆ๋‹ค.

Flask๋Š” ์Šค์ผ€์ค„๋ง์„ ์œ„ํ•ด apscheduler ๋ชจ๋“ˆ์„ ์ง€์›ํ•œ๋‹ค.

# apscheduler ํŒจํ‚ค์ง€ ์„ค์น˜
pip install apscheduler

๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์Šค์ผ€์ค„๋ง ์ž‘์—…์„ ํ•˜๊ธฐ ์œ„ํ•ด apscheduler์˜ BackgroundScheduler๋ฅผ import ํ•œ๋‹ค.

from apscheduler.schedulers.background import BackgroundScheduler

๋‹ค์Œ์œผ๋กœ ์Šค์ผ€์ค„๋Ÿฌ์˜ ๋™์ž‘ ์ œ์–ด ์—ญํ• ์„ ํ•ด์ค„ ํŠธ๋ฆฌ๊ฑฐ ๋ชจ๋“ˆ๋„ ๊ฐ€์ ธ์˜จ๋‹ค. ์ด ํŠธ๋ฆฌ๊ฑฐ ๋ชจ๋“ˆ์€ cron ํ‘œํ˜„์‹์„ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค.

from apscheduler.triggers.cron import CronTrigger

์Šค์ผ€์ค„๋ง ๋Œ€์ƒ์ด ๋  ์ž‘์—…์„ ๊ตฌํ˜„ํ•œ๋‹ค .
์กฐํšŒ์ˆ˜ ์ˆœ์œ„์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋‹ด๊ธฐ๋Š” ranking ์ปฌ๋ ‰์…˜์˜ documents๋ฅผ ๋ชจ๋‘ ์ง€์šฐ๋Š” ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

def init_ranking_collection():
    print("์กฐํšŒ์ˆ˜ ์ˆœ์œ„ DB ์ดˆ๊ธฐํ™” ์‹œ์ž‘")
    result = db.ranking.delete_many({})
    print(f"์กฐํšŒ์ˆ˜ ์ˆœ์œ„ DB ์ดˆ๊ธฐํ™” ์ข…๋ฃŒ {result.deleted_count}๊ฑด ์‚ญ์ œ")

crontab ํ‘œํ˜„์‹์„ ์ด์šฉํ•ด์„œ ์Šค์ผ€์ค„๋ง ์‹œ๊ฐ„์ด ์ž‘๋™ํ•  ์‹œ๊ฐ„์„ ์„ค์ •ํ•œ๋‹ค.

# ๋’ค๋ถ€ํ„ฐ ์ฝ์œผ๋ฉด ๋œ๋‹ค.
# ์ผ์š”์ผ(sun) ๋งค์›”(*) ๋งค์ผ(*) ์˜ค์ „03์‹œ(03) 00๋ถ„(00)
cron = "00 03 * * sun"

์Šค์ผ€์ค„๋Ÿฌ Start !

scheduler = BackgroundScheduler(daemon=True)
scheduler.add_job(init_ranking_collection, CronTrigger.from_crontab(cron))
scheduler.start()

๋‚ด์ผ์ด๋ฉด ์ฒซ ๋ฒˆ์งธ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋๋‚˜๋Š” ๋‚ ์ด๋‹ค. ๋งˆ์ง€๋ง‰๊นŒ์ง€ ๋ฟŒ๋“ฏํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ž˜ ํ•˜์ž!!

profile
์ข€ ๋” ์ฒœ์ฒœํžˆ ๊นŒ๋จน๊ธฐ ์œ„ํ•ด ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ๐Ÿง

0๊ฐœ์˜ ๋Œ“๊ธ€