Pulse 게시 ·

Verifone 설계자, Kotlin 타입으로 결제 오류를 막은 사례 공개

JetBrains가 Verifone 설계자 Yuri Geronimus의 KotlinConf 발표를 소개했다. 그는 결제 명세의 식별자·상태·실패 조건을 타입으로 표현한 뒤 개발이 2.7배 빨라지고 코드가 약 30% 줄었다고 밝혔다. 인증은 결함 1건으로 첫 시도에 통과했으며, 기존 Java·C++ 시스템은 전면 재작성 대신 점진적으로 전환했다.

내용·출처 업데이트 · 2026. 10. 14. 오후 11:11

형식이 같은 가맹점·단말·매입사 식별자도 각각 value class로 구분해 인수 교환을 컴파일 단계에서 막는다.

외부 입력은 경계에서 검증하고, 필수 필드 누락은 조용한 기본값 대신 명시적인 실패로 처리한다.

sealed 타입과 else 없는 when으로 새로운 거래 상태가 추가될 때 수정할 위치를 드러낸다.

승인·위험·사기 검사가 모두 성공해야 하는 경우 coroutineScope를 사용하며, 일부 실패를 허용하는 알림 전파에는 supervisorScope를 사용한다.

타임아웃은 거래 실패와 구분해 모델링한다. 상위 시스템에서 이미 승인됐을 수 있어 단순 재시도는 중복 청구로 이어질 수 있다.

발표자는 기존 코드 개선·인수 테스트·품질 조건 검사·점진적 이전을 병행했다고 설명했다. 성과 수치는 발표자가 제시한 사례다.

식별자 혼동이나 누락된 상태 처리를 컴파일 오류로 드러내면, 코드 리뷰에서 결제 명세와 실제 동작을 비교하는 데 집중할 수 있다.

원문