분류 전체보기 237

kafka Sticky

Kafka 프로듀서에서 Callback과 함께 Sticky Partitioner를 사용하는 이유는 파티션 사용의 효율성과 성능 최적화를 위해서입니다. 이를 좀 더 구체적으로 살펴보겠습니다.Sticky Partitioner는 Kafka 2.4.0부터 도입된 파티셔닝 전략으로, 특정 파티션에 메시지를 "묶어서(sticky)" 전송하도록 설계되었습니다. 기존 파티셔너 (Round-Robin 파티셔너 또는 Key-Based 파티셔너)는 메시지가 각각 다른 파티션으로 분산되는 경우가 많아 파티션 변경 시 오버헤드가 발생할 수 있습니다. Sticky Partitioner는 연속적인 메시지 배치를 하나의 파티션으로 묶어 전송합니다. 기본적으로 배치 크기가 꽉 차거나, 전송 타임아웃이 발생하면 다른 파티션..

GPT Archiving 2025.01.06

dockerfile - 의존성 캐싱

COPY build.gradle settings.gradle gradlew /app/COPY gradle /app/gradle 역할: 프로젝트의 Gradle 설정 파일(build.gradle, settings.gradle)과 Gradle Wrapper(gradlew 및 gradle 디렉토리)를 Docker 이미지로 복사. Gradle Wrapper는 Gradle 버전을 일관되게 관리하며, 빌드 환경에 Gradle이 설치되어 있지 않아도 프로젝트를 빌드할 수 있게 합니다. 왜 필요한가?: Gradle Wrapper는 Gradle 버전을 명시적으로 관리하여 빌드 환경의 종속성을 제거합니다. 이 단계에서 소스 코드를 복사하지 않고 설정 파일만 복사하는 이유는 의존..

GPT Archiving 2025.01.06

dockerfile - booJar, plain Jar

긍께 외장톰캣에 넣는 jar는 플레인jar고,내장톰캣포함해서jar로만 서버 돌릴 수 있는게 bootJar이란거지?docker-compose로 컨테이너 띄울 떈 bootJar로 띄우는게 일반적이니까enabled = false로 설정해서 플레인Jar안나오도록 하는거고? 1. 외장 톰캣에서 사용하는 JAR (plain JAR)특징:Spring Boot의 부트스트래핑 로직과 내장 톰캣/제티 같은 임베디드 웹 서버가 포함되지 않음.순수 Java 라이브러리 또는 모듈로 동작하며, 외장 톰캣에 배포하려면 .war 파일로 패키징하는 것이 일반적.사용 사례:외장 톰캣에서 애플리케이션을 실행할 때.bootJar 대신 plain JAR이 필요할 때.2. 내장 톰캣 포함 실행 가능한 JAR (boot JAR)특징:Spring..

GPT Archiving 2025.01.06

[Kafka 입문] 다중 브로커, 레플리카

카프카의 브로커는 마스터-워커 구조가 아니라 병렬적으로 구성됨.즉, 모든 브로커는 동등한 수준으로 동작하며, 클러스터 내에서 특정 역할(리더/팔로워)을 파티션 단위로 동적으로 분배함 SPRING_KAFKA_BOOTSTRAP_SERVERS: kafka:9092,kafka-2:9092처럼 모든 브로커의 주소를 명시함으로써,클라이언트(프로듀서/컨슈머)가 클러스터 내 모든 브로커에 연결할 수 있도록 설정하는 것임 세부 설명1. 병렬적 브로커 구성Kafka 클러스터에서:모든 브로커는 Zookeeper를 통해 상태를 공유함.각 브로커는 클러스터의 일부이며, 서로 독립적이지만 협력적으로 작동함파티션을 기준으로 리더-팔로워 구조가 동작함:특정 파티션은 하나의 브로커가 "리더" 역할.나머지 브로커는 "팔로워"로 복제본(..

Kafka 2025.01.03

[Kafka 입문] 토픽, 파티션, 스트림

토픽: 카프카에서 데이터를 구분하고 저장하는 논리적 단위스트림: 토픽의 데이터의 흐름. ksql로 정의할 수 있고, 데이터를 처리하거나 변환하여 전달하거나 새로운 토픽으로 전달할 수도 있음 파티션: 토픽을 물리적으로 분할한 단위, 병렬 처리를 위해 분산 저장하는 것 (브로커 간 분배)Kafka의 기본 개념Kafka는 분산 메시징 플랫폼으로,데이터를 실시간으로 처리하고 전달하는 데 최적화되어 있음.데이터를 "어디에서 생성되고", "어디로 전달되는지"를 관리하는 구조를 제공함프로듀서 (Producer): 데이터를 생성하고 Kafka에 발행하는 역할.컨슈머 (Consumer): Kafka에서 데이터를 구독하고 사용하는 역할.토픽 (Topic): 데이터를 저장하는 논리적 공간.파티션 (Partition): 토픽..

Kafka 2025.01.02

[Kafka 입문] 구성 요소와 역할

| Kafka의 메시지 처리 흐름프로듀서 → Kafka 브로커:프로듀서가 데이터를 생성하여 Kafka의 특정 토픽으로 발행토픽의 파티션에 따라 데이터가 분산 저장Kafka 브로커 → 컨슈머:컨슈머가 토픽을 구독하면, Kafka는 해당 데이터를 컨슈머로 전달컨슈머는 각 파티션에서 데이터를 순차적으로 읽음모니터링 및 분석:Prometheus는 Kafka 브로커의 상태를 지속적으로 수집Grafana를 통해 실시간 대시보드로 브로커, 파티션, 컨슈머 그룹 상태를 확인| Kafka의 핵심 구성 요소와 역할Kafka 브로커:데이터를 저장하고 프로듀서/컨슈머 간 메시지를 전달하는 중앙 허브.하나의 Kafka 클러스터는 여러 브로커로 구성됨.각 브로커는 토픽과 파티션을 분산 저장함.[Kafka 컨테이너와 브로커의 관계..

Kafka 2025.01.02

node.js 버전 변경

현재 16 버전을 사용하고 있었음.처음 리액트 공부할 땐  20 버전 이었고..추가적으로 22 버전을 사용해야함.. 하지만 난 두렵지 않음.node 설치할 때 nvm부터 설치하고 nvm으로 npm을 받았기 때문.. 현재 상태기본 Node.js 버전: v16.14.2추가로 설치된 버전: v20.13.1새로 설치해야 할 LTS 버전: v22.12.0 nvm listnvm list->     v16.14.2       v20.13.1         system 요로코롬 나온다. nvm install --lts최신 버전을 받는다. (받으려는 22가 최신임ㅋ) (설치 후 자동으로 해당 버전이 활성화됨)   버전 전환은 nvm use 로 하면 되는데 기존 프로젝트에선 16, 새로운 프로젝트에서 22 사용이라 def..

Vue 2024.12.30

LSP

20241229Liskov Substitution Principle, LSP *"상위 클래스 사용하던 자리에는 하위 클래스 사용할 수 있다"*상위 클래스의 객체를 사용하는 모든 곳에서 하위 클래스의 객체로 대체하더라도 프로그램의 동작이 바뀌지 않아야 한다.==하위 클래스는 상위 클래스를 대체할 수 있어야 한다. ==상위 클래스가 기대하는 동작(계약)을 하위 클래스가 깨지지 않도록 동작해야 한다는 원칙상위 클래스의 역할을 유지해야함 상위 클래스의 메서드와 동작은 하위 클래스에서도 **동일하게 작동** 해야 함 하위 클래스는 상위 클래스가 가진 동작의 **의미**를 바꾸거나 깨뜨리면 안 됨.대체 가능성 보장 코드에서 상위 클래스를 사용하던 자리(메서드 호출, 변수 등)에 하위 클래스를 넣어도 **플고그..

Java 2024.12.29