29. NoSQL 기술 사용 by sh

Spring Data는 MongoDB, Neo4J, Elasticsearch, Solr, Redis, Gemfire, Couchbase 및 Cassandra를 포함한 다양한 NoSQL 기술에 액세스하는 데 도움이되는 추가 프로젝트를 제공합니다. Spring Boot는 Redis, MongoDB, Elasticsearch, Solr 및 Gemfire에 대한 자동 구성을 제공합니다. 다른 프로젝트를 사용할 수는 있지만 직접 구성해야합니다. projects.spring.io/spring-data에서 해당 참조 문서를 참조하십시오.

NoSQL No SQL? Not Only SQL? Non-Relational Operational Database SQL?

  • Not Only SQL. 단순히 기존 관계형 DBMS가 갖고 있는 특성뿐만 아니라 다른 특성들을 부가적으로 지원한다는 것을 의미.

    • 기존의 관계형 데이터베이스보다 더 융통성 있는 데이터 모델을 사용하고 데이터의 저장 및 검색을 위한 특화된 메커니즘을 제공한다.

      • 그 중 하나! 이를 통해 NoSQL 데이터베이스는 단순 검색 및 추가 작업에 있어서 매우 최적화된 키 값 저장 기법을 사용하여 응답속도나 처리 효율 등에 있어서 매우 뛰어난 성능을 나타낸다.

29.1 Redis

Redis는 캐시, 메시지 브로커 및 풍부한 기능의 키 - 값 저장소입니다. Spring Boot는 Jedis 클라이언트 라이브러리의 기본 자동 구성과 Spring Data Redis가 제공하는 추상화를 제공합니다. 의존성을 편리한 방식으로 수집하기위한 spring-boot-starter-redis 'starter POM'이 있습니다.

Redis

  • Remote Dictionary Server. 대용량 처리 관련 기술.

  • 메모리 위에서 동작하는 키/값 저장 기술.

29.1.1 Redis 연결

다른 Spring Bean처럼 자동 구성된 RedisConnectionFactory, StringRedisTemplate 또는 vanilla RedisTemplate 인스턴스를 삽입 할 수 있습니다. 기본적으로 인스턴스는 localhost:6379를 사용하여 Redis 서버에 연결을 시도합니다 :

@Component
public class MyBean {

    private StringRedisTemplate template;

    @Autowired
    public MyBean(StringRedisTemplate template) {
        this.template = template;
    }

    // ...

}

자동으로 구성된 유형 중 @Bean을 추가하면 기본값을 대체합니다 (RedisTemplate의 경우 예외는 해당 유형이 아닌 'redisTemplate'bean 이름을 기반으로합니다). commons-pool2가 클래스 경로에 있으면 기본적으로 풀링 된 연결 팩토리가 생성됩니다.

29.2 MongoDB

MongoDB는 전통적인 테이블 기반 관계형 데이터 대신 JSON 형 스키마를 사용하는 오픈 소스 NoSQL 문서 데이터베이스입니다. Spring Boot는 spring-boot-starter-data-mongodb 'Starter POM'을 포함하여 MongoDB와 함께 작업 할 때 몇 가지 편의를 제공합니다.

29.2.1 MongoDB 데이터베이스 연결

자동화 된 org.springframework.data.mongodb.MongoDbFactory를 삽입하여 Mongo 데이터베이스에 액세스 할 수 있습니다. 기본적으로 인스턴스는 mongodb://localhost/test URL을 사용하여 MongoDB 서버에 연결을 시도합니다.

import org.springframework.data.mongodb.MongoDbFactory;
import com.mongodb.DB;

@Component
public class MyBean {

    private final MongoDbFactory mongo;

    @Autowired
    public MyBean(MongoDbFactory mongo) {
        this.mongo = mongo;
    }

    // ...

    public void example() {
        DB db = mongo.getDb();
        // ...
    }

}

spring.data.mongodb.uri속성을 설정하여 url을 변경하거나 호스트 / 포트를 지정할 수 있습니다. 예를 들어, application.properties에 다음을 선언 할 수 있습니다.

spring.data.mongodb.host=mongoserver
spring.data.mongodb.port=27017

spring.data.mongodb.port가 지정되지 않은 경우 기본값 27017이 사용됩니다. 위의 샘플에서 이 줄을 삭제하면됩니다.

Spring Data Mongo를 사용하지 않는다면 MongoDbFactory를 사용하는 대신 com.mongodb.Mongo beans를 주입 할 수 있습니다.

또한 MongoDB 연결 설정을 완벽하게 제어하려면 자신의 MongoDbFactory 또는 Mongo bean을 선언 할 수 있습니다.

29.2.2 MongoTemplate

Spring Data Mongo는 MongoTemplate 클래스를 제공한다.이 클래스는 Spring JdbcTemplate과 디자인 면에서 매우 유사하다. JdbcTemplate와 마찬가지로 Spring Boot는 간단하게 삽입 할 수 있도록 bean을 자동으로 구성합니다.

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Component;

@Component
public class MyBean {

    private final MongoTemplate mongoTemplate;

    @Autowired
    public MyBean(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    }

    // ...

}

자세한 내용은 MongoOperations Javadoc을 참조하십시오.

29.2.3 Spring Data MongoDB 리포지토리들

Spring Data는 MongoDB에 대한 저장소 지원을 포함합니다. 앞에서 설명한 JPA 저장소와 마찬가지로 기본적으로 메소드 이름을 기반으로 쿼리가 자동으로 생성됩니다.

실제로 Spring Data JPA와 Spring Data MongoDB는 동일한 공통 인프라를 공유합니다. 따라서 이전에 JPA 예제를 사용할 수 있었고 City가 JPA @Entity가 아닌 Mongo 데이터 클래스라고 가정하면 같은 방식으로 작동합니다.

package com.example.myapp.domain;

import org.springframework.data.domain.*;
import org.springframework.data.repository.*;

public interface CityRepository extends Repository<City, Long> {

    Page<City> findAll(Pageable pageable);

    City findByNameAndCountryAllIgnoringCase(String name, String country);

}

풍부한 객체 매핑 기술을 포함하여 Spring 데이터 MongoDB에 대한 자세한 내용은 reference documentation를 참조하십시오.

29.3 Gemfire

Spring Data Gemfire는 Pivotal Gemfire 데이터 관리 플랫폼에 액세스하기위한 편리한 Spring 친화적 도구를 제공합니다. 의존성을 편리한 방식으로 수집하기위한 spring-boot-starter-data-gemfire 'starter POM'이 있습니다. 현재 Gemfire에 대한 auto = config 지원은 없지만 하나의 주석으로 Spring Data Repository를 활성화 할 수 있습니다.

29.4 Solr

Apache Solr는 검색 엔진입니다. Spring Boot는 solr 클라이언트 라이브러리의 기본 자동 구성과 Spring Data Solr가 제공하는 추상화를 제공합니다. 의존성을 편리한 방식으로 수집하기 위한 spring-boot-starter-data-solr 'Starter POM'이 있습니다.

NoSQL 기술 중 하나. NoSQL의 특징과 같이 특정한 문제 해결에 최적화 됨

확장가능(Scalable)하고 바로 사용가능(Ready to deplay)하며 대용량(High volume) 검색에 최적화된 프로그램. 자연어 검색(Text-centric)을 지원하며 검색 후 결과는 연관성(Relevance)별로 출력된다.

  • Scalable(확장가능) - Solr는 인덱싱과 쿼리처리를 (클러스터로 묶여진 다수의 서버)에 분배함으로써 확장할 수 있다.

  • Ready to deploy(바로 사용가능) - Solr는 오픈소스이며 쉽게 설치하고 설정할 수 있다. 예제 코드도 제공된다.

  • Optimized for search(검색에 최적화됨) - Solr는 빠릅니다. 복잡한 쿼리도 1초 미만의 속도로 처리할 수 있습니다. 보통 10ms (0.1초) 정도면 결과를 출력합니다.

  • Large volumes of documents(대용량의 문서처리) - Solr는 수백만의 문서를 처리할 수 있도록 설계되었습니다.

  • Text-centric(일상언어 사용) - Solr는 일상언어를 다룰 수 있게 최적화 되었습니다. 이메일이나 블로그, 트위터, 웹페이지등 다양한 내용을 다룰 수 있습니다.

  • Results sorted by relevance(적합도에 의해 정렬) - Solr의 처리결과는 사용자의 질의(User's query)에 대해 연관도에 대해서 정렬되며 각 결과에 연관정보 수치를 표시해 줍니다.

29.4.1 Solr 연결

다른 Spring Bean과 마찬가지로 자동 구성된 SolrServer 인스턴스를 삽입 할 수 있습니다. 기본적으로 인스턴스는 localhost:8983/solr을 사용하여 서버에 연결을 시도합니다.

@Component
public class MyBean {

    private SolrServer solr;

    @Autowired
    public MyBean(SolrServer solr) {
        this.solr = solr;
    }

    // ...

}

SolrServer 유형의 @Bean을 추가하면 기본값으로 바뀝니다.

29.4.2 Spring Data Solr 리포지토리들

Spring 데이터에는 Apache Solr에 대한 저장소 지원이 포함됩니다. 앞에서 설명한 JPA 저장소와 마찬가지로 기본적으로 메소드 이름을 기반으로 쿼리가 자동으로 생성됩니다.

사실, Spring Data JPA와 Spring Data Solr은 동일한 공통 인프라를 공유합니다. 따라서 JPA 예제를 이전 버전에서 가져 와서 City가 JPA @Entity가 아닌 @SolrDocument 클래스라고 가정하면 같은 방식으로 작동합니다.

Spring Data Solr에 대한 자세한 내용은 reference documentation를 참조하십시오.

29.5 Elasticsearch

Elastic Search는 오픈 소스, 분산, 실시간 검색 및 분석 엔진입니다. Spring Boot는 Spring Data Elasticsearch에서 제공하는 Elasticsearch의 기본 자동 구성과 추상화를 제공합니다. 의존성을 편리한 방식으로 수집하기위한 spring-boot-starter-data-elasticsearch 'Starter POM'이 있습니다.

29.5.1 Elasticsearch 연결

다른 Spring Bean처럼 자동 구성된 ElasticsearchTemplate 또는 Elasticsearch Client 인스턴스를 삽입 할 수 있습니다. 기본적으로 인스턴스는 로컬 인 메모리 서버 (Elasticsearch 용어로 NodeClient)에 연결을 시도하지만 spring.data.elasticsearch.clusterNodes를 쉼표로 구분하여 '호스트 : 포트'목록을 설정하여 원격 서버 (예 : TransportClient)로 전환 할 수 있습니다.

@Component
public class MyBean {

    private ElasticsearchTemplate template;

    @Autowired
    public MyBean(ElasticsearchTemplate template) {
        this.template = template;
    }

    // ...

}

lasticsearchTemplate 유형의 @Bean을 추가하면 기본값을 대체합니다.

29.5.2 Spring Data Elasticsearch 리포지토리들

Spring 데이터는 Elasticsearch에 대한 저장소 지원을 포함합니다. 앞에서 설명한 JPA 저장소와 마찬가지로 기본적으로 메소드 이름을 기반으로 쿼리가 자동으로 생성됩니다.

실제로 Spring Data JPA와 Spring Data Elasticsearch는 동일한 공통 인프라를 공유합니다. 따라서 이전에 JPA 예제를 사용할 수 있었고 City가 JPA @Entity가 아닌 Elasticsearch @Document 클래스라고 가정하면 같은 방식으로 작동합니다.

Spring Data Elasticsearch에 대한 자세한 내용은 reference documentation를 참조하십시오.

Last updated