Java 17 레코드 및 Neo4j-Java-Driver
2020년 3월, Java 14가 출시되면서 `java.lang.Record`라는 `Record` 키워드가 처음 등장했어요. () `Record` 클래스는 특별한 종류의 클래스인데, 일반적인 클래스보다 더 간단한 형식으로 일반 데이터 집계를 모델링하는 데 도움을 줘요. 쉽게 말해 이라고 생각하면 될 것 같아요. 그 이후로 `Record`에는 많은 기능이 추가되었고, 앞으로도 계속 추가될 예정이에요.
그런데 "Record"는 Tuple과 거의 같은 의미로 쓰이잖아요? 그래서 다른 곳, 특히 데이터베이스 연결에서 널리 사용되고 있어요. jOOQ 같은 관계형 데이터베이스 추상화에서도 records를 다루고, Neo4j-Drivers, 특히 Java 드라이버에서도 마찬가지예요. 오랫동안 저희는 org.neo4j.driver.Record를 사용해서 튜플이나 행을 나타내고, 더 큰 쿼리 결과 집합을 만들었답니다.
Java 14 이전에는 이게 문제가 되지 않았어요. 하지만 Java 14에서 `java.lang.Record`가 등장했고, `java.lang` 패키지에 있기 때문에 실제 record를 뒷받침하는 클래스를 사용할 가능성이 거의 없더라도 항상 Java 프로그램으로 가져오게 되죠. IntelliJ를 비롯한 대부분의 IDE는 요즘 JDK 17에 이미 record 유형이 있기 때문에 import를 제안하지 않아요. 또한 `org.neo4j.driver.*`와 같은 star-imports는 컴파일 중에 `java: Record`에 대한 참조가 모호하다는 오류를 발생시켜요. org.neo4j.driver의 인터페이스 `org.neo4j.driver.Record`와 java.lang의 클래스 `java.lang.Record`가 충돌하는 거죠.
결과 셋을 처리하고 싶지만 해당 항목에 접근할 수 없는 난감한 상황에 놓이거나, 아니면 위에서 언급한 컴파일 오류가 발생할 수도 있어요. Neo4j-Java-Driver 사용자라면 "잘못된" record 유형을 범위로 가져오게 될 수도 있는 거죠.
과거에는 이런 일이 흔하지 않았지만, 새로운 Neo4j-Java-Driver 5.0 이상을 사용하면서 최신 Java LTS 릴리스 버전 17에 대한 요구 사항을 충족하게 되면서 이런 문제가 발생하기 시작했어요. 이건 Java 드라이버나 코드의 버그는 아니고요, 해당 라이브러리 제공자로서 저희가 알려드려야 할 부분이에요. 이 문제에 대해 저희만 고민하는 건 아니고요, 다른 분들도 변경하는 대신 알리는 쪽을 선택했답니다. (그들의 record 구현을요.)
내용을 설명하는 실제 예시를 보여드릴게요.
그리고 별표(*) 또는 와일드카드 import는 사용하지 않는 게 좋아요!
즐거운 코딩 되세요!
- driver
- java
- java17
- JDK
에이치시스템즈의 LogTree는 Neo4j 기반 GraphRAG 플랫폼으로, 데이터를 자동으로 지식그래프화하고 자연어 질의로 즉시 답을 제공합니다.
'GraphRAG' 카테고리의 다른 글
| LLM과 그래프 기술로 연간 보고서 파헤치기: Neo4j와 GraphRAG 활용 (0) | 2026.04.23 |
|---|---|
| 그래프와 AI, 대시보드를 넘어 지속적인 의사결정으로: Neo4j와 GraphRAG의 힘 (0) | 2026.04.22 |
| 상업 계약을 위한 에이전트 기반 GraphRAG (1) | 2026.04.22 |
| 고성능 LLM 애플리케이션을 위한 고급 RAG 기술 마스터하기 (1) | 2026.04.21 |
| 관계가 중요했던 한 해: Neo4j와 GraphRAG의 부상 (1) | 2026.04.21 |
