본문 바로가기
프로그램 (PHP,Python)

대화형 AI Agent부터 RAG까지! 더 똑똑해진 n8n으로 확장하는 AI 자동화

by 날으는물고기 2025. 8. 21.

대화형 AI Agent부터 RAG까지! 더 똑똑해진 n8n으로 확장하는 AI 자동화

728x90

n8n 업데이트 정보 정리 포맷

  1. 개요/배경: 무엇이, 왜 바뀌었는지. (이전 동작 대비 차이)
  2. 주요 변경점 요약: 기능/UX/성능/호환성/Deprecated·Breaking 여부
  3. 보안 영향 & 가이드: 권한/자격증명/네트워크/로그·감사 항목/우회 가능성
  4. 운영 영향 범위: 영향받는 노드/워크플로우/크레덴셜/환경변수/플러그인
  5. 적용 방법(스테이징→프로덕션)
    • Docker/Helm/패키지별 업그레이드 명령어
    • 마이그레이션 절차(백업, 호환성/회귀 테스트, 롤백 플랜)
  6. 실전 활용 예제
    • UI 단계(스크린 필드 값/표현식)
    • 예시 워크플로우 JSON(바로 Import 가능)
    • API/CLI 사용 패턴(있다면)
  7. 운영 점검 체크리스트: 사전·사후 테스트, 모니터링(KPIs, 로그 키워드), 알림
  8. 유사 기능/대안 비교: 기존 방법과의 트레이드오프
  9. 자주 묻는 질문 & 트러블슈팅

예시: 사용자분이 관심 있다고 하셨던 HTTP Request 노드 페이징을 샘플로 구성

샘플 예시 — “HTTP Request 노드: 조건부 페이징 중단”

가정: HTTP API가 ?page= 쿼리로 페이지네이션을 제공하고,
응답 본문에 "has_more": false가 등장하면 더 이상 요청하지 않음.

1) 개요/배경

  • 기존에는 고정 페이지 수총 개수를 알아야 끝낼 수 있어 번거로웠습니다.
  • 이번 변화(가정 예시)는 본문 패턴 매칭 또는 응답 필드 값을 근거로 중단 조건을 유연하게 설정하도록 가이드합니다.

2) 주요 변경점 요약

  • 새 옵션 활용 가이드 또는 루프(Loop) 구성 패턴 제시
  • IF/Function/Set 노드를 조합해 “본문에 특정 문자열 포함 시 Stop” 로직 구현

3) 보안 영향 & 가이드

  • Rate Limit: 빠른 루프는 API 차단 유발 → Wait(딜레이) 노드로 QPS 제한
  • Credential 보관: N8N_ENCRYPTION_KEY 설정 필수, 자격증명은 워크플로우 JSON에 제외
  • 에러 처리: 4xx/5xx 시 즉시 중단 또는 재시도(지수 백오프) 설계
  • 로깅: 요청·응답 크기 제한 및 민감 데이터 마스킹

4) 운영 영향 범위

  • 해당 페이징을 쓰는 모든 워크플로우
  • 스케줄러(크론) 주기와 API 사용량 증가 가능성

5) 적용 방법

  • Docker
    docker compose pull n8n
    docker compose up -d n8n
    # 사전: Postgres/SQLite 백업, 워크플로우 Export
  • Helm(예시)
    helm repo update
    helm upgrade --install n8n n8n/n8n -n n8n --values values.yaml
  • 롤백: 이전 태그로 이미지 고정, 백업한 DB/워크플로우 복구

6) 실전 활용 예제

  1. Set (InitPage)
    • page = 1
  2. HTTP Request
    • Method: GET
    • URL: https://api.example.com/items?page={{$json.page}}
    • Timeout: 30s 이상(API 상황에 맞게)
    • Response: JSON
  3. IF (HasMore?)
    • 조건: {{$json["has_more"] === true}}
    • 또는 본문 문자열 매칭이 필요하면,
      • Contains{{ JSON.stringify($json).includes('"has_more":true') }}
  4. Set (NextPage) – IF의 true 경로
    • page = {{$json.page + 1 || 2}}
  5. Loop
    • NextPage → HTTP Request 로 연결(루프)
    • IF의 false 경로는 출력으로 종료
  6. Wait(선택)
    • 각 루프 사이 500~1000ms 대기

6-1) 에러·재시도(선택)

  • Error Trigger + Webhook/Slack 알림
  • HTTP 옵션의 Max Attempts, Retry When(상태코드/타임아웃) 구성

7) 운영 점검 체크리스트

  • 사전: 워크플로우 Export, DB 스냅샷, N8N_ENCRYPTION_KEY 보관
  • 사후: API 호출량/지연, 누락 페이지 없는지(개수·ID 중복 체크), 에러 로그
  • 알림: 임계치(실패율, 평균 지연, 5xx 비율) 초과 시 Slack/메일

8) 유사 기능/대안 비교

  • Split In Batches로도 페이지 목록이 사전 파악되는 경우 순차 처리 가능
  • API가 Link 헤더를 준다면 링크 기반 네비게이션이 단순

9) FAQ/트러블슈팅

  • 무한루프: has_more 판정 로직·페이지 증가 로직 점검
  • 속도 이슈: Wait 추가, 병렬 처리 시 API 정책 확인
  • 메모리 증가: “Output → Merge” 설계 시 스트리밍/분할 처리 고려

공통 업그레이드 팁

  1. 백업: DB 스냅샷, 워크플로우 일괄 Export, 크레덴셜 재암호화 키 확인
  2. 스테이징 검증: 샘플 워크플로우로 회귀 테스트(노드 버전·표현식 호환성)
  3. 관측성: executionList, executionView로 실패율/지연 추적, 로그 인덱싱(Elastic 등)
  4. 비밀 관리: 환경변수·크레덴셜은 노출 금지, 팀 권한 최소화
  5. 롤백 플랜: 이전 이미지 태그, 마이그레이션 스크립트 역전 전략 준비

n8n 업데이트: AI Agent Tool 노드

1) 개요/배경

지난 업데이트에서 AI Agent Tool 노드가 추가되었습니다. 이 노드는 하나의 캔버스에서 멀티 에이전트 오케스트레이션을 단일 실행으로 관리할 수 있도록 해주며, 기존의 서브 워크플로우 기반 오케스트레이션보다 단순하고 직관적인 구성을 제공합니다. 즉, 리더 에이전트 → 전문 에이전트들로 역할을 분리하고, 이를 계층적 구조로 연결하여 실제 조직처럼 업무를 분할·위임하는 방식이 가능합니다.

2) 주요 변경점 요약

  • 단일 캔버스 실행: 서브 워크플로우 없이도 다계층 에이전트 구성이 가능
  • 리더/부하 구조 지원: 메인 에이전트가 다른 에이전트를 호출 및 관리
  • 프롬프트 관리 효율화: 복잡한 지시사항을 여러 노드로 분리
  • 디버깅 단순화: 한 화면에서 전체 실행 확인 가능

3) 보안 영향 & 가이드

  • 프롬프트 설계 주의: 기본적으로 전체 실행 컨텍스트가 전달되지 않음 → 필요한 정보는 반드시 프롬프트에 명시
  • LLM 연결 관리: 각 에이전트별 크레덴셜(예: OpenAI API 키)이 분리될 수 있음 → 중앙에서 관리, 누출 방지 필요
  • 로깅: 디버깅 과정에서 민감 데이터가 프롬프트에 기록되지 않도록 주의
  • 권한 위임: 다단계 호출 구조에서는 “권한 전이”가 발생하므로, 접근 가능한 외부 API/도구 범위를 제한할 것

4) 운영 영향 범위

  • 멀티 AI 에이전트 기반 워크플로우 개발 속도 향상
  • 기존 Sub-workflow 방식 대비 디버깅·관리 편의성 개선
  • 기존 LLM 노드와 병행 활용 가능

5) 적용 방법

  1. 워크플로우에 AI Agent 노드 추가
  2. + 버튼 클릭 → Tools 연결 생성
  3. AI Agent Tool 노드 선택
  4. 노드 이름/역할/프롬프트 입력
  5. 필요한 LLM·Memory·Tools 연결
  6. 메인 에이전트 프롬프트에 “어떤 상황에서 이 Tool을 활용할지” 지시

6) 실전 활용 예제

👉 예시 시나리오: 마케팅 보고서 자동화

  • Primary AI Agent: 프로젝트 매니저 역할
  • AI Agent Tool #1: 데이터 분석 전문가 (엑셀/SQL 기반 데이터 정리)
  • AI Agent Tool #2: 보고서 작성 전문가 (결과를 요약하여 문서화)
  • AI Agent Tool #3: 품질 검토 전문가 (맞춤법·일관성 검토)

👉 UI 예시

  • Primary AI Agent 프롬프트
    너는 프로젝트 매니저 역할을 수행한다. 
    - 데이터 분석이 필요하면 "분석 전문가"를 사용하라. 
    - 보고서 작성은 "문서 전문가"에게 맡겨라. 
    - 최종 검토는 "QA 전문가"에게 위임해라.
  • 각 Tool 노드 프롬프트 예시
    • 분석 전문가: “주어진 데이터를 SQL 또는 수학적 모델로 분석해 결과를 표 형태로 반환하라.”
    • 문서 전문가: “분석 결과를 3단락 요약 보고서로 작성하라.”
    • QA 전문가: “보고서 문장을 점검하고 개선 사항을 제안하라.”

7) 운영 점검 체크리스트

  • 컨텍스트 누락 여부 확인: 필요한 데이터가 Tool 노드에 제대로 전달되는지
  • 프롬프트 중복 최소화: 동일 규칙은 Primary Agent에서 통제
  • 성능 모니터링: 계층이 많아질수록 실행 시간이 늘어남 → 불필요한 에이전트 호출 최소화
  • 로그 확인: 프롬프트와 응답에 민감 데이터가 없는지 점검

8) 유사 기능/대안 비교

  • 기존 방법: Sub-workflow 호출 → 모듈성은 좋지만 실행/디버깅 시 이동이 불편
  • AI Agent Tool 노드 방식: 단일 실행·단일 캔버스에서 관리 용이

9) FAQ/트러블슈팅

  • Q: 에이전트가 Tool을 인식하지 못한다?
    → Tool 노드 이름과 Primary Agent 프롬프트 내 지시사항이 일치해야 함.
  • Q: 실행이 너무 느리다?
    → 불필요한 다단계 호출을 줄이고, 일부 역할은 Merge/Set 노드로 단순 처리 가능.
  • Q: 전체 문맥이 공유 안 된다?
    → 필요한 데이터를 Tool 노드 프롬프트에 직접 전달.

n8n 업데이트: AI Evaluation 노드의 내장 메트릭 지원

1) 개요/배경

AI 워크플로우는 신뢰성과 예측 가능성이 중요하기 때문에 반드시 평가(Evaluation) 과정이 필요합니다. Evaluation 노드에서 바로 사용할 수 있는 내장 메트릭이 제공되어, 모델 성능과 프롬프트 변경 효과를 정량적으로 추적·비교할 수 있게 되었습니다. 즉, 별도의 커스텀 로직을 매번 작성하지 않고도, 정확성·유용성·구조 적합성·카테고리 매칭·툴 사용 여부 등 주요 지표를 손쉽게 평가할 수 있습니다.

2) 주요 변경점 요약

  • Set Metrics 노드에서 내장 메트릭 선택 가능 (드롭다운 제공)
  • 프롬프트 변경 전·후 성능 비교 지원
  • 모델별 성능 점수 비교 가능 → 모델 선택에 활용
  • 평가 실행 내역을 Evaluations 탭에서 시간 흐름에 따라 확인 가능

3) 보안 영향 & 가이드

  • 데이터셋 관리: 평가용 입력 데이터 및 정답(ground truth)은 별도 관리 → 개인정보 포함 여부 검토 필요
  • LLM 기반 채점: Correctness/Helpfulness 메트릭은 또 다른 LLM을 “판정자”로 사용 → 프롬프트에 민감 정보 포함되지 않도록 주의
  • 로그 관리: 평가 과정에서 모델 출력 및 기대값이 저장되므로 로그 마스킹 필요
  • 권한 분리: 평가 데이터 접근은 최소화, 운영자/분석자 구분 권한 설정

4) 운영 영향 범위

  • AI 기반 워크플로우 운영 시 정기적 평가 루틴을 추가 가능
  • 모델 교체·프롬프트 변경 시 성능 검증 프로세스 자동화
  • 커뮤니티 에디션은 1개 평가만 저장 가능, Pro/Enterprise는 무제한 저장

5) 적용 방법

  1. Evaluation 노드 추가 – 트리거로 사용
  2. Set Metrics 노드 연결
  3. 메트릭 선택: Correctness, Helpfulness, String Similarity, Categorization, Tools Used
  4. 필요한 경우 데이터셋 매핑 (예: 예상 출력 컬럼 → Expected Output 필드)
  5. 실행 후 Evaluations 탭에서 점수 비교/변화 추적

6) 실전 활용 예제

👉 시나리오: FAQ 챗봇 응답 평가

  • 목표: 모델 변경(예: GPT-4 → Gemini) 후 답변 품질 검증

👉 단계별

  1. Dataset 준비
    • Input: FAQ 질문
    • Expected Output: 정답 텍스트
    • Category: (선택) 답변 카테고리
  2. Evaluation 노드 구성
    • 입력: Dataset의 질문 전달
    • 모델 출력 수집
  3. Set Metrics 노드에서 메트릭 선택
    • Correctness: 모델 답변 vs Expected Output 비교 (LLM 판정)
    • Helpfulness: 답변의 유용성 평가 (LLM 판정)
    • String Similarity: 정답 문자열과 유사도 계산
  4. 결과 확인
    • Evaluations 탭 → 실행별 점수(예: 정확도 0.87 → 0.93 개선)
    • 프롬프트 수정 전후 성능 비교

7) 운영 점검 체크리스트

  • 데이터셋 최신성: 오래된 데이터 사용 시 평가 신뢰도 저하
  • LLM 채점 기준 검증: Correctness/Helpfulness 프롬프트의 채점 기준이 일관성 있는지 확인
  • 주기적 실행 자동화: 크론 기반으로 주기 평가 설정
  • 성능 알림 연동: Slack/메일로 일정 기준 이하 점수시 경고

8) 유사 기능/대안 비교

  • 기존: 커스텀 함수/스크립트로 채점 → 개발/디버깅 부담 큼
  • 신규: 내장 메트릭 선택만으로 바로 사용 가능 → 속도/편의성 ↑

9) FAQ/트러블슈팅

  • Q: LLM 기반 메트릭의 채점이 들쭉날쭉하다?
    → 프롬프트에 “판정 기준(예: 1~5점, 무엇이 좋은 답변인가)”을 명확히 기재 필요
  • Q: 문자열 비교만 하면 될 때는?
    → String Similarity 메트릭이 가장 안정적 (특히 코드·명령어 비교 시)
  • Q: 여러 모델 비교하려면?
    → 동일 데이터셋으로 반복 실행 후 Evaluations 탭에서 점수 비교

n8n 업데이트: Respond to Chat 노드

1) 개요/배경

이 업데이트에서는 Respond to Chat 노드가 새롭게 추가되었습니다. 이를 통해 n8n Chat에서 Human-in-the-Loop 기능을 네이티브로 사용할 수 있으며, 대화 중간에 사용자의 입력을 받아 다음 단계로 진행하는 멀티 턴(Multi-turn) 대화형 워크플로우를 단일 실행에서 구현할 수 있습니다.

300x250

즉, 이제는 단순히 한 번의 응답을 주고받는 구조가 아니라,

  • 추가 확인 요청
  • 중간 결과 공유
  • 승인/거부 응답 처리
    등의 대화형 플로우를 만들 수 있게 된 것입니다.

2) 주요 변경점 요약

  • 단일 실행 내 멀티 턴 대화 지원 (실행 수 절감)
  • 사용자 응답 기반 브랜치 제어 가능
  • 승인·검증·보완 입력 요청 등 Human-in-the-Loop 지원
  • 대화형 폼, 단계별 승인, 조건 분기형 워크플로우 설계 용이

3) 보안 영향 & 가이드

  • 승인 요청 시 인증 필요: Chat 인터페이스가 인증 없이 열려 있다면 승인 절차를 악용할 수 있음 → 내부 사용자 인증/세션 관리 필수
  • 로그 관리: 사용자 입력값이 로그에 저장될 수 있으므로 민감정보(개인정보, 패스워드)는 입력받지 않도록 설계
  • 권한 통제: 승인/거부 플로우는 반드시 Role 기반 접근제어(RBAC) 적용 → 일반 사용자와 관리자 승인 노드를 구분
  • 중간 결과 공유 시 정보 노출 주의: 내부 데이터나 API 호출 결과가 그대로 출력되지 않도록 필터링 필요

4) 운영 영향 범위

  • 기존의 단방향 ChatBot 워크플로우를 대화형 응용 서비스로 확장 가능
  • 승인·검토 프로세스를 n8n Chat 내에서 처리 가능 → Slack/MS Teams 등 외부 승인 프로세스 일부 대체 가능
  • 실행당 비용 절감 (한 실행 안에서 여러 번 대화 처리 가능)

5) 적용 방법

  1. Chat Trigger 노드 추가
    • Response Mode: Using Respond Nodes 선택
  2. Respond to Chat 노드 추가
    • 메시지 작성 (예: “승인하시겠습니까?”)
    • “사용자 입력 대기” 옵션 선택 시, 응답 대기 후 다음 단계 실행
  3. 응답값을 IF 노드Switch 노드와 연결 → 조건 분기
  4. 필요 시 여러 Respond to Chat 노드를 배치해 단계별 대화 구성

6) 실전 활용 예제

👉 예시 시나리오: 결재 승인 프로세스

  1. Chat Trigger
    • 사용자가 “지출 결의서 제출” 메시지를 입력 → 워크플로우 시작
  2. Respond to Chat #1
    • Bot: “지출 결의 금액을 입력해주세요.”
    • 사용자 입력 대기
  3. Respond to Chat #2
    • Bot: “상신 금액이 1,200,000원입니다. 승인을 진행하시겠습니까? (승인/거부)”
    • 사용자 입력 대기
  4. IF 노드
    • “승인” → 결재 DB 업데이트 + Slack 알림
    • “거부” → 거부 처리 메시지 반환
  5. Respond to Chat #3 (결과 통보)
    • Bot: “결재가 완료되었습니다.” 또는 “결재가 거부되었습니다.”

➡️ 이를 통해 별도의 여러 실행을 만들 필요 없이 단일 실행 내에서 멀티 턴 승인 프로세스 가능

7) 운영 점검 체크리스트

  • 대화 세션 관리: 장시간 대화 시 세션 타임아웃 여부 확인
  • 입력값 유효성 검증: 사용자가 잘못된 값을 입력해도 워크플로우가 무한 대기하지 않도록 예외 처리
  • 로그 감시: 민감한 입력값(예: 계좌번호)이 기록되지 않도록 로깅 필터 적용
  • 실패 시 복구 시나리오: Chat 연결이 끊어져도 승인/거부 내역이 데이터베이스에 기록되도록 이중 확인

8) 유사 기능/대안 비교

  • 기존: Chat Trigger + Webhook 구조로 단순 1회 대화만 가능 → 다단계 대화는 Sub-workflow 필요
  • 신규: Respond to Chat 노드로 단일 실행에서 다단계 대화 가능 → 설계 단순화, UX 향상

9) FAQ/트러블슈팅

  • Q: 사용자가 응답하지 않으면?
    → 타임아웃 설정, 기본 경로(예: 자동 거부) 지정 필요
  • Q: 동시에 여러 사용자와 대화 가능?
    → Yes. 각 세션은 독립 실행 컨텍스트에서 관리됨
  • Q: 승인자만 응답하도록 제한 가능?
    → Chat Trigger에서 사용자 ID/권한 매핑 확인 후 조건 분기 처리

n8n 업데이트: RAG Starter Template

1) 개요/배경

이 업데이트는 RAG(Retrieval-Augmented Generation) Starter Template가 추가되었습니다. 이 템플릿은 문서 업로드 → 벡터 스토어 삽입 → 쿼리/검색 → AI 응답 생성의 전형적인 RAG 파이프라인을 바로 실행할 수 있게 도와줍니다. 즉, AI 모델이 훈련 데이터에만 의존하지 않고, 외부 문서나 최신 도메인 지식을 검색·활용하여 더 정확하고 신뢰성 있는 응답을 만들 수 있습니다.

2) 주요 변경점 요약

  • RAG 기본 템플릿 제공: 두 가지 워크플로우 내장
    • 파일 업로드 & 벡터 스토어 삽입
    • 쿼리 & 검색 응답 생성
  • Vector Store 노드 지원 (예: Simple Vector Store)
  • 텍스트 분할기(Text Splitter) 옵션 제공: Character, Recursive, Token 기반
  • 임베딩 모델 선택 가능: 작은 모델(빠르고 저렴) vs 큰 모델(정확성 높음)
  • 에이전트 기반 검색 또는 노드 직접 검색 방식 지원

3) 보안 영향 & 가이드

  • 데이터 기밀성: 업로드하는 문서에 개인정보·내부 문서가 포함될 경우 반드시 암호화/접근 제어 필요
  • 임베딩 데이터 노출 주의: 벡터화된 데이터도 역추적 가능성이 있으므로 저장소 보안 설정 필수
  • 모델 선택 보안: 외부 API(LangChain, OpenAI 등)에 문서 벡터를 전송할 경우 DLP 정책 확인
  • 메타데이터 관리: 문서 출처/작성자 정보는 보안 로그 관점에서 유용하지만, 불필요한 식별정보는 제거 필요

4) 운영 영향 범위

  • 사내 지식 검색봇, 문서 QA, 보안 FAQ 자동화 등에 즉시 활용 가능
  • 기존 DB/검색엔진 대신 Vector Store 기반 검색으로 전환 시 유연성↑
  • 프롬프트 기반 검색 정확도 개선 → 잘못된 AI 응답(할루시네이션) 줄이는 효과

5) 적용 방법

👉 데이터 삽입

  1. 데이터 수집 노드 추가 (예: Google Drive, S3, FTP 등)
  2. Vector Store 노드 → Insert Documents 선택
  3. Embedding 모델 선택 (예: text-embedding-ada-002, text-embedding-3-large)
  4. Text Splitter 설정:
    • Recursive Character Splitter (추천)
    • Chunk size: 200~500 tokens, Overlap 설정 권장
  5. (선택) 메타데이터 추가 (예: 문서 ID, 작성자, 날짜)

👉 데이터 쿼리

  • Agent 기반 검색
    • Vector Store를 Tool로 연결
    • Limit(검색 결과 수), Metadata 포함 여부 설정
  • Node 직접 검색
    • Vector Store 노드 → Get Many
    • 쿼리 입력 후 결과 반환

6) 실전 활용 예제

👉 예시 시나리오: 보안팀 내부 FAQ 검색봇

  1. 업로드 워크플로우
    • Google Drive에서 보안 정책 PDF → Vector Store Insert
    • Embedding 모델: text-embedding-3-small
    • Splitter: Recursive (Markdown/Code Block 우선)
  2. 쿼리 워크플로우
    • Chat Trigger: 사용자 입력 (“내부 시스템 비밀번호 정책은?”)
    • Vector Store → Get Many (Top 3 chunks)
    • Agent: 검색 결과 기반으로 답변 작성
    • Respond to Chat 노드: 답변 출력

➡️ 결과: “비밀번호 최소 길이 12자, 특수문자 포함, 90일 주기 변경”과 같이 실제 내부 정책에 기반한 응답 제공

7) 운영 점검 체크리스트

  • 임베딩 모델 일관성: 삽입/쿼리 시 동일 모델 사용
  • Chunk 크기 검증: 너무 크면 검색 정확도 ↓, 너무 작으면 문맥 손실 발생
  • Vector Store 보안: 접근제어·암호화 설정 확인
  • 성능 모니터링: 벡터 검색 응답 지연 확인 (특히 대용량 문서 처리 시)
  • 프롬프트 검증: Agent가 불필요하게 많은 Chunk를 사용하지 않도록 제한

8) 유사 기능/대안 비교

  • 기존: DB + Keyword Search → 의미 검색 한계
  • 신규: Vector Store + Semantic Search → 의미 기반 검색, 최신 문서 활용 가능
  • 대안: ElasticSearch + Embedding 기반 하이브리드 검색 (대규모 환경 적합)

9) FAQ/트러블슈팅

  • Q: 어떤 임베딩 모델이 적합한가요?
    → 짧고 단순 문서: text-embedding-ada-002
    → 긴 문서·정확성 중요: text-embedding-3-large
  • Q: Chunk 크기는 얼마가 적당한가요?
    → 200-500 토큰 + 20-50 토큰 overlap이 일반적
  • Q: 할루시네이션을 줄이려면?
    → Metadata 포함 + Agent 프롬프트에 “검색된 내용만 사용하라” 지시
728x90
그리드형(광고전용)

댓글