Posts
Q&A
batch size ์ Limit ์ง๋ฌธ์ ๋๋ค
์๋ ํ์ธ์! ๋ต๋ณ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. 2 ๋ฒ์์ ์ต๊ทผ์ ๋ค์ด์จ ๋ฐ์ดํฐ๋ค์ ๋ฏธ๋ฆฌ ์บ์ฑํ๋ ๊ฒ์ฒ๋ผ ์ฌ์ฉํ๋ ๊ฑด ์ ๋ง ์ข์ ์์ด๋์ด ๊ฐ์ต๋๋ค! ์ํ๋ ๋ง์์ ๋ฃ๊ณ 1 ๋ฒ์ ๋ํด์ ๊ณ ๋ฏผ์ ํด๋ณด์๋๋ฐ Fetch Join ์์๋ Limit ๊ฐ ์ ์ฉ ์๋์ด์ Inner Join ๊ณผ Limit ์ ํจ๊ป JPQL ๋ก ์์ฑํ์ต๋๋ค. ํน์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋ง์ํ์ จ๋ ๊ฑธ๊น์? @Repository public interface PostRepository extends JpaRepository { @Query(value = "SELECT p" + " FROM Post p" + " INNER JOIN Follow f" + " ON p.member.id = f.toMember.id" + " WHERE p.id findByJoinFollow(@Param("memberId") Long memberId, @Param("lastPostId") Long lastPostId, Pageable pageable); } @RequiredArgsConstructor @Service public class PostService { private final PostRepository postRepository; public List getFeeds(Long lastPostId) { PageRequest pageRequest = PageRequest.of(0, 5, Sort.by("id").descending()); return postRepository.findByJoinFollow(getCurrentMember().getId(), lastPostId, pageRequest); } } ์ต๋ํ ๊ฐ๋จํ๊ฒ ์ง๋ฌธํ๋ ค๊ณ ํ์๋๋ฐ ์คํ๋ ค ์ง๋ฌธ์ ๋ชฉ์ ์ ํ์ ํ ์ ์์ด ํผ๋๋ง ๋๋ ธ๋ ๊ฒ ๊ฐ๋ค์ ใ ํ ์ดํ๋ก์ ํธ๋ก ์งํ ์ค์ธ ๊ฑด ์ธ์คํ ํด๋ก ์ฝ๋ฉ์ด๊ณ ๊ตฌํ์ค์ธ API ๋ ์ธ์คํ๊ทธ๋จ ์ฒ์ ๋ค์ด๊ฐ๋ฉด ๋์ค๋ ์ฒซ ํ๋ฉด์ ๋๋ค. ์ธ์คํ๊ทธ๋จ ์ฒซ ํ๋ฉด์์๋ ๋ด๊ฐ ํ๋ก์ฐ ์ค์ธ ๋ชจ๋ ์ฌ๋๋ค์ ๊ฒ์๊ธ์ ์ต์ ์์๋๋ก ๋ ธ์ถํ๊ธฐ ๋๋ฌธ์ ์์นซ ์๋ชปํ๋ฉด ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ฒ ๋์ด ์ต์ ํ ํ๋ ๋ฐฉ๋ฒ์ ๊ณ ๋ฏผํด๋ณด๋ ์ค์ด์์ต๋๋ค. ์ํ๋์ด ๋ง์ํด์ฃผ์ ๋๋ก Inner Join ์ ์ฌ์ฉํ๋ List ๋ List ๋ฅผ DB ์์ ๋ง์ด ๋์ด์ค์ง ์๊ณ ์ฒ๋ฆฌํ ์ ์๋ ๊ฒ ๊ฐ์์! ์๊พธ ์ง๋ฌธ ๋๋ฆฌ๋๋ฐ ์น์ ํ๊ฒ ๋ต๋ณํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
- Likes
- 0
- Comments
- 4
- Viewcount
- 1K
Q&A
batch size ์ Limit ์ง๋ฌธ์ ๋๋ค
์๋ ํ์ธ์. ์ํ๋ ์น์ ํ ๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค! ํต์ฌ์ DB ์์ ๋๋ฌด ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ํ๋ฒ์ ๋์ด์ค์ง ์๋ ๊ฑฐ๊ตฐ์. ์ถ๊ฐ์ ์ผ๋ก ๋ ๊ฐ์ง๋ง ๋ ์ง๋ฌธ๋๋ ค๋ ๋ ๊น์? 1. postRepository.findTop5ByMemberIn(members) ๋ก ์กฐํํ ๋ members ์ ์ฌ์ด์ฆ๊ฐ ํฌ๋ค๋ฉด IN ์ฟผ๋ฆฌ ์ฌ์ด์ฆ๋ฅผ ์ง์ ๋๋์ด์ ํธ์ถํด์ผ ํ๋์? ๋ชจ๋ Member ์ Post ๋ฅผ ์กฐํํ๋ ๊ฒ ์๋๋ผ ์์์ ์กฐ๊ฑด์ผ๋ก ํํฐ๋ง๋ Member ๋ฆฌ์คํธ๋ฅผ ๋จผ์ ๊ฐ์ ธ์ฌ ์์ ์ด๋ผ์ Fetch Join ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ ๊ฒ ๊ฐ์ต๋๋ค. ๊ฒฐ๊ตญ members ๋ฅผ ๋์์ผ๋ก ํธ์ถ์ ํด์ผ ํ๋๋ฐ MySQL ๊ฐ์ ๊ฒฝ์ฐ๋ IN ์กฐ๊ฑด์ ์ต๋ 1000 ๊ฐ ๋ฐ์ ๋ฃ์ง ๋ชปํ๋ค๊ณ ์๊ณ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ Batch Size ์ ์ฉ์ด ์๋ ๊ฒ ๊ฐ์๋ฐ ๊ฐ๋ฐ์๊ฐ ์์๋ก ์ฌ์ด์ฆ๋ฅผ ์กฐ์ ํด์ IN ์ฟผ๋ฆฌ๋ฅผ ๋๋์ด ํธ์ถํด์ผ ํ๋์ง ๊ถ๊ธํฉ๋๋ค. 2. ๋ง์ํด์ฃผ์ ๋๋ก๋ผ๋ฉด Comment ๋ฅผ ๋ฝ์ ๋๋ ์ฟผ๋ฆฌ๋ฅผ ์ง์ ํธ์ถํด์ผ ํ ๊ฒ ๊ฐ์๋ฐ BatchSize ์ ์ฉ์ด ์๋์ด์ Post ๊ฐฏ์๋งํผ Comment ์กฐํ ์ฟผ๋ฆฌ๊ฐ ๋ ์๊ฐ ๊ฑด ์ด์ฉ ์ ์๋ ๋ถ๋ถ์ธ๊ฐ์? ์ ๊ฐ ๊ตฌํํ๋ ค๊ณ ํ๋ ๊ฑด Post 5 ๊ฐ์ ๋ํด์ ํธ์ถํ๋ 5 ๊ฐ์ Comment ์กฐํ ์ฟผ๋ฆฌ๋ง ๋๊ฐํ ์ง๋ง ์ปค์ง๋ฉด ์ปค์ง์๋ก ๋ถ๋ด์ด ๋ ๊ฒ ๊ฐ์ต๋๋ค. Post ์ ๊ฐฏ์๊ฐ ํ์ ๋์ด ์์ผ๋ ๊ทธ ๊ฐฏ์๋งํผ ์ฟผ๋ฆฌ๊ฐ ๋ฐ์ํ๋ ๊ฑด ๊ฐ์ํ๊ณ ๊ฐ์ผํ๋ ๊ฑด๊ฐ์?
- Likes
- 0
- Comments
- 4
- Viewcount
- 1K




