
SQL에서 사용하는 ${}와 #{}는 각각 다른 목적으로 사용된다.
${}는 쿼리 자체를 동적으로 만들 때 사용한다.
JSP나 서버에서 받은 매개변수 값을 쿼리에 그대로 삽입하는 방식이다.
이 덕분에 사용자가 입력한 값이나 프로그램 변수를 쿼리문에 직접 넣을 수 있다.
예를 들어, 테이블 이름이나 정렬 기준처럼 쿼리 구조를 바꾸고 싶을 때 유용하다
${}는 주로 JSP나 서버에서 받은 파라미터들을 쿼리에 직접 넣을 때 사용된다.
JSP나 컨트롤러에서 받은 값들을 ${param.xxx}와 같이 사용하여 쿼리에 동적으로 넣을 수 있다.
SELECT * FROM users WHERE id = ${param.userId}
#{}는 ORM(Object-Relational Mapping) 프레임워크인 MyBatis 등에서 주로 사용한다.
이건 SQL 쿼리를 작성할 때 변수나 값들을 쉽게 넣을 수 있게 도와준다.
프레임워크가 쿼리를 실행할 때,
#{}에 해당하는 값을 적절한 형태로 변환하여 삽입한다.
이는 SQL Injection 공격을 막아주는 핵심적인 방법이다.
// Java 코드에서 userId를 받음
String userId = "123";
Map<String, Object> params = new HashMap<>();
params.put("userId", userId);
// MyBatis XML에서 userId를 활용한 SQL 쿼리
<select id="getUserById" parameterType="int" resultType="User">
SELECT * FROM users WHERE id = #{userId}
</select>
따라서 특별한 경우가 아니라면 보안을 위해 #{}를 사용하는 것이 권장된다고 한다.