Cursor (커서)

개요
커서(Cursor)는 데이터베이스에서 SELECT 쿼리 결과를 한 행(row)씩 순차적으로 처리하기 위한 메커니즘이다. 일반적으로 SQL은 집합 기반(Set-based) 처리 방식을 사용하지만, 특정 상황에서는 행 단위 처리가 필요하며 이때 커서를 사용한다. 주로 복잡한 비즈니스 로직, 반복 처리, 조건 기반 데이터 수정 등에서 활용된다.
1. 개념 및 정의
커서는 쿼리 결과 집합(Result Set)을 대상으로 한 행씩 접근하고 처리할 수 있도록 하는 데이터베이스 객체이다. 즉, 전체 데이터를 한 번에 처리하는 것이 아니라, 각 행을 순차적으로 읽고 처리하는 반복 구조를 제공한다.
커서는 선언(DECLARE), 열기(OPEN), 데이터 추출(FETCH), 종료(CLOSE)의 과정을 통해 동작한다.
2. 특징
| 구분 | 설명 | 비고 |
| 행 단위 처리 | 한 행씩 순차 처리 | 반복 작업 |
| 절차적 방식 | Procedural SQL 활용 | PL/SQL, T-SQL |
| 유연성 | 복잡한 로직 구현 가능 | 조건 처리 |
| 성능 저하 | 집합 처리보다 느림 | 사용 주의 |
| 제어 가능 | 반복 흐름 제어 가능 | 루프 구조 |
한줄 요약: 커서는 행 단위 반복 처리를 위한 절차적 데이터 처리 도구이다.
3. 구성 요소
| 구성 요소 | 설명 | 기술 요소 |
| DECLARE | 커서 선언 | 쿼리 정의 |
| OPEN | 커서 활성화 | 실행 준비 |
| FETCH | 데이터 추출 | 행 단위 처리 |
| CLOSE | 커서 종료 | 리소스 해제 |
| LOOP | 반복 처리 | 조건 기반 흐름 |
한줄 요약: 커서는 선언, 실행, 반복, 종료 단계로 구성된다.
4. 기술 요소
| 기술 | 설명 | 활용 |
| PL/SQL Cursor | Oracle 커서 | DB 처리 |
| T-SQL Cursor | SQL Server 커서 | 반복 처리 |
| FOR LOOP | 반복 구조 | 자동 커서 |
| FETCH NEXT | 다음 행 이동 | 데이터 처리 |
| Cursor Type | Static, Dynamic 등 | 성능/기능 선택 |
한줄 요약: 다양한 DB 환경에서 커서는 절차적 SQL과 함께 사용된다.
5. 장점 및 이점
| 항목 | 효과 | 상세 설명 |
| 유연성 | 복잡한 로직 구현 | 조건 처리 가능 |
| 정밀 제어 | 행 단위 제어 | 세밀한 처리 |
| 순차 처리 | 데이터 흐름 관리 | 단계별 수행 |
| 이벤트 처리 | 특정 조건 대응 | 비즈니스 로직 |
| DB 내부 처리 | 애플리케이션 의존 감소 | 성능 최적화 가능 |
한줄 요약: 커서는 복잡한 로직과 세밀한 데이터 처리를 가능하게 한다.
6. 주요 활용 사례 및 고려사항
| 활용 사례 | 설명 | 고려사항 |
| 데이터 변환 | 행별 데이터 가공 | 성능 저하 |
| 배치 처리 | 반복 작업 수행 | 대량 데이터 비효율 |
| 복잡 로직 | 조건 기반 처리 | 코드 복잡성 |
| 로그 처리 | 이벤트 기록 | 관리 필요 |
| 금융 시스템 | 트랜잭션 처리 | 정확성 요구 |
한줄 요약: 커서는 특정 상황에서 유용하지만 성능과 유지보수를 고려해야 한다.
7. 결론
커서는 데이터베이스에서 행 단위 처리를 가능하게 하는 강력한 도구로, 복잡한 비즈니스 로직을 구현할 때 유용하다. 그러나 집합 기반 처리보다 성능이 떨어질 수 있으므로, 꼭 필요한 경우에만 사용하는 것이 바람직하다. 현대 시스템에서는 가능한 한 집합 연산을 우선 사용하고, 커서는 보완적인 수단으로 활용하는 전략이 권장된다.