글 목록
-
Study
커머스 프로젝트 DB 부하 문제
상품 정보와 같이 조회가 잦은 데이터의 집중 조회에 의한 DB 부하 문제입니다.현재 프로젝트에서 잦은 조회가 발생할 수 있는 데이터는 상품 카탈로그(상품 정보)와 재고, 두 가지입니다.상품과 재고는 변경 빈도, 일관성 요구 수준 차이 등의 이유로 일찌감치 분리되었습니다. 당연하게도 상품 정보는 쓰기보다 읽기 비중이, 재고는 읽기보다 쓰기 비중이 압도적으로 많은, 서로 다른 성격을 지닌 데이터입니다.재고와 같이 쓰기가 잦은 데이터에도 캐시는 적용할 수 있습니다. 그렇지만 쓰기 빈도가 높을수록 실제 데이터와 캐시가 일치하지 않는 정합성 문제가 있고, 정합성 완화를 위한 쓰기 전략을 사용하거나 만료 시간을 짧게 설정한다면 캐시 히트율이 떨어지는 문제가 있습니다. 현재 재고 도메인은 읽기에 비해 쓰기가 경로 비..
-
Study
커머스 프로젝트 이중결제 문제
결제 도메인에서 민감한 문제인 이중결제(멱등성)문제입니다. 결제 요청이 여러 번 도착하면 중복 결제가 발생할 수 있습니다. 서버에서는 이를 막기 위해, 멱등 키(Idempotency key)로 중복 결제를 방어합니다. 멱등 키의 매커니즘멱등 키로 결제 요청의 멱등성을 확보하는 매커니즘의 간단한 개요는 다음과 같습니다.클라이언트에서 결제 요청 시, 헤더에 멱등 키를 담아 보냅니다.서버는 요청을 받을 때, 멱등 키를 저장한 후 요청을 수행합니다. 이후 같은 멱등 키로 요청이 도착하면, 최초 처리 결과와 동일한 응답을 반환합니다. '동일한 멱등 키를 보낸다' 가 동일한 요청의 기준이기 때문에, 서비스 전체로 보면 '어떤 시점에 멱등 키를 발급할 것인가' 가 요청의 의도를 캐치하는 중요 포인트가 될 수 있습니다..
-
Study
커머스 프로젝트 재고 정합성 문제
재고 정합성 문제커머스 뿐만 아니라 개발 전체에서 아주 흔하게 마주치는 문제, 동시성 제어 문제입니다.이 프로젝트에서는 재고 100개가 있는 상품에 동시 주문이 200건 발생했을 때, 아무 조치도 없는 상황에서는 어떤 일이 발생하는지(문제), 문제를 해결하기 위한 방법으로 어떤 선택지가 있는지, 이를 고려하여 커머스 서비스에 적합한 방법을 선택할지 결정하고 측정을 통해 문제를 해결한 결과를 밝히려고 합니다. 오버셀재고 100개인 상품에 200건의 주문이 동시에 발생합니다. 아래는 오버셀을 재현하는 테스트 코드와, 오버셀이 발생한 결과를 나타냅니다. @Test @DisplayName("락이 없으면 차감이 유실되어 재고보다 많이 팔린다") void reproducesOversell() {..
-
Study
커머스 프로젝트를 시작하며
커머스 실전 프로젝트를 시작하며전부터 기술 학습 목적의 프로젝트는 의미없다고 생각했습니다. 정확히는 영양가 없다고 생각했고, 그래서 기술 학습만이 목적이었던 팀 프로젝트를 이력서에서 빼 버린 시기도 있었습니다.지금도 그 생각은 크게 변하진 않았습니다. 거기에는 여러 가지 피상적인 이유((개발자는 문제에서 출발해야 한다, 문제 없는 기술 깊이는 아무 도움이 되지 못한다.. 등)도 있지만, 근본적으로는 '공부를 위한 공부는 아무 영양가도 없다'는 생각과 경험 때문인 것 같습니다. 그럼에도 기술 학습 목적의 프로젝트를 시작한 이유는, 이제는 이 기술 학습에 의미를 부여할 수 있기 때문입니다.현실 세계의 문제를 모델링하고, 풀고, 운영에서 마주치는 문제를 이해하고 해결하기 위해서는 현상에 대해 화이트박스 수준으..
-
Study
심층 인터뷰로 제품 개선하기
가족아카이브 프로젝트를 만들고 서빙하면서, 피드백을 받고 이를 수용하는 과정에서 몇 가지 배운 것들이 있습니다. 이 글에서는 이에 대한 내용만 조금 다뤄볼까 합니다. 가족 아카이브는 제 프로젝트 중 유일하게 실제 사용자가 있고, 사용자로부터 불편을 피드백 받아 수용 → 재배포의 과정을 거친 의미있는 프로젝트입니다. 저한테 없던 유저 피드백 - 반영 사이클의 경험을 가져다 준 유일한 프로젝트였고, 그래서 이 경험 자체가 매우 소중하게 느껴졌습니다. 그래서 첫 번째 유저 피드백을 받으면, '이 소중한 피드백들을 모두, 하나도 빠짐없이 반영해서 사용자가 절대로 만족하는 서비스로 만들자' 는 생각에 부풀었습니다. 그리고 개발 초기, 아래 이미지와 같이 날것의 인터페이스를 가진 가족아카이브를 선보였습니다. 누..