%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4

2020-07-31
필자는 마이크로서비스 아키텍처 Microservice Architecture (이하 MSA) 기반으로 커머스 시스템을 만들고 있다. MSA에서 어려운 점 중 하나는 데이터 일관성을 유지하는 일 이다. 예를 들어 주문 프로세스(결제, 주문 원장 기록, 재고 차감 등등)는 모두 성공하거나 하나라도 실패한다면 이전 상태로 되돌아가야 한다. 모놀리틱 아키텍처 Monolithic Architecture 와 관계형 데이터베이스를 사용하는 전통적인 시스템은 데이터베이스 트랜잭션을 사용하여 데이터 일관성을 보장한다. 반면 마이크로서비스마다 데이터베이스를 따로 사용하는 MSA는 데이터베이스 트랜잭션만으로 보장이 안된다. 왜냐하면 통합된 하나의 데이터베이스를 사용하지 않기 때문이다. 물론...
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 웹 애플리케이션...
2019-10-17
아침에 출근했더니 동료 가 나에게 링크 를 하나 던지며 이렇게 말했다. 위 블로그가 어제 말한 오퍼레이션 캐쉬 설명하는것 같은데 한번 검토해주실수있을까요? Why duplication isn’t always a bad thing in micro-services CTO님이 데이터 중복이 필요할 때가 있다고 설파하던 기억이 난다. 그 당시 대부분의 개발자들이 못알아듣는 눈치였는데, 역시 사람들이 배워서 써먹는 데에는 자기만의 시간이 있다. 귀로 듣거나 책으로만 읽어서는 알 수 없고, 자기 삶에서 그 장면을 만나야 한다. 반갑게도...
2019-09-10
비동기 메시지를 사용하여 상호 간에 통신하는 방식을 메시징 Messaging[1] 이라고 부른다. 마이크로서비스 환경에서 비동기 처리 시 보통 카프카 Kafka 나 래빗엠큐 RabbitMQ 같은 메시지 브로커 Message Broker 를 사용하여 메시징을 구현한다. 아래와 같이 마이크로서비스들이 메시징을 통해 협업하여 주문을 처리한다고 가정해보자. OrderService는 주문 상태 이벤트(예. ORDER_CREATED, ORDER_CANCELLED 등)를 메시지 브로커에 발행하고 이벤트에 관심 있는 서비스가 구독하여 처리한다. 주문 상태 이벤트의 발행은 두 가지로 구분할 수 있다....
2019-08-26
먼저 아래와 같은 객체 모델이 있다고 가정해 보자. 하나의 Order(주문)는 여러 개의 LineItem(주문 품목) 가지고 각 LineItem은 하나의 Product(상품)에 의존한다. [caption id="attachment_23384" align="alignnone" width="500"] 객체 모델[/caption] 특정 상품이 포함된 주문 목록은 어떻게 조회할 수 있을까? 가장 쉬운 방법은 객체 연관관계를 사용하는 것이다. 객체 그래프 탐색이라고 부르는 방식인데 Order 목록을 가져와 반복문을 돌려 LineItem이 특정 상품인지 확인하는 것이다. 당연히 이 방식은 Order가 많으면 많을수록 성능이 문제가 된다. 이런 문제를 해결하기 위해...
2019-08-06
지난 7월 18,19일 이틀에 걸쳐 진행된 Open Infrastructure & Cloud Native Days Korea 2019 행사에 발표자로 참여하면서 몇가지 세션을 들었습니다. 중국 개발자와 같이 발표를 해야 했기 때문에 발표 준비로 많은 세션을 듣지 못했지만 몇가지 세션을 들으면서 다음과 같은 점을 느꼈습니다. 많은 회사 또는 개발자들이 Docker나 Kubernetes 환경에 관심을 가지고 있다. 라인, 카카오, 네이버, SKT 등 큰 회사들은 Docker나 Kubernetes 환경에서 운영하고 있다. 작은 회사들은 관심은 많지만 아직 많이 적용되지 않는 것 같다....
2019-07-29
Open Infrastructure & Cloud Native Days Korea 2019 행사 에 다녀왔습니다. 좋은 발표가 많았지만 'MSA, K8S를 이용한 대륙의 서비스 개발 사례' 후기를 공유합니다. 이 글은 슬라이드의 내용보다는 청중으로써 필자가 받은 느낌을 위주로 썼습니다. 전체 발표 슬라이드는 아래 링크에서 확인하실 수 있습니다. https://www.slideshare.net/babokim/open-infradays-2019msak8s?fbclid=IwAR3E0Rk_7IMsHYH5bKtL3WLD0mMKG4K9SoK48J9kjF4f4RKFaRNmMfLJhyk 어떤 발표였나? 발표는 아래와 같은 주제로 진행되었습니다....
2019-05-16
최근 한 전통 산업과 인터넷 서비스를 결합한 비즈니스를 수행하고 있는 회사에 마이크로 서비스라는 주제로 강의를 다녀 왔습니다. 이 회사뿐만 아니라 많은 회사에서 마이크로 서비스 아키텍처의 적용을 고려중이거나 이미 적용하고 있는 상황입니다. Popit에는 다양한 주제의 글이 있는데 그 중 마이크로 서비스 아키텍처에 대한 다양한 글이 있습니다. 다만 여기저기 흩어져 있어 한번 정리할 필요가 있을 것 같아 이번 글에서 기존에 등록된 글을 정리해 보겠습니다....
더보기