---
sidebar_label: "파일 I/O"
title: "Processor 파일 I/O - CyberGo JSON | API"
description: "CyberGo JSON Processor 파일 메서드: LoadFromFile/LoadFromReader 로드, SaveToFile/MarshalToFile 저장, UnmarshalFromFile 읽기, SaveToWriter 스트림 출력."
sidebar_position: 9
---

# 파일 I/O 메서드

Processor 는 파일, `io.Reader`, `io.Writer` 세 가지 데이터 소스를 다루는 JSON 파일 읽기/쓰기 및 스트리밍 로드 메서드를 제공합니다.

## 파일 로드

### LoadFromFile

시그니처: `func (p *Processor) LoadFromFile(filePath string, cfg ...Config) (string, error)`

파일에서 JSON 데이터를 로드하고 원시 문자열을 반환합니다.

```go
data, err := p.LoadFromFile("config.json")
if err != nil {
    panic(err)
}
fmt.Println(data) // 원시 JSON 문자열
```

### LoadFromFileAsData (비공개 전환)

:::warning API 변경 안내
LoadFromFileAsData 는 내부 메서드 (`loadFromFileAsData`) 로 전환되어 공개 API 로 내보내지 않습니다. `LoadFromFile` + `Parse` 조합을 대신 사용하세요:

```go
jsonStr, err := p.LoadFromFile("data.json")
if err != nil {
    panic(err)
}
var data any
err = p.Parse(jsonStr, &data)
// data 타입이 map[string]any 또는 []any
if obj, ok := data.(map[string]any); ok {
    fmt.Println(obj["name"])
}
```
:::

## Reader 로드

### LoadFromReader

시그니처: `func (p *Processor) LoadFromReader(reader io.Reader, cfg ...Config) (string, error)`

Reader 에서 JSON 데이터를 로드하고 원시 문자열을 반환합니다.

```go
file, _ := os.Open("data.json")
defer file.Close()

data, err := p.LoadFromReader(file)
if err != nil {
    panic(err)
}
```

### LoadFromReaderAsData (비공개 전환)

:::warning API 변경 안내
LoadFromReaderAsData 는 내부 메서드 (`loadFromReaderAsData`) 로 전환되어 공개 API 로 내보내지 않습니다. `LoadFromReader` + `Parse` 조합을 대신 사용하세요:

```go
file, _ := os.Open("data.json")
defer file.Close()

jsonStr, err := p.LoadFromReader(file)
if err != nil {
    panic(err)
}
var data any
err = p.Parse(jsonStr, &data)
```
:::

## 파일 쓰기

### SaveToFile

시그니처: `func (p *Processor) SaveToFile(filePath string, data any, cfg ...Config) error`

데이터를 JSON 파일로 저장합니다. 상위 디렉토리를 자동으로 생성합니다.

```go
err := p.SaveToFile("data.json", map[string]any{"name": "CyberGo"})

// PrettyConfig 로 포맷팅 출력 저장
err = p.SaveToFile("data.json", data, json.PrettyConfig())
```

### MarshalToFile

시그니처: `func (p *Processor) MarshalToFile(path string, data any, cfg ...Config) error`

데이터를 JSON 으로 인코딩하고 파일에 씁니다. 상위 디렉토리를 자동으로 생성합니다.

```go
err := p.MarshalToFile("output.json", data)

// 포맷팅하여 저장
err = p.MarshalToFile("output.json", data, json.PrettyConfig())
```

### UnmarshalFromFile

시그니처: `func (p *Processor) UnmarshalFromFile(path string, v any, cfg ...Config) error`

파일에서 JSON 을 읽고 대상 변수로 디코딩합니다.

```go
var config Config
err := p.UnmarshalFromFile("config.json", &config)
if err != nil {
    panic(err)
}
```

### SaveToWriter

시그니처: `func (p *Processor) SaveToWriter(writer io.Writer, data any, cfg ...Config) error`

데이터를 JSON 으로 인코딩하고 io.Writer 에 씁니다.

```go
var buf bytes.Buffer
err := p.SaveToWriter(&buf, data, json.PrettyConfig())
```

## 메서드 선택

| 시나리오 | 추천 메서드 |
|------|----------|
| 원시 문자열이 필요한 경우 | `LoadFromFile` / `LoadFromReader` |
| 파싱된 데이터가 필요한 경우 | `LoadFromFile` + `Parse` / `LoadFromReader` + `Parse` |
| 데이터를 파일에 저장 | `SaveToFile` / `MarshalToFile` |
| Writer 에 쓰기 | `SaveToWriter` |
| 파일에서 읽고 디코딩 | `UnmarshalFromFile` |

## 관련 문서

- [파싱 및 검증](./parse) - Parse/Valid 파싱 메서드
- [파일 I/O 함수](../functions/file-io) - 패키지 레벨 파일 함수
