본문 바로가기

분류 전체보기

(68)
MongoDB Task Executor Pool What is Task Executor? TaskExecutor란 MongoDB의 작업 단위를 처리하는 기본 컴포넌트이다. https://github.com/mongodb/mongo/blob/master/src/mongo/executor/README.md#taskexecutorMongoDB 소스코드 내부에서 event와 callback의 개념을 갖고 다음과 같은 기능을 제공한다. 원하는 경우 취소하거나 나중에 예약할 수 있는 기능이 포함된 작업 예약.이벤트를 만들고, 스레드가 이벤트를 구독하도록 하고, 원하는 경우 구독된 스레드에 알림 전송단일 또는 여러 원격 호스트에서 원격 및 종료 명령을 예약What is Task Executor Pool? mongos는 Client로 부터 받은 쿼리 요청을 처리하기..
MongoDB - Collect slow query using Fluentbit and Opensearch 개요MongoDB는 audit log가 아닌 log는 단일 로그 파일로 로그를 남긴다. 이 때, 운영상 중요한 slow query 로그나, error 로그들도 단일 파일에 남기 때문에 이런 로그들의 관리가 어려워지는 경우가 종종 있다. 로그를 수집하여 Opensearch에 적재하는 경우 대량의 로그가 쌓이다보면 로그의 retention을 짧게 조정해야만 하는 경우가 생긴다. slow query나 error로그는 더 긴 기간동안 보고싶지만 하나의 Index에서 관리하다 보니 오래 보지 못하는 경우가 종종 생긴다.  이 글에서는 Fluentbit와 opensearch를 사용해 MongoDB의 로그를 수집하는 방법을 설명한다. 이 때, slow query와 error로그는 별도의 Opensearch Index..
MongoDB Debug Mode로 빌드하기 MongoDB를 사용하고 있는가. 그렇다면 MongoDB에 대해서 얼마나 알고 있는가. MongoDB를 알 수 있는 가장 좋은 방법은 결국 직접 실행해보는 것이다. 이번에는 MongoDB를 Debug Mode로 빌드하고 gdb를 사용해서 디버깅해보는 방법을 알아보자. Overviewgdb를 사용해서 MongoDB를 디버그 모드로 실행해볼 수 있다. Debug Mode로 빌드하기 PrerequisiteServerMongoDB를 빌드, 실행할 수 있는 서버가 필요하다. 각자 알아서 서버를 잘 준비해보도록하자. 스토리지는 100GB 정도면 적절하다. ( 나는 그랬다. ) mongod를 빌드하기 위해서 필요한 최소한의 용량은 13GB라고 하지만, 실제로 수행했을 때에는 약 34GB 정도의 공간을 차지하는 것을 ..
Confluence Wiki 검색 문법 회사에서 Confluence Wiki를 사용하고 있다면 Wiki의 검색 성능은 매우 구리다는 것을 체감할 수 있다. 하지만 따로 검색엔진을 만들수도 없다. 이 검색에 만족하며 살 수 밖에...  하지만 검색 문법을 익힌다면 조금 더 나은 검색을 통해 원하는 정보를 빠르게 얻을 수 있다.  Exact Match 특정 단어가 포함된 문서를 검색하기 위해서는 "" 를 사용한다. 예를 들어서, MongoDB 라는 단어가 포함된 문서를 찾고 싶다면 다음과 같이 검색한다. "MongoDB" 이 Exact Match는 단독으로 사용할 때 보다 융합하여 사용할 때 빛을 발한다. 예를 들어서, MySQL 을 Debug Mode로 실행하는 방법에 대해서 검색하고 싶다면 그 문서에는 MySQL과 Debug Mode 혹은 g..
WiredTiger 직접 빌드해서 MongoDB 데이터파일 살펴보기 WiredTiger란?WiredTiger란 MongoDB에서 사용하는 기본 스토리지 엔진이다. MongoDB는 3.2 버전부터 WiredTiger를 기본 스토리지 엔진으로 사용하기 시작했으며, 그 전까지는 MMAPv1 이라고 하는 스토리지 엔진을 사용하고 있었다. MMAPv1 스토리지 엔진을 탑재한 MongoDB는 많은 단점이 있었는데, 대표적으로 MMAPv1 스토리지 엔진은 도큐먼트 단위의 동시성 제어를 지원하지 못하고 컬렉션 단위의 동시성 제어를 제공했다. 이로 인해서 동시에 같은 컬렉션에 데이터의 쓰기가 발생하는 경우 처리량이 좋지 않고 병목현상이 발생했다. MongoDB에서는 이러한 단점들 때문에 WiredTiger라는 스토리지 엔진을 인수하고 기본 스토리지 엔진으로 사용하기 시작했다. Wired..
MongoDB Journaling 다른 여타 데이터베이스들과 동일하게 MongoDB는 데이터의 영속성을 보장하기 위해서 Journaling이라는 기법을 사용한다.다른 데이터베이스들에서는 WAL(Write Ahead Log)이라고 불리기도 한다. Journaling은 무엇이고 왜 쓰는지에 대해서 알아보자.Journaling 이란?MongoDB의 공식 홈페이지에 보면 Journaling에 대해서 다음과 같이 설명하고 있다.https://www.mongodb.com/docs/manual/core/journaling/To provide durability in the event of a failure, MongoDB uses write ahead logging to on-disk journal files.MongoDB 서버가 예기치못하게 종료되..
Golang - Swagger 연동 swag github : https://github.com/swaggo/swag?tab=readme-ov-file#getting-startedswag은 golang에서 swagger 문서를 쉽게 작성할 수 있도록 도와주는 라이브러리입니다.swag은 echo로 개발된 HTTP Server도 지원하기 때문에 swag을 통해 API 문서를 작성해보겠습니다.1. swag 설치다음 명령어를 통해 최신 버전의 swag을 설치합니다.go install github.com/swaggo/swag/cmd/swag@latest2. main.go 수정swag은 main.go에 작성된 주석을 파싱하여 swagger 문서를 생성해줍니다.다음과 같은 코드를 작성합니다.package mainimport ( "net/http" ..
Golang - echo를 활용한 API Server 만들기 echo는 go를 사용해서 HTTP Restful API Server를 개발할 수 있는 framework 입니다.echo를 사용해서 HTTP Server를 만들어봅시다.1. main.go 작성다음과 같이 main.go를 작성해줍니다.package mainimport ( "net/http" "github.com/labstack/echo/v4" "github.com/labstack/echo/v4/middleware")func main() { e := echo.New() e.Use(middleware.Logger()) e.Use(middleware.Recover()) e.GET("/", hello) e.Logger.Fatal(e.Start(":3000"))}func ..