Skip to content

기술 스택

런타임 및 언어

기술버전용도
Node.js20+런타임
TypeScript5.x언어 (strict 모드)
pnpm10+패키지 매니저

백엔드

기술버전용도
Fastify5.xHTTP 서버
tRPC11.x타입 안전 API 레이어
TypeORM0.3.x데이터베이스 ORM
PostgreSQL16기본 데이터베이스 (TimescaleDB + pgvector)
Redis7캐싱 및 세션
Zod3.x스키마 유효성 검사
Pino-구조화된 로깅
JWT-인증
bcrypt-비밀번호 해싱

프론트엔드

기술버전용도
Alpine.js3.14반응형 UI 프레임워크
Vite6.x빌드 도구 및 개발 서버
Tailwind CSS4.0유틸리티 우선 CSS 프레임워크
Capacitor6.x모바일 앱 (iOS + Android)
Cropper.js1.6이미지 크롭 (직원 앱)

인프라

기술용도
Docker Compose컨테이너 오케스트레이션
pgAdmin 4데이터베이스 관리 UI
HuskyGit 훅
Biome2.3.x

빌드 및 테스트

기술용도
Vitest테스트 러너
Faker.js테스트 데이터 생성
tsup라이브러리 번들링 (SDK, 컴포넌트)
Commander.jsCLI 프레임워크

프론트엔드 아키텍처

모든 프론트엔드 앱은 동일한 스택을 공유합니다:

Alpine.js 3.14 (반응형 컴포넌트)
    + @hereby/sdk (tRPC 클라이언트)
    + @hereby/components (인증 UI)
    + Tailwind CSS 4.0 (스타일링)
    + Vite 6.0 (빌드 + HMR)

커스텀 Vite 플러그인

모든 앱은 <!-- include "path" --> 디렉티브를 처리하는 커스텀 htmlInclude() Vite 플러그인을 사용하여 모듈형 뷰/컴포넌트 템플릿 구성이 가능합니다.

SDK 통합

SDK는 Alpine.js 플러그인으로 등록되어 다음을 포함하는 $store.hereby 스토어를 생성합니다:

  • 인증 상태 관리
  • SDK 클라이언트 인스턴스
  • 권한 확인 헬퍼
  • 로그인/로그아웃 메서드

TypeScript 설정

json
{
  "strict": true,
  "experimentalDecorators": true,
  "emitDecoratorMetadata": true,
  "target": "ES2020",
  "module": "ESNext"
}
  • Strict 모드: implicit any 금지, strict null 체크
  • 데코레이터: TypeORM 엔티티에 필요
  • PascalCase: 타입, 인터페이스, 클래스
  • camelCase: 변수, 함수