유 영모(slackbeck)https://www.linkedin.com/in/youngmo-yoo-aa78b4131

2020-09-11
분산 컴퓨팅 분야에서 일관성을 말할 때 자주 언급되는 것이 Eventual Consistency 이다. 간단하게 말하자면 단기적으로 일관성을 잃더라도 결국에는 일관성을 유지하는 모델 을 뜻하는데 이 용어는 더글라스 테리 외 에 의해 만들어졌고 워너 보겔스 에 의해 대중화되었다고 한다. [1] 일관성을 데이터 관점으로 좁혀보면 데이터 정합성 整合性 으로 이어진다. 전통적으로 관계형 데이터베이스에서는 테이블 간 데이터 정합성을 지키는 방법으로 기본 키 Primary Key...
2020-08-11
최근 중국 전자 상거래 동향 중 하나는 모바일 거래 와 해외 직구 가 크게 성장하고 있다는 것이다. [1] 이런 상황에서 필자는 중국인들이 모바일을 통해 한국 상품을 구매할 수 있는 역직구몰을 만들고 있다. 모바일이라고 하면 안드로이드나 아이폰 앱을 떠올릴 수 있겠지만 앱 스토어 같은 곳에서 다운로드해 설치해야 하는 불편함과 서비스를 이용을 위한 회원 가입을 시키는 것은 쉬운 일이 아니다. 또한 앱을 개발하는 입장에서 안드로이드와 아이폰 코드를 함께 만들고 유지하는 것 역시 쉽지 않다. 위와 같은 문제를 해결하기 위해 선택한 것이...
2020-07-31
필자는 마이크로서비스 아키텍처 Microservice Architecture (이하 MSA) 기반으로 커머스 시스템을 만들고 있다. MSA에서 어려운 점 중 하나는 데이터 일관성을 유지하는 일 이다. 예를 들어 주문 프로세스(결제, 주문 원장 기록, 재고 차감 등등)는 모두 성공하거나 하나라도 실패한다면 이전 상태로 되돌아가야 한다. 모놀리틱 아키텍처 Monolithic Architecture 와 관계형 데이터베이스를 사용하는 전통적인 시스템은 데이터베이스 트랜잭션을 사용하여 데이터 일관성을 보장한다. 반면 마이크로서비스마다 데이터베이스를 따로 사용하는 MSA는 데이터베이스 트랜잭션만으로 보장이 안된다. 왜냐하면 통합된 하나의 데이터베이스를 사용하지 않기 때문이다. 물론...
2020-06-08
들어가기 앞서 이 글을 쓰는데 도움을 주신 cp949 님, 김형준 님 그리고 장재휴 님에게 감사드립니다. 필자는 커머스 코드 자산화 개발일지 를 연재하고 있다. 구현 과정에서 Golang을 기반으로 마이크로서비스 아키텍처를 차용하였고 대부분의 마이크로서비스(회원, 장바구니, 결제, 주문)의 데이터 저장소로 MongoDB 를 사용했다. MongoDB를 사용한 이유는 크게 두 가지였다. 집합적 데이터 모델 객체/관계형 패러다임 불일치 예를 들면 주문 도메인에서 주문을 아래와 같이 객체 모델링 할 수 있다. 그리고 여러 가지 이유로...
2020-04-03
지난 글 에서 오퍼를 장바구니에 담았다. 이제는 결제다. 대부분의 온라인 상점에서 결제는 전자 지급 결제 대행 서비스 Payment Gateway [1] (이하 결제 대행 서비스, PG)와 연동하는 것을 의미한다. [caption id="attachment_27047" align="alignnone" width="512"] 출처 : http://internationalpaymentgateway.net/international-payment-gateway-vietnam/[/caption] 온라인 상점이 결제를 위해 다양한 카드사나 은행과 직접 계약을 하고 각각의 시스템을 연동하는 것은 매우 비효율적인 작업이다. 결제 대행 서비스는 다양한 결제사와의 인터페이스 작업을 대신해 주고 일관된 API를 제공한다. 따라서 온라인 상점은 결제 대행 서비스하고만 계약하고 인터페이스 하면 되니 효율적이다. 아래는 웹 사이트에서 결제할 때 마주치는 결제 대행 서비스 예시 화면이다. [caption id="attachment_27048" align="alignnone" width="600"]...
2020-03-18
지금까지 고객이 구매할 수 있는 오퍼 Offering 를 만들고 [1] 쇼핑몰에 노출하였다. [2] 그다음으로 해야 할 일은 오퍼를 장바구니에 담는 것이다. ShoppingCartService는 마이크로서비스 모듈로서 장바구니를 책임진다. Mall은 ShoppingCartService의 API를 이용하여 오퍼를 장바구니에 담는다. 불변성과 의존성 장바구니는 여러 개의 장바구니 아이템을 담을 수 있다. 여기서 오퍼라 하지 않고 ‘장바구니 아이템’이라고 부른 이유는 장바구니에는 오퍼뿐만 아니라 다른 것도 담을 수 있다는 추상적인 의미가 담겨 있다....
2020-03-12
소프트웨어를 배포할 때 비로소 가치는 생겨납니다. - The Nature of Software Development , 26 쪽 소프트웨어는 사용자를 만날 때 진정한 가치가 생긴다. 내가 만든 소프트웨어가 사용자를 만날 수 있도록 서버에 배포해보자. 지금까지 세 개의 모듈을 만들었다. product-service : 상품 API를 제공하는 서비스 product-admin : 상품 관리자 서비스 mall : 사용자 쇼핑몰 모듈을 각기 다른 서버에 배포할 수도 있겠지만 내가 선택한 방법은 단일 서버에 모든 모듈을 배포 하는 것이다....
2020-03-05
지난 이야기 지난 글 에서는 상품을 유연하게 다루기 위한 시도로 오퍼 Offering 개념을 구현하였다. 개발 주기 목표 오퍼는 존재만으로는 가치가 없다. 고객이 보고 구매함으로써 비로소 가치가 생긴다. 그래서 이번 개발 주기의 목표는 고객이 방문할 수 있는 쇼핑몰(이하 Mall)을 만들고 오퍼를 노출하는 것으로 정했다. Mall은 별도로 존재하는 웹 애플리케이션으로 고객이 상품을 보고 장바구니에 담고 구매할 수 있는 온라인 쇼핑몰이다. Mall 웹 애플리케이션...
2020-02-26
지난 이야기 지난 글 에서는 개발 일지를 쓰게 된 배경을 설명했고 간단하게 상품 마이크로서비스를 구현해 보았다. 상품을 보다 유연하게 다루기 몇 년 전 함께 일했던 기획자가 상품(Product)을 분리하자는 제안을 했다. 상품에는 잘 변하지 않는 요소(바코드, 제조사, 원가 등)와 자주 변하는 요소(판매 조건 등)가 있는데 상품 하나로 다루다 보니 유연성이 떨어진다는 것이었다. 유연성이 떨어진다는 말은 무엇을 의미하는 것일까? ' 커머스 혹은 유통 도메인 설계에 대한 연작...
2020-02-20
필자가 가지고 있는 자산 중 하나는 전자상거래(이하 커머스) 도메인에서의 개발 경험이다. 오픈소스가 세상을 바꾸어가는 모습을 지켜보면서 개인의 보이지 않는 경험이라는 무형의 자산 으로 머무는 것이 아나라 구체화하여 코드라는 유형의 자산 으로 만들고 싶은 욕구가 있었다. 밈 Meme ‘페르시아 왕자’라는 책 이 있다. 동명 게임의 개발 일지인데 어린 시절 이 게임에 푹 빠져 밤을 지새우며 했던 기억이 아직도 생생하다. 갑자기 웬 게임일까? [caption id="attachment_25949" align="alignnone" width="409"]...
더보기