전체 글 (64) 썸네일형 리스트형 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 .. Golang - Connect to MongoDB 1. MongoDB 생성Golang에서 MongoDB를 연결하기 전, MongoDB를 생성합니다.Atlas에서 무료로 MongoDB를 생성할 수 있습니다.2. MongoDB 접속 및 테스트 데이터 입력admin> show dbs;admin 296.00 KiBconfig 500.00 KiBlocal 5.72 MiBadmin> use example;switched to db exampleexample> show collections;example> db.example.insertOne({hello: "world!"});{ acknowledged: true, insertedId: ObjectId('66ead2add160d405b44abe79')}example> show collections;e.. Golang - Connect to MySQL 1. MySQL 생성MySQL에 접속하기 이전에 접속할 MySQL을 생성합니다.Local에 MySQL을 다운로드 받거나 AWS에서 MySQL을 생성하는 등 각자의 방식으로 접속할 MySQL을 생성합니다.2. MySQL Table 생성MySQL 접속mysql -u username -h hostname -P 3306 -pEnter password:사용할 데이터베이스로 변경mysql> USE {databasename}테이블 생성 및 테스트 데이터 INSERTDROP TABLE IF EXISTS album;CREATE TABLE album ( id INT AUTO_INCREMENT NOT NULL, title VARCHAR(128) NOT NULL, artist VARCHAR.. Golang - 프로젝트 시작 1. Golang 버전 확인golang 버전을 확인합니다.go env | grep versionGOROOT="/Users/user/.goenv/versions/1.20.13"GOTOOLDIR="/Users/user/.goenv/versions/1.20.13/pkg/tool/darwin_arm64"2. go modgo mod init 을 통해 신규 모듈을 생성합니다.go mod init example/hello다음과 같은 파일이 생성됩니다.go.modmodule example/hellogo 1.203. main 코드 작성다음 코드를 작성 후 실행합니다.main.gopackage mainimport "fmt"func main() { fmt.Println("Hello, World!") }다음과 같이 실행합.. MongoDB Replication IntroMongoDB의 복제에 대해서 알고 있지만 정확하게 어떻게 동작하는지는 잘 모르고 있다. MongoDB에서는 Replica Set의 형태로 데이터베이스 단에서 복제 기능을 제공하기 때문에 별도의 다른 설정 없이 쉽게 복제 구성이 가능하다. 그리고 안정적으로 동작한다. 복제 방식 쪽에서 문제가 발생할 확률이 적기 때문에 트러블 슈팅이나 깊게 공부할 기회가 적다. 따라서 이렇게 체계적인 형태로 정리하여 남기고 싶다. 공부하며 정리한 내용이기 때문에 추상적이고 정확하지 않은 정보가 있을 수 있다.Create Oplog of PrimaryReplica Set에서는 Primary가 쓰기 요청을 받는다. Primary는 DML을 받으면 다음과 같은 일들을 수행한다.DML의 데이터를 메모리상에 업데이트한다... 이전 1 2 3 4 ··· 8 다음