#test
-
카드 충전 수수료 차감 로직 원자적 처리 구현
feat: 결제대행사 카드 충전 수수료 차감 로직 추가 로직을 구현했음.
읽기 → -
가상계좌 수수료 후정산 전환과 충전 상태 머신 정합성 확보
가상계좌 충전 수수료, 결국 후정산이 답 결제대행사 가상계좌로 잔액 충전하는 흐름에서 수수료 처리가 계속 어긋났음. 충전 시점에 수수료까지 한 번에 차감하니까 회계팀에서 "이게 왜 여기서 빠져?"가 반복됨. 가상계좌 건당 부과되는 입금/발급 비용은 **이번 정산 시 차감되는 게 아니라 익월에 별도 청구**되는 구조. 그동안 코드는 충전 직후 머천트 잔
읽기 → -
결제대행사 웹훅 멱등 처리와 명세 불일치 극복기
결제대행사 API 연동, 명세서부터 다시 읽음 결제대행사 연동 작업 들어가면서 받아둔 명세서 PDF를 처음부터 다시 정독함. 이전에 한 번 훑었을 때는 "어차피 표준 PG 흐름이지" 싶어서 대충 봤는데, 막상 코드로 옮기려니까 필드 단위에서 막히는 부분이 한둘이 아니었음. 특히 헷갈렸던 포인트: - 승인 응답과 webhook 통보 메시지의 필드 이름
읽기 → -
결제 플랫폼 보안 취약점 9건 한꺼번에 잡은 후기
코드 리뷰 한 방에 9건 결제 플랫폼 코드 리뷰 받은 거 한꺼번에 정리함. CRITICAL 2건, HIGH 4건, MEDIUM 3건. 충전/이체/파트너 관리/API 키 인증 구간이 골고루 걸렸음. 생각보다 한 군데 몰려 있어서 작업 자체는 반나절 컷. | 등급 | 영역 | 핵심 | |---|---|---| | CRITICAL | 이체 | 금액 검증 누
읽기 → -
메신저 공유 URL 파싱 오류를 난독화 설정으로 해결
v3.1 릴리즈 회고 릴리즈 노트 정리하다가 메신저 공유 URL 파싱이 자꾸 깨졌던 게 떠올라서 한번 정리함. 무엇이 문제였나 기존 추출 로직은 정규식 한 줄로 끝냈었는데, 메신저 쪽에서 공유 포맷을 살짝 바꾸면서 ?p= 뒤에 추가 파라미터가 붙기 시작했음. 사용자 입장에선 같은 링크인데 앱에서만 못 받아내는 상황. - 원본 URL 끝에 &sha
읽기 → -
결제대행사 콜백이 봇 필터에 막혀 정산 PENDING이 쌓인 문제 해결
외부 결제대행사 콜백이 차단당했음 이커머스 운영 중에 결제대행사 콜백이 봇 차단 필터에서 4xx로 떨어지는 사고 발생. 사용자 결제는 정상 완료됐는데 콜백이 막히니까 결제 플랫폼 내부 상태가 PENDING에서 안 넘어감. 정산 화면 보다가 발견했으니 운영 모니터링이 한 박자 늦은 것도 같이 발견됨. 원인 파악 - 봇 차단 필터를 외부 노출 API 경
읽기 → -
파트너 정산 계좌 등록의 은행명 파싱 오류와 증권사 무한 로딩 수정
무슨 일이 있었음 파트너 정산용 계좌 등록 흐름에서 은행 응답 파싱이 들쭉날쭉해서 고치는 작업. 같은 은행이라도 응답 페이로드 표기가 케이스마다 달라서 매칭이 깨지는 문제였음. 거기에 한 파트너가 증권사 CMA를 등록하려다 무한 로딩에 빠졌다는 제보까지 들어옴. 핸들러가 증권사를 은행처럼 해석하다가 멍 때리는 동선. 깨졌던 표기 케이스 | 응답
읽기 → -
은행명 표기 불일치로 매일 누락되던 정산 30건 해결
은행명 매칭이 깨진 사연 결제대행사에서 내려주는 은행명 표기가 우리 내부 표준이랑 미묘하게 달라서 정산이 한 건씩 누락되던 이슈. 지역 농축협·새마을 계열에서 특히 자주 터졌음. 같은 은행인데 "새마을", "MG새마을", "새마을금고" 이렇게 세 가지 표기로 들어오는 게 발단. 문제의 코드 기존 매칭이 완전 일치 기반이라 한 글자라도 어긋나면 미매
읽기 → -
결제 알림 신규 파트너 추가
배경 결제 알림을 메신저로 수신해서 내부에 반영하는 모듈이 있음. 이번 v3.1에서 두 가지를 손봤음. - 신규 파트너 은행을 수신 대상에 추가 - 채팅방 URL 검색 로직 개선 기존 로직이 prefix 매칭이라 신규 파트너의 URL 패턴을 못 잡고 빠지는 문제가 있었음. 알림이 들어와도 어느 파트너 채널인지 식별이 안 되니 그대로 드랍됨. 신규
읽기 → -
결제 큐에서 재시도 초과 건이 무한 반복되던 문제 해결
무한 재시도 지옥에서 빠져나옴 큐에서 작업 꺼내올 때 retry_count 조건이 빠져있었음. max_retry 도달한 작업도 계속 다시 집어가는 구조였음. 결제대행사 응답 지연으로 한 번 실패한 건이 영원히 큐를 떠다녔던 거. 어떻게 발견했는지 파트너 정산 모니터링 보다가 실패 누적이 비정상적으로 많은 걸 발견함. 같은 트랜잭션 ID가 로그에 수
읽기 → -
파트너 충전 입금자명 미스매칭 건수 감소
버그 발견 파트너 충전 매칭 로직에서 입금자명 미스매칭이 늘고 있었음. 입금 알림 SMS 파싱 결과를 보니 입금자명 자리에 "잔액", "수수료", "농협" 같은 엉뚱한 토큰이 박혀 있었음. 매칭 실패 → 수동 처리 큐 적체 → CS 부담 증가의 깔끔한 도미노. 기존 로직 한계 파서가 "입금" 키워드 뒤 첫 토큰을 무조건 입금자명으로 가정하고 있었음
읽기 → -
입금 유틸을 은행별 전용 핸들러로 분리해 확장성 개선
왜 손댔나 공용 입금 유틸 한 파일에 모든 은행 HTTP 호출이 쌓여있었음. 새 은행 붙일 때마다 같은 파일 열어서 if 분기 추가하는 구조. 이번엔 한 은행 케이스를 전용 핸들러로 떼어냈음. 변경 요약 | 항목 | 이전 | 이후 | |------|------|------| | HTTP 송신 위치 | 공용 유틸 | 은행별 전용 핸들러 | | 분기 방
읽기 → -
은행 입금 연동 오류 응답 파싱과 필수값 검증 개선
사건 요약 - 은행 파트너 입금 호출에서 간헐적 실패가 발생, 사용자 화면에는 "처리 실패"만 노출됨 - Step2 진입 시 일부 필수값이 누락된 채 호출되어 NPE 로 흐름이 끊김 - 운영팀이 원인 파악을 못해 같은 케이스를 반복 문의받았음 두 갈래로 손봄 입금 유틸의 응답 파싱과 Step2 입력 검증, 두 군데를 같은 변경에 묶었음. 응답 파싱은
읽기 → -
컴포넌트 스캔 범위 확장으로 터진 빈 이름 충돌 해소
서버가 안 뜬다 월요일 아침 출근하자마자 빌드는 통과했는데 기동 단계에서 컨테이너가 죽음. 로그 맨 아래 한 줄이 모든 걸 설명해줬음. ConflictingBeanDefinitionException: Annotation-specified bean name 'xxxController' for bean class [com.example.biz.XxxCo
읽기 → -
결제 플랫폼 빈 이름 충돌로 서버 부팅 실패 해결
빈 이름 충돌로 서버가 안 떴던 날 이커머스 결제 플랫폼 백엔드를 띄우는데 갑자기 부팅 실패. 로그 끝까지 내려가지도 않고 컨텍스트 초기화 단계에서 죽음. 처음엔 단순 의존성 문제인 줄 알았는데, 메시지를 천천히 읽어보니 빈 이름이 중복됐다는 얘기였음. 원인 찾기 스택을 위로 거슬러 올라가면서 확인한 것들: - 같은 도메인의 컨트롤러 두 개가 동
읽기 → -
결제 플랫폼 서버 기동 실패, 컨트롤러 빈 이름 충돌로 해결
서버가 안 뜸 오전에 결제 플랫폼 모듈 한 군데 손보고 로컬에 띄우는데 기동 자체가 실패함. 로그 끝부분만 잘라보면 "동일한 빈 이름이 이미 정의되어 있다"는 메시지가 떡하니 박혀 있었음. 코드는 컴파일 통과했는데 컨테이너 초기화 단계에서 막힌 케이스. | 증상 | 원인 | 영향 | |---|---|---| | 컨테이너 초기화 실패 | 동일 이름 빈
읽기 → -
가상계좌 입금 알림을 다중 은행 채널로 확장해 누락 해소
은행 알림에서 가상계좌 입금 URL을 자동으로 받아오는 경로에 손댔음. 기존엔 메신저 푸시 한 채널만 후킹해서 처리했는데, 일부 은행은 자체 푸시/SMS로만 결과를 쏴주니 누수가 생김. 파트너 화면에서 "입금됐는데 왜 반영 안 됨?" 문의가 한 주에 두어 건씩 올라왔음. 무엇을 바꿨나 주요 시중은행 두 곳(A, B) 알림을 별도 경로로 캡처하도록 텄음
읽기 → -
입금 큐 성공 후 주문 매칭이 자동으로 안 되던 문제 해결
큐가 끝났는데 주문은 안 잡히던 문제 큐 처리 결과가 SUCCESS로 떨어지는데, 정작 주문 매칭은 자동으로 안 돌던 케이스를 잡음. 결제대행사에서 입금 통지가 온 뒤 큐가 멀쩡히 처리되고 SUCCESS 상태까지 도달했는데, 그 다음 단계인 "어떤 주문에 이 입금을 붙일지" 매칭이 별도 스케줄러나 수동 호출에 의존하던 구조였음. 증상 - 입금 통지
읽기 → -
연락처 송금 결제수단 추가로 콜백과 매칭 로직 전면 재작성
연락처 송금이 결제수단으로 들어왔을 때 이커머스 결제 흐름에 새 결제수단이 하나 끼어들었음. 기존 카드/가상계좌/포인트 옆에 "연락처 송금"이 들어오는 작업. 처음엔 단순히 결제수단 enum 하나 늘리는 줄 알았는데, 까보니 매칭 로직이 본체였음. 매칭이 진짜 일이었음 연락처 기반이라 "보낸 사람 번호"와 "받을 사람 번호"가 정확히 매핑돼야 함
읽기 → -
결제 승인 거짓 성공으로 인한 정산 오류 수정
거짓 성공(false SUCCESS) 한 건이 부른 사고 결제대행사 두 곳의 응답 핸들러에서 **승인 실패인데 SUCCESS 로 찍히는 케이스**를 잡았음. 정산 다음 날 파트너 잔액이 비어있다는 문의로 발견. 회고 정리. 무엇이 문제였나 핸들러가 결제대행사의 raw 응답을 파싱할 때, 일부 에러 케이스에서 결과 코드가 비어 들어옴. 비어있으면 디
읽기 →