Spring ๊ด๋ จ ๊ณต๋ถํ ๊ธฐ์ ๊ฐ๋ ์์ฝ ์ ๋ฆฌ
- Spring์์ ๊ณ์ธตํ ์ํคํ
์ฒ(Layered Architecture)์ ๊ฐ ๋ ์ด์ด(Controller, Service, Repository)์ ์ญํ ์ ์ค๋ช
ํ ์ ์๋ค.
- Controller: ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ์์ ์ ์ ํ ์๋น์ค๋ฅผ ํธ์ถํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ์ญํ .
- Service: ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ ๋ ์ด์ด. Controller์์ ์์ฒญ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ์ฌ Repository์ ์ํธ์์ฉ.
- Repository: ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ CRUDํ๋ ์ญํ .
- JPA์์ 1:1, 1:N, N:M ๋ฑ์ ์ฐ๊ด๊ด๊ณ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ํ๊ณ ๊ตฌ์ฑํ ์ ์๋ค.
- 1:1: ๋ ์ํฐํฐ ๊ฐ 1:1 ๊ด๊ณ (์: Person๊ณผ Passport).
- 1:N: ํ๋์ ์ํฐํฐ๊ฐ ์ฌ๋ฌ ๊ฐ์ ๋ค๋ฅธ ์ํฐํฐ์ ๊ด๊ณ๋ฅผ ๋งบ๋ ๊ฒ (์: Department์ ์ฌ๋ฌ Employee).
- N:M: ์ฌ๋ฌ ๊ฐ์ ์ํฐํฐ๊ฐ ์๋ก ์ฌ๋ฌ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋งบ๋ ๊ฒ (์: Student์ Course).
- ์ปค์คํ
exception ์ ๊ตฌํํ๊ณ ์ด๋ฅผ ํธ๋ค๋ง ํ์ฌ ์๋ตํ ์ ์๋ค.
- ๋น์ฆ๋์ค ๋ก์ง์์ ๋ฐ์ํ ์ ์๋ ํน์ ์์ธ๋ฅผ ์ปค์คํ ์์ธ ํด๋์ค๋ก ๋ง๋ค๊ณ , ์ด๋ฅผ ํธ๋ค๋งํ์ฌ ์ ์ ํ ์๋ต์ ์ ๊ณต.
- ์ํ ์ฐธ์กฐ์ ๋ํ ๊ฐ๋
์ ๋ํด ์๊ณ ์์ผ๋ฉฐ ์ด๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
- ๋ ๊ฐ์ฒด๊ฐ ์๋ก๋ฅผ ์ฐธ์กฐํ๋ ์ํ ์ฐธ์กฐ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด @JsonManagedReference์ @JsonBackReference ๋ฑ์ ์ฌ์ฉํด ํด๊ฒฐ.
- HTTP method์ ์ฐจ์ด, RESTFul ์ค๊ณ์์น์ ์ดํดํ๊ณ ์ ์ ํ ๋ฉ์๋๋ฅผ ์ ํํ์ฌ API๋ฅผ ์ค๊ณํ ์ ์๋ค.
- GET: ๋ฐ์ดํฐ๋ฅผ ์กฐํ.
- POST: ๋ฐ์ดํฐ๋ฅผ ์์ฑ.
- PUT: ๋ฐ์ดํฐ๋ฅผ ์์ .
- DELETE: ๋ฐ์ดํฐ๋ฅผ ์ญ์ .
- ํ์
์ ์ํด ์ผ๊ด๋ ์ฝ๋ ์ปจ๋ฒค์
์ ํ์์ฑ์ ์ดํดํ๊ณ ์ ์ฉํ ์ ์์ผ๋ฉฐ Git์ ํ์ฉํ ์ฝ๋ ๋ฆฌ๋ทฐ ๋ฐ ๋ธ๋์น ์ ๋ต์ ์ฐธ์ฌํ ๊ฒฝํ์ด ์๋ค.
- ์ฝ๋์ ์ผ๊ด์ฑ์ ์ํด ๊ท์น์ ์ ํ๊ณ , Git์ ์ด์ฉํด ํ์ ๊ฐ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ํตํด ํ์ง์ ์ ์ง.
- JPA์์ ์ฆ์ ๋ก๋ฉ(Eager)๊ณผ ์ง์ฐ ๋ก๋ฉ(Lazy)์ ์ฐจ์ด๋ฅผ ๊ฐ๋จํ ์ค๋ช
ํ ์ ์๋ค.
- Eager: ๊ด๊ณ๋ ์ํฐํฐ๋ฅผ ์ฆ์ ๋ก๋.
- Lazy: ๊ด๊ณ๋ ์ํฐํฐ๋ฅผ ์ค์ ๋ก ํ์ํ ๋ ๋ก๋.
- JPA์ ์์์ฑ ์ปจํ
์คํธ(Persistence Context)๋ฅผ ์ดํดํ๊ณ ๋ณ๊ฒฝ ๊ฐ์ง(Dirty Checking)์ ์ ์ฉํ ์ ์๋ค.
- ์์์ฑ ์ปจํ ์คํธ๋ ์ํฐํฐ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, ๋ณ๊ฒฝ๋ ์ํฐํฐ๋ฅผ ์๋์ผ๋ก ๊ฐ์งํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์.
- Spring Data JPA์์ N+1 ๋ฌธ์ ๋ฅผ ์ดํดํ๊ณ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ Fetch ์ ๋ต์ ์ค์ ํ ์ ์๋ค.
- N+1 ๋ฌธ์ ๋ ๋ฐ์ดํฐ ์กฐํ ์ ๋ถํ์ํ ์ฟผ๋ฆฌ๊ฐ ๋ฐ์ํ๋ ๋ฌธ์ ๋ก, @Query, fetch = FetchType.LAZY, @EntityGraph ๋ฑ์ ์ฌ์ฉํ์ฌ ํด๊ฒฐ.
- Spring Security์์ ์ธ์ฆ(Authentication)๊ณผ ์ธ๊ฐ(Authorization)์ ์ฐจ์ด๋ฅผ ์ค๋ช
ํ ์ ์๋ค.
- ์ธ์ฆ(Authentication): ์ฌ์ฉ์์ ์ ์์ ํ์ธํ๋ ๊ณผ์ .
- ์ธ๊ฐ(Authorization): ์ฌ์ฉ์๊ฐ ์์ฒญํ ๋ฆฌ์์ค์ ๋ํ ์ ๊ทผ ๊ถํ์ ํ์ธํ๋ ๊ณผ์ .
- ๊ฐ์ฒด๋ฅผ ์ถ์ํ ํจ์ผ๋ก์จ ํ์ฅ์ฑ์ด ๋์์ง๋ ์ด์ ๋ฅผ ์๊ณ ์๋ค.
- ์ถ์ํ๋ฅผ ํตํด ๊ตฌํ์ ์ธ๋ถ์ฌํญ์ ์จ๊ธฐ๊ณ , ์ฝ๋ ๋ณ๊ฒฝ ์ ์ต์ํ์ ์ํฅ๋ง ๋ฏธ์น๊ฒ ๋์ด ํ์ฅ์ฑ๊ณผ ์ ์ฐ์ฑ์ด ๋์์ง.
- OCP(๊ฐ๋ฐฉ-ํ์์์น)์ ๋ํด ์ดํดํ๊ณ ์๋ค.
- ์์ค ์ฝ๋๋ ํ์ฅ์๋ ์ด๋ ค ์๊ณ , ์์ ์๋ ๋ซํ ์์ด์ผ ํ๋ค๋ ์์น์ผ๋ก, ๊ธฐ๋ฅ ์ถ๊ฐ ์ ๊ธฐ์กด ์ฝ๋๋ฅผ ์์ ํ์ง ์๊ณ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๋๋ก ํด์ผ ํ๋ค.
- DIP(์์กด์ญ์ ์์น) ์ ๋ํด ์ดํดํ๊ณ ์๋ค.
- ๊ณ ์์ค ๋ชจ๋์ด ์ ์์ค ๋ชจ๋์ ์์กดํ์ง ์๊ณ , ๋ ๋ชจ๋ ๋ชจ๋ ์ถ์ํ๋ ์ธํฐํ์ด์ค์ ์์กดํด์ผ ํ๋ค๋ ์์น.
- ๋๊ธฐ์ ๋น๋๊ธฐ ์์
์ ์ฐจ์ด๋ฅผ ์ค๋ช
ํ ์ ์๋ค.
- ๋๊ธฐ: ์์ ์ด ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ ํ ๋ค์ ์์ ์ ์งํ.
- ๋น๋๊ธฐ: ์์ ์ด ์๋ฃ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ , ๋ค๋ฅธ ์์ ์ ์งํ.
- ์๋น์ค ์ฟผ๋ฆฌ๋ฅผ ์คํ ์๋๊ฐ ๋์ค์ง ์์ ๊ฒฝ์ฐ ์ ์ ํ ์ธ๋ฑ์ค๋ฅผ ์ค์ ํ์ฌ ๊ฐ์ ํด๋ณผ ์ ์๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ์ ์๋๊ฐ ๋๋ฆด ๋, ์ ์ ํ ์ปฌ๋ผ์ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์๋ค.
- ๋จ์ ํ
์คํธ, ํตํฉ ํ
์คํธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
- ๋จ์ ํ ์คํธ: ๊ฐ๋ณ์ ์ธ ๊ธฐ๋ฅ์ด๋ ๋ฉ์๋์ ๋ํด ํ ์คํธ.
- ํตํฉ ํ ์คํธ: ์ฌ๋ฌ ์ปดํฌ๋ํธ๊ฐ ๊ฒฐํฉ๋ ํ์ ๋์์ ํ ์คํธ.
- spring-validation์ ์ด์ฉํด์ ์์ฒญ์ ๋ํ ์ ํจ์ฑ์ ๊ฒ์ฆํ๊ณ ๊ทธ ๊ณผ์ ์์ ๋ฐ์ํ๋ MethodNotValidArgumentException์ ์ฒ๋ฆฌํ ์ ์๋ค.
- @Valid ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํด ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ฆํ๊ณ , ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ์์ธ ์ฒ๋ฆฌ.
- ์ฝ๋์ ์ค์ ๋ถ๋ฆฌ์ ํ์์ฑ์ ๋ํด ์ดํดํ๊ณ , .env, git submodule, spring cloud config, aws secret manager ๋ฑ์ ์ด์ฉํด์ ๋ถ๋ฆฌํ ์ ์๋ค.
- ์ค์ ํ์ผ๊ณผ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ์ฌ ๊ด๋ฆฌํ๋ฉด, ์ฝ๋ ๋ณ๊ฒฝ ์์ด ํ๊ฒฝ ์ค์ ์ ์ฝ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค.
- Proxy ์ ๋ํ ๊ฐ๋
์ ๋ํด ์๊ณ ์๋ค.
- Proxy๋ ์ค์ ๊ฐ์ฒด์ ๋ํ ์ ๊ทผ์ ์ ์ดํ๋ ์ค๊ฐ์ ์ญํ ์ ํ๋ ํจํด์ด๋ค.
- ๋์์ฑ ๋ฌธ์ ํด๊ฒฐ์ ์ํด ์ ์ ํ lock ์ ์ ํํ์ฌ ์ ์ฉํ ์ ์๋ค.
- ๋์์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด synchronized, ReentrantLock, ReadWriteLock ๋ฑ์ Lock์ ์ฌ์ฉํ ์ ์๋ค.
- Transaction ์ ํ, ๊ฒฉ๋ฆฌ์์ค์ ์ค๋ช
ํ ์ ์๋ค.
- ์ ํ: ํธ๋์ญ์ ์ด ํธ์ถ๋ ๋ ๊ธฐ์กด ํธ๋์ญ์ ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง ๊ฒฐ์ .
- ๊ฒฉ๋ฆฌ์์ค: ์ฌ๋ฌ ํธ๋์ญ์ ์ด ๋์์ ์คํ๋ ๋์ ๊ฒฉ๋ฆฌ ์ ๋๋ฅผ ์ค์ .
- logback์ ์ด์ฉํ์ฌ Info์ warn ์ด์์ ๋ก๊ทธ๋ฅผ ๋ถ๋ฆฌํ๊ณ ์ ์ ํ ๋ก๊ทธ ์์ง ์ ๋ต์ ์๋ฆฝํ ์ ์๋ค.
- logback์ ์ฌ์ฉํ์ฌ ๋ก๊ทธ ๋ ๋ฒจ๋ณ๋ก ๋ค๋ฅธ ๋ก๊น ์ ๋ต์ ์ค์ ํ๊ณ , ํ์์ ๋ฐ๋ผ ๋ก๊ทธ๋ฅผ ์์ง.
- ์ ์ ํ ์ด๋
ธํ
์ด์
์ ์์ฑํ์ฌ AOP ๊ตฌ์ฑ์ ํ ์ ์๋ค.
- AOP๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ๋ฉ์๋ ์คํ ์ /ํ์ ๊ณตํต ๋ก์ง์ ์คํํ๋๋ก ์ด๋ ธํ ์ด์ ์ ์ค์ ํ ์ ์๋ค.
๋ฌธ์ ๊ฐ ์์ผ๋ฉด ๋๊ธ ๋จ๊ฒจ์ฃผ์ธ์ !
ํผ๋๋ฐฑ์ ์ธ์ ๋ ํ์์ ๋๋ค <3
'๐ฉ๐ปโ๐ป Dev' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DB] ๋ ผ๋ฆฌ ์ญ์ (Soft Delete)์ ๋ฌผ๋ฆฌ ์ญ์ (Hard Delete) (0) | 2025.03.18 |
---|---|
[ํ์ ] 1์ฐจ ํ๋ก์ ํธ ํ์ ํ๊ฐ ๋ฐ ํ๊ณ (4) | 2025.03.11 |
[Javascript] var, let, const ์ฐจ์ด์ ๊ณผ ํธ์ด์คํ (0) | 2025.02.27 |
[Java] ์ ์ํ ๋นํธ ์ฐ์ฐ (0) | 2025.02.24 |
[JUnit] JUnit์ผ๋ก ์ํ ์ญ์ ๊ธฐ๋ฅ ํ ์คํธ ์ฝ๋ ์์ฑํ๊ธฐ (0) | 2025.02.23 |