100 KiB
소식
🚀 Iris v14가 곧 나옵니다. 다음 메이저 버전은 이 프로젝트 역사상 가장 큰 릴리스입니다. Go 제네릭 위에서 다시 만든 프레임워크, 컴파일러가 검사하는 애플리케이션 빌더, 검증까지 대신 해주는 요청 헬퍼, 하나의 중앙 에러 맵, 서른 개의 기본 제공 미들웨어, 그리고 저장소 안에 함께 담긴 책이 포함됩니다. 아래 Iris v14에서 달라지는 것을 보세요.
여기서 설명하는 v12는 계속 동작하고 계속 수정을 받습니다. v14는 새로운 import 경로로 나오기 때문에, 출시되는 날 여러분 쪽에서 깨지는 것은 없습니다.
Iris Web Framework English
العربية
⚡ Iris는 단순하고 빠르며 모든 기능을 갖춘 매우 효율적인 Go 웹 프레임워크입니다.
✨ 여러분의 다음 웹사이트나 API를 위해 아름답고 사용하기 쉬운 기반을 제공합니다.
🌟 여러 사람들의 의견을 둘러보고, 이 오픈소스 프로젝트에 **스타**를 남겨주세요
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 <strong>%s</strong>!", "World")
})
app.Listen(":8080")
}
어느 Go 개발자가 말했듯이, 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 그룹을 하나의 표현식으로 연결합니다. 단계 순서를 컴파일러가 강제하므로, 애플리케이션은 올바르게 빌드되거나 아예 빌드되지 않습니다.
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 응답까지 직접 씁니다. 응답 헬퍼는 성공 상태 코드를 쓰거나, 중앙 맵이 그 에러에 대해 정한 응답을 씁니다.
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로 옮겨졌습니다.
설정은 부분 리터럴입니다
iris.Configuration과 With* 설정자들이 iris.Options로 대체됩니다. 관심 있는 필드만 지정하면 나머지는 기본값에서 옵니다. Bind는 SERVER_CONFIG 환경 변수에서 먼저, 그다음 파일에서 YAML을 읽습니다.
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와 그 대체, 동작 변경을 다루며, 기계적인 부분에는 바로 쓸 수 있는 명령을 제공합니다.
아직 공개된 출시일은 없습니다. 릴리스를 지켜보거나 @iris_framework를 팔로우하면 가장 먼저 소식을 받을 수 있습니다.
👑 후원자
여러분의 도움으로 모두를 위한 오픈소스 웹 개발을 더 낫게 만들 수 있습니다!
📖 Iris 배우기
설치
필요한 것은 Go 프로그래밍 언어뿐입니다.
새 프로젝트 만들기
$ mkdir myapp
$ cd myapp
$ go mod init myapp
$ go get github.com/kataras/iris/v12@latest # 또는 @v12.2.11
기존 프로젝트에 설치하기
$ cd myapp
$ go get github.com/kataras/iris/v12@latest
실행
$ go mod tidy -compat=1.23 # windows에서는 -compat="1.23".
$ go run .
Iris는 광범위하고 꼼꼼한 문서 를 갖추고 있어 프레임워크를 쉽게 시작할 수 있습니다.
더 자세한 기술 문서는 godocs를 참고하세요. 실행 가능한 코드는 저장소의 ./_examples 하위 디렉터리에 있습니다.
Plexon AI로 개발하기
Plexon AI는 Hellenic Development가 만든 크로스 플랫폼 AI 코딩 어시스턴트이며, Iris 전용 스킬을 함께 제공합니다. 프레임워크 제작자가 직접 쓴 v14 개발 가이드로, 라우팅과 매크로, 컨텍스트 API, rest 헬퍼, 에러 처리, 서른 개의 미들웨어 전부, 기본 제공 컨트롤러, 인증 SDK, 보안 강화, 데이터 영속성, 캐싱, i18n, 관측성, 성능, 테스트, 배포, 그리고 v12에서 v14로의 마이그레이션을 다루는 열아홉 개의 참조 문서가 들어 있습니다.
Software Developer 페르소나를 설치하면 Iris 스킬이 함께 따라오며, 이 페르소나가 활성화하는 엔지니어링 에이전트들과 나란히 놓입니다. 그러면 어시스턴트는 학습 중에 우연히 본 것을 짐작하는 대신, 프레임워크가 의도한 방식 그대로 Iris 코드를 작성합니다.
여행하면서 독서를 즐기시나요?
Iris E-Book (새 판)의 PDF 버전과 온라인 접근을 오늘 요청하시고 Iris 개발에 참여하세요.
🙌 기여하기
Iris 웹 프레임워크에 대한 여러분의 기여를 환영합니다! Iris 프로젝트에 기여하는 방법에 대한 자세한 내용은 CONTRIBUTING.md 파일을 참조하세요.
🛡 보안 취약점
Iris에서 보안 취약점을 발견하시면 iris-go@outlook.com으로 메일을 보내주세요. 모든 보안 취약점은 신속히 해결됩니다.
📝 라이선스
이 프로젝트는 Go 프로젝트와 마찬가지로 BSD 3-clause 라이선스를 따릅니다.
프로젝트 이름 "Iris"는 그리스 신화에서 영감을 받았습니다.

