Skip to content

reach0908/life-hacking-api

Repository files navigation

Life Hacking API

Nest Logo

클린 아키텍처, 도메인 주도 설계(DDD), 헥사고날 아키텍처 원칙을 따르는 현대적인 NestJS 애플리케이션입니다.

TypeScript Version NestJS Version Prisma Version

📋 목차

🎯 프로젝트 개요

Life Hacking API는 개인의 생산성 향상과 일상 관리를 돕는 서비스를 위한 백엔드 API입니다.

아키텍처 특징

  • 클린 아키텍처: 계층 분리와 관심사의 분리
  • 도메인 주도 설계: 비즈니스 로직 중심의 설계
  • 헥사고날 아키텍처: 외부 시스템과의 느슨한 결합
  • 포트-어댑터 패턴: 확장 가능한 인터페이스 설계

개발 철학 및 전략

🧠 아키텍처 전략

  • 유스케이스 중심 설계: 비즈니스 로직 조율의 핵심으로 유스케이스 활용
  • 의존성 역전: 외부 레이어에서 내부 레이어로의 단방향 의존성
  • 심볼 기반 의존성 주입: 느슨한 결합을 위한 NestJS Symbol 토큰 활용
  • 경계 컨텍스트 분리: 도메인별 명확한 책임과 경계 정의

📋 DTO 및 검증 전략

  • 계층별 검증 책임: Presentation(형식) → Application(비즈니스) → Domain(불변조건)
  • Request DTO: 프로퍼티 기반 + class-validator 데코레이터
  • Response DTO: @Expose 데코레이터 + 정적 팩토리 메서드
  • ValidationPipe 전역 적용: 일관된 검증, ClassSerializerInterceptor 개별 적용으로 성능 최적화

🔄 데이터 변환 흐름

Domain Entity → Use Case (DTO 변환) → Controller → JSON 직렬화
  • Use Case: 도메인 엔티티를 DTO로 변환하여 아키텍처 경계 보호
  • Controller: ClassSerializerInterceptor로 DTO를 JSON으로 직렬화
  • 명확한 책임 분리: 각 단계별 고유한 변환 책임

🧪 테스트 전략

  • Unit Tests: 유스케이스와 도메인 로직에 집중
  • Integration Tests: 어댑터와 외부 시스템 연동 검증
  • E2E Tests: Presentation 레이어를 통한 전체 기능 워크플로우
  • Contract Tests: 포트-어댑터 계약 검증

✨ 주요 기능

  • 🔐 Google OAuth 인증: 간편한 소셜 로그인
  • 👤 사용자 관리: 프로필 조회 및 수정
  • 🔑 JWT 토큰 관리: 액세스 토큰 및 리프레시 토큰
  • 📱 멀티 디바이스 로그아웃: 전체 디바이스에서 로그아웃
  • 🛡️ 타입 안전성: TypeScript 기반 개발
  • 데이터 검증: 요청/응답 데이터 유효성 검사

🛠 기술 스택

백엔드

  • NestJS 11: Node.js 프레임워크
  • TypeScript 5.7: 정적 타입 언어
  • Prisma 6.15: ORM 및 데이터베이스 툴킷
  • PostgreSQL: 관계형 데이터베이스

인증

  • Passport.js: 인증 미들웨어
  • JWT: JSON Web Token 기반 인증
  • Google OAuth 2.0: 소셜 로그인

개발 도구

  • ESLint & Prettier: 코드 품질 관리
  • Jest: 테스트 프레임워크
  • class-validator: DTO 검증

🚀 시작하기

필수 요구사항

  • Node.js 18 이상
  • PostgreSQL 데이터베이스
  • Google OAuth 클라이언트 설정

설치 및 실행

# 의존성 설치
npm install

# 환경 변수 설정
cp src/config/env/.env.example src/config/env/.env.development

# 데이터베이스 설정
npm run prisma:generate
npm run prisma:push

# 개발 서버 실행
npm run start:dev

서버가 http://localhost:3000에서 실행됩니다.

🛠 개발 환경

주요 명령어

# 개발 서버
npm run start:dev    # 핫 리로드와 함께 개발 서버 시작

# 코드 품질
npm run lint         # ESLint 실행 및 자동 수정
npm run format       # Prettier로 코드 포맷팅

# 테스트
npm run test         # 단위 테스트
npm run test:e2e     # E2E 테스트
npm run test:cov     # 테스트 커버리지

# 데이터베이스
npm run prisma:generate  # Prisma 클라이언트 생성

프로젝트 구조

src/
├── domains/          # 도메인 모듈 (DDD 경계)
│   ├── auth/        # 인증 도메인
│   └── user/        # 사용자 도메인
├── config/          # 환경 설정
├── database/        # 데이터베이스 모듈
└── shared/          # 공유 유틸리티

📚 API 문서

인증 엔드포인트

메서드 엔드포인트 설명
GET /auth/google Google OAuth 로그인 시작
POST /auth/google/callback OAuth 콜백 처리
POST /auth/refresh 토큰 갱신
POST /auth/logout 로그아웃
POST /auth/logout/all 전체 디바이스 로그아웃

사용자 엔드포인트

메서드 엔드포인트 설명
GET /users/profile 사용자 프로필 조회
PATCH /users/profile 사용자 프로필 수정

자세한 API 문서는 CLAUDE.md 파일을 참조하세요.

📄 라이선스

이 프로젝트는 UNLICENSED 라이선스를 따릅니다.


❤️ NestJS, 클린 아키텍처, 도메인 주도 설계로 구축되었습니다.

About

DDD, 헥사고날 아키텍처 연습을 위한 프로젝트

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors