
백엔드
컬리 공통 암호화 모듈의 동시성 이슈 해결하기
두줄요약
컬리 공통 암호화 모듈에서 간헐적인 `newPosition > limit` 버퍼 오류를 분석했습니다. 스레드 간 공유 버퍼가 원인이었고 `duplicate()`로 동시성 문제를 해결했습니다.
문제 상황
- 컬리 공통 암호화 SDK 모듈에서
newPosition > limit버퍼 오류가 간헐적으로 발생 - 1:1 문의 서비스에서 전화번호 마스킹 실패로 빈 칸 노출
- 암호화 로직 공통 모듈 특성상 다른 서비스로의 영향 가능성 존재
원인 분석
ByteBuffer.get(byte[])호출 시 내부적으로 position 갱신 과정에서 예외 발생- 일부 스레드에서
clear()이후에도 position 값이 0이 아닌 32로 관측 - 공유된 버퍼 객체를 여러 스레드가 동시에 사용한 동시성 문제로 판단
해결 방법
synchronized적용과duplicate()활용 방안 검토- 성능 저하를 피하기 위해 스레드별 지역 버퍼를 만드는
duplicate()방식 선택 asReadOnlyBuffer()권장 가이드와 동일한 원리로 thread-safe 보장
