Fancy Curl Sites
터미널에서 보는 Curl 사이트 만들기
블로그 전체를 ANSI 색상 코드가 포함된 텍스트로 제공하는 방법을 설명합니다. 저자는 자체 마크업 언어와 정적 사이트 생성기를 활용해 페이지를 만들고, Nginx 설정으로 curl 요청을 구분했습니다. 댓글에서는 Accept 헤더를 활용하는 편이 표준에 맞는지 논의합니다.
- 주제
에디터 노트
이 구현의 편의성은 기존 사이트 생성기 구조에 달려 있습니다. Gemroff가 ANSI 텍스트 출력을 이미 지원했고 생성기가 여러 출력 형식을 다뤘기에 블로그 전체를 정적 파일로 만들 수 있었습니다. 저자도 이 조건이 없으면 몇 페이지를 손으로 작성하는 방법을 제안합니다. 댓글에서는 curl의 User-Agent를 기준으로 응답을 바꾸는 대신 Accept 헤더로 형식을 고르는 방법을 제기합니다. 이 방식은 요청자가 원하는 표현 형식을 명시한다는 점에서 더 직접적인 선택입니다. 다만 원문은 X-Original 헤더로 일반 응답을 되돌리는 설계를 설명하고, Accept 헤더 처리나 두 방식의 장단점은 다루지 않습니다. 이 사례에서 확인되는 것은 구현 방법이지 어떤 협상 방식이 더 적절한지에 대한 비교는 아닙니다.
AI 요약
저자는 터미널에서 읽을 수 있는 Curl 사이트를 구현한 과정을 설명합니다. 아이디어는 trinkey.com과 proot.party에서 얻었지만, 구현 방식은 달랐습니다. 첫 화면과 소개 페이지는 ANSI 이스케이프 코드를 참고해 직접 작성했고, 블로그 게시물 전체는 기존 정적 사이트 생성기에 텍스트 출력 형식을 연결해 만들었습니다.
페이지 생성
저자가 만든 마크업 언어 Gemroff는 4년 전부터 ANSI 형식의 일반 텍스트 출력을 지원했습니다. 처음에는 초안 내용을 터미널에서 미리 보려는 기능이었지만, 정적 사이트 생성기에 연결해 블로그 전체를 Curl용 페이지로 출력할 수 있었습니다. 게시물용 래퍼 템플릿과 글 목록 템플릿을 추가하고 생성기 코드도 조금 수정했습니다. HTTP, Gemini, Gopher용 출력 형식을 모듈식으로 지원하던 구조가 이 작업에 도움이 됐습니다. 저자는 이런 기반이 없다면 손으로 작성한 페이지 몇 개만 제공해도 충분하다고 덧붙입니다.
서버 응답
저자는 Nginx 설정을 바꿔 User-Agent에 curl이 포함된 요청에 ANSI 텍스트 페이지를 제공합니다. 다만 일반 HTTP 응답을 원하는 사용자를 위해 X-Original: true 헤더를 보내면 원래 응답을 받을 수 있도록 했습니다. 페이지는 계속 정적 파일로 제공합니다.
Lobsters 반응
- @JulianSildenLanglo — 마지막 단계는 User-Agent에 curl이 포함된 요청에 Curl 버전 사이트를 제공하는 일입니다. 저자는 Nginx 설정을 몇 군데 바꿨고, 다른 서버도 비슷하게 간단할 것이라고 합니다. 일반 HTTP 응답을 원하는 사람이 쓸 수 있도록 X-Original: true 헤더를 두었다는데, Accept 헤더가 바로 이런 용도 아닌가요? 예를 들어 curl nytpu.com/gemlog/2026-03-18 -H "Accept: text/html"처럼요.
- @vbernat — 좋은 아이디어네요. 글에서 언급한 다른 두 사이트는 Curl로 요청하면 HTML을 반환합니다.
- @tinthedev — 저는 이 방식을 건너뛰었습니다. curl tinthe.dev는 HTML을 반환하고, 기본 응답을 바꿀 이유를 모르겠습니다. 아주 드문 사용 사례처럼 보입니다. 사람들이 사이트에 curl을 쓰나요? 대신 Accept: text/markdown을 보내거나 .md 페이지를 요청할 수 있도록 페이지에 대체 형식 링크를 넣었습니다. 화면 읽기 프로그램과 LLM을 포함한 다른 기기에도 맞게 전체 페이지와 게시물을 다듬었습니다. X-Original 헤더가 적절한 방식인지는 모르겠습니다. curl과 헤더를 쓸 줄 알면서 Accept: text/html은 모르는 사용자가 얼마나 될까요? 구현을 보니 Accept 헤더는 무시하는 것 같습니다. Curl 출력 상단에 다른 방식이 있다고 안내하는 숨김 지침을 넣고 싶어졌지만, 점점 효용이 줄어드는 지점에 온 것 같네요.
- @DustyFuzzy — curl tinthe.dev가 HTML을 반환하는데 기본값을 바꿀 이유가 뭔가요? 재미 때문이겠죠.
- @tinthedev — 제 댓글에는 조금 더 내용이 있었습니다. 사람들이 실제로 재미로 사이트에 curl을 쓰는지 궁금했습니다. 저자와 영감을 준 사이트를 이번에 처음 알았습니다. 정말 궁금해서 묻습니다.
- @JulianSildenLanglo — curl tinthe.dev는 301 Moved Permanently만 반환합니다. 스키마를 붙이면 접속되네요.
- @tinthedev — curl은 서버에 요청을 보내기 전부터 http://를 기본으로 붙이므로, 그 301은 HTTPS로 보내는 응답입니다. 우회할 방법을 찾으셨는지 궁금하네요.
원문: 개인 블로그 / 번역·요약: Trawling