Exposed, MySQL, Escape 문자 처리 문제, 디버깅으로 해결!

by DD
1년 전
조회수 9

ExposedMySQL 환경에서 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 타입 대신 값을 사용할 수 있도록 수정 요청했다. 오픈소스 기여를 통해 문제 해결에 기여하고, 데이터 무결성을 확보할 수 있다.

Exposed에서 도망 간 Escape를 찾습니다 (feat. MySQL)

댓글 0

첫 번째 댓글을 남겨보세요!