Docs Menu
Docs Home
/ /

튜토리얼: Spring 데이터를 사용하여 Spring Boot에서 샤딩 구현하기

이 튜토리얼에서는 MongoDB Atlas 에서 샤딩된 클러스터 설정하다 하고 Spring Data MongoDB 사용하여 샤딩된 users 컬렉션 으로 작업하는 Spring Boot 애플리케이션 빌드 방법을 보여줍니다.

샤딩 은 데이터 세트를 여러 머신에 분산합니다. 이는 대규모 데이터 세트나 읽기 및 쓰기 (write) 처리량 높은 애플리케이션에 유용합니다. MongoDB 수직 확장수평 확장 의 두 가지 확장 접근 방식을 지원합니다.

수직 확장 단일 서버의 CPU, RAM 또는 저장 업그레이드하여 단일 서버 의 용량 늘립니다. 이 접근 방식은 hardware 역량에 따라 제한이 있으며 비용이 많이 들 수 있습니다.

수평적 확장 데이터 세트와 워크로드 여러 서버로 나눕니다. 각 서버 전체 워크로드 의 일부를 처리하므로 강력한 단일 서버 보다 더 나은 효율성 제공할 수 있습니다. MongoDB Atlas 샤딩된 클러스터의 관리 간소화합니다.

샤딩에 대해 자세히 학습하려면 MongoDB Server 매뉴얼에서 샤딩 을 참조하세요.

이 튜토리얼에서는 다음 조치를 수행하는 방법을 보여줍니다.

  • 전제 조건 확인

  • MongoDB Atlas 에서 샤딩된 클러스터 설정

  • 컬렉션 에 대한 샤딩 구성

  • Spring Boot 애플리케이션 구현

  • Spring Boot 애플리케이션 구성

1

시작하기 전에 다음 항목이 있는지 확인하세요.

2

클러스터 생성하려면 다음 조치를 수행합니다.

  1. M30 이상의 클러스터 클러스터 에서 Additional Settings로 이동합니다.

  2. Sharding 을(를) 선택하고 켭니다.

  3. 배포 할 샤드 수를 설정합니다. 프로덕션 애플리케이션의 경우 둘 이상의 샤드 사용합니다. 1 와(과) 70 샤드 간에 배포 할 수 있습니다. 자세한 학습 은 Atlas 설명서에서 샤드 클러스터 배포 를 참조하세요.

  4. 샤딩된 클러스터 생성되면 Load Sample Dataset 을 선택하여 샘플 데이터를 로드합니다.

3

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()
4

Spring Boot 애플리케이션 구현 하려면 엔터티, 리포지토리, 서비스 및 컨트롤러 계층을 정의해야 합니다.

  1. 샤딩 사용하여 엔터티 클래스를 정의하려면 @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;
    @Document("users")
    @Sharded(shardKey = { "email" })
    public class User {
    @Id
    private String id;
    private String name;
    @Field("email")
    private String email;
    private String password;
    // Getters and Setters
    }

    @Sharded 주석은 Spring Data MongoDB 샤딩된 환경에서 작업을 최적화하는 데 도움이 됩니다. replaceOne 쿼리에 업서트 중에 샤드 키 포함되도록 합니다.

  2. User 엔터티에 대한 리포지토리 만들려면 MongoRepository을 확장하는 인터페이스를 정의합니다. 다음 코드는 UserRepository 인터페이스 예시 보여줍니다.

    import org.springframework.data.mongodb.repository.MongoRepository;
    import com.mongodb.sharded.model.User;
    public interface UserRepository extends MongoRepository<User, String> {
    }
  3. 비즈니스 로직을 처리하다 하려면 리포지토리 와 상호 작용하는 서비스 클래스를 만듭니다. 다음 코드는 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;
    @Service
    public class UserService {
    @Autowired
    private UserRepository userRepository;
    public List<User> getAllUsers() {
    return userRepository.findAll();
    }
    public User saveUser(User user) {
    return userRepository.save(user);
    }
    }
  4. User 엔터티에 대한 REST 엔드포인트를 노출하려면 컨트롤러 클래스를 만듭니다. 다음 코드는 UserController 클래스 예시 보여줍니다.

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    import java.util.List;
    @RestController
    @RequestMapping("/users")
    public class UserController {
    @Autowired
    private UserService userService;
    @GetMapping
    public List<User> getAllUsers() {
    return userService.getAllUsers();
    }
    @PostMapping
    public User createUser(@RequestBody User user) {
    return userService.saveUser(user);
    }
    }
5

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 매뉴얼의 샤딩 을 참조하세요.

돌아가기

Spring 세션 MongoDB 시작하기

이 페이지의 내용