[ELK] 엘라스틱서치 Alias
·
ELK
Alias  실제 인덱스 이름 대신 사용할 수 있는 가상의 이름으로, 여러 인덱스를 하나의 이름으로 묶거나, 인덱스 변경 시 애플리케이션에 미치는 영향을 최소화할 수 있음Alias 특징 제로 다운타임(Zero Downtime) 업데이트인덱스 교체:새로운 데이터 스키마나 설정으로 인덱스를 재생성한 후, alias를 새로운 인덱스로 옮기는 방식으로 운영 중단 없이 업데이트할 수 있음 즉, 새로운 인덱스를 생성한 뒤, 기존 alias의 참조를 변경함으로써 클라이언트는 항상 동일한 alias를 사용하여 최신 데이터를 조회가 가능함필터 및 라우팅 기능 필터 적용:alias에 필터를 설정하면, 해당 alias를 통해 이루어지는 검색은 자동으로 필터 조건이 적용됨예를 들어, active_users alias를 생성할..
[ELK] 엘라스틱서치 샤드
·
ELK
샤드인덱스 내부에 색인된 데이터들이 물리적 공간 즉 여러 노드에 여러개의 부분들로 존재하는 데이터 인덱스는 기본적으로 샤드 단위로 분리됨샤드는 한마디로 인덱스에 색인되는 도큐먼트를 저장하는 공간하나의 샤드는 독립적인 Lucene 인덱스로 동작하여, 데이터 검색 및 저장을 함엘라스틱 서치는 분산 저장 및 검색 성능 향상을 위해 샤딩이라는 개념을 사용함 샤드의 종류샤드는 프라이머리 샤드와 레플리카 샤드로 구분이 됨샤드 종류설명프라이머리 샤드원본 데이터를 저장하는 기본 샤드, 데이터 원본레플리카 샤드프라이머리 샤드의 복제본, 백업 역할프라이머리 샤드원본 데이터를 저장하는 샤드데이터가 처음 저장될 때 프라이머리 샤드에 기록됨기본적으로 샤드 개수는 색인 생성시 설정되고 이후 변경이 불가능함레플리카 샤드프라이머리 ..
[ELK] 엘라스틱서치 KEYWORD / TEXT 타입
·
ELK
TEXT와 KEYWORD 타입 모두 문자열을 처리하기 위한 타입KEYWORD 타입특징: 분석(analysis) 없이 원본 문자열 그대로 저장됨.사용 용도: 정렬, 집계(aggregation), 필터링(filtering) 등에 적합검색 방식: 전체 문자열이 하나의 토큰으로 저장되서 전체 문자열 검색{ "mappings": { "properties": { "category": { "type": "keyword" } } }}위에 형태로 매핑한 경우  "category": "Web Development"라는 데이터를 저장하면 검색 시 "Web"이나 "Development"로는 검색되지 않고 "Web Development" 전체 일치해야 검색 사용 적합 예시 : 국가코..
[KAFKA] 토픽 / 파티션 / 컨슈머 그룹 관계
·
KAFKA
컨슈머 그룹(Consumer Group), 파티션(Partition), 컨슈머(Consumer) 요약토픽(Topic) → 여러 개의 파티션(Partition)하나의 토픽은 여러 개의 파티션으로 나눔각 파티션은 독립적으로 데이터를 저장하고 처리컨슈머 그룹(Consumer Group) → 여러 개의 컨슈머(Consumer)컨슈머 그룹은 하나 이상의 컨슈머로 구성됩니다.같은 컨슈머 그룹에 속한 컨슈머들은 서로 다른 파티션을 소비(consume)컨슈머 개수 ≤ 파티션 개수 이므로 컨슈머 수보다 파티션이 많아야 최적의 성능을 발휘할 수 있음파티션 ↔ 컨슈머 매핑하나의 파티션은 하나의 컨슈머에게만 할당(동시에 여러 컨슈머가 같은 파티션을 읽을 수 없음)한 컨슈머는 여러 개의 파티션을 담당할 수 있음.컨슈머 그룹을 ..
[JAVA] InitialRAMPercentage / MaxRAMPercentage 옵션
·
JAVA
java -XX:InitialRAMPercentage=70.0 -XX:MaxRAMPercentage=70.0 -jar MyApp.jar Java8에서 도입된 InitialRAMPercentage / MaxRAMPercentage은 각각 JVM의 초기, 최대 힙 사이즈를 설정하는데 사용함 JVM은 프로그램 실행 중에 메모리를 사용하여 객체를 생성하고 관리하는데, 이때 JVM은 힙 메모리라는 메모리 영역을 사용함, 해당 옵션들은 힙 메모리의 크기를 설정하여 JVM의 성능을 최적화할 수 있게 해줌 InitialRAMPercentage JVM이 시작될 때 할당되는 초기 힙 크기를 설정, 전체 시스템 메모리의 백분율로 표현 예를 들어서 시스템 메모리가 4GB인 경우, -XX:InitialRAMPercentage=..
[OTHER] 헥사고날 아키텍처
·
OTHER
계층형 아키텍처의 문제 계층형 아키텍처는 토대가 DB이기 때문에, DB 주도 설계를 유도함 계층형 아키텍처는 DB중심적인 아키텍처이기 때문에 비즈니스 관점에서 맞지 않음 → 도메인 로직을 먼저 만들고 제대로 이해해야하 영속성과 웹계층을 만들 수있음 계층형 아키텍처는 같은 계층에 있는 컴포넌트나 아래 계층에 접근이 가능하기 때문에 암묵적으로 용인하면 영속성 → 도메인으로 접근하는 코드가 늘어나게 됨 계층형 아키텍처는 시간이 지나면서 시스템이 비대해질수록, 계층을 건너뛰어 접근하는 경우도 생기게 되면서, 도메인 로직이 전체에 걸쳐 책임이 섞이게 됨 계층형 아키텍처의 이러한 문제의 해결방법으로는 DIP(의존성 역전법칙)으로 해결을 했었음 → 모든 계층에 DIP로 해결해서 적용하면 헥사고날 아키텍처의 형태를 띄..
[KAFKA] 기본 개념
·
KAFKA
Kafka 정의 이벤트 스트리밍 플랫폼 Kafka 아키텍처 Kafka는 발행-구독(publish-subscribe) 모델을 기반으로 동작하며 크게 프로듀서, 컨슈머, 브로커로 구성 프로듀서는 메세지(이벤트)를 카프카에 넣고, 브로커는 메세지(이벤트)를 저장 (브로커는 일반적으로 3대이상 구성, 클러스터 형태), 컨슈머는 메세지(이벤트)를 읽는 역할 주키퍼는 카프카 클러스터를 관리하는 역할, 추후에는 컨플루언트에서 주키퍼와 연동하지 않도록 구성할 예정이라고함 Kafka 구성요소 Topic / Partition / Offset 종류 Topic 메세지를 구분하는 단위 즉 특정 스트리밍 데이터임 (예시로 파일시스템 폴더라고 생각하면됨) 토픽은 이름으로 구분 한개의 토픽은 한개 이상의 파티션으로 구성됨 Parti..
[OTHER] 동시성 문제 해결 방법
·
OTHER
동시성 문제 해결 방법 Synchronized 이용 RDB Lock 활용 Redis 활용 (Lettuce or Redisson) Synchronized 이용 Synchronized 키워드를 통하여 메소드 해당 블럭을 동기화처리를 함 Synchronized가 선언된 블럭에는 동시에 하나의 스레드만 접근이 가능하기 때문에 동시성 문제를 해결가능 하지만 Synchronzied를 통하여 해결하는 방법은 단일 인스턴스일 경우에만 가능함, 예를 들어서 데이터에 여러개의 인스턴스가 접근하는 경우에는 다수의 인스턴스가 접근이 가능하기 때문에 레이스컨디션이 발생함 (실무에서는 거의 사용되지 않는 방법) RDB Lock 활용 Lock 종류 종류 특징 Pessmistic Lock 실제로 데이터에 Lock을 걸어 정합성을 맞..
[KOTLIN] 불필요한 객체 생성을 피하라
·
KOTLIN
객체 생성 비용 발생하는 경우 64비트 JDK에서 객체는 8바이트의 배수, +_앞부분은 12바이트 헤더 캡슐화된 객체는 함수 호출 비용이 발생하며 비용은 크지는 않지만 티끌모아태산임 객체 생성시 비용이 발생함 불필요한 객체를 제거할 방법 객체 선언 객체를 재사용함 캐시를 활용하는 팩토리 함수 팩토리 메서드를 가지면 캐시를 가질수 있음 쓰레드풀, 커넥션풀 등 객체생성이 무겁고 동시에 여러 mutable 객체를 사용하는 경우 적합함 모든순수 함수는 캐싱을 활용할 수 있음 (메모이제이션)적합 캐싱처리하면 대신 메모리 사용은 증가, 적절하게 활용해야함 private val FIB_CACHE = mutableMapOf() //캐싱 처리해서 재사용 예시 fun fib(n: Int): BigInteger = FIB_..