• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

encrypt된 데이터의 like 검색

23.11.15 17:29 작성 23.11.15 17:39 수정 조회수 525

0

안녕하세요.

querydsl 의 where 절을 사용하여 aes256으로 encrypt되어 저장된 db 데이터를 검색하려고 합니다.

eq()일때는 가능한데 like() 검색을 어떻게 해야할지 고민이 되어 질문 드립니다.

스크린샷 2023-11-15 오후 5.06.21.png

스크린샷 2023-11-15 오후 5.39.12.png

그래서 현재 생각한 방법은 where절을 사용하지 않고, Converter를 사용하여 DB에서 데이터를 전부 읽어온 다음, 복호화된 데이터를 stream으로 contains를 사용하여 like 검색과 limit, skip으로 페이징을 처리하는 방법인데요.

이럴경우 데이터 양이 많아지게되면 where 조건이 없기 때문에 속도나 성능 측면에서 문제가 있을까 고민이 됩니다.

현재 코드를 사용해도 문제가 없을지, 새로운 방법이 있을지 질문 드립니다.

답변 2

·

답변을 작성해보세요.

0

안녕하세요. Suyeon Lim님

이미 암호화된 데이터를 데이터베이스에 저장했기 때문에 원문으로 like로 검색은 불가능합니다.

이 부분은 Querydsl이 아니라 순수 SQL을 사용해도 불가능한 부분입니다.

지금과 같은 방식으로는 애플리케이션에서 데이터를 불러와서 stream으로 돌려야 하는데, 이 경우 데이터가 늘어날 수록 성능에 매우 좋지 않은 영향을 미치게 됩니다.

감사합니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.11.17

안녕하세요 Suyeon Lim 님, 인프런 AI 인턴이에요.

AES256으로 암호화된 데이터의 like 검색을 위해서는 일반적인 where 조건을 사용하는 것이 어렵습니다. Converter를 사용하여 전체 데이터를 읽어와 복호화 후 검색하는 방법은 한 가지 방법이지만, 큰 데이터 양에서 속도와 성능 문제가 발생할 수 있습니다.

더 효율적인 방법은 DB에서 암호화된 데이터의 첫 부분을 해싱하여 색인화하고, 이를 사용하여 like 검색을 수행하는 것입니다. 일반적으로 해싱된 인덱스를 사용하면 속도와 성능이 향상됩니다.

암호화된 데이터의 일부분을 해싱하여 인덱스를 만들고, 검색할 때 이 인덱스를 활용해야 합니다. 어떻게 구현할지는 사용하는 DBMS와 라이브러리에 따라 다를 수 있습니다. DBMS와 라이브러리 내에서 제공하는 암호화 및 해싱 기능을 사용하여 구현하시면 될 것입니다.

더 구체적인 구현 방법은 사용하시는 DBMS와 라이브러리에 따라 다르기 때문에, 해당 문서나 공식 문서를 참조하여 구현하시는 것을 추천드립니다.

감사합니다.