dependencies {
implementation 'org.neo4j.driver:neo4j-java-driver:5.6.0'
implementation 'org.springframework.boot:spring-boot-starter-data-neo4j'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
상단 2개의 의존성은 Neo4j 연결을 위한 의존성이고, 나머지는 예제 실행을 위해 이용할 예정이다. spring boot data를 사용하는 것이라 기존 JPA를 사용해봤다면 큰 어려움 없이 적용할 수 있다.
application.properties 예시
spring.neo4j.uri=bolt://{인스턴스 주소}:7687
spring.neo4j.authentication.username=neo4j
spring.neo4j.authentication.password={비밀번호}
application.yaml 예시
spring:
neo4j:
authentication:
username: neo4j
password: {비밀번호}
uri: bolt://{인스턴스 주소}:7687
Neo4j의 버전에 따라 작성 방법이 상이하니, 상단의 버전 정보를 확인해야 한다. 현재 5.x를 사용하고 있기 때문에 4.x 이후 버전은 위와 같이 작성하면 될 것이다. 3.x 이하는 하단의 공식 문서 링크를 참조한다.
이 부분까지 제대로 작성하고, 실행하여 오류 없이 작동하면 연결 자체는 완성되었다. 이후는 간단 예제 관련 단계이다. API 작성 관련한 자세한 설명은 생략한다.
예제를 위해 간단하게 Web Layer으로 패키지를 구성하였다.
package wy.practice.neo4j.data.entity;
import lombok.Getter;
import org.springframework.data.neo4j.core.schema.Id;
import org.springframework.data.neo4j.core.schema.Node;
@Getter
@Node("Developer")
public class Developer {
@Id
private String name;
private String country;
private int age;
public Developer(String name, String country, int age) {
this.name = name;
this.country = country;
this.age = age;
}
}
package wy.practice.neo4j.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import wy.practice.neo4j.data.entity.Developer;
import wy.practice.neo4j.service.DeveloperService;
@RestController
public class DeveloperController {
@Autowired
private DeveloperService developerService;
@GetMapping("/")
public Developer findAmud() {
return developerService.findAmud();
}
}
package wy.practice.neo4j.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import wy.practice.neo4j.data.entity.Developer;
import wy.practice.neo4j.repository.DeveloperRepository;
@Service
public class DeveloperService {
@Autowired
private DeveloperRepository developerRepository;
public Developer findAmud() {
return developerRepository.findOneByName("amud").block();
}
}
package wy.practice.neo4j.repository;
import org.springframework.data.neo4j.repository.ReactiveNeo4jRepository;
import reactor.core.publisher.Mono;
import wy.practice.neo4j.data.entity.Developer;
public interface DeveloperRepository extends ReactiveNeo4jRepository<Developer, String> {
Mono<Developer> findOneByName(String name);
}
현재 데이터 상태는 위와 같다. (이전 게시물 참고)
간단하게 Postman으로 요청/응답 테스트를 하였다.
요청에 알맞은 노드 값을 반환하는 것을 확인할 수 있다.
https://neo4j.com/docs/getting-started/languages-guides/java/spring-data-neo4j/
https://docs.spring.io/spring-data/neo4j/docs/current/reference/html/#dependencies