[TIL] 노드 숙련 개인과제

최하온·2024년 2월 2일
0

TIL

목록 보기
29/71
post-thumbnail

🚨Issue occuring


📢 개요

🏁 목표: RDB(MySQL) 데이터 모델링, JWT, Express Middleware를 이용한 인증 로직 추가
1. API 명세서를 작성하여, 최종적 결과물을 미리 파악합니다.
2. MySQL, Prisma를 이용해 데이터베이스를 설계하고 활용합니다.
- 데이터 모델링을 통해 ERD 작성
- Prisma를 이용한 마이그레이션 코드 및 스키마 코드 작성
- JOIN을 통해 다른 Table의 데이터와 결합
3. 인증 관련 기능을 구현합니다.
- JWT(AccessToken)의 이해
- 회원가입 API, 로그인 API, 내 정보 조회 API, 인증 Middleware 구현
- 상품 관련 기능에 인증 로직 추가

📢 요구사항

  • 필수 요구사항
    • 준비: 프로젝트 기본 세팅
      1. .env 파일을 이용해서 민감한 정보(DB 계정 정보, JWT 비밀키 등)를 관리합니다.
      2. .gitignore 파일을 생성하여 .env ,node_modules
        불필요하거나 민감한 정보가 Github에 올라가지 않도록 설정합니다.
      3. .prettierrc 파일을 생성하여 일정한 코드 형태를 유지할 수 있도록 설정합니다.
      4. package.json 파일의 scripts 항목에 dev 라는 이름을 추가하여 nodemon을 이용해서 서버를 실행할 수 있도록 합니다.
    • 설계: API 명세서 작성

개발-1: 인증 관련 기능 개발

  1. 인증 Middleware
  2. 회원가입 API
  3. 로그인 API

개발-2: 사용자 관련 기능 개발

  1. 내 정보 조회 API (인증 필요 - 인증 Middleware 사용)

개발-3: 이력서 관련 기능 개발

  1. 인증 기능 추가
  2. 모든 이력서 목록 조회 API
  3. 이력서 상세 조회 API
  4. 이력서 생성 API (✅ 인증 필요 - middleware 활용)
  5. 이력서 수정 API (✅ 인증 필요 - middleware 활용)
  6. 이력서 삭제 API (✅ 인증 필요 - middleware 활용)

테스트: API 호출 도구로 동작 확인

  1. Thunder Client 등을 이용하여 구현 한 모든 API가 정상 동작하는지 확인합니다.

배포: 누구나 이용할 수 있도록 하기

  1. AWS EC2 인스턴스에 프로젝트를 배포합니다.
  2. PM2를 이용해 Express 서버가 예상치 않게 종료 되어도 다시 실행되도록 설정합니다.

💦What I tried


1⃣ 설계

API와 ERD 작성.

패키지 설치.

es6문법으로 작성하기 위해 type는 module로, 저장 후 실행을 위해 nodemon사용.

2️⃣ 개발

ERD를 바탕으로 스키마 정의

model Users {
  userId    Int       @id @default(autoincrement()) @map("userId")
  name      String    @map("name")
  email     String    @unique @map("email")
  password  String    @map("password")
  confirm   String    @map("confirm")
  createdAt DateTime  @default(now()) @map("createdAt")
  updatedAt DateTime  @updatedAt @map("updatedAt")
  resumes   Resumes[]

  @@map("Users")
}

model Resumes {
  resumeId  Int      @id @default(autoincrement()) @map("resumeId")
  userId    Int      @map("userId")
  title     String   @map("title")
  content   String   @map("content") @db.Text
  status    Status   @default(APPLY) @map("status")
  createdAt DateTime @default(now()) @map("createdAt")
  updatedAt DateTime @updatedAt @map("updatedAt")

  users Users @relation(fields: [userId], references: [userId], onDelete: Cascade)

  @@map("Resumes")
}

enum Status {
  APPLY
  DROP
  PASS
  INTERVIEW1
  INTERVIEW2
  FINAL_PASS
}

ID는 기본키이며, 자동으로 1이 올라가게 설정.
1명의 user가 n개의 resume을 작성 할 수 있으니 1:N관계로 정의 해주기.

🤔Realization


개인 과제를 시작하였다. 인증 관련까지는 손쉽게 작성했지만 다음 포스트부터는 꽤 애를 먹고 양이 많아, 막혔던 부분만 정리해서 올릴 예정.

0개의 댓글