본문 바로가기

도서/스프링으로하는 마이크로서비스 구축

(9)
Spring Cloud Eureka 이전에 작성한 마이크로서비스 아키텍처에 대한 내용에서 언급했듯이 마이크로서비스는 기존의 모놀리식 환경과는 다른 문제점들을 해결하기 위해서 몇 가지 디자인 패턴이 있다고 소개했었습니다. 자세한 내용은 아래 링크를 참고해 주세요. 마이크로서비스 아키텍처(MSA) 란?개요현재 이커머스 B2B 솔루션 서비스를 제공하고 있는 회사에 재직 중에 사내에서 기존의 레거시 시스템을 MSA로 구축을 위한 움직임을 조금씩 보이고 있는 것 같아 그 변화에 합류하기 위해 MSA jminc00.tistory.com 이번 포스팅은 '마이크로서비스 디자인 패턴' 들 중 서비스 검색(Service Discovery)이라는 주제에 대해 학습하고 실습한 내용을 공유해 볼 예정입니다.서비스 검색(Service Discovery) 란 무엇이..
Messaging System - Apache kafka 이번 포스팅은 저번 포스팅에 이어서 두 번째 주제인 Event Driven Sysmtem 중 두 번째 주제인 메시징 시스템과 kafka에 대해 정리해보려고 합니다.Event Driven SystemEvent Driven System 이란?메시징 시스템 - KafkaCQRS 패턴 이번 포스팅을 위해 많은 글과 영상 등을 보면서 중구난방 했던 정보들을 체계적으로 정리하기 위해서 많은 노력이 있었던 것 같습니다. 일반적으로 kafka가 뭐지?라는 식으로 구글링을 하면 대뜸 토픽, 소비자/생성자, 브로커, 클러스터 등 개념에 대한 설명이 난무했습니다. 저 단어들이 핵심 단어이라는 것은 나중에서야 알게 되었습니다. 그 이유는 먼저 메시징 시스템이라는 전반적인 이해가 필요했기 때문입니다. 대부분의 포스팅 글 들은 ..
Event Driven System 이란? 이번 포스팅은 저번 포스팅에서 언급한 것처럼 두 번째 주제인 Event Driven Sysmtem에 대해 정리해보려고 합니다. Spring Reactor - 동기 vs 비동기, 블로킹 I/O와 논블로킹 I/OEvent Driven System다만 이번 주제의 내용에서 다룰 내용이 많고 복잡해서 포스팅을 세 개로 나눠서 작성하려고 합니다. Event Driven SystemEvent Driven System 이란?CQRS 패턴메시징 시스템 - Kafka 이번 포스팅은 Event에 대해 공부한 내용을 작성해보려고 합니다. 물론 Event에 대한 내용에 대해 더 알고자 교재 말고도 Designing Event-Driven Systems-Concepts and Patterns for Streaming Servi..
Spring Reactor - 동기 vs 비동기, 블로킹 I/O vs 논블로킹 I/O 이번 장의 주제는 리액티브 마이크로서비스로, 중요하게 다룰 주제는 크게 두 가지로 다음과 같습니다. Spring Reactor - 동기 vs 비동기, 블로킹 I/O와 논블로킹 I/OEvent Driven System두 주제가 모두 내용이 방대하고 난이도가 있어서 포스팅을 두 개로 나눌 예정입니다. 첫 번째 주제인 Spring Reactor - 동기 vs 비동기, 블로킹 I/O와 논블로킹 I/O 에 대해 학습한 내용을 정리해보려고 합니다.리액티브 마이크로서비스 리액티브 마이크로서비스란, 리액티브 프레임워크를 적용한 마이크로서비스를 의미합니다. 리액티브 프레임워크는 논블로킹(Non-Blocking) + 비동기 API 기술을 사용하며 사용자의 반응성을 중시하는 프레임워크를 의미합니다.  논블로킹과 비동기에 대..
동시성 문제와 해결 개요교재에서는 애플리케이션 수준에서 동시성 문제를 해결하기 위해서 @Version 어노테이션을 사용해서 문제를 해결하고자 했습니다.  @Version 어노테이션은 낙관적 락킹 방법 중 하나로, 특정 데이터에 대해서 DB에 저장된 데이터의 버전 정보와 요청에 의한 버전 정보를 비교하고 두 값이 일치하지 않았을 때 stale data로 분류하여 데이터의 수정을 방지하는 방법을 의미합니다. 각 용어에 대한 설명이 다소 부족한 것 같지만 자세한 내용은 아래에서 추후에 설명하고자 합니다. 이번 포스팅에서는 동시성 문제란 무엇이며,  낙관적 락킹 방법을 포함한 다양한 동시성 해결 방법에 대해 정리해보려고 합니다. 동시성 문제가 왜 아찔한가현재 사내에서는 여러명의 사용자가 동시에 작업을 요청하는 경우가 빈번하게 발생..
Spring REST Docs, API 문서화 이번 포스팅에서는 책에서 소개한 내용과는 조금 다른 내용으로 포스팅하려고 합니다. 책에서는 API 문서화를 위한 오픈소스로 Spring Fox를 사용했지만 더 이상 spring fox에 대한 지원을 하지 않는다는 내용을 확인하고 다른 API 문서화를 위한 오픈소스를 찾아보기로 했습니다.   API 문서화를 위한 다양한 오픈소스들이 있지만 제가 선택한 방법은 Spring REST Docs입니다. 해당 오픈소스를 선택한 이유에 대해서 SpringFox와 비교해서 설명하면 다음과 같습니다. Spring REST Docs 테스트 실행시 정적으로 API 문서를 생성합니다. SpringFox는 런타임 시에 동적으로 API를 생성하는데 API 정의가 자주 바뀌는 게 아니라면 정적으로 문서를 생성하는 것이 효율적이라고..
도커를 사용한 마이크로서비스 배포 이번 포스팅은 저번 챕터에서 구현한 자바 애플리케이션을 도커 환경에서 실행하는 방법에 대해 학습한 내용을 토대로 글을 작성해보려고 합니다. 글은 도커가 가상머신에 비해 좋은 점과 도커 환경에서 자바 애플리케이션을 실행할 때의 문제와 해결방법을 중심으로 포스팅했습니다. 도커 vs 가상머신도커와 가상머신(Vritual Machine)은 모두 호스트 OS로부터 애플리케이션을 격리하고 배포하는 기술이지만 각각의 장단점을 갖고 있습니다. 도커를 사용하는 것에 제법 익숙해졌지만, 그 효용성에 대해 제대로 정리한 적은 없는 것 같다는 생각이 들었습니다. 도커는 분명 가상머신에 비해 다양한 장점을 갖고 있는 건 부정할 수 없는 사실입니다. 먼저 가상머신과 비교해서 도커의 장점에 대해 정리하자면 다음과 같습니다.   도..
공조 마이크로서비스 이전에 작성한 포스팅에서는 마이크로서비스의 장단점과 디자인패턴에 대해서 정리했습니다. 이번 포스팅에서는 해당 쳅터의 핵심 내용들에 대해 정리해보려고 합니다.  모든 소스코드는 오픈되어 있어서 누구나 참고할 수 있도록 되어있습니다! 골격 마이크로서비스 기본 적인 틀은 위 이미지와 같으며, 각 프로젝트의 역할을 정리하면 다음과 같습니다. api API 정의 - Java Interface를 활용해서 RESTFul API를 설명합니다. Model 정의 - 각 요청과 응답에 매핑되는 클래스를 정의합니다.util 마이크로서비스가 공유할 헬퍼 클래스를 정의합니다. microservices 각 마이크로서비스의 집합으로 두가지 케이스로 분류됩니다. 복합 서비스 - 발신 요청을 처리하는 통합 컴포넌트를 정의합니다. pr..

반응형