캐디 (웹 서버)

캐디(Caddy)는 Go로 작성된 확장 가능하고 크로스 플랫폼 오픈 소스 웹 서버이다.

"캐디"라는 이름은 지루한 작업을 돕는 도우미와 여러 부분을 단순화된 시스템으로 정리하는 방법을 모두 의미한다. Caddy는 본질적으로 REST API를 사용하여 온라인으로 업데이트할 수 있는 단일 통합 구성으로 장기 실행 서비스("앱")를 배포하기 위한 확장 가능한 플랫폼이다. 공식 Caddy 배포판에는 HTTP 서버, TLS 자동화 및 PKI 앱을 포함하는 표준 모듈 세트가 함께 제공된다. 자동 HTTPS 기능으로 가장 잘 알려져 있다.

 아키텍처 
캐디는 세 가지 주요 구성 요소로 구성된다: 명령, 코어 라이브러리 및 구성 모듈. 명령은 프로그램이 실행되는 확장 가능한 인터페이스이며, 구성 파일을 로드하고, 일반 모드를 실행하고, 설치된 플러그인을 관리하고, 관련 유틸리티 기능을 제공할 수도 있다. 코어 라이브러리는 구성 로드, 언로드 및 관리를 위한 API를 가지고 있지만, 그 자체로는 특별히 유용한 작업을 수행하지 않는다. Caddy 기능의 대부분은 Caddy의 구성 구조를 확장하는 플러그인인 모듈에 의해 제공된다. 예를 들어, HTTP 서버는 모듈이다. Caddy 모듈은 다양한 장기 실행 서비스, 웹 표준 및 기타 유용한 기능을 구현한다.

캐디의 입력은 RESTful HTTP API를 통해 열린 소켓을 통해 수신되는 JSON 구성 문서이다. HTTP 클라이언트가 없는 경우, Caddy의 명령줄 인터페이스를 사용하여 구성 파일을 로드할 수 있다. 구성 어댑터를 사용하여 다른 구성 형식을 JSON으로 변환할 수 있다. 기존 어댑터에는 명령줄에서 최우선 지원되는 Caddyfile과 YAML, TOML, Nginx 및 기타 여러 형식이 포함된다.

관리 소켓을 통해 구성이 수신되면 캐디는 지정된 모든 모듈에 대한 구성을 디코딩하고 모든 앱 모듈을 실행하기 시작한다. 앱 모듈이 프로비저닝될 때, 이들 자체적으로 사용하는 모듈을 로드하고 프로비저닝할 수 있다. 예를 들어, HTTP 서버는 HTTP 요청을 처리하기 위해 HTTP 핸들러 모듈을 사용하는 앱 모듈이다. 이 핸들러는 기능을 구현하기 위해 다른 모듈을 사용할 수 있으며, 이는 계속된다. 이 모든 모듈은 구성 로드 단계에서 프로비저닝된다.

플러그인은 캐디 바이너리에 직접 정적으로 컴파일하여 설치한다. 플러그인이 없으면 캐디의 기본 구성 구조는 관리 및 로깅을 위한 몇 가지 기본 옵션만 갖는다. 다른 모든 기능은 앱 모듈에 의해 제공되어야 한다. 공식 Caddy 배포판에는 수십 개의 표준 모듈이 함께 제공되며, 프로젝트 웹사이트에서 xcaddy 명령줄 도구를 사용하거나 사용자 지정 빌드를 수동으로 컴파일하여 다른 모듈을 추가할 수 있다.

 HTTP 서버 
HTTP 서버는 공식 캐디 배포판에 표준으로 포함된 앱 모듈이다. 주로 정적 파일 서버 및 로드 밸런싱 리버스 프록시로 사용된다. Caddy의 HTTP 기능의 기반은 Go의 표준 라이브러리에서 찾을 수 있는 구현을 사용하지만, 다양한 개선 사항 및 사용자 지정은 미들웨어로 제공되며 구성 매개 변수를 통해 노출된다.

 자동 HTTPS 

기본적으로, 어떤 경로라도 비어 있지 않은 호스트 매처를 가지면 TLS가 자동으로 사용된다. 이들은 Caddy가 서비스하는 사이트 이름 또는 IP 주소로 간주되므로, Caddy는 구성된 호스트명과 IP 주소에 대한 인증서를 자동으로 조달하고 갱신한다. 이러한 방식으로 자동 HTTPS가 활성화되면 Caddy는 HTTP 요청을 해당 HTTPS 위치로 리디렉션한다.

TLS 인증서를 자동으로 얻기 위해 캐디는 자동 인증서 관리 환경 프로토콜을 구현하여 Let's Encrypt와 같은 서비스와 통신할 수 있다.

 개발 

캐디 프로젝트의 첫 번째 Git 커밋은 2014년에 이루어졌다.

캐디 버전 1.0은 2019년 4월 24일에 출시되었다. 그 시점에서 프로젝트에는 250명 이상의 기여자가 있었다.

캐디 버전 2는 2020년 5월 5일에 출시되었다. 아르스 테크니카의 리뷰어들은 버전 2의 구성 형식이 이전 주요 캐디 릴리스와 대부분 호환되지 않음에도 불구하고 여전히 아파치 HTTP 서버보다 단순한 구성 파일 구문을 가지고 있다고 말한다.

 파생상품 
 CoreDNS, 클라우드 네이티브 컴퓨팅 재단의 프로젝트.

 각주 

 외부 링크 


분류:자유 웹 서버 소프트웨어
분류:리버스 프록시
분류:크로스 플랫폼 자유 소프트웨어
분류:아파치 라이선스 소프트웨어
분류:Go로 작성된 자유 소프트웨어