BE

· BE
스타트업에서 인프라 비용은 늘 민감한 주제입니다. 특히 B2B SaaS를 운영하다 보면, 트래픽 패턴이 B2C와는 확연히 다르다는 걸 체감하게 됩니다. 이 글에서는 Claude를 활용해 사내 인프라 리소스 사용량을 분석하고, 트래픽 패턴에 맞게 비용을 최적화한 경험을 공유합니다. 우리 서비스의 트래픽 특성우선 저희는 B2B로 서비스를 운영하고 있고 고객사 대부분이 국내 기업이고, 몇가지 트래픽 특성을 갖고있습니다.고객사의 80%가 9to6 근무 패턴을 따릅니다.해외 접속은 전체의 약 10%에 불과합니다.새벽 시간대와 주말의 트래픽은 주간 피크 대비 극히 낮습니다.이 사실은 이미 사내 모든 서버 개발자가 알고 있었지만, 실제로 인프라 리소스가 얼마나 낭비되고 있는지는 데이터를 들여다보기 전까지 체감하지 못..
· BE/카프카
Spring Kafka에서는 컨슈머가 가져온 메시지를 처리하는 방식에 따라 배치 리스너와 레코드 리스너로 구분할 수 있습니다.레코드 리스너 (Record Listener)하나의 메시지를 받아서 처리하는 방식poll()로 가져온 배치를 내부적으로 루프 돌며 개별 처리하는 방식@KafkaListener(topics = "my-topic", groupId = "my-group")public void listen(String message) { // 메시지 하나씩 처리 System.out.println("받은 메시지: " + message);}배치 리스너 (Batch Listener)여러 메시지를 한 번에 받아서 처리하는 방식poll()로 가져온 배치를 그대로 변환해 처리하는 방식@KafkaListener(..
· BE/카프카
Kafka Consumer 설정별 성능 측정 실험1. 실험 개요1.1 실험 목적파티션 수를 늘리지 않고, Consumer 설정만으로 처리량을 얼마나 끌어올릴 수 있는지 측정1.2 실험 전제 조건파티션 수: 1개 고정 (파티션당 Consumer 1개, 1:1 매칭)메시지 수: 각 패턴당 10,000개처리 시간: 메시지당 10ms 고정 (Thread.sleep(10))브로커/네트워크: 충분한 리소스 보장 (로컬 환경)테스트 방식: 미리 10,000개 메시지를 토픽에 적재한 후, Consumer 시작하여 처리 속도 측정1.3 테스트 환경Spring Boot: 3.xSpring Kafka: 3.2.xKafka: 로컬 브로커Java: 17실행 방식: 로컬에서 Kafka와 Spring Boot 애플리케이션 동시 실..
· BE/카프카
Kafka 프로듀서 완벽 가이드프로듀서란?Kafka 프로듀서는 메시지를 Kafka 클러스터의 토픽에 발행하는 클라이언트입니다. 프로듀서는 메시지를 직렬화하고, 파티션을 선택하며, 배치로 묶어서 효율적으로 전송합니다.핵심 구현: clients/src/main/java/org/apache/kafka/clients/producer/KafkaProducer.javaProperties props = new Properties();props.put("bootstrap.servers", "localhost:9092");props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");props.put("value.serialize..
· BE/카프카
카프카를 살펴보다가 ConsumerDelegate를 구현하고 있는 두가지 클래스를 볼 수 있었습니다. ClassicKafkaConsumer 와 AsyncKafkaConsumer인데요 컨슈머는 왜 2가지 방식으로 존재하는지 궁금했고 흥미로워서 이에대해서 정리를 해보고자 합니다.우선 클래스명을 보고 ClassicKafkaConsumer 가 좀 더 오래된 컨슈머겠구나 예상을 하고 들여다 봤습니다. 해당 클래스에는 주석부터 classic group protocol 을 사용하는 클라이언트라고 되어 있었습니다. 그럼 classic group protocol이란 무엇인가..?찾은 문서를 기반으로 설명하면 classic protocol/classic group protocol 으로 부르고 다음과 같은 특징이 있다고 합..
토스 페이먼츠 면접에서 Observbility 관련한 질문을 받았었는데.. 제대로 답변을 못했던 기억이 있어서 토스 페이먼츠는 어떻게 분산 환경에서 로그를 통해 이슈를 파악하는지 내용을 정리해 보고 현재 회사의 환경과 비교해 보려고 합니다. 현대의 소프트웨어 시스템은 클라우드, 컨테이너, MSA(Microservices Architecture) 등의 기술을 기반으로 하며, 이는 시스템의 가상화 및 추상화를 심화시켜 기존의 IT 시스템이 가지고 있던 문제를 개선하며 민첩한 제품 조직을 구성하는데 도움이 되기에 많이 활용되고 있습니다. 하지만 이런 환경은 복잡성이 높아 추적을 어렵게 만드빈다. 수시로 업데이트 되는 서비스와 하나의 요청에서 여러 네트워크 홉을 거치게 되고 기존에 모니터링 시스템으로는 파악하..
· BE/Java
이것도 모르고 자바를 했다니..자바 IO/NIO 프로그래밍 책을 보던중에 아래와 같은 예제를 볼 수 있었다.public class ExtendThread extends Thread { @Override public void run() { System.out.println("Thread 클래스 상속"); }}class ExtendThreadTest { public static void main(String[] args) { Thread thread = new ExtendThread(); thread.start(); }}상속을 통해 Thread를 생성하고 시작하는 방식의 대한 예제이다.위에 예제는 상속을 통해 Thread를 생성하고 시작하는 방..
· BE
캐시 시리즈캐시를 통한 성능개선 - 이론편현재 상황병목현상스테디 프로젝트는 메인 페이지에서 ‘좋아요’ 수 와 조회수를 기반으로 한 기간별 인기 모집 글을 보여주고 있습니다. 현재 개발 서버에는 300만 건의 데이터가 존재하고 인기 글의 기간 범위가 늘어날수록 Latency가 길어지는 문제가 발생하고 있었습니다. 인덱스를 적용했음에도 만족스러운 응답속도가 나오지 않았고 비슷한 서비스를 목푯값으로 잡아 성능을 개선해 보는 경험을 공유하려 합니다.테스트 환경nGrinder , nGrinde-agentVUser 150 (3/50)Ramp-Up 사용 10s → 1 Thread 증가스크립트에 ThinkTime 700ms현재 성능VUser 수가 약 50 부터 1초 이상의 Latency가 발생하고 있습니다. RPS가 ..
E@st
'BE' 카테고리의 글 목록