728x90
반응형

전체 글 41

Kafka 개념, 구조

목차 Kafka 란 카프카는 링크드인에서 파편화된 데이터 파이프라인의 문제를 해결하기 위해 만들어졌다. 서비스 초기에는 데이터 사이즈가 크지 않고 파이프라인도 단순했지만, 시스템이 거대해지면서 데이터를 전달해야 할 노드의 수가 늘어났고 연결하는 시스템간의 복잡도가 매우 증가했다. 또한 MSA 를 채택하거나 기존 시스템을 마이그레이션하고, 연결해야 할 서비스들이 많아지고 처리해야 할 트래픽들은 높아지는데 장애 상황을 대비한 효과적인 대안들을 마련해야했다. 카프카는 대규모 데이터를 수집, 처리, 통합하기 위해 사용되는 이벤트 스트리밍 플랫폼이다. 이벤트는 소프트웨어 또는 응용 프로그램에서 식별하거나 기록하는 모든 유형의 사건, 작업 또는 변경사항을 의미하고 또 다르게 메시지라고 말하기도 한다. 예를 들어 회..

Redis 에 대해서 (세션, 캐시, 클러스터, 쿼리튜닝)

목차 이 글은 Redis7, SpringBoot2.7 기준으로 작성되었습니다. Redis 란? 레디스는 손쉽게 사용할 수 오픈소스 인메모리 저장소이다. 높은 성능을 가지고 다양한 곳에 활용할 수 있다. 관계형 데이터베이스와 다르게 테이블 구조가 아닌 String, Set, Map, Sorted Map 등 여러 데이터 저장소를 가지고 있어 유연성이 좋아 많은 기능들을 구현할 수 있고, 현대적인 서버 구조에서 세션 관리나 캐시는 빠질 수 없는 구성요소로 많이 이용된다. 많은 서비스들이 점점 더 속도가 빨라져야하고, 많은 유저의 트래픽을 감당 해야하는 상황에서 분산환경에서 캐시, 세션관리가 필수이고, 개발자는 개발하기 위한 기능에만 집중하고 데이터 저장과 읽기는 쉽게 구현하고, 문제가 생길경우 계층이 구분되어..

외부 서비스 연동 시 비동기 처리에 대해서

외부 서비스 연동 시 발생할 수 있는 상황 외부 서비스와 연동 시 외부 서비스에 대한 요청이나 응답에 지연이 생길 경우 운영하는 서비스의 전체적인 성능에 영향이 생기게 된다. 이 때 클라이언트의 요청 많아질 경우 서버에서는 해당 요청들에 대해 대기하는 상황이 발생하게 된다. 그렇게 되면 클라이언트는 응답이 빠르게 오지 않아 재요청을 발생시킬 수 있고 그렇다면 더 많은 대기가 발생할 수 있다. 외부 서비스 연동 결과를 즉각적으로 처리해야 하는가? 예를 들어 로그인을 하면 포인트를 적립하는 요구사항이 있다면, 로그인 로직에서 외부 포인트를 적립하는 서비스를 호출한다. 이후 로그인에 성공한 뒤 수 초 이내 포인트를 적립하는 서비스를 호출한다. 다른 예로 주문을 취소하면 푸시알림을 발송하는 요구사항이 있다. 주..

마이크로서비스 5개 배포 원칙

마이크로서비스 5개 배포 원칙 실행 격리 Isolated execution 부하가 발생하거나 배포를 할 때 마이크로서비스 간에 영향을 주면 안된다. 예를 들어 하나의 호스트에서 여러 마이크로서비스를 실행하게 되면 어떠한 서비스의 부하가 증가하게 되는 순간 다른 마이크로서비스들이 다 같이 성능이 저하되거나 혹은 마이크로서비스 배포를 위해서 리눅스 os 설정 등을 변경하게 되면 다른 마이크로서비스 배포에 영향을 준다거나 이런 상태를 해결하기 위해 마이크로서비스는 서로 격리된 환경에서 실행되어야 한다. 가상화 기술, 컨테이너, FaaS 등을 사용하면 격리가 쉬워진다. 물리적 장비를 사용하면 강하게 격리를 할 수 있고, 컨테이너를 사용하면 상대적으로 빠르게 격리를 할 수 있다. 자동화에 초점 Focus on a..

IT/아키텍처 2023.01.26

마이크로서비스 핵심 개념

마이크로서비스 6가지 핵심 개념 독립적 배포 핵심 개념 중에 한 가지만 골라야 한다면 '독립적 배포' 가 가장 중요하다. 다른 마이크로서비스를 변경/배포하지 않으면서, 마이크로서비스를 변경, 배포, 출시할 수 있어야한다. 이를 위해 마이크로서비스 간에 결합도를 낮춰야 한다. 즉 서비스 간에 명시적이고, 잘 정의되어 있고 안정적인 API 명세가 필요하다. 비즈니스 도메인을 중심으로 모델링 도메인을 기준으로 서비스 경계를 정의한다. 즉, 하나의 마이크로서비스가 특정 기능에 필요한 전체를 구현한다. 이렇게 되면 새 기능을 출시하는게 쉬워진다. 여러 마이크로서비스의 기능을 조합해서 새로운 기능을 구현하는게 쉬워진다. 한 기능이 여러 마이크로서비스에 걸쳐 있으면 기능을 출시하는 비용이 올라간다. 서비스 간에 조율..

IT/아키텍처 2023.01.26

클린코드에 대해서

클린코드란? 깨끗한 코드는 한 가지를 제대로 한다. 깨끗한 코드는 절대로 설계자의 의도를 숨기지 않는다. 단순하고 직접적이다. 코드를 일으면서 짐작했던 기능을 각 루틴이 그대로 수행하는 코드이다. 중복 줄이고, 표현력 높인다. 즉, 사람이 이해하기 쉬운 코드를 만드는 것이다. 클린코드의 주요 원칙 코딩 표준, 아키텍처 표준 및 설계가이드를 준수하기 단순한 것이 효율적이다. 복잡함을 최소화하기 디자인 패턴 SOLID 원칙 Simple Responsibility Principle 하나의 클래스는 하나의 책임만 가져야 한다. Open/Close Principle 클래스는 확장에 대해 열려 있어야 하고, 변경에 대해서는 닫혀 있어야 한다. Liskov Substitution Principle 서브 클래스는 메인..

IT/코드 2023.01.20

Mysql 정규화, 인덱스, 트랜잭션, Lock, 동시성에 대해서

목차 대용량 데이터, 트래픽 처리에 대해 서버 개발자의 핵심은 데이터다. 대용량 시스템이 어려운 이유는 많은 양의 데이터에서 시작된다. 어떻게 많은 양의 데이터를 안정적으로 삽입, 갱신, 조회 할 것인가? 이 글에서는 대용량 시스템에 대한 전반적인 이해와 RDBMS 관점에서 대용량 데이터 처리를 위한 정규화, 인덱스, 트랜잭션, 동시성 제어 를 알아볼 것이다. 대용량 데이터, 트래픽 처리는 왜 어려울까? 여러 이유가 있겠지만, 몇 가지를 들어보면 핵심은 하나의 서버 또는 데이터베이스로 감당하기 힘든 부하 때문이다. 이로 인해 다수의 서버와 데이터베이스를 활용하게 되는데, 이를 마치 하나인 것처럼 동작하도록 하기 위해 여러 최적화 기법이나 기술들이 활용된다. 여러개의 서버에서 유입되는 데이터의 일관성을 보..

서브넷마스크란? 간단한 서브네팅 방법

서브넷마스크 사용이유 커다란 네트워크(호스트가 많은 네트워크)를 작은 네트워크 여러개로 나누어 쓰기 위함이다. 서브넷마스크 서브넷마스크는 IP 주소와 네트워크 주소를 구분할 때 사용하는데 2진수 숫자1은 네트워크 주소, 0은 호스트 주소로 표시한다. 보통 우리가 편하게 받아들일 수 있는 10진수를 사용해 255.0.0.0, 255.255.0.0, 255.255.255.0 과 같이 표현한다. 예를들어 103.9.32.146 주소에 255.255.255.0 서브넷마스크를 사용하는 IP는 네트워크 주소가 103.9.32.0이고, 호스트 주소는 0.0.0.146이 된다. 서브넷마스크는 비트단위나 10진수로 표현하는 방법을 사용하는데, 비트단위로 표현하는 방법은 A클래스는 /8, B클래스는 /16, C클래스는 /..

IT/네트워크 2022.12.21

AWS 컨테이너 서비스 도입을 위한 정보 알아보기

AWS 에서 서버를 관리하지 않고 컨테이너 단위로 제공되는 서비스를 알아보았다. 24시간 가동한다면 서버 관리 없이 컨테이너만 받아서 사용하는 컴퓨팅 옵션이 비용이 더 들겠지만, 그렇지 않는다면 컨테이너만 사용하는 컴퓨팅 옵션은 어떤식으로 비용이 측정되는지 알아보자. AWS 컨테이너 서비스는 아래 이미지와 같다. Fargate 와 EC2 의 차이는 다음과 같다. EC2 비용 옵션은 네 가지가 있다. 스팟 인스턴스는 사용자가 제시한 가격(입찰가격)을 정해놓고, 자원의 시세가 입찰가격보다 저렴해지면 인스턴스를 사용할 수 있고, 반대로 입찰가격보다 자원의 시세가 비싸지면 인스턴스는 중단된다. 스팟 인스턴스는 도입에 적합한 상황이 아니기 때문에 EC2 인스턴스와 Fargate 를 비교해보았다. EC2 와 Far..

IT/Tool 2022.12.20
728x90
반응형