Skip to content
 
 

Repository files navigation

2025.01.06 ~ 2025.02.25

핏메이트 서비스 바로가기 🏃

Back-End

FS-2기 Part4. 고급 프로젝트 1팀

 

  1. 서비스 소개
  2. 기술 스택
  3. 팀원 소개
  4. R&R
  5. 폴더 구조
  6. 자료

 

서비스 이름: 핏메이트(FitMate)

  • 핏메이트는 운동 전문가인 강사님과 건강 운동을 배우고 싶은 유저를 연결하여, 개인 맞춤형 운동 프로그램을 제공합니다.
    유저는 자신의 건강 상태, 운동 목표, 선호도에 맞는 운동 전문가를 찾아 1:1 맞춤형 운동 프로그램을 받게 되며,
    이를 통해 더 효율적이고 지속 가능한 운동 계획을 세울 수 있습니다.

    강사님은 각 유저의 목표와 상황에 맞춘 체계적인 운동 계획을 제시하고, 꾸준한 피드백과 지도를 통해 올바른 운동 습관을 형성할 수 있도록 도와줍니다.
    또한, 운동 강사와 유저 간의 지속적인 소통을 통해 유저는 자신의 진행 상황을 점검하고, 필요한 부분에 대한 조정을 할 수 있습니다.

    이 서비스는 유저가 건강하고 효과적인 운동을 지속적으로 할 수 있도록 도와주는 동시에,
    운동 강사들에게는 자신만의 클라이언트를 관리하고 전문성을 발휘할 수 있는 기회를 제공합니다.

    🔝 목차로 돌아가기

 

  • environment
    • VS Code, Prettier, ESLint, TypeScript, npm
  • infra
    • EC2, PM2, Nginx, Let's Encrypt SSL, Github Actions, docker, Git & Github, Amazon S3
  • Real-time
    • SSE, Socket.io
  • tools
    • Notion, Slack, Discord, Gather, Zoom
  • backend:
    • NodeJS, Express.js
  • Authentication
    • JWT, OAuth 2.0, Passport, bcrypt, async-local-storage
  • Scheduling
    • @nest/schedule
  • Queue
    • BullMQ
  • Email
    • Nodemailer
  • Database
    • MongoDB, PostgreSQL, Redis
  • Etc
    • Swagger

🔝 목차로 돌아가기

 

김민선 소재희 이동훈
alscksdlek BuffSo ciin1411

🔝 목차로 돌아가기

 

김민선

Chores
  • 팀장 + 백엔드장
  • 백엔드 기초 세팅 (폴더 아키텍처 설계, 린트 설정)
  • 이슈 및 PR 템플릿 세팅
  • 백엔드 일정 관리
  • 백엔드 발표자료 정리
  • 백엔드 배포 (EC2 인스턴스 내 서버 구축 + docker로 redis 컨테이너 실행 + RDS DB인스턴스 연결 + PM2 이용 자동 재시작 + MongoDB Atlas 연동)
  • Nginx 리버스 프록시 & HTTPS 적용 ( Let's Encrypt SSL 인증서 적용 및 자동 갱신 설정)
  • CI/CD 자동화 (GitHub Actions)
Development
  • 담당 모듈: auth, cache, common, email, mail, mq, profile, s3, user, config
  • 로컬 회원가입 및 nodemailer 적용 이메일 전송 및 인증(인증 번호)
  • 로컬 로그인
  • 구글 회원가입, 로그인(passport미사용)
  • 네이버 카카오 회원가입, 로그인(passport 사용)
  • refreshToken 활용 accessToken 재발급 및 유저 세션 연장 (sliding session)
  • 비밀번호 변경
  • 로그아웃
  • AccessTokenGuard 생성(유저 정보 조회)
  • async local storage 적용 (Request 단위 Context 관리)
  • user 조회
  • profile 생성, 조회, 업데이트
  • profile 이미지 S3 presignedUrl 적용
  • redis 적용
  • bullMq 적용

 

소재희

Chores
  • 발표
  • api 명세서 관리
Development
  • 데이터베이스 설계
  • 레슨 관련 API 개발
    • 레슨 요청 및 취소 기능
    • 레슨 목록 및 레슨 상세 조회
    • 내가 신청한 레슨 목록 조회
    • 나의 요청 레슨에 대한 지정 견적 요청 생성
    • 지정 견적 요청에 대한 반려 기능 (트레이너)
  • 견적 관련 API 개발
    • 견적 작성 기능
    • 견적 목록 및 견적 상세 조회
    • 견적 확정 및 반려 기능
    • 리뷰 작성 가능한 견적 목록 조회
  • 알림 시스템 구현
    • 유저 알림 목록 조회
    • 특정 알림 읽음 처리 (토글)
    • 특정 유저에게 알림 전송 (SSE 방식)
    • 트리거와 저장 프로시저를 이용한 알림 생성 기능 개발
  • Fitmate AI 챗봇 구현
    • OpenAI API를 이용하여 맞춤형 운동 추천 챗봇 개발

 

이동훈

Chores
  • 백엔드 깃허브 README.md 작성
Development
  • 담당 모듈: Trainer, Review, Chat
  • Trainer
    • 강사님 목록 조회
    • 찜한 강사님 목록 조회
    • 특정 강사에 대한 찜수와 찜여부 조회
    • 강사님 찜하기
    • 찜한 강사 취소하기
  • Review
    • 내가 작성한 리뷰
    • 리뷰 작성
    • 리뷰 목록 조회
    • 특정 트레이너 리뷰 점수 조회
  • Chat
    • 채팅방 생성
    • 채팅 보내기
    • 채팅방 채팅 내역 조회
    • 내가 참여중인 채팅방 조회
    • 채팅방 나가기

🔝 목차로 돌아가기

 

dev
├── docs
│   └── test.txt
├── eslint.config.js
├── logs
│   ├── 2025-01-06-warn.log
│   ├── 2025-02-17-debug.log
│   ├── 2025-02-18-debug.log
│   ├── 2025-02-19-debug.log
│   ├── 2025-02-20-debug.log
│   ├── 2025-02-21-debug.log
│   ├── combined.log
│   └── error.log
├── nest-cli.json
├── package-lock.json
├── package.json
├── prisma
│   ├── migrations
│   │   ├── 20250203091539_init_schema
│   │   │   └── migration.sql
│   │   ├── 20250203091557_add_notification_sp_trigger
│   │   │   └── migration.sql
│   │   ├── 20250213084946_remove_user_refresh_token
│   │   │   └── migration.sql
│   │   └── migration_lock.toml
│   ├── mock
│   │   ├── direct_quote_request.mock.ts
│   │   ├── favorite_trainers.mock.ts
│   │   ├── lesson_quote.mock.ts
│   │   ├── lesson_request.mock.ts
│   │   ├── profile.mock.ts
│   │   ├── review.mock.ts
│   │   └── user.mock.ts
│   ├── prisma.module.ts
│   ├── prisma.service.ts
│   ├── schema.prisma
│   └── seed.ts
├── src
│   ├── app.module.ts
│   ├── auth
│   │   ├── auth.controller.ts
│   │   ├── auth.module.ts
│   │   ├── auth.service.ts
│   │   ├── decorator
│   │   │   └── user.decorator.ts
│   │   ├── dto
│   │   │   └── auth.dto.ts
│   │   ├── guard
│   │   │   ├── access-token.guard.ts
│   │   │   ├── kakao.guard.ts
│   │   │   ├── naver.guard.ts
│   │   │   └── refresh-token.guard.ts
│   │   ├── interface
│   │   │   └── auth.service.interface.ts
│   │   ├── strategy
│   │   │   ├── kakao.strategy.ts
│   │   │   ├── local.strategy.ts
│   │   │   ├── naver.strategy.ts
│   │   │   └── refresh-token.strategy.ts
│   │   └── type
│   │       └── auth.type.ts
│   ├── cache
│   │   ├── cache.client.ts
│   │   ├── cache.config.module.ts
│   │   ├── cache.module.ts
│   │   ├── cache.service.ts
│   │   └── interface
│   │       └── cache.service.interface.ts
│   ├── chat
│   │   ├── chat.controller.ts
│   │   ├── chat.gateway.ts
│   │   ├── chat.module.ts
│   │   ├── chat.repository.ts
│   │   ├── chat.schema.ts
│   │   ├── chat.service.ts
│   │   ├── chatRoom.schema.ts
│   │   ├── dto
│   │   │   └── chat.dto.ts
│   │   ├── interface
│   │   │   ├── chat.repository.interface.ts
│   │   │   └── chat.service.interface.ts
│   │   └── type
│   │       └── chat.type.ts
│   ├── chatbot
│   │   ├── chatbot.controller.ts
│   │   ├── chatbot.module.ts
│   │   ├── chatbot.service.ts
│   │   └── dto
│   │       └── chatbot.dto.ts
│   ├── common
│   │   ├── als
│   │   │   ├── als.middleware.ts
│   │   │   ├── als.module.ts
│   │   │   ├── als.type.ts
│   │   │   └── store-validator.ts
│   │   ├── jwt.module.ts
│   │   └── uuid.pipe.ts
│   ├── configs
│   │   └── jwt.config.ts
│   ├── email
│   │   ├── email.module.ts
│   │   ├── email.service.ts
│   │   └── interface
│   │       └── email.service.interface.ts
│   ├── exception
│   │   ├── auth-exception-message.ts
│   │   ├── chat-exception-message.ts
│   │   ├── chatbot-exception-meaage.ts
│   │   ├── exception-message.ts
│   │   ├── global-exception-filter.ts
│   │   ├── lesson-exception-message.ts
│   │   ├── notification-exception-message.ts
│   │   ├── profile-exception-message.ts
│   │   ├── quote-exception-message.ts
│   │   ├── review-exception-message.ts
│   │   └── trainer-exception-message.ts
│   ├── lesson
│   │   ├── dto
│   │   │   └── lesson.dto.ts
│   │   ├── interface
│   │   │   ├── lesson-repository.interface.ts
│   │   │   ├── lesson-scheduler-service.interface.ts
│   │   │   └── lesson-service.interface.ts
│   │   ├── lesson-scheduler.service.ts
│   │   ├── lesson.controller.ts
│   │   ├── lesson.module.ts
│   │   ├── lesson.repository.ts
│   │   ├── lesson.service.ts
│   │   └── type
│   │       └── lesson.type.ts
│   ├── logger
│   │   ├── logging.interceptor.ts
│   │   └── winston-logger.ts
│   ├── mail
│   │   ├── mail.module.ts
│   │   ├── mail.processor.ts
│   │   ├── mail.service.ts
│   │   └── templates
│   │       └── verificationEmail.pug
│   ├── main.ts
│   ├── mq
│   │   ├── mq.module.ts
│   │   └── queue.constants.ts
│   ├── notification
│   │   ├── dto
│   │   │   └── notification.dto.ts
│   │   ├── interface
│   │   │   ├── notification-repository.interface.ts
│   │   │   └── notification-service.interface.ts
│   │   ├── notification.controller.ts
│   │   ├── notification.module.ts
│   │   ├── notification.repository.ts
│   │   ├── notification.service.ts
│   │   └── type
│   │       └── notification.type.ts
│   ├── profile
│   │   ├── decorator
│   │   │   └── role-field-validator.ts
│   │   ├── dto
│   │   │   └── profile.dto.ts
│   │   ├── interceptor
│   │   │   └── role.interceptor.ts
│   │   ├── interface
│   │   │   ├── profile.repository.interface.ts
│   │   │   └── profile.service.interface.ts
│   │   ├── profile.controller.ts
│   │   ├── profile.module.ts
│   │   ├── profile.repository.ts
│   │   ├── profile.service.ts
│   │   └── type
│   │       ├── profile.dto.ts
│   │       └── profile.type.ts
│   ├── quote
│   │   ├── dto
│   │   │   └── quote.dto.ts
│   │   ├── interface
│   │   │   ├── quote-repository.interface.ts
│   │   │   └── quote-service.interface.ts
│   │   ├── quote.controller.ts
│   │   ├── quote.module.ts
│   │   ├── quote.repository.ts
│   │   ├── quote.service.ts
│   │   └── type
│   │       └── quote.type.ts
│   ├── review
│   │   ├── dto
│   │   │   └── review.dto.ts
│   │   ├── interface
│   │   │   ├── review.repository.interface.ts
│   │   │   └── review.service.interface.ts
│   │   ├── review.controller.ts
│   │   ├── review.module.ts
│   │   ├── review.repository.ts
│   │   ├── review.service.ts
│   │   └── type
│   │       └── review.type.ts
│   ├── s3
│   │   ├── s3.controller.ts
│   │   ├── s3.module.ts
│   │   └── s3.service.ts
│   ├── trainer
│   │   ├── dto
│   │   │   └── trainer.dto.ts
│   │   ├── interface
│   │   │   ├── trainer.repository.interface.ts
│   │   │   └── trainer.service.interface.ts
│   │   ├── trainer.controller.ts
│   │   ├── trainer.module.ts
│   │   ├── trainer.repository.ts
│   │   ├── trainer.service.ts
│   │   └── type
│   │       └── trainer.type.ts
│   ├── user
│   │   ├── dto
│   │   │   └── user.dto.ts
│   │   ├── interface
│   │   │   ├── user.repository.interface.ts
│   │   │   └── user.service.interface.ts
│   │   ├── type
│   │   │   └── user.type.ts
│   │   ├── user.controller.ts
│   │   ├── user.module.ts
│   │   ├── user.repository.ts
│   │   └── user.service.ts
│   └── utils
│       ├── chat-utils.ts
│       ├── date.util.ts
│       ├── filter-sensitive-user-data.ts
│       ├── get-env.ts
│       ├── hashing-password.ts
│       ├── lesson.util.ts
│       └── map-to-role.ts
├── tsconfig.build.json
├── tsconfig.build.tsbuildinfo
├── tsconfig.json
└── README.md

🔝 목차로 돌아가기

 

🌐 Front-End 배포 사이트
📁 Back-End Repository
📄 1팀 프로젝트 문서

🔝 목차로 돌아가기

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages