컨퍼런스&기술블로그
글또
-
중복 결제 대응
간단하게 글을 써보려 합니다. 결제 중복 처리에 대해서입니다.결제 관련 작업을 하다 보니 여러 글을 보게 되었고, 재밌어 보여서 저도 글을 작성해 보면 좋겠다고 생각했습니다. 들어가며결제에 관해서 고객과 회사의 깨지지 말아야 하는 신뢰는 무엇일까요?고객은 정확한 금액을 결제하고 회사는 물건, 서비스를 제공해야 합니다.만약 이중으로 결제가 되거나, 물건이 오지 않는다면 회사에 대한 불신이 조금씩 싹트고 누적된다면 이탈을 하게 될 수 있습니다.이번 글에서는 이중 결제를 막는 법에 대해서 이야기해보려 합니다. 문제엘리베이터 버튼을 여러 번 눌렀다고 해서, 엘리베이터가 여러 번 오나요?여러 번 눌렀어도 엘리베이터는 한 번만 옵니다.결제도 동일해야 합니다.여러 번 요청되어도 한 번만 결제되어야 합니다.이를 '..
-
결제 시스템 전환하기
들어가며안녕하세요.이번에는 기존 결제 시스템의 문제를 해결하고, 새로운 결제 시스템을 설계한 이야기를 해보려 합니다. 일반적인 온라인 결제는 구매 시점에 즉시 결제가 이루어집니다. 반면 저희 서비스는 Buy Now Pay Later(BNPL) 모델을 기반으로, 먼저 주문을 생성하고 이후에 정산하는 구조였습니다.이 구조는 유연하다는 장점이 있었지만, 결제 불이행 시 회사가 직접 리스크를 부담해야 한다는 문제가 있었습니다.이러한 이유로 점차 즉시 결제 모델을 도입하게 되었고, 그 과정에서 다양한 문제를 마주하게 되었습니다.이 글에서는 그 문제와, 이를 해결하기 위해 어떤 구조를 선택했는지 정리해 보겠습니다. 기존 결제 구조기존 결제 시스템은 BNPL(Buy Now Pay Later) 모델을 기반으로 설계되..
-
2025 회고
들어가며 안녕하세요. 이번에도 한 해를 마무리하며 회고를 작성해보려 합니다. 작년과 마찬가지로, 일상과 커리어 두 가지 카테고리로 나누어 정리해 보았습니다. 일상 철인 삼종 이번 연도에 잘했다고 말할 수 있는 것이 있습니다작년 회고 때 해보고 싶다고 말했던 철인삼종에 도전한 것인데요.서울시에서 주최하는 행사였고, 초급 코스로 도전해 완주했습니다.한강 물이 차가워서 수영할 때 많이 당황했던 기억이 나네요. 이번 연도에도 주최한다면 또 도전해 볼 생각입니다.재밌었어요. 수영 중급반 접영을 잘하지 못해 초급반에 오래 머물러 있었는데, 이제 중급반으로 올라가게 되었습니다.접영은 아직도 몇 바퀴만 돌아도 힘들어 자세가 무너지지만, 이전보다는 할 만해졌습니다.수영을 다닌 지도 어느덧 3년이 되어가는데, 미..
-
커스텀 메트릭 사용해보기
들어가며 안녕하세요.이번 글에서는 모니터링에 대해 다뤄보려고 합니다. 최근 회사에서 여러 서비스와 연동되는 기능을 개발하던 중, 기능 테스트 과정에서 “테스트 과정에서 보이는 수치들을 시각화할 수 있다면 검증이 훨씬 수월하겠다”는 생각을 하게 되었습니다.우선 1차적으로는 그라파나를 활용해 모니터링 환경을 구축했습니다. 각 DB에 직접 연결해 SQL을 조회하고, Mixed 패널을 통해 여러 DB 데이터를 한 화면에서 확인할 수 있도록 했습니다. 하지만 이 방식에는 빈틈이 있었습니다. 구현 상 DB에서 하드 딜리트된 데이터는 로그로만 남아 검증에서 누락되는 경우가 있었고, 이를 추적하기가 까다로웠습니다.이 문제를 해결하기 위해 로그로 남는 정보들을 메트릭화할 수 없을까 고민하다가 알게 된 것이 바로 커스텀 ..
-
리팩토링
회사에서 문제 많던 기능이, 흘러흘러 결국 나에게 왔다.기능을 정상화하라는 요구였다.중요한 기능이지만, 릴리즈 때마다 말썽을 부렸고, 예측 못 한 문제들이 자주 터졌다 먼저 해야 할 일을 정리했다.기능이 정확히 뭔가?지금까지 어떤 문제들이 있었나?이전 작업자가 정리해둔 문서나 이슈는 없나?코드를 보면서 전체 흐름을 파악하고, 예외 케이스들을 정리한다 기능이 무엇인가?이건 리팩토링 이전에 일을 대하는 자세이기도 하다.왜 이 기능이 필요한지, 어떤 문제를 해결하려는 건지 이해하는 게 중요하다.요구사항을 다른 해결방안으로 풀 수도 있기 때문이다.기능과 요구사항을 충분히 이해하고 있으면, 비슷한 문제를 다시 만났을 때 훨씬 빠르게 대응할 수 있다.나중에 유지보수할 때도, 기능의 컨텍스트로 쉽게 돌아올 수 있다..
최신 글
-
2026.08.31 설계TIL 2026.08.31 21:56
이번에 책을 내셔서, 구매를 했다.요즘 결제에 빠져있기 때문에 결제를 어떻게 처리하셨을까, 궁금해 그 부분을 빠르게 읽어보았다.나머지 부분은 처음부터 읽고 있다.나와 다르게 생각하는 부분도 있고, 동일하게 생각하는 부분도 있었다. 책 소개글에 아래의 영상을 보는 것을 추천한다길래 보고 있다. https://www.youtube.com/watch?v=HCB8jgAfG44 대출 시스템에 대한 이야기이다.신청과 실행등을 개념, 도메인으로 뺀다. 또 연체라는 개념이 나온다.단순 신청, 대출, 연체 등등을 상태로 관리하지 않고 개념으로 뺀다.나라면 어땠을까? 도메인에 대한 이해도 없고, 영상만 봤을 때는 어느 정도 상태로 빼지 않았을까? 하는 생각이다. 뭐 도메인으로 빼는게 더 좋았을 수 있으나, 나의 생각이 거..
-
2026.08.25 Lease base lockTIL 2026.08.25 22:20
https://en.wikipedia.org/wiki/Lease_(computer_science) Lease base lockTTL이 있는 lock이다. 일반적으로 잠금 mutex는 결국 공유 자원을 직렬화하는 것이다. DB의 Row lock이 예시일 수 있다. 잠금을 획득한 후, 잠금을 해제해야 한다. 이것의 단점은 잠금 이후의 잠금 주체가 죽었을 때 잠금을 해제하지 못한다는 단점이 있다.DBMS는 연결 스레드가 종료될 때 획득한 잠금을 해제하는 로직들이 들어있다. 이뿐 아니라 필요한 경우가 있다. 분산락의 개념을 도입할 때도 필요하고, 더 많은 예제를 보면 master와 slave 구조에서도 master의 생존 여부를 체크하는 heartbeat에서도 사용된다고 한다. 이번 경험에서 사용한 부분은 동시..
-
2026.08.11,20,25 shopify skip lockTIL 2026.08.25 00:31
We replaced Redis with MySQL for inventory reservations—and it scaled (2026) - ShopifyHow we used SKIP LOCKED, composite primary keys, and connection visibility to hit our scale targets.shopify.engineering 재고를 단일 컬럼에서 관리하는 것에서 완벽히 벗어났다. Skip lock을 사용했다. 재밌는 시도이다. 그럼 왜 이런 선택을 했을까. 결국 서드파티와의 트랜잭션을 묶기 힘들기 때문이다. 여러 방법들도 있지만 단일 db에서의 동작은 간단하다. 트래픽은 어떠한가? 이야기는 없지만 더 높은 속도일까? 다만 이 글에서는 속도의 문제가 아닌 트랜잭..
-
2026.08.22 대사TIL 2026.08.22 22:09
결제 처리 후 PG와의 대사 처리를 하는 것이 좋다.모든 결제를 상태 기반으로 처리하기 때문에 구멍이 없을 수 있지만, 대기 상태의 주문을 우리가 버퍼 시간을 둔 후 판단하에 종료시켰을 때, 만약 나중에 PG에서 성공 처리가 되었을 경우가 있을 수도 있다.우리가 결제 5분 처리가 되었을 때 조회 후 실패로 처리했다지만 만약 5분 뒤 PG에서 조회가 된다면 문제가 되지 않을까.실로 이상한 구현이지만, PG의 구현을 알 수 없기 때문에 확답을 못한다. 대사는 이런 예외 케이스에 대응하기 위해 존재한다.당연하게도 PG들은 날짜기반의 조회 API를 제공해 주기 때문에 쉽게 대사를 진행할 수 있다.날이 넘어가는 경계에 있는 결제건들이 있기 때문에 00시에 바로 대사를 진행하기보다는 일정 시간 이후에 진행하는 것이..
-
2026.08.21 MOURINHOTIL 2026.08.22 00:04
조제 모리뉴, 지금 시청하세요 | 넷플릭스 공식 사이트유수 클럽들의 사령탑으로 활약하며 세계 최고의 축구 감독으로 자리매김하기까지, 조제 모리뉴의 전설적인 여정을 되돌아본다. 우승 트로피를 들어 올린 수많은 순간과 생생한 뒷이야기를 담www.netflix.com이번에는 기술과 관련 없는 이야기.무리뉴. 학창시절 축구게임을 좋아했기에, 모를 수 없는 이름이다.무리뉴는 거듭 증명하고 어려운 상황의 해결사로 등장한다.짧은 회사 생활동안 비슷한 동료가 있었는데, 그가 있는 동안 회사에 많은 부분을 기여하고 쿨하게 나갔다.힘겨운 곳, 새로운 곳에서 목표를 설정해 달성시킨다.나 또한 그러한 모습을 갈망한다. 목표를 이루고 기여하는 것.