# STRONG-API



# 개요

### **🛠️ 표준 API (main\_api)란?**

**표준 API(main\_api)는 여러 회사에서 공통적으로 사용하는 핵심 API입니다.   
예를 들어, 주문 관리, 재고 관리, 결제 처리 등의 기능을 표준 API가 제공할 수 있습니다.  
하지만 모든 회사가 동일한 방식으로 운영되지는 않기 때문에, 개별적인 기능 확장이 필요할 수 있습니다.**

[![스크린샷 2025-03-05 오후 6.36.32.png](https://manual.dabory.com/uploads/images/gallery/2025-03/scaled-1680-/cZ22025-03-05-6-36-32.png)](https://manual.dabory.com/uploads/images/gallery/2025-03/cZ22025-03-05-6-36-32.png)

### **🛠️ Strong API란?**

✅ Strong API는 클라이언트 요청을 받아 컨트롤러에서 처리 후 응답을 반환하는 기본적인 API입니다.   
(예: 클라이언트가 주문 정보를 요청하면, 컨트롤러가 데이터를 가공하여 응답을 반환함)  
✅ 표준 API(main\_api)를 변경하지 않고도 회사의 요구에 맞춰 새로운 기능을 쉽게 추가할 수 있도록 설계되었습니다  
✅ 표준을 유지하면서도 맞춤형 기능을 확장 가능  
🚀 유지보수가 쉬운 구조 &amp; 빠른 커스터마이징 가능!

##### **💡 왜 Strong API를 사용할까?**

📌 표준 백엔드를 직접 수정하면 표준을 사용하는 모든 사용자에게 영향을 미치므로 각 회사마다 원하는 기능을 추가하기 어렵습니다  
📌 하지만 Strong API를 사용하면 표준을 유지하면서도 원하는 기능을 쉽게 추가 가능!

### ex) 안경사에 맞춘 검안/판매 기능 Strong 커스터마이징 

[![스크린샷 2025-03-05 오후 6.49.03.png](https://manual.dabory.com/uploads/images/gallery/2025-03/scaled-1680-/2025-03-05-6-49-03.png)](https://manual.dabory.com/uploads/images/gallery/2025-03/2025-03-05-6-49-03.png)

\------------------------------------------------------------------------------------------------------------------

📂 다음 내용: \[🔍 [STRONG-API의 구조](https://manual.dabory.com/books/api-documents/page/strong-api-uOe "STRONG-API의 구조")\]

<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--2"><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>

# STRONG-API의 구조

**Dabory의 Strong-API 구조 (strong-go)**

```clojure
│── dabory/                   # Dabory 관련 코드
│   ├── themes/opticalpos/    # OpticalPOS 테마 관련 코드
│   │   ├── erp/              # ERP 관련 코드
│   │   ├── pro/              # Pro 관련 코드
│   │   ├── qry/              # Query를 분리하여 코드
│   │   ├── strong/           # Strong API Directory
│   │   │   ├── backend/strong-go/  # Strong API 백엔드 코드
│   │   │   │   ├── conf/     # 설정 파일
│   │   │   │   ├── controllers/  # 컨트롤러 로직
│   │   │   │   ├── handlers/ # 컨트롤러와 모델 역할을 둘 다 하는 로직
│   │   │   │   ├── locals/   # 유틸리티 기능을 제공하는 패키지
│   │   │   │   ├── models/   # 데이터 처리 로직 (Table 구조체 정의)
│   │   │   │   ├── routers/  # routers 패키지는 클라이언트 요청을 받아 해당 요청을 적절한 컨트롤러로 전달하는 역할
│   │   │   │   ├── tmp/      # 임시 파일
│   │   │   │   ├── vendor/   # 외부 라이브러리 (Go Modules)
│   │   │   │   ├── .gitignore  # Git에서 제외할 파일 목록
│   │   │   │   ├── docker-compose.yml  # Docker 설정 파일
│   │   │   │   ├── go.mod     # Go 모듈 관리 파일
│   │   │   │   ├── go.sum     # Go 의존성 관리 파일
│   │   │   │   ├── main.go    # 프로그램 진입점 (Entry Point)
│   │   │   │   ├── Readme.md  # 프로젝트 설명 파일
│   │   │   │   ├── strong-go  # 빌드된 실행 파일
```

<div class="flex-1 grow overflow-hidden @container/thread" id="bkmrk-%F0%9F%93%8C-%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC-%EC%83%81%EC%84%B8-%EC%84%A4%EB%AA%85-%E2%9C%85-dabor"><div class="relative h-full"><div class="flex h-full flex-col overflow-y-auto [scrollbar-gutter:stable]"><div class="flex flex-col text-sm md:pb-9"><article class="w-full text-token-text-primary focus-visible:outline-2 focus-visible:outline-offset-[-4px]" data-scroll-anchor="true" data-testid="conversation-turn-101" dir="auto">### **📌 디렉토리 상세 설명**

✅ **`dabory/`**

<div class="m-auto text-base py-[18px] px-6"><div class="mx-auto flex flex-1 text-base gap-4 md:gap-5 lg:gap-6 md:max-w-3xl"><div class="group/conversation-turn relative flex w-full min-w-0 flex-col agent-turn @xs/thread:px-0 @sm/thread:px-1.5 @md/thread:px-4"><div class="flex-col gap-1 md:gap-3"><div class="flex max-w-full flex-col flex-grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 whitespace-normal break-words text-start [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="036b92bf-15ba-4314-9780-17b77105c505" data-message-model-slug="gpt-4o" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose w-full break-words dark:prose-invert dark">- Dabory 프로젝트 관련 전체 코드가 포함된 최상위 디렉토리

</div></div></div></div></div></div></div></div>✅ **`themes/opticalpos/`**

<div class="m-auto text-base py-[18px] px-6"><div class="mx-auto flex flex-1 text-base gap-4 md:gap-5 lg:gap-6 md:max-w-3xl"><div class="group/conversation-turn relative flex w-full min-w-0 flex-col agent-turn @xs/thread:px-0 @sm/thread:px-1.5 @md/thread:px-4"><div class="flex-col gap-1 md:gap-3"><div class="flex max-w-full flex-col flex-grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 whitespace-normal break-words text-start [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="036b92bf-15ba-4314-9780-17b77105c505" data-message-model-slug="gpt-4o" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose w-full break-words dark:prose-invert dark">- OpticalPOS 테마 관련 코드가 들어 있는 디렉토리

</div></div></div></div></div></div></div></div>✅ **`qry/`**

<div class="m-auto text-base py-[18px] px-6"><div class="mx-auto flex flex-1 text-base gap-4 md:gap-5 lg:gap-6 md:max-w-3xl"><div class="group/conversation-turn relative flex w-full min-w-0 flex-col agent-turn @xs/thread:px-0 @sm/thread:px-1.5 @md/thread:px-4"><div class="flex-col gap-1 md:gap-3"><div class="flex max-w-full flex-col flex-grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 whitespace-normal break-words text-start [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="036b92bf-15ba-4314-9780-17b77105c505" data-message-model-slug="gpt-4o" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose w-full break-words dark:prose-invert dark">- Query가 포함된 디렉토리 (Query를 따로 분리함으로써 유연성 증가)

</div></div></div></div></div></div></div></div><div class="m-auto text-base py-[18px] px-6"><div class="mx-auto flex flex-1 text-base gap-4 md:gap-5 lg:gap-6 md:max-w-3xl"><div class="group/conversation-turn relative flex w-full min-w-0 flex-col agent-turn @xs/thread:px-0 @sm/thread:px-1.5 @md/thread:px-4"><div class="flex-col gap-1 md:gap-3"><div class="flex max-w-full flex-col flex-grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 whitespace-normal break-words text-start [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="036b92bf-15ba-4314-9780-17b77105c505" data-message-model-slug="gpt-4o" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]">  
</div></div></div></div></div></div></div>✅ **`strong/backend/strong-go/`**

<div class="m-auto text-base py-[18px] px-6"><div class="mx-auto flex flex-1 text-base gap-4 md:gap-5 lg:gap-6 md:max-w-3xl"><div class="group/conversation-turn relative flex w-full min-w-0 flex-col agent-turn @xs/thread:px-0 @sm/thread:px-1.5 @md/thread:px-4"><div class="flex-col gap-1 md:gap-3"><div class="flex max-w-full flex-col flex-grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 whitespace-normal break-words text-start [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="036b92bf-15ba-4314-9780-17b77105c505" data-message-model-slug="gpt-4o" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose w-full break-words dark:prose-invert dark">- **Strong API의 백엔드 코드가 포함된 디렉토리.**

</div></div></div></div></div></div></div></div>✅ **`conf/`**

<div class="m-auto text-base py-[18px] px-6"><div class="mx-auto flex flex-1 text-base gap-4 md:gap-5 lg:gap-6 md:max-w-3xl"><div class="group/conversation-turn relative flex w-full min-w-0 flex-col agent-turn @xs/thread:px-0 @sm/thread:px-1.5 @md/thread:px-4"><div class="flex-col gap-1 md:gap-3"><div class="flex max-w-full flex-col flex-grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 whitespace-normal break-words text-start [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="036b92bf-15ba-4314-9780-17b77105c505" data-message-model-slug="gpt-4o" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose w-full break-words dark:prose-invert dark">- **설정(Configuration) 관련 파일이 포함된 디렉토리**
- DB 연결 설정, 환경 변수, 서비스 설정 파일 등이 위치함

</div></div></div></div></div></div></div></div>✅ **`controllers/`**

<div class="m-auto text-base py-[18px] px-6"><div class="mx-auto flex flex-1 text-base gap-4 md:gap-5 lg:gap-6 md:max-w-3xl"><div class="group/conversation-turn relative flex w-full min-w-0 flex-col agent-turn @xs/thread:px-0 @sm/thread:px-1.5 @md/thread:px-4"><div class="flex-col gap-1 md:gap-3"><div class="flex max-w-full flex-col flex-grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 whitespace-normal break-words text-start [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="036b92bf-15ba-4314-9780-17b77105c505" data-message-model-slug="gpt-4o" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose w-full break-words dark:prose-invert dark">- **클라이언트 요청을 처리하는 컨트롤러 로직이 포함된 디렉토리**
- 요청을 받아 적절한 로직을 실행한 후 응답을 반환하는 역할을 수행함

</div></div></div></div></div></div></div></div>✅ **`handlers/`**

<div class="m-auto text-base py-[18px] px-6"><div class="mx-auto flex flex-1 text-base gap-4 md:gap-5 lg:gap-6 md:max-w-3xl"><div class="group/conversation-turn relative flex w-full min-w-0 flex-col agent-turn @xs/thread:px-0 @sm/thread:px-1.5 @md/thread:px-4"><div class="flex-col gap-1 md:gap-3"><div class="flex max-w-full flex-col flex-grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 whitespace-normal break-words text-start [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="036b92bf-15ba-4314-9780-17b77105c505" data-message-model-slug="gpt-4o" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose w-full break-words dark:prose-invert dark">- **컨트롤러와 모델 역할을 둘 다 하는 로직이 포함된 디렉토리**
- 특정 API 엔드포인트에서 직접 데이터 처리 및 응답을 수행하는 기능을 가짐

</div></div></div></div></div></div></div></div>✅ **`locals/`**

<div class="m-auto text-base py-[18px] px-6"><div class="mx-auto flex flex-1 text-base gap-4 md:gap-5 lg:gap-6 md:max-w-3xl"><div class="group/conversation-turn relative flex w-full min-w-0 flex-col agent-turn @xs/thread:px-0 @sm/thread:px-1.5 @md/thread:px-4"><div class="flex-col gap-1 md:gap-3"><div class="flex max-w-full flex-col flex-grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 whitespace-normal break-words text-start [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="036b92bf-15ba-4314-9780-17b77105c505" data-message-model-slug="gpt-4o" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose w-full break-words dark:prose-invert dark">- **유틸리티 기능을 제공하는 패키지**
- 해싱, 암호화, 설정값 로드 등의 공통 기능을 포함함

</div></div></div></div></div></div></div></div>✅ **`models/`**

<div class="m-auto text-base py-[18px] px-6"><div class="mx-auto flex flex-1 text-base gap-4 md:gap-5 lg:gap-6 md:max-w-3xl"><div class="group/conversation-turn relative flex w-full min-w-0 flex-col agent-turn @xs/thread:px-0 @sm/thread:px-1.5 @md/thread:px-4"><div class="flex-col gap-1 md:gap-3"><div class="flex max-w-full flex-col flex-grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 whitespace-normal break-words text-start [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="036b92bf-15ba-4314-9780-17b77105c505" data-message-model-slug="gpt-4o" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose w-full break-words dark:prose-invert dark">- **데이터베이스 테이블과 관련된 구조체 정의 및 데이터 처리 로직이 포함된 디렉토리**
- ORM(Object Relational Mapping)을 활용하여 DB와 상호작용함

</div></div></div></div></div></div></div></div>✅ **`routers/`**

<div class="m-auto text-base py-[18px] px-6"><div class="mx-auto flex flex-1 text-base gap-4 md:gap-5 lg:gap-6 md:max-w-3xl"><div class="group/conversation-turn relative flex w-full min-w-0 flex-col agent-turn @xs/thread:px-0 @sm/thread:px-1.5 @md/thread:px-4"><div class="flex-col gap-1 md:gap-3"><div class="flex max-w-full flex-col flex-grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 whitespace-normal break-words text-start [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="036b92bf-15ba-4314-9780-17b77105c505" data-message-model-slug="gpt-4o" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose w-full break-words dark:prose-invert dark">- **클라이언트 요청을 적절한 컨트롤러로 전달하는 역할을 수행하는 디렉토리**
- API 엔드포인트 정의 및 요청을 라우팅함

</div></div></div></div></div></div></div></div>✅ **`tmp/`**

<div class="m-auto text-base py-[18px] px-6"><div class="mx-auto flex flex-1 text-base gap-4 md:gap-5 lg:gap-6 md:max-w-3xl"><div class="group/conversation-turn relative flex w-full min-w-0 flex-col agent-turn @xs/thread:px-0 @sm/thread:px-1.5 @md/thread:px-4"><div class="flex-col gap-1 md:gap-3"><div class="flex max-w-full flex-col flex-grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 whitespace-normal break-words text-start [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="036b92bf-15ba-4314-9780-17b77105c505" data-message-model-slug="gpt-4o" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose w-full break-words dark:prose-invert dark">- **임시 파일을 저장하는 디렉토리**
- 캐시, 로그, 임시 데이터 등을 저장할 때 사용됨

</div></div></div></div></div></div></div></div>✅ **`vendor/`**

<div class="m-auto text-base py-[18px] px-6"><div class="mx-auto flex flex-1 text-base gap-4 md:gap-5 lg:gap-6 md:max-w-3xl"><div class="group/conversation-turn relative flex w-full min-w-0 flex-col agent-turn @xs/thread:px-0 @sm/thread:px-1.5 @md/thread:px-4"><div class="flex-col gap-1 md:gap-3"><div class="flex max-w-full flex-col flex-grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 whitespace-normal break-words text-start [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="036b92bf-15ba-4314-9780-17b77105c505" data-message-model-slug="gpt-4o" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose w-full break-words dark:prose-invert dark">- **Go Modules에서 관리하는 외부 라이브러리 디렉토리**
- 프로젝트에서 사용하는 서드파티 라이브러리들이 포함됨

</div></div></div></div></div></div></div></div>✅ **`.gitignore`**

<div class="m-auto text-base py-[18px] px-6"><div class="mx-auto flex flex-1 text-base gap-4 md:gap-5 lg:gap-6 md:max-w-3xl"><div class="group/conversation-turn relative flex w-full min-w-0 flex-col agent-turn @xs/thread:px-0 @sm/thread:px-1.5 @md/thread:px-4"><div class="flex-col gap-1 md:gap-3"><div class="flex max-w-full flex-col flex-grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 whitespace-normal break-words text-start [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="036b92bf-15ba-4314-9780-17b77105c505" data-message-model-slug="gpt-4o" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose w-full break-words dark:prose-invert dark">- **Git에서 제외할 파일 목록을 정의하는 파일**
- 빌드된 바이너리 파일, 로그, 환경 설정 파일 등 불필요한 파일을 제외하는 역할

</div></div></div></div></div></div></div></div>✅ **`docker-compose.yml`**

<div class="m-auto text-base py-[18px] px-6"><div class="mx-auto flex flex-1 text-base gap-4 md:gap-5 lg:gap-6 md:max-w-3xl"><div class="group/conversation-turn relative flex w-full min-w-0 flex-col agent-turn @xs/thread:px-0 @sm/thread:px-1.5 @md/thread:px-4"><div class="flex-col gap-1 md:gap-3"><div class="flex max-w-full flex-col flex-grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 whitespace-normal break-words text-start [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="036b92bf-15ba-4314-9780-17b77105c505" data-message-model-slug="gpt-4o" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose w-full break-words dark:prose-invert dark">- **Docker 설정 파일**
- Docker 컨테이너를 실행할 때 사용되는 설정이 포함됨

</div></div></div></div></div></div></div></div>✅ **`go.mod`**

<div class="m-auto text-base py-[18px] px-6"><div class="mx-auto flex flex-1 text-base gap-4 md:gap-5 lg:gap-6 md:max-w-3xl"><div class="group/conversation-turn relative flex w-full min-w-0 flex-col agent-turn @xs/thread:px-0 @sm/thread:px-1.5 @md/thread:px-4"><div class="flex-col gap-1 md:gap-3"><div class="flex max-w-full flex-col flex-grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 whitespace-normal break-words text-start [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="036b92bf-15ba-4314-9780-17b77105c505" data-message-model-slug="gpt-4o" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose w-full break-words dark:prose-invert dark">- **Go 모듈 관리 파일**
- 프로젝트에서 사용하는 Go 패키지와 버전을 정의함

</div></div></div></div></div></div></div></div>✅ **`go.sum`**

<div class="m-auto text-base py-[18px] px-6"><div class="mx-auto flex flex-1 text-base gap-4 md:gap-5 lg:gap-6 md:max-w-3xl"><div class="group/conversation-turn relative flex w-full min-w-0 flex-col agent-turn @xs/thread:px-0 @sm/thread:px-1.5 @md/thread:px-4"><div class="flex-col gap-1 md:gap-3"><div class="flex max-w-full flex-col flex-grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 whitespace-normal break-words text-start [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="036b92bf-15ba-4314-9780-17b77105c505" data-message-model-slug="gpt-4o" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose w-full break-words dark:prose-invert dark">- **Go 의존성 관리 파일**
- `go.mod`에 명시된 패키지의 버전 및 체크섬을 저장하는 파일

</div></div></div></div></div></div></div></div>✅ **`main.go`**

<div class="m-auto text-base py-[18px] px-6"><div class="mx-auto flex flex-1 text-base gap-4 md:gap-5 lg:gap-6 md:max-w-3xl"><div class="group/conversation-turn relative flex w-full min-w-0 flex-col agent-turn @xs/thread:px-0 @sm/thread:px-1.5 @md/thread:px-4"><div class="flex-col gap-1 md:gap-3"><div class="flex max-w-full flex-col flex-grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 whitespace-normal break-words text-start [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="036b92bf-15ba-4314-9780-17b77105c505" data-message-model-slug="gpt-4o" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose w-full break-words dark:prose-invert dark">- **프로그램의 진입점(Entry Point)**
- `main()` 함수가 포함되어 있으며, 프로그램 실행 시 최초로 실행됨

</div></div></div></div></div></div></div></div>✅ **`Readme.md`**

<div class="m-auto text-base py-[18px] px-6"><div class="mx-auto flex flex-1 text-base gap-4 md:gap-5 lg:gap-6 md:max-w-3xl"><div class="group/conversation-turn relative flex w-full min-w-0 flex-col agent-turn @xs/thread:px-0 @sm/thread:px-1.5 @md/thread:px-4"><div class="flex-col gap-1 md:gap-3"><div class="flex max-w-full flex-col flex-grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 whitespace-normal break-words text-start [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="036b92bf-15ba-4314-9780-17b77105c505" data-message-model-slug="gpt-4o" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose w-full break-words dark:prose-invert dark">- **프로젝트 설명 파일**
- 프로젝트의 개요, 사용 방법, 설정 방법 등을 문서화한 파일

</div></div></div></div></div></div></div></div>✅ **`strong-go`**

<div class="m-auto text-base py-[18px] px-6"><div class="mx-auto flex flex-1 text-base gap-4 md:gap-5 lg:gap-6 md:max-w-3xl"><div class="group/conversation-turn relative flex w-full min-w-0 flex-col agent-turn @xs/thread:px-0 @sm/thread:px-1.5 @md/thread:px-4"><div class="flex-col gap-1 md:gap-3"><div class="flex max-w-full flex-col flex-grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 whitespace-normal break-words text-start [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="036b92bf-15ba-4314-9780-17b77105c505" data-message-model-slug="gpt-4o" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div class="markdown prose w-full break-words dark:prose-invert dark">- **Go 언어로 빌드된 실행 파일**
- `go build` 명령을 실행하면 생성됨

---

</div></div></div></div></div></div></div></div></article></div></div></div></div><div class="isolate w-full has-[[data-has-thread-error]]:pt-2 has-[[data-has-thread-error]]:[box-shadow:var(--sharp-edge-bottom-shadow)] dark:border-white/20 md:border-transparent md:pt-0 md:dark:border-transparent" id="bkmrk-o"><div><div class="m-auto text-base px-3 md:px-4 w-full md:px-5 lg:px-4 xl:px-5"><div class="mx-auto flex flex-1 text-base gap-4 md:gap-5 lg:gap-6 md:max-w-3xl"><div class="flex justify-center empty:hidden">  
</div><form aria-controls="radix-:Rf69t9jaklj5:" aria-expanded="false" aria-haspopup="dialog" class="w-full" data-state="closed"><div class="relative z-[1] flex h-full max-w-full flex-1 flex-col"><div class="group relative z-[1] flex w-full items-center"><div class="w-full"><div class="flex w-full cursor-text flex-col rounded-3xl border border-token-border-light px-3 py-1 duration-150 ease-in-out contain-inline-size motion-safe:transition-[color,background-color,border-color,text-decoration-color,fill,stroke,box-shadow] dark:border-none dark:shadow-none shadow-[0_9px_9px_0px_rgba(0,0,0,0.01),_0_2px_5px_0px_rgba(0,0,0,0.06)] has-[:focus]:shadow-[0_2px_12px_0px_rgba(0,0,0,0.04),_0_9px_9px_0px_rgba(0,0,0,0.01),_0_2px_5px_0px_rgba(0,0,0,0.06)] bg-token-main-surface-primary dark:bg-[#303030]" id="bkmrk-o-1"><div class="flex flex-col justify-start"><div class="flex min-h-[44px] items-start pl-1"><div class="min-w-0 max-w-full flex-1"><div class="_prosemirror-parent_1r7mb_1 text-token-text-primary max-h-[25dvh] max-h-52 overflow-auto default-browser"><div class="ProseMirror" contenteditable="true" data-virtualkeyboard="true" id="bkmrk-" translate="no"></div></div></div><div class="w-[32px] pt-1"><span aria-hidden="true" class="pointer-events-none invisible fixed left-0 top-0 block">O</span></div></div></div><div class="mb-2 mt-1 flex items-center justify-between sm:mt-5"><div class="flex gap-x-1.5 text-token-text-primary"><div><div class="relative"><div class="relative"><div class="flex flex-col"><button aria-expanded="false" aria-haspopup="menu" class="text-token-text-primary border border-transparent inline-flex items-center justify-center gap-1 rounded-lg text-sm dark:transparent dark:bg-transparent leading-none outline-none cursor-pointer hover:bg-token-main-surface-secondary dark:hover:bg-token-main-surface-secondary focus-visible:bg-token-main-surface-secondary radix-state-active:text-token-text-secondary radix-disabled:cursor-auto radix-disabled:bg-transparent radix-disabled:text-token-text-tertiary dark:radix-disabled:bg-transparent m-0 h-0 w-0 border-none bg-transparent p-0" data-state="closed" id="bkmrk--1" type="button"></button><button aria-disabled="false" aria-label="파일 업로드 및 기타" class="flex items-center justify-center h-9 rounded-full border border-token-border-light text-token-text-secondary w-9 hover:bg-token-main-surface-secondary dark:hover:bg-gray-700 "}"><svg aria-label="" class="h-[18px] w-[18px]" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"></svg></button><div aria-controls="radix-:rg:" aria-expanded="false" aria-haspopup="dialog" class="w-fit" data-state="closed" type="button"><div>  
</div></div></div></div></div></div><div><div><div class="whitespace-nowrap pl-1 pr-1 [display:--force-hide-label]">  
</div></div></div></div></div></div></div></div></div></form></div></div></div></div>

# STRONG-API 구현방법