๐พORM:JPA
ToOne ๊ด๊ณ๋ ๋ชจ๋ fetch joinํ์ฌ ์ฑ๋ฅ ์ต์ ํ ( ํ์ด์ง ์ฟผ๋ฆฌ์ ์ํฅ์ ๋ฏธ์น์ง ์์์ ) ์ปฌ๋ ์
์ fetch join ํ์ง ์๊ณ ์ง์ฐ๋ก๋ฉ์ผ๋ก ์กฐํ ์ปฌ๋ ์
์ ์ง์ฐ๋ก๋ฉ ์ฑ๋ฅ ์ต์ ํ + ํ์ด์ง ์ฒ๋ฆฌ๋ฅผ ์ํด hibernate.default_batch_fetch_size ํน์ @BatchSize๋ฅผ ์ฌ์ฉ hibetnate.default_batch_fetch_size, @BatchSize ์ปฌ๋ ์
์ด๋, ํ๋ก์ ๊ฐ์ฒด๋ฅผ ํ๊บผ๋ฒ์ ์ค์ ํ size๋งํผ IN ์ฟผ๋ฆฌ๋ก ์กฐํํ๋ค.
๐พORM:JPA
์ปฌ๋ ์
(์ผ๋๋ค) ์์ fetch join์ 1๊ฐ๋ง ์ฌ์ฉํด์ผ ํ๋ค! ๋ฐ์ดํฐ๊ฐ ๋ถ์ ํํ๊ฒ ์กฐํ๋ ์ ์๊ธฐ ๋๋ฌธ fetch join์ ์ฌ๋ฌ๊ฐ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ - Order ํด๋์ค ๋ด๋ถ์ ์ผ๋๋ค ๊ด๊ณ์ ๋ํ ํ๋๊ฐ 2๊ฐ์ธ ๊ฒฝ์ฐ - Order ํด๋์ค ๋ด๋ถ์ ์ผ๋๋ค ๊ด๊ณ์ ๋ํ ํ๋๊ฐ 1๊ฐ๊ณ , ๊ทธ ํ๋์ ๊ฐ์ฒด ๋ด๋ถ์ ์ผ๋๋ค ๊ด๊ณ์ ์๋ ํ๋๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ ์ปฌ๋ ์
(์ผ๋๋ค) fetch join์ ์ฌ์ฉํ๋ฉด ํ์ด์ง์ด ๋ถ๊ฐ๋ฅํ๋ค Hibernate๊ฐ ๊ฒฝ๊ณ ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ๋ฉด์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ db์์ ์ฝ์ด์จ ๋ค, ๋ฉ๋ชจ๋ฆฌ(=์ดํ๋ฆฌ์ผ์ด์
๋จ)์์ ํ์ด์ง์ ์ฒ๋ฆฌํ๊ฒ ๋๋ค.(out of memory๊ฐ ๋ฐ์ํ ์ ์์) distinct๋ก ์ค๋ณต๋ฐ์ดํฐ ์ ๊ฑฐ ์ปฌ๋ ์
(์ผ๋๋ค) fetch join์ ์ค๋ณต ๋ฐ์ดํฐ๊ฐ ๋ฐ์ํ๋๋ฐ, distinct ๋ช
๋ น์ผ๋ก..
๐จ๐ปํ๋ก์ ํธ:Project
Take A Bus (TAB) ์ผ์ฑ์ฒญ๋
SW์์นด๋ฐ๋ฏธ(SSAFY) ๊ฐ๋ฐ๊ธฐ๊ฐ: 2023.07.04 ~ 2023.8.18 ๋ฐฐํฌ ์ฃผ์ ํ๋ก ํธ ์๋ฒ : https://i9d111.p.ssafy.io ๋ฐฑ์๋ ์๋ฒ : https://i9d111.p.ssafy.io/tab ์ค์๊ฐ ํค์ค์คํฌ : https://i9d111.p.ssafy.io/kiosk/auth ๊ฐ๋ฐํ ์๊ฐ ์ ์งํ ์ฑ์ฐ์ ์ก๋ฏผ์ฒ @wlgns1718 @abcd9351 @thdalscjf05 BackEnd BackEnd BackEnd ์ ์ ํ ์ด์ ํ @tlswpgud22 @wjdgns0631 FrontEnd FrontEnd ํ๋ก์ ํธ ์๊ฐ TAB์ ์น์ฐจ๋ฒจ ๊ธฐ๋ฅ์ด ์๋ ๋ฒ์ค์ ๋ฅ์ฅ ํค์ค์คํฌ์, ๋ค์ํ ์น ์๋น์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ํ์น๊ฐ์ ์น์ฐจ๋ฒจ ๋ฒํผ์ ๋๋ฌ ํ์น์์ฌ๋ฅผ ํํ..
โญDocker
docker run docker์ ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก, ์ปจํ
์ด๋๋ฅผ ์์ฑํ๊ณ ์ ์ปจํ
์ด๋๊ฐ ์์๋จ docker run node 'node' ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ปจํ
์ด๋๋ฅผ ๋ง๋ค์ด ์คํํ๋ค. ( ์ด๋ฏธ์ง๊ฐ ๋ก์ปฌ์ ์์ผ๋ฉด DockerHub์์ ์ฐพ์ผ๋ ค ์๋) ์ปจํ
์ด๋๋ ์ด๋ฏธ์ง์ code์ environment๋ฅผ ๋ณต์ฌํ์ง ์์ ์ปจํ
์ด๋๋ ์ด๋ฏธ์ง์ ์ ์ฅ๋ ํ๊ฒฝ์ ์ฌ์ฉํ๋ค. ๊ทธ๋ฐ ๋ค์ ๊ทธ ์์ ๋ถ๊ฐ์ ์ธ ๋ ์ด์ด(๋ฆฌ์์ค, ๋ฉ๋ชจ๋ฆฌ)๋ฅผ ์ถ๊ฐํจ. docker start (์ปจํ
์ด๋ ID ๋๋ ์ด๋ฆ) ๊ธฐ์กด์ ์กด์ฌํ๋ ์ปจํ
์ด๋๋ฅผ ๋ค์ ์คํ ์คํํ๋ฉด docker run๊ณผ ๊ฐ์ด ํฐ๋ฏธ๋์ ์ฐจ๋จํ์ง๋ ์์ง๋ง ์คํ ์ค(๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์คํ ์ค) docker run docker start default๊ฐ attached ๋ชจ๋(ํฌ์ด๊ทธ๋ผ์ด๋์์ ์คํ) d..
๐พORM:JPA
์คํ๋ง ๋ถํธ๋ Jackson ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋๋ฐ ์ด๋ฅผ ํตํด json ๋ฐ์ดํฐ๋ค์ ์ง๋ ฌํ / ์ญ์ง๋ ฌํ ์์
์ ์งํํ๋ค. ์ด๋ฌํ ์ง๋ ฌํ๋ฅผ ์ํด getter๋ฅผ ์์ฑํด์ค์ผ ํ๋ค
๐พORM:JPA
์ฟผ๋ฆฌ ๋ฐฉ์ ์ ํ ์์ 1. ์ฐ์ ์ํฐํฐ๋ฅผ DTO๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ์ ์ ํ /** * V2. ์ํฐํฐ๋ฅผ ์กฐํํด์ DTO๋ก ๋ณํ(fetch join ์ฌ์ฉX) * - ๋จ์ : ์ง์ฐ๋ก๋ฉ์ผ๋ก ์ฟผ๋ฆฌ N๋ฒ ํธ์ถ */ @GetMapping("/api/v2/simple-orders") public List ordersV2() { List orders = orderRepository.findAll(); List result = orders.stream() .map(o -> new SimpleOrderDto(o)) .collect(toList()); return result; } 2. ํ์์ fetch join์ผ๋ก ์ฑ๋ฅ ์ต์ ํ /** * V3. ์ํฐํฐ๋ฅผ ์กฐํํด์ DTO๋ก ๋ณํ(fetch join ์ฌ์ฉO) * - fetch joi..
๐พORM:JPA
1. Page๋ฆฌ์คํธ๋ฅผ ๋ฐํ๊ฐ์ผ๋ก ๊ฐ์ง๊ณ , Pageable์ ๋งค๊ฐ๋ณ์๋ก ๊ฐ์ง๋ ํจ์ ์์ฑ 2-1. Pageable์ ๋๊ฒจ์ค PageRequest๋ฅผ ์์ฑ 2-2. getContent() ๋ฉ์๋๋ก ํ์ด์ง ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ด 2-3. getTotalElements() ๋ฉ์๋๋ก ์ ์ฒด ๊ฒฐ๊ณผ ์๋ฅผ ๊ฐ์ ธ์ด ํ์ด์ง ํจ์ page.getNumber() : ํ์ด์ง ๋ฒํธ๋ฅผ ๊ฐ์ ธ์ด page.getTotalPages() : ์ ์ฒด ํ์ด์ง ๊ฐฏ์ page.isFirst() : ์ฒซ ๋ฒ์งธ ํ์ด์ง์ธ์ง ์ฐธ/๊ฑฐ์ง page.hasNext() : ๋ค์ ํ์ด์ง ์๋์ง ์ฐธ/๊ฑฐ์ง Page๋ฅผ ์ปจํธ๋กค๋ฌ์์ ๋ฐํํด๋ ๋๋ค(json์ผ๋ก ๋ฐํ ๋จ) entity๋ dto๋ก ๋ฐ๊ฟ์ ๋ฐํํ์ entity๋ฅผ dto๋ก ์ฝ๊ฒ ๋ฐ๊พธ๋ ๋ฐฉ๋ฒ
๐พORM:JPA
์ฟผ๋ฆฌ ๋ฉ์๋ 3๊ฐ์ง 1. ๋ฉ์๋ ์ด๋ฆ์ผ๋ก ์ฟผ๋ฆฌ ์์ฑ 2. JPA Named Query 3. ๋ ํฌ์งํ ๋ฆฌ ์ธํฐํ์ด์ค์ ์ฟผ๋ฆฌ๋ฅผ ์ง์ ์ ์(@Query ์ด๋
ธํ
์ด์
์ ์ฌ์ฉ) 1๋ฒ์ ๋ฉ์๋ ์ด๋ฆ์ด ๊ธธ์ด์ง๋ฉด ๋ฌธ์ ๊ฐ ๋จ 2๋ฒ์ ์ค๋ฌด์์ ๊ฑฐ์ ์ฌ์ฉํ์ง ์์ 3๋ฒ์ ์ค๋ฌด์์ ๋ง์ด ์ฌ์ฉ 3. ๋ ํฌ์งํ ๋ฆฌ ์ธํฐํ์ด์ค์ ์ฟผ๋ฆฌ๋ฅผ ์ง์ ์ ์(@Query ์ด๋
ธํ
์ด์
์ ์ฌ์ฉ) ์ฅ์ : JPA Named ์ฟผ๋ฆฌ์ฒ๋ผ ์ ํ๋ฆฌ์ผ์ด์
์คํ ์์ ์ ๋ฌธ๋ฒ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ ์ ์์ DTO ์กฐํํ๋ ๋ฐฉ๋ฒ dto์ชฝ์ ์์ฑ์๊ฐ ์์ด์ผ ํจ new + ๋ชจ๋ ํจํค์ง ๊ฒฝ๋ก + ์์ฑ์ ๋ฐฉ์์ผ๋ก select ํด์ผ ํจ ์ปฌ๋ ์
์ ๊ฒฐ๊ณผ๊ฐ ์์ผ๋ฉด ๋น ์ปฌ๋ ์
์ ๋ฐํํ๋ค null์ด ์๋ result =[ ] ์ด๋ค. ๋จ, Member ํด๋์ค ํ๋์ด๋ฉด null์ ๋ฐํํ๋ค db์ ๋ฐ์ด..