문법 차이만 외운 사람과, 값·식별자 경계와 바인딩의 한계까지 보는 사람을 가르는 질문이다. 동적 ORDER BY 같은 후속을 던졌을 때 "바인딩으로 풀자"고 답하면 깊이가 얕다고 판단한다.
Statement는 SQL 문자열을 그대로 드라이버에 넘겨 실행하는 방식이라, 사용자 입력이 쿼리 구조와 한 덩어리로 섞인다. PreparedStatement는 쿼리 구조를 먼저 컴파일해 두고 값만 플레이스홀더로 바인딩하므로, 값이 절대 쿼리 토큰으로 해석되지 않는다. 같은 쿼리를 반복 실행할 때 파싱·플랜을 재사용할 수 있다는 점도 따라온다. 둘의 차이는 "값이 쿼리 구조에 끼어들 수 있는가"이고, 실무 기본 선택은 PreparedStatement다.
문자열 결합 SQL을 PreparedStatement로 옮긴 경험이 있다면 어떤 패턴이 가장 자주 걸렸는지로 답을 시작할 수 있다
동적 ORDER BY나 IN 절을 화이트리스트·길이 제한으로 막아본 경험이 있다면 바인딩의 한계를 자기 사례로 풀 수 있다
보안 점검 도구나 코드 리뷰에서 인젝션 패턴을 찾아본 경험이 있다면 "값·구조 분리" 기준을 자기 언어로 설명할 수 있다
ORM을 쓰면서도 raw 쿼리를 섞어 쓴 적이 있다면 그 지점에서 어떻게 검증 경계를 그었는지 연결할 수 있다
아직 공개된 답변이 없어요. 첫 공개 답변을 남겨보세요.