caddyserver/caddy
요약
Caddy는 TLS를 기본으로 사용하는 확장 가능한 서버 플랫폼으로, Go 언어로 작성되어 높은 메모리 안전성과 확장성을 제공합니다. Caddyfile을 통한 간편한 설정부터 JSON API를 통한 동적 설정까지 다양한 구성 방식을 지원하며, 자동 HTTPS 기능을 통해 인증서 관리를 자동화합니다.
핵심 포인트
- ZeroSSL 및 Let's Encrypt를 통한 자동 HTTPS 지원 및 로컬 CA 관리
- Caddyfile, JSON API, 설정 어댑터를 통한 유연한 구성 방식 제공
- HTTP/1.1, HTTP/2, HTTP/3 프로토콜 기본 지원
- Go 언어 기반의 모듈형 아키텍처로 높은 확장성 및 메모리 안전성 보장
- 외부 의존성 없이 어디서나 실행 가능한 크로스 플랫폼 특성
Caddy는 기본적으로 TLS를 사용하는 확장 가능한 서버 플랫폼입니다.
릴리스 · 문서 · 도움받기
Caddyfile을 통한 간편한 설정 (Easy configuration)
네이티브 JSON 설정을 통한 강력한 설정 (Powerful configuration)
JSON API를 통한 동적 설정 (Dynamic configuration)
JSON이 마음에 들지 않을 경우를 위한 설정 어댑터 (Config adapters)
기본 제공되는 자동 HTTPS (Automatic HTTPS)
- 공개 도메인용 ZeroSSL 및 Let's Encrypt 지원
- 내부 도메인 및 IP를 위한 완전 관리형 로컬 CA (Certificate Authority)
- 클러스터 내 다른 Caddy 인스턴스와의 협업 가능
- 멀티 이슈어 폴백 (Multi-issuer fallback)
- Encrypted ClientHello (ECH) 지원
TLS/OCSP/인증서 관련 문제로 다른 서버가 다운될 때도 가동 유지 (Stays up when other servers go down)
수조 건의 요청을 처리하고 수백만 개의 TLS 인증서를 관리하며 검증된 프로덕션 준비 완료 (Production-ready)
프로덕션에서 증명된 바와 같이 수십만 개의 사이트로 확장 가능 (Scales to hundreds of thousands of sites)
HTTP/1.1, HTTP/2, HTTP/3 모두 기본적으로 지원 (HTTP/1.1, HTTP/2, and HTTP/3)
**매우 높은 확장성 (Highly extensible): 모듈형 아키텍처를 통해 불필요한 요소 없이 무엇이든 수행 가능
**어디서나 실행 가능 (Runs anywhere): 외부 의존성 없이 (libc조차 없이) 실행 가능
- 다른 서버보다 더 높은 메모리 안전성 (memory safety) 보장을 제공하는 언어인 Go로 작성됨
- 실제로 사용하기 즐거움 - 발견할 것이 훨씬 더 많음
가장 간단하고 크로스 플랫폼(cross-platform)적인 시작 방법은 GitHub Releases에서 Caddy를 다운로드하여 실행 파일을 PATH에 배치하는 것입니다.
다른 설치 지침은 온라인 문서를 참조하십시오.
요구 사항:
참고: 이 단계들은 적절한 버전 정보를 포함하지 않습니다. 이를 위해서는 다음 섹션의 지침을 따르십시오.
$ git clone "https://github.com/caddyserver/caddy.git"
$ cd caddy/cmd/caddy/
$ go build
Caddy를 실행할 때, 설정에서 별도로 지정하지 않으면 낮은 포트(low ports)에 바인딩을 시도할 수 있습니다. 운영체제(OS)에서 이를 위해 권한 상승이 필요한 경우, 새로 생성한 바이너리에 해당 권한을 부여해야 합니다. Linux에서는 다음과 같이 쉽게 수행할 수 있습니다: sudo setcap cap_net_bind_service=+ep ./caddy
임시 바이너리만 생성하는 go run 사용을 선호하는 경우, 포함된 setcap.sh를 사용하여 다음과 같이 수행할 수 있습니다:
$ go run -exec ./setcap.sh main.go
setcap을 위해 비밀번호를 입력하고 싶지 않다면, sudo visudo를 사용하여 sudoers 파일을 편집하고 사용자 계정이 비밀번호 없이 해당 명령을 실행할 수 있도록 허용하세요. 예시는 다음과 같습니다:
username ALL=(ALL:ALL) NOPASSWD: /usr/sbin/setcap
여기서 username을 실제 사용자 이름으로 바꾸십시오. 주의를 기울여야 하며, 본인이 무엇을 하고 있는지 정확히 알고 있는 경우에만 이 작업을 수행하십시오! 저희는 Caddy의 사용법을 문서화할 자격이 있을 뿐, Go 툴링(tooling)이나 귀하의 컴퓨터에 대한 자격은 없습니다. 이 지침은 편의를 위해서만 제공되는 것이므로, 귀하의 책임하에 자신의 컴퓨터 사용법을 익히고 필요한 조정을 수행하시기 바랍니다.
그다음 모든 모듈 또는 특정 모듈에서 테스트를 실행할 수 있습니다:
$ go test ./...
$ go test ./modules/caddyhttp/tracing/
우리의 빌더 도구인 xcaddy를 사용하면...
$ xcaddy build
...다음 단계들이 자동화됩니다:
-
새 폴더 생성:
mkdir caddy -
해당 폴더로 이동:
cd caddy -
Caddy의
main.go를 빈 폴더로 복사합니다. 추가하려는 커스텀 플러그인(custom plugins)이 있다면 임포트(import)를 추가합니다. -
Go 모듈 초기화:
go mod init caddy -
(선택 사항) Caddy 버전 고정:
go get github.com/caddyserver/caddy/v2@version
version을 git 태그, 커밋(commit) 또는 브랜치(branch) 이름으로 바꿉니다. - (선택 사항) 임포트를 추가하여 플러그인 추가:
_ "import/path/here"
- 컴파일:
go build -tags=nobadger,nomysql,nopgx
Caddy 웹사이트에는 튜토리얼, 퀵 스타트 가이드(quick-start guides), 레퍼런스(reference) 등을 포함한 문서가 있습니다.
경험 수준에 관계없이 모든 사용자가 Caddy 사용법에 익숙해질 수 있도록 우리의 시작하기(Getting Started) 가이드를 수행할 것을 권장합니다.
시간이 촉박하다면, 웹사이트에서 선택할 수 있는 여러 가지 퀵 스타트 튜토리얼이 있습니다! 하지만 퀵 스타트 튜토리얼을 마친 후에는 소프트웨어가 어떻게 작동하는지 이해하기 위해 더 많은 문서를 읽어주시기 바랍니다. 🙂
Caddy는 가장 흔하게 HTTPS 서버로 사용되지만, 장시간 실행되는 모든 Go 프로그램에 적합합니다. 무엇보다도, Caddy는 Go 애플리케이션을 실행하기 위한 플랫폼입니다. Caddy "앱 (apps)"은 단순히 Caddy 모듈로 구현된 Go 프로그램일 뿐입니다. 두 개의 앱인 tls와 http는 Caddy와 함께 표준으로 제공됩니다.
Caddy 앱은 자동화된 문서화, API를 통한 API를 통한 우아한 온라인 설정 변경 (graceful on-line config changes), 그리고 다른 Caddy 앱과의 통합의 이점을 즉각적으로 누릴 수 있습니다.
JSON이 Caddy의 기본 설정 언어(native config language)이긴 하지만, Caddy는 사용자가 선택한 어떤 설정 형식이든 본질적으로 JSON으로 변환할 수 있는 설정 어댑터 (config adapters)로부터 입력을 받을 수 있습니다: Caddyfile, JSON 5, YAML, TOML, NGINX 설정 등이 이에 해당합니다.
Caddy를 설정하는 주요 방법은 API를 통하는 것이지만, 설정 파일을 선호한다면 명령줄 인터페이스 (CLI) 또한 이를 지원합니다.
Caddy는 현존하는 그 어떤 웹 서버와 비교해도 전례 없는 수준의 제어력을 제공합니다. Caddy에서 여러분은 보통 HTTP 핸들러 (handlers)와 TLS 핸드셰이크 (handshakes)부터 스토리지 매체 (storage medium)에 이르기까지 모든 것을 구동하는 메모리 내 초기화된 타입 (initialized types)의 실제 값을 설정하게 됩니다. 또한 Caddy는 다른 웹 서버들에 비해 엄청난 개선을 이루어낸 강력한 플러그인 시스템을 갖추고 있어 터무니없을 정도로 확장성이 뛰어납니다.
이러한 설계의 힘을 활용하려면 설정 문서가 어떻게 구조화되어 있는지 알아야 합니다. Caddy의 설정 구조에 대한 자세한 내용은 당사의 문서 사이트를 참조하십시오.
다른 웹 서버들처럼 CLI 플래그 (flags), 환경 변수 (env variables), 그리고 설정 파일에 흩어져 있는 대신, Caddy 설정의 거의 대부분은 단일 설정 문서에 포함되어 있습니다. 이는 서버 설정을 관리하는 것을 더 직관적으로 만들고 숨겨진 변수나 요인을 줄여줍니다.
저희 웹사이트에는 완전한 문서가 준비되어 있습니다:
문서는 또한 오픈 소스입니다. 여기에서 기여하실 수 있습니다: https://github.com/caddyserver/website
Caddy를 사용하는 기업에는 도움이 필요하기 전에 Ardan Labs를 통해 지원 계약 (support contract)을 체결할 것을 권장합니다.
후원은 큰 힘이 됩니다! 후원자분들에게는 개별적인 도움을 드릴 수 있습니다. Caddy가 귀사의 업무에 도움이 되고 있다면 후원을 고려해 주세요. 이는 프로젝트의 지속 가능성을 보장하기 위한 전업 개발 인력의 자금을 지원할 뿐만 아니라, 귀사에 필요한 리소스, 지원 및 할인을 제공합니다. 또한 고객과 잠재 고객들에게 귀사의 이미지를 높이는 데에도 큰 도움이 됩니다!
개인 사용자는 커뮤니티 포럼(https://caddy.community)에서 무료로 도움을 주고받을 수 있습니다. 사람들이 여가 시간과 선의를 내어 도움을 주고 있다는 점을 기억해 주세요. 도움을 받는 가장 좋은 방법은 먼저 도움을 주는 것입니다!
이슈 트래커(issue tracker)는 버그 보고 및 기능 요청, 즉 실행 가능한 개발 항목을 위해서만 사용해 주세요. (지원 관련 질문은 대개 포럼으로 안내됩니다.)
Matthew Holt는 Brigham Young University에서 컴퓨터 과학을 공부하던 중 2014년에 Caddy 개발을 시작했습니다. ("Caddy"라는 이름은 이 소프트웨어가 웹 서빙의 지루하고 단조로운 작업들을 도와주며, 여러 가지 사항들을 한곳에 모아 정리할 수 있는 단일 장소 역할을 하기 때문에 선택되었습니다.) Caddy는 곧 HTTPS를 자동으로, 그리고 기본값(default)으로 사용하는 최초의 웹 서버가 되었으며, 현재 수백 명의 기여자(contributor)를 보유하고 있으며 수조 건의 HTTPS 요청을 처리해 왔습니다.
"Caddy"라는 이름은 상표로 등록되어 있습니다. 소프트웨어의 이름은 "Caddy"이며, "Caddy Server"나 "CaddyServer"가 아닙니다. "Caddy"라고 부르거나, 명확히 하고 싶다면 "the Caddy web server"라고 불러주세요. Caddy는 Stack Holdings GmbH의 등록 상표입니다.
*X의 프로젝트 계정: @caddyserver
X의 저자 계정: @mholt6
Caddy는 HID Global의 계열사인 ZeroSSL의 프로젝트입니다.
Debian 패키지 저장소 호스팅은 Cloudsmith에서 친절하게 제공하고 있습니다. Cloudsmith는 조직이 어떤 형식이든, 어떤 장소로든 패키지를 완전히 신뢰하며 생성, 저장 및 공유할 수 있도록 지원하는 유일한 완전 호스팅형 클라우드 네이티브(cloud-native) 범용 패키지 관리 솔루션입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub Trending Go (weekly)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기