개선 사항
삽입 요청 쿼리 N건에서 1건으로 개선
원인
해결 방안
@Repository
public class CustomFileRepositoryImpl implements CustomFileRepository{
@Autowired
private JdbcTemplate jdbcTemplate;
// 쿼리 최적화 - 배치 업데이트
@Override
public List<FileEntity> saveAll(List<FileEntity> fileEntities) {
String sql = "insert into file_table(original_filename, current_filename, data, board_id) values (?, ?, ?, ?)";
List<Object[]> batchQuery = fileEntities.stream().map(file -> new Object[]{
file.getOriginalFilename(),
file.getCurrentFilename(),
file.getData(),
file.getBoard().getId()
}).collect(Collectors.toList());
jdbcTemplate.batchUpdate(sql, batchQuery);
// id는 초기화되지 않음
return fileEntities;
}
}
개선 사항
조회 쿼리 N+1건에서 1건으로 개선
원인

게시글 1개당 작성한 댓글 수 만큼 쿼리 조회 발생 (1+N)
해결 방안
public interface SpringDataJpaCommentsRepository extends JpaRepository<Comments, Long>, CommentsRepository {
@Override
@Query("select c from Comments c join fetch c.member where c.board.id in :boardIdList order by createdAt asc")
List<Comments> findByBoard_IdInWithMemberOrderByCreatedAtAsc(@Param("boardIdList") List<Long> idList);
}