오늘은 저번시간에 이어서 Spring boot에서 지원해주는 Spring data nosql을 알아보자. 저번시간에
Redis
,
MongoDB
,
Neo4j
,
Gemfire
대해서 알아 봤으니 오늘은
Solr
,
Elasticsearch
,
Cassandra
,
Couchbase
에 대해서 알아보도록 하자.
Solr
아파치 오픈소스인 Solr는 검색 엔진이다. 엘라스틱 서치와 비교가 많이 되는 대상이며 코어 검색 엔진으로는 엘라스티 서치와 동일하게 아파치 루씬을 이용해서 만들어 졌다. 아무래도 Solr 보다는 Elasticsearch가 더 많이 사용되고 있는 듯 하다.
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-solr</artifactId>
</dependency>
</dependencies>
위와 같이
spring-boot-starter-data-solr
를 디펜더시를 받으면 몇몇가지의 빈들이 자동으로 등록된다. 조금 이상한게 다른 nosql들은 *Template 클래스들을 모두 자동으로 등록 시켜주는데 solr같은 경우에는 SolrTemplate을 자동으로 빈으로 등록시켜주지 않는다. (필자가 못찾는건지)
그래서 만약 SolrTemplate을 사용하려면 몇가지 빈으로 등록시켜 줘야 한다.
@Bean
public SolrClient solrClient(SolrProperties solrProperties) {
return new HttpSolrClient(solrProperties.getHost());
}
@Bean
public SolrTemplate solrTemplate() {
return new SolrTemplate(solrClient(null));
}
단순하게 설정했으므로 만약 clustering을 한다면 좀 더 설정이 들어가야 될 듯하다.
@Component
public class PersonTemplate {
private final SolrTemplate solrTemplate;
public PersonTemplate(SolrTemplate solrTemplate) {
this.solrTemplate = solrTemplate;
}
}
위와 같이 수동으로 등록한 SolrTemplate을 사용하면 된다. 몇가지 solr 관련 properties도 지원하므로 아래와 같이
spring.data.solr.
시작하는 프로퍼티들을 설정해주면 된다.
spring.data.solr.*
만약 spring data repositories 처럼 사용하고 싶다면 이 역시 기존의 spring data 처럼 사용해도 된다.
public interface PersonRepository extends SolrCrudRepository<Person, String> {
}
이 것은 별다른 설정없이도 가능하다.
Elasticsearch
Elasticsearch도 Solr와 마찬가지로 검색엔진 스토어 이다. 이 역시 코어 검색 엔진으로는 아파치 루씬을 사용하고 있다. 이 역시 별다른 설정없이 디펜더시만 받으면 몇몇가지의 빈들을 자동으로 등록시켜준다.
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
</dependencies>
위와 같이
spring-boot-starter-data-elasticsearch
만 디펜더시 받으면 된다. 그럼
ElasticsearchTemplate
을 빈을 자동으로 등록시켜준다.
@Component
public class PersonTemplate {
private final ElasticsearchTemplate elasticsearchTemplate;
public PersonTemplate(ElasticsearchTemplate elasticsearchTemplate) {
this.elasticsearchTemplate = elasticsearchTemplate;
}
}
아무 설정 없이도
ElasticsearchTemplate
을 사용할 수 있다. 이 역시 몇가지의 프로퍼티를 지원한다.
spring.data.elasticsearch
로 시작하는 프로퍼티를 사용하여 간단하게 설정정보를 변경할 수 있다.
spring.data.elasticsearch.*
또한 만약 만약 spring data repositories 처럼 사용하고 싶다면 위와 동일하게
ElasticsearchRepository
사용할 수 있다. 이 역시 별다른 설정없이 사용하면 된다.
public interface PersonRepository extends ElasticsearchRepository<Person, String> {
}
이 역시 메서드 이름 기반의 쿼리를 지원한다.
Cassandra
카산드라는 페이스북에서 만든 분산 데이타 베이스로 아파치 오픈소스이다. 이 역시 nosql의 한 종류이며 대용량 트랜잭션에 대해 고성능 처리가 가능하도록 설계된 데이터 스토어이다. 이 역시 Spring boot에서는 디펜더시만으로 몇몇가지의 빈을 자동설정 해준다.
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-cassandra</artifactId>
</dependency>
</dependencies>
위와 같이
spring-boot-starter-data-cassandra
를 디펜더시 받으면 이 역시
CassandraTemplate
도 자동으로 빈으로 등록시켜준다.
@Component
public class PersonTemplate {
private final CassandraTemplate cassandraTemplate;
public PersonTemplate(CassandraTemplate cassandraTemplate) {
this.cassandraTemplate = cassandraTemplate;
}
}
이 역시 적당한 설정의 프로퍼티들을 지원해주고 있다. spring.data.cassandra 로 시작하는 프로퍼티 키값을 사용하여 설정 정보를 변경할 수 있다.
spring.data.cassandra.*
이 또한 레포지토리로 사용할 수 있다.
TypedIdCassandraRepository
,
CassandraRepository
도 가능하지만 여기서는 사용하지 않았다. 왜냐하면 더 자세히 알아보지 않았기 때문이다..
public interface PersonRepository extends CrudRepository<Person, Long> {
}
자세한 내용은 문서를 참고하면 되겠다.
couchbase
Couchbase 또한 nosql의 한 종류이다. 상당한 성능을 갖고 있지만 우리나라에서는 그렇게 많이 쓰지는 않는 듯 하다. 이 것 또한 Spring boot에서는 간단하게 사용할 수 있다. 일단 아래와 같이 디펜더시를 받으면 몇몇 가지의 빈들을 자동설정 해준다.
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-couchbase</artifactId>
</dependency>
</dependencies>
그러면 다들 알겠지만
CouchbaseTemplate
이 자동으로 빈으로 등록되어 아무설정없이 사용해도 된다.
@Component
public class PersonTemplate {
private final CouchbaseTemplate couchbaseTemplate;
public PersonTemplate(CouchbaseTemplate couchbaseTemplate) {
this.couchbaseTemplate = couchbaseTemplate;
}
}
또한 다양한 설정 정보를 지원하기 위해 프로퍼티에 설정정보를 변경할 수 있다.
spring.couchbase
를 이용해서 설정 정보를 변경하면 된다.
spring.couchbase.*
카우치베이스 역시 spring data repositories처럼 사용가능하다.
@ViewIndexed(designDoc = "person")
public interface PersonRepository extends CouchbaseRepository<Person, String> {
}
위와 같이
CouchbaseRepository
이용해서 spring data repositories처럼 사용하며 된다.
여기서 설명한 모든 spring data repositories는 이름기반의 메서드를 지원하니 적당한 쿼리들은 이름 기반의 메서드를 작성해서 사용하면 좋을 듯 싶다.
오늘도 이렇게 Spring boot에서 지원해주는 spring data nosql에 대해서 알아봤다. 이제 어떤 nosql이 있고 어떤 자동설정이 있는지 살펴봤으니 다음시간에는 간단하게 예제를 살펴보도록 하자. 물론 아주 간단한 예제들이다..