header-img
Info :
728x90

 

์ฟผ๋ฆฌ์†๋„๋Š” 00:00:06 ์ดˆ ์ •๋„๋กœ ์งง๊ฒŒ ๋‚˜์˜ค๋Š”๋ฐ

API ์‹คํ–‰ ์†๋„๋Š” 48์ดˆ๊ฐ€ ๋‚˜์˜ค๋Š” ์ผ€์ด์Šค๊ฐ€ ๋ฐœ์ƒ.

 

๋ฌผ๋ก  ๊ฑด ์ˆ˜๊ฐ€ ๋งŽ์€ SQL์ด๊ธฐ๋Š” ํ–ˆ์ง€๋งŒ,

์ฟผ๋ฆฌ ์†๋„์™€ API ์†๋„๊ฐ€ ์ด๋ ‡๊ฒŒ ๋น„๋ก€ํ•˜์ง€ ์•Š๋Š” ์ผ€์ด์Šค๋Š” ์ฒ˜์Œ์ด์—ˆ์Œ.

 

-- ์ด๋Ÿฐ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๋Œ€๋ถ€๋ถ„ Where ์ ˆ์˜ ์กฐ๊ฑด์ด VARCHAR๋กœ ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ

 

MSSQL ์˜ ํŠน์ง•

MSSQL์˜ ๊ฒฝ์šฐ VARCHARํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ•  ๋•Œ NVARCHARํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ•œ๋‹ค๊ณ  ํ•จ.

์ฆ‰, ๋ฐ์ดํ„ฐ์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ๊ฐ€๋ณ€์œผ๋กœ ํ• ์ง€ ์•„๋‹์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž„.

์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋งˆ๋‹ค ๊ฐ•์ œ์ ์œผ๋กœ ํƒ€์ž… ์บ์ŠคํŒ…์ด ์ผ์–ด๋‚˜๊ณ , ์ˆ˜ํ–‰๋˜๋Š” ์ฟผ๋ฆฌ์˜ ํƒ€์ž…์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— INDEX๋ฅผ ์•ˆํƒ€๊ฒŒ ๋จ.

ใ… -ใ… .. ์ฟผ๋ฆฌ ํŠœ๋‹์„ ์•„๋ฌด๋ฆฌํ•ด๋„ DB ์†๋„๋Š” ๋นจ๋ผ์ง€๋Š”๋ฐ, API ํ˜ธ์ถœ ์†๋„๋Š” ํฌ๊ฒŒ ์ฐจ์ด๊ฐ€ ๋‚˜์ง€ ์•Š๋Š” ์ด์Šˆ

 

Mybatis์˜ ํŠน์ง•

 

๋งˆ์ด๋ฐ”ํ‹ฐ์Šค์—์„œ ๊ฐ’์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋ฐฉ์‹์€ ${}์™€ #{} ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

 

 

Mybatis :: ๋‹ฌ๋Ÿฌ($)์™€ ์ƒต(#)์˜ ์ฐจ์ด

ํŒŒ๋ผ๋ฏธํ„ฐ ๋งคํ•‘์„ ํ•˜๋Š” ๋ฐ์— ์‚ฌ์šฉํ•˜๋Š” $์™€ # ๋‘๊ฐ€์ง€์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค. # PreparedStatement๋ฅผ ์˜๋ฏธ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ String ํ˜•ํƒœ๋กœ ๋“ค์–ด์™€ ์ž๋™์œผ๋กœ(' ') ํŒŒ๋ผ๋ฏธํ„ฐ ํ˜•ํƒœ๊ฐ€ ๋จ #{user_id} ์˜ ๊ฐ’์ด 'n

bornatnoon.tistory.com

 

์ฐจ์ด๋Š” PreparedStatement ๋ผ๋Š” ๊ฒƒ๊ณผ, Statement ๋ผ๋Š” ๊ฒƒ์˜ ์ฐจ์ด๊ฐ€ ์žˆ๋Š”๋ฐ..

๋Œ€๋ถ€๋ถ„ Preparedstatement๊ฐ€ ์ฟผ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์— ์œ ๋ฆฌํ•˜๋‹ค๊ณ  ์•Œ๊ณ  ์žˆ์Œ..

 

๋ณดํ†ต ๊ทธ๊ฒŒ ๋งž๋Š” ๋ง์ด์ง€๋งŒ, Statement์—๋„ ์žฅ์ ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ๋„์›€์ด ๋œ๋‹ค.

 

๋ณ€๊ฒฝ

 

1. ํŒŒ๋ผ๋ฉ”ํ„ฐ ๋ฐฉ์‹ ์ˆ˜์ •

SELECT * FROM table WHERE id LIKE '%' + '${value}' + '%'

 

๊ธฐ์กด์— #{} ์œผ๋กœ ๋ฐ›์•„์˜ค๋˜ ๋ฐฉ์‹์—์„œ ${} ์œผ๋กœ ๋ฐ›์•„์˜ค๋„๋ก ๋ฐฉ์‹์„ ์ˆ˜์ •ํ•ด๋ณธ๋‹ค.

 

๊ฒฐ๊ณผ: ์ฟผ๋ฆฌ ์†๋„์™€ API ํ˜ธ์ถœ ์†๋„๊ฐ€ ๊ฐ™์•„์ง

 

ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ๋ฐฉ์‹์„ ๋ฐ”๊พธ๊ฒŒ ๋˜๋ฉด SQL Injection์„ ๋ฐฉ์ง€ํ•  ๋ฐฉ๋ฒ•์„ Service ๋‚˜ Controller ๋‹จ์— ์ถ”๊ฐ€ ํ•ด์ค˜์•ผ ํ•œ๋‹ค. ๊ผญ.

์ถ”ํ›„์— ๋ณด์•ˆ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ.

 

2. ๊ฐ•์ œ๋กœ ํƒ€์ž… ๋ณ€ํ™˜ Typecasting

SELECT * FROM table WHERE name  =  CAST( #{value} AS VARCHAR)
SELECT * FROM table WHERE  name = CONVERT(VARCHAR(10), #{value})

 

์›ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํƒ€์ž… ๋ณ€ํ™˜์„ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

์—ฌ๊ธฐ์— ์ถ”๊ฐ€ํ•˜์—ฌ ์˜ตํ‹ฐ๋งˆ์ด์ €๋ฅผ ๋„๋„๋ก ํ•œ๋‹ค. ๋ฃฐ ๋ฒ ์ด์Šค๋กœ ๋ณ€๊ฒฝํ•˜๋„๋ก ํ•ด๋ณด์ž.

select /*+ RULE */
      e.empno,
          e.ename,
          d.dname
from  dept d, emp e
where  e.deptno = d.deptno;

 

์ด๋ ‡๊ฒŒ ๋ณ€๊ฒฝํ•˜๋ฉด, ์ฟผ๋ฆฌ ๊ณ„์‚ฐ ์†๋„๋„ ์ค„๊ณ  ํ•˜๋‹ˆ.. API ํ˜ธ์ถœ ์†๋„๋„ ์ค„๊ธฐ๋Š” ํ•˜๋Š”๋ฐ

ํŒŒ๋ผ๋ฉ”ํ„ฐ ๋ฐ›๋Š” ๋ฐฉ์‹์„ ๋ณ€ํ™˜ํ•œ ๊ฒƒ ๋ณด๋‹ค๋Š” ์†๋„๊ฐ€ ๋”ธ๋ฆฌ๊ธฐ๋Š” ํ•œ๋‹ค.

 

์›๋ž˜์˜ API ํ˜ธ์ถœ ์‹œ๊ฐ„์ด ํ•œ 58์ดˆ ์ •๋„ ๊ฑธ๋ ธ๋‹ค๋ฉด, ์œ„์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐ”๊ฟ€ ์‹œ์—๋Š” 43์ดˆ ์ •๋„ ๋œจ๋Š” ์ •๋„?

๋ณด์•ˆ์ด๋‚˜ ๊ธฐ์กด ์ฝ”๋”ฉ ๋ฃฐ์„ ์ง€ํ‚ค๋ฉด์„œ ํŠœ๋‹ํ•˜๊ธฐ์—๋Š” ํ•ด๋‹น ๋ฐฉ๋ฒ•์ด ์ ํ•ฉํ•˜์ง€๋งŒ ์•„์ง ์†๋„ ๊ฐœ์„  ๋ถ€๋ถ„์—์„œ๋Š” ๋ถ€์กฑํ•œ ๋ชจ์Šต.

 

--

 

์šฐ๋ฆฌ์˜ ์ผ€์ด์Šค์—์„œ๋Š” ์šฐ์„ 

์„ฑ๋Šฅ์ด ์ €ํ•˜๋˜๋Š” ์กฐํšŒ์™€ ๊ด€๋ จ๋œ ๋ถ€๋ถ„์—์„œ๋งŒ ${}์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ž„์‹œ ๋ฐฉ์ฑ…์œผ๋กœ ์ง€์ •ํ•ด๋‘” ์ƒํƒœ.

 

์ •ํ™•ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜๊ธด ํ•  ๊ฒƒ ๊ฐ™๋‹ค..

 

 

 

728x90
๋”๋ณด๊ธฐ
BACKEND/SpringBoot