๐Ÿ’ซ Backend

1. AWS Lambda ์ƒ์„ฑ   Lambda ์ฝ˜์†”์—์„œ ์ƒˆ ํ•จ์ˆ˜ ์ƒ์„ฑ์„ ํ•ด์ค˜์•ผํ•จ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์™€ ๋™์ผํ•œ Java17 ๋Ÿฐํƒ€์ž„์€ AWS ์ฝ˜์†”์—์„œ ์ง์ ‘ ์ฝ”๋“œ ํŽธ์ง‘์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  JAR ํŒŒ์ผ์„ ์—…๋กœ๋“œ ํ•ด์•ผํ•จ๋˜ํ•œ, Lambda์—์„œ ์š”์ฒญ์„ ๋ณด๋‚ผ CloudRun ํ™˜๊ฒฝ์ด Python flask server ์ด๋ฏ€๋กœ Python ๋Ÿฐํƒ€์ž„์„ ์„ ํƒํ•ด์คŒ(๋‚˜๋จธ์ง€๋Š” ๊ธฐ๋ณธ ์„ค์ • ๊ทธ๋Œ€๋กœ์ด๊ณ  ํ•„์š”์„ฑ์— ๋งž๊ฒŒ ์•Œ์•„์„œ ์„ ํƒํ•˜๋ฉด๋จ)   ์ƒ์„ฑํ•œ ํ•จ์ˆ˜๋ฅผ ํด๋ฆญํ•˜๊ณ  ์ฝ˜์†”์—์„œ ์ฝ”๋“œ๋ฅผ ๋ˆ„๋ฅด๋ฉด ์ด๋ ‡๊ฒŒ lambda_handler ํ•จ์ˆ˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ์Œ   ์šฐ์„ ์€ ํ…Œ์ŠคํŠธ์šฉ๋„์ด๊ธฐ์— ๋ณ„๋‹ค๋ฅธ ๋กœ์ง์€ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ  statusCode๋ฅผ 202๋กœ ๋ฐ”๊ฟ” ์ž˜ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธํ•ด๋ณด๊ธฐ๋กœํ•จ => ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์˜€์œผ๋ฉด ์™ผ์ชฝ์˜ Deploy๋ฅผ ๋ˆŒ๋Ÿฌ์•ผ ๋ฐ˜์˜๋จ!  ๋˜ํ•œ, ํ˜„์žฌ ํ…Œ์ŠคํŠธ์—์„œ๋Š”..
HTTPS๋ฅผ ์„ค์ •ํ•˜๊ฒŒ ๋œ ์ด์œ  ์„ธ์…˜ ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•˜๊ธฐ์œ„ํ•ด ์„ธ์…˜ ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด SameSite = None๊ณผ Secure = true ์„ค์ •์ด ํ•„์š”ํ•จ ํ•˜์ง€๋งŒ ๊ณ„์† ๋กœ๊ทธ์ธ์ด ์•ˆ๋˜๊ธธ๋ž˜ ํ™•์ธํ•ด๋ณด๋‹ˆ... ์œ„์™€ ๊ฐ™์€ ์„ค์ •์„ ํ•˜๋ ค๋ฉด HTTPS๋ฅผ ์ ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ๋˜์—ˆ๊ณ  ์ถ”ํ›„ ํ”„๋ก ํŠธ์—์„œ ๋…น์Œํ•œ ์Œ์„ฑ์„ ๋„˜๊ฒจ์ฃผ๋Š” ๋กœ์ง์„ ๊ตฌํ˜„ํ•  ๋•Œ๋„ HTTPS๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ๋˜์–ด HTTPS๋ฅผ ์ ์šฉํ•˜๊ธฐ๋กœ ํ•˜์˜€์Œ ๊ธฐ์™•์ด๋ฉด ๊ณผ๊ธˆ ๋•Œ๋ฌธ์— ๋ฌด๋ฃŒ๋กœ... ์‚ฌ์šฉํ•  ๊ฒƒ๋“ค NginX NginX๋Š” ์˜คํ”ˆ ์†Œ์Šค ์›น ์„œ๋ฒ„ ์†Œํ”„ํŠธ์›จ์–ด๋กœ ์ •์  ์ฝ˜ํ…์ธ  ์ œ๊ณต, ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ, HTTP ์บ์‹œ ์„œ๋ฒ„ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Œ => ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋น„๋™๊ธฐ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์†Œํ•œ์˜ ๋ฆฌ์†Œ์Šค๋กœ ์ˆ˜์ฒœ ๊ฐœ์˜ ๋™์‹œ ์—ฐ๊ฒฐ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ ์—ฌ๊ธฐ์„œ๋Š” H..
Spring Boot์—์„œ Supabase๋ฅผ ์—ฐ๋™ํ•œ ํ›„ ๊ฐ„๋‹จํ•œ ํšŒ์›๊ฐ€์ž… ๋กœ์ง ๊ตฌํ˜„  Supabase๊ฐ€ ๋ญ”์ง€ ๋ชจ๋ฅธ๋‹ค๋ฉด ๋ฐ‘์˜ ๊ธ€์„ ์ฝ์–ด๋ณด๊ณ  ์˜ค์ž https://hanjungyo.tistory.com/124 Supabase๋ž€? (with ์–ด๋–ค DB๋ฅผ ์„ ํƒํ•ด์•ผํ• ๊นŒ?)Supabase ์‚ฌ์šฉ๋ฒ•์„ ๋งํ•˜๊ธฐ์— ์•ž์„œ  ํ˜„์žฌ ๊ฐœ๋ฐœ์ค‘์ธ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์š”์•ฝํ•˜๋ฉด ๋ณด์ด์ŠคํŒฉ์„ ๊ฑฐ๋ž˜ํ•˜๊ณ  ๊ตฌ๋งคํ•œ ๋ณด์ด์ŠคํŒฉ์„ ํ”Œ๋žซํผ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒํ•ด์ฃผ๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‹ค. ์–ด๋–ค DB๋ฅผhanjungyo.tistory.com  ์šฐ์„  ํ˜„์žฌ ํ”„๋กœ์ ํŠธ๋Š” ์ดˆ๊ธฐ์— Supabase ๋ฌด๋ฃŒ ํ”Œ๋žœ์„ ์‚ฌ์šฉํ•˜๋ฉฐ ์ œ๊ณตํ•ด์ฃผ๋Š” OAuth๋„ ๋‹น์žฅ์€ ํ•„์š”๊ฐ€ ์—†์Œ๋งŒ์•ฝ ์ถ”ํ›„์— ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด์„œ DB๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋  ๊ฐ€๋Šฅ์„ฑ๋„ ์žˆ๊ธฐ์— Supabase ์ข…์†์„ฑ์„ ์ค„์—ฌ์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Œ(์ผ..
ํ˜„์žฌ DB๊ฐ€ ์„ธํŒ…๋˜์ง€ ์•Š์€ ์ƒํ™ฉ์—์„œ ๊ธ‰ํ•˜๊ฒŒ ํ”„๋ก ํŠธ์—”๋“œ์™€์˜ ์—ฐ๋™ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์ž„์‹œ ํšŒ์›๊ฐ€์ž… ๋กœ์ง์„ ํ™•์ธํ• ์ผ์ด ์ƒ๊ฒผ๋‹ค์ด๋ฅผ ์œ„ํ•ด ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•  DB๊ฐ€ ์„ธํŒ…๋˜๊ธฐ ์ „๊นŒ์ง„ H2 DB๋ฅผ ์ž„์‹œ๋กœ ์„ ํƒํ•˜์˜€๊ณ , ๊ด€๋ จ ๋‚ด์šฉ ํ•™์Šต ๋ฐ ์‹ค์ œ ์‚ฌ์šฉ์— ๋Œ€ํ•œ ๊ธฐ๋ก์„ ๋‚จ๊ธฐ๋ ค๊ณ  ํ•œ๋‹ค H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ž€? H2๋Š” JAVA๋กœ ์ž‘์„ฑ๋œ ์˜คํ”ˆ ์†Œ์Šค RDBMS์ž„  ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค : ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋“œ์—์„œ ์ž‘๋™ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๋ฏ€๋กœ ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•จ(์ด ๊ฒฝ์šฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…๋ฃŒ ์‹œ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ง)ํŒŒ์ผ ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค : ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์ผ๋กœ ์ €์žฅํ•  ์ˆ˜ ๋„ ์žˆ๊ธฐ์— ์˜๊ตฌ์ ์ธ ์ €์žฅ์ด ๊ฐ€๋Šฅํ•จJDBC ์ง€์› : JDBC API๋ฅผ ํ†ตํ•ด ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์‰ฝ๊ฒŒ ํ†ตํ•ฉ๋  ์ˆ˜ ์žˆ์Œ์›น ์ฝ˜์†” : ์›น ๊ธฐ๋ฐ˜ GUI ์ฝ˜์†” ์ œ๊ณตํ•ด์คŒ(๊ด€๋ฆฌ ์šฉ์ด) ๊ต‰์žฅํžˆ ์ž‘๊ณ  ๊ฐ€๋ณ๊ธฐ..
๋งค์ผ๋ฉ”์ผ ๋ฐฑ์—”๋“œ ์งˆ๋ฌธ์„ ์ฐธ๊ณ ํ•ด ๊ฐœ์ธ์ ์œผ๋กœ ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.์˜ค๋ฅ˜๊ฐ€ ์žˆ๋‹ค๋ฉด ์–ธ์ œ๋“  ํ”ผ๋“œ๋ฐฑ ์ฃผ์‹œ๋ฉด ๋ฐ”๋กœ ๋ฐ˜์˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค..!   ์‹œ์ž‘ํ•˜๊ธฐ์— ์•ž์„œ JPA๋ž€? JPA(Java Persistence API)๋Š” ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๊ณ  ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•œ ํ‘œ์ค€ API์ž„ => ORM(Object-Relational Mapping) ๊ธฐ์ˆ ์„ ์ œ๊ณตํ•˜๋Š” ์ž๋ฐ”์˜ ๊ณต์‹ ํ‘œ์ค€์ž„ JPA๋Š” ์ž์ฒด์ ์œผ๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๊ณ  Hibernate์™€ ๊ฐ™์€ ๊ตฌํ˜„์ฒด๊ฐ€ ํ•„์š”ํ•จ  EntityManager๋ž€? EntityManager์— ๋Œ€ํ•ด ์•Œ๊ธฐ ์œ„ํ•ด์„  Persistence Context์— ๋Œ€ํ•ด ์•Œ์•„์•ผํ•จ Persistence Context๋Š” ์—”ํ‹ฐํ‹ฐ๋ฅผ ์˜๊ตฌ ์ €์žฅํ•˜๋Š” ํ™˜๊ฒฝ์œผ๋กœ 1์ฐจ ์บ์‹ฑ, ์“ฐ๊ธฐ ์ง€์—ฐ, ๋ณ€๊ฒฝ ๊ฐ์ง€๋ฅผ ํ†ตํ•ด ์˜์† ๋กœ์ง์„ ํšจ์œจ์ ..
ยท๐Ÿ’ซ Backend
'๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ' ์ฑ…์„ ํ†ตํ•ด ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.  ์‚ฌ์šฉ์ž ์ˆ˜์— ๋”ฐ๋ฅธ ๊ทœ๋ชจ ํ™•์žฅ์„ฑ ๋‹จ์ผ ์„œ๋ฒ„ ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹จ ํ•œ ๋Œ€์˜ ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฐ„๋‹จํ•œ ์‹œ์Šคํ…œ๋ถ€ํ„ฐ ์ƒ๊ฐํ•ด๋ณด๋ฉด    => ์ด๋Ÿฐ์‹์œผ๋กœ ์›น, ์•ฑ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์บ์‹œ ๋“ฑ์ด ์ „๋ถ€ ์„œ๋ฒ„ ํ•œ ๋Œ€ ์—์„œ ์‹คํ–‰๋œ๋‹ค ์‚ฌ์šฉ์ž ์š”์ฒญ ์ฒ˜๋ฆฌ ํ๋ฆ„์„ ๋ณด๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ๋„๋ฉ”์ธ ์ด๋ฆ„์„ ์ด์šฉํ•˜์—ฌ ์›น์‚ฌ์ดํŠธ์— ์ ‘์†ํ•˜๋Š”๋ฐ ์ด๋ฅผ ์œ„ํ•ด DNS์— ์งˆ์˜๋ฅผ ํ•˜๊ณ  IP ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์›น ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ํ•ด๋‹นํ•˜๋Š” HTML ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋ง ํ•ด์ฃผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค   ์‚ฌ์šฉ์ž๊ฐ€ ๋Š˜๋ฉด ์„œ๋ฒ„ ํ•˜๋‚˜๋กœ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์•„์„œ ์—ฌ๋Ÿฌ ์„œ๋ฒ„๋ฅผ ๋‘์–ด์•ผ ํ•œ๋‹ค => ํ•˜๋‚˜๋Š” ์›น/๋ชจ๋ฐ”์ผ ํŠธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ ์šฉ๋„์ด๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜์˜ ์„œ๋ฒ„๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์šฉ (์ด๋ ‡๊ฒŒ ๊ณ„์ธต์„ ๋ถ„๋ฆฌํ•˜..
EC2 ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๋ฐฉ๋ฒ•์€ ์ด์ „ ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!๋กœ์ปฌ์—์„œ Docker ์„ค์ • Jar ํŒŒ์ผ ๋นŒ๋“œํ•˜๊ธฐ ๋ณดํ†ต ๋นŒ๋“œ๋ฅผ ํ•  ๋•Œ ./graldew clean build ๋ฅผ ๋งŽ์ด ๋ดค์„ํ…๋ฐ  ์ด๋ฒˆ์—๋Š” ./gradlew clean bootJar๋ฅผ ํ†ตํ•ด Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ JARํŒŒ์ผ๋งŒ ์ƒ์„ฑํ–ˆ์Œ  ./gradlew build๋Š” bootJar๋ฅผ ํฌํ•จํ•˜์—ฌ ๋‚ด๋ถ€ ๋™์ž‘์ด ๋” ๊ธธ๋‹ค๋ฐ˜๋ฉด, bootJar์˜ ๊ฒฝ์šฐ ๋‹จ์ˆœํžˆ ํ”„๋กœ์ ํŠธ์˜ jarํŒŒ์ผ์„ ๋งŒ๋“œ๋Š” ๋ชฉ์ ์œผ๋กœ ๋นŒ๋“œ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค(clean ์ž‘์—…์€ build/ ์™€ ๊ฐ™์€ ๋นŒ๋“œ ์‚ฐ์ถœ๋ฌผ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์‚ญ์ œํ•˜์—ฌ ์ด์ „ ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ์„ ๋ชจ๋‘ ์ œ๊ฑฐํ•จ) Dockerfile ์ƒ์„ฑํ•˜๊ธฐ# Dockerfile# jdk17 Image StartFROM openjdk:17# jar..
์•Œ์•„๋ณด๊ธฐ ์ข‹์€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด Spring Boot์—์„œ Custom Exception์„ ์„ค์ •ํ•ด๋ณด์ž!! ErrorCode enum ์ƒ์„ฑ ๋ฐ ์„ค์ • springboot ์—์„œ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œ์ผฐ์„ ๋•Œ, ์ „๋‹ฌํ•  ์—๋Ÿฌ ์ฝ”๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” enum์„ ์ƒ์„ฑํ•ด์ค€๋‹ค! enum(์—ด๊ฑฐํ˜•)์€ ์„œ๋กœ ์—ฐ๊ด€๋œ ์ƒ์ˆ˜๋“ค์˜ ์ง‘ํ•ฉ์„ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํŠน๋ณ„ํ•œ ์ž๋ฃŒํ˜•์ž„!=> ์ฃผ๋กœ ๋ช‡ ๊ฐ€์ง€ ๊ฐ’ ์ค‘ ํ•˜๋‚˜๋งŒ ์„ ํƒํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋จ(๊ณ„์ ˆ, ์š”์ผ, ์ƒํƒœ ๋“ฑ)  package berich.backend.exception;import lombok.RequiredArgsConstructor;import org.springframework.http.HttpStatus;@Getter@RequiredArgsConstructorpublic enum ErrorCo..
spring boot๋ฅผ ์ด์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๊ฒŒ ๋˜์—ˆ๋Š”๋ฐMySQL์„ ์ฒ˜์Œ ์—ฐ๋™ํ•ด๋ณด๋ฉด์„œ ๊ธฐ๋ก์„ ๋‚จ๊ฒจ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค...   implementation 'org.springframework.boot:spring-boot-starter-data-jpa'runtimeOnly 'com.mysql:mysql-connector-j' ์šฐ์„  build.gradle์— ์œ„ 2๊ฐœ์˜ ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค ๐Ÿ“Œimplementation ๊ณผ runtimeOnly ์˜ ์ฐจ์ด๋Š” ๋ญ˜๊นŒ ๊ถ๊ธˆ์ฆ์ด ๋“ค์—ˆ๋‹ค!=> runtimeOnly๋Š” ์ปดํŒŒ์ผ ์‹œ์ ์—๋Š” ํ•„์š”์—†์ง€๋งŒ ์‹คํ–‰ ์‹œ์ ์—๋Š” ๊ผญ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•œ๋‹ค   DB ์—ฐ๋™์„ ์œ„ํ•ด์„œ๋Š” resources ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์— ์žˆ๋Š” application.properties๋ฅผ ์„ค์ •ํ•ด์ค˜์•ผ ํ•˜..
ยท๐Ÿ’ซ Backend/Node
์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ ํšŒ์›๊ฐ€์ž…์‹œ์— ์‚ฌ์šฉ์ž์—๊ฒŒ ์ด๋ฉ”์ผ ์ธ์ฆ์„ ๋ฐ›๊ธฐ ์œ„ํ•ด ์ฐพ์•„๋ณด๋˜์ค‘ Nodemailer๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ฐœ๊ฒฌํ•ด์„œ ์‚ฌ์šฉํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค! (Nodemailer๋Š” node.js์—์„œ email์„ ์‰ฝ๊ฒŒ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•ด์คŒ)  Nodemailer๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ด๋ฉ”์ผ์„ ๋ณด๋‚ผ gmail ๊ณ„์ •๊ณผ ํ•ด๋‹น gmail์˜ ์•ฑ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค!   Google ๊ณ„์ • => ๋ณด์•ˆ => 2๋‹จ๊ณ„ ์ธ์ฆ์„ ํ™œ์„ฑํ™”ํ•œ ํ›„ ๊ฒ€์ƒ‰์ฐฝ์— ์•ฑ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๊ฒ€์ƒ‰ํ•ด์„œ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค    ์ด๋ ‡๊ฒŒ gmail ๊ณ„์ •๊ณผ ์•ฑ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” .envํŒŒ์ผ์— ์ €์žฅํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ํ„ฐ๋ฏธ๋„์— npm i nodemailer๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•ด์ฃผ๊ณ  const nodemailer = requiere("nodemailer")๋ฅผ ์ด์šฉํ•ด์„œ ๋ชจ๋“ˆ์„ importํ•˜๋ฉด..
ยท๐Ÿ’ซ Backend/Node
์ตœ๊ทผ์— Co-Code๋ผ๋Š” ์ฝ”๋”ฉ ๊ต์œก ํ”Œ๋žซํผ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด์„œ ๋ฐฑ์—”๋“œ๋ฅผ ๋งก๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!! ๊ฐ€์žฅ ๋จผ์ € ํ•˜๊ฒŒ๋œ๊ฑด ์„œ๋ฒ„ ๋ฐฐํฌํ•˜๊ธฐ... ๋ฐ”๋กœ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค  ๊ฐ€์žฅ ๋จผ์ € EC2๋ถ€ํ„ฐ ์ƒ์„ฑํ•ด๋ณด์•˜๋‹ค!(์ œ ๋ธ”๋กœ๊ทธ AWS์— ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ์‹ค์Šต์ด ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ํ•˜์‹œ๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค) => Ubuntu๋ฅผ ์‚ฌ์šฉํ–ˆ์Œ!! (+ ํ”„๋ฆฌํ‹ฐ์–ด)  ํ‚คํŽ˜์–ด๋„ ๋งŒ๋“ค์–ด์„œ ์ž˜ ๋ณด๊ด€ํ•ด์ฃผ๊ณ !! ssh -i "pem ํŒŒ์ผ ์ด๋ฆ„" ubuntu@ec2-"ํผ๋ธ”๋ฆญ ip ์ฃผ์†Œ".ap-northeast-2.compute.amazonaws.com ์ด์ œ ์ž‘์—…์ค‘์ธ ํ™˜๊ฒฝ์—์„œ (์ €๋Š” vscode๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— vscode ํ„ฐ๋ฏธ๋„์„ ์ด์šฉํ–ˆ์Œ) pem ํŒŒ์ผ ์œ„์น˜๋กœ ์ด๋™ ํ›„ ์œ„์˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ EC2 ์„œ๋ฒ„๋กœ ์ ‘์†ํ•œ๋‹ค   ๊ทธ๋Ÿฐ๋ฐPermissions for 'key.pe..
ยท๐Ÿ’ซ Backend/Node
์•Œ๊ฒŒ ๋ชจ๋ฅด๊ฒŒ cors ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด Express.js์—์„œ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•ด์™”๋Š”๋ฐ๋ฌธ๋“ ์ด๊ฒŒ ์ •ํ™•ํžˆ ๋ญ”์ง€ ๊ถ๊ธˆ์ฆ์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค..  CORS๋Š” Cross-Origin Resource Sharing์˜ ์•ฝ์ž๋กœ, ๋‹ค๋ฅธ ์ถœ์ฒ˜ ๋ฆฌ์†Œ์Šค ๊ณต์œ ์— ๋Œ€ํ•œ ํ—ˆ์šฉ/๋น„ํ—ˆ์šฉ ์ •์ฑ…์ด๋‹ค=> ์ด ์ •์ฑ…์€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰๋˜๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‹ค๋ฅธ ์ถœ์ฒ˜(Origin)๋กœ๋ถ€ํ„ฐ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ๋•Œ ์ ์šฉ๋จ ๋ธŒ๋ผ์šฐ์ €๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Same-Origin Policy๋ฅผ ๋”ฐ๋ฅด๋ฉฐ, ์ด๋Š” ์Šคํฌ๋ฆฝํŠธ๋‚˜ ์Šคํƒ€์ผ ๋“ฑ์˜ ๋ฆฌ์†Œ์Šค ์š”์ฒญ์ด๋™์ผํ•œ ์ถœ์ฒ˜์—์„œ ์˜จ ๊ฒƒ์ด์–ด์•ผ ํ•œ๋‹ค๋Š” ์ •์ฑ…์ด๋‹ค. (๋™์ผํ•œ ์ถœ์ฒ˜(Origin)๋ž€ ํ”„๋กœํ† ์ฝœ, ํ˜ธ์ŠคํŠธ, ํฌํŠธ๊ฐ€ ๋™์ผํ•œ ๊ฒƒ์„ ์˜๋ฏธ) https://www.naver.com:3000/ ๊ณผ ๊ฐ™์€ URL์ด ์žˆ๋‹ค๋ฉดhttps๊ฐ€ ํ”„๋กœํ† ์ฝœwww.nave..
JJunGyo
'๐Ÿ’ซ Backend' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก