์ค๋ ์ผ์ ๋ด์ผ๋ก? ์ผ๋ ๋ก์ ํจ๊ป๋ฉด ๋ฐ๋ก๋ฐ๋ก!
์ธ์ด - JDK 17
ํ๊ฒฝ - SpringBoot 3.2.1
๋ฐฐํฌ ํ๊ฒฝ - AWS S3 / EC2 / ELASTICACHE
DB - MySQL 8.1, Redis
| Name | Role |
|---|---|
| ์กฐ์ํธ | Catalog API |
| ์์ค์ฐ | User API, Auth API |
| ๋ฐ์์ | Board API |
| ๊น์งํ | Card API |
| ๋ฌธ์ ํ | Card Detail API |
| Tag Name | Description |
|---|---|
| feat | ๊ธฐ๋ฅ ์ถ๊ฐ |
| fix | ์ด์ ํฝ์ค |
| test | ํ ์คํธ ์ฝ๋ ์ถ๊ฐ |
| refactor | ๋ฆฌํฉํ ๋ง |
| !HOTFIX | ๋ฉ์ธ ํซ ํฝ์ค |
| Name | Url | Method | Auth |
|---|---|---|---|
| ํ์๊ฐ์ | /api/members/signup | POST | None |
| ์ด๋ฉ์ผ ์ธ์ฆ | /api/members/email | POST | None |
| ๋ก๊ทธ์ธ | /api/members/login | POST | None |
| ๋ก๊ทธ์์ | /api/members/logout | POST | Access Token |
| ๋ด ์ ๋ณด ๋ณด๊ธฐ | /api/members/{memberId} | GET | Access Token |
| ํ์ ์ ๋ณด ์์ | /api/members/{memberId} | PUT | Access Token |
| ํ์ ํํด | /api/members/{memberId} | DELETE | Access Token |
| Name | Url | Method | Auth |
|---|---|---|---|
| ๋ณด๋์์ฑ | /api/boards | Post | Access Token |
| ๋ณด๋์์ | /api/boards/{boardId} | Put | Access Token |
| ๋ณด๋์ญ์ | /api/boards/{boardId} | Delete | Access Token |
| ๋ณด๋์ด๋ | /api/boards/{boardId} | Post | Access Token |
| ๋ณด๋์กฐํ | /api/boards/{boardId} | Get | Access Token |
| ๋ณด๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ด๋ฏธ์ง ๋ณ๊ฒฝ | /api/boards/{boardId} | Put | Access Token |
| Name | Url | Method | Auth |
|---|---|---|---|
| ์นดํ๋ก๊ทธ ์์ฑ | /api/boards/{boardId}/catalog | Post | Access Token |
| ์นดํ๋ก๊ทธ ์ด๋ฆ ์์ | /api/catalog/{catalogId} | Patch | Access Token |
| ์นดํ๋ก๊ทธ ๋ณด๊ด | /api/catalog/{catalogId}/keep | Patch | Access Token |
| ์นดํ๋ก๊ทธ ์ญ์ | /api/catalog/{catalogId}/keep | Delete | Access Token |
| ์นดํ๋ก๊ทธ ์์ ์ด๋ | /api/catalog/{catalogId}/pos | Patch | Access Token |
| Name | Url | Method | Auth |
|---|---|---|---|
| ์นด๋์์ฑ | /api/catalogs/{catalogId}/cards | Post | Access Token |
| ์นด๋ ์์ | /api/cards/{cardId} | Patch | Access Token |
| ์นด๋ ์ญ์ | /api/cards/{cardId} | Delete | Access Token |
| ์นด๋ ๋จ๊ฑด ์กฐํ | /api/cards/{cardId} | Get | Access Token |
| ์นด๋ ๋ชฉ๋ก ์กฐํ | /api/catalogs/{catalogId}/cards | Get | Access Token |
| ์นด๋ ์์ ์ ์ถ๊ฐ | /api/cards/{cardId}/collaborators | Post | Access Token |
| ์นด๋ ์์ ์ ์ญ์ | /api/cards/{cardId}/collaborators/{collaboratorId} | Delete | Access Token |
| ์นด๋ ์ด๋ (์นดํ๋ก๊ทธ ๋ด ์์น ์ด๋) | /api/cards/{cardId}/pos | Patch | Access Token |
| ์นด๋ ์ด๋ (์นดํ๋ก๊ทธ ์ด๋) | /api/cards/{cardId}/move | Patch | Access Token |
| Name | Url | Method | Auth |
|---|---|---|---|
| ๋๊ธ ๋ฌ๊ธฐ | /api/cards/{cardId}/comment | Post | Access Token |
| ๋๊ธ ์์ | /api/comment/{commentId} | Patch | Access Token |
| ๋๊ธ ์ญ์ | /api/comment/{commentId} | Delete | Access Token |
| ๋ ์ง ์ง์ | /api/card/{cardId}/due | Patch | Access Token |
๐ฆโย src
ย ย ย ๐ฆโย main
ย ย ย โย ย ๐ฆโย java
ย ย ย โย ย โย ย ๐ฆโย com
ย ย ย โย ย โย ย ย ย ย ๐ฆโย sparta
ย ย ย โย ย โย ย ย ย ย ย ย ย ๐ฆโย jamrello
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย ๐ฆโย domain
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย ๐ฆโย board
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย โย ย ๐ฆโย controller
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย โย ย ๐ฆโย dto
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย โย ย โย ย ๐ฆโย request
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย โย ย โย ย ๐ฆโย response
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย โย ย ๐ฆโย entity
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย โย ย ๐ฆโย repository
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย โย ย ๐ฆโย service
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย ๐ฆโย card
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย โย ย ๐ฆโย Service
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย โย ย ๐ฆโย controller
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย โย ย ๐ฆโย dto
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย โย ย โย ย ๐ฆโย request
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย โย ย โย ย ๐ฆโย response
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย โย ย ๐ฆโย repository
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย โย ย ย ย ย ๐ฆโย entity
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ๐ฆโย cardCollaborators
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย โย ย ๐ฆโย dto
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย โย ย ๐ฆโย repository
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย โย ย ย ย ย ๐ฆโย entity
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย ๐ฆโย catalog
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย โย ย ๐ฆโย controller
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย โย ย ๐ฆโย dto
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย โย ย ๐ฆโย repository
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย โย ย โย ย ๐ฆโย entity
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย โย ย ๐ฆโย service
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย ๐ฆโย comment
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย โย ย ๐ฆโย controller
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย โย ย ๐ฆโย dto
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย โย ย ๐ฆโย repository
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย โย ย โย ย ๐ฆโย entity
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย โย ย ๐ฆโย service
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย ๐ฆโย member
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย โย ย ๐ฆโย controller
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย โย ย ๐ฆโย dto
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย โย ย ๐ฆโย repository
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย โย ย โย ย ๐ฆโย entity
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย โย ย ๐ฆโย service
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย ๐ฆโย memberboard
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย ย ย ย ๐ฆโย entity
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย โย ย ย ย ย ๐ฆโย repository
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย ๐ฆโย global
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐ฆโย annotation
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐ฆโย config
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐ฆโย constant
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐ฆโย dto
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐ฆโย exception
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐ฆโย security
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย ย ย ย โย ย ๐ฆโย jwt
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐ฆโย time
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐ฆโย utils
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐ฆโย s3
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐ฆโย config
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐ฆโย controller
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐ฆโย dto
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย โย ย ๐ฆโย response
ย ย ย โย ย โย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐ฆโย service
ย ย ย โย ย ๐ฆโย resources
ย ย ย ๐ฆโย test
ย ย ย ย ย ย ๐ฆโย java
ย ย ย ย ย ย ย ย ย ๐ฆโย com
ย ย ย ย ย ย ย ย ย ย ย ย ๐ฆโย sparta
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐ฆโย jamrello
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐ฆโย domain
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐ฆโย board
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย โย ย ๐ฆโย service
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐ฆโย card
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย โย ย ๐ฆโย Service
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐ฆโย catalog
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย โย ย ๐ฆโย repository
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย โย ย โย ย ๐ฆโย entity
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย โย ย ๐ฆโย service
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐ฆโย comment
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย โย ย ๐ฆโย controller
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย โย ย ๐ฆโย repository
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย โย ย โย ย ๐ฆโย entity
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย โย ย ๐ฆโย service
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐ฆโย member
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐ฆโย controller- ์์ ์ฎ๊ธฐ๊ธฐ ๋ก์ง
- ์ฝ์ ์ ๋ ฌ
- Between ๋ฒํฌ ์ฐ์ฐ
- ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ + ๋น๋ ํจํด ์ฌ์ฉ
- ์๋ฏธ ์๋ ์ด๋ฆ์ผ๋ก ๋ฉ์๋ ๋ช ์ ์ง์ ์ ์๋ค๋ ์ฅ์
- ๋น๋ ํจํด์ ์ธ ๋, ์์ ์๋ ์๋ ํ๋ ๊ฐ์ ํ ๊ณณ์์ ๊ด๋ฆฌ ํ ์ ์๋ค๋ ์ฅ์ ์ผ๋ก ์ ํจํด ์ฑํ
-
์ฌ์ค ์์ง
ํตํฉ ํ ์คํธ ํ๊ฒฝ ActiveProfiles ์ ํ ์ ํด์คฌ๋๋ฐ๋, ํ๊ฒฝ ๋ณ์๋ฅผ ๋ชป ์ฝ์ด์ ์คํ์ด ์๋๋ ์ค๋ฅ ๋ฐ์
ํ๊ฒฝ ๋ณ์ ์ค์ ์ ์ ๋ผ์๋ค
java.lang.RuntimeException: Driver org.h2.Driver claims to not accept jdbcUrl, ${TEST_DB_URL} at com.zaxxer.hikari.util.DriverDataSource.<init>(DriverDataSource.java:110) ~[HikariCP-5.0.1.jar:na] at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) ~[HikariCP-5.0.1.jar:na] at com.zaxxer.hikari.pool.PoolBase.<init>(PoolBase.java:112) ~[HikariCP-5.0.1.jar:na] at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:93) ~[HikariCP-5.0.1.jar:na]
- ์์ธ ์ถ๋ก
- ํ
์คํธ ํ๊ฒฝ์์ ํ๊ฒฝ ๋ณ์ ๋ค์ด๊ฐ๋ ํ์ด๋ฐ์ด ๋ค๋ฅธ ๊ฑฐ๋ผ๊ณ ์๊ฐ ๋๋ค.
- ํตํฉ ํ๊ฒฝ ํ ์คํธ๊ฐ ์๋, ๊ฐ๋ฐ ํ๊ฒฝ(application run)์์๋ ์ ๋์๊ฐ๊ธฐ ๋๋ฌธ
- ํ
์คํธ ํ๊ฒฝ์์ ํ๊ฒฝ ๋ณ์ ๋ค์ด๊ฐ๋ ํ์ด๋ฐ์ด ๋ค๋ฅธ ๊ฑฐ๋ผ๊ณ ์๊ฐ ๋๋ค.
- @TestPropertySource ์ด๋ ธํ ์ด์ ์ฌ์ฉ
- Configuration ํ์ด๋ณด๊ธฐ
- @TestPropertySource classPath ๋ถ์ฌ์ ์ฌ์ฉํด๋ดค์ง๋ง ๋ฏธํด๊ฒฐ
- Configuration ํ์ด๋ณด๋ค๊ฐ Template ๋ง๋ค ์ ์๋ ๊ฑธ ๋ฐ๊ฒฌ
ํด๊ฒฐ!
- car์ catalog์ @OneToMany ์ฐ๊ด๊ด๊ณ ๋งคํ์์ card save ํ, catalog์ cardlist์ card๊ฐ ์๋ ์ ์ฅ๋์ง ์์ cardlist๊ฐ empty ์ํ์ธ ๊ฒ์ ๋ฐ๊ฒฌํ์์ต๋๋ค.
- ์ผ๋ฐ์ ์ธ @OneToMany ๊ด๊ณ์์๋ ์์ ์ํฐํฐ๋ฅผ ์ ์ฅํ๋ฉด ๋ถ๋ชจ ์ํฐํฐ์ ๋ํ ๋ณ๊ฒฝ์ด ๋ฐ์ํ ๋ ์๋์ผ๋ก ์ ๋ฐ์ดํธ ๋ฉ๋๋ค. ํนํ cascadeType.all์ ์ฌ์ฉํ๋ฉด ๋ชจ๋ ๋ณ๊ฒฝ์ด ์ ํ๋ฉ๋๋ค.
- ๊ทธ๋ฌ๋ fetchType์ด Lazy๋ก ์ค์ ๋๋ฉด ์ฐ๊ด ์ํฐํฐ๋ค์ด ์ฆ์ ๋ก๋๋์ง ์์ cardList๊ฐ ์ฆ์ ์ ๋ฐ์ดํธ ๋์ง ์์ ์ ์์ผ๋ฉฐ ์ด์ธ์๋ JPA ๊ตฌํ ๋ฐฉ์์ ๋ฐ๋ผ ์๋ ์ ๋ฐ์ดํธ๊ฐ ์คํ๋์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ ์ ์์์ ์๊ฒ๋์์ต๋๋ค.
@OneToMany(mappedBy = "catalog", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Card> cardList = new ArrayList<>();
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "catalog_id")
private Catalog catalog;- ๋ฐ๋ผ์ card๊ฐ save๋ ์ดํ, cardlist์ add card๋ฅผ ์ง์ ์คํํ๋๋ก ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํ์์ต๋๋ค.
cardRepository.save(card);
catalog.getCardList().add(card);- ์ฌ์ค ์์ง
MemberService๋จ ํตํฉํ
์คํธ์์ WebConfig์ ์์ฑ ํ๋ผ๋ฏธํฐ์ธ jwtUtil์ Bean์ด ๋ฑ๋ก์ด ๋์ง์์ ํ
์คํธ๊ฐ ์งํ๋์ง ์๋ ๋ฌธ์ ๋ฐ์ํ์ต๋๋ค.
- ์์ธ ์ถ๋ก
ํด๋น ์ค๋ฅ๋ฅผ ๊ฒ์ํ ๊ฒฐ๊ณผ ํด๋น ์ค๋ฅ๋ Properties๋ฑ์ ์ค์ ํ์ผ์ ์ฒ ์์ค๋ฅ, ๋๋ @Configuration, @Service ๋ฑ Bean์ปจํ
์ด๋๋ก ํด๋น ํด๋์ค๊ฐ ๋ฑ๋ก์ด ์๋์๊ฑฐ๋, ํด๋น ํด๋์ค์ ์์ฑ ํ๋ผ๋ฏธํฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ๋ฑ ์ฌ๋ฌ์ํฉ์์ ๋ฐ์ํ ์ ์๋ค๊ณ ํฉ๋๋ค.
jwtUtil์@Configuration์๋ ธํ์ด์ ์ด ์ฒ ์์ค๋ฅ์์ด ์ ๋๋ก ๊ธฐ์ ๋์๋์ง ํ์ธํ ๊ฒฐ๊ณผ ์ด์์ด ์์์ต๋๋ค.Properties์jwtUtil์ ์ฐ๊ฒฐ์ด ์ ๋๋ก ์ด๋ค์ ธ์๋์ง ํ์ธ๊ฒฐ๊ณผ ์ด์์์ด ๊ฐ์ ์ ๋ถ๋ฌ์ค๋๊ฒ์ ํ์ธ์ด ๋์์ต๋๋ค.jwtUtil์ ์ฝ๋๋ฅผ ์ ๋ถ ๋ฉด๋ฐํ ํ์ธํด๋ณธ๊ฒฐ๊ณผ@PostConstruct์๋ ธํ ์ด์ ์ด ์ฌ์ฉ๋key init๋ฉ์๋์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํจ์ ํ์ธํ์์ต๋๋ค.
ํด๋น ๋ฌธ์ ๋ฅผ ํ์ธ๊ฒฐ๊ณผ ์ฌ์ฉ๋ jwtSecretKeY์ ๊ฒฝ์ฐ Base64๋ก ์ธ์ฝ๋ฉํ์ฌ ์ฌ์ฉ๋๋๋ฐ ์ธ์ฝ๋ฉํ ๋ฌธ์์ด์ ์
๋ ฅํ ๋ "/"์ฒ ์๊ฐ ์ค๊ธฐ์
๋๋ฉด์ ํด๋น ๋ฌธ์๋ฅผ ๋์ฝ๋ฉํ ์์์ด ์ค๋ฅ๊ฐ ๋ฐ์ํ์๋ค๋ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
๋ํ ๋ฌธ์ ํด๊ฒฐ๊ณผ์ ์์ ๊ฐ์ ์ํฌ๋ฆฟํค๋ฅผ ์ฌ์ฉํ ์ค์ Applicationํ๊ฒฝ์์๋ ์ค๋ฅ๊ฐ ์์๋๋ฐ Applicationํ๊ฒฝ๊ณผ ํ
์คํธํ๊ฒฝ ๋๋ค ํ๊ฒฝ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ์ํฌ๋ฆฟํค๋ฅผ ์
๋ ฅํ์ฌ ๋ณด์์ ์ ์งํ๊ณ ์์๋๋ฐ ํ
์คํธํ๊ฒฝ์ผ๋ก ํ๊ฒฝ๋ณ์๋ฅผ ์ผ์ผํ ๋ณต์ฌ๋ถ์ฌ๋ฃ๊ธฐํ๋ ๊ณผ์ ์์ "/"๋ฌธ์๊ฐ ๊ฐ์ด ๊ธฐ์
๋๊ฒ์ผ๋ก ํ์ธ๋์์ต๋๋ค.
ํด๋น ๋ฌธ์ ๋ฅผ ๋ง๊ธฐ์ํด ํ๊ฒฝ๋ณ์ ํ
ํ๋ฆฟ์ ํ์ฉํ์ฌ ํ๊ฒฝ๋ณ์ ์ค๊ธฐ์
๋ฌธ์ ๋ฅผ ๋ฏธ์ฐ์ ๋ฐฉ์งํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์์ต๋๋ค.
- ์ํ์ฐธ์กฐ ์ค๋ฅ(spring circular reference)
- ๋น์ฆ๋์ค ๋ก์ง์ ์ํํ์ฌ Database์ ๋ฐ์์ด ๋์์ง๋ง controller์์ ์ํ ์ฐธ์กฐ ์ค๋ฅ๋ก response๋ฅผ ๋ฑ์ง ๋ชปํ๊ณ ์์
- apiResponse๋ฅผ Dto๋ก ๋ฐํํด์ผํจ โ ์ด๋ฏธ ํ๊ณ ์์
- @Lazy ์ด๋ ธํ ์ด์ ์ ํตํด์ ์์๋ก ํด๊ฒฐ โ ๊ถ์ฅํ์ง ์๋ ๋ฐฉ๋ฒ
- ๋ฐํํ๋ responseDto์ member๊ฐ์ฒด๋ฅผ ๋ด๊ณ ์์์
- ๋ฐํ๊ฐ์ memberId๋ก ๋ณ๊ฒฝ




