전체 글

    [Basic] Elasticsearch 인덱스(Index) 구성하기 (2)

    오늘은 지난 글에 이어서, 인덱스를 구성하기 위한 요소들에 대해 알아봅시다. 지난 글에서는 인덱스 샤드 수, 레플리카 수 등 일반적인 설정을 정의할 수 있는 Settings와 각 필드의 속성과 전체적인 스키마를 정의하는 Mappings에 관해 알아봤습니다. 오늘은 나머지 2가지, 문자열 필드의 분석기 등을 설정하는 Analysis와 검색 시의 유사도를 정의하는 Similarity에 대해 추가로 알아보겠습니다. Elasticsearch 시리즈는 7.10 버전을 기본으로 설명합니다. 필요하다면 8.0 이후의 버전 내용을 추가로 설명합니다. 분석(Analysis) 인덱스 분석 모듈은 문자열 필드를 개별 용어(term)로 변환하는 데 사용할 수 있는 분석기를 구성하도록 하는 레지스트리 역할을 합니다. 텍스트 분..

    [Basic] Elasticsearch 인덱스(Index) 구성하기 (1)

    검색 엔진을 구축하기 위해서 가장 먼저 필요한 것은 무엇일까요? 검색 대상이 되는 도큐먼트(Document)가 들어갈 수 있는 DB 같은 공간을 만들어야겠죠? 이번 글의 목표는 도큐먼트의 집합인 인덱스(Index)를 구성하는 요소를 이해하고, 예제를 통해 직접 인덱스를 정의하면서 ES에서 사용하는 기본적인 CRUD 방식에 익숙해지는 것 입니다. Elasticsearch 시리즈는 7.10 버전을 기본으로 설명합니다. 필요하다면 8.0 이후의 버전 내용을 추가로 설명합니다. 인덱스 구성 요소 인덱스 모듈은 인덱스별로 생성되는 모듈로 인덱스와 관련된 모든 측면을 제어합니다. 일반적으로 인덱스를 정의할 때 사용되는 세부 모듈은 간략하게 다음과 같습니다. - 인덱스 샤드 수, 레플리카 수 등 일반적인 설정을 정의..

    [Basic] Elasticsearch에 대해 알아봅시다!

    엘라스틱서치(Elasticsearch, ES) 검색엔진에 대해 차근차근 알아가는 시리즈 글을 써볼 예정입니다. 해당 시리즈는 ES의 색인과 검색, 형태소 분석기 등 기본적인 기능 또는 검색엔진 구축 과정에서의 이슈 해결을 주제로 이어질 예정입니다. 오늘은 그 첫 번째로 Elasticsearch의 기본 개념에 대해 전반적으로 살펴봅시다! Elasticsearch 란? You know, for search (and analysis) 당연히 검색(그리고 분석)을 위한 엔진입니다! ES는 엘라스틱 스택(Elastic Stack)의 핵심인 분산 검색 및 분석 엔진입니다. Elastic Stack 중 로그스태시(Logstash)와 비츠(Beats)는 데이터 수집, 집계, 보강을 용이하게 하여 ES에 저장할 수 있게..

    [글또] 글또 8기를 시작하며,

    안녕하세요, 본격적으로 블로그에 포스팅하는 건 처음인 것 같네요! 누군가 찾아올 수도 있는 블로그에 처음으로 제 소개를 하는 글이 될 것 같아 설렙니다. 개인 개발 블로그에 글을 쓰려고 마음먹은 이유 오늘부터 글을 다시 쓰기로 마음먹은 이유는, 온전히 글또 모임 덕분입니다. 글또란? 개발자를 위한 글쓰기 모임, 글쓰는 또라이들을 위한 커뮤니티입니다. * 공식 페이지 - 노션: https://www.notion.so/zzsza/ac5b18a482fb4df497d4e8257ad4d516 - 페이스북 : https://www.facebook.com/groups/geultto/?locale=ko_KR 사실 글또 지원서나 자기소개에 적지는 않았지만, 데이터를 다루는 일을 해야겠다고 마음먹은 후 가장 처음으로 관심..

    이코테 CHAPTER 10 그래프 이론 정리

    그래프 이론 그래프 이론 복습 (추후에 추가 예정) 1. 서로소 집합 서로소 집합(Disjoint Sets) : 공통 원소가 없는 두 집합 서로소 집합 자료구조 서로소 부분 집합들로 나누어진 원소들의 데이터를 처리하기 위한 자료구조 두 종류의 연산을 지원 합집합(Union): 두 개의 원소가 포함된 집합을 하나의 집합으로 합치는 연산 찾기(Find): 특정한 원소가 속한 집합이 어떤 집합인지 알려주는 연산 합치기 찾기(Union Find) 자료구조라고도 불림 여러 개의 합치기 연산이 주어졌을 때 서로소 집합 자료구조의 동작 과정은 다음과 같음 합집합 연산을 확인하여, 서로 연결된 두 노드 A, B를 확인 A와 B의 루트 노드 A’, B’ 를 각각 찾는다. A’를 B’의 부모 노드로 설정한다. 일반적으로 ..

    이코테 CHAPTER 09 최단경로 정리

    가장 빠른 길 찾기 최단 경로 알고리즘 가장 짧은 경로를 찾는 알고리즘 한 지점에서 다른 한 지점까지의 최단 경로 한 지점에서 다른 모든 지점까지의 최단 경로 모든 지점에서 다른 모든 지점까지의 최단 경로 각 지점은 그래프에서 노드로 표현 지점 간 연결된 도로는 그래프에서 간선으로 표현 다익스트라 최단 경로 알고리즘 개요 특정한 노드에서 출발하여 다른 모든 노드로 가는 최단 경로를 계산 음의 간선이 없을 때 정상적으로 동작함 현실 세계의 도로(간선)은 음의 간선으로 표현되지 않음 → 사용 가능 그리디 알고리즘으로 분류됨, 또는 DP 매 상황에서 가장 비용이 적은 노드를 선택해 임의의 과정을 반복 다익스트라 최단 경로 알고리즘 출발 노드 설정 최단 거리 테이블 초기화 방문하지 않은 노드 중에서 최단 거리가..

    이코테 CHAPTER 03 그리디 실전 문제

    실전문제 숫자 카드 게임 숫자 카드 게임은 여러 개의 숫자 카드 중에서 가장 높은 숫자가 쓰인 카드 한 장을 뽑는 게임이다. 단, 게임의 룰을 지키며 카드를 뽑아야 하고 룰은 다음과 같다. 숫자가 쓰인 카드들이 N x M 형태로 놓여 있다. 이때 N은 행의 개수를 의미하며, M은 열의 개수를 의미한다. 먼저 뽑고자 하는 카드가 포함되어 있는 행을 선택한다. 그다음 선택된 행에 포함된 카드들 중 가장 숫자가 낮은 카드를 뽑아야 한다. 따라서 처음에 카드를 골라낼 행을 선택할 때, 이후에 해당 행에서 가장 숫자가 낮은 카드를 뽑을 것을 고려하여 최종적으로 가장 높은 숫자의 카드를 뽑을 수 있도록 전략을 세워야 한다. 카드들이 N x M 형태로 놓여 있을 때, 게임의 룰에 맞게 카드를 뽑는 프로그램을 만드시오..

    이코테 CHAPTER 03 그리디 정리 및 실전 문제(큰 수의 법칙)

    당장 좋은 것만 선택하는 그리디 그리디 알고리즘(탐욕법) 현재 상황에서 지금 당장 좋은 것만 고르는 방법 일반적인 그리디 알고리즘은 문제를 풀기 위한 최소한의 아이디어를 떠올릴 수 있는 능력을 요구함 그리디 해법은 그 정당성 분석이 중요 단순히 가장 좋아 보이는 것을 반복적으로 선택해도 최적의 해를 구할 수 있는지 검토 예시 최적의 해를 보장하지 못함 일반적인 상황에서 그리디 알고리즘은 최적의 해를 보장할 수 없을 때가 많음 하지만 코테에서의 대부분의 그리디 문제는 탐욕법으로 얻은 해가 최적의 해가 되는 상황에서, 이를 추론할 수 있어야 풀리도록 출제됨 거스름 돈 최적의 해를 빠르게 구하기 위해서는 가장 큰 화폐 단위부터 돈을 거슬러 주면 된다. N원을 거슬러 줘야 할 때, 가장 먼저 500원으로 거슬러..

    이코테 CHAPTER 07 이진 탐색 실전 문제

    실전문제 부품 찾기 동빈이네 전자 매장에는 부품이 N개 있다. 각 부품은 정수 형태의 고유한 번호가 있다. 어느 날 손님이 M개 종류의 부품을 대량으로 구매하겠다며 당일 날 견적서를 요청했다. 동빈이는 때를 놓치지 않고 손님이 문의한 부품 M개 종류를 모두 확인해서 견적서를 작성해야 한다. 이때 가게 안에 부품이 모두 있는지 확인하는 프로그램을 작성해보자. 나의 풀이 N = int(input()) all = list(map(int,input().split())) M = int(input()) find = list(map(int,input().split())) def binary_search(array, target, start, end): while start target: end = mid - 1 # ..

    이코테 CHAPTER 07 이진 탐색 정리

    범위를 반씩 좁혀가는 탐색 순차 탐색 리스트 안에 있는 특정한 데이터를 찾기 위해 앞에서부터 데이터를 하나씩 확인하는 방법 count() 메서드도 내부에서 순차 탐색 수행 최악의 시간 복잡도 O(N) 순차 탐색 구현 # 순차 탐색 소스코드 구현 def sequential_search(n, target, array): # 각 원소를 하나씩 확인하며 for i in range(n): # 현재의 원소가 찾고자 하는 원소와 동일한 경우 if array[i] == target: return i + 1 # 현재의 위치 반환(인덱스는 0부터 시작하므로 1 더하기) print("생성할 원소 개수를 입력한 다음 한 칸 띄고 찾을 문자열을 입력하세요.") input_data = input().split() n = int(..

    이코테 CHAPTER 06 정렬 실전 문제

    실전문제 성적이 낮은 순서로 학생 출력하기 N명의 학생 정보가 있다. 학생 정보는 학생의 이름과 학생의 성적으로 구분된다. 각 학생의 이름과 성적 정보가 주어졌을 때 성적이 낮은 순서대로 학생의 이름을 출력하는 프로그램을 작성하시오. 나의 풀이 n = int(input()) name_score = [] for i in range(n): name, score = input().split() name_score.append([name,int(score)]) name_score = sorted(name_score, key = lambda x: x[1]) for i in range(n): print(name_score[i][0], end = ' ') ​ - 처음에 성적인 것 보고 계수 정렬 쓰려고 했다가 안되는..

    이코테 CHAPTER 06 정렬 + 실전 문제(위에서 아래로)

    기준에 따라 데이터를 정렬 정렬 Sorting 데이터를 특정한 기준에 따라 순서대로 나열 일반적으로 문제 상황에 따라서 적절한 정렬 알고리즘을 공식처럼 사용 선택 정렬 처리되지 않은 데이터 중에서 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸는 것을 반복 코드 구현 매번 선형 탐색 → 이중 반복문 array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8] for i in range(len(array)): min_index = i # 가장 작은 원소의 인덱스 for j in range(i + 1, len(array)): if array[min_index] > array[j]: min_index = j array[i], array[min_index] = array[min_index], a..