본문 바로가기

전체 글

(43)
ElasticSearch에 대해 알아보자 - (5) 트러블슈팅 : 문서 색인 불가 트러블슈팅 : 디스크 사용량으로 인한 색인 불가 문제운영 중인 Elasticsearch 클러스터에서 갑자기 문서가 색인되지 않고, 클라이언트 측에서 403 Forbidden Error가 발생하는 상황을 겪을 수 있습니다. 이는 단순한 권한 문제처럼 보이지만, 실제로는 클러스터의 디스크 사용량과 밀접하게 관련이 있습니다. 1. 문제 원인: 디스크 사용량 보호 장치Elasticsearch는 노드의 디스크 사용량이 일정 수준을 초과하면 클러스터 안정성을 위해 색인을 제한하는 보호 장치를 내장하고 있습니다. 디스크가 가득 차면 운영 체제 자체도 정상적으로 동작하지 않을 수 있기 때문입니다. 이 동작은 다음 설정값들로 제어됩니다.cluster.routing.allocation.disk.threshold_enabl..
ElasticSearch에 대해 알아보자 - (4) 트러블슈팅 : 클러스터의 상태 이상, 샤드 배치 이상 트러블 슈팅 : 클러스터의 상태 이상엘라스틱서치를 운영하다 보면 클러스터 상태가 항상 Green으로 유지되지 않고, Yellow 혹은 Red로 표시되는 경우가 있습니다. 이번 글에서는 이러한 상태들이 의미하는 바와, 실제 트러블슈팅 접근 방식을 정리해 보겠습니다. 클러스터 상태 색상 의미Green모든 Primary 샤드와 Replica 샤드가 정상적으로 각 노드에 배치된 상태색인 및 검색 모두 정상YellowPrimary 샤드는 정상 동작하지만 일부 Replica 샤드가 배치되지 않은 상태색인에는 문제가 없지만, 장애 상황에 대비한 복제본이 없으므로 검색 성능 및 안정성에 영향을 줄 수 있음Red일부 Primary 샤드가 배치되지 않은 상태색인과 검색 모두에 영향을 주며, 문서 유실 가능성이 있음즉, G..
ElasticSearch에 대해 알아보자 - (3) 검색 과정 이해하기 검색 (Search) 이전에 색인 과정을 살펴 보면, inverted index를 생성하게 됩니다. inverted index는 검색 과정에서 매우 중요한 부분 입니다. 검색 과정을 살펴보면 검색어 분석을 통해 inverted index를 검색하게 됩니다.역색인 (Inverted Index)Inverted Index(역색인)는 검색 엔진의 핵심 데이터 구조로, 문자열을 분석한 결과를 저장하고 있는 구조체 입닌다. inverted index를 활용해 특정 단어가 어떤 문서에 포함되어 있는지를 빠르게 찾을 수 있게 해줍니다.일반적인 색인(Forward Index): 문서 → 단어 목록역색인(Inverted Index): 단어 → 문서 목록즉, "어떤 문서에 이 단어가 있나?" 를 빠르게 찾을 수 있도록 설..
ElasticSearch에 대해 알아보자 - (2) 색인 과정 이해하기 ElasticSearch Indexing색인 이란?Elasticsearch에서 색인(Indexing)은 데이터를 문서(Document) 단위로 인덱스에 저장하고, 검색할 수 있도록 구조화하는 과정을 의미합니다. 단순히 저장만 하는 것이 아니라, 검색 성능을 높이기 위해 역색인(Inverted Index) 구조를 생성하는 게 핵심입니다.색인(Indexing) 과정 총 노드 3대의 클러스터에 Primary 샤드을 1대, Replicas 샤드를 1대로 설정해 두면 위 그림 처럼 설정 됩니다. 이전에 이론편에서 설명드리기는 했지만 Elasticsearch는 어떤 노드에 조회 및 색인 요청을 하던 동일한 결과 값을 보장합니다. 즉 1번 노드에 색인 요청을 해도 되고, 2번 노드, 3번 노드에 색인 요청을 해도 됩..
ElasticSearch에 대해 알아보자 - (1) 용어 이해하기 (클러스터, 노드, 인덱스, 샤드, 매핑) ElasticSearch란?ElasticSearch는 검색, 데이터 분석에 최적화된 데이터베이스 입니다. 조금 더 어렵게 설명한다면 오픈 소스 분산, RESTful 검색 및 분석 엔진, 확장 가능한 데이터 저장소 및 벡터 데이터베이스이며, 루씬(Lucene- 자바 라이브러리)기반의 오픈소스 검색 엔진입니다. Json 기반의 문서를 저장하고 검색할 수 있으며 분석 작업도 가능 합니다. ElasticSearch는 현업에서 크게 2가지 용도로 사용이 됩니다. 1. 데이터 수집 및 분석Elasticsearch는 대규모 데이터(ex. 로그 등)를 수집 및 분석하는 데 최적화되어 있습니다. 주로 Elasticsearch(데이터 저장), Logstash(데이터 수집 및 가공), Kibana(데이터 시각화)를 같이 활..
Spring Batch에 대해 알아보자 - (3) Tasklet 지향 처리 vs Chunk 지향 처리 Tasklet 지향 처리앞서 설명했듯, Tasklet 지향 처리 모델은 Spring Batch에서 가장 기본적인 Step 구현 방식으로 단순한 작업을 할때 많이 사용이 됩니다.Tasklet은 보통 다음과 같은 단순한 작업이나 유틸성 작업에 많이 사용이 됩니다.불필요한 로그 파일 삭제오래된 파일 아카이브단순 알림 혹은 메일 발송단순하게 외부 API호출 후 결과를 저장하거나 로깅하는 경우즉, 단순한 비즈니스 로직 실행에서 많이 사용이 됩니다. Tasklet 구현 - RepeatStatus를 잘 사용하자Tasklet 구현 코드를 먼저 살펴봅시다. 코드1) 내부에 while()문을 반복한 경우 public class taskletOriented implements Tasklet { privat..
Spring Batch에 대해 알아보자 - (2) Step, StepExecution, StepContribution Step이란?Job을 구성하는 실행 단위Job은 여러 Step으로 나뉘고, Step들이 순차적으로 혹은 조건/분기에 따라 실행됩니다.Step은 내부적으로 읽기(Reader) → 처리(Processor) → 쓰기(Writer) 구조를 갖거나, 단순히 한 번의 로직을 실행할 수도 있습니다.즉, Step은 Job의 작은 처리 과정 중 하나 입니다.Step의 종류Spring Batch에서 Step은 크게 두 가지 방식으로 구현할 수 있습니다. (실제로는 더 많은 구현 방식이 있습니다.)(1) TaskletStepTasklet 인터페이스를 구현해서 한 번 실행되는 작업을 정의주로 간단한 로직(로그 찍기, 파일 삭제, API 호출 등)에 적합@Beanpublic Step taskletStep(JobRepositor..
Spring Batch에 대해 알아보자 - (1) Job, JobInstance, JobParameter, JobExecution Job 이란?Job은 Spring Batch에서 배치 작업의 최상위 단위입니다.하나의 Job은 여러 개의 Step으로 구성됩니다.Job을 실행하면 내부 Step들이 정의된 순서와 조건에 따라 실행됩니다.실행 결과는 JobExecution으로 관리되며, 성공/실패/중단 등의 상태가 기록됩니다.즉, Job은 배치 처리 과정 전체를 대표하는 컨테이너라고 할 수 있습니다.Job의 구성 방법 (SimpleJob, FlowJob)Job을 구성하는 방식은 크게 2가지가 있습니다.SimpleJob - 정해진 순서에 따라 Step을 실행FlowJob - 정해진 조건에 따라 Step을 실행 SimpleJobSimpleJob은 가장 기본적인 Job 구현체입니다.단순히 Step들을 순차적으로 실행합니다.조건 분기나 복잡한 ..
카프카(kafka)에 대해 알아보자 - (5) 카프카 딥다이브 (프로듀서, 컨슈머) 들어가기 앞서이번 포스팅에서는 프로듀서과 컨슈머에 대해 어떻게 운영환경에서 활용할 수 있는지 알아볼 예정입니다. 책의 챕터 4에 해당하니 참고 해주시면 감사하겠습니다. 카프카에 대해 기본적인 공부를 위해 방문하신 분들은 아래 글 추천 드립니다.카프카(kafka)에 대해 알아보자카프카(kafka)에 대해 알아보자 - (1) 카프카의 기본 개념 (브로커, 토픽, 파티션, 레코드)카프카(kafka)에 대해 알아보자 - (2) 카프카의 기본 개념 (프로듀서, 컨슈머)카프카(kafka)에 대해 알아보자 - (4) 카프카 딥다이브 (토픽, 파티션) https://www.yes24.com/product/goods/99122569 아파치 카프카 애플리케이션 프로그래밍 with 자바 - 예스24아파치 카프카 애플리케이션..
카프카(kafka)에 대해 알아보자 - (4) 카프카 딥다이브 (토픽, 파티션) 들어가기 앞서이전 포스팅까지는 카프카에 대한 기본 개념에 대해 알아보았습니다. 이번 포스팅부터는 기술에 대한 개념 보다는 운영환경에서 어떻게 활용하면 좋을지에 대해 알아볼 예정입니다. 책의 챕터 4에 해당하니 참고 해주시면 감사하겠습니다. 카프카에 대해 기본적인 공부를 위해 방문하신 분들은 아래 글 추천 드립니다.카프카(kafka)에 대해 알아보자카프카(kafka)에 대해 알아보자 - (1) 카프카의 기본 개념 (브로커, 토픽, 파티션, 레코드)카프카(kafka)에 대해 알아보자 - (2) 카프카의 기본 개념 (프로듀서, 컨슈머) https://www.yes24.com/product/goods/99122569 아파치 카프카 애플리케이션 프로그래밍 with 자바 - 예스24아파치 카프카 애플리케이션 개발을..
카프카(kafka)에 대해 알아보자 - (2) 카프카의 기본 개념 (프로듀서, 컨슈머) 들어가기 앞서이전 포스팅에서는 카프카의 브로커, 클러스터 개념에 대해 간단히 알아보았습니다. 이번 포스팅에서는 카프카의 프로듀서와 컨슈머에 대해 공부할 예정입니다. 이전 포스팅에서도 언급하였지만 아래 책을 활용하여 공부하고 있으며, 3장 카프카 기본 개념 설명 부분에 해당하는 글입니다. https://www.yes24.com/product/goods/99122569 아파치 카프카 애플리케이션 프로그래밍 with 자바 - 예스24아파치 카프카 애플리케이션 개발을 위한 「실전 가이드」아파치 카프카란 무엇일까? 카프카 애플리케이션은 어떻게 만들까? 데이터 파이프라인을 만들기 위해 어떤 카프카 라이브러리를 사용www.yes24.com프로듀서(Producer)Kafka에서 프로듀서(Producer)는 데이터를 생..
카프카(kafka)에 대해 알아보자 - (1) 카프카의 기본 개념 (브로커, 토픽, 파티션, 레코드) 들어가기 앞서이전 포스팅에서는 카프카가 탄생하게 된 배경에 대해 간략히 알아 보았습니다.카프카(kafka)에 대해 알아보자 카프카(kafka)에 대해 알아보자들어가기 앞서이번 포스팅에서는 카프카에 대해 알아볼 예정입니다. 이전까지 RabbitMQ에 대해 공부하였고, 앞으로 Kafka에 대해 공부하며 두 기술의 차이점에 대해 알아볼 예정입니다. Kafka에 대한ez-dev-blog.tistory.com 이번 포스팅에서는 카프카의 기본적인 개념과 특징에 대해 알아보겠습니다. 이번 Kafka 공부에서는 아래 책을 활용하고 있으며, 3장 카프카 기본 개념 설명에 해당합니다. https://www.yes24.com/product/goods/99122569 아파치 카프카 애플리케이션 프로그래밍 with 자바 -..
카프카(kafka)에 대해 알아보자 들어가기 앞서이번 포스팅에서는 카프카에 대해 알아볼 예정입니다. 이전까지 RabbitMQ에 대해 공부하였고, 앞으로 Kafka에 대해 공부하며 두 기술의 차이점에 대해 알아볼 예정입니다. Kafka에 대한 공부는 "아파치 카프카 애플리케이션 프로그래밍 with 자바" 라는 책으로 공부할 예정입니다. 그래서 아마 포스팅의 방향이 책 내용의 요약과 실습해본 결과를 위주로 작성할 것 같습니다. 해당 책은 데브원영님께서 작성하였습니다. 책의 저자 이신걸 알고 책을 고른 것은 아니며, 데브원영님은 유명 빅테크 기업 기술 세미나에서 Kafka를 강연하시고 유튜브나 인프런 등에서 카프카와 관련하여 교육 영상이 많으신데, 처음 책을 읽으려고 보니 이름이 익숙하여 알게 되었습니다. 따로 궁굼하신 분들은 해당 유튜브 영..
RabbitMQ에 대해 알아보자 - (12) Producer 트랜잭션 전략 들어가기 앞서이전 포스팅에서 비동기 메시징 시스템을 사용함에 있어, 메시지 전송의 신뢰성에 대해서 알아보았습니다.RabbitMQ에 대해 알아보자 - (10) 트랜잭션 전략 / 신뢰성 있는 메시지 이번 포스팅 에서는 Producer에서 신뢰성 있는 메시지를 전송하는 방법에 대해 알아볼 예정입니다. 특히 Producer 입장에서 메시지를 정확히 한 번 전송하고, 유실 없이 브로커에 도달시켜야 하는 요구사항이 있다면, 단순히 convertAndSend()를 호출하는 것만으로는 부족합니다. RabbitMQ는 Producer가 메시지 전송의 신뢰성을 확보할 수 있도록 다음 두 가지 트랜잭션 방식을 제공합니다:트랜잭션 메시징 (Transaction Messaging)Publisher Confirms이 글에서는 각각..
RabbitMQ에 대해 알아보자 - (11) 트랜잭션 전략 / 신뢰성 있는 메시지 들어가기 앞서비동기 메시징 시스템을 사용하면서 가장 많이 고민하게 되는 부분은 바로 트랜잭션과 메시지 손실에 대한 처리입니다. 메시지를 발행하고 소비하는 과정에서 예기치 않은 장애가 발생하거나, 메시지가 중간에 유실될 가능성은 언제나 존재합니다. 예를 들어, 커머스 서비스에서 사용자가 상품을 구입하고 결제가 완료된 후, 결제 완료 메시지가 배송 서비스로 전송되었다고 가정해봅시다. 이때 만약 배송 서비스에 장애가 발생하거나, 메시지를 정상적으로 수신하지 못했다면 어떻게 될까요? 결제는 완료되었지만 배송이 이루어지지 않는, 즉 데이터 불일치 상황이 발생하게 됩니다. 이처럼 메시지 유실이나 처리 실패에 대한 대비가 없다면, 시스템 전반의 무결성이 무너질 수 있습니다. 그래서 저는 비동기 메시징을 활용할 때 가..