ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Traefik vs Caddy
    기술/Django 2021. 9. 24. 19:53

    개인 프로젝트에서 사용할 Web Server 를 선택하기 위해 django template 을 찾아보면서 유명한 프로젝트의 설정을 찾아보았습니다.

    그 중 가장 유명한 cookiecutter-django  traefik  wemake-django-template  caddy 를 선택하였습니다.

    여기에서 있었던 이슈와 선택에 이유에 대해 정리하고자 합니다.

    Web Server

    왜 Web Server 를 사용하나요?

    • 보안 - 내부 서버로의 직접 접근을 허용하지 않음
    • 분산처리 - 백엔드 서버가 여럿일 경우 트래픽을 분산
    • 가용성 - 문제 발생 시 다른 서버가 처리
    • 성능 - 정적 파일의 서빙을 대신함

    Nginx vs Caddy vs Traefik

    각 웹서버의 특징을 찾아봤습니다. 만약 웹서버를 선택해야하는 상황이면 해당 섹션을 참고하면 좋을 것 같습니다.

    Nginx

    • 가장 많이 사용
    • 고성능
    • 복잡한 문서

    성능과 관련해서 최근 사이트는 Web Server 가 병목의 문제점이 되고 있지 않는다고 합니다.

    대부분의 성능 문제는 네트워크, 스토리지, 디스크, 사이트 인증서 수 등의 다른 문제로 병목이 된다고 합니다.

    벤치마크 결과는 해당 링크에 있습니다.

    Caddy

    • 쉬운 설정 ( 문서가 깔끔하고 사용하기 쉬움 )
    • 자동 HTTPS 인증

    Traefik

    • 쉬운 설정 ( Caddy 보다는 복잡함 )
    • 서비스 발견 ( 컨테이너 오케스트레이션 및 대시보드 제공 )
    • 자동 HTTPS 인증
    • 정적 파일 서빙 불가

    CookieCutter-Django 에서 Traefik 을 채용한 이유

    관련 이슈

    Nginx -> Caddy 로의 전환

    cookiecutter-django 에서는 처음에는 nginx 를 채용하고 있었습니다.

    처음 Caddy 가 언급된 것이 Let's Encrpyt 를 사용하며 생긴 문제를 논의하며 제안되었습니다.

    위 이슈에서 가장 명확하게 설명해주는 멘트가 있어서 가져왔습니다.

    certbot  nginx 를 함께 사용하는 것은 복잡하고 많은 혼란과 문제를 야기했다.

    이후 nginx 를 사용할 때의 다양한 문제를 Caddy 로 해결할 수 있다고 판단하여 변경하였습니다.

    다양한 문제에 대해서는 위의 관련 이슈 에서 확인할 수 있습니다.

    Caddy -> Traefik 으로의 전환

    Caddy 의 상업용 라이센스 추가

    Caddy 가 2017 년에 오픈 소스 지속을 위한 자금 조달이 문제 때문에 문제가 되는 변경사항이 추가되었습니다.

    조금 더 정확한 내용은 해당 링크에서 확인하실 수 있습니다. 이후 해당 문제에 대한 저자의 회고는 여기서 볼 수 있습니다.

    • 상업용 라이센스 추가
    • Caddy Sponsors 응답 헤더 추가 - Caddyfile 에서 제거할 수 없으며 상업용 라이센스에서 제거 가능
    • license, you can only use “compile-from-source” from open-source projects
    • Forked 된 레포지토리가 생성된지 몇분 되지 않았는데도 상표 침해를 이슈로 생성하여 법적인 위협

    위와같은 문제들이 있었고 커뮤니티에 많은 이야기가 오고 갔습니다. 위의 링크에서 확인 가능합니다.

    이후 2019 년에는 스폰서를 찾고 상업용 라이센스와 문제가 되는 사항을 삭제했습니다.

    Traefik 의 제안 및 수렴

    위에서 이야기했던것처럼 Caddy 의 라이센스에 문제가 있자 다른 대안을 찾아야했습니다.

    • 자동 HTTPS 인증
    • Docker 와 잘 어울림

    이외에 딱히 논의된 내용은 찾을 수 없었습니다..

    Wemake-Services 에서 Caddy 를 채용한 이유

    관련 이슈

    wemake-django-template 은 처음부터 Caddy 를 채용했습니다.

    여기서는 저자가 Traefik 을 선택하지 않은 이유와 Caddy 를 선택한 이유에 대해 설명합니다.

    Traefik 을 선택하지 않은 이유에 대해

    • 로드밸런서가 필요한지에 대한 여부에 대해 확신하지 못함
    • I am also not quite happy with their plugin system and telemetry
    • 정적 파일 제공의 문제
      • whitenoise 를 사용, 하지만 whitenoise 에 의존하는 시스템을 원하지 않음
      • nginx 로 정적 파일 서빙, 그러나 이 경우 왜 nginx 에 모든 것을 사용하지 않나?

    Caddy 를 선택한 이유에 대해

    • 배포, 구성 및 사용의 단순성
    • 가능한 간단하게 사용 가능

    마무리

    개인 웹 서버를 선택하기 위해 여러 보일러플레이트 프로젝트를 둘러봤습니다.

    그 중 가장 유명했던 두 프로젝트의 선택에 대해 정리해봤습니다.

    저는 대부분의 시간을 코드를 찾은데에만 할애했었는데, 오픈소스에 이런 자금문제와 사람문제가 있다는 것을 처음 알고 재미있게 조사했습니다. 찾으려하지 않으면 알 수 없는 문제인데, 이런 정보를 어디서 접하면 좋을지에 대해 고민하고싶다고도 생각하고 있습니다.

    만약 웹 서버를 선택하는 고민이 있다면 제 포스팅이 도움이 되었으면 좋겠네요, 읽어주셔서 감사합니다.

    댓글

Designed by Tistory.