Skip to content

GoHawaiiForMe/backend

Repository files navigation

대리 여행 중개 플랫폼

logo

2025.01.07 - 2025.02.26
코드잇 스프린트 풀스택 2기 고급 프로젝트 2팀 (Backend)
> Frontend Github 바로가기 🔗



🛠️ 기술스택

Typescript JWT Jest Socketio

postgreSQL MongoDB Prisma Mongoose Redis BullMQ

Grafana Kibana

github slack discord notion Swagger ...etc


💁 구성원

김영은 김태연
imgur imgur
팀장 백엔드장
노션 관리, 백엔드 GitHub 관리, 중간 발표 자료 제작, 배포 및 관리 회의록 관리, 발표 자료 정리, Lambda 배포, 데이터베이스 관리
Github 바로가기 🔗 Github 바로가기 🔗

📋 팀원별 구현 기능 상세

[김영은]

  • Auth API 구현
    • 인증/인가 guard 및 decorator
    • 구글, 카카오, 네이버 OAuth
  • User API 구현
  • Profile API 구현
  • Follow API 구현
  • Review API 구현
  • Notification API 구현
    • SSE 통한 실시간 알림 추가
  • Payment API 구현
    • PortOne PG사 연동 결제
  • UserStats 구현
    • 메시지큐를 통해 연산 작업 비동기 처리
    • 자주 조회하는 데이터 캐싱
  • PointLog 구현
    • 메시지큐를 통해 포인트 작업 비동기 처리
    • 실패한 작업 스케줄링
  • 시스템/네트워크 및 애플리케이션 로그 구현
    • Lambda를 통한 Cloudwatch 로그 자동 수집
  • GitHub Actions CI/CD 구현
  • Swagger 설정 세팅

[김태연]

  • 기초세팅
  • 테스트 파일 구현
    • 전체적인 테스트 설정 세팅
    • plan, quote, chatRoom, chat 모델 e2e 테스트 파일 구현
  • Plan API 구현
  • Quote API 구현
  • Chat API 구현
    • 이미지 및 동영상을 s3에 업로드 및 Presigned URL 구현
    • 이미지가 업로드 될 때 최적화 해주는 lambda 함수 구현 및 적용
  • ChatRoom API 구현
    • 웹소켓을 이용해 구현
  • 다른 종류의 데이터베이스 transaction 구현
    • 의존성 최소화를 위해 AOP를 통한 데코레이터로 구현
  • 스케줄러 구현 및 적용

⚓️ 백엔드 전략

  • 도메인 모델: 주요 개념을 도메인 모델로 추상화하여 복잡한 비즈니스 로직을 관리.

  • 트랜잭션 처리:

    • Prisma와 MongoDB 모두에 적용할 수 있는 데코레이터 구현 및 적용.
    • 도메인 모델을 적용시키며 의존성을 격리하기 위해 AOP를 활용해 데코레이터 방식으로 트랜잭션을 적용.
  • AWS Lambda: 이미지 업로드 시 최적화 및 별도로 저장, CloudWatch 로그 트리거 시 OpenSearch로 전송.

  • 로그 관리: 실시간 로그 모니터링 및 시각화

    • 애플리케이션 로그: Winston → AWS CloudWatch → Lambda → OpenSearch(Kibana)
    • 시스템 및 네트워크 로그: Node Exporter / NginX Exporer → Prometheus → Grafana
  • 실시간 채팅 기능: @nestjs/websocketsSocket.io를 통해 클라이언트 간 실시간 메시지 전달 및 관리.

  • 스케줄러: Cron jobs를 사용하여 주기적으로 실행되는 작업을 자동화.

  • 결제 시스템: 외부 PG사 결제 API와의 연동을 통해 결제 처리 자동화.

  • 실시간 알림: SSE 단방향 통신을 통해 서버에서 클라이언트에 알림 전송.

  • 캐싱 및 메시지 큐: Redis를 활용하여 자주 조회하는 데이터를 캐싱하고 BullMQ를 통해 연산 작업 등을 메시지 큐로 비동기 처리


🍰 프로젝트 회고


📁 파일 구조

src
├── common
│   ├── constants
│   ├── decorators
│   ├── errors
│   ├── filters
│   ├── guards
│   ├── logger
│   │   ├── cloudWatch
│   │   └── winston
│   ├── pipes
│   └── utilities
├── modules
│   ├── auth
│   │   ├── domains
│   │   ├── types
│   │   ├── strategy
│   │   │   ├── google.strategy.ts
│   │   │   ├── jwt.strategy.ts
│   │   │   ├── kakao.strategy.ts
│   │   │   └── naver.strategy.ts
│   │   ├── auth.controller.ts
│   │   ├── auth.e2e.spec.ts
│   │   ├── auth.module.ts
│   │   ├── auth.repository.ts
│   │   └── auth.service.ts
│   ├── chat
│   │   ├── domains
│   │   ├── types
│   │   ├── chat.controller.ts
│   │   ├── chat.e2e.spec.ts
│   │   ├── chat.module.ts
│   │   ├── chat.repository.ts
│   │   └── chat.service.ts
│   ├── chatRoom
│   │   ├── domains
│   │   ├── types
│   │   ├── chatRoom.controller.ts
│   │   ├── chatRoom.e2e.spec.ts
│   │   ├── chatRoom.gateway.ts
│   │   ├── chatRoom.module.ts
│   │   ├── chatRoom.repository.ts
│   │   └── chatRoom.service.ts
│   ├── follow
│   │   ├── domains
│   │   ├── types
│   │   ├── follow.controller.ts
│   │   ├── follow.e2e.spec.ts
│   │   ├── follow.module.ts
│   │   ├── follow.repository.ts
│   │   └── follow.service.ts
│   ├── notification
│   │   ├── domains
│   │   ├── types
│   │   ├── notification.controller.ts
│   │   ├── notification.e2e.spec.ts
│   │   ├── notification.event.ts
│   │   ├── notification.listener.ts
│   │   ├── notification.module.ts
│   │   ├── notification.repository.ts
│   │   └── notification.service.ts
│   ├── payment
│   │   ├── domains
│   │   ├── types
│   │   ├── payment.controller.ts
│   │   ├── payment.e2e.spec.ts
│   │   ├── payment.module.ts
│   │   ├── payment.repository.ts
│   │   └── payment.service.ts
│   ├── plan
│   │   ├── domains
│   │   ├── types
│   │   ├── plan.controller.ts
│   │   ├── plan.e2e.spec.ts
│   │   ├── plan.module.ts
│   │   ├── plan.repository.ts
│   │   └── plan.service.ts
│   ├── pointLog
│   │   ├── domains
│   │   ├── types
│   │   ├── pointLog.controller.ts
│   │   ├── pointLog.module.ts
│   │   ├── pointLog.repository.ts
│   │   └── pointLog.service.ts
│   ├── quote
│   │   ├── domains
│   │   ├── types
│   │   ├── quote.controller.ts
│   │   ├── quote.e2e.spec.ts
│   │   ├── quote.module.ts
│   │   ├── quote.repository.ts
│   │   └── quote.service.ts
│   ├── review
│   │   ├── domains
│   │   ├── types
│   │   ├── review.controller.ts
│   │   ├── review.e2e.spec.ts
│   │   ├── review.module.ts
│   │   ├── review.repository.ts
│   │   └── review.service.ts
│   ├── task
│   │   ├── task.module.ts
│   │   └── task.service.ts
│   ├── user
│   │   ├── domains
│   │   ├── types
│   │   ├── user.controller.ts
│   │   ├── user.e2e.spec.ts
│   │   ├── user.module.ts
│   │   ├── user.repository.ts
│   │   └── user.service.ts
│   └── userStats
│       ├── domains
│       ├── types
│       ├── userStats.module.ts
│       ├── userStats.repository.ts
│       └── userStats.service.ts
├── providers
│   ├── cache
│   │   ├── redis.module.ts
│   │   └── redis.service.ts
│   ├── database
│   │   ├── mongoose
│   │   │   ├── config
│   │   │   ├── mock
│   │   │   ├── chat.schema.ts
│   │   │   ├── chatRoome.schema.ts
│   │   │   ├── mongoose.seed.ts
│   │   │   ├── notification.schema.ts
│   │   │   ├── payment.schema.ts
│   │   │   └── pointLog.schema.ts
│   │   ├── prisma
│   │   └── transaction
│   ├── pg
│   │   ├── pg.module.ts
│   │   ├── pg.service.ts
│   │   └── portone.provider.ts
│   ├── queue
│   │   ├── bullmq.module.ts
│   │   ├── points.processor.ts
│   │   └── userStats.processor.ts
│   └── storage
│       └── s3
│           ├── s3.config.ts
│           ├── s3.module.ts
│           └── s3.service.ts
├── app.module.ts
└── main.ts

About

코드잇 스프린트 2기 고급프로젝트 2팀

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors