programming/database

Neo4j Cypher, 이렇게 쓰면 진짜 프로다: 컨벤션 가이드

jamie91 2025. 2. 25. 19:04

Neo4j의 Cypher 쿼리 언어를 사용할 때 권장되는 컨벤션(Convention)은 코드의 가독성, 일관성, 유지보수성을 높이는 데 도움을 줍니다. 아래는 Cypher를 작성할 때 일반적으로 따르는 컨벤션들입니다.


1. 키워드(Keyword)

  • Cypher의 키워드는 대문자로 작성합니다.
    • 예: MATCH, RETURN, WHERE, CREATE, MERGE, SET, DELETE, WITH, ORDER BY, LIMIT 등.
    • 예시:
        MATCH (p:Person)-[:ACTED_IN]->(m:Movie)
        RETURN p.name, m.title;

2. 라벨(Labels)

  • 라벨은 파스칼 케이스(PascalCase)로 작성합니다.
    • 예: Person, Movie, UserProfile, CustomerOrder.
    • 예시:
        MATCH (p:Person {name: 'Tom Hanks'})
        RETURN p;

3. 관계 유형(Relationship Types)

  • 관계 유형은 대문자 스네이크 케이스(UPPER_SNAKE_CASE)로 작성합니다.
    • 예: ACTED_IN, DIRECTED, IS_FRIEND_OF, HAS_REVIEWED.
    • 예시:
        MATCH (p:Person)-[:ACTED_IN]->(m:Movie)
        RETURN p, m;

4. 변수(Variables)

  • 변수는 소문자 스네이크 케이스(lower_snake_case)로 작성합니다.
    • 예: p, movie, user_profile, customer_order.
    • 예시:
        MATCH (p:Person)-[:ACTED_IN]->(m:Movie)
        RETURN p.name, m.title;

5. 속성(Properties)

  • 속성 이름은 소문자 스네이크 케이스(lower_snake_case)로 작성합니다.
    • 예: name, release_year, user_id, created_at.
    • 예시:
        MATCH (p:Person {name: 'Tom Hanks'})
        RETURN p.birth_year;

6. 문자열(Strings)

  • 문자열은 작은따옴표(')를 사용합니다.
    • 예: 'Tom Hanks', 'Apollo 13'.
    • 예시:
        MATCH (p:Person {name: 'Tom Hanks'})
        RETURN p;

7. 노드와 관계 표현

  • 노드와 관계는 *괄호 ()와 *대괄호 []로 명확히 구분합니다.
    • 노드: (p:Person)
    • 관계: [r:ACTED_IN]->
    • 예시:
        MATCH (p:Person)-[r:ACTED_IN]->(m:Movie)
        RETURN p, r, m;

8. 들여쓰기(Indentation)

  • 쿼리의 가독성을 높이기 위해 적절히 들여쓰기를 사용합니다.
    • 예시:
        MATCH (p:Person)-[:ACTED_IN]->(m:Movie)
        WHERE m.release_year > 2000
        RETURN p.name, m.title
        ORDER BY m.release_year DESC;

9. 쿼리 종료

  • Cypher 쿼리는 세미콜론(;)으로 끝냅니다.
    • 예시:
        MATCH (p:Person) RETURN p;

10. 고유 식별자(Unique Identifiers)

  • 고유 식별자는 소문자 스네이크 케이스(lower_snake_case)로 작성하며, id와 같은 일반적인 이름 대신 도메인에 맞는 이름을 사용합니다.
    • 예: person_id, movie_id, user_uuid.
    • 예시:
        MATCH (p:Person {person_id: 123})
        RETURN p;

11. WITH 절

  • WITH 절을 사용하여 쿼리를 단계적으로 나눌 때는 적절히 들여쓰기하고, 변수 이름을 명확히 지정합니다.
    • 예시:
        MATCH (p:Person)-[:ACTED_IN]->(m:Movie)
        WITH p, COUNT(m) AS movie_count
        WHERE movie_count > 5
        RETURN p.name, movie_count;

12. 함수(Functions)

  • 함수는 소문자 스네이크 케이스(lower_snake_case)로 작성합니다.
    • 예: COUNT(), SUM(), toLower(), toString().
    • 예시:
        MATCH (p:Person)
        RETURN COUNT(p) AS total_people;

13. 주석(Comments)

  • 주석은 //를 사용하여 추가합니다.
    • 예시:
        // 모든 사람을 찾고 이름을 반환합니다.
        MATCH (p:Person)
        RETURN p.name;

14. 패턴 매칭(Pattern Matching)

  • 패턴 매칭 시 방향성을 명확히 표시합니다.
    • 예: ()-[:ACTED_IN]->() 또는 ()<-[:DIRECTED]-().
    • 예시:
        MATCH (p:Person)-[:ACTED_IN]->(m:Movie)<-[:DIRECTED]-(d:Person)
        RETURN p, m, d;

15. 데이터 타입(Data Types)

  • 데이터 타입은 명확히 지정합니다.
    • 예: INTEGER, STRING, BOOLEAN, FLOAT, DATE.
    • 예시:
        CREATE (p:Person {name: 'Tom Hanks', birth_year: 1956});

16. 인덱스 및 제약 조건(Indexes and Constraints)

  • 인덱스와 제약 조건은 명확히 정의하고, 이름은 소문자 스네이크 케이스(lower_snake_case)로 작성합니다.
    • 예시:
        CREATE INDEX person_name_index FOR (p:Person) ON (p.name);
        CREATE CONSTRAINT unique_person_id FOR (p:Person) REQUIRE p.person_id IS UNIQUE;
728x90
반응형