728x90
반응형
💡 중요
MySQL JDBC 드라이버(mysql-connector-j)에서는 사실상 FORWARD_ONLY만 완전 지원됩니다.
| resultSetType | MySQL 실제 지원 여부 |
| FORWARD_ONLY | ✅ 정상 지원 |
| SCROLL_INSENSITIVE | ❌ 내부적으로 FORWARD_ONLY로 다운그레이드됨 |
| SCROLL_SENSITIVE | ❌ 지원 안 됨 → 결국 FORWARD_ONLY가 됨 |
➡ MyBatis XML에서 SCROLL_INSENSITIVE라고 써도 그대로 FORWARD_ONLY로 동작합니다.
✔ 2. 실무에서 어떤 타입을 써야 하나?
⭐ 결론: MySQL + MyBatis에서는 그냥 FORWARD_ONLY 쓰는 게 정답입니다.
- 어차피 MySQL이 SCROLL_* 지원을 안 함
- 가장 빠르고, 메모리 가장 적게 쓰고, 안정적
- 데이터가 많을 때 효율적 (대부분 대량 조회 케이스)
✔ 3. 실무에서 자주 터지는 문제
MyBatis에서 대량 데이터를 조회하면 자주 나오는 에러:
java.sql.SQLException: Streaming result set com.mysql.jdbc.RowDataDynamic@... is still active
이때 해결책은 아래 두 가지:
1) resultSetType="FORWARD_ONLY"
2) fetchSize 설정 (중요!)
예(xml)
<select id="sysIfList"
resultType="sysIf"
resultSetType="FORWARD_ONLY"
fetchSize="Integer.MIN_VALUE">
SELECT * FROM T_SYS_INTERFACE
</select>
fetchSize=Integer.MIN_VALUE는 MySQL에서 스트리밍 모드를 활성화시켜
대용량 데이터를 한 번에 메모리에 올리지 않고 바로바로 가져옵니다.
✔ 4. 성능 차이 (체감 기준)
| resultSetType | 메모리 사용량 | 속도 | MySQL 실제 동작 |
| FORWARD_ONLY | ⭐ 최소 | ⭐ 가장 빠름 | YES |
| SCROLL_INSENSITIVE | 높음 | 느림 | NO → FORWARD_ONLY로 강등 |
| SCROLL_SENSITIVE | 매우 높음 | 가장 느림 | NO → FORWARD_ONLY로 강등 |
✔ 5. 실무 추천 설정 (MyBatis + MySQL)
대량 조회 시 강력 추천:
<select id="getList"
resultType="SomeDTO"
resultSetType="FORWARD_ONLY"
fetchSize="Integer.MIN_VALUE">
SELECT ...
</select>
- 스트리밍 모드로 전환
- 메모리 폭발 방지
- 커서 forward 이동만 가능
- 가장 오류 없는 조합
728x90
반응형
'DB' 카테고리의 다른 글
| [DB][MySQL] JSON_TABLE - GROUP_CONCAT() (0) | 2025.10.27 |
|---|---|
| [DB][MySQL] JSON_TABLE() (0) | 2025.10.26 |
| [DB][MyBatis] resultSetType 비교 그림 (0) | 2025.10.21 |
| [DB][MyBatis] resultSetType (0) | 2025.10.20 |
| [DB][MySQL] 버전확인하기 (0) | 2025.10.14 |