도메인만 지정하면 인증서가 자동으로 발급되고 갱신되는 웹 서버
서버를 켜는 순간부터 모든 연결이 암호화되어, 보안 설정을 따로 고민할 필요가 없습니다. Caddy는 TLS를 기본값으로 사용하는 웹 서버이자 Go 애플리케이션을 실행하는 플랫폼입니다. 복잡한 인증서 관리와 프로토콜 설정을 대신 처리해 주므로, 개발자는 애플리케이션 로직에만 집중할 수 있습니다.
자동 HTTPS와 설정 방식
Caddy는 공개 도메인의 경우 ZeroSSL과 Let's Encrypt를 통해 인증서를 자동으로 발급하고 갱신합니다. 내부 이름이나 IP 주소에는 자체 로컬 CA를 관리하여 HTTPS를 적용합니다. 설정은 Caddyfile이라는 간단한 형식이나 네이티브 JSON으로 작성할 수 있으며, JSON API를 통해 실행 중인 서버의 설정을 동적으로 변경할 수도 있습니다. NGINX 설정이나 YAML, TOML 등 다른 형식의 설정 파일을 변환하는 어댑터도 지원합니다.
Go 기반의 확장 가능한 구조
Caddy는 Go 언어로 작성되어 libc를 포함한 외부 의존성이 없어 어디서든 실행할 수 있습니다. 모듈식 아키텍처를 기반으로 Caddy 앱은 Go 프로그램으로 구현된 모듈이며, 표준으로 tls와 http 앱이 제공됩니다. 이를 통해 HTTP/1.1, HTTP/2, HTTP/3를 기본적으로 지원합니다. 이러한 설계는 TLS나 인증서 문제로 인한 서버 중단을 방지하고, 수백만 개의 인증서를 관리하면서도 안정적으로 작동하게 합니다.
설치와 빌드 방법
가장 쉬운 방법은 GitHub Releases에서 실행 파일을 다운로드하여 PATH에 추가하는 것입니다. 소스에서 빌드하려면 Go 1.26.0 이상이 필요합니다. 개발용 빌드는 go build 명령으로 수행할 수 있으며, 버전 정보나 플러그인을 포함하려면 xcaddy 빌더 도구를 사용합니다. Linux에서 낮은 포트에 바인딩하려면 sudo setcap cap_net_bind_service=+ep ./caddy 명령으로 권한을 부여해야 할 수 있습니다.
배포 전 점검 사항
Caddy는 수조 건의 요청을 처리하고 수백만 개의 인증서를 관리한 생산 환경에서 사용되고 있습니다. 소스 빌드 시 Go 1.26.0 이상의 버전이 필요하며, 특정 포트 바인딩을 위해 운영체제 권한 설정이 요구될 수 있습니다. 기업 사용자는 Ardan Labs를 통한 지원 계약을 고려할 수 있으며, 개인 사용자는 커뮤니티 포럼에서 도움을 받을 수 있습니다.