Back-End/MSA
[Cloud Native] 분산 시스템의 기초 개념들
비둘기 책을 읽고 정리한 글입니다 분산 시스템이란? 분산 시스템은 개별 컴퓨터들이 네트워크로 연결되어서 하나의 컴퓨터로 보이는 시스템이다. 분산 시스템의 8가지 일반화 오류 네트워크는 안정적이다 네트워크는 언제든지 불안정해질 수 있다. 서비스들은 서로 다른 장비에 존재하기 때문에 잠재적인 네트워크 장애에 대응할 수 있도록 어플리케이션을 설계해야 한다. 네트워크 지연이 없다 넓은 의미의 네트워크 지연은 데이터를 받을 때까지 걸리는 시간을 의미한다. 서로 다른 장비에 있는 서비스들 간의 통신은 네트워크 지연이 반드시 존재한다. 네트워크 호출, 네트워크 통신 횟수를 줄여야 한다. 클라이언트와 가까운곳에 데이터를 두도록 한다. 이를 위해 캐싱, CDN, 멀티리전 배포 등을 활용할 수 있다. Pub/Sub 방법을..
[MSA] 리액티브 마이크로 서비스 패턴
마이크로 서비스 아키텍처에도 디자인 패턴이 존재한다. 그 중 하나가 바로 '리액티브 마이크로 서비스 패턴'이다. 리액티브 패턴은 기존 마이크로 서비스의 문제를 해결하기 위해 등장한 패턴으로 서비스간의 의존도를 낮추는것이 가장 큰 목적이다. 보통의 경우에 서비스 간의 통신을 위해서 RESTful API와 같은 블로킹 I/O 모델을 사용해 동기식 통신을 구현하곤 했다. 동기식 블로킹 I/O를 사용하면 서비스가 요청을 처리하는 동안 운영체제의 스레드를 점유하게 된다. 동시 요청 수가 증가하거나 요청과 관련된 컴포넌트가 증가하면 운영체제의 가용 스레드가 부족해 응답 시간이 늦어지거나 서버가 중단되는 문제가 발생할 수 있다. 따라서 동기식 블로킹 I/O를 과도하게 사용하면 마이크로서비스 시스템에 에러가 발생하기 ..
RabbitMQ, Redis, Kafka의 특징
마이크로서비스에 대한 비동기 통신을 구현하기 위해서 메시지 브로커를 선택해 사용할 수 있다. MSA를 구축하기 위해서 메시지 브로커가 무엇인지를 이해하고, 많은 브로커들 중 어떤걸 사용할 지도 정해야 한다. 그래서 메시지 브로커중에서 가장 많이 쓰이는 RabbitMQ, Redis, kafka를 비교, 정리해보려고 한다. RabbitMQ, Redis, Kafka 같은 기술을 메시지 플랫폼이라고 한다. 메시지 플랫폼은 2가지 종류로 나뉘어진다. 메시지 브로커 이벤트 브로커 이 둘을 간단히 설명하면 다음과 같다. 메시지 브로커는 이벤트 브로커의 역할을 할 수 없지만, 이벤트 브로커는 메시지 브로커의 역할을 할 수 있다. 메시지 브로커 대규모 메시지 기반 미들웨어 아키텍쳐에서 사용되어왔다. 미들웨어란? 애플리케..
모놀리식 & 마이크로서비스 아키텍처(분산 시스템)
모놀리식 아키텍처 소프트웨어가 하나의 결합된 코드로 구성되기 때문에 초기에 설계가 용이하다. 개발도 단순하고, 코드 관리도 간편하다. 일단 개발이 단순하고 코드 관리가 간편하다는 것은 엄청난 장점이다. 하지만 서비스 운영중에 수정사항이 많아질 경우, 특정 서비스에서의 수정이 다른 서비스에 영향을 미쳐서 2개의 서비스가 모두 고장나버리는 사태가 발생할 수 있다. 또한 서비스가 점점 성장하면서 기능이 추가될수록 단순했던 서비스간의 관계도가 매우 복잡해 질 수 있다. 만약에 네이버웹툰, 네이버 증시, 네이버 메일, 네이버 페이 등의 서비스들이 모두 모놀리식 아키텍처로 한데 묶여있다고 가정해보자. 위 서비스들은 서로 관련이 전혀 없다고 볼 수 있다. 웹툰이 망가진다고 해서 네이버 메일을 못보내면 말이 안되는 것..
MSA(MicroService Architecture)에 대한 내 생각 한 줌
백엔드 개발에 관심이 있다면 한 번쯤은 들어봤을 MSA 백엔드에 대해서 공부할수록 느껴지는 게 있다. 프레임워크를 능숙히 사용하고, 코드를 우아하게 짜고, 새로운 신기술을 사용하는 것.. 모두 정말 중요하다고 생각한다. 나는 스프링, 장고 같은 프레임워크를 깊이 이해해서 요구사항을 빠르고 쉽게 해결하고 싶다. 불필요한 중복을 최소화하면서 객체지향적인 코드를 짜고 싶다. 새로운 신기술을 도입해서 기술적 역량을 확장시키고 싶다. 근데 위 3가지를 연습하면서도 최종적으로 바라봐야 할 '숲' 같은 존재는 인프라/아키텍쳐 부분이라고 생각한다. 같은 프로젝트를 수행하더라도 더 확장하기 쉽고, 변경이 쉬운 구조를 설계하는 사람이 되고 싶다. 그런 설계 방식 중 하나가 마이크로 서비스 아키텍처이다. 한 단계 더 깊이 ..