-
๊ฒ์๊ธ CRUD
- Spring Data JPA๋ฅผ ํ์ฉํด ๊ฒ์๊ธ CRUD API ๊ตฌํ
- ์ฌ์ฉ ์ด์ : ์ ํ๋ฆฌ์ผ์ด์ ์์ SQL์ ์ง์ ๋ค๋ฃฐ ๊ฒฝ์ฐ SQL๊ณผ ์ํฐํฐ ์ฌ์ด์ ๊ฐํ ์์กด ๊ด๊ณ๊ฐ ์๊ธฐ๊ฒ ๋์ด ํ๋๋ฅผ ํ๋ ์ถ๊ฐํ ๊ฒฝ์ฐ์๋ CRUD ์ฝ๋์ SQL ๋๋ถ๋ถ์ ๋ณ๊ฒฝํด์ผ ํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Spring Data JPA๋ฅผ ์ฌ์ฉํด CRUD ์ฝ๋๋ฅผ ์์ฑํ๋ค.
-
๊ฒ์๊ธ ์ ์ฒญ CRUD
- Spring Data JPA๋ฅผ ํ์ฉํด ๊ฒ์๊ธ ์ ์ฒญ CRUD API ๊ตฌํ
-
๊ฒ์๊ธ ๋๊ธ CRUD
- Spring Data JPA๋ฅผ ํ์ฉํด ๊ฒ์๊ธ ๋๊ธ CRUD API ๊ตฌํ
-
๊ฒ์๊ธ ๊ฒ์
- QueryDSL๋ฅผ ํ์ฉํด ๊ฒ์๊ธ ๊ฒ์ API ๊ตฌํ
- ์ฌ์ฉ ์ด์ : ์ฝ๋๋ฅผ ์ฟผ๋ฆฌ๋ก ์์ฑํ๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ ์์ ์ ๋ฌธ๋ฒ ์ค๋ฅ๋ฅผ ์ฝ๊ฒ ํ์ธํ ์ ์๊ณ , ์๋ ์์ฑ ๋ฑ IDE์ ๋์์ ๋ฐ์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ํ ๋์ ์ธ ์ฟผ๋ฆฌ ์์ฑ์ด ํธ๋ฆฌํ๊ณ , ์ฟผ๋ฆฌ ์์ฑ ์ ์ ์ฝ ์กฐ๊ฑด ๋ฑ์ ๋ฉ์๋ ์ถ์ถ์ ํตํด ์ฌ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ QueryDSL์ ์ฌ์ฉํด ๊ฒ์๊ธ ๊ฒ์ API๋ฅผ ๊ตฌํํ๋ค.
-
์ด๋ฉ์ผ ๋ก๊ทธ์ธ + ์์ ๋ก๊ทธ์ธ
- cors๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Spring Security์ฌ์ฉ
- ์ด๋ฉ์ผ ๋ก๊ทธ์ธ๊ณผ ์์ ๋ก๊ทธ์ธ์ API๋ฅผ ํตํฉํ์ฌ ์ ๊ณตํ๊ธฐ ์ํด, Spring Security Oauth๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ง์ Oauth ์๋ฒ์ ํต์ ํ์ฌ ์์ ๋ก๊ทธ์ธ์ ๊ตฌํํ์๋ค.
- httpsํต์ ์ ๋ธ๋ผ์ฐ์ ์ ์ฟ ํค๊ฐ ์ ์ฅ๋์ง ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด, ์ฟ ํค์ 'SameSite=None'๊ณผ 'Secure' ์์ฑ์ ์ถ๊ฐํ์๋ค.
- JWT ํ ํฐ์ ํ์ฉํ์ฌ '์ธ๊ฐ'๋ฅผ ๊ตฌํ
- ์ ํ ์ด์ : AWS EC2 ํ๋ฆฌํฐ์ด๋ฅผ ํ์ฉํ์ฌ ์๋ฒ๋ฅผ ๊ตฌ์ถํ์ฌ, ์ธ์ ์ ํ์ฉํ์ฌ ์ธ์ฆ ๋ฐ ์ธ๊ฐ๋ฅผ ๊ตฌํํ ๊ฒฝ์ฐ ์๋ฒ์ ๋ถ๋ด์ด ๋ ๊ฒ์ด๋ค. ์๋ฒ์ ๋ถ๋ด์ด ๋ ๊ฐ๋๋ก ํ๊ธฐ ์ํด, JWTํ ํฐ ๋ฐฉ์์ ํ์ฉํ์๋ค.
-
์ชฝ์ง ๊ธฐ๋ฅ
- ๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๊ธฐ ์ํด QueryDSL์ ์ฌ์ฉ
-
์๋ฆผ ๊ธฐ๋ฅ
- DB์ ์๋ฆผ์ ์ ์ฅํ๋ ๊ธฐ๋ฅ์ Spring Data JPA๋ฅผ ํ์ฉํด ๊ตฌํ
- ์น ํต์ ๋ฐฉ๋ฒ์ SSE ํต์ ๋ฐฉ๋ฒ์ ํ์ฉ
- ์ ํ ์ด์ : SSE๋ ์น์์ผ๊ณผ ๋ฌ๋ฆฌ ๋ณ๋์ ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ง ์๊ณ HTTP ํ๋กํ ์ฝ๋ง ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ํจ์ฌ ๊ฐ๋ณ๊ธฐ ๋๋ฌธ์ด๋ค. ์๋ฆผ ๊ธฐ๋ฅ์ ์๋ฐฉํฅ ํต์ ์ด ํ์ํ์ง ์์ผ๋ฏ๋ก ์น ์์ผ ํต์ ๋ณด๋ค ๊ฐ๋ฒผ์ด SSE ํต์ ๋ฐฉ๋ฒ์ ์ ํํ๋ ๊ฒ์ด ๋ ์ข์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ SSE ํต์ ๋ฐฉ๋ฒ์ ํ์ฉํ๋ค.
ํ์ ๊ฐ์ | ์ด๋ฉ์ผ ๋ก๊ทธ์ธ |
---|---|
![]() |
|
๊ตฌ๊ธ ๋ก๊ทธ์ธ | ์นด์นด์ค ๋ก๊ทธ์ธ |
![]() |
|
๊นํ๋ธ ๋ก๊ทธ์ธ | ๋ง์ดํ์ด์ง |
![]() |
|
์ชฝ์ง ํ์ธ | ์ชฝ์ง ๋ณด๋ด๊ธฐ |
![]() |
![]() |
์๋ฆผ ํ์ธ | ํ์ ํํด |
![]() |
- Spring Boot (API Server)
- Spring Security (Security)
- MySQL (RDB)
- JPA & QueryDSL (ORM)
- JUnit (Test)
- AWS (Infra)
- Travis CI (CI)
|-- auth // ์ธ์ฆ
| |-- Oauth
| | |-- dto
| | |-- entity
| | `-- service
| |-- config // ์ธ์ฆ ๊ด๋ จ ์ค์
| |-- controller
| `-- service
|-- board // ๊ฒ์๊ธ ๊ด๋ จ ๊ธฐ๋ฅ
| |-- board // ๊ฒ์๊ธ CRUD ๊ธฐ๋ฅ
| | |-- controller
| | |-- dto
| | |-- entity
| | |-- repository
| | `-- service
| |-- boardApply // ๊ฒ์๊ธ ์ ์ฒญ ๊ธฐ๋ฅ
| | |-- controller
| | |-- dto
| | |-- entity
| | |-- repository
| | `-- service
| |-- boardComment // ๊ฒ์๊ธ ๋๊ธ ๊ธฐ๋ฅ
| | |-- controller
| | |-- dto
| | |-- entity
| | |-- repository
| | `-- service
| |-- boardSearch // ๊ฒ์๊ธ ๊ฒ์ ๊ธฐ๋ฅ
| | |-- controller
| | |-- dto
| | |-- repository
| | `-- service
| `-- boardTag // ๊ฒ์๊ธ ํ๊ทธ ๊ธฐ๋ฅ
| |-- entity
| |-- repository
| `-- service
|-- config // ๊ณตํต์ ์ธ ์ค์ (QueryDSL, Security, DB, Storage)
|-- event // Event ๋ฐ์ ์ฝ๋
|-- exception // ๊ณตํต ์์ธ ์ฒ๋ฆฌ
|-- message // ์ชฝ์ง ๊ธฐ๋ฅ
| |-- controller
| |-- dto
| |-- entity
| |-- repository
| `-- service
|-- notification // ์๋ฆผ ๊ธฐ๋ฅ
| |-- common
| |-- controller
| |-- dto
| |-- entity
| |-- eventListener // EventListener ์ฝ๋
| |-- exception // ์๋ฆผ ๊ด๋ จ ์์ธ ์ฒ๋ฆฌ
| |-- repository
| `-- service
|-- storage // ํ์ผ ์ ์ฅ ๊ธฐ๋ฅ
| |-- controller
| `-- service
|-- tag // ๊ธฐ๋ณธ ํ๊ทธ
| `-- entity
`-- user // ์ฌ์ฉ์ ๊ด๋ จ ๊ธฐ๋ฅ
|-- configuration
|-- controller
|-- dto
|-- entity
`-- service