동적 검색 조건: 선택 조건, 바인드 변수, IN 목록, 정렬 선택
검색 화면은 이름·부서·입사일 구간·상태를 넣을 수도 있고 안 넣을 수도 있습니다. 넣은 조건만 걸리게 하는
(:p IS NULL OR col = :p)패턴, 값을 문장에 붙이지 않는 바인드 변수, 개수가 변하는IN목록, 정렬 컬럼 선택까지 한 번에 봅니다.NVL(:p, col)로 줄여 쓰면col이 NULL 인 행이 빠지는 함정을 실행으로 확인합니다.
1. 왜 배우는가
목록 조회 화면은 거의 다 조건이 선택입니다. 사용자가 이름만 넣기도 하고, 부서와 상태를 함께 넣기도 하고, 아무것도 안 넣고 전체를 보기도 합니다. 조건 조합마다 SQL 을 따로 만들 수는 없으니 하나의 문장이나 조립 방식이 필요합니다.
이 작업에는 함정이 세 가지 있습니다. 조건을 줄여 쓰다가 NULL 행이 빠지는 것, 값을 문자열로 이어 붙여 SQL 인젝션 구멍이 생기는 것, 정렬 컬럼을 그대로 받아 넣는 것입니다. 셋 다 결과가 그럴듯해 보여서 운영에서야 발견됩니다.
이 레슨은 SQL 쪽 패턴을 예제로 실행해 보고, 애플리케이션 쪽 MyBatis 동적 SQL 은 조각 하나로만 짚습니다. 자세한 MyBatis 는 실무 프로젝트 "백엔드 04 MyBatis 다중 DB" 레슨에서 다룹니다. 중급 06 NULL 처리 함수와 중급 05 CASE 를 알면 쉽게 읽힙니다.