본문 바로가기

전체 글

[Spring Boot] Caused by: RestStatusException{status=400} org.springframework.data.elasticsearch.RestStatusException: Elasticsearch exception [type=illegal_argument_exception, reason=Unknown tokenizer type [nori_tokenizer] for [ksb_custom_korean_tokenize.. Spring Boot에서 Elasticsearch 테스트 컨테이너를 띄우는 도중 위와 같은 문제를 만났습니다. 코드는 아래와 같습니다. @TestConfiguration @EnableElasticsearchRepositories(basePackageClasses = {UserSearchRepository.class,UserSearchQueryRepository.class}) public class ElasticTestContainer extends AbstractElasticsearchConfiguration{ private static final String ELASTICSEARCH_VERSION = "7.10.2"; private static final DockerImageName ELASTICSEA.. 더보기
[Spring Boot] A bean with that name has already been defined ~ in defined in @EnableElasticsearchRepositories declared on ElasticsearchRepositoriesRegistrar.EnableElasticsearchRepositoriesConfiguration and overriding is disabled. 이 글을 읽기 전에 https://ksb-dev.tistory.com/313를 읽고 오시는 것을 추천드립니다. 💡 해당 글과 이 글의 내용은 매우 밀접하게 연관되어 있습니다. 1. 문제 Spring Boot와 Elasticsearch 연동을 테스트 하던 중 제목과 같은 에러를 만날 수 있었습니다. 패키지 구조는 아래와 같습니다. es_springboot -config -AbstractElasticsearchConfiguration.java -ElasticSearchConfig.java -domain -UserDocument.java -repository -UserSearchRepository.java 위 오류와 직접적으로 연관이 있는 클래스는 세 개 입니다. @Configuration @EnableEla.. 더보기
[Spring Boot] JPA 빈 등록 1. @Repository를 사용하지 않아도 된다. 흔히 JPA를 사용하면 아래와 같이 사용합니다. public interface User extends JpaRepository { } 위 그림과 같이 @Reposotory를 사용하지 않아도 됩니다. 왜 일까요? 상속받은 JpaReposotory에 @Component가 있는 것일까요? 확인해 보면 @NoRepositoryBean이 설정되어 있어 빈으로 등록하지 않는다는 것을 알 수 있습니다. 💡 https://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/repository/NoRepositoryBean.html 2. @EnableJpaRepositories JPA.. 더보기
백준 - 1707 이분 그래프(Java) https://www.acmicpc.net/problem/1707 1707번: 이분 그래프 입력은 여러 개의 테스트 케이스로 구성되어 있는데, 첫째 줄에 테스트 케이스의 개수 K가 주어진다. 각 테스트 케이스의 첫째 줄에는 그래프의 정점의 개수 V와 간선의 개수 E가 빈 칸을 사이에 www.acmicpc.net bfs 문제입니다. 이분 그래프는 아래 그림과 같이 두 가지의 집합으로 구분할 수 있어야 합니다. 때문에, bfs로 완전 탐색을 하면서 두 가지 집합으로 구분하시면 됩니다. 아직 방문을 하지 않았다면 0(default), 1번 집합인 경우 2, 2번 집합인 경우 1로 구분하시면 됩니다. if(visited[nn] == 0){ qu.add(nn); visited[nn] = 3 - visited[cn.. 더보기
엘라스틱서치 데이터 삽입, 조회, 수정, 삭제, _bulk API 1. 개요 엘라스틱서치에 데이터를 삽입, 수정, 삭제를 해 보도록 하겠습니다. 참고로, 엘라스틱서치의 모든 요청은 REST API를 사용합니다. 엘라스틱서치의 경우 버전마다 변경사항이 매우 큽니다. 때문에, 버전을 잘 확인해보시기 바랍니다. 💡 이 글은 7.0 ~ 8.X 사이의 버전을 타켓으로 하고 있습니다. 추가로, 제 엘라스틱서치의 버전은 8.7입니다. 엘라스틱 8.0이후 버전은 Security로 인해 모든 요청에 사용자 인증이 필요합니다. 때문에 저와 같이 Postman을 쓰시는 분들은 아래 그림과 같이 인증 셋팅이 필요합니다. 💡 자세한 인증 사항은 https://ksb-dev.tistory.com/309 에서 알 수 있습니다. 2. 삽입 엘라스틱서치에 데이터를 삽입하기 위해서는 PUT 요청으로 .. 더보기
docker container shell 관리자 접근 지금까지 docker contaienr shell에 접근할 때, 아래와 같은 방법을 사용했습니다. docker exec -it '컨테이너ID' sh vim을 다운받기 위해서 우선 apt update를 입력하니 아래와 같이 권한 거부가 발생했습니다. sudo를 사용해도 해당 명령어를 차증ㄹ 수 없다는 말만 나왔습니다. su 명령어를 치니 Password를 입력하라는데, 제가 아는 모든 비빌번호를 입력해도 인증 실패가 뜹니다. 구글링 결과 쉘 접근에서 관리자로 접근하는 방법을 찾았습니다. 명령어는 아래와 같습니다. docker exec -itu0 '컨테이너ID' sh 이후에 apt update를 하니 잘 되었습니다. 더보기
엘라스틱서치 8.X 도커로 무작성 실행해보기 1. 개요 검색엔진으로 유명한 엘라스틱 서치(Elastic Search)를 도커로 실행해 볼 것입니다. 엘라스틱 서치 버전 8 부터 Security가 default로 설정되어 있기 때문에, 이전 버전과 달리 비밀번호를 설정해야 합니다. 이제부터 그 과정에 대해 설명하도록 하겠습니다. 💡 기본적으로 도커가 깔려있어야 합니다. 2. 실행하기 우선 엘라스틱 서치의 도커 이미지를 다운로드 받아야 합니다. 제가 다운로드 받은 버전은 가장 최신 버전인 8.7.0 입니다. docker pull docker.elastic.co/elasticsearch/elasticsearch:8.7.0 다운로드 받은 이미지를 실행하는 코드는 아래와 같습니다. # -p 9200:9200 -> 엘라스틱 서치에 접속하는 포트입니다. # -.. 더보기
3. 쿠버네티스에서 애플리케이션을 동작시키는 구조 - 6 3.6 파드를 안전하게 종료하기 위해 고려해야 할 사항 정상 혹은 비정상저긍로 종료되는 어떤 경우이든 쿠버네티스 입장에서 종료 요청이 오면 비동기적으로 종료 처리를 시작하고 Terminating 상태로 변경시키는 흐름으로 동작한다. 종료 처리는 SIGTERM 처리, SIGKILL 처리 순서로 실행된다. 또 이와 병행하여 서비스에서 제외되는 처리가 이루어진다. SIGTERM 처리, SIGKILL 처리와 서비스에서 제외되는 처리가 비동기로 이루어진다는 것은 파드를 종료할 때 서비스에서 제외되기 전 SIGTERM 처리를 할 수 있다는 의미다. 결국 서비스에서 제외되기 전에 파드가 클라이언트 요청에 정상적으로 응답될 수 없는 상태가 될 수 있다는 의미다. 파드는 그 특성상 자주 동작과 종료를 반복하기 때문에 이.. 더보기