# Echo에서 HTTP 응답 반환

## 1. 개요

Dabory의 **Go 언어에서는 Echo 프레임워크로 프론트엔드 단에 응답데이터로 Json 데이터를 넘겨줘야 하기때문에** `c.String()`과 `c.JSONBlob()`을 사용하여 HTTP 응답을 Json으로 처리하는 방법을 설명한다.

---

#### 2. **`c.String(statusCode int, response string)` 사용법**

### ✅ 개요

- `c.String()`은 **단순 문자열 응답을 반환**하는 함수이다.
- `statusCode`는 HTTP 상태 코드이며, `response`는 프론트엔드로 보낼 응답 본문이다.

### ✅ 사용 예제

<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950" id="bkmrk-return-c.string%28607%2C"><div class="overflow-y-auto p-4" dir="ltr">var c echo.Context</div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-keyword">return</span> c.String(<span class="hljs-number">607</span>, <span class="hljs-string">""</span>)`</div></div>### ✅ 동작 방식

- `607`이라는 **커스텀 HTTP 상태 코드**를 응답으로 보낸다.
- 응답 본문은 `""` (빈 문자열)이다.
- **프론트엔드에서 `response.status` 값이 `607`인지 확인 가능**.

---

#### 3. `c.JSONBlob(statusCode int, jsonData []byte)` 사용법

### ✅ 개요

- `c.JSONBlob()`은 **JSON 형식의 응답을 반환**하는 함수이다.
- `statusCode`는 HTTP 상태 코드이며, `jsonData`는 이미 변환된 JSON 데이터(`[]byte`)이다.

### ✅ 사용 예제

<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950" id="bkmrk-ret%2C-err-%3A%3D-json.mar"><div class="overflow-y-auto p-4" dir="ltr">`ret, err := json.Marshal(vRet)<span class="hljs-keyword">if</span> err != <span class="hljs-literal">nil</span> {    <span class="hljs-keyword">return</span> c.String(<span class="hljs-number">500</span>, <span class="hljs-string">"Failed to encode JSON: "</span>+err.Error())}<span class="hljs-keyword">return</span> c.JSONBlob(http.StatusOK, ret)`</div></div>### ✅ 동작 방식

1. `json.Marshal(vRet)`을 사용하여 `ZbaksanSorderEyetestRes` 구조체를 JSON 데이터로 변환한다.
2. 변환된 JSON을 `c.JSONBlob(http.StatusOK, ret)`을 통해 프론트엔드로 전송한다.
3. **프론트엔드는 `response.json()` 또는 `response.data`로 JSON을 받을 수 있다.**

---

## 4. `c.String()` vs `c.JSONBlob()` 비교

<table id="bkmrk-%EA%B8%B0%EB%8A%A5-c.string%28%29-c.json"><thead><tr><th>기능</th><th>`c.String()`</th><th>`c.JSONBlob()`</th></tr></thead><tbody><tr><td>응답 형식</td><td>**문자열(String)**</td><td>**JSON (바이트 배열)**</td></tr><tr><td>사용 목적</td><td>단순 메시지, 상태 코드 반환</td><td>JSON 데이터 응답</td></tr><tr><td>예제 코드</td><td>`c.String(607, "")`</td><td>`c.JSONBlob(http.StatusOK, ret)`</td></tr><tr><td>프론트에서 처리</td><td>`response.text()`</td><td>`response.json()` 또는 `response.data`</td></tr></tbody></table>

---

## 5. 요약

✅ **`c.String(607, "")`**

- HTTP 상태 코드 `607`을 반환하여 프론트엔드에서 감지 가능.
- 프론트엔드에서 `response.status` 값으로 확인 후 특정 로직 실행.

✅ **`c.JSONBlob(http.StatusOK, ret)`**

- JSON 데이터를 반환할 때 사용.
- `json.Marshal()`을 통해 JSON 변환 후 프론트엔드에서 `response.json()`으로 처리.