> ## Documentation Index
> Fetch the complete documentation index at: https://docs.baeum.ai.kr/llms.txt
> Use this file to discover all available pages before exploring further.

# Neo4j

**그래프 데이터베이스**입니다. 데이터를 테이블이 아닌 **노드**(Node)와 **관계**(Relationship) 형태로 저장합니다.

## 어디에 쓰이나요?

* **지식 그래프(Knowledge Graph)**: 개념 간의 관계를 저장하고 탐색 (예: "서울 → 수도 → 대한민국")
* **GraphRAG**: 문서에서 추출한 엔티티와 관계를 그래프로 구성하여 LLM의 답변 품질 향상
* **소셜 네트워크**: 사용자 간 팔로우, 친구 관계 분석
* **추천 시스템**: "이 상품을 산 사람이 함께 산 상품" 같은 관계 기반 추천
* **사기 탐지**: 계좌 간 자금 흐름을 그래프로 분석

관계형 데이터베이스에서 여러 테이블을 JOIN하여 조회해야 하는 복잡한 관계 데이터를, Neo4j에서는 직관적인 그래프 쿼리 언어인 **Cypher**로 간결하게 표현할 수 있습니다.

## Docker Compose

```yaml docker-compose.yml theme={null}
services:
  neo4j:
    image: neo4j:5-community
    container_name: neo4j
    restart: unless-stopped
    ports:
      - "7474:7474"
      - "7687:7687"
    environment:
      - NEO4J_AUTH=neo4j/changeme
      - NEO4J_PLUGINS=["apoc"]
    volumes:
      - neo4j_data:/data
      - neo4j_logs:/logs

volumes:
  neo4j_data:
  neo4j_logs:
```

## 실행

```bash theme={null}
docker compose up -d
```

## 접속 확인

브라우저에서 `http://localhost:7474`로 Neo4j Browser에 접속합니다.

* **Username**: neo4j
* **Password**: changeme

또는 CLI로 확인합니다.

```bash theme={null}
docker exec -it neo4j cypher-shell -u neo4j -p changeme "RETURN 1 AS result"
```

## 기본 정보

| 항목             | 값        |
| -------------- | -------- |
| HTTP 포트 (브라우저) | 7474     |
| Bolt 포트 (드라이버) | 7687     |
| 기본 사용자         | neo4j    |
| 기본 비밀번호        | changeme |

## 환경 변수

| 변수                                     | 설명                                 |
| -------------------------------------- | ---------------------------------- |
| `NEO4J_AUTH`                           | 인증 정보 (사용자/비밀번호, `none`으로 인증 비활성화) |
| `NEO4J_PLUGINS`                        | 설치할 플러그인 목록 (JSON 배열)              |
| `NEO4J_dbms_memory_heap_initial__size` | 초기 힙 메모리                           |
| `NEO4J_dbms_memory_heap_max__size`     | 최대 힙 메모리                           |
| `NEO4J_dbms_memory_pagecache_size`     | 페이지 캐시 크기                          |

<Note>
  Neo4j 환경 변수에서 설정 키의 `.`은 `_`로, `_`는 `__`로 변환됩니다. 예: `dbms.memory.heap.initial_size` → `NEO4J_dbms_memory_heap_initial__size`
</Note>

## APOC 플러그인

APOC(Awesome Procedures on Cypher)은 Neo4j에서 자주 사용되는 확장 프로시저 모음입니다.

```yaml theme={null}
environment:
  - NEO4J_PLUGINS=["apoc"]
```

## 라이선스

| 구분     | 내용                                                                                                                                       |
| ------ | ---------------------------------------------------------------------------------------------------------------------------------------- |
| 라이선스   | GPL v3 (Community), 상용 라이선스 (Enterprise)                                                                                                 |
| 개인 사용  | Community 에디션 자유롭게 사용 가능                                                                                                                 |
| 상업적 사용 | Community는 GPL v3 조건 준수 필요 (소스 공개 의무). 사내 서버에서 직접 사용하는 것은 가능하나, Neo4j를 포함한 소프트웨어를 배포하는 경우 GPL 조건이 적용됨. Enterprise 기능이 필요하면 유료 라이선스 구매 필요 |

## 참고

* [Neo4j Docker 설치 가이드](https://neo4j.com/docs/operations-manual/current/docker/introduction/)
* [Neo4j 공식 문서](https://neo4j.com/docs/)

## 설치 점검 목록

* `docker compose up -d` 후 `docker compose ps`로 컨테이너 상태를 확인했습니다.
* 기본 포트/계정/비밀번호를 문서대로 점검했습니다.
* 운영용으로 사용할 때 기본 비밀번호/시크릿 값을 변경했습니다.
* 장애 분석을 위해 `docker compose logs -f` 확인 방법을 숙지했습니다.

## 문제 해결 가이드

* 컨테이너가 실행되지 않으면 `docker compose logs -f`로 오류 원인을 먼저 확인합니다.
* 포트 충돌이 나면 기존 프로세스를 종료하거나 포트 매핑 값을 변경합니다.
* 이미지 pull 실패 시 네트워크 연결 및 레지스트리 접근 권한을 확인합니다.
* 설정 변경 후 문제가 지속되면 `docker compose down` 후 다시 `up -d`로 재기동합니다.

## 관련 문서

<CardGroup cols={2}>
  <Card title="Setup 홈" icon="house" href="/setup/index">
    운영체제별 설치 흐름을 다시 확인합니다.
  </Card>

  <Card title="다음: Milvus" icon="arrow-right" href="/stacks/milvus">
    다음 설치 단계를 이어서 진행합니다.
  </Card>
</CardGroup>
