Backend Team Leader 2024-08
트러블 처리 시스템화
· 구매한 기프티콘에 문제가 생겨 사용하지 못하는 사용하지 못하는 상황을 처리할 때 이를 시스템화하여 처리 효율을 높이는 프로젝트입니다.
· 트러블은 구매한 기프티콘에 문제가 생겨 사용하지 못하는 상황입니다. 문제를 해결하기 위해서 대부분 CX팀의 휴먼 리소스로 처리되고 있고 시스템은 사실상 관련 데이터를 기록하는 수준으로만 제공되고 있습니다. 악성 판매자의 판매대금을 회수하기 위해서는 CX팀의 리소스가 필요한데 이것이 트러블 처리에 많이 쓰이고 있습니다.
· 저는 시스템화를 위한 데이터 구조 개선, 판매자로부터 입금된 결과 확인, 앱 내 판매자 트러블 확인 및 소명 기능, 판매자 귀책 관련 고지 시스템화 프로젝트의 세부 기획과 백엔드 작업을 맡고 있습니다.
오퍼월 기능 적립 시스템 개선
· 기프티콘을 구매할 때 포인트가 상품금액보다 초과 사용되는 문제가 발생했습니다.
· 원인은 소액의 많은 머니를 사용처리 함에 있어 처리 시간이 오래 걸리게 되었고, 지연으로 인해 AWS SQS 메시지 표시 제한 시간을 초과하게 되어 중복으로 처리되었던 것이였습니다. 우선은 임시로 메시지 표시 제한 시간을 늘려 조치하였습니다.
· 포인트가 소액으로 많이 적립되는 것을 문제로 정의한 후 확인 해보니 최근 릴리즈 된 오퍼월 기능에서 적립된 건들이였으며, 소액으로 많이 적립되지 않도록 방향을 잡았습니다.
· 그러나 적립이 될 때가 문제가 아니라 사용이 될 때가 문제였으며, 이에 하루에 한번씩 오퍼월 기능에서 적립된 건 들을 묶음 처리하는 시스템을 설계하여 구현하였습니다.
기프티콘 환불 시스템 개선
· 포인트의 종류에는 충전금과 적립금이 존재합니다. 구매한 기프티콘을 환불할 때 포인트를 사용하였다면 종류와 상관없이 무조건 적립금으로 재지급을 진행합니다. 재무팀에서 환불 진행시 충전금은 충전금으로 적립금은 적립금으로 재지급 될 수 있도록 시스템 개선 요청이 있었습니다.
· 이에 저는 환불 진행 시 재지급할 니콘머니의 금액을 계산할 때 주문서에서 사용된 니콘머니를 조회하여 부분환불도 고려하여 순차적으로 적립금, 충전금을 유저에게 재지급 할 수 있도록 로직을 수정하였습니다.
· 기존에 있었던 니콘머니 대체 지급 환불 옵션에 대해서도 충전금으로 재지급 될 수 있도록 수정하였습니다. 수동 니콘머니 지급 및 수동 PG 결제취소 기능도 추가하였습니다.
· 니콘머니 지급 및 PG 결제취소 로직이 하나의 비즈니스 로직에서 처리되고 있었으나, 한쪽의 처리 실패가 다른 처리에 영향을 주지 않도록 하고 재처리 및 롤백이 각 비즈니스 단위별로 명확히 관리 될 수 있도록 개선했습니다.
Product Team Leader 2024-04 ~ 2024-08
쿠폰 월렛 기능
· 기프티콘 매입량 증대와 서비스의 새로운 가치를 제공하기 위해 시작된 프로젝트로, 보유한 기프티콘을 등록해 만료일 알림을 받고, 상태나 메모를 기록할 수 있는 기능을 MVP로 제공함으로써, 기존에 앨범이나 카카오스토리 등에 따로 저장하며 번거롭게 관리하던 기프티콘 관리 문제를 해소하고자 했으며, 등록한 기프티콘의 구매 및 판매를 자연스럽게 유도하는 플로우로 디벨롭하려고 했습니다.
· 기프티콘 등록 및 관리 프로세스의 데이터 구조 및 API 설계를 담당하였습니다. AWS SQS 멀티 컨슈머 구조와 소켓 통신 구조를 구축하고, Google Vision 및 FASTTEXT 모델을 이용하여 기프티콘 이미지 리딩 시스템을 구현하여 바코드, 유효기간, 상품 종류 등의 정보를 자동으로 추출하고 기록할 수 있도록 했습니다.
개발 B팀 리더 2022-08 ~ 2024-04
서버 성능 최적화
· 이상치를 확인하고 개선 전 후 파악하기 위해 데이터독 대시보드를 제작하였습니다.
· p95 기준 1.13s 걸리던 API 요청을 인덱스를 이용해 400ms로 단축시켰습니다.
· AWS RDS connection pool을 조정하여 각 인스턴스 당 약 300개 연결에서 120개 수준까지 줄였습니다.
· 앱 진입 시 항상 요청하는 쿼리를 튜닝하고 로직을 개선하여 p95 기준 700ms에 300ms로 단축시켰습니다.
장바구니
· 유저가 여러품목을 구매하려면 여러번 결제해야 하는 불편하여 해결하고 주문당 구매액을 늘리기 위한 목적을 가진 프로젝트입니다.
· 장바구니 데이터 구조 및 기능 설계, 구현을 담당하였습니다.
· 프로젝트 리더로서 유저의 행동을 파악하고 문제를 해결하기 위해 앰플리튜드 설계도 진행하였습니다.
복수 쿠폰 동시 구매
· 유저가 여러 개의 기프티콘을 구매하려면 여러 번 결제를 진행해야 하는 불편함을 해결하기 위한 기능입니다. 또한, 새로 구축한 시스템에서 발생하고 있던 결제 완료 후 구매 실패 문제와 중복 판매 문제를 함께 해결하는 것을 목표로 진행했습니다. 이를 위해 복수 개 구매, 니콘머니와 복합 결제에 대한 환불 정책과 기능 개선을 함께 진행했습니다.
· 데이터 구조는 기존에 설계되어 있었으므로, 프론트엔드에서 유저가 구매 개수를 선택할 수 있도록 수정하는 한편, 복수 쿠폰 구매 시 중복 판매 문제가 더 부각될 수 있음을 예상하고 이를 해결하기 위해 기프티콘 예약 시스템을 추가로 구축했습니다.
· 기프티콘 예약 시스템은 AWS SQS FIFO 단일 컨슈머 구조로 설계했습니다. 주문 완료 후 예약 요청을 메시지 큐로 전달하는 방식으로 처리하며, 단일 컨슈머 방식 특성상 처리 속도와 퍼포먼스 최적화가 중요했습니다. 이를 위해 예약 대상 기프티콘 조회 쿼리에 인덱스를 추가하고, 생성 및 업데이트 쿼리는 병렬 처리로 개선하여 처리 속도를 향상시켰습니다.
· 또한, 환불 정책에도 변화가 필요했습니다. 기존에는 주문서 하나당 기프티콘 하나였기 때문에 환불 로직이 단순했지만, 복수 쿠폰 구매가 가능해지면서 부분 환불 처리와, 특히 PG 결제와 니콘머니 복합 결제 시 어떤 결제 수단을 우선 환불할지에 대한 정책이 필요해졌습니다. 저는 서비스 내 유저의 잔존율을 높이는 것을 목표로, 니콘머니를 우선 환불하는 정책을 CX팀과 협의하여 적용했습니다.
실시간 재고 시스템 구축
· 기존에는 상품의 재고를 크론잡으로 1시간에 4번 업데이트하였습니다. 이로 인해 실시간 재고를 제공하지 못해 상품 탐색과 구매 과정에서 유저가 불편을 겪고 있다고 판단했습니다.
· 이를 개선하기 위해 트리거를 이용해 특정 상태로 변경된 재고를 별도의 테이블에 관리하도록 하고, 상품 테이블과 재고 관리 테이블을 JOIN해 사용할 수 있도록 설계했습니다. 이 기능은 우선 구매 시스템에 적용 후, 아이템 리스트 기능에도 확장 적용했습니다.
· 하지만 이 과정에서 조회 쿼리의 비용이 급격히 증가하고 RDS CPU 사용량이 급등하는 문제가 발생했습니다. 이는 상품 조회 시 다른 데이터들과 JOIN할 때, 재고 개수만큼 다른 데이터도 함께 JOIN되어 불필요한 데이터 처리량이 증가했던 것이 원인이었습니다. 이를 해결하기 위해 Eager Loading에서 Lazy Loading으로 변경하고, 쿼리 로직을 최적화하여 문제를 해결했습니다.
쿠폰 발생 시스템 연동
· 외부 발행사와 제휴하여 API 연동을 통해 쿠폰을 발급하고 유저에게 판매하는 시스템을 구축하였습니다.
· 발행 뿐만 아니라 취소, 사용 이력을 기록하는 시스템까지 구현하여 유저에게 더 많은 기능을 제공할 수 있는 기반을 마련하였습니다.
결제 시스템 재구축
· 기존 결제 시스템은 복잡한 로직과 강한 결합 구조로 인해 각 프로세스의 확장성과 유지보수에 어려움이 있었으며, 또한 데이터 구조의 한계로 인해 장바구니, 번들 상품과 같은 신규 구매 형태를 지원하기 어려운 문제가 있었습니다.
· 이러한 문제를 해결하기 위해 결제 시스템을 분리 설계하여, 주문/결제/발송 처리 등 각 프로세스를 책임 단위로 분리함으로써 시스템의 확장성과 유지보수성을 개선했습니다.
· 또한, 프로젝트 진행 과정에서 기존 구매 및 결제 시스템의 복잡한 플로우를 상세히 분석하고, 문제 상황별 처리 방안을 문서화하여 팀원들과 공유함으로써 팀 내 도메인 이해도를 높이고, 신규 기능 개발 및 장애 대응 속도를 향상시키려고 했습니다.
Squad Leader 2021-07 ~ 2022-07
오프라인 캐시백
· 오프라인 캐시백은 외부 금융 서비스 API를 이용하여 유저의 소비 데이터를 기반으로 선택한 브랜드에서 결제 시 캐시백 지급하는 서비스입니다.
· 신규 BM 발굴을 위해 사내 최초의 스쿼드 형태의 조직을 구성하여 프로젝트 진행하였고 저는 백엔드 엔진니어로
합류하여 기술적인 문제를 해결하였습니다.
· 후에 프로젝트 매니저도 겸직하여 프로젝트의 전반적인 방향 설정 및 관리하는 경험을 하였습니다.
개발팀 2021-01 ~ 2021-07
장기미연락 악성유저 관리 시스템 구축
· 사용이 불가능한 쿠폰을 판매한 악성유저에 대해 장기간 응답이 없는 유저를 CX팀에서는 기존에 엑셀로 관리해오고 있었습니다.
· 이 부분을 CX팀과 협업하여 상태를 정의하고 프로세스를 시스템화하여 백오피스에 제공하였습니다.
· 추가적으로 일별 처리현황, 슬랙 메시지 전송 등의 편의기능을 제공하였습니다.
더보기