본문 바로가기

전체 글678

우리는 왜 무엇인가 해야 할까 : 개발 3년 차에 다시 꺼내 본 뜨거운 여름의 마음 최근 고쿠분 고이치로의 『우리는 왜 무엇인가 해야 할까』(박영대 옮김, 유유, 2026)를 읽었다. 부제는 「성과 중심 사회, 목적에 얽매이지 않는 삶은 어떻게 가능한가」다. 이 책이 문제 삼는 것은 단순히 ‘열심히 사는 삶’이 아니다. 우리가 하는 거의 모든 일을 목적과 성과의 언어로 설명하게 된 삶에 가깝다. 책을 읽는 것은 더 나은 사람이 되기 위해서고, 운동을 하는 것은 더 건강한 사람이 되기 위해서다. 새로운 것을 배우는 것은 경쟁력을 갖추기 위해서고, 일을 열심히 하는 것은 더 좋은 평가와 보상을 받기 위해서다. 무엇을 하든 그 끝에는 자꾸만 하나의 질문이 따라붙는다. 그래서 무엇을 얻을 수 있는가. 저자는 이런 사회에서 우리가 끊임없이 무언가를 해야 한다는 감각에 사로잡힌다고 말한다. 읽는.. 2026. 8. 24.
락을 걸었더니 서른 명이 쿠폰을 못 받았습니다: 유니크 제약과 조건부 쓰기가 안에서 하는 일 1. 1인 1매를 지키려는 세 가지 코드쿠폰 이벤트를 만들었습니다. 조건은 두 개입니다. 한 사람이 한 장만 받을 수 있고, 전체 100장까지만 나갑니다. 처음 짠 코드는 이랬습니다. if (couponRepository.existsBy(eventId, userId)) { throw new AlreadyIssuedException();}couponRepository.save(new Coupon(eventId, userId)); 이 코드는 요구사항을 만족시키지 못하죠. 확인과 저장 사이가 벌어져 있어서, 두 요청이 동시에 들어오면 둘 다 통과합니다. 한 사람이 32번 누르게 하고 재봤습니다. 조회 후 삽입 (락 없음) 발급 32장 / 29장 / 7장 (회차마다 다름) 한 장만 나가야 .. 2026. 8. 8.
[시스템 설계 - 보상] Ep.7 취소했는데 쿠폰이 돌아오지 않습니다 0장. 주문을 취소했더니 손님이 쿠폰까지 잃었습니다손님이 주문을 취소합니다. 결제가 취소되고, 재고가 돌아오고, 적립 예정이던 포인트가 회수됩니다. 마지막으로 쓴 쿠폰을 돌려줄 차례입니다. 그런데 그 쿠폰은 어제 만료됐습니다. 주문할 때는 살아 있었습니다. 돌려줄 방법이 없습니다. 손님은 주문도 잃고 쿠폰도 잃었습니다. 에러 로그는 없습니다. 코드는 시킨 대로 했습니다. 넷은 돌아갔고 하나만 안 됐습니다. 쿠폰이 유별난 놈이었던 걸까요. 그러면 되돌린다는 건 대체 무슨 뜻이었을까요?1장. 되돌리기는 원래 일의 반대가 아닙니다결제를 취소해 보신 적 있으실 겁니다. 카드사에 매출이 넘어가기 전에 누르면 취소로 끝나고, 넘어간 뒤에 누르면 환불이 됩니다. 그 차이는 날짜가 아니라 매출이 넘어갔는지입니다. .. 2026. 8. 6.
[시스템 설계 - 경계] Ep.6 주문 상태 값을 하나 추가했더니 매장에 돈이 더 나갔습니다 0장. 주문 상태 값을 하나 추가했더니 매장에 돈이 더 나갔습니다주문팀이 환불 대기 상태를 하나 추가합니다. 주문 상태 컬럼에 값 하나가 늘었습니다. 새벽 3시에 도는 정산 배치의 조건은 이랬습니다. WHERE status != 'CANCELED' 취소된 것만 빼고 전부 정산한다, 지금까지는 맞는 조건이었습니다. 그날 밤, 아직 환불이 끝나지 않은 주문들의 대금이 매장 계좌로 나갑니다. 다음 달 정산에서 회수해야 합니다. 매장 사장님들에게 연락을 돌려야 합니다. 주문팀은 자기 도메인에 값을 하나 늘렸을 뿐입니다. 정산팀은 조건문을 그대로 두었던 것이구요. 둘 다 맞게 일했는데 돈이 틀어졌습니다.그러면 저 값의 뜻은 누가 정하고 있었을까요?1장. 그 테이블은 처음엔 옳았습니다사고의 출발점은 테이블 하나입니.. 2026. 8. 5.
[시스템 설계 - 격리] Ep.5 하나가 느려지면 전부 멈춥니다 0장. 결제사 한 곳이 느려졌는데 회원가입 메일이 안 나갑니다외부 결제사 한 곳의 응답이 느려집니다. 장애가 발생해 아예 다운된 것은 아닙니다. 30초쯤 뒤에 응답이 오긴 옵니다. 에러가 쏟아지는 상황도 아니므로 겉보기에는 시스템이 평온하게 돌아가는 듯합니다. 그런데 몇 분 뒤 모니터링 대시보드에 뜨는 현상은 결제 실패가 아닙니다. 갑자기 신규 회원가입 처리가 멈춥니다. 메인 화면의 상품 목록이 뜨지 않습니다. 곧이어 서버의 헬스 체크가 실패하기 시작하고, 로드 밸런서는 살아있는 서버를 타겟 그룹에서 하나씩 빼버립니다. 결제와 아무 상관 없는 기능이 전부 죽어버립니다. 여기서 이런 의문이 듭니다. 결제사가 느려졌는데 왜 회원가입이 안 되지? 무슨 상관이 있었던 걸까요?1장. 왜 무관한 것까지 멈추나결제사.. 2026. 8. 1.