지식노트
[Spring] #{} / ${}의 차이
디두딘
2022. 4. 28. 16:43
#{}
- 파라미터가 String 형태로 들어와 자동적으로 '파라미터' 형태가 됨 예를 들어, #{user_id}의 user_id 값이 abc라면 쿼리문에는 USER_ID = 'abc' 형태가 됨
- 쿼리 주입을 예방하여 보안 측면에서 유리함
- 타입 별로 '' 붙는 여부는 달라짐
${}
- 파라미터가 바로 출력됨
- 해당 컬럼의 자료형에 맞추어 파라미터의 자료형이 변경됨
- 쿼리 주입을 예방할 수 없어 보안 측면에서 불리함 → 그러므로, 사용자의 입력을 전달할 때는 사용하지 않는 편이 낫게 됨
- 테이블이나 컬럼명을 파라미터로 전달하고 싶을 때 사용함 #{}은 자동으로 ''가 붙어서 이 경우에는 사용 불가함
정리
- #{} - 자동으로 값에 따옴표가 붙고, 성능 좋음
- ${} - 값 그대로 전달 따옴표 안 붙음 / 성능 좋지 않음 / 보안 취약
- ORDER BY 아니면 #{} 쓰기.