์ด๋ ๊ฒ ์ด๋ฃจ์ด์ง ERD ๋ชจ๋ธ์ด ์๋ค. (์์)
์กฐ๊ฑด์ ๋ง์ถฐ ๋ถ๋ฌ์ค๊ณ ์ ํ๋ Data๋ ์ธ ํ ์ด๋ธ์ ์ ๋ณด๋ฅผ ๋ชจ๋ ํ์๋ก ํ๋ค.
์ด๋ Fetch join์ ๊ณ ๋ คํด๋ณผ ์ ์๋ค.
Permission ์ ์ฅ์์ user์ document๋ฅผ ๋๋ฒ ๋ค fetch join ํ ์ ์์ง๋ง, ์ด๋ฅ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ฑ๋ฅ ์ ์์ฒญ๋ ๋ฌธ์ ๊ฐ ์๋ค.
๋ฐ์ดํฐ๊ฐ ๋ง์ ๊ฒฝ์ฐ, ์ฐ๊ด๋ ์ํฐํฐ์ ์๋ฅผ ์ ํํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ๋๋ ์ ๋ฐ์์ํค๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ผ ๊ฒ์ด๋ค.
ํด๋น ์ํฐํฐ๋ค์ ๋ชจ๋ FetchType.LAZY ๋ก ์ค์ ๋์ด ์๋ค.
๊ธฐ์กด ์ฟผ๋ฆฌ :
val documents = documentQueryService.findDocumentsByIdFetchJoinPermissions(projectId)
return Response.UserPermission(
documents.permissions.asSequence()
.filter { it.status != STATUS.DELETED }
.map { Response.UserPermission(it.user, it.permission) }
.toList()
)
- document์ permissions ๋ฅผ fetch joinํ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ง๊ณ it.user๋ฅผ ํตํด ์ํ์ค๋ฅผ ๋๋ฆฐ๋ค.
- ์ด๋ permission์ ๊ฐ์๋งํผ user๋ฅผ select ํ๋ ์ฟผ๋ฆฌ๊ฐ ๊ณ์์ ์ผ๋ก ๋ฐ์ํ๋ค.
- DB Connection ๋ญ๋น ๋ฐ ๋ถํ์ํ Query ์ ๋ฐ์
๊ฐ์ ์ฟผ๋ฆฌ :
val documents = documentQueryService.findDocumentsByIdFetchJoinPermissions(projectId)
val permissions = permissionQueryService.findPermissionsWithFetchJoinUsers(project.permissions)
return Response.UserPermission(
documents.permissions.asSequence()
.filter { it.status != STATUS.DELETED }
.map { Response.UserPermission(it.user, it.permission) }
.toList()
)
- user ๋ฅผ ๋ถ๋ฌ์ค๋ ์ฟผ๋ฆฌ๋ฅผ ์์ ๊ธฐ ์ํด user์ permission์ fetchjoin ํ๋ ์ฟผ๋ฆฌ๋ฅผ ์ถ๊ฐ๋ก ๋ฐ์์์ผฐ๋ค.
- ์ด๋ ๊ฒ ํ๋ฉด user ๋ค์ ๋ฐ๋ก selectํ๋ ์ฟผ๋ฆฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
- ์ด๋ฐ์์ผ๋ก one to many ๊ด๊ณ์ fetch join์ ๋์์ ํ๋ ๊ฒ์ด ์๋ ๋๋ ์ ๋ฐ์์ํค๋ ๊ฒ์ผ๋ก ์ฟผ๋ฆฌ ๊ฐ์๋ฅผ ์ค์ผ ์ ์๋ค.
๊ณ ์ฐฐ
๋ฐฑ์๋์ API ์ฑ๋ฅ์ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์ ์ ๋ต์ด ์๋ค.
์ํฉ์ ๋ง๊ฒ ํํ์ ๋ด์ผ ํ๋ ๋ถ๋ถ๋ ๋น์ฐํ ๊ณ ๋ คํด์ผํ๋ค.
๋ณดํต ๋ฐฑ์๋์์ ์ฑ๋ฅ์ ๊ฐ์ฅ ๋ง์ด ๊ฐ์ ์ํฌ ์ ์๋ ๋ถ๋ถ์ DB์์ ์ปค๋ฅ์ ์ด๋ฏ๋ก, JPA๋ฅผ ์ด์ฉํ์ฌ SQL์ ์ ๋ฐ์์ํค๋ฉด ๋๋ถ๋ถ์ ์ฑ๋ฅ ๋ฌธ์ ๋ ํด๊ฒฐํ ์ ์์ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
์ค์ ๋ก ํ์ฐํ๊ฒ ์ฐจ์ด๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ๊ทธ ์ด์ ์ ํ์คํ ์ ์ ์์ ๊ฒ์ด๋ค.
(user data๊ฐ 5๊ฐ ๋ฐ์ ์๋๋ฐ๋ ๋๋ฐฐ ์ด์ ์ฐจ์ด๋ ๊ฒ์, ๋ฐ์ดํฐ๊ฐ ๋ง์์ง ๊ฒฝ์ฐ, ํ์คํ๊ฒ ์ฑ๋ฅ ๊ฐ์ ์ด ์ด๋ฃจ์ด์ง ๊ฒ์ ํ์ธํ ์ ์๋ค.)
์ด๋ฌํ ๋ฐฉ๋ฒ์ ํตํด ๋ ํ์คํ๊ฒ ๋ฐฑ์๋์ ์ฑ๋ฅ์ ๊ณ ๋ฏผ๊ณผ ํด๊ฒฐ์ ์ ํด๋๊ฐ๋ฆฌ๋ผ ๋ค์งํด๋ณธ๋ค.
'๐ Spring Framework > Spring ๊ฐ๋ ์ ๋ฆฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Bean ๋ฑ๋ก์ ๋ํ ์ฌ๊ณ (1) | 2024.10.12 |
---|---|
Spring boot multi datasource ๋ฑ๋ก ์ ์ฃผ์ ์ฌํญ (0) | 2024.09.18 |
[Reactive Programming] ๋น๋๊ธฐ-๋ ผ๋ธ๋กํน ํ๋ก๊ทธ๋๋ฐ (2) | 2023.02.11 |
[@DataJpaTest] h2 ์ธ๋ฉ๋ชจ๋ฆฌ db๋ฅผ ์ด์ฉํ ํ ์คํธ ์ค์ ๋ฐฉ๋ฒ (0) | 2022.12.21 |
WebFlux๋ ๋ฌด์์ด๊ณ , ์ ๋์๊ณ , ์ธ์ ์ฐ์ด๋๊ฐ? (0) | 2022.08.31 |