전체 글 239

[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

백준 1309번 동물원[JAVA]

https://www.acmicpc.net/problem/1309 문제 이해 2*N의 우리에 사자를 배치 해야하는데 조건이 있다.가로, 세로에 인접한 사자가 존재하면 안됨각 우리에는 사자를 배치 할수도 있고, 안할수도 있다. 문제 해결 각 칸에 사자를 배치 하거나 안하는 경우의 수를 구하기 위해 N*2의 경우에 맞는 2차원 배열을 만들어 줬다. int[][] arr = new int[100001][3];arr[1][0]=1; //배치Xarr[1][1]=1; //좌측arr[1][2]=1; //우측 사자를 배치할때 바로 윗 라인의 경우를 생각해보면 사자가 좌측에 존재하는 경우 : 우측 OR 배치 X 사자 이것을 수식으로 하면 아래 코드와 같다.arr[i][1] = (arr[i-1][0]+arr[i-1]..

알고리즘/DP 2025.08.12

kubernetes, Jenkins를 활용한 CI/CD Pipeline구축

GitHub - yangwoohyeon/kubernetes-jenkins-cicdContribute to yangwoohyeon/kubernetes-jenkins-cicd development by creating an account on GitHub.github.com 싱글 노드 쿠버내티스 클러스터 + Jenkins CI/CD + DockerHub 기반 자동 배포 Pipeline을 구축해봤다. 쿠버내티스 워커 노드를 구성하기 위한 최소 사양은 다음과 같다.• CPU: 2 vCPU 이상• 메모리(RAM): 2GB 이상• 디스크 용량: 20~30GB 이상 AWS EC2 인스턴스 기준으로 최소 t3.medium이상을 사용해야한다. 여러개의 인스턴스를 생성하여 부하 분산도 테스트 해보고 싶었지만 프리티어 초과..

DevOps/Kubernetes 2025.08.09

EC2 인스턴스 스왑 메모리 설정으로 메모리 부족 문제 해결

프리티어에서 jenkins와 같은 무거운 프로그램을 돌릴때는 메모리 부족으로 인스턴스가 죽어버리는 현상이 발생하게 된다. 이러한 상황에서 디스크 용량을 이용해서 부족한 메모리를 대체할 수 있다. 1. 스왑 파일 생성 (2GB)sudo fallocate -l 2G /swapfile 2. 스왑 파일 권한 설정sudo chmod 600 /swapfile 3. 스왑 영역으로 포맷sudo mkswap /swapfile 4. 스왑 활성화sudo swapon /swapfile 5. 스왑 활성 상태 확인sudo swapon --showfree -h 스왑 메모리 2GB가 추가로 생성된 것을 확인할 수 있다.

Deployment/AWS 2025.08.07

[Kubernetes] Jenkins를 활용한 Blue/Green 배포 구현

kubernetes-anotherclass-sprint2/2213 at main · yangwoohyeon/kubernetes-anotherclass-sprint2[⚓쿠버네티스 어나더 클래스 (지상편) - 📗Sprint2]. Contribute to yangwoohyeon/kubernetes-anotherclass-sprint2 development by creating an account on GitHub.github.com Jenkins와 쿠버네티스를 이용하여 Blue/Green 배포를 진행해봤다. Blue/Green 배포의 특징무중단 배포 가능운영환경에서 테스트 가능빠른 롤백 지원새로운 배포본의 문제점 발견시 즉시 안정된 버전으로 복구 가능해 안정적인 서비스 운영 가능 pipeline { a..

DevOps/Kubernetes 2025.08.05

[Kubernetes] 배포 전략(Recreate/ RollingUpdate / BlueGreen / Canary)

1. Recreate가장 단순한 방법기존 서버(파드)를 모두 중지 시킨후 새로운 버전의 서버를 생성하는 방법배포중에 서비스가 완전히 중단되기 때문에 다운타임이 발생 2. RollingUpdate기존 버전의 파드를 하나씩 새 버전의 파드로 점진적으로 교체해 나가는 방식다운타임이 없다 (무중단 배포)새 버전의 인스턴스로 트래픽이 이전되기 전까지 이전 버전과 새 버전의 인스턴스가 동시에 존재한다는 단점이 있다. 3. Bule/Green두 개의 독립적인 환경 Blue 환경과 Green 환경을 가지고 진행되는 배포 전략Blue : 기존 서비스Green : 새로운 버전Green의 배포 준비가 완료되면 Blue 환경에서 Green 환경으로 한 번에 전환 4. Canary위험을 빠르게 감지할 수 있는 배포 기법..

DevOps/Kubernetes 2025.08.04