도메인 특화 (LoRA + RAG)
2026-04-04 작성2026-07-17 수정10분 읽기
범용 LLM을 금융/통신/제조 등 특정 도메인에 최적화하여 코딩 퀄리티를 대폭 향상시키는 3단계 전략을 제공합니다.
핵심 질문
"왜 Claude나 GPT로 생성한 코드가 우리 회사 표준을 따르지 않을까?" → 모델이 여러분의 도메인 지식을 학습하지 못했기 때문입니다.
3개 레이어 상세
도메인 특화는 Steering → RAG → LoRA 순으로 점진적으로 적용합니다.
Layer 1: Steering (즉시 적용)
정의: spec 파일로 코딩 규칙을 명시적으로 정의하여 LLM에게 지시합니다.
장점:
- 즉시 적용 가능
- 비용 없음
- 유지보수 간편 (spec 파일만 수정)
단점:
- 복잡한 도메인 로직은 한계
- 컨텍스트 윈도우 낭비
예시:
# coding-standards.md
## 코딩 컨벤션
- 클래스명: PascalCase
- 메서드명: camelCase
- 상수: UPPER_SNAKE_CASE
## 트랜잭션 처리
- 모든 DB 작업은 @Transactional 필수
- 롤백 조건: RuntimeException 발생 시
## 로깅 표준
- 진입점: log.info("Method {} started", methodName)
- 예외: log.error("Error in {}: {}", methodName, e.getMessage())
Layer 2: RAG (1-2주)
정의: 내부 문서를 벡터 DB에 임베딩하여 실시간으로 검색, 관련 정보를 프롬프트에 포함합니다.
장점:
- 최신 문서 자동 반영 (재학습 불필요)
- 내부 API 스펙 정확도 높음
- 모델 가중치 변경 없음
단점:
- 인프라 필요 (Milvus, Neo4j)
- 검색 품질이 출력 품질에 직결
- 임베딩 비용
예시:
from langchain.vectorstores import Milvus
from langchain.embeddings import OpenAIEmbeddings
# 1. 내부 API 문서 임베딩
embeddings = OpenAIEmbeddings()
vectorstore = Milvus.from_documents(
documents=internal_api_docs,
embedding=embeddings,
connection_args={"host": "milvus.cluster.local", "port": 19530}
)
# 2. 질문과 관련된 문서 검색
query = "사용자 인증 API 호출 방법은?"
docs = vectorstore.similarity_search(query, k=3)
# 3. 검색 결과 + 질문을 LLM에 전달
prompt = f"Context: {docs}\n\nQuestion: {query}"