개요
이 튜토리얼에서는 MongoDB Atlas 에서 샤딩된 클러스터 설정하다 하고 Spring Data MongoDB 사용하여 샤딩된 users 컬렉션 으로 작업하는 Spring Boot 애플리케이션 빌드 방법을 보여줍니다.
샤딩
샤딩 은 데이터 세트를 여러 머신에 분산합니다. 이는 대규모 데이터 세트나 읽기 및 쓰기 (write) 처리량 높은 애플리케이션에 유용합니다. MongoDB 수직 확장 과 수평 확장 의 두 가지 확장 접근 방식을 지원합니다.
수직 확장 단일 서버의 CPU, RAM 또는 저장 업그레이드하여 단일 서버 의 용량 늘립니다. 이 접근 방식은 hardware 역량에 따라 제한이 있으며 비용이 많이 들 수 있습니다.
수평적 확장 데이터 세트와 워크로드 여러 서버로 나눕니다. 각 서버 전체 워크로드 의 일부를 처리하므로 강력한 단일 서버 보다 더 나은 효율성 제공할 수 있습니다. MongoDB Atlas 샤딩된 클러스터의 관리 간소화합니다.
샤딩에 대해 자세히 학습하려면 MongoDB Server 매뉴얼에서 샤딩 을 참조하세요.
튜토리얼
이 튜토리얼에서는 다음 조치를 수행하는 방법을 보여줍니다.
전제 조건 확인
MongoDB Atlas 에서 샤딩된 클러스터 설정
컬렉션 에 대한 샤딩 구성
Spring Boot 애플리케이션 구현
Spring Boot 애플리케이션 구성
전제 조건 확인
시작하기 전에 다음 항목이 있는지 확인하세요.
MongoDB 계정. 샤딩을 활성화하려면 M30 이상 클러스터가 필요합니다.
Spring Data MongoDB 및 Spring 웹 종속성이 있는 Spring Boot 프로젝트 입니다. Spring Initializr를 사용하여 프로젝트 생성할 수 있습니다.
MongoDB Atlas 에서 샤딩된 클러스터 설정
클러스터 생성하려면 다음 조치를 수행합니다.
M30 이상의 클러스터 클러스터 에서 Additional Settings로 이동합니다.
Sharding 을(를) 선택하고 켭니다.
배포 할 샤드 수를 설정합니다. 프로덕션 애플리케이션의 경우 둘 이상의 샤드 사용합니다. 1 와(과) 70 샤드 간에 배포 할 수 있습니다. 자세한 학습 은 Atlas 설명서에서 샤드 클러스터 배포 를 참조하세요.
샤딩된 클러스터 생성되면 Load Sample Dataset 을 선택하여 샘플 데이터를 로드합니다.
컬렉션 에 대한 샤딩 구성
Spring Data MongoDB 컬렉션에 대한 샤딩 자동으로 구성하지 않습니다. 이러한 작업은 mongosh를 사용하여 수동으로 수행해야 합니다.
클러스터 에 연결하고 샤딩 구성하려면 터미널에서 다음 명령을 실행 .
mongosh "mongodb+srv://<username>:<password>@<cluster-url>/admin"
<username>, <password> 및 <cluster-url> 자리 표시자를 MongoDB Atlas 자격 증명 및 연결 문자열 로 바꿉니다.
email 필드 기준으로 users 컬렉션 샤드 하려면 다음 명령을 실행 .
sh.shardCollection("sample_mflix.users", { email: 1 })
샤딩 활성화되어 있고 컬렉션 이 샤딩된 있는지 확인하려면 다음 명령을 실행 .
sh.status()
Spring Boot 애플리케이션 구현
Spring Boot 애플리케이션 구현 하려면 엔터티, 리포지토리, 서비스 및 컨트롤러 계층을 정의해야 합니다.
샤딩 사용하여 엔터티 클래스를 정의하려면
@Sharded주석을 사용하여 샤드 키 필드를 지정합니다. 다음 코드는email필드 샤드 키 사용하는 예시User엔터티를 보여줍니다.import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.mongodb.core.mapping.Field; import org.springframework.data.mongodb.core.mapping.Sharded; public class User { private String id; private String name; private String email; private String password; // Getters and Setters } @Sharded주석은 Spring Data MongoDB 샤딩된 환경에서 작업을 최적화하는 데 도움이 됩니다.replaceOne쿼리에 업서트 중에 샤드 키 포함되도록 합니다.User엔터티에 대한 리포지토리 만들려면MongoRepository을 확장하는 인터페이스를 정의합니다. 다음 코드는UserRepository인터페이스 예시 보여줍니다.import org.springframework.data.mongodb.repository.MongoRepository; import com.mongodb.sharded.model.User; public interface UserRepository extends MongoRepository<User, String> { } 비즈니스 로직을 처리하다 하려면 리포지토리 와 상호 작용하는 서비스 클래스를 만듭니다. 다음 코드는
UserService클래스 예시 보여줍니다.import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.mongodb.sharded.model.User; import com.mongodb.sharded.repository.UserRepository; public class UserService { private UserRepository userRepository; public List<User> getAllUsers() { return userRepository.findAll(); } public User saveUser(User user) { return userRepository.save(user); } } User엔터티에 대한 REST 엔드포인트를 노출하려면 컨트롤러 클래스를 만듭니다. 다음 코드는UserController클래스 예시 보여줍니다.import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; public class UserController { private UserService userService; public List<User> getAllUsers() { return userService.getAllUsers(); } public User createUser( User user) { return userService.saveUser(user); } }
Spring Boot 애플리케이션 구성
Spring Boot 애플리케이션 을 MongoDB Atlas 에 연결하려면 application.properties 또는 application.yml 파일 에 MongoDB 연결 URI를 추가합니다. 다음 코드는 예시 구성을 보여줍니다.
spring.data.mongodb.uri=mongodb+srv://<username>:<password>@<cluster-url>/myDatabase?retryWrites=true&w=majority
<username>, <password> 및 <cluster-url> 자리 표시자를 MongoDB Atlas 자격 증명 및 연결 문자열 로 바꿉니다.
샤드 키 선택
샤드 키 선택할 때 샤드 간에 데이터를 균등하게 분산하는지 확인합니다. 샤드 키 의 선택은 샤딩된 클러스터 의 성능과 확장성 매우 중요합니다. 샤드 키 선택에 대해 자세히 학습하려면 MongoDB Server 매뉴얼의 샤드 키 선택 을 참조하세요.
이상적인 샤드 키 다음과 같은 특성을 갖습니다.
높은 카디널리티: 키에는 샤드 간에 데이터를 균등하게 분산하기 위해 많은 고유 값이 있습니다. 키가 완전히 고유할 필요는 없습니다.
균등 배포: 키는 모든 샤드에 문서를 균등하게 분산하여 샤드 하나가 다른 샤드보다 더 많은 데이터나 요청을 처리하는 핫스팟을 방지합니다.
일반적인 쿼리 지원: 가장 일반적인 쿼리 패턴과 일치하는 키를 선택하여 쿼리 분산을 줄이고 성능을 향상시킵니다.
sample_mflix 데이터베이스 의 users 컬렉션 의 경우 email 필드 다음과 같은 경우 샤드 키 잘 작동합니다.
이메일은 고유하고 잘 분산되어 있습니다.
쿼리는 자주 이메일 기준으로 필터하거나 정렬합니다.
추가 리소스
MongoDB 의 샤딩에 대해 자세히 학습하려면 MongoDB Server 매뉴얼의 샤딩 을 참조하세요.