서버 프레임워크를 다시 만들었다.
do4ng
2025-12-21

개인 사이드 프로젝트에 사용하던 nodejs 기반 서버 프레임워크를 다시 만들었다.

큰 이유가 있는건 아니다.
기존 사이드 프로젝트에만 사용하는거라고 해도 업데이트할때마다 몇 개씩 하자가 생길정도로 안정성이 떨어졌었다. 버그 고칠때마다 너무 힘들어서 처음부터 탄탄하게 만들자해서 만들게 되었다.

목표는

  1. 가볍고
  2. 빠르고
  3. 버그가 없으면 된다.

어릴때부터 제대로 정신교육이 안된 상태로 코딩해서 '안되면 다시하지'라는 마인드가 있었는데 이 마인드를 고치기도 할 겸 최대한 테스트코드를 작성하면서 만들었다. (나름 30개정도의 테스트를 구현함)

#구상

기존 서버 프레임워크를 다시 만드는 것이기 때문에 최대한 기존 기능을 살리면서 업그레이드하는 식으로 진행했다.


번들러 선택

가장 큰 고민은 타입스크립트를 로드하기 위한 번들러를 선택하는 것이였다.
얼마전에 rolldown이라는 번들러가 나왔다. esbuild 쓸까 rolldown 쓸까 내가 만든 번들러 (swc기반)를 쓸까

굳이 특징을 나열해보자면

이름특징총평
rolldown새로나옴. 써보고 싶음. 왠만한 번들러보다 빠르다는데 솔직히 잘 모르겠음.흠...
esbuild아는 맛이 무서운 법. 체감상 가장 빠름.음...
serpack (자체 번들러)내가 만들어서 내 입맛대로 바꿀 수 있다는 장점이 있지만 굳이..이건 아닌듯

(webpack이랑 rollup같은 자바스크립트 기반 번들러는 위에 번들러에 비해 너무 느려서 생각도 안함)

얼마전에 알았는데 rspack이라는 webpack 대체 번들러도 나왔다고 함

이 중에서 가장 써보고 싶은 rolldown으로 선택했다.

Web standard?

사전조사하던 중 요즘 서버 프레임워크들은 web standard를 준수한다라고 해서 궁금해서 찾아봤는데 이게 edge?에서도 구동될 수 있게 해준다는데, 지식이 없어서 pass

프레임워크 vs 라이브러리

프레임워크는 별도의 코드를 작성하지 않아도 서버를 시작할 수 있다는 장점이 있지만 조금만 커스텀할려고 해도 여러 제약이 생기는 문제가 있지만, 내가 만드는 것이므로 내가 그때그때 수정할 수 있기 때문에 프레임워크로 선택

페이지 라우터 구상

최대한 간결하면서도 멋있게 구상했다.

Typescript
import { defineRouter } from 'dobs';
 
export default defineRouter((req, res) => {
  res.send('Example');
});

#사용

이번꺼는 좀 제대로 만들어서 CLI를 이용해서 템플릿을 다운로드할 수 있다.

Terminal
yarn create dobs

그리고 소스코드도 github에 올려놨다.

#여담

조금 관련없는 이야기지만, 블로그 테마를 업데이트했다.
블랙에서 화이트로 바꾸고 메인화면에 포스트카드도 조금 만졌는데 깔끔하고 더 이쁜 것 같다.

AfterBefore

그리고 원래 글만 싸고 갈려고 했는데 이 웹사이트를 돌리는 프레임워크의 라우터쪽에서 약간 발견하지 못한 버그를 찾아서 고치느라 2시간걸릴거 4시간정도 걸린 것 같다. (원래 글쓰는거에 재능이 없어서 좀 오래걸림)

또 npm 로그아웃이 됐는데, 아무리 재전송을 해도 otp가 도착을 안해서 로그인을 못하고 있다.

마지막으로 구글 콘솔에 아무리 사이트맵을 등록해도 계속 실패한다. 기분이 좋지 않다.