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

# Output 스테이지

> 정리하고 강화한 청크를 벡터 인덱스, 블롭 스토어, 외부 API, DB에 남깁니다

**Output** 단계는 정리하고 청크로 나누고 강화한 데이터가 마지막으로 놓이는 곳입니다. 블록은 Vector, Blob, Action, DB Upsert 네 가지입니다. Output 블록이 하나도 없으면 실행 결과가 어디에도 남지 않으니, 정제라인마다 적어도 하나는 두세요.

<Frame>
  <img src="https://mintcdn.com/conscience-technology/40NFQYSYq0qo9Q4J/images/docs/foundry-output-inspector.png?fit=max&auto=format&n=40NFQYSYq0qo9Q4J&q=85&s=351594682be5f277d40925c838b05d23" width="400" alt="Vector 블록 설정 — 백엔드, 컬렉션, 거리 척도를 정한다" data-path="images/docs/foundry-output-inspector.png" />
</Frame>

## Vector

청크를 임베딩과 함께 벡터 인덱스에 씁니다. 대부분 정제라인의 기본 목적지이고, Agent의 리트리벌이 여기서 검색합니다.

* **백엔드** pgvector(기본값), Qdrant, Milvus, Weaviate
* **컬렉션 / 테이블** 기본 `documents`
* **거리 척도** 기본 코사인

상류에 [Embed](/ko/build/foundry/enrich) 블록을 두어 청크마다 벡터를 만들어 두어야 합니다.

## Blob

원본 바이트를 그대로 보존합니다. Vector 옆에 나란히 두고, 검색은 벡터로 하되 인용할 때는 원본을 보여주는 구성에 씁니다.

* **Backend** S3 호환 스토리지
* **Bucket / path** 저장 위치
* **Encrypt at rest** 저장 시 암호화

## Action

레코드마다 외부 REST API에 HTTP POST/PUT을 보냅니다. 웹훅, Slack, 사내 시스템처럼 Nora 밖에서 결과를 받아 볼 곳이 있을 때 씁니다.

* **엔드포인트 · 헤더 · 파라미터** Web / API 소스와 같은 방식이고 **cURL에서 가져오기**도 됩니다.

## DB Upsert

레코드를 관계형 데이터베이스 테이블에 upsert 합니다. `INSERT … ON CONFLICT`(Postgres) 또는 `ON DUPLICATE KEY`(MySQL)로 동작해, 같은 실행을 다시 돌려도 중복 행이 생기지 않습니다.

* **DSN** `postgres://`, `mysql://`, `mariadb://` 스킴이 엔진을 결정합니다.
* **Table** 식별자는 엔진에 맞게 인용 처리됩니다.
* **Conflict key(s)** 쉼표로 구분한 컬럼들. Postgres는 `ON CONFLICT (cols)`를 쓰고, MySQL은 테이블의 UNIQUE INDEX에 기대므로 인덱스가 있어야 합니다.
* **On conflict** 기본은 UPDATE(upsert)

## 목적지 나누기

Output 블록은 여럿 둘 수 있습니다. 이를테면 Vector와 Blob을 나란히 두어 검색용 인덱스와 인용용 원본을 함께 남기고, 조건에 따라 다른 목적지로 보내고 싶으면 상류에 [Branch](/ko/build/foundry/chunk) 블록을 두세요.
