ElasticSearch 샤드 배치 방식 변경하기
·
ElasticSearch
샤드 배치는 대부분 ElasticSearch가 알아서 해줍니다.하지만 unassinged 샤드가 발생해서 5회 이상 재할당이 실패한 경우 더 이상 자동으로 할당이 되지 않습니다. 또 다른 상황으로 마이그레이션을 할 때 샤드를 다른 노드로 배치해야 하는 경우도 있습니다. 이런 상황에서 샤드 배치 방식을 수동으로 변경해야 하는데, 그 방법에 대해 알아보겠습니다. 샤드 배치 명령어샤드를 배치하는 방법은 4가지가 있습니다.`reroute`: 샤드 하나를 특정 노드에 배치`allocation`: 샤드 배치 방식을 클러스터 전체에 적용`rebalance`: 샤드 재분배 방식을 클러스터 전체에 적용`filtering`: 특정 조건에 해당하는 샤드들을 특정 노드에 배치이 중에서 샤드 하나를 특정 노드에 배치하는 `re..
ncloud NKS에서 Nginx Ingress Controller 설치부터 HTTPS 적용하기
·
Kubernetes
이번 포스팅에서는 NKS에서 nginx ingress controller를 설치해서 등록된 도메인을 연결하고, cert-manager와 letsencrypt로 HTTPS를 적용하는 과정을 다룹니다. 실행 환경은 `kubectl config`를 통해 생성한 NKS 클러스터에 명령어를 입력가능한 상태입니다.kubectl config는 이전 포스팅의 마지막 kubectl config 설정 부분을 참고하시면 됩니다.(2025.01.01 - [Kubernetes] - ncloud NKS로 쿠버네티스 클러스터 구성하기) 0. Ingress?Ingress는 쿠버네티스 클러스터에서 서비스 리소스와 완전히 독립적인 리소스입니다.Ingress는 프라이빗 클러스터 내부의 서비스를 외부에 노출시키지 않고 라우팅을 할 수 있으..
ncloud NKS로 쿠버네티스 클러스터 구성하기
·
Kubernetes
이번 포스팅에선 ncloud의 NKS(Ncloud Kubernetes Service)를 이용해 쿠버네티스 클러스터를 구성하는 과정을 다룹니다. ncloud에서 제공하는 리소스 공식 문서와 여러 블로그를 통해 찾아봤지만, 2024년 말 기준 변경된 부분이 많아 직접 구성하며 다시 정리했습니다.위의 이미지는 대략적인 클러스터 구성도입니다.아래 순서대로 진행하겠습니다.VPC 생성Subnet 생성NAT Gateway 생성NKS Cluster 생성Route Table 설정1. VPC 생성`VPC` - `VPC Management` - `VPC 생성` 버튼을 눌러 VPC를 만듭니다.2. Subnet 생성`VPC`- `Subnet Management` - `Subnet 생성` 버튼을 눌러 서브넷을 만들어 줍시다.k8..
MySQL 전문 검색(Full Text Search) 인덱스로 간단한 검색 엔진 구현하기
·
MySQL
프로젝트를 진행하며 "내가 작성한 편지를 검색하는 효율적인 방법이 없을까?"를 고민하다 MySQL의 전문 검색 인덱스(Full Text Search)를 이용해 간단한 검색 엔진을 구현해 보기로 했습니다.전문 검색 인덱스 (Full Text Search Index)1MB가 넘는 컬럼이 있다고 가정했을 때, B-Tree 인덱스는 1MB 전체를 인덱스 키로 잡지 않고 3,072 바이트(InnoDB)까지만 잘라서 인덱스 키로 사용합니다.그리고 B-Tree 인덱스는 특성상 전체가 같거나, 왼쪽부터 읽으며 일부가 일치하는지만 확인할 수 있습니다. 인덱스 키 값의 왼쪽을 기준(Left-most)으로 오른쪽 값이 정렬되어 있기 때문이죠. "LIKE"문으로 검색할 때 왼쪽 값이 없는 패턴이라면 Full Table Sca..
[Spring] MockMvc 사용 시 Page 인터페이스의 직렬화 문제
·
Spring
환경Spring Boot 3.3.4Amazon Corretto 17.0.11문제 발생@BeforeEachvoid setUp() { mockMvc = MockMvcBuilders.standaloneSetup(replyController) .setCustomArgumentResolvers(new PageableHandlerMethodArgumentResolver()) .build(); // 생략 ..}@DisplayName("published 값에 따른 편지와 1:1로 대응하는 답장을 페이징으로 응답할 수 있다")@ParameterizedTest@ValueSource(booleans = {true, false})void success_p..
ElasticSearch 클러스터 설정 톺아보기
·
ElasticSearch
ElasticSearch 기본 환경 설정클러스터의 환경 설정은 `elasticsearch.yml` 파일로 할 수 있습니다.Cluster 영역클러스터 내의 모든 노드들은 동일한 클러스터의 이름을 사용하는데, 그 이름을 설정합니다.설정하면 클러스터 전체에 적용됩니다.cluster.name: myCluserName- 아무 값도 설정하지 않으면 `elasticsearch`라는 이름으로 설정됩니다.Node 영역해당 노드에만 적용되는 설정입니다.node.name: myNode1노드의 이름은 클러스터 내에서 유니크해야 합니다.7.x 버전부터 기본값으로 `${HOSTNAME}`을 사용합니다.Path 영역데이터와 로그를 저장하는 위치를 설정할 수 있습니다.이 위치 설정 값이 없으면 ElasticSearch가 실행되지 않..
ElasticSearch 기본 개념
·
ElasticSearch
클러스터와 노드클러스터는 여러 대의 컴퓨터나 구성 요소를 논리적으로 연결한 전체를 하나인 것처럼 사용하게 하는 기술을 말합니다.ElasticSearch 클러스터여러 ElasticSearch 프로세스들을 논리적으로 연결해 하나의 프로세스처럼 사용하게 하는 기술고유한 클러스터 이름과 `UUID`를 갖는다.노드클러스터를 구성하는 하나의 ElasticSearch 프로세스고유한 노드 이름과 `UUID`를 갖는다.(노드 이름을 설정하지 않으면 7.x 부터 `${HOSTNAME}`을 사용. 이전 버전은 랜덤 값 사용)클러스터 내에서 서로 동일한 클러스터의 이름을 인식한다.위 그림의 각 노드들은 하나의 ElasticSearch로 동작하기 때문에 어떤 노드에 요청을 보내더라도 동일한 응답과 응답 속도를 보장받을 수 있습..
OpenFeign Querydsl 6 버전 도입과 QClass 생성 문제
·
Querydsl
프로젝트에서 동적 쿼리를 적용하기 위해 Querydsl을 도입하기로 의사 결정했습니다.예전 프로젝트에서 사용했던 Querydsl 5.1 버전을 사용하려 했으나 보안 취약점(CVE-2024-49203)이 발견되어 사용할 수 없었습니다.CVE-2024-49203 보안 취약점Querydsl and OpenFeign Querydsl Java Library Vulnerability Permits SQL/HQL Injection 내용에 따르면, 보안 취약점은 정렬을 수행하기 위해 `OrderSpecifier`를 사용할 때 공격자가 SQL/HQL Injection 공격을 할 수 있다는 것입니다.`OrderSpecifier`가 공격자의 입력을 삭제하지 않기 때문에 발생하는 문제로 소개하고 있는데, 좀 더 자세한 내용을..