S08L04 – ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ •์„ ์œ„ํ•œ ์ด๋ฉ”์ผ ์ „์†ก

html

Spring Boot์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ •์„ ์œ„ํ•œ ์ด๋ฉ”์ผ ์ „์†ก: ์ข…ํ•ฉ ๊ฐ€์ด๋“œ

๋ชฉ์ฐจ

  1. ์†Œ๊ฐœ - ํŽ˜์ด์ง€ 1
  2. Gmail ๊ณ„์ • ์„ค์ • - ํŽ˜์ด์ง€ 2
  3. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†์„ฑ ๊ตฌ์„ฑ - ํŽ˜์ด์ง€ 4
  4. ๋ฏผ๊ฐํ•œ ์ •๋ณด ๋ณด์•ˆ - ํŽ˜์ด์ง€ 6
  5. ์ด๋ฉ”์ผ ๊ธฐ๋Šฅ ๊ตฌํ˜„ - ํŽ˜์ด์ง€ 8
  6. ์„ ํƒ์  ์†์„ฑ ์ฒ˜๋ฆฌ - ํŽ˜์ด์ง€ 10
  7. ๊ฒฐ๋ก  - ํŽ˜์ด์ง€ 12

์†Œ๊ฐœ

์˜ค๋Š˜๋‚ ์˜ ๋””์ง€ํ„ธ ํ™˜๊ฒฝ์—์„œ, ์•ˆ์ „ํ•˜๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž ์ธ์ฆ์„ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ค‘ ํ•˜๋‚˜์˜ ์ค‘์š”ํ•œ ์ธก๋ฉด์€ ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ • ๊ธฐ๋Šฅ์ด๋ฉฐ, ์ด๋Š” ์ข…์ข… ์‚ฌ์šฉ์ž์—๊ฒŒ ์ด๋ฉ”์ผ์„ ์ „์†กํ•˜๋Š” ๊ฒƒ์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ๋Š” Gmail์˜ SMTP ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ • ์ด๋ฉ”์ผ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ž์„ธํžˆ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” SMTP๋ฅผ ์œ„ํ•œ Gmail ์„ค์ •, Spring Boot ์†์„ฑ ๊ตฌ์„ฑ, ๋ฏผ๊ฐํ•œ ์ •๋ณด ๋ณด์•ˆ, ๊ทธ๋ฆฌ๊ณ  ๊ตฌํ˜„ ์ค‘ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ž ์žฌ์  ๋ฌธ์ œ๋“ค์„ ์‚ดํŽด๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์ „์ž์ฑ…์˜ ๋๊นŒ์ง€ ์ฝ์œผ๋ฉด, Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ด๋ฉ”์ผ ๊ธฐ๋Šฅ์„ ์›ํ™œํ•˜๊ฒŒ ํ†ตํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ํƒ„ํƒ„ํ•œ ์ดํ•ด๋ฅผ ๊ฐ–๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ํฌ์ธํŠธ:

  • Gmail SMTP ๊ตฌ์„ฑ: ์ด๋ฉ”์ผ ์ „์†ก์„ ์œ„ํ•œ Gmail ์„ค์ • ๋‹จ๊ณ„.
  • Spring Boot ๊ตฌ์„ฑ: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†์„ฑ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •.
  • ๋ณด์•ˆ ์กฐ์น˜: ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ.
  • ๊ตฌํ˜„ ๋‹จ๊ณ„: ์ด๋ฉ”์ผ ๊ธฐ๋Šฅ ์ถ”๊ฐ€์— ๋Œ€ํ•œ ์ƒ์„ธํ•œ ์•ˆ๋‚ด.
  • ๋ฌธ์ œ ํ•ด๊ฒฐ: ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ ์ฒ˜๋ฆฌ ๋ฐ ์›ํ™œํ•œ ์šด์˜ ๋ณด์žฅ.

์žฅ๋‹จ์ :

์žฅ์  ๋‹จ์ 
Gmail SMTP๋ฅผ ํ†ตํ•œ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋ฉ”์ผ ์ „์†ก Gmail ๋ณด์•ˆ ์„ค์ • ๊ตฌ์„ฑ์ด ํ•„์š”ํ•จ
์ด์ค‘ ์ธ์ฆ์„ ํ†ตํ•œ ํ–ฅ์ƒ๋œ ๋ณด์•ˆ ์ ์ ˆํžˆ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ๋ฏผ๊ฐํ•œ ์ •๋ณด ๋…ธ์ถœ ์œ„ํ—˜
Spring Boot์™€์˜ ์‰ฌ์šด ํ†ตํ•ฉ ๋‹ค๋ฅธ Spring Boot ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ ๊ฐ€๋Šฅ์„ฑ

์–ธ์ œ ๊ทธ๋ฆฌ๊ณ  ์–ด๋””์„œ ์‚ฌ์šฉํ• ๊นŒ:

์ด๋ฉ”์ผ ๊ธฐ๋Šฅ ๊ตฌํ˜„์€ ์‚ฌ์šฉ์ž ์ธ์ฆ, ์•Œ๋ฆผ ๋ฐ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ๋Š” ํŠนํžˆ ์•ˆ์ „ํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ • ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ํ•„์š”ํ•œ Spring Boot๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.


Gmail ๊ณ„์ • ์„ค์ •

๊ฐœ์š”

Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ Gmail์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฉ”์ผ์„ ์ „์†กํ•˜๋ ค๋ฉด SMTP ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•˜๋„๋ก Gmail ๊ณ„์ •์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ด์ค‘ ์ธ์ฆ์„ ์„ค์ •ํ•˜๊ณ  ์•ฑ ์ „์šฉ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

Gmail SMTP ๊ตฌ์„ฑ ๋‹จ๊ณ„

  1. ๊ธฐ์กด Gmail ๊ณ„์ • ์‚ฌ์šฉ ๋˜๋Š” ์ƒˆ ๊ณ„์ • ์ƒ์„ฑ:
    • ํšจ์œจ์ ์ธ ์ด๋ฉ”์ผ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์šฉ Gmail ๊ณ„์ •์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
  2. ์ด์ค‘ ์ธ์ฆ ํ™œ์„ฑํ™”:
    • Google ๊ณ„์ • ๋ณด์•ˆ์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
    • "Google์— ๋กœ๊ทธ์ธ" ์„น์…˜์—์„œ "2๋‹จ๊ณ„ ์ธ์ฆ"์„ ์„ ํƒํ•˜๊ณ  ํ”„๋กฌํ”„ํŠธ์— ๋”ฐ๋ผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋ฅผ ํ†ตํ•ด ๊ณ„์ •์— ์ถ”๊ฐ€์ ์ธ ๋ณด์•ˆ ๊ณ„์ธต์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
  3. ์•ฑ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ƒ์„ฑ:
    • ์ด์ค‘ ์ธ์ฆ์„ ํ™œ์„ฑํ™”ํ•œ ํ›„, ๋ณด์•ˆ ์„น์…˜์œผ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.
    • "์•ฑ ๋น„๋ฐ€๋ฒˆํ˜ธ"๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    • ์•ฑ์œผ๋กœ "๋ฉ”์ผ"์„, ๊ธฐ๊ธฐ๋กœ "๊ธฐํƒ€"๋ฅผ ์„ ํƒํ•œ ๋‹ค์Œ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: SpringBootApp).
    • Google์ด 16์ž๋ฆฌ ์•ฑ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์„ฑ์— ์‚ฌ์šฉ๋˜๋ฏ€๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณด๊ด€ํ•˜์‹ญ์‹œ์˜ค.

์•ฑ ๋น„๋ฐ€๋ฒˆํ˜ธ์˜ ์ค‘์š”์„ฑ

์•ฑ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์ฃผ์š” ๊ณ„์ • ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๊ณต์œ ํ•˜์ง€ ์•Š๊ณ ๋„ ํŠน์ • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— Gmail ๊ณ„์ • ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•จ์œผ๋กœ์จ ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ถ„๋ฆฌ๋Š” ์•ฑ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์œ ์ถœ๋˜๋”๋ผ๋„ ๊ธฐ๋ณธ ๊ณ„์ •์ด ์•ˆ์ „ํ•˜๊ฒŒ ์œ ์ง€๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.


์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†์„ฑ ๊ตฌ์„ฑ

๊ฐœ์š”

Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†์„ฑ์„ ์ ์ ˆํ•˜๊ฒŒ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์€ ์ด๋ฉ”์ผ ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” SMTP ์„ค์ •์„ ๊ตฌ์„ฑํ•˜๊ณ  ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

Gmail์„ ์œ„ํ•œ ํ‘œ์ค€ SMTP ์„ค์ •

๋‹ค์Œ ์„ค์ •์„ application.properties ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค:

์†์„ฑ ์„ค๋ช…

  • spring.mail.host: SMTP ์„œ๋ฒ„ ์ฃผ์†Œ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. Gmail์˜ ๊ฒฝ์šฐ smtp.gmail.com์ž…๋‹ˆ๋‹ค.
  • spring.mail.port: SMTP ํฌํŠธ ๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค. Gmail์€ TLS๋ฅผ ์œ„ํ•ด 587์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • spring.mail.username: ์ด๋ฉ”์ผ ์ „์†ก์— ์‚ฌ์šฉ๋˜๋Š” Gmail ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค.
  • spring.mail.password: ์•ž์„œ ์ƒ์„ฑํ•œ ์•ฑ ์ „์šฉ ๋น„๋ฐ€๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค.
  • spring.mail.properties.mail.smtp.auth: SMTP ์ธ์ฆ์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • spring.mail.properties.mail.smtp.starttls.enable: ์•ˆ์ „ํ•œ ์ด๋ฉ”์ผ ์ „์†ก์„ ์œ„ํ•œ TLS ์•”ํ˜ธํ™”๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

๋ฉ”์ผ ์ „์†ก ์„ค์ • ๊ตฌ์„ฑ

ํ‘œ์ค€ ์„ค์ • ์™ธ์—๋„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๋ฉ”์ผ ์ „์†ก ์„ค์ •์„ ์ง€์ •ํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์„ค์ •์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ด๋ฉ”์ผ ์ „์†ก ๋กœ์ง๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


๋ฏผ๊ฐํ•œ ์ •๋ณด ๋ณด์•ˆ

๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ ์ €์žฅ์˜ ๋ฌธ์ œ

application.properties์™€ ๊ฐ™์€ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์€ ์ค‘๋Œ€ํ•œ ๋ณด์•ˆ ์œ„ํ—˜์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฒ ์ด์Šค๊ฐ€ ๋…ธ์ถœ๋  ๊ฒฝ์šฐ, ์•…์˜์ ์ธ ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋Ÿฌํ•œ ์ž๊ฒฉ ์ฆ๋ช…์„ ์•…์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ ๋ณด์•ˆ์„ ์œ„ํ•œ ๋ชจ๋ฒ” ์‚ฌ๋ก€

  1. ๋ณ„๋„์˜ ์†์„ฑ ํŒŒ์ผ ์‚ฌ์šฉ:
    • ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด secret.properties๋ผ๋Š” ์ƒˆ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  2. ๋น„๋ฐ€ ์†์„ฑ ๊ฐ€์ ธ์˜ค๊ธฐ:
    • application.properties๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ secret.properties๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

  3. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํ™œ์šฉ:
    • ํ•˜๋“œ์ฝ”๋”ฉ ๋Œ€์‹  ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค.

    • ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ EMAIL_PASSWORD ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  4. ๋น„๋ฐ€ ํŒŒ์ผ Git ๋ฌด์‹œ:
    • ๋ฒ„์ „ ๊ด€๋ฆฌ์—์„œ ์ถ”์ ๋˜์ง€ ์•Š๋„๋ก secret.properties๋ฅผ .gitignore์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๋น„๋ฐ€ ์†์„ฑ ํŒŒ์ผ ๊ตฌํ˜„

๋‹ค์Œ๊ณผ ๊ฐ™์ด secret.properties๋ฅผ ๊ตฌ์กฐํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ณด์•ˆ ํƒœ์„ธ๋ฅผ ๊ฐ•ํ™”ํ•˜๊ณ , ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ์ผ๋ถ€๊ฐ€ ๋…ธ์ถœ๋˜๋”๋ผ๋„ ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณดํ˜ธ๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.


์ด๋ฉ”์ผ ๊ธฐ๋Šฅ ๊ตฌํ˜„

๊ฐœ์š”

Gmail SMTP๊ฐ€ ๊ตฌ์„ฑ๋˜๊ณ  ๋ฏผ๊ฐํ•œ ์ •๋ณด๊ฐ€ ๋ณด์•ˆ ์ฒ˜๋ฆฌ๋œ ํ›„, ๋‹ค์Œ ๋‹จ๊ณ„๋Š” Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ ์‹ค์ œ ์ด๋ฉ”์ผ ์ „์†ก ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋ฉ”์ผ ์„œ๋น„์Šค ์ƒ์„ฑ

  1. ์ด๋ฉ”์ผ ์„œ๋น„์Šค ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜:
  2. ์ด๋ฉ”์ผ ์„œ๋น„์Šค ๊ตฌํ˜„:

์ด๋ฉ”์ผ ์„œ๋น„์Šค ์„ค๋ช…

  • EmailService ์ธํ„ฐํŽ˜์ด์Šค: ์ด๋ฉ”์ผ ์ „์†ก์„ ์œ„ํ•œ ๊ณ„์•ฝ์„ ์ •์˜ํ•˜์—ฌ ๋ฏธ๋ž˜์— ์‰ฝ๊ฒŒ ๋Œ€์ฒดํ•˜๊ฑฐ๋‚˜ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • EmailServiceImpl ํด๋ž˜์Šค: Spring Framework์˜ ์ด๋ฉ”์ผ ์ „์†ก ๊ตฌ์„ฑ ์š”์†Œ์ธ JavaMailSender๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ EmailService ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
    • sendPasswordResetEmail ๋ฉ”์„œ๋“œ:
      • ์ œ๊ณต๋œ ํ† ํฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ • ๋งํฌ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
      • SimpleMailMessage ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ˆ˜์‹ ์ž, ์ œ๋ชฉ, ๋ณธ๋ฌธ ๋ฐ ๋ฐœ์‹ ์ž๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
      • mailSender.send(message)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฉ”์ผ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

์ปจํŠธ๋กค๋Ÿฌ์— ์ด๋ฉ”์ผ ์„œ๋น„์Šค ํ†ตํ•ฉ

์˜ˆ๋ฅผ ๋“ค์–ด, AccountController ๋‚ด์—์„œ EmailService๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ • ์ด๋ฉ”์ผ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

๋‹จ๊ณ„๋ณ„ ์„ค๋ช…

  1. ํ† ํฐ ์ƒ์„ฑ: ์‚ฌ์šฉ์ž์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ • ์š”์ฒญ๊ณผ ์—ฐ๊ด€๋œ ๊ณ ์œ ํ•œ ํ† ํฐ์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. ์ด๋ฉ”์ผ ๋ฐœ์†ก:
    • emailService.sendPasswordResetEmail์„ ํ˜ธ์ถœํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ์ด๋ฉ”์ผ๊ณผ ์ƒ์„ฑ๋œ ํ† ํฐ์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
    • EmailServiceImpl์ด ์ด๋ฉ”์ผ ๊ตฌ์„ฑ ๋ฐ ์ „์†ก์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  3. ์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ: ์‚ฌ์šฉ์ž์—๊ฒŒ ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ • ์ด๋ฉ”์ผ์ด ์ „์†ก๋˜์—ˆ์Œ์„ ์•Œ๋ฆฌ๋Š” ํ™•์ธ ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ƒ ๊ฒฐ๊ณผ

์‚ฌ์šฉ์ž๊ฐ€ ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ •์„ ์š”์ฒญํ•˜๋ฉด:

  • ๋“ฑ๋ก๋œ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ •์— ๋Œ€ํ•œ ์•ˆ์ „ํ•œ ๋งํฌ๊ฐ€ ํฌํ•จ๋œ ์ด๋ฉ”์ผ์ด ๋ฐœ์†ก๋ฉ๋‹ˆ๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ด๋ฉ”์ผ์ด ์ „์†ก๋˜์—ˆ์Œ์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ™•์ธ ๋ฉ”์‹œ์ง€๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์„ ํƒ์  ์†์„ฑ ์ฒ˜๋ฆฌ

์†์„ฑ ๋ˆ„๋ฝ ์‹œ ๋ฌธ์ œ

secret.properties๊ฐ€ ๋ฐฐํฌ ์ค‘์— ํฌํ•จ๋˜์ง€ ์•Š์œผ๋ฉด(์˜ˆ: .gitignore์— ํฌํ•จ๋œ ๊ฒฝ์šฐ), Spring Boot๊ฐ€ ์‹œ์ž‘๋˜์ง€ ๋ชปํ•˜๊ณ  ๋ˆ„๋ฝ๋œ ๊ตฌ์„ฑ์— ๋Œ€ํ•œ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์†์„ฑ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ์„ ํƒ์ ์œผ๋กœ ๋งŒ๋“ค๊ธฐ

์†์„ฑ ํŒŒ์ผ ๋ˆ„๋ฝ์œผ๋กœ ์ธํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘ ์‹คํŒจ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด secret.properties์˜ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ์„ ํƒ์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ ํƒ์  ๊ฐ€์ ธ์˜ค๊ธฐ ๊ตฌ์„ฑ ๋ฐฉ๋ฒ•

  1. ๊ฐ€์ ธ์˜ค๊ธฐ ๋ฌธ๊ตฌ ์ˆ˜์ •:

    • optional: ์ ‘๋‘์‚ฌ๋Š” secret.properties๊ฐ€ ์—†๋”๋ผ๋„ Spring Boot๊ฐ€ ๊ณ„์†ํ•ด์„œ ์‹œ์ž‘๋˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
  2. ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์•ˆ ์ ‘๊ทผ๋ฒ•:
    • secret.properties๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ, ํ•„์š”ํ•œ ๊ตฌ์„ฑ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    ์˜ˆ์‹œ:

    • ์—ฌ๊ธฐ์„œ defaultPassword๋Š” EMAIL_PASSWORD๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋Œ€์ฒด๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ ํƒ์  ๊ฐ€์ ธ์˜ค๊ธฐ ์žฅ์ 

  • ์œ ์—ฐ์„ฑ: ํŠน์ • ์†์„ฑ ํŒŒ์ผ์˜ ํ•„์ˆ˜ ํฌํ•จ ์—†์ด ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณด์•ˆ: ๋ฒ„์ „ ๊ด€๋ฆฌ ํŒŒ์ผ ์™ธ๋ถ€์—์„œ ๋ฏผ๊ฐํ•œ ์†์„ฑ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ ๊ตฌ์„ฑ

์ด ๊ตฌ์„ฑ์—์„œ๋Š”:

  • secret.properties๊ฐ€ ์กด์žฌํ•˜๋ฉด, Spring Boot๊ฐ€ ๊ทธ ์•ˆ์— ์ •์˜๋œ ์†์„ฑ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • secret.properties๊ฐ€ ์—†์œผ๋ฉด, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ EMAIL_PASSWORD ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ •์„ ์œ„ํ•œ ์ด๋ฉ”์ผ ๊ธฐ๋Šฅ์„ ํ†ตํ•ฉํ•˜๋Š” ๊ฒƒ์€ SMTP ์„ค์ • ๊ตฌ์„ฑ, ๋ฏผ๊ฐํ•œ ์ •๋ณด ๋ณด์•ˆ, ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋ฉ”์ผ ์ „์†ก ๋ฉ”์ปค๋‹ˆ์ฆ˜ ๊ตฌํ˜„์„ ํฌํ•จํ•˜๋Š” ๋‹ค๋ฉด์ ์ธ ๊ณผ์ •์ž…๋‹ˆ๋‹ค. Gmail์˜ SMTP ์„œ๋น„์Šค๋ฅผ ํ™œ์šฉํ•˜๊ณ , ์ตœ๊ณ  ๋ณด์•ˆ ๊ด€ํ–‰์„ ์ค€์ˆ˜ํ•˜๋ฉฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†์„ฑ์„ ์‹ ์ค‘ํ•˜๊ฒŒ ๊ตฌ์กฐํ™”ํ•จ์œผ๋กœ์จ ํƒ„ํƒ„ํ•˜๊ณ  ์•ˆ์ „ํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ • ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์š”์•ฝ:

  • ์•ˆ์ „ํ•œ ๊ตฌ์„ฑ: ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ์š” ๊ตฌ์„ฑ ํŒŒ์ผ๊ณผ ๋ถ„๋ฆฌํ•˜๊ณ  ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋‚˜ ๋ณ„๋„์˜ ์†์„ฑ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ญ์ƒ ๋ณดํ˜ธํ•˜์‹ญ์‹œ์˜ค.
  • ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋ฉ”์ผ ์ „์†ก: Gmail๊ณผ ๊ฐ™์€ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” SMTP ์„œ๋น„์Šค๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ด๋ฉ”์ผ์ด ๋ฌธ์ œ ์—†์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋„๋‹ฌํ•˜๋„๋ก ๋ณด์žฅํ•˜์‹ญ์‹œ์˜ค.
  • ์œ ์—ฐํ•œ ์„ค์ •: ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์œ ์—ฐ์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์„ ํƒ์  ์†์„ฑ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ๊ตฌํ˜„ํ•˜์‹ญ์‹œ์˜ค.
  • ์ข…ํ•ฉ์ ์ธ ํ…Œ์ŠคํŠธ: ๋‹ค์–‘ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ผ๊ด€๋œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฉ”์ผ ๊ธฐ๋Šฅ์„ ์ฒ ์ €ํžˆ ํ…Œ์ŠคํŠธํ•˜์‹ญ์‹œ์˜ค.

์ด๋Ÿฌํ•œ ๊ด€ํ–‰์„ ์ฑ„ํƒํ•จ์œผ๋กœ์จ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ณด์•ˆ๊ณผ ์‹ ๋ขฐ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ , ์‚ฌ์šฉ์ž ๊ธฐ๋ฐ˜๊ณผ์˜ ์‹ ๋ขฐ๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ : ์ด ๊ธฐ์‚ฌ๋Š” AI์— ์˜ํ•ด ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.






Share your love