GithubHelp home page GithubHelp logo

argon1025 / muzi-backend Goto Github PK

View Code? Open in Web Editor NEW
1.0 1.0 0.0 384 KB

블로그 체험단 공고 통합 조회 서비스 backend

JavaScript 0.52% TypeScript 98.89% Dockerfile 0.59%
nestjs prisma ecs typescript

muzi-backend's Introduction

LastDeploy pull_request_test

Logo

Muzi Back-end

무지 백엔드 서비스
서로 다른 서비스의 맛집, 제품 체험단 공고 통합 조회 제공

Go to Service (2024.05.01 End Service) · View Swagger Doc · Report Bug · Request Feature

Introduce

Built With

  • NestJS(Express)
  • TypeScript
  • PostgreSQL/Prisma
  • AWS ECS, ECR, ALB, VPC
  • Github Actions (CI/CD)

Infra

image 인프라 구성에 대해 설명합니다.

  • Github Actions를 통해 지속적 배포를 구현합니다.
    • PR이 발생할 경우 테스트를 수행합니다.
    • main 브랜치에 업데이트가 발생할 경우 Github Actions에서 ECS 배포를 수행합니다.
  • AWS VPC private, public 서브넷을 통해 중요 인스턴스를 격리합니다.
  • AWS ECS를 통해 인스턴스를 배포합니다.
    • 클러스터 인스턴스는 EC2를 사용합니다.
    • 업데이트 배포 시 롤링 업데이트를 사용합니다.

Architecture

image 서비스별 책임에 대해 설명합니다.

  • Parsing-event
    • 파싱 요청을 관리하는 서비스입니다.
    • 동일한 이벤트를 중복으로 발행할 수 없도록 합니다.
    • 이벤트 조회 시 점유상태로 설정하여 다른 워커에게 동일한 이벤트가 조회되지 않도록 합니다.
  • Campaign
    • 캠페인 도메인을 관리하는 서비스입니다.
  • Worker
    • 일정 주기로 이벤트를 폴링 하여 요청 타입에 맞게 비즈니스 로직을 호출합니다.

Convention

이슈 관리

  • Github Projects로 이슈를 생성 및 트래킹 합니다. 링크

브랜치 정책

  • 브랜치를 병합하기 위해서는 반드시 PR을 생성하고 테스트가 통과되어야 합니다.
  • 각 이슈별로 브랜치를 분리합니다.
    • 브랜치 명칭은 {feature|fix}-#{이슈 번호} 로 생성합니다. ex) feature-#19
  • Main Develop 브랜치는 리니어 하게 관리합니다.
    • 핫픽스를 병합할 경우 이력전체를 저장하기 위해 Merge 합니다.
    • 개발 브랜치를 병합할 경우 Squash 합니다.
    • Main, Develop 간에는 Fast forward를 합니다.
  • conventionalCommits을 준수합니다

코드 컨벤션

  • 패키지 관리
    • 패키지 매니저는 pnpm을 사용합니다.
  • 네이밍
    • NestJS에서 사용하는 기본 네이밍 컨벤션을 사용합니다.
  • 코드 스타일
    • Airbnb Rule을 사용합니다.
  • 기타
    • 최대한 테스트 코드를 작성합니다.
    • 요청, 응답에 대해서 DTO를 사용하고 알맞은 Validation 및 직렬화, 역직렬화 프로세스를 거쳐야 합니다
    • Service 레이어의 경우 변경에 유연한 구조를 만들기 위해 의존성 역전을 활용합니다.
      • 객체는 하나의 책임만 가져야 하며 GOD 객체를 만드는 행위를 지양합니다.

How To Start

Docker-compose 로컬 개발환경 구성

프로젝트를 시작하기 위해서는 개발 환경이 명시적으로 구성되어있는 Docker-compose를 통해서 로컬 개발환경을 시작할 수 있습니다.

$ cd ./muzi-backend
$ docker-compose up

DB 데이터는 프로젝트 폴더 .environments/docker에 저장됩니다

NodeJS 버전 확인

cat .nvmrc

현재 프로젝트의 노드 버전을 확인할 수 있습니다.

패키지 설치

pnpm i

해당 프로젝트의 기본 패키지 매니저는 pnpm 입니다.

환경설정

.environments/.env.local 에서 로컬 환경설정을 구성할 수 있습니다

# 서비스 설정
NODE_ENV=local
SERVICE_PORT=3000
DATABASE_URL="postgresql://muzi:muzi@localhost:5432/Muzi?schema=public"

# JWT
JWT_ACCESS_TOKEN_SECRET_KEY="secret"
JWT_ACCESS_TOKEN_EXPIRES_IN="15m"
JWT_REFRESH_TOKEN_SECRET_KEY="secret"
JWT_REFRESH_TOKEN_EXPIRES_IN="30d"

# Cookie
IS_HTTP_ONLY_COOKIE=true
IS_SECURE_COOKIE=false
COOKIE_PATH="/"
COOKIE_DOMAIN="localhost"
REFRESH_TOKEN_EXPIRATION_TIME=2592000000 # 30d (milsec)

# KAKAO OAuth
# 앱 > 요약 정보 > 앱 ID
KAKAO_CLIENT_ID=""
# 앱 > 보안 > Client Secret
KAKAO_CLIENT_SECRET=""
# 리다이렉트 URL
KAKAO_REDIRECT_URL="http://localhost:3000/auth/kakao"

환경에 따라 .env.local, env.dev, .env.prod 로 구성합니다.

Prisma Client 생성

$ yarn prisma:migrate:local

이 프로젝트에서는 Prisma로 마이그레이션을 관리합니다

위 명령어를 통해 로컬환경과 마이그레이션 기록을 동기화하고 서버 애플리케이션 실행을 위한 Prisma Client 모듈이 생성됩니다

프로젝트 시작

pnpm start:local

muzi-backend's People

Contributors

argon1025 avatar

Stargazers

ybong avatar

Watchers

 avatar

muzi-backend's Issues

[BackEnd] 캠페인 스키마 컬럼수정 요구사항 반영

스키마

  • [Unique] 고유 아이디
  • 제목
  • 카테고리 (방문, 배송, 기자단, 기타)
  • [Optional] 리뷰 타깃 (블로그 인스타)
  • [Optional] 썸네일 주소
  • [Optional] 응모 시작일
  • [Optional] 응모 마감일
  • [Optional] 당첨자 발표일
  • [Optional] 도시
  • [Optional] 주소 상세
  • [Optional] 총 모집인원
  • [Optional] 신청 인원
  • 원본 주소

[BackEnd] Campaign UserCampaign 스키마 추가

Campaign

필드명 상세
id  
duplicateId 중복 검증 아이디 (고유 조합으로 생성)
resourceProvider 원출처 (강남맛집, 디너의여왕)
target 리뷰 대상 (블로그, 인스타)
category 리뷰 유형 (음식, 제품)
content 상세 내용
resourceUrl 캠페인 주소
city 캠페인 진행 도시
address 캠페인 진행 상세 주소
startedAt 캠페인 신청 시작일
endedAt 캠페인 신청 종료일
drawAt 캠페인 당첨자 발표일
modifyAt 캠페인 수정일
createdAt 캠페인 생성일

UserCampaign

필드명 상세
userId 회원 아이디
campaignId 캠페인 아이디
createdAt  

[BackEnd] 이벤트 처리 완료 지연 시 메시지 재발행 기능

이벤트를 발행 하고 점유했으나
워커가 작업을 실패하여 모종의 사유로 이벤트 스토리지에 업데이트를 하지 못했을 때
해당 이벤트 메시지를 재발행하는 로직 추가 필요

파싱 이벤트 발행시각 KST기준 새벽으로 수정 (서비스 부하)

[BackEnd] Campaign Parsing 이벤트 조회 추가 수정 기능

  • 이벤트 추가
    • 대기, 작업 진행중인 이벤트가 있다면 중복등록 하지 않음
  • 이벤트 조회
    • 대기중인 이벤트 조회 및 점유 처리
    • 중복 발행 금지
  • 이벤트 수정
    • 이벤트 처리여부 기록
  • 이벤트 히스토리 등록

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.