NoSQL 데이터베이스는 다양한 데이터 유형을 처리하기 위한 확장성과 유연성을 제공하며 현대 애플리케이션 개발의 중심 요소가 되었습니다. 그러나 많은 자바 개발자들에게는 NoSQL 데이터베이스와 통합하는 것이 복잡하고 시간이 많이 소요될 수 있습니다. 이것이 Eclipse JNoSQL의 역할이며, 여러 NoSQL 데이터베이스에 대한 자바 애플리케이션을 연결하는 통일된 방법을 제공합니다.
이 기사에서는 Eclipse JNoSQL 1.1.3이 데이터베이스 통합을 간소화하고 개발자 생산성을 향상시키며 다양한 데이터베이스 간의 유연성을 제공하는 방법을 탐색합니다. 또한 Quarkus와 ArangoDB를 사용한 실제 예제를 통해 그 기능을 시연할 것입니다.
자바 개발자가 Eclipse JNoSQL에 관심을 가져야 하는 이유
많은 개발자들에게 NoSQL 데이터베이스와 작업하는 것은 데이터베이스별 API를 학습해야 하므로 조각화되고 이식성이 없는 코드로 이어질 수 있습니다. Eclipse JNoSQL은 다음을 제공함으로써 이러한 도전을 극복합니다:
- 사용 편의성:
@Entity
,@Id
,@Column
과 같은 직관적인 주석을 사용하여 Java 객체를 NoSQL 컬렉션에 매핑할 수 있습니다. - 유연성: 애플리케이션 코드를 변경하지 않고 NoSQL 데이터베이스(예: Redis, MongoDB, ArangoDB, Oracle NoSQL) 간을 자유롭게 전환할 수 있습니다.
- 표준 준수: Jakarta Data 및 Jakarta NoSQL 사양을 구현하여 미래 지향적이고 이식 가능한 솔루션을 보장합니다.
- 통합 가능: Jakarta EE 및 MicroProfile 구성 요소와 원활하게 작동하여 의존성 주입 및 구성 관리에 CDI를 활용합니다.
Eclipse JNoSQL 1.1.3의 새로운 기능
Eclipse JNoSQL은 버전 1.1.3을 방금 릴리스했으며 이미 견고한 생태계에 새로운 기능, 버그 수정 및 성능 향상을 가져왔습니다. 이 릴리스는 자바 개발자들이 NoSQL 데이터베이스와 상호 작용을 원활하게 만드는 중요한 이정표입니다. 이 기사에서는 Eclipse JNoSQL의 목표와이 버전에서 소개된 새로운 기능을 살펴보고, Quarkus 및 ArangoDB와 함께 사용하는 실용적인 예제를 제공할 것입니다.
Eclipse JNoSQL은 통합된 API 및 아키텍처를 제공하여 자바 애플리케이션을 NoSQL 데이터베이스와 간단하게 통합하려는 목표를 가지고 있습니다. Jakarta EE 사양을 준수함으로써 JNoSQL은 키-값, 문서, 그래프 또는 열 기반 데이터베이스와 원활하게 작업할 수 있는 기회를 제공합니다.
- 상호 운용성: 이 추상화는 데이터베이스별 복잡성을 추상화하여 MongoDB, Redis, ArangoDB 및 Oracle NoSQL과 같은 데이터베이스 간 전환을 쉽게 만듭니다.
- 사양 중심: Jakarta Data 및 Jakarta NoSQL 사양을 구현하여 NoSQL 데이터베이스와 작업하는 표준화된 방법을 제공합니다.
- Java 생태계와의 통합: 의존성 주입에 CDI를 활용하고 구성에 Eclipse MicroProfile을 사용하여 Quarkus 및 Spring Boot와 같은 현대적인 자바 프레임워크와의 호환성을 보장합니다.
제한 사항 및 고려 사항: Eclipse JNoSQL
Eclipse JNoSQL이 NoSQL 데이터베이스 통합에 상당한 이점을 제공하지만, 균형 잡힌 관점을 유지하기 위해 몇 가지 단점을 고려하는 것이 중요합니다:
- 새로운 표준에 대한 학습 곡선: Jakarta EE 또는 MicroProfile에 익숙하지 않은 개발자는 JNoSQL에서 사용하는 사양 및 API를 이해하고 적응하는 데 시간이 필요할 수 있습니다.
- 데이터베이스 특정 기능: JNoSQL이 일반적인 NoSQL 작업을 추상화하지만, 추가적인 사용자 정의 없이는 고급 데이터베이스 특정 기능을 완전히 지원하지 않을 수 있습니다.
- 커뮤니티 및 생태계: 상대적으로 전문화된 도구로서, Hibernate 또는 Spring Data와 같은 보다 넓은 Java 프레임워크에 비해 생태계 및 커뮤니티 지원이 작습니다.
- 성능 조정: 일반화된 API는 특히 고성능 애플리케이션의 경우 네이티브 데이터베이스 특정 라이브러리에 비해 약간의 성능 오버헤드를 초래할 수 있습니다.
이러한 제한 사항을 이해하면 개발자가 정보에 기반한 결정을 내리고 JNoSQL이 자신의 프로젝트에 가장 잘 맞는 위치를 고려하는 데 도움이 됩니다.
Eclipse JNoSQL에서 지원하는 Jakarta EE 사양
Eclipse JNoSQL은 Jakarta EE 생태계에서 중요한 두 가지 사양인 Jakarta Data 및 Jakarta NoSQL을 지원합니다.
Jakarta Data
표준 API를 제공하여 데이터 리포지토리에 접근하고 관리할 수 있게 하여 개발자가 CRUD 작업을 쉽게 수행할 수 있도록 합니다. 페이지 매김, 정렬 및 동적 쿼리를 단순화하는 데 중점을 둡니다.
자카르타 NoSQL
NoSQL 데이터베이스 상호 작용을 위한 통일된 API를 정의합니다. Java 클래스를 NoSQL 컬렉션에 매핑하고 데이터베이스 작업을 단순화하기 위해 @Entity
, @Id
, @Column
과 같은 주석을 제공합니다.
이 사양은 보일러플레이트 코드를 줄이고 데이터베이스 간의 이동성을 촉진하여 Java 개발자에게 필수적입니다.
최신 릴리스인 버전 1.1.3는 신뢰성, 보안 및 성능을 개선하는 데 중점을 두면서 흥미로운 새로운 기능을 소개합니다:
- 레디스: 가용성을 개선하기 위한 레디스 센티넬 지원 강화.
- 아란고DB: 보안 및 키 관리 업데이트.
- 오라클 NoSQL: 더 나은 통합을 위한 새로운 자격 증명 옵션.
- JNoSQL Lite: 기록 지원 추가, 추적성 개선.
- 드라이버 업데이트: 다양한 NoSQL 데이터베이스에 대한 드라이버 개선.
- CDI Lite: 이제 Java 레코드 지원을 추가했습니다.
이클립스 JNoSQL 1.1.3의 강력을 보여주기 위해 아란고DB를 사용하여 “목표”를 관리하는 쿼커스 애플리케이션을 만들 것입니다. 자카르타 EE 사양 덕분에 MongoDB 또는 Oracle NoSQL과 같은 다른 NoSQL 데이터베이스로 전환하는 것은 최소한의 변경으로 가능합니다.
단계별
1단계: Quarkus 설정하기
Quarkus 프로젝트를 시작하려면 Quarkus Starter UI를 사용하고 다음 확장 기능을 선택하세요:
- REST
- JSON
- ARC (CDI Lite)
- ArangoDB 드라이버
당신의 pom.xml
파일에는 다음이 포함되어야 합니다:
<dependencies>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-rest</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-rest-jsonb</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-arc</artifactId>
</dependency>
<dependency>
<groupId>io.quarkiverse.jnosql</groupId>
<artifactId>quarkus-jnosql-document-arangodb</artifactId>
<version>3.3.2</version>
</dependency>
<!-- Test dependencies -->
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2단계: 데이터베이스 연결 구현하기
application.properties
에서 데이터베이스 연결을 설정하세요:
jnosql.arangodb.host=localhost:8529
jnosql.document.database=goals
jnosql.keyvalue.database=goals
Docker를 사용하여 로컬에서 ArangoDB 인스턴스를 실행하세요:
docker run -e ARANGO_NO_AUTH=1 -d --name arangodb-instance -p 8529:8529 -d arangodb/arangodb
ArangoDB 웹 UI에서 goals
라는 이름의 데이터베이스와 Goal
이라는 컬렉션을 생성하세요.
3단계: 데이터 모델링
CDI Lite와 함께 Java의 record 기능을 사용하세요:
import jakarta.json.bind.annotation.JsonbProperty;
import jakarta.json.bind.annotation.JsonbPropertyOrder;
import jakarta.nosql.Column;
import jakarta.nosql.Entity;
import jakarta.nosql.Id;
import java.util.List;
"id", "title", "description", "priority", "tasks"}) ({
public record Goal(
"id") String id, (
"title") String title, (
"description") String description, (
"priority") int priority, (
"tasks") List<String> tasks) {} (
4단계: 리포지토리 설정하기
Jakarta Data를 사용하여 리포지토리를 정의하세요:
public interface NewYearWishes extends BasicRepository<Goal, String> {}
5단계: 서비스 계층 구현하기
비즈니스 로직을 관리하기 위해 서비스 계층을 만드세요:
public class GoalService {
private final NewYearWishes newYearWishes;
public GoalService( (DatabaseType.DOCUMENT) NewYearWishes newYearWishes) {
this.newYearWishes = newYearWishes;
}
public List<Goal> findGoals(int page, int size) {
PageRequest pageRequest = PageRequest.ofPage(page).size(size);
return newYearWishes.findAll(pageRequest, Order.by(Sort.asc("priority"))).content();
}
public Goal save(Goal goal) {
return newYearWishes.save(goal);
}
public Optional<Goal> findById(String id) {
return newYearWishes.findById(id);
}
}
6단계: REST 엔드포인트 생성하기
REST 리소스를 정의하세요:
"/goals") (
MediaType.APPLICATION_JSON) (
MediaType.APPLICATION_JSON) (
public class GoalResource {
private final GoalService goalService;
public GoalResource(GoalService goalService) {
this.goalService = goalService;
}
public List<Goal> goals( ("page") int page, ("size") int size) {
return goalService.findGoals(page, size);
}
public Goal create(Goal goal) {
return goalService.save(goal);
}
"{id}") (
public Goal findById( ("id") String id) {
return goalService.findById(id).orElseThrow(() -> new WebApplicationException("Goal not found", 404));
}
}
7단계: 애플리케이션 테스트하기
curl
을 사용하여 애플리케이션을 테스트하는 방법은 다음과 같습니다:
curl -X POST -H "Content-Type: application/json" \
-d '{
"title": "Learn JNoSQL",
"description": "Master NoSQL with JNoSQL",
"priority": 1,
"tasks": ["Read documentation", "Write sample code"]
}' \
http://localhost:8080/goals
curl -X POST -H "Content-Type: application/json" \
-d '{
"title": "Get Fit",
"description": "Adopt a healthier lifestyle",
"priority": 2,
"tasks": ["Exercise daily", "Eat balanced meals", "Stay hydrated"]
}' \
http://localhost:8080/goals
curl -X POST -H "Content-Type: application/json" \
-d '{
"title": "Learn Quarkus",
"description": "Explore Quarkus framework features",
"priority": 3,
"tasks": ["Set up Quarkus", "Create REST endpoints", "Integrate JNoSQL"]
}' \
http://localhost:8080/goals
목표 목록:
curl http://localhost:8080/goals?page=1&size=10
결론
Eclipse JNoSQL 1.1.3는 Java 개발자를 위해 NoSQL 데이터베이스 상호 작용을 원활하게 만드는 것에 대한 약속을 보여줍니다. 향상된 기능과 통합 능력은 개발자가 유연하고 확장 가능한 애플리케이션을 구축하는 데 도움을 줍니다. 자세한 내용은 GitHub의 완전한 예제를 확인하세요.
Source:
https://dzone.com/articles/nosql-database-integration-in-java-with-eclipse-jnosql-1-1-3