์ค๋ฌด์๋ค์ด ์์ ์ ๊ฒฝํ๊ณผ ์ง์์ ๋ด์ ์ฝํ ์ธ ๋ฅผ ์ ๋ก๋ํ๊ณ , ์ทจ์ ์ค๋น์๊ณผ ๊ฐ์ ์ฌ์ฉ์๋ค์ด ์ด๋ฅผ ๊ตฌ๋ ํ์ฌ ์ค์ง์ ์ธ ๋์์ ๋ฐ์ ์ ์์ต๋๋ค
| ๊นํฌ์ฐ | ๊น์ง์ | ๊น์ฑ์ฐ | ์คํ์ง | ์ด์์ | ์ค์ธ๋ฏผ | ์ ํจ์ง |
ํ๋ก์ ํธ ์ด๊ด, ๊ฒฐ์ ์๋น์ค ๊ตฌํ |
์ฝํ
์ธ ์๋น์ค ๊ตฌํ |
SNS ์๋น์ค ๊ตฌํ |
JWT ์ด์ฉํ ์ด๋ฉ์ผ&์นด์นด์ค ๋ก๊ทธ์ธ ๋ฐ ์ง๋ ํ๋ฉด ๊ตฌํ |
๊ตฌ๋
์๋น์ค ๊ตฌํ |
๊ฒ์ ์๋น์ค ๊ตฌํ |
๊ณต์ง ์๋น์ค ๊ตฌํ |
- Spring Security ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉ์ ์ธ์ฆ์ ์ฒ๋ฆฌํฉ๋๋ค.
- ๋ก๊ทธ์ธ ์ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ก Access Token / Refresh Token ์์ฑํฉ๋๋ค.
- Access Token: ํด๋ผ์ด์ธํธ์์ ์์ฒญ ์ Authorization ํค๋์ Bearer ๋ฐฉ์์ผ๋ก ์ ๋ฌ
- Refresh Token: ์๋ฒ DB์ ์ ์ฅ ๋ฐ ๋ง๋ฃ ์ ํ ํฐ ์ฌ๋ฐ๊ธ ์์ฒญ ์ฒ๋ฆฌ
- JWT ์ ํจ์ฑ ๊ฒ์ฌ๋ JwtAuthenticationFilter์์ ์ฒ๋ฆฌํฉ๋๋ค. -์ธ์ฆ๋ ์ฌ์ฉ์ ์ ๋ณด๋ SecurityContextHolder์ ์ ์ฅ๋์ด ์ ์ญ ์ธ์ฆ ์ฒ๋ฆฌ ๊ฐ๋ฅ
- ์นด์นด์ค OAuth 2.0 ์ธ๊ฐ ์ฝ๋๋ฅผ ํตํด Access Token ๋ฐ๊ธ (RestTemplate ๋๋ WebClient ์ฌ์ฉ)๋ฐ์ต๋๋ค.
- ๋ฐ๊ธ๋ฐ์ ์นด์นด์ค Access Token์ผ๋ก ์ฌ์ฉ์ ํ๋กํ ์์ฒญ (์นด์นด์ค API)ํฉ๋๋ค.
- ์ด๋ฉ์ผ ๊ธฐ์ค์ผ๋ก ๊ธฐ์กด ํ์ ์ฌ๋ถ ํ๋จํฉ๋๋ค.
- ์ดํ JWT ํ ํฐ ๋ฐ๊ธ ๋ฐฉ์์ ์ด๋ฉ์ผ ๋ก๊ทธ์ธ๊ณผ ๋์ผํ๊ฒ ์ ์ฉํฉ๋๋ค.
- ํ์ ์ ๋ณด๋ฅผ ์กฐํํ๊ณ ์์ ํ ์ ์์ต๋๋ค.
- ํ์์ ์ญํ ์ด ์ฐฝ์์์ธ์ง ์ผ๋ฐ ํ์์ธ์ง ๊ตฌ๋ถํด ์ ๊ณต๋๋ ์๋น์ค๋ฅผ ๋ค๋ฅด๊ฒ ํ์ฟ์ต๋๋ค.
- Toast UI Editor์ ์ด์ฉํด ์ฝํ ์ธ ๋ณธ๋ฌธ์ ์์ฑํฉ๋๋ค.
- ๋งํฌ๋ค์ด ํ์์ผ๋ก ์์ฑํ ์ ์๊ณ ์ผ๋ฐ ํ ์คํธ ํ์์ผ๋ก๋ ์์ฑํ ์ ์์ต๋๋ค.
- ์ฌ์ง์ด ํฌํจ๋ ๊ฒ์๋ฌผ์ ์์ฑํ ์ ์์ต๋๋ค.
- AWS S3 ์คํ ๋ฆฌ์ง ์๋น์ค๋ฅผ ์ด์ฉํ์ฌ ์ด๋ฏธ์ง ์ ๋ก๋๋ฅผ ๊ตฌํํ์์ต๋๋ค.
- S3์ ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ๊ณ URL์ ๋ฐํ๋ฐ์ DB์ ์ ์ฅํฉ๋๋ค.
- ์ด๋ฏธ์ง๊ฐ ํฌํจ๋ ์ฝํ ์ธ ๋ฅผ ์กฐํํ ๊ฒฝ์ฐ DB์ ์ ์ฅ๋ URL์ ํตํด S3 ์คํ ๋ฆฌ์ง์ ์ ์ฅ๋ ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์ฌ ์ ์์ต๋๋ค.
- ํน์ ์ฝํ ์ธ ๋ ์ฐฝ์์๊ฐ ๊ตฌ๋ ์ ์ ์ฉ์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค.
- ์ฐฝ์์๋ฅผ ๊ตฌ๋ ํ ์ผ๋ฐ ํ์๋ง ์ด๋ํ ์ ์์ต๋๋ค.
- ๊ตฌ๋ ์ ์ฉ ์ฝํ ์ธ ์ผ ๊ฒฝ์ฐ ๋ค์ด์๋ชฌ๋ ํ์๋ฅผ ์ถ๊ฐํ์ฌ ์ฌ์ฉ์๊ฐ ๊ตฌ๋ถํ ์ ์๋๋ก ํ์์ต๋๋ค.
- ํ์์ ๊ตฌ๋ ์์ฒญ์ ๋ฐ๋ฅธ ์ ์ ํ ๊ฒฐ์ ์์ฒญ์ ๋ณด๋ ๋๋ค.
- ์ฐฝ์์ ๊ตฌ๋ ์ฌ๋ถ์ ๋ฐ๋ผ ๊ณต์ง ๊ธฐ๋ฅ์ ํ์ฉํ ์ ์์ต๋๋ค.
- ์ฐฝ์์์ ๋ํ ๊ตฌ๋ ์ฌ๋ถ์ ๋ฐ๋ผ ์ด๋ํ ์ ์๋ ์ฝํ ์ธ ์ ์ ํ์ ๋ก๋๋ค.
- ๊ตฌ๋ ์ ํด์งํ ํ ์ผ์ฃผ์ผ ์ด๋ด ์ฌ๊ตฌ๋ ํ ์ ์์ต๋๋ค.
- PortOne SDK๋ฅผ ์ด์ฉํด ๊ฒฐ์ ์๋จ์ ๋ฑ๋กํ ์ ์์ต๋๋ค.
- ๋ฐ๊ธ๋ BillingKey๋ฅผ ์ด์ฉํด DB์ ๊ฒฐ์ ์๋จ์ ๋ฑ๋กํฉ๋๋ค.
- ๋ฑ๋ก๋ ๊ฒฐ์ ์๋จ์ ๊ตฌ๋ ์ ๊ฒฐ์ ์๋จ์ ์ ํํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
- API ์์ฒญ์ ํตํด ๊ฒฐ์ ๋ฅผ ์์ฒญํ ์ ์์ต๋๋ค.
- ๊ฒฐ์ ๊ฐ ์๋ฃ๋๋ฉด ๊ฒฐ์ ๋ด์ญ๊ณผ ๊ตฌ๋ ๋ด์ญ์ ์ ๋ฐ์ดํธ ํด ๋ค์ ๊ฒฐ์ ์ผ์ ์ค์ ํฉ๋๋ค.
- ๊ตฌ๋ ๋ด์ญ์ ์ ์ฅ๋ ๋ค์ ๊ฒฐ์ ์ผ ์ ๋ณด๋ฅผ ์ด์ฉํด ๋งค์ 00์์ ์๋ ๊ฒฐ์ ๊ฐ ์งํ๋ฉ๋๋ค.
- ๋ค์ ๊ตฌ๋
์ํ์ ๋ฐ๋ผ ๊ฒฐ์ ๊ฐ ์งํ๋ฉ๋๋ค.
- ACTIVE : ๊ฒฐ์ ์์ฒญ
- CANCELLED : ์ํ๋ฅผ EXPIRED๋ก ๋ณ๊ฒฝ
- EXPIRED : ์ผ์ฃผ์ผ์ด ์ง๋ ๊ตฌ๋ ๋ด์ญ์ผ ๊ฒฝ์ฐ ๊ตฌ๋ ๋ด์ญ DB์์ ์ญ์
- ๋ชจ๋ ์ฌ๋๋ค์ ๊ฒ์๋ฌผ์ ๋ํด ๋๊ธ์ ์ ๋ ฅํ ์ ์์ต๋๋ค.
- ํ ๋๊ธ์ ๋ํด ์ถ๊ฐ๋ก ๋๊ธ์ ์์ฑํ ์ ์์ต๋๋ค.
- ๋๊ธ์ ์ญ์ ํ ๊ฒฝ์ฐ "์ญ์ ๋ ๋๊ธ์ ๋๋ค" ๋ผ๊ณ ํ์๋ฉ๋๋ค.
- ๋๊ธ์ ํํธ ๋ฒํผ์ ํด๋ฆญํด ์ข์์ ๋ฐ์์ ๋ณด๋ผ ์ ์์ต๋๋ค.
- ๋ง์ดํ์ด์ง์์ ์์ ์ด ์ข์์ ๋๋ฅธ ์ฝํ ์ธ ๋ชฉ๋ก์ ํ์ธํ ์ ์์ต๋๋ค.
- ํ์์ ํฌ๋ฆฌ์์ดํฐ์ ํ์ ํด ๊ฒ์ํ ์ ์์ต๋๋ค.
- ํํฐ๋ฅผ ์ ํํด ์์ ์ด ์ํ๋ ํฌ๋ฆฌ์์ดํฐ ์ ๋ณด๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
- ํ์์ ์ฝํ ์ธ ์ ํ์ ํด ๊ฒ์ํ ์ ์์ต๋๋ค.
- ํ์์ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ์ ํํด ์ํ๋ ์ฝํ ์ธ ๋ฅผ ๊ฒ์ํ ์ ์์ต๋๋ค.
- ํ์ด์ง๋ค์ด์ ์ ํตํด ๊ฒ์ ๊ณผ์ ์์ ์๋ฒ ๋ถํ๋ฅผ ๋ง์ ์ ์์ต๋๋ค.
- ํ์ด์ง ๋ก๋ฉ ์๋๋ฅผ ํฅ์์ํฌ ์ ์์ต๋๋ค.
creationstack/
โโโ backend/ โ Spring Boot ํ๋ก์ ํธ
โ โโโ target โ .jar ํ์ผ ์์ฑ ์์น
โโโ frontend/ โ React ํ๋ก์ ํธ
โ โโโ dist/ โ ์ ์ ๋ฆฌ์์ค(build๋ React)
-
React ์ฑ์ buildํด์ ์ ์ ํ์ผ๋ก ๋ง๋ฌ
-
Spring Boot ํ๋ก์ ํธ์ resources/static์ React build ๊ฒฐ๊ณผ๋ฌผ์ ๋ฃ์
-
Spring Boot ํ๋ก์ ํธ๋ฅผ ๋น๋ํด์ .jar ์์ฑ
-
.jar ํ์ผ ์คํ
[1] React ํ๋ก์ ํธ build
cd frontend
npm run build
โ frontend/dist ํด๋๊ฐ ์์ฑ๋จ
[2] React ๋น๋ ๊ฒฐ๊ณผ๋ฌผ์ Spring์ ๋ฃ๊ธฐ ์๋ ๋ช ๋ น์ผ๋ก React ๊ฒฐ๊ณผ๋ฌผ์ Spring Boot ํ๋ก์ ํธ์ ๋ณต์ฌํ์ธ์:
# frontend/build๋ฅผ backend์ static ํด๋๋ก ๋ณต์ฌ
rm -rf ../backend/src/main/resources/static/*
cp -r dist/* ../backend/src/main/resources/static/
[3] Spring Boot ํ๋ก์ ํธ ๋น๋ (JAR ๋ง๋ค๊ธฐ)
cd ../backend
./mvn clean package
โ target/ ์๋์ .jar ์์ฑ๋จ
์์: target/backend-0.0.1-SNAPSHOT.jar
[4] JAR ํ์ผ ์คํ
cd target
java -jar backend-0.0.1-SNAPSHOT.jar
์คํ ํ ๋ธ๋ผ์ฐ์ ์์ http://localhost:8080 ์ ์ํ๋ฉด React๊ฐ ๋ ๋๋ง๋ฉ๋๋ค.