문서의 각 단락이 어느 리비전에서 마지막으로 수정되었는지 확인할 수 있습니다. 왼쪽의 정보 칩을 통해 작성자와 수정 시점을 파악하세요.

Caddy | |
개발사 | Light Code Labs |
배급사 | Light Code Labs |
장르 | 웹 서버 리버스 프록시 |
플랫폼 | 크로스 플랫폼 |
출시일 | 2015년 |
라이선스 | Apache License 2.0 |
프로그래밍 언어 | Go |
상세 정보 | |
주요 특징 | 기본 HTTPS 지원 자동 TLS 인증서 발급 및 갱신 단일 바이너리 배포 구성 파일 없이 명령줄로 설정 가능 JSON, YAML, Caddyfile 등 다양한 구성 형식 지원 |
기능 | 정적 파일 서빙 리버스 프록시 로드 밸런싱 HTTP/3 지원 API 게이트웨이 Kubernetes Ingress 컨트롤러 |
공식 웹사이트 | https://caddyserver.com |
저장소 | https://github.com/caddyserver/caddy |

Caddy는 Go 언어로 작성된 오픈 소스 웹 서버이자 리버스 프록시 소프트웨어이다. 2015년에 처음 출시되었으며, Apache License 2.0 라이선스 하에 Light Code Labs에서 개발 및 배포하고 있다. 크로스 플랫폼으로 설계되어 다양한 운영 체제에서 동작한다.
기존의 Apache HTTP Server나 Nginx와 같은 전통적인 웹 서버와 달리, Caddy의 가장 큰 특징은 기본적으로 HTTPS를 자동으로 구성하고 관리하는 기능을 내장하고 있다는 점이다. 이를 통해 사용자는 복잡한 SSL/TLS 인증서 발급 및 갱신 과정 없이도 쉽게 보안 연결을 설정할 수 있다.
Caddy는 단일 실행 파일로 배포되어 의존성 문제가 적고 설치가 간편하다. 설정은 주로 'Caddyfile'이라는 간결한 구성 파일을 통해 이루어지며, JSON을 통한 설정도 지원한다. 이러한 설계 철학은 사용 편의성과 현대적인 웹 인프라의 자동화 요구에 초점을 맞추고 있다.

Caddy는 Go 언어로 작성된 현대적인 웹 서버이자 리버스 프록시 소프트웨어이다. 가장 두드러진 특징은 기본적으로 HTTPS를 자동으로 활성화한다는 점이다. 이를 위해 Let's Encrypt와 같은 공인 인증 기관을 통해 도메인에 대한 SSL 인증서를 자동으로 발급, 갱신, 관리한다. 이 과정은 사용자의 별도 설정 없이 자동으로 이루어져 보안된 연결을 손쉽게 구축할 수 있게 한다.
설정의 용이성 또한 주요 장점이다. Caddy는 Caddyfile이라는 단순한 텍스트 파일을 사용하여 서버를 구성한다. 이 파일의 문법은 직관적이고 간결하여, 복잡한 설정 파일을 다루지 않고도 빠르게 서버를 배포할 수 있다. 또한 JSON 형식의 API를 통한 동적 설정도 지원한다.
Caddy는 단순한 정적 파일 서버를 넘어 다양한 기능을 내장하고 있다. HTTP/3과 QUIC 프로토콜을 기본 지원하며, gzip 압축, 로드 밸런싱, 웹소켓 프록시, 마크다운 렌더링 등의 기능을 제공한다. 또한 플러그인 시스템을 통해 사용자가 필요한 모듈을 추가하여 기능을 확장할 수 있다. 이러한 모든 기능이 단일 실행 파일에 포함되어 있어 의존성 문제 없이 쉽게 배포하고 실행할 수 있다.

Caddy는 단일 실행 파일로 배포되며, 설치 과정이 매우 간단하다. 공식 웹사이트에서 운영 체제에 맞는 바이너리를 다운로드하거나, 패키지 관리자를 통해 설치할 수 있다. 주요 리눅스 배포판의 패키지 관리자나 macOS의 Homebrew, 윈도우즈의 Chocolatey 등을 통해 설치할 수 있어 사용자의 환경에 맞는 편리한 설치 방법을 제공한다. 또한 도커 허브에서 공식 이미지를 제공하여 컨테이너 환경에서도 손쉽게 배포할 수 있다.
설치 후에는 caddy 명령어를 통해 서버를 실행할 수 있다. 가장 기본적인 사용법은 현재 디렉토리를 정적 파일 서버로 제공하는 것이다. 명령줄에서 직접 도메인, 포트, 리버스 프록시 대상과 같은 설정을 인자로 전달하여 즉시 실행할 수 있어 빠른 테스트에 유용하다. 예를 들어, 특정 포트에서 파일을 서빙하거나 다른 애플리케이션으로의 프록시 서버 역할을 즉시 구성할 수 있다.
보다 영구적이고 복잡한 구성에는 Caddyfile을 사용하는 것이 일반적이다. Caddyfile은 사용자가 이해하기 쉬운 선언적 문법으로 작성되며, 가상 호스트 설정, 라우팅 규칙, 미들웨어 사용 등을 정의한다. Caddy는 이 파일을 읽어 자동으로 구성을 생성하고 적용한다. Caddyfile의 위치는 명령줄 인자로 지정하거나, Caddy가 실행되는 작업 디렉토리에 놓을 수 있다.
또한 JSON 형식의 구성 API를 통해 동적으로 설정을 관리할 수도 있다. 이 RESTful API를 이용하면 실행 중인 Caddy 인스턴스의 구성을 실시간으로 조회하거나 수정할 수 있어, 자동화 스크립트나 오케스트레이션 도구와의 통합에 용이하다. 설정 변경 후에는 서버를 재시작할 필요 없이 즉시 적용되는 것이 특징이다.

Caddyfile은 Caddy 웹 서버의 기본 설정 파일 형식이다. 구문이 간결하고 가독성이 높아 사용자가 서버의 동작을 쉽게 정의할 수 있다. 이 파일은 일반적으로 Caddy가 실행되는 디렉토리에 위치하며, 도메인이나 경로별로 다양한 지시문을 블록으로 구성하여 라우팅 규칙, 프록시 설정, 보안 정책 등을 관리한다.
Caddyfile의 핵심 구조는 사이트 블록으로 이루어져 있다. 각 블록은 처리할 도메인이나 IP 주소로 시작하며, 중괄호 안에 해당 사이트에 적용할 지시문을 나열한다. 예를 들어, 정적 파일 서빙, 리버스 프록시를 통한 애플리케이션 서버 연결, 접근 제어, 헤더 수정 등의 작업을 지시문을 통해 설정할 수 있다. 환경 변수나 와일드카드 도메인을 사용하는 것도 가능하다.
Caddyfile은 JSON 형식의 API를 통한 동적 구성도 지원하지만, 대부분의 사용자는 정적 파일인 Caddyfile을 통해 설정을 관리한다. Caddy는 이 파일을 읽어 자동으로 TLS 인증서를 획득하고 갱신하는 등 선언된 구성을 실행한다. 설정 변경 후 서버를 재시작할 필요 없이, Caddy의 핫 리로드 기능을 통해 변경 사항을 즉시 적용할 수 있다는 점이 특징이다.

Caddy의 가장 두드러진 특징은 기본적으로 내장된 자동 HTTPS 기능이다. 이 기능은 웹사이트에 SSL/TLS 암호화를 자동으로 적용하여 HTTPS 연결을 제공한다. Caddy는 서버를 처음 실행할 때 설정된 도메인에 대해 Let's Encrypt와 같은 공인 인증 기관으로부터 무료 인증서를 자동으로 발급받는다. 또한 인증서의 갱신 역시 만료 전에 자동으로 처리하여 관리자의 수동 개입 없이도 지속적인 보안 연결을 유지한다.
이 자동화 과정은 ACME 프로토콜을 통해 이루어진다. Caddy는 도메인의 소유권을 확인하기 위해 HTTP-01 챌린지나 TLS-ALPN-01 챌린지와 같은 방법을 사용한다. 로컬 개발 환경을 위해 자체 서명된 인증서를 생성하는 옵션도 제공한다. 이러한 설계 덕분에 사용자는 복잡한 인증서 발급 및 갱신 절차를 신경 쓰지 않고도 강력한 엔드투엔드 암호화를 쉽게 배포할 수 있다.
자동 HTTPS는 Caddyfile 구성에서 간단한 지시어로 활성화할 수 있으며, 기본적으로 활성화되어 있는 경우가 많다. 또한 특정 도메인에 대해서만 HTTPS를 비활성화하거나, HTTP/2 및 HTTP/3과 같은 최신 프로토콜을 자동으로 협상하도록 설정할 수 있다. 이는 웹사이트의 보안을 강화하고 검색 엔진 최적화 측면에서도 유리한 점을 제공한다.

Caddy는 모듈식 아키텍처를 기반으로 구축되어, 핵심 기능 외에도 다양한 모듈을 통해 기능을 확장할 수 있다. 이러한 모듈은 공식 저장소에서 제공되며, 사용자는 필요에 따라 Caddy를 컴파일하거나 빌드 시 특정 모듈을 포함시켜 웹 서버의 기능을 맞춤 설정할 수 있다. 이 모듈 시스템은 Caddyfile을 통해 손쉽게 구성할 수 있도록 설계되어 있다.
주요 확장 기능으로는 다양한 인증 방식 지원, 특정 프로토콜 처리, 로깅 포맷 커스터마이징, 미들웨어 추가 등이 포함된다. 예를 들어, JWT 인증, 프로메테우스 지표 수집, 템플릿 엔진 통합, 특정 파일 형식에 대한 직접 서빙 등의 모듈이 존재한다. 또한 리버스 프록시 기능을 보강하는 고급 로드 밸런싱이나 헬스 체크 모듈도 활용할 수 있다.
사용자는 공식 문서와 모듈 레지스트리를 참조하여 필요한 기능을 검색하고, 자신의 Caddy 빌드에 통합할 수 있다. 이 유연한 확장성 덕분에 Caddy는 단순한 정적 파일 서버부터 복잡한 API 게이트웨이 또는 애플리케이션 서버의 프록시에 이르기까지 광범위한 사용 사례에 적용 가능하다.

Caddy는 Go 언어로 작성되어 네이티브 코드로 컴파일되기 때문에, 메모리 사용량이 적고 처리 속도가 빠른 특징을 보인다. 특히 정적 콘텐츠를 서빙하는 성능은 Nginx나 Apache HTTP Server와 비교해도 뒤지지 않는다. 동시 접속 처리 능력도 우수하여, 중소 규모의 트래픽을 효율적으로 처리할 수 있다.
전통적인 웹 서버인 Apache HTTP Server와 비교할 때, Caddy의 가장 큰 차별점은 구성 파일의 단순성과 자동 HTTPS 기능이다. Apache는 복잡한 .htaccess 파일과 모듈 설정이 필요한 반면, Caddy는 Caddyfile이라는 직관적인 구성 파일을 사용한다. Nginx 역시 높은 성능으로 유명하지만, SSL 인증서 관리와 같은 운영 측면에서 Caddy의 자동화 기능은 상당한 편의성을 제공한다.
성능 벤치마크 결과에 따르면, 정적 파일 서빙과 리버스 프록시 기능에서 Caddy는 경쟁 제품들과 유사하거나 약간 더 나은 결과를 보이기도 한다. 그러나 대규모 마이크로서비스 아키텍처나 극단적으로 높은 트래픽 환경에서는 여전히 Nginx가 미세한 성능 우위를 점하는 경우가 있다. Caddy는 이러한 성능 차이보다는 개발자 경험과 운영의 편의성에 초점을 맞춘 도구로 평가받는다.
또한 Caddy는 내장된 자동 인증서 관리 환경 덕분에 인증서 갱신 실패나 만료 문제에서 상대적으로 자유롭다. 이는 성능 수치로 직접 측정되지는 않지만, 시스템의 전반적인 안정성과 유지보수 비용 절감 측면에서 중요한 장점으로 작용한다.

Caddy는 자동 HTTPS와 간편한 설정 덕분에 다양한 환경에서 널리 사용된다. 개인 블로그나 소규모 웹사이트 운영자에게 특히 인기가 높은데, Caddyfile 구성이 직관적이고 Let's Encrypt를 통한 인증서 발급 및 갱신이 기본적으로 처리되기 때문이다. 이는 SSL/TLS 설정에 대한 부담을 크게 줄여준다.
리버스 프록시 및 로드 밸런싱 용도로도 적극 활용된다. 마이크로서비스 아키텍처나 컨테이너 기반 애플리케이션 앞단에서 여러 백엔드 서비스로의 트래픽을 라우팅하고 관리하는 데 효과적이다. API 게이트웨이 역할을 하거나, Docker 컨테이너와 함께 사용되어 내부 서비스들을 외부에 안전하게 노출시키는 시나리오가 대표적이다.
또한, 정적 사이트 생성기로 만들어진 사이트나 싱글 페이지 애플리케이션을 호스팅하는 데 최적화되어 있다. 내장된 파일 서버 기능과 Gzip 압축, HTTP/2 및 HTTP/3 프로토콜 지원으로 빠른 콘텐츠 전송을 보장한다. 개발 환경에서는 로컬 개발 서버로 사용되기도 하며, 웹소켓 연결을 프록시하는 등 현대적 웹 개발 요구사항을 잘 충족시킨다.
