opencode / packages /web /src /content /docs /ko /index.mdx
SaylorTwift's picture
SaylorTwift HF Staff
Add files using upload-large-folder tool
0dbc9de verified
Raw History Blame Contribute Delete
9.03 kB
---
title: ์†Œ๊ฐœ
description: OpenCode๋ฅผ ์‹œ์ž‘ํ•ด ๋ณด์„ธ์š”.
---
import { Tabs, TabItem } from "@astrojs/starlight/components"
import config from "../../../../config.mjs"
export const console = config.console
[**OpenCode**](/)๋Š” ์˜คํ”ˆ ์†Œ์Šค AI coding agent์ž…๋‹ˆ๋‹ค. ํ„ฐ๋ฏธ๋„ ๊ธฐ๋ฐ˜ ์ธํ„ฐํŽ˜์ด์Šค, ๋ฐ์Šคํฌํ†ฑ ์•ฑ, IDE ํ™•์žฅ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
![opencode TUI with the opencode theme](../../../assets/lander/screenshot.png)
๋ฐ”๋กœ ์‹œ์ž‘ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
---
#### ์‚ฌ์ „ ์ค€๋น„
ํ„ฐ๋ฏธ๋„์—์„œ OpenCode๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
1. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ตœ์‹  ํ„ฐ๋ฏธ๋„ ์—๋ฎฌ๋ ˆ์ดํ„ฐ
- [WezTerm](https://wezterm.org), ํฌ๋กœ์Šค ํ”Œ๋žซํผ
- [Alacritty](https://alacritty.org), ํฌ๋กœ์Šค ํ”Œ๋žซํผ
- [Ghostty](https://ghostty.org), Linux ๋ฐ macOS
- [Kitty](https://sw.kovidgoyal.net/kitty/), Linux ๋ฐ macOS
2. ์‚ฌ์šฉํ•  LLM ์ œ๊ณต์ž์˜ API ํ‚ค
---
## ์„ค์น˜
OpenCode๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
```bash
curl -fsSL https://opencode.ai/install | bash
```
๋‹ค์Œ ๋ช…๋ น์œผ๋กœ๋„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- **Node.js ์‚ฌ์šฉ**
<Tabs>
<TabItem label="npm">
```bash
npm install -g opencode-ai
```
</TabItem>
<TabItem label="Bun">
```bash
bun install -g opencode-ai
```
</TabItem>
<TabItem label="pnpm">
```bash
pnpm install -g opencode-ai
```
</TabItem>
<TabItem label="Yarn">
```bash
yarn global add opencode-ai
```
</TabItem>
</Tabs>
- **macOS/Linux์—์„œ Homebrew ์‚ฌ์šฉ**
```bash
brew install anomalyco/tap/opencode
```
> ์ตœ์‹  ๋ฆด๋ฆฌ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด OpenCode tap ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ณต์‹ `brew install opencode` formula๋Š” Homebrew ํŒ€์ด ๊ด€๋ฆฌํ•˜๋ฉฐ ์—…๋ฐ์ดํŠธ ์ฃผ๊ธฐ๊ฐ€ ๋” ๊น๋‹ˆ๋‹ค.
- **Arch Linux์— ์„ค์น˜**
```bash
sudo pacman -S opencode # Arch Linux (Stable)
paru -S opencode-bin # Arch Linux (Latest from AUR)
```
#### Windows
:::tip[๊ถŒ์žฅ: WSL ์‚ฌ์šฉ]
Windows์—์„œ๋Š” [Windows Subsystem for Linux (WSL)](/docs/windows-wsl) ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์„ฑ๋Šฅ์ด ๋” ์ข‹๊ณ  OpenCode ๊ธฐ๋Šฅ๊ณผ์˜ ์™„์ „ํ•œ ํ˜ธํ™˜์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
:::
- **Chocolatey ์‚ฌ์šฉ**
```bash
choco install opencode
```
- **Scoop ์‚ฌ์šฉ**
```bash
scoop install opencode
```
- **NPM ์‚ฌ์šฉ**
```bash
npm install -g opencode-ai
```
- **Mise ์‚ฌ์šฉ**
```bash
mise use -g github:anomalyco/opencode
```
- **Docker ์‚ฌ์šฉ**
```bash
docker run -it --rm ghcr.io/anomalyco/opencode
```
ํ˜„์žฌ Windows์—์„œ Bun์„ ์‚ฌ์šฉํ•œ OpenCode ์„ค์น˜ ์ง€์›์€ ์ค€๋น„ ์ค‘์ž…๋‹ˆ๋‹ค.
[Releases](https://github.com/anomalyco/opencode/releases)์—์„œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ง์ ‘ ๋ฐ›์•„ ์„ค์น˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
---
## ๊ตฌ์„ฑ
OpenCode๋Š” API ํ‚ค๋ฅผ ์„ค์ •ํ•˜๋ฉด ์›ํ•˜๋Š” LLM ์ œ๊ณต์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
LLM ์ œ๊ณต์ž๋ฅผ ์ฒ˜์Œ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด [OpenCode Zen](/docs/zen) ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
OpenCode ํŒ€์ด ํ…Œ์ŠคํŠธํ•˜๊ณ  ๊ฒ€์ฆํ•œ ๋ชจ๋ธ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.
1. TUI์—์„œ `/connect` ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ณ  `opencode`๋ฅผ ์„ ํƒํ•œ ๋‹ค์Œ [opencode.ai/auth](https://opencode.ai/auth)๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
```txt
/connect
```
2. ๋กœ๊ทธ์ธํ•˜๊ณ  ๊ฒฐ์ œ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•œ ๋’ค API ํ‚ค๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.
3. API ํ‚ค๋ฅผ ๋ถ™์—ฌ ๋„ฃ์Šต๋‹ˆ๋‹ค.
```txt
โ”Œ API key
โ”‚
โ”‚
โ”” enter
```
๋˜๋Š” ๋‹ค๋ฅธ ์ œ๊ณต์ž ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. [๋” ์•Œ์•„๋ณด๊ธฐ](/docs/providers#directory).
---
## ์ดˆ๊ธฐํ™”
์ด์ œ ์ œ๊ณต์ž ๊ตฌ์„ฑ์„ ๋งˆ์ณค์œผ๋‹ˆ ์ž‘์—…ํ•˜๋ ค๋Š” ํ”„๋กœ์ ํŠธ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
```bash
cd /path/to/project
```
๊ทธ๋ฆฌ๊ณ  OpenCode๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
```bash
opencode
```
๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ด ํ”„๋กœ์ ํŠธ์—์„œ OpenCode๋ฅผ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
```bash frame="none"
/init
```
์ด ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด OpenCode๊ฐ€ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— `AGENTS.md` ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
:::tip
ํ”„๋กœ์ ํŠธ์˜ `AGENTS.md` ํŒŒ์ผ์€ Git์— ์ปค๋ฐ‹ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
:::
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด OpenCode๊ฐ€ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ์™€ ์‚ฌ์šฉ ์ค‘์ธ ์ฝ”๋”ฉ ํŒจํ„ด์„ ๋” ์ž˜ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
---
## ์‚ฌ์šฉ๋ฒ•
์ด์ œ OpenCode๋กœ ํ”„๋กœ์ ํŠธ ์ž‘์—…์„ ์‹œ์ž‘ํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฌด์—‡์ด๋“  ๋ฌผ์–ด๋ณด์„ธ์š”.
AI coding agent๋ฅผ ์ฒ˜์Œ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์‹œ๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.
---
### ์งˆ๋ฌธํ•˜๊ธฐ
OpenCode์— ์ฝ”๋“œ๋ฒ ์ด์Šค ์„ค๋ช…์„ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
:::tip
ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์€ `@` ํ‚ค๋กœ ํผ์ง€ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
:::
```txt frame="none" "@packages/functions/src/api/index.ts"
How is authentication handled in @packages/functions/src/api/index.ts
```
์ด ๋ฐฉ๋ฒ•์€ ์ง์ ‘ ์ž‘์—…ํ•˜์ง€ ์•Š์€ ์ฝ”๋“œ ์˜์—ญ์„ ์ดํ•ดํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
---
### ๊ธฐ๋Šฅ ์ถ”๊ฐ€
OpenCode์— ํ”„๋กœ์ ํŠธ์˜ ์ƒˆ ๊ธฐ๋Šฅ ์ถ”๊ฐ€๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ๋จผ์ € ๊ณ„ํš์„ ๋งŒ๋“ค๋„๋ก ์š”์ฒญํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
1. **๊ณ„ํš ๋งŒ๋“ค๊ธฐ**
OpenCode์—๋Š” ๋ณ€๊ฒฝ ์ž‘์—… ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ๋ฐฉ๋ฒ•๋งŒ ์ œ์•ˆํ•˜๋Š” *Plan mode*๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
**Tab** ํ‚ค๋ฅผ ๋ˆŒ๋Ÿฌ ์ „ํ™˜ํ•˜์„ธ์š”. ํ™”๋ฉด ์˜ค๋ฅธ์ชฝ ์•„๋ž˜์—์„œ ๋ชจ๋“œ ํ‘œ์‹œ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```bash frame="none" title="Switch to Plan mode"
<TAB>
```
์ด์ œ ์ˆ˜ํ–‰ํ•˜๊ธธ ์›ํ•˜๋Š” ์ž‘์—…์„ ์„ค๋ช…ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
```txt frame="none"
When a user deletes a note, we'd like to flag it as deleted in the database.
Then create a screen that shows all the recently deleted notes.
From this screen, the user can undelete a note or permanently delete it.
```
OpenCode๊ฐ€ ์›ํ•˜๋Š” ์ž‘์—…์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์ถฉ๋ถ„ํ•œ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŒ€์˜ ์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋งํ•˜๋“ฏ์ด ์„ค๋ช…ํ•˜๋ฉด ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
:::tip
OpenCode๊ฐ€ ์›ํ•˜๋Š” ์ž‘์—…์„ ์ดํ•ดํ•˜๋„๋ก ์ถฉ๋ถ„ํ•œ ๋งฅ๋ฝ๊ณผ ์˜ˆ์‹œ๋ฅผ ์ œ๊ณตํ•˜์„ธ์š”.
:::
2. **๊ณ„ํš ๋‹ค๋“ฌ๊ธฐ**
๊ณ„ํš์ด ๋‚˜์˜ค๋ฉด ํ”ผ๋“œ๋ฐฑ์„ ์ฃผ๊ฑฐ๋‚˜ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ๋” ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```txt frame="none"
We'd like to design this new screen using a design I've used before.
[Image #1] Take a look at this image and use it as a reference.
```
:::tip
์ด๋ฏธ์ง€๋ฅผ ํ„ฐ๋ฏธ๋„์— ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญํ•ด prompt์— ์ถ”๊ฐ€ํ•˜์„ธ์š”.
:::
OpenCode๋Š” ์ œ๊ณตํ•œ ์ด๋ฏธ์ง€๋ฅผ ์Šค์บ”ํ•ด prompt์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€๋ฅผ ํ„ฐ๋ฏธ๋„์— ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
3. **๊ธฐ๋Šฅ ๊ตฌํ˜„**
๊ณ„ํš์ด ์ถฉ๋ถ„ํžˆ ๋งˆ์Œ์— ๋“ค๋ฉด **Tab** ํ‚ค๋ฅผ ๋‹ค์‹œ ๋ˆŒ๋Ÿฌ *Build mode*๋กœ ์ „ํ™˜ํ•˜์„ธ์š”.
```bash frame="none"
<TAB>
```
๊ทธ๋ฆฌ๊ณ  ๋ณ€๊ฒฝ์„ ์ ์šฉํ•ด ๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•˜์„ธ์š”.
```bash frame="none"
Sounds good! Go ahead and make the changes.
```
---
### ๋ฐ”๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ
๋น„๊ต์  ๊ฐ„๋‹จํ•œ ๋ณ€๊ฒฝ์€ ๊ณ„ํš์„ ๋จผ์ € ๊ฒ€ํ† ํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ๊ตฌํ˜„ํ•˜๋„๋ก ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```txt frame="none" "@packages/functions/src/settings.ts" "@packages/functions/src/notes.ts"
We need to add authentication to the /settings route. Take a look at how this is
handled in the /notes route in @packages/functions/src/notes.ts and implement
the same logic in @packages/functions/src/settings.ts
```
OpenCode๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๋ณ€๊ฒฝ์„ ํ•˜๋„๋ก ์ถฉ๋ถ„ํ•œ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
---
### ๋ณ€๊ฒฝ ๋˜๋Œ๋ฆฌ๊ธฐ
์˜ˆ๋ฅผ ๋“ค์–ด OpenCode์— ๋ณ€๊ฒฝ์„ ์š”์ฒญํ–ˆ๋‹ค๊ณ  ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
```txt frame="none" "@packages/functions/src/api/index.ts"
Can you refactor the function in @packages/functions/src/api/index.ts?
```
๊ทธ๋Ÿฐ๋ฐ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ์•„๋‹ˆ์—ˆ๋‹ค๋ฉด `/undo` ๋ช…๋ น์œผ๋กœ ๋ณ€๊ฒฝ์„ **๋˜๋Œ๋ฆด ์ˆ˜** ์žˆ์Šต๋‹ˆ๋‹ค.
```bash frame="none"
/undo
```
OpenCode๊ฐ€ ๋ฐฉ๊ธˆ ์ ์šฉํ•œ ๋ณ€๊ฒฝ์„ ๋˜๋Œ๋ฆฌ๊ณ  ์›๋ž˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋‹ค์‹œ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
```txt frame="none" "@packages/functions/src/api/index.ts"
Can you refactor the function in @packages/functions/src/api/index.ts?
```
์—ฌ๊ธฐ์—์„œ prompt๋ฅผ ์ˆ˜์ •ํ•ด ๋‹ค์‹œ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
:::tip
`/undo`๋Š” ์—ฌ๋Ÿฌ ๋ฒˆ ์—ฐ์†์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
:::
๋˜๋Š” `/redo` ๋ช…๋ น์œผ๋กœ ๋ณ€๊ฒฝ์„ **๋‹ค์‹œ ์ ์šฉ**ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```bash frame="none"
/redo
```
---
## ๊ณต์œ 
OpenCode์™€์˜ ๋Œ€ํ™”๋Š” [ํŒ€๊ณผ ๊ณต์œ ](/docs/share)ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```bash frame="none"
/share
```
์ด ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ํ˜„์žฌ ๋Œ€ํ™” ๋งํฌ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํด๋ฆฝ๋ณด๋“œ์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.
:::note
๋Œ€ํ™”๋Š” ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๊ณต์œ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
:::
๋‹ค์Œ์€ OpenCode [๋Œ€ํ™” ์˜ˆ์‹œ](https://opencode.ai/s/4XP1fce5)์ž…๋‹ˆ๋‹ค.
---
## ์‚ฌ์šฉ์ž ์ง€์ •
์ด์ œ OpenCode ์‚ฌ์šฉ๋ฒ•์„ ์ตํ˜”์Šต๋‹ˆ๋‹ค.
์›ํ•˜๋Š” ๋ฐฉ์‹์— ๋งž์ถ”๋ ค๋ฉด [ํ…Œ๋งˆ ์„ ํƒ](/docs/themes), [ํ‚ค๋ฐ”์ธ๋“œ ์‚ฌ์šฉ์ž ์ง€์ •](/docs/keybinds), [์ฝ”๋“œ formatter ์„ค์ •](/docs/formatters), [custom command ๋งŒ๋“ค๊ธฐ](/docs/commands), [OpenCode config ์„ค์ •](/docs/config)์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.