ํ๋ก์ ํธ ์๊ฐ
GitHub ๋ฐ๋ก๊ฐ๊ธฐ
๊ธฐํ ๋ฐฐ๊ฒฝ
ํ์ ๋ ์๋ฅผ ์ข์ํ๊ณ ์ฝ์ ์ฑ ์ ๊ธฐ๋กํ๋ ์ต๊ด์ด ์์๋ค. ๊ทธ๋ฐ๋ฐ ๋ง์ ๊พธ์คํ ๊ธฐ๋กํ๋ ค๊ณ ํ๋ฉด ๋ง๋ ํ ๊ณต๊ฐ์ด ์์๋ค. ๋ฉ๋ชจ ์ฑ, ๋ ธํธ, ์ฌ์ง ๋ฑ ์ฌ๋ฌ ๊ณณ์ ๋๋ ์ ์ ๋ค ๋ณด๋ฉด ์ด๋ ์๊ฐ ํ๋ฆ์ด ๋๊ธฐ๊ณ ๊ธฐ๋ก ์์ฒด๋ฅผ ํฌ๊ธฐํ๊ฒ ๋๋ค. ๊ธฐ๋ก์ ์๋๋ฐ ํ๋์ ๋ณด์ด์ง ์์ผ๋ ๋ด๊ฐ ์ผ๋ง๋ ์ฝ์๋์ง, ์ด๋ค ์ฑ ์ ์ข์ํ๋์ง๋ ํ์ ํ๊ธฐ ์ด๋ ต๋ค.
๊ทธ๋ฌ๋ค ๋ฌธ๋ "๋ด๊ฐ ์ํ๋ ๋๋ก ์ง์ ๋ง๋ค๋ฉด ๋๊ฒ ๋ค"๋ ์๊ฐ์ด ๋ค์๋ค. ๋ง์นจ ๋ฐฑ์๋ ๊ฐ๋ฐ์๋ฅผ ๋ชฉํ๋ก ํ๊ณ ์์๊ณ , ๋ด๊ฐ ์ค์ ๋ก ์ฐ๊ณ ์ถ์ ์๋น์ค๋ฅผ ๋ง๋๋ ๊ฒ ๊ฐ์ฅ ์ข์ ๊ณต๋ถ๋ผ๊ณ ์๊ฐํ๋ค. ์ฝ์ ์ฑ ์ ๊ธฐ๋ก๊ณผ ๋ฉ๋ชจ, ์๊ฐ·์ฐ๊ฐ ๋ ์ ๋ชฉํ, ํต๊ณ ์๊ฐํ, ๋์ ์ถ์ฒ, ๋ ์ ์ปค๋ฎค๋ํฐ๊น์ง ๋ด๊ฐ ์ํ๋ ๊ธฐ๋ฅ์ ํ๋์ฉ ์ง์ ์ค๊ณํ๊ณ ๊ตฌํํ ๊ฒ์ด Booktine์ด๋ค.
์๋น์ค ๋ชฉํ
๋ ์ ๊ธฐ๋ก์ ํ ๊ณณ์์ ๊ด๋ฆฌํ๊ณ , ๋ชฉํ๋ฅผ ์ค์ ํ๊ณ , ์ผ๋ง๋ ์ฝ์๋์ง ํ๋์ ํ์ ํ ์ ์๋ ์๋น์ค๋ฅผ ๋ง๋๋ ๊ฒ์ด ๋ชฉํ์๋ค. ๋จ์ํ ๊ธฐ๋ก ์ ์ฅ์ ๋์ด ๋ ์ ์ต๊ด์ ๋ง๋ค๊ณ ์ ์งํ๋ ๋ฐ ์ค์ง์ ์ผ๋ก ๋์์ด ๋๋ ์๋น์ค๋ฅผ ์งํฅํ๋ค.
ํ๊ฒ ์ฌ์ฉ์
- ๋ ์๋ฅผ ์ข์ํ๊ณ ์ฝ์ ์ฑ ์ ๊ธฐ๋กํ๋ ์ต๊ด์ด ์๋ ์ฌ๋
- ๋ ์ ๋ชฉํ๋ฅผ ์ธ์ฐ๊ณ ๊พธ์คํ ๊ด๋ฆฌํ๊ณ ์ถ์ ์ฌ๋
๊ธฐ๋ฅ ๋ฒ์ ๊ฒฐ์ ๊ณผ์
๊ธฐ๋ฅ์ P1 / P2 / P3 ์ธ ๋จ๊ณ๋ก ๋๋ ์ฐ์ ์์๋ฅผ ์ ํ๋ค.
P1 - ํต์ฌ ๊ธฐ๋ฅ (๋ฐ๋์ ๊ตฌํ)
๋ ์ ๊ธฐ๋ก ์๋น์ค์ ๋ณธ์ง์ ํด๋นํ๋ ๊ธฐ๋ฅ๋ค์ด๋ค. ํ์๊ฐ์ ·๋ก๊ทธ์ธ, ๊ฒ์๋ฌผ CRUD, ๋ฉ๋ชจ CRUD, ๋ชฉํ ์ค์ , ๊ธฐ๋ณธ ํต๊ณ๊ฐ ์ฌ๊ธฐ์ ํด๋นํ๋ค. ์ด ๊ธฐ๋ฅ๋ค ์์ด๋ ์๋น์ค ์์ฒด๊ฐ ์ฑ๋ฆฝํ์ง ์๋๋ค๊ณ ํ๋จํ๋ค.
P2 - ๋ณด์ ๊ธฐ๋ฅ (์์ผ๋ฉด ์ข์ ๊ธฐ๋ฅ)
P1๋ง์ผ๋ก๋ ์๋น์ค๊ฐ ๋จ์กฐ๋กญ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ฑ์ ๋์ฌ์ฃผ๋ ๊ธฐ๋ฅ๋ค์ P2๋ก ๋ถ๋ฅํ๋ค. ํค์๋ ๊ฒ์, ๋ ์ ์ํ ํํฐ, ์ฅ๋ฅด๋ณ ํต๊ณ, ๋์ ์ถ์ฒ์ด ์ฌ๊ธฐ์ ํด๋นํ๋ค. ํ์๋ ์๋์ง๋ง ๋น ์ง๋ฉด ์์ฌ์ด ๊ธฐ๋ฅ๋ค์ด๋ค.
P3 - ํ์ฅ ๊ธฐ๋ฅ (์๊ฐ์ด ๋จ์ผ๋ฉด ๊ตฌํ)
์ปค๋ฎค๋ํฐ, ๋ฆฌ๋ง์ธ๋, ๊ด๋ฆฌ์ ๊ธฐ๋ฅ์ ๋ ์ ๊ธฐ๋ก ์๋น์ค์ ํต์ฌ๊ณผ๋ ๊ฑฐ๋ฆฌ๊ฐ ์๋ค๊ณ ํ๋จํด P3๋ก ๋ฏธ๋ค๋ค. ์๋น์ค์ ๋ณธ์ง์ ์ธ ๊ธฐ๋ฅ์ ๋จผ์ ์์ฑํ ๋ค ์๊ฐ์ด ๋จ์ ๋ ๊ตฌํํ๋ ๋ฐฉํฅ์ผ๋ก ๊ฒฐ์ ํ๋ค. ๋ ์ ์ฑ๋ฆฐ์ง๋ ๊ธฐํ์ ํด๋์ง๋ง ์ต์ข ์ ์ผ๋ก ๊ตฌํํ์ง ์์๋ค.
๊ฐ๋ฐ ์ผ์ ์ค๊ณ
๋ฐฑ์๋๋ฅผ ๋จผ์ ์๋ฒฝํ๊ฒ ๊ตฌํํ ๋ค ํ๋ก ํธ์๋๋ฅผ ์งํํ๋ ๊ฒ์ ์์น์ผ๋ก ์ก์๋ค. ๋ฐฑ์๋ ๊ฐ๋ฐ์๋ฅผ ๋ชฉํ๋ก ํ๋ ๋งํผ ๋ฐฑ์๋์ ์๊ฐ์ ์ถฉ๋ถํ ํฌ์ํ๊ณ , ํ๋ก ํธ๋ ๋ฐฑ์๋๊ฐ ์์ฑ๋ ์ํ์์ ์ฐ๊ฒฐ์ ์ง์คํ๋ ๋ฐฉ์์ด์๋ค.
D1 ~ D9๋ ๋ฐฑ์๋ ์ ์ฒด ๊ตฌํ, D9-1์ ๋ฆฌํฉํ ๋ง, D10 ~ D12๋ ํ๋ก ํธ์๋ ๊ตฌํ, D13 ~ D14๋ ๋ฐฐํฌ ๋ฐ ๋ง๋ฌด๋ฆฌ๋ก ์ผ์ ์ ๊ตฌ์ฑํ๋ค.
์ฃผ์ ๊ธฐ๋ฅ
| ๊ธฐ๋ฅ | ์ค๋ช |
|---|---|
| ๋ ์ ๊ธฐ๋ก (Book Note) | ๋ ์ ์ํ(์ฝ๋ ์ค / ์๋ / ์ผ์์ ์ง / ์ฝ๊ณ ์ถ์) ๊ด๋ฆฌ, ๋ณ์ ·ํ์คํ·์ฅ๋ฅด ๊ธฐ๋ฐ ๋ ธํธ ์์ฑ |
| ๋ฉ๋ชจ ๊ด๋ฆฌ | ๋์ ๋จ์๋ก ๋ฉ๋ชจ ์์ฑ·์์ ·์ญ์ , ์ฑ ์ ์ฝ์ผ๋ฉฐ ๋จ๊ธด ๋ฌธ์ฅ·๊ฐ์·์์ฝ ์ ๋ฆฌ |
| ๋ชฉํ ๋ฐ ํต๊ณ (Progress) | ์๊ฐ·์ฐ๊ฐ ๋ ์ ๋ชฉํ ์ค์ , ์ฅ๋ฅด ๋ถํฌ·์๋ณ ์๋ ·์ฐ๊ฐ ์์ฝ ์๊ฐํ |
| ๋์ ์ถ์ฒ | ์๋ผ๋ API ์ฐ๋, ๋ฒ ์คํธ์ ๋ฌ·์ฅ๋ฅด ๊ธฐ๋ฐ ์ถ์ฒ, ์ ์ฅ ๋ฐ ๋ชฉ๋ก ๊ด๋ฆฌ |
| ๋ ์ ์ปค๋ฎค๋ํฐ | ๊ฒ์๊ธ ์์ฑ·์์ ·์ญ์ , ๋๊ธ·๋๋๊ธ·์ข์์ |
| ๋ฆฌ๋ง์ธ๋ | ๋ ์ ๋ฆฌ๋ง์ธ๋ ๋ฑ๋ก, SSE ๊ธฐ๋ฐ ์ค์๊ฐ ์๋ฆผ ์์ |
| ๊ด๋ฆฌ์ | ์ฌ์ฉ์·๊ฒ์๊ธ·์ฅ๋ฅด·๋ฌธ์ ๋ชฉ๋ก ์กฐํ, ์ฅ๋ฅด ์ถ๊ฐ·์ญ์ |
๊ธฐ์ ์คํ
Backend
| ๊ตฌ๋ถ | ๊ธฐ์ | ์ ํ ์ด์ |
|---|---|---|
| Language | Java 21 GraalVM | Record, Switch Expression ๋ฑ ์ต์ ๋ฌธ๋ฒ ํ์ฉ, GraalVM ๋ค์ดํฐ๋ธ ์ด๋ฏธ์ง๋ก ์์ ์๊ฐ ๋จ์ถ |
| Framework | Spring Boot 3.3 | Spring Security 6, Virtual Thread ๋ฑ ์ต์ ๊ธฐ๋ฅ ํ์ฉ |
| Persistence | Spring Data JPA QueryDSL | ๋์ ์ฟผ๋ฆฌ๋ฅผ ํ์ ์์ ํ๊ฒ ์์ฑํ๊ธฐ ์ํด QueryDSL ๋์ |
| Database | MySQL 8 H2 | ๊ด๊ณํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์ ํฉ, ๋ก์ปฌ์์๋ H2๋ก ๋น ๋ฅด๊ฒ ๊ฒ์ฆ |
| Auth | JWT Redis | Stateless ์ธ์ฆ ๊ตฌ์กฐ, Redis๋ก Refresh Token ๋ฐ ๋ธ๋๋ฆฌ์คํธ ๊ด๋ฆฌ |
| Storage | AWS S3 | ํ๋กํ ์ด๋ฏธ์ง, ๊ฒ์๋ฌผ ํ์ง ์ด๋ฏธ์ง ์ ์ฅ |
| External | Aladin API SMTP | ๋์ ๊ฒ์·์ถ์ฒ ์ฐ๋, ์ด๋ฉ์ผ ์ธ์ฆ·๋น๋ฐ๋ฒํธ ์ฌ์ค์ |
Frontend
| ๊ตฌ๋ถ | ๊ธฐ์ | ์ ํ ์ด์ |
|---|---|---|
| Framework | React 18 TypeScript | ์ปดํฌ๋ํธ ์ฌ์ฌ์ฉ์ฑ๊ณผ ํ์ ์์ ์ฑ ํ๋ณด |
| Styling | Tailwind CSS v3 shadcn/ui | ์ ํธ๋ฆฌํฐ ๊ธฐ๋ฐ์ผ๋ก ๋น ๋ฅธ UI ๊ตฌ์ฑ, shadcn/ui๋ก ์ผ๊ด๋ ์ปดํฌ๋ํธ ๊ด๋ฆฌ |
| HTTP | Axios | ์ธํฐ์ ํฐ๋ก Bearer Token ์๋ ์ฃผ์ ๋ฐ ํ ํฐ ์ฌ๋ฐ๊ธ ์ฒ๋ฆฌ |
Infra
| ๊ตฌ๋ถ | ๊ธฐ์ | ์ ํ ์ด์ |
|---|---|---|
| Compute | AWS EC2 Docker | ์ปจํ ์ด๋ ๊ธฐ๋ฐ์ผ๋ก ์ด์ ํ๊ฒฝ ์ผ๊ด์ฑ ํ๋ณด |
| Database | AWS RDS MySQL 8 | ๊ด๋ฆฌํ DB๋ก ์ด์ ๋ถ๋ด ์ต์ํ |
| Cache | AWS ElastiCache Redis | ํ ํฐ ์ ์ฅ, ๋ธ๋๋ฆฌ์คํธ, ์ธ์ฆ ์ฝ๋, ์คํจ/์ ๊ธ ์ ๋ณด ๊ด๋ฆฌ |
| Storage / CDN | AWS S3 CloudFront | ์ ์ ํ์ผ ์๋น ๋ฐ ์ด๋ฏธ์ง CDN ์ฒ๋ฆฌ |
| Network | ALB HTTPS | ๋๋ฉ์ธ ๊ธฐ๋ฐ ๋ผ์ฐํ , SSL ์ธ์ฆ์ ์ ์ฉ |
์์คํ ์ํคํ ์ฒ

ํด๋ผ์ด์ธํธ(React)๋ CloudFront๋ฅผ ํตํด ์ ์ ํ์ผ์ ์๋น๋ฐ๊ณ , API ์์ฒญ์ ALB๋ฅผ ๊ฑฐ์ณ EC2์ Spring Boot ์ปจํ ์ด๋๋ก ์ ๋ฌ๋๋ค. ๋ชจ๋ ์์ฒญ์ JwtFilter์์ ํ ํฐ ๊ฒ์ฆ ๋ฐ ๋ธ๋๋ฆฌ์คํธ ํ์ธ์ ๊ฑฐ์น๊ณ , Spring Security์์ ์ธ์ฆ·์ธ๊ฐ๋ฅผ ์ฒ๋ฆฌํ๋ค. ๋ฆฌ๋ง์ธ๋ ์๋ฆผ์ SSE๋ก ํด๋ผ์ด์ธํธ์ ์ง์ ์ฐ๊ฒฐ๋๋ฉฐ, ์ธ๋ถ ์ฐ๋์ผ๋ก Google OAuth2, ์๋ผ๋ API, SMTP, AWS S3๋ฅผ ์ฌ์ฉํ๋ค.
ERD

์ด 11๊ฐ ํ ์ด๋ธ๋ก ๊ตฌ์ฑ๋๋ค. users๋ฅผ ์ค์ฌ์ผ๋ก posts, memos, monthly_goals, annual_goals, reminders, recommendations, inquiries๊ฐ ์ฐ๊ฒฐ๋๊ณ , ์ปค๋ฎค๋ํฐ ๊ธฐ๋ฅ์ community_posts, community_comments, community_likes๋ก ๋ถ๋ฆฌํ๋ค. ์ฅ๋ฅด๋ genres ํ ์ด๋ธ๋ก ๋ ๋ฆฝ ๊ด๋ฆฌํ๋ฉฐ ๊ด๋ฆฌ์๊ฐ ์ถ๊ฐ·์ญ์ ํ ์ ์๋ค.
1์ฐจ ๊ฐ๋ฐ ๋์๋ณด๊ธฐ
2025๋ ์ด์ Java 17, Spring Boot 3.3, React 18๋ก ๊ฐ์ ์ฃผ์ ๋ฅผ ํ ๋ฒ ๊ตฌํํ ์ ์ด ์๋ค. ๋น์์๋ ์ธ์ ๊ธฐ๋ฐ ์ธ์ฆ, Thymeleaf ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง, Render ๋ฌด๋ฃ ๋ฐฐํฌ๋ฅผ ์ฌ์ฉํ๊ณ , ์ค๊ณ๋ณด๋ค ๊ตฌํ์ ๊ธํ๋ ์ฝ๋์๋ค. 1์ฐจ ์ฝ๋๋ฅผ ๋ค์ ๋ดค์ ๋ ์์ ์ผ๋ก ํด๊ฒฐํ ์ ์๋ ์์ค์ด ์๋๋ผ๊ณ ํ๋จํ๋ค. ๊ทธ๋์ ์ฝ๋๋ฅผ ์ฒ์๋ถํฐ ๋ค์ ์งฐ๋ค. JWT ์ธ์ฆ, AWS ์ธํ๋ผ, ๋๋ฉ์ธ ์ค์ฌ ์ค๊ณ, ๋ณด์ ์ ๊ฒ๊น์ง ์ด๋ฒ 2์ฐจ ๊ฐ๋ฐ์์ ๋ฌ๋ผ์ง ๋ถ๋ถ๋ค์ด๋ค.
1์ฐจ ๊ฐ๋ฐ ๊ธฐ๋ก์ ์๋ ๋งํฌ์์ ํ์ธํ ์ ์๋ค.
'๐ป PROJECT > [Spring Boot, React] ๋ ์ ์ต๊ด ๊ด๋ฆฌ ์๋น์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [์ค๊ณ ์์ฌ๊ฒฐ์ ] JWT + Redis ์ธ์ฆ (0) | 2026.05.13 |
|---|---|
| [ํ๋ก์ ํธ] ๊ตญ๋ด ๋์ ๊ฒ์ API ์ ํ ๊ณผ์ (0) | 2026.05.08 |
| [ํธ๋ฌ๋ธ์ํ ] JWT secret ํค ๊ธธ์ด ๋ถ์กฑ์ผ๋ก ์ธํ WeakKeyException (0) | 2026.05.07 |
| [ํธ๋ฌ๋ธ์ํ ] ์ปค๋ฎค๋ํฐ ์ข์์ ์ํ ๋ถ์ผ์น๋ก ์ธํ 409 ์ค๋ฅ (0) | 2026.05.07 |
| [๋ฆฌํฉํ ๋ง] JPA ์ธ๋ฑ์ค ์ถ๊ฐ๋ก ์กฐํ ์ฑ๋ฅ ๊ฐ์ (0) | 2026.05.04 |