JDBC에서 setFetchSize()와 setMaxRows()의 역할
JDBC로 데이터베이스를 다룰 때 setFetchSize(int)와 setMaxRows(int)는 이름은 비슷하지만 동작 방식과 적용 대상이 완전히 다른 메소드입니다. 두 메소드의 차이를 정확히 이해하면 대용량 데이터 조회 시 성능을 효율적으로 제어할 수 있습니다.
setFetchSize(int) — 데이터베이스와의 통신 단위를 조절
setFetchSize(int)는 ResultSet이 추가적인 행(row)이 필요할 때 데이터베이스로부터 한 번에 몇 개의 행을 읽어올지를 지정합니다. 즉, 이 메소드는 데이터베이스가 ResultSet 데이터를 반환하는 방식에 영향을 줍니다.
예를 들어 fetch size를 100으로 설정하면, JDBC 드라이버는 전체 결과를 한 번에 가져오지 않고 100개 행씩 나누어 데이터베이스와 주고받습니다. 이를 통해 네트워크 왕복 횟수와 메모리 사용량 사이의 균형을 조절할 수 있으며, 수십만 건 이상의 대량 데이터를 조회할 때 특히 유용합니다.
setMaxRows(int) — 클라이언트 측 결과 행 수 제한
반면 setMaxRows(int)는 하나의 ResultSet이 동시에 담을 수 있는 최대 행 수를 지정합니다. 이 메소드는 데이터베이스가 아닌 클라이언트 측 JDBC 객체에 영향을 미칩니다.
예를 들어 max rows를 50으로 설정하면, 쿼리 결과가 실제로 수천 건이라 하더라도 ResultSet에는 처음 50개의 행만 포함되며 나머지는 무시됩니다. 이는 SQL의 LIMIT 절과 비슷한 역할을 하지만, SQL 문을 수정하지 않고 JDBC 레벨에서 결과 개수를 제한할 수 있다는 점이 특징입니다.
핵심 차이 요약
setFetchSize(int)는 데이터베이스에서 결과를 얼마나 묶음으로 가져올지 결정하는 반면, setMaxRows(int)는 클라이언트가 받아들일 최대 행 수를 결정합니다. 전자는 성능 최적화 도구이고, 후자는 결과 크기 제한 도구라고 이해하면 됩니다.