nginx에서 caddy로 마이그레이션 하기

힘센캥거루
2025년 10월 20일(수정됨)
3
75

nginx로 리버스 프록시를 설정한지 하루도 지나지 않아 아래 사진을 보고 말았다.

nginx에서 caddy로 마이그레이션 하기-1

아니... nginx의 시대가 갔다고?

참을수 없었다.

nginx를 다시 caddy로 마이그레이션 하기로 했다.

1. caddy란?

Caddy는 Go 언어로 작성된 모던 웹 서버이자 리버스 프록시 서버다.

간편한 설정, 자동 HTTPS, 빠른 성능 덕분에 인기가 많다고 한다.

chatgpt 형님의 말씀으로는 아래 표와 같다.

항목

Caddy

Nginx

🛠️ 설정 난이도

매우 쉬움 (Caddyfile)

중간~어려움 (nginx.conf)

🔐 HTTPS 지원

자동 발급 및 갱신 (Let's Encrypt)

수동 설정 필요 (certbot 등)

🚀 설치와 실행

단일 실행 파일, 즉시 사용 가능

패키지 설치 필요, 설정 후 실행

📦 기본 기능

리버스 프록시, 정적 파일, 인증, 리디렉션 등 내장

다양한 기능 있지만 일부는 모듈 설치 필요

🔧 구성 유연성

기본 구조는 직관적, 복잡한 라우팅엔 다소 한계

고도로 유연한 설정 (단, 복잡함)

📈 성능

고성능 (HTTP/3 지원 포함)

고성능 (대규모 트래픽에서 검증됨)

📋 문서 및 커뮤니티

작지만 빠르게 성장 중

매우 크고 성숙한 커뮤니티

⚙️ 사용 목적

빠른 배포, 간단한 HTTPS, 개발자 중심

고급 설정, 복잡한 인프라 운영

어차피 나는 리버스 프록시로 포트 할당밖에 하지 않는다.

그런 점에서 caddy가 더 간편해 보였다.

2. nginx에서 caddy로 마이그레이션 하기

전쟁을 나가는 로마 병사들은 돌아올 배를 불태운다고 한다.

나도 그런 마음으로 nginx를 먼저 지우고 시작했다.

어차피 하루에 100명도 안들어오는 홈페이지라 큰 상관 없다.

brew unistall nginx
nginx에서 caddy로 마이그레이션 하기-2

그리고 /opt/homebrew/etc 내부에 필요없는 폴더를 삭제해준다.

아래 명령어를 통해 지워도 된다.

sudo rm -rf /opt/homebrew/etc/nginx
nginx에서 caddy로 마이그레이션 하기-3

곧바로 caddy를 깔고 Caddyfile을 설정했는데 이상하게 잘 되지 않았다.

알고보니 nginx 서비스를 멈추지 않아 삭제 후에도 포트를 점유하고 있었던 것.

이 글을 읽는 사람들은 나같은 실수 하지말고 caddy를 설치하기 전에 반드시 포트를 확인해보자.

아래의 명령어로 포트를 확인해본다.

lsofList Open files의 약자이고 -iinternet이라고 한다.

lsof -i :80
nginx에서 caddy로 마이그레이션 하기-4

이것 때문에 2~3시간을 날려먹은 나는 얼마나 어리석은 사람인가...

포트를 정지해도 안되길래 만국 고통의 치유법인 재부팅을 했다.

그리고 /opt/homebrew/etc 폴더 안에 Caddyfile 이라는 파일을 하나 만들었다.

참고로 확장자는 필요없다.

sudo touch /opt/homebrew/etc/Caddyfile
open /opt/homebrew/etc/Caddyfile

이렇게 하면 텍스트 편집기에서 Caddyfile 이 열린다.

그리고 여기에 아래와 같은 내용을 입력한다.

example.com, www.example.com {
    reverse_proxy localhost:3000
}

example.com에는 원하는 도메인을 입력하면 된다.

도메인이 두개라면 콤마로 구분해서 입력한다.

nginx를 써본 사람은 알겠지만 설정이 미친듯이 간단하다.

그리고 caddy 서버를 시작해준다.

brew services start caddy

이렇게 하니 신기하게 인증서까지 발급해 준다.

자동 갱신까지 가능하다고 하니 앞으로 걱정 하나는 덜었다.

3. 후기

맨 처음 next.js에 입문할 때는 대부분 server.js로 https 설정을 하는 글들이 많았다.

왜 caddy를 알려주지 않았어...?

다른 방법보다 nginx나 caddy를 설치하는게 훨씬 나은 방법 같다.

이에 대한 글을 간단하게 써 보려고 한다.

관련 글

Next.js 풀스택 블로그 개발기
Next.js 풀스택 블로그 개발기
웹개발을 처음 접한지 1년정도 되었을 때, 나만의 블로그를 갖고싶다는 생각을 하게 되었다.그래서 6개월 정도 여기에만 매달려서 만들어보게 되었다.프론트 앤드에서의 기능은 아래 김도형님의 블로그를 참고하는 것으로 충분할 듯하다.나도 mdx를 이용해 블로그를 만드는데는 채...
Caddy를 이용한 Nextjs 무중단 배포(로컬서버)
Caddy를 이용한 Nextjs 무중단 배포(로컬서버)
홈페이지에 뭔가 자꾸 얹고 싶은 욕심이 들 때 마다 빌드를 했더니, 그 사이에 가끔 접속하는 사람이 종종 있긴 한것 같다.그러다 보니 서치콘솔에서 점수가 점점 하락하는 현상이 발생했다.이대로는 안될 것 같아 무중단 배포를 하는 방법을 생각해 보게 되었다.1. 대표적인 ...
구글 검색 색인 자동화 - Web Search Indexing API
구글 검색 색인 자동화 - Web Search Indexing API
지난번 IndexNow에 이어, 구글도 자동화를 해보기로 했다.찾아보니 구글은 API로 Web Search Indexing이라는 걸 지원하고 있었다.1. 허용범위공식적으로 해당 API가 지원하는 범위는 채용공고와 스트리밍 영상 서비스이다.실시간이 중요한 내용에 대해 색...
검색 색인 생성 자동화 - IndexNow
검색 색인 생성 자동화 - IndexNow
Bing에 검색등록을 하다가 알게 되었는데, Bing에서는 IndexNow라는 기능을 제공한다.핵심은 API 키를 이용해서 글을 쓰자마자 바로 색인 요청을 날릴 수 있다는 것.아래와 같은 요청을 fetch로 만들고, 글쓰기에 연동해 놓으면 글을 DB에 저장함과 동시에 ...
Nextjs, React 서버 해킹당한 경험 - React2Shell
Nextjs, React 서버 해킹당한 경험 - React2Shell
맨 처음 보안 이슈를 접했던건 12월 5일 새벽이었다.리액트에서 인증 없이 원격 코드 실행이 가능하다는 것.해당 뉴스를 접하고 다른 사람에게 알렸지만, 나는 괜찮으려니 싶어 아무 생각없이 넘겼다.1. 해킹 흔적 발견그런데 블로그 코드를 업데이트 하려고 접속했더니 터미널...
블로그에 다국어 기능 추가하기(NextJS, next-intl, Vercel AI SDK)
블로그에 다국어 기능 추가하기(NextJS, next-intl, Vercel AI SDK)
최근 블로그에 다국어 기능이 필요하다는 생각이 들었다.그래서 next-intl을 이용해 다국어 서비스를 구현해보기로 했다.1.i18n먼저 다국어 서비스를 할 때는 지켜야 할 원칙들이 있다.이걸 internationalization이라고 하는데, 무척 길기에 첫글자 i와...

댓글을 불러오는 중...