NginX๋ฅผ ์ด์ฉํด HTTPS ์ค์ ์ ํ Spring Boot ๋ฐฐํฌ ํ๊ฒฝ์์ Swagger ์ฌ์ฉ์ ์์ฒญ์ด ์ ๋๋ก ๊ฐ์ง ์๋ ์๋ฌ๊ฐ ๋ฐ์ํจ Security ๊บผ์ ธ ์์EC2์ ์ปจํ
์ด๋๋ก spring boot๊ฐ ๋์๊ฐ๋์ค์NginX์์ http, https ๋ชจ๋ ์์ฒญ ๊ฐ๋ฅํ๊ฒ ์ค์ ํด๋ Failed to fetch ์ฐ์ ๋ณ๋ค๋ฅธ ์ค์ ์ถ๊ฐ ์์ด ๊ธฐ๋ณธ ์ค์ ์ผ๋ก Swagger๋ฅผ ์ฌ์ฉ์ค์ธ๋ฐ Server๋ฅผ ์ดํด๋ณด๋ฉด http://172.17.0.2:8080 ์ผ๋ก ๋์ด์๋๊ฑธ ํ์ธํ ์ ์์ ์ด๋ Spring boot ์ปจํ
์ด๋์ Docker ๋ด๋ถ IP์ธ๋ฐ Spring Boot์์ server.address๋ฅผ ๋ณ๋๋ก ์์ฑํ์ง ์์ผ๋ฉด, Swagger๋ ๊ธฐ๋ณธ์ ์ผ๋ก Spring Boot ์ดํ๋ฆฌ์ผ์ด์
์ด ๋ฐ์ธ๋ฉ๋ ์ฃผ์๋ฅผ Server..
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์ฐจ ์บ์ฑ, ์ฐ๊ธฐ ์ง์ฐ, ๋ณ๊ฒฝ ๊ฐ์ง๋ฅผ ํตํด ์์ ๋ก์ง์ ํจ์จ์ ..
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๋ฅผ ์ค์ ํด์ค์ผ ํ..