패스잇
백엔드 개발 · 기초

Prepared Statement를 사용해야 하는 이유와 SQL Injection 방지 원리를 설명해주세요.

힌트 · 파라미터 바인딩과 쿼리 파싱 과정을 생각해보세요.

SQL Injection바인딩매개변수화된 쿼리컴파일데이터/코드 분리

모범답안

Prepared Statement를 사용하는 주된 이유는 SQL Injection 공격을 방지하고 성능을 향상시키기 위해서입니다.

SQL Injection은 사용자 입력값을 제대로 검증하지 않고 SQL 쿼리에 포함시킬 때 발생하는데요. Prepared Statement는 쿼리 구조와 데이터를 분리하여 처리합니다. 쿼리 구조는 미리 컴파일되고, 데이터는 나중에 파라미터로 바인딩됩니다.

예를 들어, 사용자 이름으로 검색하는 쿼리가 있다면, 쿼리 자체는 SELECT * FROM users WHERE username = ? 와 같이 정의하고, '?' 부분에 사용자 입력값을 바인딩하는 방식으로 처리합니다. 이렇게 하면 사용자 입력값이 SQL 코드로 해석되지 않고 단순한 데이터로 처리되어 SQL Injection 공격을 막을 수 있습니다. 또한, 동일한 쿼리를 반복적으로 실행할 때 컴파일 과정을 생략하여 성능 향상에도 도움이 됩니다.

읽었다면, 이제 직접 답해볼 차례예요

패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.

함께 보는 데이터베이스 면접 질문

← 데이터베이스 면접 질문 전체 보기