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์ฐจ ์บ์ฑ, ์ฐ๊ธฐ ์ง์ฐ, ๋ณ๊ฒฝ ๊ฐ์ง๋ฅผ ํตํด ์์ ๋ก์ง์ ํจ์จ์ ..
'๊ฐ์ ๋ฉด์ ์ฌ๋ก๋ก ๋ฐฐ์ฐ๋ ๋๊ท๋ชจ ์์คํ
์ค๊ณ ๊ธฐ์ด' ์ฑ
์ ํตํด ํ์ตํ ๋ด์ฉ์ ์ ๋ฆฌํ์์ต๋๋ค. ์ฌ์ฉ์ ์์ ๋ฐ๋ฅธ ๊ท๋ชจ ํ์ฅ์ฑ ๋จ์ผ ์๋ฒ ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ๋จ ํ ๋์ ์๋ฒ์์ ์คํ๋๋ ๊ฐ๋จํ ์์คํ
๋ถํฐ ์๊ฐํด๋ณด๋ฉด => ์ด๋ฐ์์ผ๋ก ์น, ์ฑ, ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์บ์ ๋ฑ์ด ์ ๋ถ ์๋ฒ ํ ๋ ์์ ์คํ๋๋ค ์ฌ์ฉ์ ์์ฒญ ์ฒ๋ฆฌ ํ๋ฆ์ ๋ณด๋ฉด ์ฌ์ฉ์๊ฐ ๋๋ฉ์ธ ์ด๋ฆ์ ์ด์ฉํ์ฌ ์น์ฌ์ดํธ์ ์ ์ํ๋๋ฐ ์ด๋ฅผ ์ํด 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๋ฅผ ์ค์ ํด์ค์ผ ํ..
์ด๋ฒ ํ๋ก์ ํธ์์ ํ์๊ฐ์
์์ ์ฌ์ฉ์์๊ฒ ์ด๋ฉ์ผ ์ธ์ฆ์ ๋ฐ๊ธฐ ์ํด ์ฐพ์๋ณด๋์ค Nodemailer๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐ๊ฒฌํด์ ์ฌ์ฉํด๋ณด๊ฒ ์ต๋๋ค! (Nodemailer๋ node.js์์ email์ ์ฝ๊ฒ ๋ณด๋ผ ์ ์๋ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํด์ค) Nodemailer๋ฅผ ์ฌ์ฉํ ๋ ์ด๋ฉ์ผ์ ๋ณด๋ผ gmail ๊ณ์ ๊ณผ ํด๋น gmail์ ์ฑ ๋น๋ฐ๋ฒํธ๊ฐ ํ์ํ๋ค! Google ๊ณ์ => ๋ณด์ => 2๋จ๊ณ ์ธ์ฆ์ ํ์ฑํํ ํ ๊ฒ์์ฐฝ์ ์ฑ ๋น๋ฐ๋ฒํธ๋ฅผ ๊ฒ์ํด์ ์์ฑํ ์ ์๋ค ์ด๋ ๊ฒ gmail ๊ณ์ ๊ณผ ์ฑ ๋น๋ฐ๋ฒํธ๋ .envํ์ผ์ ์ ์ฅํด์ฃผ์์ต๋๋ค. ํฐ๋ฏธ๋์ npm i nodemailer๋ฅผ ์ด์ฉํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํด์ฃผ๊ณ const nodemailer = requiere("nodemailer")๋ฅผ ์ด์ฉํด์ ๋ชจ๋์ importํ๋ฉด..
์ต๊ทผ์ 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..
์๊ฒ ๋ชจ๋ฅด๊ฒ cors ์๋ฌ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด Express.js์์ ๋ฏธ๋ค์จ์ด๋ฅผ ์ฌ์ฉํด์๋๋ฐ๋ฌธ๋ ์ด๊ฒ ์ ํํ ๋ญ์ง ๊ถ๊ธ์ฆ์ด ์๊ฒผ์ต๋๋ค.. CORS๋ Cross-Origin Resource Sharing์ ์ฝ์๋ก, ๋ค๋ฅธ ์ถ์ฒ ๋ฆฌ์์ค ๊ณต์ ์ ๋ํ ํ์ฉ/๋นํ์ฉ ์ ์ฑ
์ด๋ค=> ์ด ์ ์ฑ
์ ๋ธ๋ผ์ฐ์ ์์ ์คํ๋๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ด ๋ค๋ฅธ ์ถ์ฒ(Origin)๋ก๋ถํฐ ๋ฆฌ์์ค์ ์ ๊ทผํ ๋ ์ ์ฉ๋จ ๋ธ๋ผ์ฐ์ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก Same-Origin Policy๋ฅผ ๋ฐ๋ฅด๋ฉฐ, ์ด๋ ์คํฌ๋ฆฝํธ๋ ์คํ์ผ ๋ฑ์ ๋ฆฌ์์ค ์์ฒญ์ด๋์ผํ ์ถ์ฒ์์ ์จ ๊ฒ์ด์ด์ผ ํ๋ค๋ ์ ์ฑ
์ด๋ค. (๋์ผํ ์ถ์ฒ(Origin)๋ ํ๋กํ ์ฝ, ํธ์คํธ, ํฌํธ๊ฐ ๋์ผํ ๊ฒ์ ์๋ฏธ) https://www.naver.com:3000/ ๊ณผ ๊ฐ์ URL์ด ์๋ค๋ฉดhttps๊ฐ ํ๋กํ ์ฝwww.nave..