데이터와 MyBatis — 읽기 자료
"#{} 와 ${} 의 차이가 뭐예요?" — 잘못 쓰면 보안 사고.
#{} = 안전한 PreparedStatement (값을 따옴표로 감쌈). ${} = 위험한 문자열 치환 (그대로 끼워넣음).
<!-- 위험한 코드 (Demo 용) -->
<select id="login" resultType="com.smhrd.domain.Member">
SELECT * FROM mymember
WHERE id = '${id}' AND pwd = '${pwd}'
</select>
-- 공격 입력:
id = "admin' OR '1'='1"
→ 완성된 SQL:
SELECT * FROM mymember WHERE id='admin' OR '1'='1' AND pwd='...'
→ 누구나 admin 으로 로그인 가능!
<!-- 안전한 코드 -->
<select id="login" resultType="com.smhrd.domain.Member">
SELECT * FROM mymember
WHERE id = #{id} AND pwd = #{pwd}
</select>
"#{} 와 ${} 의 차이가 뭐예요?" — 잘못 쓰면 보안 사고.
`#{}` 만 쓰는 습관이 들어 있다. `${}` 는 정렬 컬럼 같은 특수 경우만.