이 기사에서는 MongoDB용 C# 테스트 컨테이너를 안내하겠습니다! 저는 데이터베이스를 가동하고 해체하는 오버헤드를 관리하거나 클라우드에서 무언가를 관리하는 것에 대해 생각하고 싶지 않을 때 로컬 데이터베이스 작업에 Testcontainers를 사용하는 것을 좋아합니다. MongoDB에 대해 가지고 있는 C# Testcontainers NuGet 패키지는 함께 작업하는 꿈이기 때문에 MongoDB도 예외는 아닙니다.
이 기사에서는 Testcontainers의 기본 사항을 소개하겠습니다. 그런 다음 C# MongoDB.Driver NuGet 패키지를 통해 새로 생성된 데이터베이스와 상호 작용하는 것이 얼마나 간단한지 보여 드리겠습니다. 컨테이너가 가동되고 있다는 사실조차 모르는 것과 같습니다! 그것에 대해 자세히 살펴 보겠습니다.
Testcontainers는 .NET 애플리케이션을 구축할 때 테스트 및 로컬 개발 워크플로를 크게 향상시킬 수 있는 멋진 NuGet 패키지입니다. Docker 컨테이너를 관리하는 간단하고 효과적인 방법을 제공하므로 가볍고 격리된 인스턴스를 가동하고 아무 일도 없었던 것처럼 해체할 수 있습니다!
즉, Testcontainer를 사용하면 더 이상 테스트 데이터베이스를 설정 및 해제하거나 복잡한 구성 파일을 처리하는 것에 대해 걱정할 필요가 없습니다. 컨테이너 관리의 모든 세부 사항을 처리하므로 이 프로세스가 사소하게 느껴집니다. 저는 이 작업을 수동으로 처리하고 싶지 않습니다.
Testcontainers의 주요 이점 중 일부는 다음과 같습니다.
이 기사에서는 특히 MongoDB용 C# 테스트 컨테이너를 사용하는 방법에 중점을 둘 것입니다. 여기에서 다루는 조언의 대부분은 다른 서비스, 특히 데이터베이스에 적용 가능하지만 MongoDB에 초점을 맞추겠습니다.
C#에서 Testcontainers를 시작하려면 프로젝트에 필요한 종속성을 설치하고 구성해야 합니다. C#에서 MongoDB용 테스트 컨테이너를 설정하려면 아래 단계를 따르세요.
일반적으로 첫 번째 단계는 C# 프로젝트에 Testcontainers NuGet 패키지를 설치하는 것입니다. NuGet 패키지 관리자 콘솔을 열고 다음 명령을 실행합니다.
Install-Package Testcontainers
그러나 기본 Testcontainers 패키지를 포함하는 이 패키지의 MongoDB 버전(이 글을 쓰는 시점에는 버전 3.8.0을 사용하고 있습니다)이 필요합니다. 패키지 관리자 사용자 인터페이스나 다음 명령을 사용하여 설치할 수 있습니다.
Install-Package Testcontainers.MonogoDB
Testcontainers를 설치한 후에는 MongoDB에 맞게 구성해야 합니다. 여기에는 필수 설정으로 MongoDB 컨테이너를 설정하는 작업이 포함됩니다. 다음은 C#에서 MongoDB용 Testcontainers를 구성하는 방법의 예입니다.
using Testcontainers.MongoDb; MongoDbContainer container = new MongoDbBuilder() .WithImage("mongo:latest") .Build();
위의 예에서는 MongoDbBuilder
의 새 인스턴스를 만들고 MongoDB 이미지와 포트 바인딩을 지정합니다. WithImage
메서드는 MongoDB 컨테이너의 이미지를 설정하므로 "mongo:latest"를 사용하면 항상 최신 이미지를 가져옵니다.
선택적으로 포트 바인딩을 사용하여 명시적으로 사용할 포트를 구성할 수 있습니다.
using Testcontainers.MongoDb; MongoDbContainer container = new MongoDbBuilder() .WithImage("mongo:latest") .WithPortBinding(1337, 27017) .Build();
위의 코드는 WithPortBinding
메서드를 사용하여 컨테이너의 포트 27017을 호스트 컴퓨터의 포트 1337에 바인딩합니다. 다음 섹션에서 포트를 바인딩해야 하는 특별한 요구가 없으면 잠재적으로 그대로 놔둘 수 있음을 살펴보겠습니다. 동적 연결 문자열을 얻을 수 있는데, 이는 매우 편리합니다!
MongoDB용 Testcontainers를 구성한 후 필요에 따라 컨테이너를 시작하고 중지할 수 있습니다. 다음은 컨테이너 시작 및 중지에 대한 코드 예제입니다.
MongoDB 컨테이너를 시작하려면 다음 안내를 따르세요.
await container.StartAsync();
MongoDB 컨테이너를 중지하려면 다음 안내를 따르세요.
await _container.StopAsync();
MongoDbContainer 유형은 삭제될 수 있으므로 준비가 되면 DisposeAsync
호출하여 정리하세요.
이제 컨테이너를 회전하고 해체하는 방법을 살펴보았으니 컨테이너로 무엇을 해야 할까요? 우리에게는 다양한 옵션이 있으며 실제로 한계는 여러분 자신의 상상력입니다(그리고 시간, 돈, 기타 자원…)!
대부분의 사람들은 통합 또는 기능 테스트를 작성하기 위해 C# Testcontainers를 활용합니다. 예를 들어 Testcontainers를 xUnit 또는 NUnit과 일치시키고 실제 데이터베이스와 상호 작용하는 테스트를 작성할 수 있습니다.
저는 MongoDB에 레코드 삽입을 벤치마킹 할 수 있도록 MongoDB용 C# 테스트 컨테이너를 BenchmarkDotNet에 연결해야 했습니다! 임시 로컬 데이터베이스가 필요했지만 테스트 프레임워크에는 반드시 필요한 것은 아닌 유사한 사용 사례입니다.
그럼에도 불구하고 우리는 C#에서 이러한 MongoDB 데이터베이스 컨테이너에 연결할 수 있어야 하며 다음 하위 섹션에서 이를 다룰 것입니다.
이전 섹션을 읽고 Testcontainers용으로 올바른 MongoDB 패키지가 설치되어 있다고 가정해 보겠습니다. 이 섹션을 미리 훑어봤다면 돌아가서 읽고 올바른 패키지를 얻으세요. 그렇지 않으면 올바른 종속성을 찾을 수 없는 이유에 대해 머리를 긁적일 것입니다!
또한 MongoDB.Driver NuGet 패키지를 설치해야 합니다. 이것이 우리가 가동한 데이터베이스 컨테이너에 대한 연결을 설정하는 데 사용할 것입니다. MongoDB.Driver가 일반적으로 작동하는 방식에 대한 자세한 설명이 필요한 경우 읽을 수 있는 다른 기사가 있습니다.
올바른 패키지가 준비되면 앞서 본 코드와 일부 MongoDB 드라이버 코드를 결합하여 여러 가지를 하나로 묶을 수 있습니다.
using MongoDB.Bson; using MongoDB.Driver; using Testcontainers.MongoDb; MongoDbContainer container = new MongoDbBuilder() .WithImage("mongo:latest") .Build(); await container.StartAsync(); string connectionString = container.GetConnectionString(); MongoClient mongoClient = new MongoClient(connectionString); IMongoDatabase database = mongoClient.GetDatabase("test"); IMongoCollection<BsonDocument> collection = database.GetCollection<BsonDocument>("test");
위의 예에서는 Testcontainers에서 새로 가동된 MongoDB 컨테이너에 대해 GetConnectionString()
호출할 수 있습니다. 이것에 대한 멋진 부분은 이 코드와 기사 앞부분에서 볼 수 있는 빌더 패턴을 사용하여 MongoDB용 Testcontainer를 어떻게 구성하더라도 GetConnectionString()
이 연결에 필요한 것을 얻을 수 있다는 것입니다.
MongoClient
연결 문자열을 단일 인수로 사용하므로 즉시 작업을 시작하기 위해 MongoDB 데이터베이스에 액세스하는 것이 쉽습니다.
이제 MongoDB 테스트 컨테이너를 설정하고 MongoClient
를 여기에 연결했으므로 이에 대해 CRUD 작업을 수행할 수 있습니다. 컨테이너 인스턴스에서 제공하는 연결 세부 정보를 사용하면 이 두 가지를 쉽게 결합할 수 있으며 실제로 CRUD에 대한 MongoDB.Driver 메서드 호출에만 집중할 수 있습니다.
다음은 간단한 CRUD 작업을 수행하는 예입니다.
// using code from earlier examples... // Create await collection.InsertOneAsync(new BsonDocument() { ["Name"] = "Nick Cosentino", }); // Read var filterBuilder = Builders<BsonDocument>.Filter; var filter = filterBuilder.Eq("Name", "Nick Cosentino"); var results = collection.Find(filter); // Update var updateBuilder = Builders<BsonDocument>.Update; var update = updateBuilder.Set("Name", "Dev Leader"); collection.UpdateOne(filter, update); // Delete filter = filterBuilder.Eq("Name", "Dev Leader"); collection.DeleteOne(filter);
이전 코드 조각을 사용하여 우리는 이미 MongoDB 컨테이너 인스턴스와 MongoClient
실행하고 있었습니다. 결과적으로 위의 코드 조각에서 이전 설정에서 얻은 IMongoCollection<BsonDocument>
로 직접 작업할 수 있음을 확인할 수 있습니다.
이는 일단 MongoDB 도커 컨테이너가 Testcontainers를 통해 실행되고 나면 일단 연결되면 특별한 방법으로 처리할 필요가 없다는 것을 설명하는 데 도움이 됩니다!
결론적으로 MongoDB용 C# 테스트 컨테이너는 테스트 및 개발을 위해 임시 MongoDB 데이터 저장소를 시작하고 실행하는 매우 간단한 방법입니다. 이 기사에서는 특정 사용 사례에 초점을 맞추지 않았지만 MongoDB와 상호 작용하기 위해 Testcontainers 위에 MongoDB 드라이버를 계층화하는 것이 얼마나 투명한지 더 잘 이해할 수 있기를 바랍니다.
C# Testcontainers는 설정, 해체 및 연결 문자열 관리까지 골치 아픈 일을 없애준다는 점을 감안할 때 로컬 사용을 위해 MongoDB를 시작하고 실행하려는 경우 제가 추천하는 쉬운 방법입니다.
이 내용이 유용하고 더 많은 학습 기회를 찾고 있다면 무료 주간 소프트웨어 엔지니어링 뉴스레터를 구독 하고 YouTube에서 내 무료 동영상을 확인해 보세요!
여기에도 게시됨