Neo4j는 **그래프 데이터베이스( Graph Database )**로, 노드(node)와 관계(relationship)를 이용해 데이터를 저장하고 질의하는 시스템이에요. 관계형 DB(SQL)와 달리, **연결 중심 데이터**를 직관적으로 표현하고 탐색하는 데 강력합니다.
---
## 핵심 개념
- **노드(Node)**: 데이터의 개체(Entity). 예: 사람, 회사, 도시
- **관계(Relationship)**: 노드 간 연결. 방향성과 속성을 가짐. 예: `(:사람)-[:WORKS_AT]->(:회사)`
- **속성(Properties)**: 노드와 관계 모두에 키-값 형태로 저장 가능
- **레이블(Label)**: 노드의 타입을 분류하는 태그. 예: `(:Person)`, `(:Company)`
---
## Cypher 쿼리 언어
Neo4j에서 사용하는 SQL 유사 언어:
- 노드 생성
```cypher
CREATE (a:Person {name: "Alice", age: 30})
```
- 관계 생성
```cypher
MATCH (a:Person {name: "Alice"}), (b:Company {name: "Neo4j"})
CREATE (a)-[:WORKS_AT]->(b)
```
- 탐색
```cypher
MATCH (p:Person)-[:WORKS_AT]->(c:Company)
RETURN p.name, c.name
```
- 패턴 탐색 (짧은 경로)
```cypher
MATCH (a:Person {name: "Alice"})-[:KNOWS*1..3]-(friends)
RETURN friends
```
---
## 장점
- **복잡한 관계 질의**가 빠르고 직관적
- 소셜 네트워크, 추천 시스템, 지식 그래프, 생명정보학 네트워크 분석 등에 강력
- 시각화 친화적 (Neo4j Browser, Bloom 등 도구 제공)
---
## 시작 방법
1. **Neo4j Desktop** 설치 (GUI + 로컬 DB 관리)
2. **Neo4j Aura** (클라우드 서비스, 무료 tier 있음)
3. Python, Java, JavaScript 클라이언트 라이브러리 지원 (`py2neo`, `neo4j-driver` 등)