Mybatis 파라미터 받는 방식
💬 회사를 다니면서 Mybatis 코드를 보게 되었습니다. 코드에 #과 $ 기호를 사용하여 파라미터로 전달하고 있었습니다. 코드를 이해하기 위해 두 기호의 차이가 무엇인지 알아보기로 했습니다. 또한 각각 어디에 사용이 되는지도 궁금했습니다. 이후에 제가 작성하게 되면 적절한 곳에 사용하기 위해서입니다.
✔ 파라미터 # (Binding Variable)
1. 쿼리문이 파싱이 되면 해당 쿼리문을 재활용
2. 값에 자동으로 ''가 붙음
3. PreparedStatement여서 SQL Injection 공격을 예방할 수 있음
✔ 파라미터 $ (Literal Variable)
1. 값이 들어올 때마다 쿼리문을 매번 파싱을 하여 사용
2. 값에 자동으로 ''붙지 않음
➡ 문자열 입력 시 ''을 직접 붙여줄 필요가 있습니다.
3. SQL Injection 공격에 취약함
➡ "And 1=1" 등을 추가적으로 기입해 다른 조건을 무시하고 모든 데이터를 볼 수도 있습니다.
언제 사용해야 하는가?
✅ 파라미터 #은 SQL Injection을 공격을 예방할 수 있고 해당 쿼리문을 재활용해 속도적인 측면을 향상시킬 수 있습니다. 그러기 때문에 사용자의 입력을 SQL에 사용할 때 쓰여져야 합니다.
✅ 파라미터 $은 SQL Injection에 취약하고 매번 쿼리문을 파싱을 이루어진다는 특징이 있습니다. 그러기 때문에 보안적으로 취약하지 않고 매번 변경이 되어야 하는 Table, Column 명을 SQL에 사용할 때 쓰여져야 합니다.
'개발일지 > TIL' 카테고리의 다른 글
[231030] MySQL 데이터 분석을 위한 SQL 작성 어려움... (0) | 2023.10.30 |
---|---|
[231029] S3 데이터 이전하기 (0) | 2023.10.29 |
[231008] JWT는 어디에 저장을 해야할까? (0) | 2023.10.08 |
[230923] Java PriorityQueue와 Comparator 사용하기 (1) | 2023.09.23 |
[230913] Scale-out 환경에서 Scheduler 중복으로 실행되는 문제 (0) | 2023.09.13 |