백엔드 프로젝트를 하면 쿼리를 작성하고 Back logic을 작성할 일이 많아지는데 그때, SQL Mapper로 MyBatis를 쓰면서 mapper.xml 파일에 <! [CDATA [ 쿼리문 ]]>라고 쓰인 것을 자주 보았을 것이다.
[개발하면서 뜬금없는 호기심 1탄]
Mybatis 모든 쿼리문에 꼭 CDATA를 사용해야할까?
CDATA 란?
쿼리를 작성할 때 '<', '>', '&'를 사용해야 하는 경우가 생기는데 xml에서 그냥 사용하면 mapper에 작성된 <select>, <update>와 같은 태그로 인식한다. 그렇다면 mapper.xml에 작성된 <select> 태그 괄호와 달리 이 등호는 '쿼리에 필요한 코드'라고 알려줘야 한다. 그때 사용하는 것이 <! [CDATA [...]]>이다.
사용법
<![CDATA[ 쿼리 내용 ]]>
XML에서 파싱 할 대상으로 인식하지 하지 않도록 그 구역을 지정해 주는 것이 CDATA이다. XML로 파싱을 원하지 않는 구간의 시작에 <! [CDATA [ 를 붙여주고 구간의 끝에 ]]>를 추가하면 해당 구역이 파싱 되지 않도록 "문자열"로 설정된다.
작성예시
<select id="test" resultType="sampleDTO">
<![CDATA[
select * from test where id < 5;
]]>
</select>
그렇다면, 모든 쿼리에서 CDATA를 해주는 것이 좋을까?...? <! [CDATA [...]]> 사용하는 경우 동적 쿼리문을 사용할 수 없기 때문에 쿼리문 전체가 아닌 특수문자가 포함된 코드에만 <![CDATA[...]]> 사용해야 한다.ᐟ.ᐟ
뭐든 넘치지 않고, 적당히 적재적소에 맞게 하는 것이 BEST✨라는 것을 알지만 너무 어렵다ㅎㅎ..
끝.
'개발.log > database' 카테고리의 다른 글
[Mysql][MariaDB] 서로 다른 테이블 동시에 UPDATE 하는 법/다른 테이블을 참조하여 UPDATE 하는 방법 (0) | 2023.09.20 |
---|---|
[ORACLE] PL/SQL(Procedural Language/SQL)이란? (0) | 2022.12.16 |