Exposed, MySQL, Escape 문자 처리 문제, 디버깅으로 해결!
by DD
1년 전
조회수 9
Exposed와 MySQL 환경에서 Escape 문자 처리 오류 발생
디버깅을 통해 Exposed의 Upsert DSL에서 Escape 미처리 원인 파악
SELECT & (INSERT or UPDATE) 방식으로 우회, Exposed 이슈 제보 및 해결
Exposed Upsert DSL의 Escape 미처리 원리
Exposed의 Upsert DSL에서 INSERT 부분은 값을, UPDATE 부분은 Expression 타입을 사용한다. MySQL Connector는 값은 Escape 처리하지만, Expression은 순수 문자열로 전달한다. 따라서, UPDATE 시 Escape 처리 누락으로 인해 문제가 발생했다.
Escape 처리 회피 전략: SELECT & (INSERT or UPDATE)
문제 해결을 위해 SELECT 쿼리를 먼저 실행하여 데이터 존재 여부를 확인한다. 데이터가 없으면 INSERT, 있으면 UPDATE를 수행하는 방식으로 변경했다. QPS 증가 및 동시성 문제 발생 가능성을 고려하여 DBA와 협의 후 적용했다.
근본적인 해결책: Exposed 이슈 제보 및 개선 요청
가장 근본적인 해결책은 Exposed 측에 Escape 처리 기능 개선을 요청하는 것이다. Upsert DSL에서 Expression 타입 대신 값을 사용할 수 있도록 수정 요청했다. 오픈소스 기여를 통해 문제 해결에 기여하고, 데이터 무결성을 확보할 수 있다.
댓글 0
첫 번째 댓글을 남겨보세요!