Django Hands-on experience 4-3) - Member Verification

Turtleยท2023๋…„ 12์›” 22์ผ
0
post-thumbnail

๐Ÿ“Œ์ด๋ฉ”์ผ ๊ฒ€์ฆ ์ ˆ์ฐจ

  1. ํšŒ์› ๊ฐ€์ž… ์‹œ ์ด๋ฉ”์ผ ๊ณ„์ •์ด ์ž…๋ ฅ๋œ๋‹ค.
  2. ์ƒˆ๋กœ์šด ๊ณ„์ •์„ ์ƒ์„ฑํ•  ๋•Œ ๊ณ ์œ ํ•œ ๋ฌธ์ž์—ด์„ ํ•˜๋‚˜ ์ƒ์„ฑํ•œ๋‹ค. ์ด๋ฅผ ๊ฒ€์ฆ ํ‚ค๋ผ๊ณ  ํ•œ๋‹ค.
  3. ์ž…๋ ฅ๋œ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋กœ ์ด๋ฉ”์ผ ๊ฒ€์ฆ ๋ทฐ์— ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๊ฒ€์ฆํ‚ค๋ฅผ ํฌํ•จ์‹œ์ผœ ์ „์†กํ•œ๋‹ค.
  4. ๊ฒ€์ฆ ํ‚ค๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๊ฒ€์ฆํ•˜๋ ค๋Š” ์‚ฌ์šฉ์ž์™€ ํ•จ๊ป˜ ์ €์žฅํ•œ๋‹ค.
  5. ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ›์€ ์ด๋ฉ”์ผ ๋งํฌ๋ฅผ ํด๋ฆญํ•˜๋ฉด ๊ฒ€์ฆ ๋ทฐ๋กœ ๊ฒ€์ฆํ‚ค๊ฐ€ GET ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ๋œ๋‹ค.
  6. ๋ทฐ์—์„œ ๊ฒ€์ฆํ‚ค๋ฅผ ๋ฐ›์œผ๋ฉด ํ•ด๋‹น ํ‚ค์™€ ์ผ์น˜ํ•˜๋Š” ์ •๋ณด๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์กฐํšŒํ•ด์„œ ํ•ด๋‹น ์œ ์ €์˜ ๊ฒ€์ฆ์„ ์Šน์ธํ•œ๋‹ค.

๐Ÿ“ŒSMTP์„œ๋ฒ„(Simple Mail Transfer Protocol)

  • ๋ฉ”์ผ์„ ๋ฐœ์†กํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœํ† ์ฝœ์„ ์ง€์›ํ•˜๋Š” ์„œ๋ฒ„
  • Gmail API, Amazon SES, Mailgun ๋“ฑ์ด SMTP ์„œ๋น„์Šค๋ฅผ ์ œ๊ณต

๐Ÿ“Œ์„ค์ •

  • ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด django-ses๋ฅผ ์„ค์น˜ํ•œ๋‹ค.
pip install django-ses
  • ๊ทธ ๋‹ค์Œ์œผ๋กœ settings.py์—์„œ EMAIL_BACKEND๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
EMAIL_BACKEND = 'django_ses.SESBackend'
  • ๊ทธ ๋‹ค์Œ์œผ๋กœ AWS ์ฝ˜์†”์— ๋“ค์–ด๊ฐ€ IAM ์„œ๋น„์Šค๋กœ ๋“ค์–ด๊ฐ€ IAM ์‚ฌ์šฉ์ž๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

๐Ÿ“ŒEMAIL_BACKEND

  • EMAIL_BACKEND๋Š” ์ด๋ฉ”์ผ์„ ๋ณด๋‚ด๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฑ์—”๋“œ์ด๋‹ค.
  • Python์€ smtplib ๋ชจ๋“ˆ์„ ํ†ตํ•ด ๋ฉ”์ผ ์ „์†ก ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ Django๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฉ”์ผ ์ „์†ก ๋ถ€๋ถ„์„ ์ œ๊ณตํ•œ๋‹ค.
  • ๊ฐœ๋ฐœ ์ค‘์— ์ด๋ฉ”์ผ ์ „์†ก์„ ํ…Œ์ŠคํŠธํ•˜๋Š”๋ฐ ๋„์›€์„ ์ฃผ๋ฉฐ SMTP๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ์ง€์›์„ ์ œ๊ณตํ•œ๋‹ค.
    ์ฐธ๊ณ  ์ž๋ฃŒ - Django Sending email

๐Ÿ“ŒAWS - Identity and Access Management(IAM)

  • [์‚ฌ์šฉ์ž ์ด๋ฆ„]์„ ์ž…๋ ฅํ•œ๋‹ค.

  • [๊ถŒํ•œ ์„ค์ •]์—์„œ [์ง์ ‘ ์ •์ฑ… ์—ฐ๊ฒฐ]์„ ์„ ํƒ ํ›„ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์ •์ฑ…์ธ AmazonSESFullAccess๋ฅผ ์„ ํƒํ•œ๋‹ค.

  • [๋ณด์•ˆ ์ž๊ฒฉ ์ฆ๋ช…]์˜ [์•ก์„ธ์Šค ํ‚ค]๋กœ ๋“ค์–ด๊ฐ€ ์•ก์„ธ์Šค ํ‚ค๋ฅผ ๋ฐœ๊ธ‰๋ฐ›๋Š”๋‹ค.

  • ์•ก์„ธ์Šค ํ‚ค์˜ [์‚ฌ์šฉ ์‚ฌ๋ก€]๋ฅผ ์„ ํƒํ•  ๋•Œ [๊ธฐํƒ€]๋ฅผ ์„ ํƒํ•œ๋‹ค.

  • ๋ฐœ๊ธ‰๋ฐ›์€ ์•ก์„ธ์Šค ํ‚ค์™€ ๋น„๋ฐ€ ์•ก์„ธ์Šค ํ‚ค์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.
    โ€ป ์ด ๋•Œ, ๋น„๋ฐ€ ์•ก์„ธ์Šค ํ‚ค๋Š” ํŒจ์Šค์›Œ๋“œ์™€ ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์™ธ๋ถ€์— ์ ˆ๋Œ€ ๋…ธ์ถœ๋˜์ง€ ์•Š๋„๋ก ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. ํ™”๋ฉด์„ ๋ฒ—์–ด๋‚˜๋ฉด ๋‹ค์‹œ ํ™”๋ฉด์„ ํ™•์ธํ•  ๋ฐฉ๋ฒ•์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์•ก์„ธ์Šค ํ‚ค ID์™€ ๋น„๋ฐ€ ์•ก์„ธ์Šค ํ‚ค๋ฅผ [.csv ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ] ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ์ €์žฅํ•œ๋‹ค.

  • ์œ„์˜ ์•ก์„ธ์Šค ํ‚ค์™€ ๋น„๋ฐ€ ์•ก์„ธ์Šค ํ‚ค๋ฅผ ๊ฐ๊ฐ ๋ณต์‚ฌํ•ด settings.py์— ๋ถ™์—ฌ๋„ฃ๋Š”๋‹ค.

EMAIL_BACKEND = 'django_ses.SESBackend'
AWS_ACCESS_KEY_ID = '์•ก์„ธ์Šค ํ‚ค'
AWS_SECRET_ACCESS_KEY = '๋น„๋ฐ€ ์•ก์„ธ์Šค ํ‚ค'
# ap-northeast-2 : ์„œ์šธ ๋ฆฌ์ „
AWS_SES_REGION_NAME = 'ap-northeast-2'
AWS_SES_REGION_ENDPOINT = 'email.ap-northeast-2.amazonaws.com'

๐Ÿ“ŒAWS - Amazon Simple Email Service(SES)

  • Amazon SES์—์„œ๋Š” ์ •์‹ ๋„๋ฉ”์ธ์œผ๋กœ ๋“ฑ๋กํ•˜๊ธฐ ์ „๊นŒ์ง€ ์ŠคํŒธ ๋ฉ”์ผ ๋ฐœ์†ก์œผ๋กœ ์“ฐ์ด๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ์ž์˜ ์ธ์ฆ๋œ ์ด๋ฉ”์ผ๋กœ ์†ก์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฉ”์ผ์„ ๋ฐœ์†กํ•˜๊ธฐ ์ „์— ์ผ๋‹จ์€ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฉ”์ผ์„ ์ธ์ฆํ•œ๋‹ค.

  • ์ด๋ฉ”์ผ์„ ๋“ฑ๋กํ•˜๋ฉด ํ•ด๋‹น ์ด๋ฉ”์ผ๋กœ AWS์˜ ์ธ์ฆ ๋ฉ”์ผ์ด ๋„์ฐฉํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ ๋ฉ”์ผ์˜ ์ธ์ฆ ๋ฉ”์ผ ๋งํฌ๋ฅผ ํด๋ฆญํ•˜๋ฉด ๋ณด์•ˆ ์ธ์ฆ ์ƒํƒœ๊ฐ€ ์œ„์™€ ๊ฐ™์ด ํ™•์ธ๋จ์œผ๋กœ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • ์œ„์™€ ๊ฐ™์ด ์ด๋ฉ”์ผ์„ ๋“ฑ๋กํ–ˆ๋‹ค๋ฉด python manage.py shell์„ ํ†ตํ•ด์„œ ์…ธ์„ ์‹คํ–‰ํ•œ ํ›„ send_mail์„ ํ†ตํ•ด์„œ ๊ฐœ๋ฐœ์ž์˜ ์ด๋ฉ”์ผ๋กœ ํ…Œ์ŠคํŠธ ๋ฉ”์ผ์„ ์ „์†กํ•ด์„œ ์ž˜ ์ „์†ก์ด ๋˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Naver์˜ ๋ฉ”์ผ ์„ค์ •์—์„œ IMAP/SMTP ์‚ฌ์šฉ์„ ์‚ฌ์šฉํ•จ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ settings.py์— ์ž‘์„ฑํ•œ๋‹ค.
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.naver.com'	# SMTP ์„œ๋ฒ„๋ช…
EMAIL_PORT = 587				# SMTP ํฌํŠธ๋ฒˆํ˜ธ
EMAIL_HOST_USER = '๋„ค์ด๋ฒ„ ๊ณ„์ • ID'
EMAIL_HOST_PASSWORD = '๋„ค์ด๋ฒ„ ๊ณ„์ • PASSWORD'
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER

  • ์œ„์™€ ๊ฐ™์ด ์„ค์ • ํ›„ ์ด๋ฉ”์ผ์„ ๋ณด๋ƒˆ๋”๋‹ˆ ์ „์†กํ•œ ๋ฉ”์ผ์ด [๋ฐ›์€ ๋ฉ”์ผํ•จ]์ด ์•„๋‹Œ [์ŠคํŒธ ๋ฉ”์ผํ•จ]์œผ๋กœ ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค. Naver์˜ ๋ณด์•ˆ ํŠน์„ฑ์œผ๋กœ [๋ฐ›์€ ๋ฉ”์ผํ•จ]์— ๋“ค์–ด๊ฐ€์ง€ ์•Š๋Š” ๊ฒƒ์ธ๋ฐ ์ด๋Š” ๋„ค์ด๋ฒ„์˜ [์ŠคํŒธ ์„ค์ •]์—์„œ [์ž๋™ ๋ถ„๋ฅ˜ ๋Œ€์ƒ ์„ ํƒ]์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Š” ์ž์‹ ์˜ ๋ฉ”์ผ ๊ณ„์ •์„ ๋ณด์•ˆ์„ ๋‚ฎ์ถ”๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๊ถŒ์žฅํ•˜์ง€ ์•Š๊ณ  ๋ฉ”์ผ์ด ์ „์†ก๋˜์—ˆ์Œ์„ ํ™•์ธํ–ˆ๋‹ค๋ฉด ๋ฐ”๋กœ ๋„˜์–ด๊ฐ€์ž.

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