25분
Pitfall: Text2Cypher 보안과 실무 함정 5가지
Day 1: Text2Cypher 개론
Pitfall: Text2Cypher 보안과 실무 함정 5가지
Text2Cypher & NL2Query > Day 1: Text2Cypher 개론
학습 목표
temperature 설정의 중요성을 안다 스키마 누락 문제를 이해한다 보안 검증의 필요성을 안다 Cypher Injection 공격을 이해하고 방어할 수 있다 allow_dangerous_requests의 의미를 정확히 안다
Pitfall 1: temperature > 0
에디터 로딩 중...
문제: 같은 질문에 다른 Cypher가 생성됨
에디터 로딩 중...
다 맞는 거 같지만, 3가지가 다 다르다. 캐싱도 안 되고, 디버깅도 어렵다.
에디터 로딩 중...
Pitfall 2: 스키마 없이 Cypher 생성
에디터 로딩 중...
문제: LLM이 레이블을 추측함
에디터 로딩 중...
스키마가 없으면 LLM은 추측한다. 추측은 틀린다.
에디터 로딩 중...
Pitfall 3: 검증 없이 실행 (보안 핵심!)
에디터 로딩 중...
문제: 악의적 또는 실수로 위험한 쿼리 생성
에디터 로딩 중...
Pitfall 4: Cypher Injection 공격
SQL Injection과 유사하게, 사용자 입력에 Cypher 코드를 삽입하는 공격이다.
에디터 로딩 중...
방어 방법:
에디터 로딩 중...
Pitfall 5: allow_dangerous_requests 이해
LangChain 0.1.44+에서 추가된 보안 옵션이다.
에디터 로딩 중...
왜 allow_dangerous_requests=True를 써야 하는가?
LangChain이 "이 Chain은 LLM이 생성한 임의의 Cypher를 DB에 실행합니다. 당신이 이 위험을 인지하고 있습니까?"라고 묻는 것이다.
프로덕션에서는 반드시 추가 보안 레이어를 갖춰야 한다:
에디터 로딩 중...
체크리스트
| 항목 | 확인 | 우선순위 |
|---|---|---|
| temperature = 0? | □ | 필수 |
| 스키마 주입됨? | □ | 필수 |
| 입력 정제 (sanitize)? | □ | 필수 |
| Cypher 키워드 검증? | □ | 필수 |
| LIMIT 강제? | □ | 필수 |
| Neo4j 읽기 전용 사용자? | □ | 권장 |
| 쿼리 타임아웃? | □ | 권장 |
| 에러 처리? | □ | 필수 |
| 로깅/모니터링? | □ | 권장 |
하나라도 빠지면 프로덕션 불가.