? : 마이바티스에서 #하고 $ 차이 알아요?
Me : .....iBatis에서 #으로 썼었나?
저는 마이바티스를 처음 알고 쓴지가 1년 반 정도 된것 같습니다. 근데 정말 아무 생각 없이 쓰다가 최근데 #하고 $의 차이를 아냐는 질문을 듣고 정신이 나가버렸습니다.
질문을 듣자마자 "음..? #{parameter} 이렇게 쓴거 같은데 $도 있었나?" 이렇게 생각이 들고 iBatis에서 $를 쓴거 같기도 하더라구요.
그래서 그냥 버전의 차이 아닌가요?라는 답답한 답변을 해버리고 말았습니다. 1년 반동안 정말 아무 생각도 없이 쓰기만 했네요 ㅎㅎ
<select ~~~>
SELECT ${COLUMN}
FROM USER
WHERE user_id = #{userId}
</select>
MyBatis에서 $,#을 사용한 예시입니다. 위의 SQL을 보기전에 $하고 #을 차이를 보고 다시 쿼리를 보시죠.
${}
- 파라미터가 바로 출력됩니다.
- 쿼리 주입을 예방할 수 없어서 SQL injection 공격을 막을 수 없어서 보안 측면에서 불리합니다.
- 파라미터가 바로 출력되기 때문에 COLUMN명이나 테이블명을 주입하는데 사용합니다.
#{}
- 파라미터가 String형태로 들어와서 ''로 감싸져서 출력됩니다.
- 쿼리 주입을 예방할 수 있어서 보안 측면에서 유리합니다.
보안 측면의 차이 때문에 #{parameter} 형태로 보통 사용합니다. 저는 테이블하고 컬럼명을 주입할 일이 별로 없더라구요.
애초에 ${}로 사용한 코드를 본적이 없어서 내용을 몰랐던 것 같습니다. 앞으로는 아주 사소한 것들에도 관심을 가져야겠습니다.
반응형
'기초 지식 > DB' 카테고리의 다른 글
[JPA] 낙관적 Lock, 비관적 Lock (1) | 2024.01.05 |
---|---|
[DB] Transation Isolation Level (0) | 2022.01.13 |
DB의 결합 인덱스에 관해서 (0) | 2021.08.23 |
[MySQL] Insert 후 PK값 얻어오기 (MyBatis 사용) (0) | 2020.12.21 |
[Oracle] Partitioned index (0) | 2020.09.18 |