Lavandula - C로 웹 프레임워크를 만들었어요
(github.com/ashtonjamesd)- Lavandula는 C 언어 기반의 경량 웹 프레임워크로서, 현대적인 웹 애플리케이션 개발을 위해 설계됨
- 직관적이고 빠른 개발 환경을 제공하며, 불필요한 기능 없이 생산성과 성능에 중점을 둠
- 컨트롤러/라우팅 시스템, 미들웨어 파이프라인, 테스트 프레임워크, SQLite/JSON 라이브러리 등 필수 기능을 대부분 포함함
- 향후 ORM, 세션 쿠키, 정적 파일 서빙, 다양한 데이터베이스 연동 등 기능 확장이 예정되어 있음
- CLI 기반의 빠른 프로젝트 생성, 내장 유닛 테스트, 환경 변수·로깅 지원 등으로 개발자 편의성 극대화임
Lavandula: 경량의 고성능 C 웹 프레임워크 개요
- Lavandula는 현대적인 웹 애플리케이션을 빠르고 간단하게 만들 수 있도록 설계된 C 언어 경량 웹 프레임워크
- 주요 목표는 심플함, 빠른 속도, 높은 생산성으로, 복잡한 기능보다는 꼭 필요한 부분에 집중하며, 무거운 프레임워크의 불필요함을 줄인 형태
주요 특징 및 효용성
- C 기반으로 제작되어 최소한의 의존성만 포함
- 컨트롤러와 라우팅 시스템을 제공하여 쉽게 HTTP 엔드포인트 구성 가능
- GET, POST 등 HTTP 메서드 지원 및 로컬/글로벌 미들웨어 파이프라인 탑재
- CLI 툴(lavu) 를 통한 빠른 프로젝트 생성과 실행이 지원됨
- 내장 유닛 테스트 프레임워크, 환경 변수 처리, 로깅, SQLite 통합, JSON 라이브러리 내장
현재 완성된 기능
- 컨트롤러/라우팅 시스템
- HTTP 메서드별 엔드포인트 지원 (GET, POST 등)
- 미들웨어 파이프라인 (로컬/글로벌)
- 최소 의존성 (순수 C 코드 기반)
- CLI로 간편한 프로젝트 스캐폴딩
- 내장 유닛 테스트 프레임워크
- 환경 변수 지원, 로깅 시스템
- SQLite/내장 JSON 라이브러리 통합
개발 진행 중인 기능
- HTTP JSON 바디 파싱
- 세션 쿠키
- CORS 정책 설정
- Lavender ORM
- ELA(Embedded Lavandula) HTML 템플릿 엔진
향후 계획(로드맵)
- 레이트 리미팅
- 정적 파일 서빙
- PostgreSQL, MySQL 연동
- 의존성 주입 프레임워크 후보
- 등록 가능 엔드포인트/라우트 리스트 자동화
- JSON 모델 및 CRUD 함수 자동생성 ('lavu model' 명령어 이용)
- URL 파라미터 처리 및 동적 라우팅
프로젝트 생성 및 실행 방법 개요
-
CLI 명령어:
lavu new my-project
로 프로젝트 폴더 및 기본 구조 자동 생성됨 -
자동 생성되는 파일:
- 설정파일(lavandula.yml)
- 메인/컨트롤러/라우트 소스
- makefile
- 테스트 코드 등
- 빠른 실행: 폴더 이동 후
lavu run
으로 바로 로컬 서버 실행 가능, 기본 포트http://localhost:3000/
라이선스 및 기타 정보
- 라이선스: MIT License
- 오픈소스 정신에 맞추어 누구나 개선/참여 가능함
- C(97.3%) 기반으로 작성되어 있으며, Makefile/Shell script 일부 포함됨
Lavandula가 주는 장점 요약
- C 언어 생태계에서 매우 드문 완전한 웹 프레임워크로, 리소스가 제한된 환경 또는 초고속 서버 구현에 탁월함
- 인기 있는 프레임워크 대비 더 빠른 속도와 낮은 오버헤드로 특화됨
- CLI, 내장 툴, 미니멀 구조로 학습 곡선이 짧고 생산성이 높음
Hacker News 의견
- 최근 본 C 코드 중 가장 깔끔하고 모던하며 아름다운 코드임을 느꼈음, 이 코드는 커널은 아니지만, #ifdef 조건문이나 언더스코어가 많은 대형 프로젝트와 비교하면 오히려 C의 미적 감각을 배울 수 있는 좋은 예제라 생각함, 특히 이런 방식으로 테스트 코드를 C에서 작성한 것은 처음 봄, 멋진 작업임, 중·고등학생 시절 C로 첫 프로그래밍 언어를 배웠는데, 집에 있던 PC에 무료 소프트웨어를 설치하며 대부분의 프로그램이 C로 만들어졌다는 사실을 알게 됨, 컴퓨터공학을 대학에서 처음 정식으로 접했을 때 C++로 자료구조와 알고리즘을 했지만 포인터를 이미 이해해 쉽게 적응할 수 있었음, 여러 복잡한 요소를 피하면 C는 매우 깔끔하고 단순한 언어임을 알 수 있음, 물론 그 복잡성에 직접 접근할 수 있다는 점이 C의 매력이지만 적절한 균형이 중요하다고 생각함
- 포인터 이해가 어렵다는 이야기를 자주 듣는데, 실제로 그렇게 힘든 것인지 잘 모르겠음, 처음 배울 때 15분 만에 대충 감을 잡았던 기억임, 물론 능숙해지는 데에는 더 시간이 걸렸겠지만 포인터가 신화적인 난이도로 여겨지는 이유를 잘 이해 못함, 이번 프로젝트 역시 멋지다고 생각함, 다만 이런 프로젝트가 구직자의 포트폴리오에 올랐다가 곧 아카이브되고 잊히지 않기를 바람
- 코드에 칭찬을 해주신 것이 정말 큰 의미가 있음, 항상 코드를 그렇게 만들려고 많은 노력을 들이고 있는데, 이런 말을 들을 수 있어 감사함
- 과도하게 진지하게 이 프로젝트를 비판하거나, “PHP 대체 가능성” 따위로 의미 없는 분석을 하지 않았으면 함, 이 프로젝트는 C 언어로 멋진 도전을 해본 훌륭한 예시라 생각함, HTML 템플릿이 추가된다면 완성형 프레임워크로 발전할 수 있을 것 같음
- 좋은 말씀 정말 감사함, HTML 템플릿은 우선순위 목록에 있고 나중에 재미있게 구현할 예정임
- 재미로 C를 배우는 중인데, 이 프로젝트 정말 멋지다고 생각함
- 코드가 매우 읽기 쉽고 잘 구성되어 있음, 다만 error checking이 거의 없어서 snprintf, malloc 등에서 반환값을 확인하지 않는 부분이 많음, 여기에 미사용 루프도 존재함, 병렬 처리 부분은 아직 지원하지 않는 것 같아 당장 문제는 아니나 웹서버 특성상 향후 threading 도입이 유리함, 구현을 고려할 때는 libuv 같은 라이브러리 사용을 추천함
- 피드백을 정성껏 주셔서 감사함, 병렬 처리는 나중에 추가하기로 계획했어서 언급해 주셔서 좋았음
- Jetzig이라는 비슷한 프레임워크를 재미있게 써봤는데 이번 프로젝트도 매우 좋게 봄, BSD C CGI와 Postgres 조합 역시 좋아하고, 주로 Python을 다루지만 저수준 언어와 메모리 개념을 직접적으로 경험하는 것이 정말 재미있음, 현실성을 지적하는 이들도 있지만 임베디드 디바이스가 더 널리 퍼질수록 이런 저수준 프레임워크의 가치가 더 높아질 것 같음, pico calc로도 실험 중인데, 만약 그를 위한 "모바일 앱"을 만든다면 C로 프레임워크 코드를 작성할 것임, 멋진 작업임
- 내 생각에 이 프로젝트 정말 멋짐, 셋업이 쉽게 읽히고 C 퍼포먼스를 누릴 수 있다면 이득임, 특히 Claude 같은 AI로 프레임워크 일부를 쉽게 만들어내서 필요시 필요한 만큼만 추가하고, 가볍고 플랫폼 독립적인 웹 프레임워크를 직접 구성할 수 있다는 게 장점임, 상당히 퍼포먼스도 잘 나올 것이라 기대함
- 유지보수 악몽 체크리스트:
- 웹 프레임워크는 계속 변화하는 표준 때문에 애초에 유지보수가 어려움
- AI가 쓴 코드라 어느 누구도 어떻게 동작하는지 명확히 모를 수 있음
- C로 작성됨
개인적으로 순수 C의 단순함이 마음에 들긴 하지만, AI가 쓴 C 기반 네트워크 코드 조합은 다소 두렵기도 함
- 유지보수 악몽 체크리스트:
- C로 HTTP 파서를 처음부터 직접 짜는 것은 매우 위험하다고 생각함, 엄청난 취약점이 생길 수 있어서 실제 배포를 염두에 두고 웹 프레임워크를 만들 때는 libmicrohttpd, libevent_http, fastcgi 등 검증된 라이브러리에서 출발하는 것이 안전함
- 이런 경고에 크게 공감함, 그렇다면 도대체 어떻게 하면 C로 안전한 HTTP 서버를 만들 수 있을지 궁금함, 정말 흥미로운 책 소재가 될 것 같음, 매 챕터마다 취약점을 짚어가며 성숙한 HTTP 라이브러리가 되는 구조적 방법을 다루면 흥미로울 것임
- 실제로 이 프로젝트가 운영 환경에 쓰일 일은 없을 것으로 보지만, 혹시라도 그런 생각이 든다면 단념하길 바람
- unsolicited 피드백임, appRoute 매크로가 타입과 시그니처를 모호하게 만들고 불필요한 간접화를 도입한다고 생각함, 제거하는 게 좋을 듯함, 그리고 AppContext 타입은 실제로 App+HTTP Request+DB 등 기능이 섞여 있어 RequestContext 또는 ControllerContext 등이 더 적합할 듯함, 그 외 다른 이들처럼 코드의 깔끔함에 감탄했고, 정말 멋진 노력임
- 매크로의 활용 덕분에 많은 일이 가능하다는 점을 보여줌, 실제로 현대 웹 프레임워크들도 각 언어의 메타프로그래밍 등 복잡한 도구를 적극적으로 활용함, 직접 만들어본 점을 크게 칭찬하며, 힘든 일이지만 분명히 재미있는 일이기도 함, "왜 만들었냐"는 질문도 있는데 굳이 이유가 필요하지 않다고 생각함, 순수하게 개발 그 자체를 즐기기 때문임
- 정말 고맙고, 전적으로 공감함
- 하드웨어 벤더들이 이 프로젝트를 입양해서 관리 웹 페이지 품질이 좀 더 좋아지기를 기대함
- 정성스럽게 짜여진 좋은 아이디어의 프로젝트임에도 불구하고 부정적인 반응이 많은 게 놀라움, Ashton이 이번에 쌓은 실력은 앞으로도 사라지지 않을 소중한 자산임
- 그렇게 평가해줘서 정말 감사하다는 마음임