목록 보기
컬리 공통 암호화 모듈의 동시성 이슈 해결하기
백엔드

컬리 공통 암호화 모듈의 동시성 이슈 해결하기

마켓컬리
마켓컬리
2022년 9월 25일

두줄요약

컬리 공통 암호화 모듈에서 간헐적인 `newPosition > limit` 버퍼 오류를 분석했습니다. 스레드 간 공유 버퍼가 원인이었고 `duplicate()`로 동시성 문제를 해결했습니다.

문제 상황

  • 컬리 공통 암호화 SDK 모듈에서 newPosition > limit 버퍼 오류가 간헐적으로 발생
  • 1:1 문의 서비스에서 전화번호 마스킹 실패로 빈 칸 노출
  • 암호화 로직 공통 모듈 특성상 다른 서비스로의 영향 가능성 존재

원인 분석

  • ByteBuffer.get(byte[]) 호출 시 내부적으로 position 갱신 과정에서 예외 발생
  • 일부 스레드에서 clear() 이후에도 position 값이 0이 아닌 32로 관측
  • 공유된 버퍼 객체를 여러 스레드가 동시에 사용한 동시성 문제로 판단

해결 방법

  • synchronized 적용과 duplicate() 활용 방안 검토
  • 성능 저하를 피하기 위해 스레드별 지역 버퍼를 만드는 duplicate() 방식 선택
  • asReadOnlyBuffer() 권장 가이드와 동일한 원리로 thread-safe 보장

댓글 0

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...