전체 글 87

글또 10기 회고

오늘은 글또 10기 회고를 해보려고 합니다.이 블로그의 처음 시작이 글또였고, 시작이 2020년 3월이였으니 벌써 5년이란 시간이 흘렀네요.첫 회사를 다니던 시기였고, 이제까지 이직을 2번하여 현재는 3번째 회사에서 8년차 개발자로 일을 하고 있습니다.뭔가 하고 싶은 이야기는 많은데 어떻게 정리를 해야할 지 모르겠어서 두서없이 좀 적어보겠습니다.글또 회고글또를 시작하게된 계기는 제 스스로의 커리어 성장을 위한 공부가 제일 컸고, 업계의 다양한 사람들을 만나서 교류하고 싶어서였던 것 같습니다.그래서 이제 5년을 돌아보면, 열심히 공부했던 내용들을 정리하면서 글또를 참여하였지만 쓴 글은 150개는 채 안되긴 하지만 제 스스로 공부에는 정말 도움이 많이 되었던 것 같습니다.헷갈리는 부분을 정리해놓고 제가 매번..

나의 이야기 2025.03.30

[elasticsearch] 텍스트 검색

색인하는 부분은 어느정도 알아보았으니 오늘은 검색에 대한 내용을 알아보도록 하겠습니다.Query DSLDSL은 Domain Specific Language라고 도메인에 특정한 언어라는 뜻입니다.Elasticsearch는 Query DSL이라고 Elasticsearch만의 특정한 쿼리 언어를 제공합니다.Elasticsearch의 Query는 Json으로 작성해야 합니다.이런게 있구나라고만 알고 Elasticsearch는 Json으로 검색 쿼리를 작성하는 것이라고만 생각하시면 됩니다.Search API검색 역시 rest API 방식을 지원합니다.검색은 get, post 모두 지원하고 아래와 같이 Query DSL을 Json으로 구성해서 body에 넣어서 보내면 됩니다.GET /my-index-000001/_..

ETC/Elasticsearch 2025.03.16

[elasticsearch] 노드 관리 (Node Lifecycle)

Overviewelasticsearch의 노드를 관리하는 방법에 대해서 오늘은 알아보겠습니다.elasticsearch 클러스터를 관리하다보면, 노드를 추가하거나 제거하는 일이 발생하기 마련인데요.서비스 중에 노드를 그냥 종료하게 되면, 바로 종료가 되면서 에러를 발생시킬 수 있습니다.graceful termination이라는 단어를 들어보셨을텐데요.'우아한 종료'라고 해서 서비스 중에 문제 없이 종료하는 방식을 뜻합니다.elasticsearch는 graceful termination을 위해서 별도의 API를 호출해주어야만 하는 구조입니다.Node Lifecycle그래서 노드의 lifecycle을 관리할 수 있는 API가 존재합니다.GET, PUT, DELETE로 이루어진 shutdown API인데요.ht..

ETC/Elasticsearch 2025.03.02

[elasticsearch] 색인 -2

0. 개요오늘은 색인 중에서도 텍스트에 대해서 좀 더 자세하게 알아보도록 하겠습니다.보통 DB를 사용하면 Like 검색을 주로 하는데요. Like 검색은 테이블의 전체 row를 탐색하기 때문에 데이터가 많아지면 많아질수록 기하급수적으로 늘어나는 것을 겪어보셨을거에요.물론 mysql에서도 fulltext 검색을 위한 index가 존재합니다. 바로 ngram parser인데요. ngram parser는 https://seokhyun2.tistory.com/93 글에서 좀 더 자세하게 확인해보실 수 있습니다.ngram parser를 사용하더라도, 텍스트 검색에 한계를 느끼게 되면 검색엔진을 도입하게 되는 경우가 많습니다.그래서 오늘은 텍스트의 색인에 대해 좀 더 자세하게 알아보겠습니다.먼저 텍스트 검색에 대한..

ETC/Elasticsearch 2025.02.02

[elasticsearch] 색인 -1

0. 개요elasticsearch라는 검색엔진을 알아보고 있습니다.검색엔진에서 검색을 하려면 데이터를 일단 적재해야겠죠?elasticsearch에 데이터를 적재하는 작업을 색인이라고 합니다.오늘은 색인에 대해서 예시를 들어가면서 알아보도록 하겠습니다.elasticsearch에 연결해서 작업하는 방식은 여러가지가 있는데, 제일 간단한 rest API 호출 방식을 기준으로 알아보도록 하겠습니다.1. elasticsearch 실행elasticsearch는 우선 간단하게 아래 명령어로 docker를 활용하여 실습할 수 있도록 구성해보도록 하겠습니다.docker run -it -e xpack.security.enabled=false -e discovery.type=single-node -p 9200:9200 --..

ETC/Elasticsearch 2025.01.19

redis의 대체제, valkey (redis vs valkey)

0. 개요요즘 redis의 대체제로 떠오르고 있는 valkey를 소개해보려고 합니다.redis는 오랜 시간 동안, cache의 대명사라해도 과언이 아닐 정도로 굳건하게 자리를 지키고 있었습니다.그런데 도대체 왜 redis를 대체제가 생겨난걸까요? 1. redis licenseredis의 license는 그동안 아무나 무료로 가져다 쓸 수 있도록 오픈되어 있었습니다.그런데 2024년 3월에 license 정책을 변경하였습니다.https://redis.io/blog/what-redis-license-change-means-for-our-managed-service-providers/ What Redis’ License Change Means for Our Managed Service Providers - R..

ETC/Redis 2025.01.05

[elasticsearch] 클러스터

엘라스틱서치는 클러스터로 운영을 하는 구조입니다.엘라스틱서치는 노드를 여러 대 띄우고, 노드들을 연결하여 클러스터로 구성할 수 있습니다.노드들은 역할도 나눌 수 있도록 되어 있습니다.노드 종류는 아래의 총 11가지로 나뉘어집니다.https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html#node-rolesmasterdatadata_contentdata_hotdata_warmdata_colddata_frozeningestmlremote_cluster_clienttransform노드 설정은 elasticsearch.yaml에서 아래와 같이 node.roles 설정을 추가하면 노드의 역할을 지정할 수 있습니다.node.ro..

ETC/Elasticsearch 2024.11.10

[elasticsearch] 데이터 저장

elasticsearch는 data storage로써, 데이터를 저장하는 것이 기본이며 저장된 데이터 중에 검색을 빠르게 할 수 있는 검색엔진입니다.오늘은 elasticsearch가 어떻게 데이터를 저장하는 지 알아보도록 하겠습니다. 우선 RDB를 사용하면, table과 column을 활용하여 데이터의 구조를 선언해서 사용하게 되어있습니다.elasticsearch는 유사하게 index와 field로 구성할 수 있습니다.각 field는 string, integer, boolean 등의 값을 저장할 수 있으며 검색 전략에 따라서 어떤 토크나이저를 사용할 지 설정할 수 있습니다.토크나이저는 추후에 좀 더 자세하게 따로 포스팅해보도록 하겠습니다. RDB와 elasticsearch를 비교해보면 아래의 표와 같이 ..

ETC/Elasticsearch 2024.10.27

[elasticsearch] why elasticsearch?

elasticsearch에 대한 글들을 정리해보려고 하는데, 첫 게시글로 왜 elasticsearch를 사용하는지에 대해서 정리해보려고 합니다.보통 백엔드 개발을 하다보면, elasticsearch를 처음부터 도입하진 않습니다.처음엔 일반적으로 RDB(Relational Database)를 많이 채택하고 서비스를 개발하는데요.서비스가 점점 커지고 검색으로 인한 부하가 커지면서 시스템이 위협?을 받게되면 검색엔진을 도입하게 되고 elasticsearch를 많이 선택하게 됩니다.elasticsearch가 그럼 왜 검색이 빠른지 알아봐야겠죠?elasticsearch는 엘라스틱사가 아파치 루씬을 기반으로 개발/공급하는 검색엔진 솔루션입니다.검색이 빠른 이유는 RDB보다 index를 화려하게 사용하기 때문인데요...

ETC/Elasticsearch 2024.10.13

[python] 파이썬 동시성 프로그래밍

동시성 프로그래밍에 대해서 알기 위해서는 Bound, Thread, Process, Sync, Async라는 개념들을 알고 넘어갈 필요가 있습니다. Bound부터 하나씩 알아보도록 하겠습니다. Bound 동시성 프로그래밍에 대해서 공부하려면 먼저 Bound라는 개념을 알고 갈 필요가 있는데, Bound는 묶인단 뜻으로 작업을 하면서 묶이게 되는 시간을 뜻 합니다. Bound는 CPU Bound와 I/O Bound 2가지로 나뉩니다. CPU Bound CPU를 활용하는 작업에 따라 기다리게 되는 구간을 뜻 합니다. ex) 수학 연산, 딥러닝 연산, 이미지 처리 등 I/O Bound I/O 작업에 대해서 기다리는 구간을 뜻 합니다. ex) 파일 입출력, 네트워크 요청 등 Thread vs Process Th..

python 2024.03.31