개발.log/database

[Mybatis][Mysql] <[![CDATA[…]]> 사용법/CDATA 꼭 써야하나?/XML Parser 문자열인식

개발하는 주디씨 2023. 9. 20. 10:21

 

백엔드 프로젝트를 하면 쿼리를 작성하고 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✨라는 것을 알지만 너무 어렵다ㅎㅎ.. 

 

끝.