10년의 영향력: npm 패키지가 10억 다운로드를 달성하고 JavaScript에 영향을 미친 과정

에서 자바 스크립트 그리고 노드.js 세계에서 가장 필수적인 패키지 중 일부는 매일 수백만 번 다운로드되고 전 세계 앱을 구동합니다. 이러한 도구 뒤에는 오픈 소스 품질에 집중하는 개발자들이 있습니다. 오늘은 저희 팀이 JavaScript 생태계의 핵심 요소가 된 npm 패키지를 어떻게 빌드하고 유지 관리하는지 보여드리겠습니다.

우리를 신뢰하는 선구자들: Isaac Z. Schlueter와 Forward Email

우리는 자랑스럽게 생각합니다 아이작 Z. 슐루터 (GitHub: isaacs)을 사용자로 사용합니다. Isaac이 만들었습니다. 해발 그리고 건설하는 데 도움이 되었습니다 노드.jsForward Email에 대한 그의 신뢰는 저희가 품질과 보안에 중점을 두고 있음을 보여줍니다. Isaac은 izs.me를 포함한 여러 도메인에서 Forward Email을 사용하고 있습니다.

Isaac은 JavaScript에 지대한 영향을 미쳤습니다. 2009년, 그는 Node.js의 잠재력을 가장 먼저 알아본 사람 중 한 명이었습니다. 라이언 달플랫폼을 만든 사람입니다. Isaac이 말했듯이 Increment 매거진 인터뷰: "서버 측 자바스크립트를 구현하는 방법을 알아내려고 애쓰는 사람들로 구성된 아주 작은 커뮤니티에서, Ryan Dahl이 Node.js를 내놓았는데, 이는 분명 옳은 접근 방식이었습니다. 저는 Node.js에 제 아이디어를 반영하여 2009년 중반쯤부터 본격적으로 참여하게 되었습니다."

[!NOTE] Node.js의 역사에 관심 있는 분들을 위해 Node.js의 개발 과정을 기록한 훌륭한 다큐멘터리가 있습니다. Node.js의 이야기 그리고 Node.js에 대해 후회하는 10가지 - Ryan Dahl. 라이언 달의 개인 웹사이트 또한 그의 작업에 대한 귀중한 통찰력도 담겨 있습니다.

npm의 탄생부터 Node.js 리더십까지

Isaac은 2009년 9월에 npm을 개발했고, 2010년 초에 첫 번째 사용 가능한 버전을 출시했습니다. 이 패키지 관리자는 Node.js의 핵심 요구 사항을 충족하여 개발자가 코드를 쉽게 공유하고 재사용할 수 있도록 했습니다. Node.js 위키피디아 페이지2010년 1월, Node.js 환경을 위한 npm이라는 패키지 관리자가 도입되었습니다. 이 패키지 관리자를 통해 프로그래머는 Node.js 패키지와 함께 제공되는 소스 코드를 게시하고 공유할 수 있으며, 패키지의 설치, 업데이트 및 제거를 간소화하도록 설계되었습니다.

2012년 1월 Ryan Dahl이 Node.js에서 물러나자 Isaac이 프로젝트 리더를 맡았습니다. 그의 요약그는 "CommonJS 모듈 시스템, 파일 시스템 API, 스트림을 포함한 여러 기본 Node.js 핵심 API 개발을 주도"했으며, "2년 동안 프로젝트의 BDFL(Benevolent Dictator For Life) 역할을 수행하여 Node.js 버전 v0.6부터 v0.10까지 품질이 지속적으로 향상되고 안정적인 빌드 프로세스가 보장되도록 했습니다."

아이작은 Node.js가 중요한 성장기를 거치는 동안 이끌어 오늘날까지도 플랫폼의 근간을 이루는 기준을 확립했습니다. 이후 2014년에는 npm, Inc.를 설립하여 이전에 직접 운영했던 npm 레지스트리를 지원했습니다.

우리는 Isaac의 JavaScript 개발에 대한 큰 공헌에 감사하며, 그가 만든 많은 패키지를 계속 사용하고 있습니다. 그의 업적은 소프트웨어 개발 방식과 전 세계 수백만 명의 개발자가 코드를 공유하는 방식을 변화시켰습니다.

코드 뒤에 숨은 건축가: 닉 바우의 여정

오픈 소스 성공의 중심에는 Forward Email의 창립자이자 소유주인 Nick Baugh가 있습니다. 그는 거의 20년에 걸쳐 JavaScript 분야에서 활동하며 수많은 개발자들의 앱 개발 방식에 지대한 영향을 미쳤습니다. 그의 오픈 소스 여정은 뛰어난 기술력과 커뮤니티 리더십을 모두 보여줍니다.

Express 기술위원회 및 핵심 기여

Nick의 웹 프레임워크 전문성 덕분에 그는 다음 자리를 차지했습니다. 익스프레스 기술 위원회, 그는 가장 많이 사용되는 Node.js 프레임워크 중 하나를 도왔습니다. Nick은 현재 비활성 회원으로 등록되어 있습니다. 익스프레스 커뮤니티 페이지.

[!중요] Express는 Node.js 생태계의 많은 부분을 형성해 온 다작의 오픈 소스 기여자인 TJ Holowaychuk에 의해 처음 만들어졌습니다. TJ의 초석적인 업적에 감사드리며 존경을 표합니다. 휴식을 취하기로 결정하다 그의 광범위한 오픈 소스 기여를 통해서입니다.

회원으로서 익스프레스 기술 위원회, Nick은 명확화와 같은 문제에 대해 세부 사항에 큰 관심을 보였습니다. req.originalUrl 문서화 및 다중 파트 양식 처리 문제 해결.

Koa 프레임워크 기여

Nick의 작업 Koa 프레임워크—TJ Holowaychuk이 만든 Express의 현대적이고 가벼운 대안 — 은 더 나은 웹 개발 도구에 대한 그의 헌신을 더욱 잘 보여줍니다. 그의 Koa 기여에는 풀 리퀘스트를 통한 이슈 및 코드 작성, 오류 처리, 콘텐츠 유형 관리, 문서 개선 등이 포함됩니다.

Express와 Koa를 모두 아우르는 그의 작업은 Node.js 웹 개발에 대한 독특한 관점을 제공하며, 이를 통해 우리 팀이 여러 프레임워크 생태계에서 원활하게 작동하는 패키지를 만드는 데 도움이 됩니다.

개인 기여자에서 조직 리더로

기존 프로젝트를 지원하는 것으로 시작된 것이 전체 패키지 생태계를 구축하고 유지하는 것으로 발전했습니다. Nick은 다음을 포함한 여러 GitHub 조직을 설립했습니다. 선실, 스팸 스캐너, 이메일 전달, 허락하다, 그리고 브리—각각 JavaScript 커뮤니티의 특정 요구 사항을 해결합니다.

기여자에서 리더로의 이러한 변화는 실제 문제를 해결하는 잘 설계된 소프트웨어에 대한 Nick의 비전을 보여줍니다. 그는 GitHub 조직에 따라 관련 패키지를 체계적으로 정리함으로써, 더 넓은 개발자 커뮤니티를 위해 모듈화되고 유연하면서도 함께 작동하는 도구 생태계를 구축했습니다.

GitHub 조직: 혁신 생태계

저희는 JavaScript의 특정 요구 사항을 해결하는 데 중점을 둔 GitHub 조직을 중심으로 오픈 소스 작업을 구성합니다. 이러한 구조는 모듈성을 유지하면서도 서로 원활하게 작동하는 응집력 있는 패키지 패밀리를 형성합니다.

Cabin: 현대 애플리케이션을 위한 구조화된 로깅

그만큼 객실 정리 간단하고 강력한 앱 로깅에 대한 우리의 견해입니다. 주요 cabin 이 패키지는 GitHub 스타가 거의 900개이고 주간 다운로드 수가 10만 건이 넘습니다[^1]. Cabin은 Sentry, LogDNA, Papertrail과 같은 인기 서비스와 호환되는 구조화된 로깅을 제공합니다.

Cabin을 특별하게 만드는 것은 사려 깊은 API와 플러그인 시스템입니다. 다음과 같은 지원 패키지가 있습니다. axe Express 미들웨어 및 parse-request HTTP 요청 구문 분석을 위해 분리된 도구가 아닌 완전한 솔루션을 제공하려는 우리의 노력을 보여주세요.

그만큼 bson-objectid 이 패키지는 단 두 달 만에 170만 건 이상 다운로드되어 특별히 언급할 가치가 있습니다[^2]. 이 가벼운 MongoDB ObjectID 구현은 MongoDB에 완전히 종속되지 않은 ID가 필요한 개발자에게 필수적인 솔루션이 되었습니다.

스팸 스캐너: 이메일 남용 방지

그만큼 스팸 스캐너 조직 실제 문제 해결에 대한 우리의 헌신을 보여줍니다. 주요 spamscanner 패키지는 고급 이메일 스팸 감지 기능을 제공하지만 url-regex-safe 놀라운 채택률을 보이는 패키지입니다.

2개월 만에 120만 건 이상 다운로드[^3] url-regex-safe 다른 URL 탐지 정규 표현식의 심각한 보안 문제를 해결합니다. 이 패키지는 오픈 소스에 대한 저희의 접근 방식을 보여줍니다. 즉, 공통적인 문제(이 경우)를 찾아내는 것입니다. 다시 실행 URL 검증의 취약점을 파악하고, 견고한 솔루션을 만들고, 신중하게 유지 관리합니다.

Bree: Worker Threads를 활용한 최신 작업 스케줄링

그만큼 브리 조직 Node.js의 공통적인 과제인 안정적인 작업 스케줄링에 대한 우리의 해답입니다. 주요 bree 3,100개가 넘는 GitHub 별점을 받은 이 패키지는 더 나은 성능과 안정성을 위해 Node.js 워커 스레드를 사용하는 최신 작업 스케줄러를 제공합니다.

[!NOTE] Bree는 우리가 유지 관리하는 데 도움을 준 후 만들어졌습니다. 의제, 배운 내용을 적용하여 더 나은 작업 스케줄러를 구축했습니다. 저희의 의제 기여는 작업 스케줄링 개선 방안을 찾는 데 도움이 되었습니다.

Bree를 Agenda와 같은 다른 스케줄러와 차별화하는 요소는 다음과 같습니다.

  • 외부 종속성 없음: MongoDB가 필요한 Agenda와 달리 Bree는 작업 상태를 관리하기 위해 Redis나 MongoDB가 필요하지 않습니다.
  • 워커 스레드: Bree는 샌드박스 프로세스에 Node.js 워커 스레드를 사용하여 더 나은 격리성과 성능을 제공합니다.
  • 간단한 API: Bree는 단순성과 함께 세부적인 제어 기능을 제공하여 복잡한 일정 관리 요구 사항을 쉽게 구현할 수 있도록 해줍니다.
  • 내장 지원: 우아한 재로딩, 크론 작업, 날짜, 사용자에게 친숙한 시간 등이 기본적으로 포함됩니다.

브리는 핵심적인 부분입니다 forwardemail.net이메일 처리, 정리, 예정된 유지 관리와 같은 중요한 백그라운드 작업을 처리합니다. Forward Email에서 Bree를 사용하는 것은 프로덕션 환경에서 자체 도구를 사용하여 높은 안정성 기준을 충족한다는 당사의 의지를 보여줍니다.

우리는 또한 다음과 같은 다른 훌륭한 작업자 스레드 패키지를 사용하고 높이 평가합니다. 수영장 그리고 HTTP 클라이언트와 같은 열하나. 피시나는 브리처럼 효율적인 작업 처리를 위해 Node.js 워커 스레드를 사용합니다. 감사합니다. 매튜 힐undici와 piscina를 모두 관리하는 Matteo는 Node.js에 크게 기여한 공로를 인정받았습니다. Matteo는 Node.js 기술 운영 위원회 위원으로 활동하며 Node.js의 HTTP 클라이언트 기능을 크게 개선했습니다.

이메일 전달: 오픈 소스 이메일 인프라

우리의 가장 야심찬 프로젝트는 이메일 전달이메일 전달, 저장 및 API 서비스를 제공하는 오픈 소스 이메일 서비스입니다. 주요 저장소는 1,100개가 넘는 GitHub 별점[^4]을 받았으며, 이는 독점 이메일 서비스의 대안으로 여겨지는 이 서비스에 대한 커뮤니티의 호평을 보여줍니다.

그만큼 preview-email 이 조직의 패키지는 두 달 만에 250만 건 이상 다운로드[^5]되었으며, 이메일 템플릿을 사용하는 개발자에게 필수적인 도구로 자리 잡았습니다. 개발 과정에서 이메일을 간편하게 미리 볼 수 있는 기능을 제공함으로써 이메일 지원 애플리케이션 개발 과정에서 흔히 발생하는 어려움을 해결합니다.

Lad: 필수 Koa 유틸리티 및 도구

그만큼 젊은 조직 Koa 프레임워크 생태계 강화에 중점을 둔 필수 유틸리티와 도구 모음을 제공합니다. 이 패키지들은 웹 개발에서 흔히 발생하는 문제를 해결하며, 독립적으로 유용성을 유지하면서도 서로 원활하게 연동되도록 설계되었습니다.

koa-better-error-handler: Koa에 대한 향상된 오류 처리

koa-better-error-handler Koa 애플리케이션에 더 나은 오류 처리 솔루션을 제공합니다. GitHub 별점 50개 이상을 받은 이 패키지는 ctx.throw Koa 내장 오류 처리기의 여러 제한 사항을 해결하면서 사용자 친화적인 오류 메시지를 생성합니다.

  • Node.js DNS 오류, Mongoose 오류 및 Redis 오류를 감지하고 적절하게 처리합니다.
  • 용도 일관되고 잘 구성된 오류 응답을 작성하기 위해
  • 헤더를 보존합니다(Koa의 내장 핸들러와 달리)
  • 기본값인 500을 유지하는 대신 적절한 상태 코드를 유지합니다.
  • 플래시 메시지 및 세션 보존을 지원합니다.
  • 검증 오류에 대한 HTML 오류 목록을 제공합니다.
  • 다양한 응답 유형(HTML, JSON, 일반 텍스트)을 지원합니다.

이 패키지는 특히 다음과 함께 사용할 때 가치가 있습니다. koa-404-handler Koa 애플리케이션의 포괄적인 오류 관리를 위해.

여권: Lad 인증

@ladjs/passport 최신 웹 애플리케이션을 위한 특정 기능 향상을 통해 널리 사용되는 Passport.js 인증 미들웨어를 확장합니다. 이 패키지는 기본적으로 다양한 인증 전략을 지원합니다.

  • 이메일을 통한 로컬 인증
  • Apple로 로그인
  • GitHub 인증
  • 구글 인증
  • 일회용 비밀번호(OTP) 인증

이 패키지는 사용자 정의가 매우 용이하여 개발자가 애플리케이션 요구 사항에 맞게 필드 이름과 구문을 조정할 수 있습니다. Mongoose와 완벽하게 통합되어 사용자 관리를 지원하도록 설계되어 강력한 인증이 필요한 Koa 기반 애플리케이션에 이상적인 솔루션입니다.

우아한: 우아한 애플리케이션 종료

@ladjs/graceful Node.js 애플리케이션을 정상적으로 종료하는 중요한 과제를 해결합니다. 70개 이상의 GitHub 별점을 받은 이 패키지는 데이터 손실이나 연결 끊김 없이 애플리케이션이 정상적으로 종료되도록 보장합니다. 주요 기능은 다음과 같습니다.

  • HTTP 서버를 정상적으로 닫는 기능 지원(Express/Koa/Fastify)
  • 데이터베이스 연결의 완전한 종료(MongoDB/Mongoose)
  • Redis 클라이언트의 적절한 종료
  • Bree 작업 스케줄러 처리
  • 사용자 정의 종료 핸들러 지원
  • 구성 가능한 시간 초과 설정
  • 로깅 시스템과의 통합

이 패키지는 예기치 않은 종료로 인해 데이터 손실이나 손상이 발생할 수 있는 프로덕션 애플리케이션에 필수적입니다. 적절한 종료 절차를 구현하면 @ladjs/graceful 애플리케이션의 신뢰성과 안정성을 보장하는 데 도움이 됩니다.

Upptime: 오픈 소스 가동 시간 모니터링

그만큼 업타임 조직 투명하고 오픈 소스 모니터링에 대한 우리의 헌신을 나타냅니다. 주요 upptime 저장소는 13,000개가 넘는 GitHub 별점을 받았으며, 이는 저희가 기여하는 가장 인기 있는 프로젝트 중 하나입니다. Upptime은 서버 없이도 완벽하게 작동하는 GitHub 기반 가동 시간 모니터 및 상태 페이지를 제공합니다.

우리는 우리의 상태 페이지에 Upptime을 사용합니다. https://status.forwardemail.net 소스 코드는 다음에서 사용 가능합니다. https://github.com/forwardemail/status.forwardemail.net.

Upptime을 특별하게 만드는 것은 아키텍처입니다.

  • 100% 오픈 소스: 모든 구성 요소는 완전히 오픈 소스이며 사용자 정의가 가능합니다.
  • GitHub에서 구동: 서버리스 모니터링 솔루션을 위해 GitHub Actions, Issues 및 Pages를 활용합니다.
  • 서버 필요 없음: 기존 모니터링 도구와 달리 Upptime을 사용하면 서버를 실행하거나 유지할 필요가 없습니다.
  • 자동 상태 페이지: GitHub Pages에 호스팅할 수 있는 아름다운 상태 페이지를 생성합니다.
  • 강력한 알림: 이메일, SMS, Slack 등 다양한 알림 채널과 통합됩니다.

사용자 경험을 향상시키기 위해 다음을 통합했습니다. @옥토킷/코어 forwardemail.net 코드베이스에 통합하여 웹사이트에서 실시간 상태 업데이트 및 인시던트를 직접 제공합니다. 이 통합을 통해 웹사이트, API, MongoDB, Redis, SQLite, SMTP, POP3, IMAP, Bree 등 전체 스택에서 문제가 발생할 경우 즉각적인 토스트 알림, 배지 아이콘 변경, 경고 색상 등을 통해 사용자에게 명확한 투명성을 제공합니다.

@octokit/core 라이브러리를 사용하면 Upptime GitHub 저장소에서 실시간 데이터를 가져와 처리하고 사용자 친화적인 방식으로 표시할 수 있습니다. 서비스 중단이나 성능 저하가 발생하면 사용자는 메인 애플리케이션을 벗어나지 않고도 시각적인 표시기를 통해 즉시 알림을 받습니다. 이러한 원활한 통합을 통해 사용자는 시스템 상태에 대한 최신 정보를 항상 얻을 수 있으며, 이를 통해 투명성과 신뢰도가 향상됩니다.

Upptime은 투명하고 신뢰할 수 있는 방식으로 서비스를 모니터링하고 사용자에게 상태를 전달하고자 하는 수백 개의 조직에서 채택되었습니다. 이 프로젝트의 성공은 기존 인프라(이 경우 GitHub)를 활용하여 새로운 방식으로 일반적인 문제를 해결하는 도구를 구축하는 것이 얼마나 강력한지를 보여줍니다.

포워드 이메일 생태계에 대한 우리의 기여

저희의 오픈 소스 패키지는 전 세계 개발자들이 사용하고 있을 뿐만 아니라, 저희 Forward Email 서비스의 기반이기도 합니다. 이러한 도구의 제작자이자 사용자라는 두 가지 역할을 통해 저희는 실제 적용 사례에 대한 고유한 관점을 확보하고 지속적인 개선을 추진합니다.

패키지부터 생산까지

개별 패키지에서 응집력 있는 생산 시스템으로의 전환에는 신중한 통합과 확장이 필요합니다. Forward Email의 경우, 이 프로세스는 다음과 같습니다.

  • 사용자 정의 확장 프로그램: 당사의 고유한 요구 사항을 충족하는 오픈 소스 패키지에 대한 Forward Email 전용 확장 기능을 제공합니다.
  • 통합 패턴: 이러한 패키지가 프로덕션 환경에서 상호 작용하는 방식에 대한 패턴을 개발합니다.
  • 성능 최적화: 규모에 따라서만 나타나는 성능 병목 현상을 식별하고 해결합니다.
  • 보안 강화: 이메일 처리 및 사용자 데이터 보호에 특화된 추가 보안 계층을 추가합니다.

이 작업은 핵심 패키지 자체를 넘어 수천 시간에 걸친 개발이었으며, 그 결과 오픈 소스 기여의 장점을 최대한 활용한 강력하고 안전한 이메일 서비스가 탄생했습니다.

피드백 루프

프로덕션 환경에서 자체 패키지를 사용하는 가장 큰 장점은 피드백 루프를 구축하는 것입니다. Forward Email에서 제약이나 예외 상황에 직면하면, 단순히 로컬 패치를 적용하는 데 그치지 않고 기반 패키지를 개선하여 서비스와 더 나아가 커뮤니티 모두에게 도움을 줍니다.

이러한 접근 방식으로 인해 수많은 개선이 이루어졌습니다.

  • 브리의 우아한 종료: Forward Email은 다운타임 없는 배포가 필요했기 때문에 Bree에서 더욱 향상된 정상적인 종료 기능을 제공하게 되었습니다.
  • 스팸 스캐너의 패턴 인식: Forward Email에서 발견된 실제 스팸 패턴은 스팸 스캐너의 탐지 알고리즘에 정보를 제공했습니다.
  • 캐빈의 성능 최적화: 프로덕션 환경에서의 대량 로깅을 통해 Cabin에서 모든 사용자에게 이익이 되는 최적화 기회가 드러났습니다.

오픈 소스 작업과 프로덕션 서비스 간의 선순환을 유지함으로써, 우리는 패키지가 이론적인 구현이 아닌 실용적이고 실전에서 검증된 솔루션으로 남도록 보장합니다.

Forward Email의 핵심 원칙: 우수성을 위한 기반

Forward Email은 모든 개발 결정의 기준이 되는 핵심 원칙에 따라 설계되었습니다. 이러한 원칙은 웹사이트, 당사 서비스가 개발자 친화적이고 안전하며 사용자 개인 정보 보호에 중점을 두고 있는지 확인하세요.

항상 개발자 친화적이고 보안 중심적이며 투명합니다.

저희의 최우선 원칙은 최고 수준의 보안 및 개인정보 보호 기준을 유지하면서도 개발자 친화적인 소프트웨어를 만드는 것입니다. 기술적 우수성이 사용성을 저해해서는 안 되며, 투명성을 통해 커뮤니티의 신뢰를 구축할 수 있다고 믿습니다.

이 원칙은 상세한 문서, 명확한 오류 메시지, 그리고 성공과 어려움에 대한 열린 소통을 통해 드러납니다. 전체 코드베이스를 오픈 소스로 공개함으로써, 우리는 면밀한 검토와 협업을 유도하고, 소프트웨어와 더 넓은 생태계를 강화합니다.

시간에 검증된 소프트웨어 개발 원칙 준수

우리는 수십 년 동안 가치가 입증된 몇 가지 기존 소프트웨어 개발 원칙을 따릅니다.

  • MVC: 모델-뷰-컨트롤러 패턴을 통한 관심사 분리
  • 유닉스 철학: 한 가지 일을 잘 수행하는 모듈식 구성 요소 만들기
  • KISS: 간단하고 직관적으로 유지하기
  • DRY: 코드 재사용을 장려하는 Don't Repeat Yourself
  • YAGNI: 필요하지 않을 것입니다. 조기 최적화를 피하세요.
  • 12가지 요소: 현대적이고 확장 가능한 애플리케이션을 구축하기 위한 모범 사례 따르기
  • 오캄의 면도날: 요구사항을 충족하는 가장 간단한 솔루션 선택
  • 도그푸딩: 자사 제품을 광범위하게 활용

이러한 원칙은 단순한 이론적인 개념이 아니라 우리의 일상적인 개발 관행에 깊이 뿌리내리고 있습니다. 예를 들어, 유닉스 철학을 고수하는 것은 npm 패키지의 구조에서도 분명히 드러납니다. npm 패키지는 작고 집중적인 모듈들을 조합하여 복잡한 문제를 해결하는 방식입니다.

끈기 있고 부트스트랩 방식으로 일하는 개발자를 타겟으로 삼다

우리는 특히 엉터리, 부트스트랩 및 라면수익이 나는 개발자입니다. 이러한 집중력은 가격 모델부터 기술적 결정에 이르기까지 모든 것을 좌우합니다. 저희는 제한된 리소스로 제품을 개발하는 데 따르는 어려움을 잘 알고 있습니다. 왜냐하면 저희도 그 어려움을 직접 겪었기 때문입니다.

이 원칙은 특히 오픈 소스에 대한 접근 방식에서 중요합니다. 우리는 기업 예산이 부족한 개발자들을 위해 실질적인 문제를 해결하는 패키지를 개발하고 유지 관리하며, 이를 통해 누구나 리소스에 관계없이 강력한 도구를 이용할 수 있도록 합니다.

실제 원칙: 전달 이메일 코드베이스

이러한 원칙은 Forward Email 코드베이스에서 명확하게 드러납니다. package.json 파일에는 핵심 가치에 맞춰 신중하게 선택된 종속성이 포함되어 있습니다.

  • 보안 중심 패키지는 다음과 같습니다. mailauth 이메일 인증을 위해
  • 개발자 친화적 도구: preview-email 디버깅을 더 쉽게 하기 위해
  • 다양한 모듈형 구성 요소 p-* 신드레 소르후스의 유틸리티

이러한 원칙을 꾸준히 지켜온 덕분에 우리는 개발자들이 이메일 인프라를 맡길 수 있는 안전하고 신뢰할 수 있으며 오픈 소스 커뮤니티의 가치에 부합하는 서비스를 구축할 수 있었습니다.

개인 정보 보호 설계

개인정보 보호는 Forward Email의 사후 고려 사항이나 마케팅 기능이 아닙니다. 이는 서비스와 코드의 모든 측면을 알려주는 기본적인 설계 원칙입니다.

  • 제로 액세스 암호화: 우리는 기술적으로 사용자의 이메일을 읽는 것이 불가능한 시스템을 구현했습니다.
  • 최소 데이터 수집: 당사는 서비스를 제공하는 데 필요한 데이터만 수집하며, 그 이상의 데이터는 수집하지 않습니다.
  • 투명한 정책: 당사의 개인정보 보호정책은 법률 용어를 사용하지 않고 명확하고 이해하기 쉬운 언어로 작성되었습니다.
  • 오픈소스 검증: 당사의 오픈 소스 코드베이스를 통해 보안 연구원은 당사의 개인정보 보호 주장을 검증할 수 있습니다.

이러한 노력은 보안 및 개인정보 보호 모범 사례를 처음부터 내장하여 설계된 오픈 소스 패키지에도 적용됩니다.

지속 가능한 오픈 소스

저희는 오픈 소스 소프트웨어가 장기적으로 성공하려면 지속 가능한 모델이 필요하다고 믿습니다. 저희의 접근 방식은 다음과 같습니다.

  • 상업적 지원: 오픈 소스 도구에 대한 프리미엄 지원과 서비스를 제공합니다.
  • 균형 잡힌 라이선싱: 사용자의 자유와 프로젝트의 지속 가능성을 모두 보호하는 라이선스를 사용합니다.
  • 커뮤니티 참여: 기여자들과 적극적으로 소통하여 지지적인 커뮤니티를 구축합니다.
  • 투명한 로드맵: 사용자가 그에 따라 계획을 세울 수 있도록 개발 계획을 공유합니다.

지속 가능성에 초점을 맞춤으로써, 우리는 오픈 소스 기여가 방치되지 않고 시간이 지남에 따라 지속적으로 성장하고 개선될 수 있도록 보장합니다.

숫자는 거짓말하지 않습니다: 놀라운 npm 다운로드 통계

오픈 소스 소프트웨어의 영향력에 대해 이야기할 때, 다운로드 통계는 도입과 신뢰도를 보여주는 실질적인 지표입니다. 저희가 관리하는 패키지 중 상당수는 다른 오픈 소스 프로젝트에서는 거의 달성하지 못할 규모에 도달했으며, 총 다운로드 수는 수십억 건에 달합니다.

Top npm Packages by Downloads

[!중요] 자바스크립트 생태계에서 다운로드 빈도가 높은 여러 패키지를 유지 관리하는 데 기여하게 되어 자랑스럽지만, 이러한 패키지 중 상당수는 원래 다른 재능 있는 개발자들이 개발했다는 점을 알려드리고자 합니다. superagent와 supertest와 같은 패키지는 TJ Holowaychuk이 개발했으며, 그는 오픈 소스에 대한 풍부한 기여를 통해 Node.js 생태계 형성에 중요한 역할을 해왔습니다.

우리의 영향에 대한 조감도

2025년 2월부터 3월까지 단 두 달 동안, 우리가 기여하고 유지하는 데 도움을 준 최고의 패키지는 엄청난 다운로드 수를 기록했습니다.

[!NOTE] 저희가 직접 만들지는 않았지만 유지 관리하는 다른 패키지들도 다운로드 수가 더 높은데, 여기에는 다음이 포함됩니다. form-data (7억 3,800만 회 이상 다운로드), toidentifier (3억 900만 회 이상 다운로드), stackframe (1억 1,600만 회 이상 다운로드) 및 error-stack-parser (1억 1,300만 회 이상 다운로드). 저희는 원작자의 작품을 존중하며 이 패키지에 기여하게 되어 영광입니다.

이는 단순히 인상적인 수치가 아닙니다. 저희가 유지 관리하는 코드를 통해 실제 개발자들이 실제 문제를 해결하고 있음을 보여줍니다. 이러한 패키지가 다운로드될 때마다 취미 프로젝트부터 수백만 명이 사용하는 기업용 애플리케이션까지, 누군가는 의미 있는 무언가를 만드는 데 도움을 받았다는 것을 알 수 있습니다.

Package Categories Distribution

규모에 따른 일일 영향

일일 다운로드 패턴은 일관되고 높은 사용량을 보여주며, 최고 다운로드 수는 하루 수백만 건에 달합니다[^13]. 이러한 일관성은 이러한 패키지의 안정성과 신뢰성을 보여줍니다. 개발자들은 단순히 사용해 보는 데 그치지 않고 핵심 워크플로에 통합하여 매일 의존하고 있습니다.

주간 다운로드 패턴은 더욱 인상적인 수치를 보이며, 꾸준히 주당 수천만 건을 상회하고 있습니다[^14]. 이는 JavaScript 생태계에 막대한 영향을 미치며, 이러한 패키지들은 전 세계 프로덕션 환경에서 실행되고 있습니다.

원시 숫자를 넘어서

다운로드 통계 자체도 인상적이지만, 이는 커뮤니티가 이러한 패키지에 얼마나 큰 신뢰를 두고 있는지를 보여줍니다. 이러한 규모의 패키지를 유지하려면 다음 사항에 대한 확고한 의지가 필요합니다.

  • 이전 버전과의 호환성: 기존 구현을 손상시키지 않으려면 변경 사항을 신중하게 고려해야 합니다.
  • 보안: 수백만 개의 애플리케이션이 이러한 패키지에 의존하고 있기 때문에 보안 취약점은 광범위한 결과를 초래할 수 있습니다.
  • 성능: 이 규모에서는 사소한 성능 개선이라도 상당한 전체적 이점을 가져올 수 있습니다.
  • 선적 서류 비치: 모든 수준의 개발자가 사용하는 패키지에는 명확하고 포괄적인 문서가 필수적입니다.

시간이 지남에 따라 다운로드 수가 꾸준히 증가한 것은 이러한 약속을 이행하는 데 성공했으며, 안정적이고 잘 유지 관리되는 패키지를 통해 개발자 커뮤니티와 신뢰를 구축했음을 보여줍니다.

생태계 지원: 오픈 소스 후원

[!TIP] 오픈 소스의 지속 가능성은 단순히 코드 기여에만 국한되지 않습니다. 중요한 인프라를 유지 관리하는 개발자들을 지원하는 것도 포함됩니다.

JavaScript 생태계에 대한 직접적인 기여 외에도, 저희는 다양한 최신 애플리케이션의 기반을 형성하는 뛰어난 Node.js 기여자들을 후원하게 되어 자랑스럽게 생각합니다. 저희가 후원하는 분야는 다음과 같습니다.

안드리스 라인만: 이메일 인프라 선구자

안드리스 라인만 의 창조자이다 메모 메일러, Node.js용 가장 인기 있는 이메일 전송 라이브러리로, 주간 다운로드 수가 1,400만 건을 넘습니다[^15]. 그의 작업은 다음과 같은 다른 중요한 이메일 인프라 구성 요소로 확장됩니다. SMTP 서버, 메일 파서, 그리고 와일드덕.

저희의 후원은 수많은 Node.js 애플리케이션, 특히 저희의 Forward Email 서비스를 포함한 이메일 통신을 지원하는 필수 도구의 지속적인 유지 관리와 개발을 보장하는 데 도움이 됩니다.

Sindre Sorhus: 유틸리티 패키지 마스터마인드

신드레 소르후스 JavaScript 생태계에서 가장 활발하게 오픈 소스에 기여하는 사람 중 한 명으로, 1,000개가 넘는 npm 패키지를 보유하고 있습니다. 그의 유틸리티는 다음과 같습니다. p-맵, 재시도 전, 그리고 is-stream Node.js 생태계 전반에서 사용되는 기본적인 구성 요소입니다.

Sindre의 작업을 후원함으로써 우리는 JavaScript 개발을 보다 효율적이고 안정적으로 만드는 중요한 유틸리티의 개발을 지속하는 데 도움이 됩니다.

이러한 후원은 더 넓은 오픈 소스 생태계에 대한 우리의 헌신을 반영합니다. 우리는 우리의 성공이 이들과 다른 기여자들이 쌓아온 기반 위에 세워졌다는 것을 인지하고 있으며, 전체 생태계의 지속가능성을 보장하기 위해 최선을 다하고 있습니다.

JavaScript 생태계의 보안 취약점 발견

오픈 소스에 대한 우리의 헌신은 기능 개발을 넘어 수백만 명의 개발자에게 영향을 미칠 수 있는 보안 취약점을 파악하고 해결하는 데까지 확장됩니다. JavaScript 생태계에 대한 우리의 가장 중요한 기여 중 일부는 보안 분야에서 이루어졌습니다.

코아 라우터 구조

2019년 2월, Nick은 인기 있는 koa 라우터 패키지의 유지 관리에 심각한 문제가 있음을 발견했습니다. 해커 뉴스에 보도됨해당 패키지는 원래 유지 관리자가 포기한 상태였으며, 이로 인해 보안 취약점이 해결되지 않은 채 커뮤니티에 업데이트가 제공되지 않았습니다.

[!경고] 보안 취약점이 있는 버려진 패키지는 전체 생태계에 심각한 위험을 초래하며, 특히 매주 수백만 건씩 다운로드되는 경우 더욱 그렇습니다.

이에 Nick은 다음과 같이 답했습니다. @koa/라우터 그는 지역 사회에 상황을 알리는 데 도움을 주었습니다. 그는 그 이후로 이 중요한 패키지를 유지 관리하여 Koa 사용자들이 안전하고 잘 관리되는 라우팅 솔루션을 이용할 수 있도록 보장해 왔습니다.

ReDoS 취약점 해결

2020년에 Nick은 중요한 문제를 식별하고 해결했습니다. 정규 표현식 서비스 거부(ReDoS) 널리 사용되는 취약점 url-regex 패키지. 이 취약점(SNYK-JS-URLREGEX-569472) 공격자는 정규 표현식에서 치명적인 역추적을 일으키는 특수하게 조작된 입력을 제공하여 서비스 거부를 유발할 수 있습니다.

Nick은 기존 패키지를 단순히 패치하는 것보다 url-regex-safe, 원래 API와의 호환성을 유지하면서 취약점을 해결하는 완전히 재작성된 구현입니다. 그는 또한 포괄적인 블로그 게시물 취약성과 이를 완화하는 방법을 설명합니다.

이 작업은 보안에 대한 당사의 접근 방식을 보여줍니다. 단순히 문제를 해결하는 데 그치지 않고 커뮤니티를 교육하고 향후 유사한 문제가 발생하지 않도록 강력한 대안을 제공합니다.

Node.js 및 Chromium 보안 옹호

Nick은 또한 더 넓은 생태계의 보안 개선을 위해 적극적으로 활동해 왔습니다. 2020년 8월, 그는 Node.js의 HTTP 헤더 처리와 관련된 심각한 보안 문제를 발견했으며, 이는 레지스터.

Chromium 패치에서 비롯된 이 문제는 공격자가 보안 조치를 우회할 수 있는 가능성을 내포하고 있습니다. Nick의 적극적인 지원 덕분에 문제가 신속하게 해결되어 수백만 개의 Node.js 애플리케이션이 잠재적인 악용으로부터 보호될 수 있었습니다.

npm 인프라 보안

같은 달 말, Nick은 npm의 이메일 인프라에서 또 다른 심각한 보안 문제를 발견했습니다. 레지스터npm은 DMARC, SPF, DKIM 이메일 인증 프로토콜을 제대로 구현하지 않아 공격자가 npm에서 온 것처럼 보이는 피싱 이메일을 보낼 가능성이 있습니다.

닉의 보고서는 npm의 이메일 보안 태세를 개선하는 데 도움이 되었고, 패키지 관리를 위해 npm에 의존하는 수백만 명의 개발자를 잠재적인 피싱 공격으로부터 보호했습니다.

포워드 이메일 생태계에 대한 우리의 기여

Forward Email은 Nodemailer, WildDuck, mailauth를 포함한 여러 주요 오픈소스 프로젝트를 기반으로 구축되었습니다. 저희 팀은 이러한 프로젝트에 상당한 기여를 했으며, 이메일 전송 및 보안에 영향을 미치는 심각한 문제를 파악하고 해결하는 데 기여했습니다.

Nodemailer의 핵심 기능 향상

메모 메일러 Node.js에서 이메일 전송의 중추이며, 우리의 기여로 인해 더욱 강력해졌습니다.

  • SMTP 서버 개선: SMTP 서버 구성 요소[^16][^17]에서 구문 분석 버그, 스트림 처리 문제 및 TLS 구성 문제를 해결했습니다.
  • 메일 파서 향상: 문자 시퀀스 디코딩 오류를 해결하고 이메일 처리 실패를 일으킬 수 있는 파서 문제를 해결했습니다[^18][^19].

이러한 기여를 통해 Nodemailer는 Forward Email을 포함하여 Node.js 애플리케이션에서 이메일 처리를 위한 안정적인 기반으로 남게 됩니다.

Mailauth를 사용한 이메일 인증 강화

메일인증 중요한 이메일 인증 기능을 제공하며, 저희의 기여로 기능이 크게 향상되었습니다.

  • DKIM 검증 개선: X/Twitter에서 DNS 캐시 문제로 인해 아웃바운드 메시지에 대한 DKIM 오류가 발생했다는 사실을 발견하고 Hacker One[^20]에 보고했습니다.
  • DMARC 및 ARC 향상: 잘못된 인증 결과로 이어질 수 있는 DMARC 및 ARC 검증 문제를 해결했습니다[^21][^22].
  • 성능 최적화: 이메일 인증 프로세스의 성능을 개선하는 최적화에 기여했습니다[^23][^24][^25][^26].

이러한 개선 사항은 이메일 인증이 정확하고 신뢰할 수 있도록 보장하고, 사용자를 피싱 및 스푸핑 공격으로부터 보호하는 데 도움이 됩니다.

주요 가동 시간 향상

Upptime에 대한 우리의 기여는 다음과 같습니다.

  • SSL 인증서 모니터링: SSL 인증서 만료를 모니터링하는 기능을 추가하여 만료된 인증서로 인한 예기치 않은 가동 중지 시간을 방지했습니다[^27].
  • 다중 SMS 번호 지원: 사고가 발생하면 SMS를 통해 여러 팀원에게 알림을 보내는 기능을 구현하여 대응 시간을 개선했습니다[^28].
  • IPv6 확인 수정: IPv6 연결 검사 문제를 해결하여 최신 네트워크 환경에서 보다 정확한 모니터링을 보장합니다[^29].
  • 다크/라이트 모드 지원: 상태 페이지의 사용자 경험을 개선하기 위해 테마 지원을 추가했습니다[^31].
  • 더 나은 TCP-Ping 지원: 보다 안정적인 연결 테스트를 제공하기 위해 TCP ping 기능을 향상시켰습니다[^32].

이러한 개선 사항은 Forward Email의 상태 모니터링에만 도움이 되는 것이 아니라 Upptime 사용자 커뮤니티 전체에서 사용할 수 있으며, 이는 우리가 사용하는 도구를 개선하려는 우리의 노력을 보여줍니다.

모든 것을 하나로 묶는 접착제: 규모에 맞는 사용자 정의 코드

npm 패키지와 기존 프로젝트에 대한 기여도 중요하지만, 이러한 구성 요소를 통합하는 커스텀 코드는 저희의 기술적 전문성을 진정으로 보여줍니다. Forward Email 코드베이스는 프로젝트가 시작된 2017년부터 10년간의 개발 노력을 보여줍니다. 무료 이메일 전달 모노레포로 병합되기 전.

대규모 개발 노력

이 사용자 정의 통합 코드의 규모는 인상적입니다.

  • 총 기여금: 3,217개 이상의 커밋
  • 코드베이스 크기: JavaScript, Pug, CSS 및 JSON 파일에 걸쳐 421,545줄 이상의 코드[^33]

이는 수천 시간의 개발 작업, 디버깅 세션, 그리고 성능 최적화를 의미합니다. 이는 개별 패키지를 매일 수천 명의 고객이 사용하는 통합적이고 안정적인 서비스로 변환하는 "비밀 소스"입니다.

핵심 종속성 통합

Forward Email 코드베이스는 수많은 종속성을 원활하게 통합합니다.

  • 이메일 처리: 전송을 위한 Nodemailer, 수신을 위한 SMTP 서버, 구문 분석을 위한 Mailparser를 통합합니다.
  • 입증: DKIM, SPF, DMARC 및 ARC 검증을 위해 Mailauth를 사용합니다.
  • DNS 확인: 글로벌 캐싱을 통해 DNS-over-HTTPS를 위해 Tangerine을 활용합니다.
  • MX 연결: Tangerine 통합을 통해 mx-connect를 활용하여 안정적인 메일 서버 연결을 제공합니다.
  • 작업 스케줄링: 작업자 스레드를 사용하여 안정적인 백그라운드 작업 처리를 위해 Bree를 사용합니다.
  • 템플릿화: 고객 커뮤니케이션에서 웹사이트의 스타일시트를 재사용하기 위해 이메일 템플릿을 활용합니다.
  • 이메일 저장: ChaCha20-Poly1305 암호화를 사용하여 better-sqlite3-multiple-ciphers를 사용하여 개별적으로 암호화된 SQLite 사서함을 구현하여 양자 안전 개인 정보 보호를 보장하고 사용자 간 완전한 격리를 보장하며 사용자만 사서함에 액세스할 수 있도록 합니다.

이러한 각 통합은 예외 상황, 성능 영향 및 보안 문제를 신중하게 고려해야 합니다. 그 결과, 수백만 건의 이메일 거래를 안정적으로 처리하는 강력한 시스템이 탄생했습니다. 또한, SQLite 구현은 효율적인 바이너리 직렬화를 위해 msgpackr을 활용하고, 인프라 전반의 실시간 상태 업데이트를 위해 웹소켓(ws를 통해)을 활용합니다.

Tangerine 및 mx-connect를 사용한 DNS 인프라

Forward Email 인프라의 핵심 구성 요소는 두 가지 핵심 패키지를 중심으로 구축된 DNS 확인 시스템입니다.

  • : Node.js DNS-over-HTTPS 구현은 기본 제공 재시도, 시간 초과, 스마트 서버 로테이션 및 캐싱 지원 기능을 통해 표준 DNS 확인자를 즉시 대체할 수 있습니다.

  • mx-연결: 이 패키지는 대상 도메인이나 이메일 주소를 가져와서 적절한 MX 서버를 확인하고 우선순위에 따라 연결하여 MX 서버에 TCP 연결을 설정합니다.

우리는 Tangerine을 mx-connect를 통해 통합했습니다. 풀 리퀘스트 #4Forward Email 전체에서 HTTP 요청에 대한 애플리케이션 계층 DNS를 보장합니다. 이를 통해 모든 지역, 앱 또는 프로세스에서 1:1 일관성을 유지하면서 대규모 DNS 캐싱을 제공합니다. 이는 분산 시스템에서 안정적인 이메일 전송에 필수적입니다.

엔터프라이즈 영향: 오픈 소스부터 미션 크리티컬 솔루션까지

10년에 걸친 오픈 소스 개발 여정의 결과로 Forward Email은 개인 개발자뿐만 아니라 오픈 소스 운동의 중추를 이루는 주요 기업과 교육 기관에도 서비스를 제공할 수 있게 되었습니다.

미션 크리티컬 이메일 인프라 사례 연구

신뢰성, 개인 정보 보호 및 오픈 소스 원칙에 대한 당사의 노력으로 Forward Email은 까다로운 이메일 요구 사항을 가진 조직에서 신뢰할 수 있는 선택이 되었습니다.

  • 교육기관: 자세한 내용은 다음과 같습니다. 동문 이메일 전달 사례 연구주요 대학들은 수십만 명의 동문과 평생 지속되는 관계를 유지하기 위해 안정적인 이메일 전달 서비스를 통해 당사의 인프라에 의존하고 있습니다.

  • 엔터프라이즈 리눅스 솔루션: 그 Canonical Ubuntu 이메일 엔터프라이즈 사례 연구 당사의 오픈 소스 접근 방식이 기업용 Linux 공급업체의 요구 사항과 완벽하게 일치하여 그들에게 필요한 투명성과 제어 기능을 제공하는 방식을 보여줍니다.

  • 오픈소스 기초: 아마도 가장 타당성이 있는 것은 Linux Foundation과의 파트너십입니다. Linux Foundation 이메일 기업 사례 연구, 우리 서비스는 Linux 개발을 담당하는 조직의 커뮤니케이션을 강화합니다.

오랜 세월 정성껏 관리해 온 오픈 소스 패키지 덕분에 오픈 소스 소프트웨어를 지지하는 커뮤니티와 단체들을 지원하는 이메일 서비스를 구축할 수 있었던 것은 아름다운 대칭을 보여줍니다. 개별 패키지 제공부터 오픈 소스 리더들을 위한 엔터프라이즈급 이메일 인프라 구축에 이르기까지, 이러한 완벽한 순환 과정은 소프트웨어 개발에 대한 저희의 접근 방식이 궁극적으로 검증되었음을 보여줍니다.

오픈 소스 10년: 미래를 바라보며

지난 10년간의 오픈 소스 기여를 돌아보고 향후 10년을 내다보면서, 우리의 작업을 지원해 준 커뮤니티에 대한 감사함과 앞으로의 일에 대한 기대감이 가득합니다.

개별 패키지 기여자에서 주요 기업과 오픈 소스 재단에서 사용하는 포괄적인 이메일 인프라의 유지 관리자로 성장해 온 저희의 여정은 놀라웠습니다. 이는 오픈 소스 개발의 힘과 신중하고 잘 관리된 소프트웨어가 더 넓은 생태계에 미칠 수 있는 영향을 보여주는 증거입니다.

앞으로 몇 년 동안 우리는 다음을 위해 노력할 것입니다.

  • 기존 패키지를 지속적으로 유지 관리하고 개선합니다.이를 통해 전 세계 개발자에게 신뢰할 수 있는 도구로 남을 수 있게 되었습니다.
  • 중요 인프라 프로젝트에 대한 기여 확대특히 이메일과 보안 도메인에서 그렇습니다.
  • Forward Email 기능 향상 개인정보 보호, 보안 및 투명성에 대한 당사의 헌신을 유지하는 동시에,
  • 차세대 오픈 소스 기여자 지원 멘토링, 후원, 지역 사회 참여를 통해.

저희는 소프트웨어 개발의 미래가 개방적이고 협력적이며 신뢰를 기반으로 구축될 것이라고 믿습니다. JavaScript 생태계에 고품질의 보안 중심 패키지를 지속적으로 제공함으로써, 저희는 그러한 미래를 만들어가는 데 조금이나마 기여하고자 합니다.

저희 패키지를 이용해 주시고, 프로젝트에 기여해 주시고, 문제를 보고해 주시거나, 저희의 활동을 널리 알려 주신 모든 분들께 감사드립니다. 여러분의 성원 덕분에 지난 10년간의 영향력을 발휘할 수 있었으며, 앞으로 10년 동안 함께 무엇을 이룰 수 있을지 기대됩니다.

[^1]: cabin npm 다운로드 통계, 2025년 4월 [^2]: bson-objectid npm 다운로드 통계, 2025년 2월-3월 [^3]: url-regex-safe npm 다운로드 통계, 2025년 4월 [^4]: forwardemail/forwardemail.net의 GitHub 별점(2025년 4월 기준) [^5]: preview-email npm 다운로드 통계, 2025년 4월 [^7]: superagent npm 다운로드 통계, 2025년 2월-3월 [^8]: supertest npm 다운로드 통계, 2025년 2월-3월 [^9]: preview-email npm 다운로드 통계, 2025년 2월-3월 [^10]: cabin npm 다운로드 통계, 2025년 2월-3월 [^11]: url-regex-safe npm 다운로드 통계, 2월-3월 2025 [^12]: 2025년 2월-3월 spamscanner npm 다운로드 통계 [^13]: 2025년 4월 npm 통계의 일별 다운로드 패턴 [^14]: 2025년 4월 npm 통계의 주별 다운로드 패턴 [^15]: 2025년 4월 nodemailer npm 다운로드 통계 [^16]: https://github.com/nodemailer/smtp-server/issues/155 [^17]: https://github.com/nodemailer/smtp-server/issues/node-v12-requires-tls-min [^18]: https://github.com/nodemailer/mailparser/issues/261 [^19]: https://github.com/nodemailer/nodemailer/issues/1102 [^20]: https://github.com/postalsys/mailauth/issues/30 [^21]: https://github.com/postalsys/mailauth/issues/58 [^22]: https://github.com/postalsys/mailauth/issues/48 [^23]: https://github.com/postalsys/mailauth/issues/74 [^24]: https://github.com/postalsys/mailauth/issues/75 [^25]: https://github.com/postalsys/mailauth/issues/60 [^26]: https://github.com/postalsys/mailauth/issues/73 [^27]: Upptime 저장소의 GitHub 이슈 기반 [^28]: Upptime 저장소의 GitHub 이슈 기반 [^29]: Upptime 저장소의 GitHub 이슈 기반 [^30]: bree에 대한 npm 다운로드 통계, 2025년 2월-3월 [^31]: Upptime에 대한 GitHub 풀 리퀘스트 기반 [^32]: Upptime에 대한 GitHub 풀 리퀘스트 기반 [^34]: koa에 대한 npm 다운로드 통계, 2025년 2월-3월 [^35]: @koa/router에 대한 npm 다운로드 통계, 2025년 2월-3월 [^36]: koa-router에 대한 npm 다운로드 통계, 2025년 2월-3월 [^37]: url-regex에 대한 npm 다운로드 통계, 2025년 2월-3월 [^38]: @breejs/later, 2025년 2월-3월 [^39]: 이메일 템플릿 npm 다운로드 통계, 2025년 2월-3월 [^40]: get-paths npm 다운로드 통계, 2025년 2월-3월 [^41]: dotenv-parse-variables npm 다운로드 통계, 2025년 2월-3월 [^42]: @koa/multer npm 다운로드 통계, 2025년 2월-3월