๋ณธ ์ ์ฅ์๋ ์๋ณธ Moviezip ํ๋ก์ ํธ์์ ์ ๊ฐ ์ง์ ๊ธฐ์ฌํ ํต์ฌ ์์ญ(JWT ์ธ์ฆ / ์บ์ ์ฑ๋ฅ ๊ฐ์ / ์ค์๊ฐ ์ฑํ / ERD ๊ตฌ์กฐ ๋ฆฌํฉํ ๋ง) ์ค์ฌ์ผ๋ก ์ ๋ฆฌํ ํฌํฌ ๋ฒ์ ์ ๋๋ค.
๐งฉ Spring Security ๊ธฐ๋ฐ ์ธ์ ์ธ์ฆ์ JWT ๊ตฌ์กฐ๋ก ์ ํํ๊ณ , Redis ์บ์๋ฅผ ํ์ฉํ API ์๋ต ์๋ ๊ฐ์ , WebSocket์ ์ด์ฉํ ์ค์๊ฐ ์ฑํ ๊ธฐ๋ฅ ๋ฐ DB ๊ตฌ์กฐ ๊ฐ์ (ERD ๋ฆฌ๋์์ธ) ์ ์ฃผ๋ํ ๋ฐฑ์๋ ํ๋ก์ ํธ์ ๋๋ค.
| ํ์๊ฐ์ | ๋ก๊ทธ์ธ | ์ทจํฅ ์ ํ |
|---|---|---|
![]() |
![]() |
![]() |
| ๋ฉ์ธํ๋ฉด ์ต์ ์ํ | ๋ฉ์ธํ๋ฉด ์ถ์ฒ์ํ | ์ํ ๊ฒ์ |
|---|---|---|
![]() |
![]() |
![]() |
| ์ํ ์์ธ์กฐํ | ๋ฆฌ๋ทฐ ์์ฑ | ์ํ ์คํฌ๋ฉ |
|---|---|---|
![]() |
![]() |
![]() |
| ๋ด๊ฐ ์ข์ํ ์ํ | ๋ด๊ฐ ์์ฑํ ๋ฆฌ๋ทฐ | ๋ฆฌ๋ทฐ ์์ ๋ฐ ์ญ์ |
|---|---|---|
![]() |
![]() |
![]() |
| ์ํ๊ด ์ ํ ํ๋ฉด | ์ํ ์ข์ ์๋งค ํ๋ฉด | ๊ฒฐ์ ํ๋ฉด |
|---|---|---|
![]() |
![]() |
![]() |
| ๋ง์ดํ์ด์ง | ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ | ์์ด๋ ์ฐพ๊ธฐ |
|---|---|---|
![]() |
![]() |
![]() |
| ์ฑํ ๋ฐฉ ๋ฆฌ์คํธ | ์ฑํ ํ๋ฉด | ๋ก๊ทธ์์ |
|---|---|---|
![]() |
![]() |
![]() |
- ์ํ ๋ฆฌ๋ทฐ, ์๋งค, ์ถ์ฒ, ์ฑํ ๊น์ง ํตํฉ๋ ์ํ ํ๋ซํผ
- ํ ๊ตฌ์ฑ: ํ์คํ 5
- ์ญํ : ์ถ์ฒ API ์ฑ๋ฅ ๊ฐ์ , ์ธ์ฆ ๊ตฌ์กฐ ์ ํ, ์ค์๊ฐ ์ฑํ ๋ฌธ์ ๊ตฌํ, DAO ๊ตฌํ
| ๋ถ์ผ | ๊ธฐ์ |
|---|---|
| Backend | Java 17, Spring Boot, MyBatis, Spark, WebSocket |
| Frontend | React |
| Database | Oracle, MongoDB, Redis |
| Security | Spring Security + JWT |
๋ฆฌ๋ทฐ/์คํฌ๋ฉ ํ ์ด๋ธ์ด ์ค๋ณต๋๊ณ , ์๋งค/์ฑํ ๊ธฐ๋ฅ์ด ๋จ์ผ ํ ์ด๋ธ๋ก ๋จ์ํ๋์ด ์์ด ํ์ฅ์ฑ์ด ์ ํ๋ ๊ตฌ์กฐ์์ต๋๋ค.
๋ฆฌ๋ทฐ ํ ์ด๋ธ์ ํตํฉํ๊ณ , ์คํฌ๋ฉ ๊ธฐ๋ฅ(์ํ/๋ฆฌ๋ทฐ)์ ๋ถ๋ฆฌํ์ฌ ๊ด๋ฆฌ
์ค์ ์๋งค ํ๋ก์ธ์ค(์์์ ๋ณด โ ์ข์ โ ๊ฒฐ์ )์ ์ค์๊ฐ ๋ฌธ์(1:1 ์ฑํ ) ๊ธฐ๋ฅ์ ๋ฐ์ํ ์ต์ข ๊ตฌ์กฐ
Oracle ๊ธฐ๋ฐ์ ์ฃผ์ ์ํฐํฐ์ MongoDB ๊ธฐ๋ฐ์ ์ฑํ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฆฌํ์ฌ ๊ฒฐํฉ๋ ์ต์ํ
- ๊ธฐ์กด ์ธ์ ๊ธฐ๋ฐ ์ธ์ฆ์ ์๋ฒ ์ธก ์ํ๋ฅผ ์ ์งํด์ผ ํ๋ฏ๋ก, ํ์ฅ์ฑ๊ณผ ์ ์ง๋ณด์์ ํ๊ณ ์กด์ฌ
- ๋ชจ๋ฐ์ผยท์น ํตํฉ ํ๊ฒฝ์์ ์ธ์ ๊ณต์ ๋ฌธ์ ๊ฐ ๋ฐ์ โ Statelessํ JWT ๊ตฌ์กฐ๋ก ์ ํ
- Access / Refresh Token ๊ตฌ์กฐ๋ก ํ ํฐ ์ฌ๋ฐ๊ธ ๋ก์ง์ ๋ถ๋ฆฌ, ๋ณด์์ฑ๊ณผ ์ ํจ์ฑ ๊ด๋ฆฌ ํฅ์
โ ๊ฒฐ๊ณผ: ์๋ฒ ์ธ์ ๋ถํ ์ ๊ฑฐ
- ๊ธฐ์กด Spark ALS ๊ธฐ๋ฐ ์ถ์ฒ ๋ก์ง์ ํ๊ท ์๋ต ์๊ฐ์ด ์ฝ 18์ด๋ก ์ง์ฐ๋๋ ๋ฌธ์ ๋ฐ์
- Redis Cache-aside ํจํด ๋์ ๋ฐ 24์๊ฐ TTL ์ค์ ์ ํตํด ์ฌ๊ณ์ฐ ๋ถ๋ด ์ต์ํ
- ์ฒซ ์์ฒญ ์ Spark ์ฐ์ฐ ๊ฒฐ๊ณผ๋ฅผ ์บ์ฑํ๊ณ , ์ดํ ๋์ผ ์ฌ์ฉ์ ์์ฒญ์ ์บ์์์ ์ฆ์ ์๋ต
- Cache Key ๊ท์น(recommend:{userId})์ ์ ์ํ์ฌ ์ฌ์ฉ์๋ณ ๋ฐ์ดํฐ ์ผ๊ด์ฑ ์ ์ง

โ ๊ฒฐ๊ณผ: Redis ์บ์ ์ ์ฉ์ผ๋ก API ์๋ต ์๋๋ฅผ ์ ์ด โ ์ ms ์์ค์ผ๋ก ๊ฐ์ ํ๋ฉฐ, ์ฌ์ฉ์ ๋๊ธฐ ์๊ฐ์ ๋จ์ถํจ (Spark ALS ๊ธฐ๋ฐ ์ถ์ฒ ๋ก์ง์ ํ์ ๊ตฌํ, ์บ์ฑ ๋ก์ง ๋ฐ ์๋ต ๊ตฌ์กฐ ๊ฐ์ ์ ์ง์ ๋ด๋น)
- ์ฌ์ฉ์ โ ๊ด๋ฆฌ์ ๊ฐ ์ค์๊ฐ ๋ฌธ์ ๊ธฐ๋ฅ์ ์ํด Spring WebSocket ๊ธฐ๋ฐ ์๋ฐฉํฅ ํต์ ๊ตฌ์กฐ ์ค๊ณ
- MongoDB๋ฅผ ๋ณ๋ ๋ฐ์ดํฐ ์คํ ์ด๋ก ๋ถ๋ฆฌํด ๋น์ ํ ์ฑํ ๋ฐ์ดํฐ๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌ
- Oracle ๊ธฐ๋ฐ ๋ฉ์ธ ๋ฐ์ดํฐ์ ๋ถ๋ฆฌ ์ค๊ณํ์ฌ ์์คํ ๊ฐ ๊ฒฐํฉ๋๋ฅผ ์ต์ํ
- MyBatis ๊ธฐ๋ฐ DAO ๊ณ์ธต์ ์ง์ ์ค๊ณํ์ฌ ์๋น์ค ๋ก์ง๊ณผ ๋ฐ์ดํฐ ์ ๊ทผ ๋ก์ง ๋ถ๋ฆฌ
- Mapper XML์์ @Param๊ณผ resultMap์ ํ์ฉํด DTO โ DB ๋งคํ ์ ์ด
- ์ฌ์ฉ์ ์ ๋ณด ๊ธฐ๋ฐ ์๋ณ(findUserIdByInfo) ๋ฑ, ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ์ ๋ง๋ ์ฟผ๋ฆฌ๋ฅผ ์ง์ ์ ์
| ๊ธฐ์ | ์ ํ ์ด์ |
|---|---|
| Redis | Spark ์ฐ์ฐ ์ฌ๊ณ์ฐ ๋ฐฉ์ง |
| JWT | Stateless ์ธ์ฆ์ผ๋ก ๋ชจ๋ฐ์ผ/์น ํ์ฅ์ฑ ํ๋ณด |
| MongoDB | ๋น์ ํ ์ฑํ ๋ฐ์ดํฐ ์ ์ฐ ์ ์ฅ |
- JWT ์ธ์ฆ ์ ํ ํ๊ณ
- Spring Security + JWT ์ฌ์ฉ์ ์ธ์ฆ - Refresh Token์ ํ์ฉํ ์ธ์ฆ ๊ฐฑ์
GitHub: @MinCodeHub
Email: gjalsdud1030@naver.com





















