BackEnd 106

Redis DB서버 구성

Replication(복제) Master 노드는 쓰기(Write)작업을 처리하고, 여러 Slave노드가 Master 노드의 데이터를 복제하여 읽기 작업을 처리한다.읽기 요청을 여러 Slave 노드에 분산하여 트래픽 분산을 통해 처리 성능 향상Master 노드에 장애가 발생해도 Slave 노드들이 데이터를 가지고 있으므로 장애 복구에 좋다.Master는 쓰기, Slave는 읽기 작업을 담당하여 Master 노드의 부하 감소수평적 확장 가능 Redis 클러스터 구성최소 3개의 노드를 가지고 각 노드는 Master와 Slave 로 구성되어있다.데이터를 여러 노드에 분산하여 저장함으로써 고가용성과 확장성을 제공여러 노드에 데이터를 무작위로 분산 저장하면, 클라이언트가 어떤 노드에 특정 키가 저장되어 있는지 ..

BackEnd/Redis 2025.08.22

Redis(Remote Dictionary Server)란?

Redis란?Redis는 고성능의 키-값(key-value) 저장소로, 거대한 맵(Map) 데이터 저장소형태를 가지고 데이터를 메모리에 저장하여 빠른 읽기와 쓰기를 지원하는 오픈 소스 기반의 비관계형 데이터베이스 관리 시스템이다. Redis의 특징 1. 고성능RDBS(Relational Database Management System)는 디스크 기반의 저장 방식을 사용한다.디스크 기반의 저장 방식은 메모리 저장 방식에 비해 데이터를 오래 보관할 수 있다는 장점이 있지만, 메모리에 있는 데이터를 조회하는 방식에 비해 처리 속도가 느리다는 단점이 있다. 반면 Redis는 데이터를 디스크에 쓰는 구조가 아니라, 메모리에서 데이터를 처리하기 때문에 속도가 매우 빠르다.또한 Redis도 필요시 디스크에 스냅샷 ..

BackEnd/Redis 2025.08.21

[Kafka] MSA 구조에서의 Kafka 사용

MSA(Microservice Architecture)란?MSA는 큰 애플리케이션을 여러 개의 작고 독립적인 서비스로 나누어 개발하고 운영하는 아키텍처이다. 각 서비스는 독립적으로 배포와 확장이 가능하고, 명확히 분리된 API로 통신을 하게 된다. MSA의 특징독립적으로 개발, 배포, 확장 가능API 기반의 통신으로 서비스 간 느슨한 결합 유지서비스 마다 서로 다른 언어나 기술 스택 사용 가능장애 격리 : 특정 서비스 장애가 전체 시스템에 영향 최소화 이러한 MSA와 같은 분산환경에서 Kafka가 유용하게 사용될 수 있다. 서비스간 직접 호출 대신 Kafka 메시지 큐를 통해 이벤트 기반의 통신을 통해 서로 의존성을 줄일 수 있고, 비동기 작업 처리로 응답속도를 향상시킬 수 있다. 또한 Kafka의 토..

BackEnd/Kafka 2025.08.19

[Kafka] Kafka의 고가용성

node란?Kafka가 설치되어 있는 서버 단위싱글노드 클러스터의 경우, 한 노드의 고장이 서비스 장애로 이어질 수 있기 때문에 최소 3대의 노드를 구성하여 단일점 오류를 방지한다. 브로커(broker)와 컨트롤러(controller)Kafka 서버는 크게 브로커와 컨트롤러로 구성되어있다.브로커 : 메시지를 저장하고 클라이언트의 요청을 처리하는 역할 (9092 포트)컨트롤러 : 브로커들간의 연동과 전반적인 클러스터의 상태를 총괄한다.(9093 포트) 레플리케이션(Replication)이란?Kafka의 가용성과 안정성을 높이기 위해 토픽의 파티션을 여러 노드에 복제하는 것을 의미.리더 파티션과 팔로워 파티션으로 구분된다.리더 파티션 : 프로듀서나 컨슈머가 직접 메시지를 읽고 쓰는 파티션팔로워 파티션 : 리..

BackEnd/Kafka 2025.08.18

[Kafka] Kafka 메시지 처리 성능 향상 (Partition)

Partition이란? 큐(메시지를 임시로 저장할 수 있는 공간)를 여러개로 늘려서 병렬 처리를 가능하게 하는 기본 단위이다.즉, Topic을 여러개의 물리적 단위로 분할한 것. 이러한 Partition이라는 개념이 Kafka에서 주는 장점은 다음과 같다.여러개의 Consumer가 각각의 파티션을 병렬적으로 읽기 때문에 처리 속도가 향상된다.파티션 수와 Consumer 수를 늘려서 데이터 처리량 향상수평적 확장 가능 Partition 수는 토픽을 생성할 때 설정할 수 있다.$ bin/kafka-topics.sh \--bootstrap-server \--create \--topic \--partitions 나는 email.send라는 Topic에 Partition을 3개 생성했고, Partiti..

BackEnd/Kafka 2025.08.15

[Kafka] Dead Letter Topic

Producer에서 메시지를 Kafka로 전송하고 Consumer가 처리를 해야하는데 Consumer에서 메시지를 처리하지 못하게 되면 어떻게 될까? Kafka에서는 재시도(Retry)정책을 통해 메시지 처리에 실패 했을때 적절한 대응이 가능하다. 재전송과 관련된 정책은 @RetryableTopic에서 정의할 수 있다.attempts : 재전송 시도 횟수backoff : 재전송 시간 간격 정의, multiplier를 2로 정의할 경우 재전송 간격이 2배씩 증가.dltTopicSufflix : dlt Topic의 접미사 정의@KafkaListener( topics = "email.send", groupId = "email-send-group")@RetryableTopic( ..

BackEnd/Kafka 2025.08.14

Spring Boot + Kafka 메시지 테스트

Spring Boot로 Producer와 Consumer 서버를 생성하고 Kafka Server에 메시지를 넣어 통신하는 것을 실습했다. 준비물Producer 프로젝트 (Spring Boot)Consumer 프로젝트 (Spring Boot)Kafka Server(EC2) 구현 로직클라이언트가 REST API(`/api/emails`)로 이메일 발송 요청(JSON)을 보냄Producer(Spring Boot 서비스)가 요청을 받아서 Kafka 토픽(“email.send”)에 메시지를 발행Kafka 브로커는 그 메시지를 해당 토픽에 저장Consumer(Spring Boot 서비스)가 토픽을 구독하다가 새 메시지를 읽음Consumer가 JSON을 EmailSendMessage 객체로 변환Consumer에서 실..

BackEnd/Kafka 2025.08.14

Kafka란?

메세지 지향 미들웨어(MOM) 메시지 지향 미들웨어란 응용 소프트웨어 간의 비동기적 데이터 통신을 위한 소프트웨어이다. 메시지 지향 미들웨어는 메시지를 전달하는 과정에서 보관하거나 라우팅 및 변환을 할 수 있다는 장점을 가진다. 메시지 큐(Message Queue) 메시지 큐(Message Queue)란 큐(Queue) 형태에 데이터를 일시적으로 저장하는 임시 저장소를 의미한다. 메시지 큐를 활용하면 비동기적(Asynchronous)으로 데이터를 처리할 수 있어서 효율적이다. 여기서 비동기적으로 데이터를 처리한다는 것의 의미는 A와 B라는 작업을 수행할때 A작업을 시작한 직후에 B작업도 바로 시작하는것을 의미한다.반면 동기적 처리(Synchronous)는 A작업이 다 끝날 때 까지 기다리고 B를 처리하..

BackEnd/Kafka 2025.08.12

WebSocket + STOMP로 채팅 구현하기

STOMP란?Simple Text Oriented Messaging Protocol의 약자로 메시지를 전송하기 위한 프로토콜이다.메시지 브로커와 publisher - subscriber 방식을 사용하고, 메시지 브로커는 발행자가 전송하는 메시지를 구독자들에게 전송한다. 왜 STOMP를 사용 했는가?Spring WebSocket은 단순히 양방향 연결 채널일 뿐, 메시지를 어디로, 누가, 무엇을 보내는지 구조적으로 정의되어있지 않다. 하지만 STOMP를 WebSocket위에서 동작시키면 채널 구독, 메시지 목적지(채팅방) 구분, 구독 관리 등 실시간 채팅에 맞는 다양한 기능을 사용 가능하다. 따라서 이번에 구현한 채팅은 WebSocket 위에서 STOMP를 사용하여 채팅방 생성, 채팅방 구독, 전송, 읽..

BackEnd/Spring Boot 2025.05.30

Spring Webocket을 이용한 실시간 채팅 구현(+ JWT 인증)

GitHub - yangwoohyeon/OAuth2_9oormthonUNIVContribute to yangwoohyeon/OAuth2_9oormthonUNIV development by creating an account on GitHub.github.com WebSocket이란?서버와 클라이언트 간에 Socket Connection을 유지해서 언제든 양방향 통신 또는 데이터 전송이 가능하도록 하는 기술로써, sns, 화상 채팅, 증권 거래 등에서 널리 사용되고 있다. 왜 WebSocket을 사용하는가? HTTP를 사용하여 실시간 양방향 통신을 구현하기 위해서는 다음과 같은 방법을 사용할 수 있다. 백엔드에서 변경 사항이 생길 때마다 프론트엔드에게 응답을 보내주는 방식 : Server-Sent-Eve..

BackEnd/Spring Boot 2025.05.14