์์
> ๐ **Iris v14๊ฐ ๊ณง ๋์ต๋๋ค.** ๋ค์ ๋ฉ์ด์ ๋ฒ์ ์ ์ด ํ๋ก์ ํธ ์ญ์ฌ์ ๊ฐ์ฅ ํฐ ๋ฆด๋ฆฌ์ค์
๋๋ค. Go ์ ๋ค๋ฆญ ์์์ ๋ค์ ๋ง๋ ํ๋ ์์ํฌ, ์ปดํ์ผ๋ฌ๊ฐ ๊ฒ์ฌํ๋ ์ ํ๋ฆฌ์ผ์ด์
๋น๋, ๊ฒ์ฆ๊น์ง ๋์ ํด์ฃผ๋ ์์ฒญ ํฌํผ, ํ๋์ ์ค์ ์๋ฌ ๋งต, ์๋ฅธ ๊ฐ์ ๊ธฐ๋ณธ ์ ๊ณต ๋ฏธ๋ค์จ์ด, ๊ทธ๋ฆฌ๊ณ ์ ์ฅ์ ์์ ํจ๊ป ๋ด๊ธด ์ฑ
์ด ํฌํจ๋ฉ๋๋ค. ์๋ [Iris v14์์ ๋ฌ๋ผ์ง๋ ๊ฒ](#-iris-v14์์-๋ฌ๋ผ์ง๋-๊ฒ)์ ๋ณด์ธ์.
>
> ์ฌ๊ธฐ์ ์ค๋ช
ํ๋ **v12**๋ ๊ณ์ ๋์ํ๊ณ ๊ณ์ ์์ ์ ๋ฐ์ต๋๋ค. v14๋ ์๋ก์ด import ๊ฒฝ๋ก๋ก ๋์ค๊ธฐ ๋๋ฌธ์, ์ถ์๋๋ ๋ ์ฌ๋ฌ๋ถ ์ชฝ์์ ๊นจ์ง๋ ๊ฒ์ ์์ต๋๋ค.
#
Iris Web Framework English
ุงูุนุฑุจูุฉ
[](https://github.com/kataras/iris/actions/workflows/ci.yml) [](https://github.com/kataras/iris/tree/main/_examples) [](https://gitter.im/iris_go/community) [](https://iris-go.com/donate)
โก Iris๋ ๋จ์ํ๊ณ ๋น ๋ฅด๋ฉฐ ๋ชจ๋ ๊ธฐ๋ฅ์ ๊ฐ์ถ ๋งค์ฐ ํจ์จ์ ์ธ Go ์น ํ๋ ์์ํฌ์
๋๋ค.
โจ ์ฌ๋ฌ๋ถ์ ๋ค์ ์น์ฌ์ดํธ๋ API๋ฅผ ์ํด ์๋ฆ๋ต๊ณ ์ฌ์ฉํ๊ธฐ ์ฌ์ด ๊ธฐ๋ฐ์ ์ ๊ณตํฉ๋๋ค.
๐ [์ฌ๋ฌ ์ฌ๋๋ค์ ์๊ฒฌ](https://www.iris-go.com/#review)์ ๋๋ฌ๋ณด๊ณ , ์ด ์คํ์์ค ํ๋ก์ ํธ์ **[์คํ](https://github.com/kataras/iris/stargazers)**๋ฅผ ๋จ๊ฒจ์ฃผ์ธ์
[](https://iris-go.com/testimonials/)
[](https://github.com/kataras/server-benchmarks)
```go
package main
import "github.com/kataras/iris/v12"
func main() {
app := iris.New()
app.Use(iris.Compression)
app.Get("/", func(ctx iris.Context) {
ctx.HTML("Hello %s!", "World")
})
app.Listen(":8080")
}
```
์ด๋ [Go ๊ฐ๋ฐ์](https://twitter.com/dkuye/status/1532087942696554497)๊ฐ ๋งํ๋ฏ์ด, **Iris๋ ๋ชจ๋ ๋ฉด์์ ๋น์ ์ ๋ฐ์ณ์ฃผ๊ณ ์ค๋ ์ธ์ ๊ตณ๊ฑดํ ์ ์์ต๋๋ค** โญ
Iris๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ์ผ๋ถ์
๋๋ค:
* HTTP/2 (Push, ์๋ฒ ๋๋ ๋ฐ์ดํฐ๊น์ง)
* ๋ฏธ๋ค์จ์ด (Accesslog, Basicauth, CORS, gRPC, Anti-Bot hCaptcha, JWT, MethodOverride, ModRevision, Monitor, PPROF, Ratelimit, Anti-Bot reCaptcha, Recovery, RequestID, Rewrite)
* API ๋ฒ์ ๋
* Model-View-Controller
* Websockets
* gRPC
* Auto-HTTPS
* ngrok ๊ธฐ๋ณธ ์ง์, ์ฑ์ ์ธํฐ๋ท์ ์ฌ๋ฆฌ๋ ๊ฐ์ฅ ๋น ๋ฅธ ๋ฐฉ๋ฒ
* :uuid, :string, :int ๊ฐ์ ํ์ค ํ์
์ ๋์ ๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ๋ฅผ ์ง์ํ๊ณ ์ง์ ๋ง๋ค ์๋ ์๋ ๊ณ ์ ํ ๋ผ์ฐํฐ
* ์์ถ
* ๋ทฐ ์์ง (HTML, Django, Handlebars, Pug/Jade ๋ฑ)
* ์ง์ ํ์ผ ์๋ฒ๋ฅผ ๋ง๋ค๊ณ WebDAV ์๋ฒ๋ฅผ ํธ์คํ
* ์บ์
* ์ง์ญํ (i18n, sitemap)
* ์ธ์
* ํ๋ถํ ์๋ต (HTML, Text, Markdown, XML, YAML, Binary, JSON, JSONP, Protocol Buffers, MessagePack, Content Negotiation, Streaming, Server-Sent Events ๋ฑ)
* ์๋ต ์์ถ (gzip, deflate, brotli, snappy, s2)
* ํ๋ถํ ์์ฒญ (Bind URL Query, Headers, Form, Text, XML, YAML, Binary, JSON, Validation, Protocol Buffers, MessagePack ๋ฑ)
* ์์กด์ฑ ์ฃผ์
(MVC, Handlers, API Routers)
* ํ
์คํ
์ค์ํธ
* ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ์ค์ํ ๊ฒ... ์ฒซ๋ ๋ถํฐ ์ง๊ธ๊น์ง ๋น ๋ฅธ ๋ต๋ณ๊ณผ ์ง์์ ๋ฐ์ ์ ์์ต๋๋ค
## ๐ Iris v14์์ ๋ฌ๋ผ์ง๋ ๊ฒ
Iris v14๋ ์ด ํ๋ก์ ํธ ์ญ์ฌ์ ๊ฐ์ฅ ํฐ ๋ฆด๋ฆฌ์ค์
๋๋ค. ํ๋ ์์ํฌ๋ฅผ Go ์ ๋ค๋ฆญ ์์ ๋ค์ ์ธ์ฐ๊ณ , ์ ํ๋ฆฌ์ผ์ด์
์ ์กฐ๋ฆฝํ๋ ๋ฐฉ์์ ๋ฐ๊ฟ๋๋ค. `main`์์์ ๋ฐฐ์ ์ด ์ค๊ณ , ํธ๋ค๋ฌ๊ฐ ์งง์์ง๋ฉฐ, ์์ ์๋ ๋ผ์ฐํธ๋ง๋ค ํฉ์ด์ ธ ์๋ ๊ฒฐ์ ๋ค์ด ํ๊ณณ์ผ๋ก ๋ชจ์
๋๋ค.
์ง๊ธ ๋น์ฅ ์ ๊ฒฝ ์ธ ๊ฒ์ ์์ต๋๋ค. v12๋ ๊ณ์ ๋์ํ๊ณ ๊ณ์ ์์ ์ ๋ฐ์ผ๋ฉฐ, v14๋ ์ด๋ฆ์ด ๋ฐ๋๊ฑฐ๋ ์ ๊ฑฐ๋ ๋ชจ๋ API๋ฅผ ๋ค๋ฃจ๋ ๋ง์ด๊ทธ๋ ์ด์
๊ฐ์ด๋์ ํจ๊ป ๋์ต๋๋ค.
### ์ปดํ์ผ๋ฌ๊ฐ ๊ฒ์ฌํ๋ ํ๋์ ์ฒด์ธ์ ๋ด๊ธด ์ ํ๋ฆฌ์ผ์ด์
์ ์ฒด
`iris.NewBuilder`๋ CORS, ์์ถ, ์ก์ธ์ค ๋ก๊น
, ํฌ์ค ์๋ํฌ์ธํธ, ์๋ฌ ๋งต, ์๋น์ค, API ๊ทธ๋ฃน์ ํ๋์ ํํ์์ผ๋ก ์ฐ๊ฒฐํฉ๋๋ค. ๋จ๊ณ ์์๋ฅผ ์ปดํ์ผ๋ฌ๊ฐ ๊ฐ์ ํ๋ฏ๋ก, ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ๋ฐ๋ฅด๊ฒ ๋น๋๋๊ฑฐ๋ ์์ ๋น๋๋์ง ์์ต๋๋ค.
```go
iris.NewBuilder().
Prefix("/api").
AllowOrigin("*").
Compression(true).
LogRequests(true).
Health(true, "production", "kataras").
Errors(errors.NewOptions().
MapErrors(errors.NotFound, catalog.ErrNotFound)).
Services(catalog.NewRepository, catalog.NewService).
API("/products", api.NewProductsAPI).
Build().
Listen(":8080")
```
### ํธ๋ค๋ฌ๊ฐ ๊ฐ์ ์ฝ๋๋ฅผ ๋ฐ๋ณตํ์ง ์์ต๋๋ค
๋์ฝ๋ฉ, ๊ฒ์ฆ, ์๋ฌ ๋ ๋๋ง์ด ํธ๋ค๋ฌ ๋ณธ๋ฌธ์์ ๋น ์ ธ๋์ต๋๋ค. `rest.ReadJSON[T]`๋ ์์ฒญ์ ๋์ฝ๋ฉํ๊ณ , ํ์
์ `Validate() error`๊ฐ ์์ผ๋ฉด ์คํํ๋ฉฐ, 400 ์๋ต๊น์ง ์ง์ ์๋๋ค. ์๋ต ํฌํผ๋ ์ฑ๊ณต ์ํ ์ฝ๋๋ฅผ ์ฐ๊ฑฐ๋, ์ค์ ๋งต์ด ๊ทธ ์๋ฌ์ ๋ํด ์ ํ ์๋ต์ ์๋๋ค.
```go
func (api *ProductsAPI) create(ctx iris.Context) {
input, ok := rest.ReadJSON[catalog.ProductInput](ctx)
if !ok {
return // 400์ ์ด๋ฏธ ๊ธฐ๋ก๋จ: ์๋ชป๋ JSON์ด๊ฑฐ๋ Validate ์คํจ.
}
id, err := api.svc.Create(ctx, input)
rest.Created(ctx, id, err) // 201, ๋๋ ์ค์์์ ๋งคํ๋ ์๋ฌ.
}
```
`rest.OK`, `rest.NoContent`, `rest.Count`, `rest.Paginated`๊ฐ API๊ฐ ๋๋ ค์ฃผ๋ ๋๋จธ์ง ํํ๋ฅผ ๋ด๋นํฉ๋๋ค.
### ์๋ฌ๋ ํ ๋ฒ๋ง ์ ์ธํฉ๋๋ค
์ `rest/errors` ํจํค์ง๊ฐ ๋๋ฉ์ธ ์๋ฌ์ HTTP ์๋ต์ ๋์ ๊ด๊ณ๋ฅผ ๋ณด๊ดํฉ๋๋ค. ํด๋ผ์ด์ธํธ๋ ๊ธฐ๊ณ๊ฐ ์ฝ์ ์ ์๋ ํ์ค ํ์ด๋ก๋๋ฅผ ๋ฐ์ต๋๋ค. ๋ด๋ถ ๋ฉ์์ง๋ ๋ด๋ถ์ ๋จ์ต๋๋ค. ์ฝ๋ ํฐ๋ฅผ ๋ฑ๋กํ๋ฉด ๋ชจ๋ ์คํจ๊ฐ ํ๊ณณ์์ ๋ก๊ฑฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์ ๋ฌ๋ฉ๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ๋ฌด์์ ์์ฒญํ๋์ง์ ๋ฐ๋ผ ์๋ฌ๋ฅผ JSON์ผ๋ก๋, ๋ทฐ๋ก๋ ๋ ๋๋งํ ์ ์์ต๋๋ค.
### MVC๋ฟ ์๋๋ผ ์ด๋์๋ ์ฐ๋ ์์กด์ฑ ์ฃผ์
์์ฑ์๊ฐ ํ์ํ ๊ฒ์ ์ ์ธํ๋ฉด ์ปจํ
์ด๋๊ฐ ์ ๊ณตํฉ๋๋ค. ํธ๋ค๋ฌ, API ๊ทธ๋ฃน, ์ปจํธ๋กค๋ฌ ๋ชจ๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค. `Init(ctx context.Context) error`๋ฅผ ๊ตฌํํ ์๋น์ค๋ `Build()` ์์์ ํ ๋ฒ ์คํ๋ฉ๋๋ค. ๋ซ์ ์ ์๋ ๊ฒ์ ์ข
๋ฃ ์ ๋ซํ๋๋ค. `hero` ํจํค์ง๋ ์ฌ๋ผ์ง๊ณ , ๋ ์ ์ ์ฝ๋๋ก ๋ ๋ง์ ์ผ์ ํ๋ `dep`์ `rest`๊ฐ ๊ทธ ์๋ฆฌ๋ฅผ ๋์ ํฉ๋๋ค. MVC ์ปจํธ๋กค๋ฌ๋ ์ ๋ค๋ฆญ ์์ ๋ง๋ค์ด์ก์ต๋๋ค.
### ํจํค์ง๊ฐ ์์ด์ผ ํ ์๋ฆฌ์ ์์ต๋๋ค
`sessions`, `cache`, `websocket`, `i18n`, `view`, `versioning`์ด ๋ฏธ๋ค์จ์ด๊ฐ ๋์์ต๋๋ค. `mvc`๋ `controller` ์๋๋ก ์ฎ๊ฒจ์ ธ ์ ์ปจํธ๋กค๋ฌ์ธ `fileserver`, `sitemap`, `apigraph` ์์ ์๋ฆฌ ์ก์์ต๋๋ค. `apigraph`๋ ๋ผ์ฐํธ ํธ๋ฆฌ๋ฅผ ๋ํํ D3 ๊ทธ๋ํ๋ก ๊ทธ๋ ค์ค๋๋ค.
์๋ฅธ ๊ฐ์ ๋ฏธ๋ค์จ์ด๊ฐ ๊ธฐ๋ณธ์ผ๋ก ๋ค์ด ์๊ณ , ๊ทธ์ค ์๋ก์ด ๊ฒ๋ค์ด ์์ต๋๋ค: `httpcost`(์์ฒญ๋น ์๊ฐ, ๋ฉ๋ชจ๋ฆฌ, CPU๋ฅผ ์ธก์ ํด ์ฑ๋ฅ ๋ถ์์ด๋ ๊ณผ๊ธ์ ์ฌ์ฉ), `bodylimit`, `compress`, `counter`, `referrer`, `geolocation`, `ipaccess`, `servertiming`. ๋ทฐ ์์ง ๊ตฌํ์ [iris-contrib/views](https://github.com/iris-contrib/views)๋ก ์ฎ๊ฒจ์ก์ต๋๋ค.
### ์ค์ ์ ๋ถ๋ถ ๋ฆฌํฐ๋ด์
๋๋ค
`iris.Configuration`๊ณผ `With*` ์ค์ ์๋ค์ด `iris.Options`๋ก ๋์ฒด๋ฉ๋๋ค. ๊ด์ฌ ์๋ ํ๋๋ง ์ง์ ํ๋ฉด ๋๋จธ์ง๋ ๊ธฐ๋ณธ๊ฐ์์ ์ต๋๋ค. `Bind`๋ `SERVER_CONFIG` ํ๊ฒฝ ๋ณ์์์ ๋จผ์ , ๊ทธ๋ค์ ํ์ผ์์ YAML์ ์ฝ์ต๋๋ค.
```go
app := iris.New(iris.Options{Name: "myapp", LogLevel: "debug"})
```
### ํ๋ ์ผ์ ๊ทธ๋๋ก ๋งํ๋ ์ด๋ฆ
์์ฒญ ํค๋๋ฅผ ์ฝ๋ ๊ฒ๊ณผ ์๋ต ํค๋๋ฅผ ์ค์ ํ๋ ๊ฒ์ด ๋๋ ์๋ฏธ๊ฐ ์กฐ์ฉํ ๋ค์งํ๋ ๊ฐ์ ์ ๋์ฌ๋ฅผ ์ฐ์ง ์์ต๋๋ค. `ctx.Header`๋ ์์ฒญ์ ์ฝ๊ณ , `ctx.SetHeader`์ `ctx.ResponseHeader`๋ ์๋ต์ ๋ค๋ฃน๋๋ค. `Party`๋ `Router`๊ฐ ๋์์ต๋๋ค. `ctx.URLParam`์ `ctx.Query().Get`์ด ๋์์ต๋๋ค. ๋ชจ๋ ์ด๋ฆ ๋ณ๊ฒฝ์ ๋์ฒด ํญ๋ชฉ๊ณผ ํจ๊ป ๋ง์ด๊ทธ๋ ์ด์
๊ฐ์ด๋์ ์ ๋ฆฌ๋์ด ์์ผ๋ฉฐ, ๋๋ถ๋ถ์ ์ฐพ์ ๋ฐ๊พธ๊ธฐ ํ ๋ฒ์ด๋ฉด ๋๋ฉ๋๋ค.
### ๊ธฐ๋ณธ์ด ์์ ํ ์ค์
์ธ์
์ฟ ํค๋ `Secure`์ `SameSite=Lax`๋ก ๋๊ฐ๋๋ค. ์์ฒญ ๋ณธ๋ฌธ ํฌ๊ธฐ ์ ํ์ด ๋ชจ๋ ์ฝ๊ธฐ ๊ฒฝ๋ก์์ ์ ์ฉ๋ฉ๋๋ค. ๋ค์ ๋ง๋๋ ๊ณผ์ ์์ ์ค๋๋ ๋ฒ๊ทธ๋ค๋ ํจ๊ป ์กํ์ต๋๋ค. ์ ํ์ ๊ธฐ๋ก๋ง ํ๊ณ ํ ๋ฒ๋ ์ ์ฉํ์ง ์๋ rate limiter์, ํ๋ก์ธ์ค๋ฅผ ํต์งธ๋ก ์ฃฝ์ผ ์ ์๋ `Logout` ํธ์ถ์ด ๊ทธ์ค ํ๋์
๋๋ค.
### ์ฒ์๋ถํฐ ๋๊น์ง ์ฝ์ ์ ์๋ ๋ฌธ์
v14์๋ ์ ์ฅ์ ์์ ๋ด๊ธด 23์ฅ์ง๋ฆฌ ์ฑ
, ํ
์คํธ๊น์ง ๊ฐ์ถ REST API๋ฅผ ๋ฌธ์ ํ๋๋ก ๋ง๋ค์ด๋ณด๋ ์์ ํํ ๋ฆฌ์ผ, v12 ์ ํ๋ฆฌ์ผ์ด์
์ ์ํ ๋ง์ด๊ทธ๋ ์ด์
๊ฐ์ด๋, ๊ทธ๋ฆฌ๊ณ ์์ค์์ ์์ฑ๋์ด ์ฝ๋๋ฒ ์ด์ค์ ๋ํ ์ง๋ฌธ์ ๋ตํ๋ ๋ผ์ด๋ธ AI ์ํค๊ฐ ํจ๊ปํฉ๋๋ค.
### ์ฌ๋ฌ๋ถ์ v12 ์ฝ๋์๋ ์ด๋ค ์๋ฏธ์ธ๊ฐ
import ๊ฒฝ๋ก๊ฐ `github.com/kataras/iris/v14`๊ฐ ๋๋ฏ๋ก v12์ v14๊ฐ ๋๋ํ ์กด์ฌํ ์ ์๊ณ ์ถ์์ผ์ ๊นจ์ง๋ ๊ฒ์ ์์ต๋๋ค. ํธํ ๋ ์
๊ทธ๋ ์ด๋ํ์ธ์. ๋ง์ด๊ทธ๋ ์ด์
๊ฐ์ด๋๋ import ๊ฒฝ๋ก, ํจํค์ง ์ด๋, ์ ๊ฑฐ๋ ๋ชจ๋ API์ ๊ทธ ๋์ฒด, ๋์ ๋ณ๊ฒฝ์ ๋ค๋ฃจ๋ฉฐ, ๊ธฐ๊ณ์ ์ธ ๋ถ๋ถ์๋ ๋ฐ๋ก ์ธ ์ ์๋ ๋ช
๋ น์ ์ ๊ณตํฉ๋๋ค.
์์ง ๊ณต๊ฐ๋ ์ถ์์ผ์ ์์ต๋๋ค. [๋ฆด๋ฆฌ์ค](https://github.com/kataras/iris/releases)๋ฅผ ์ง์ผ๋ณด๊ฑฐ๋ [@iris_framework](https://twitter.com/iris_framework)๋ฅผ ํ๋ก์ฐํ๋ฉด ๊ฐ์ฅ ๋จผ์ ์์์ ๋ฐ์ ์ ์์ต๋๋ค.
## ๐ ํ์์
์ฌ๋ฌ๋ถ์ ๋์์ผ๋ก ๋ชจ๋๋ฅผ ์ํ ์คํ์์ค ์น ๊ฐ๋ฐ์ ๋ ๋ซ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค!
## ๐ Iris ๋ฐฐ์ฐ๊ธฐ
### ์ค์น
ํ์ํ ๊ฒ์ [Go ํ๋ก๊ทธ๋๋ฐ ์ธ์ด](https://go.dev/dl/)๋ฟ์
๋๋ค.
#### ์ ํ๋ก์ ํธ ๋ง๋ค๊ธฐ
```sh
$ mkdir myapp
$ cd myapp
$ go mod init myapp
$ go get github.com/kataras/iris/v12@latest # ๋๋ @v12.2.11
```
๊ธฐ์กด ํ๋ก์ ํธ์ ์ค์นํ๊ธฐ
```sh
$ cd myapp
$ go get github.com/kataras/iris/v12@latest
```
**์คํ**
```sh
$ go mod tidy -compat=1.23 # windows์์๋ -compat="1.23".
$ go run .
```

Iris๋ ๊ด๋ฒ์ํ๊ณ ๊ผผ๊ผผํ **[๋ฌธ์](https://www.iris-go.com/docs)** ๋ฅผ ๊ฐ์ถ๊ณ ์์ด ํ๋ ์์ํฌ๋ฅผ ์ฝ๊ฒ ์์ํ ์ ์์ต๋๋ค.
๋ ์์ธํ ๊ธฐ์ ๋ฌธ์๋ [godocs](https://pkg.go.dev/github.com/kataras/iris/v12@v12.2.11)๋ฅผ ์ฐธ๊ณ ํ์ธ์. ์คํ ๊ฐ๋ฅํ ์ฝ๋๋ ์ ์ฅ์์ [./_examples](_examples) ํ์ ๋๋ ํฐ๋ฆฌ์ ์์ต๋๋ค.
### Plexon AI๋ก ๊ฐ๋ฐํ๊ธฐ
[Plexon AI](https://plexon.ai)๋ Hellenic Development๊ฐ ๋ง๋ ํฌ๋ก์ค ํ๋ซํผ AI ์ฝ๋ฉ ์ด์์คํดํธ์ด๋ฉฐ, **Iris ์ ์ฉ ์คํฌ**์ ํจ๊ป ์ ๊ณตํฉ๋๋ค. ํ๋ ์์ํฌ ์ ์์๊ฐ ์ง์ ์ด v14 ๊ฐ๋ฐ ๊ฐ์ด๋๋ก, ๋ผ์ฐํ
๊ณผ ๋งคํฌ๋ก, ์ปจํ
์คํธ API, `rest` ํฌํผ, ์๋ฌ ์ฒ๋ฆฌ, ์๋ฅธ ๊ฐ์ ๋ฏธ๋ค์จ์ด ์ ๋ถ, ๊ธฐ๋ณธ ์ ๊ณต ์ปจํธ๋กค๋ฌ, ์ธ์ฆ SDK, ๋ณด์ ๊ฐํ, ๋ฐ์ดํฐ ์์์ฑ, ์บ์ฑ, i18n, ๊ด์ธก์ฑ, ์ฑ๋ฅ, ํ
์คํธ, ๋ฐฐํฌ, ๊ทธ๋ฆฌ๊ณ v12์์ v14๋ก์ ๋ง์ด๊ทธ๋ ์ด์
์ ๋ค๋ฃจ๋ ์ด์ํ ๊ฐ์ ์ฐธ์กฐ ๋ฌธ์๊ฐ ๋ค์ด ์์ต๋๋ค.
**Software Developer** ํ๋ฅด์๋๋ฅผ ์ค์นํ๋ฉด Iris ์คํฌ์ด ํจ๊ป ๋ฐ๋ผ์ค๋ฉฐ, ์ด ํ๋ฅด์๋๊ฐ ํ์ฑํํ๋ ์์ง๋์ด๋ง ์์ด์ ํธ๋ค๊ณผ ๋๋ํ ๋์
๋๋ค. ๊ทธ๋ฌ๋ฉด ์ด์์คํดํธ๋ ํ์ต ์ค์ ์ฐ์ฐํ ๋ณธ ๊ฒ์ ์ง์ํ๋ ๋์ , ํ๋ ์์ํฌ๊ฐ ์๋ํ ๋ฐฉ์ ๊ทธ๋๋ก Iris ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
### ์ฌํํ๋ฉด์ ๋
์๋ฅผ ์ฆ๊ธฐ์๋์?
[](https://twitter.com/intent/follow?screen_name=makismaropoulos)
[](https://twitter.com/intent/follow?screen_name=iris_framework)
[](https://www.facebook.com/iris.framework)
**Iris E-Book** (์ ํ)์ PDF ๋ฒ์ ๊ณผ ์จ๋ผ์ธ ์ ๊ทผ์ ์ค๋ [์์ฒญ](https://www.iris-go.com/#ebookDonateForm)ํ์๊ณ Iris ๊ฐ๋ฐ์ ์ฐธ์ฌํ์ธ์.
## ๐ ๊ธฐ์ฌํ๊ธฐ
Iris ์น ํ๋ ์์ํฌ์ ๋ํ ์ฌ๋ฌ๋ถ์ ๊ธฐ์ฌ๋ฅผ ํ์ํฉ๋๋ค! Iris ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ [CONTRIBUTING.md](CONTRIBUTING.md) ํ์ผ์ ์ฐธ์กฐํ์ธ์.
[๊ธฐ์ฌ์ ๋ชฉ๋ก](https://github.com/kataras/iris/graphs/contributors)
## ๐ก ๋ณด์ ์ทจ์ฝ์
Iris์์ ๋ณด์ ์ทจ์ฝ์ ์ ๋ฐ๊ฒฌํ์๋ฉด [iris-go@outlook.com](mailto:iris-go@outlook.com)์ผ๋ก ๋ฉ์ผ์ ๋ณด๋ด์ฃผ์ธ์. ๋ชจ๋ ๋ณด์ ์ทจ์ฝ์ ์ ์ ์ํ ํด๊ฒฐ๋ฉ๋๋ค.
## ๐ ๋ผ์ด์ ์ค
์ด ํ๋ก์ ํธ๋ Go ํ๋ก์ ํธ์ ๋ง์ฐฌ๊ฐ์ง๋ก [BSD 3-clause ๋ผ์ด์ ์ค](LICENSE)๋ฅผ ๋ฐ๋ฆ
๋๋ค.
ํ๋ก์ ํธ ์ด๋ฆ "Iris"๋ ๊ทธ๋ฆฌ์ค ์ ํ์์ ์๊ฐ์ ๋ฐ์์ต๋๋ค.