30일차 - Node.js 숙련(6) 아이템 시뮬레이션 만들기

이상민·2024년 9월 10일

TIL

목록 보기
30/50

아이템 시뮬레이션 만들기

  • 아이템 시뮬레이터란?
    • 게임 클라이언트에 접속을 할 수 없을 때 현재 나의 게임 아이템 상황 및 다른 사람들의 게임 아이템 상황이 어느정도 갖춰졌는지 볼 수 있도록 정보를 제공하는 서비스
  • 텍스트 rpg 과제가 마무리된지 얼마안된거 같은데 새로운 과제가 주어졌다. 바로 아이템 시뮬레이션 만들기이다.
  • 목표는 Node.js와 Express.js를 활용해 아래와 같이 나만의 게임 아이템 시뮬레이터 서비스 API를 만드는것

  • 사실 주어진 강의도 전부 들은 상태가 아니라 막막했지만, 공부했던 내용을 최대한 이용해서 만들어 보기로 했다.

개발 가이드

  1. 웹 프레임워크
    Node.js의 대표적인 웹 프레임워크인 Express를 이용합니다.
  2. 패키지 매니저
    npm
    또는 yarn 중 편한것을 이용합니다.
    - 🚨 주의사항
    - 둘 중 어떤 것을 사용해도 좋지만, 혼용해서 사용하면 안됩니다.
    - package-lock.json, yarn.lock이 동시에 있으면 안됩니다. (의도와 다른 동작을 일으킬 수 있습니다.)
  3. 모듈 시스템
    기본 모듈 시스템(CommonJS, type: "commonjs") 또는
    ES6 부터 도입 된 모듈 시스템(ESModule, type: "module")을 이용합니다.
    - 🚨 주의사항
    - 둘 중 어떤 것을 사용해도 좋지만, 혼용해서 사용하면 안됩니다.
    - require/exportsimport/export가 동시에 있으면 안됩니다.
  4. 데이터베이스
    숙련 주차 강의 후반에서 다룬 MySQL을 사용합니다.
    직접 설치하지 않고, Cloud 서비스인 AWS RDS를 이용합니다.
  5. ORM(Object Relational Mapping)
    MySQL
    의 데이터를 쉽게 읽고 쓰게 해주는 Prisma를 사용합니다.

아이템 시뮬레이터 필수 기능 가이드

프로젝트 관리

  • 먼저 위와같은 파일들을 통해 중요 프로젝트 파일들을 보호하고 일정한 코드 포맷팅이 유지 되도록 하자.

AWS EC2 배포

  • 여러분의 완성된 프로젝트를 AWS EC2에 배포해주세요!
  • 배포된 IP 주소를 제출해주세요!

인증 미들웨어 구현

  • Request의 Authorization 헤더에서 JWT를 가져와서 인증 된 사용자인지 확인하는 Middleware를 구현합니다.

    • 클라이언트에서는 쿠키로 JWT를 전달하지 않습니다.
    • 오로지 Authorization 헤더로만 JWT를 전달하니 이 점 유의해주세요!
  • 인증에 실패하는 경우에는 알맞은 Http Status Code와 에러 메세지를 반환 해야 합니다.

    • Authorization에 담겨 있는 값의 형식이 표준(Bearer )과 일치하지 않는 경우
      • 위와 같은 형식을 통상적으로 베어러-토큰이라고 말을 합니다.
    • JWT의 유효기한이 지난 경우
    • JWT 검증(JWT Secret 불일치, 데이터 조작으로 인한 Signature 불일치 등)에 실패한 경우
  • 인증에 성공하는 경우에는 req.locals.user와 같은 곳에 인증 사용자 정보를 담고, 다음 동작을 진행합니다.

  • API에서 (JWT 인증 필요)라고 마킹된 부분은 반드시 해당 인증 미들웨어를 거쳐야하니 참고해주세요!

    데이터베이스 모델링

    아이템 테이블 만들기

먼저 아이템 테이블을 만들어 보기로 했다. aws rds 에서 데이터베이스를 만들어준뒤 .env 파일을 통해 현재 vscode 파일에 연동해주자.

그다음 prisma 파일의 schema.prisma 파일에 아이템 테이블을 위한 요소들을 입력해준뒤 npx prisma db push를 통해 데이터베이스에 넣어주자
그럼 아래와 같이 테이블안에 요소들이 들어온 모습을 확인할 수 있다.

아이템 생성 API

아이템 코드(itemCode), 아이템 명(itemName), 공격력(atk) 및 아이템 가격(price)을 request에서 전달 받아보자. 이 때, 아이템 능력은 JSON 포맷으로 전달한다. 먼저 아래와 같이 vscode에서 아이템 생성 api 에 필요한 코드들을 입력해준다.
그 다음 insomnia 를 통해 아래와 같이 body 에 json 형태로 아이템 요소들을 입력해주면 아래처럼 정상적으로 itemCode: 5, 파멸의 창이라는 공격력 140에 1400원 가격의 아이템이 생성된 모습을 확인 할 수 있다.

아이템 수정 API

아이템 수정은 생성에서 사용한 POST 대신 수정이 가능한 PUT을 사용하였다. Where 절의 itemCode를 이용해 검색한 뒤, data의 요소들을 수정하는 것이다.

itemCode 가 5였던 파멸의 창을 공격력이 160에 가격(price)이 1600원인 파멸의 삼지창으로 바꾸어 보자.

그러면 마찬가지로 아래처럼 수정되었다는 메세지와 함께 변경된 모습을 확인할 수 있다.

아이템 목록 조회 API

전체 아이템 목록을 조회하는 법은 가장 간단하다. GET과 findMany 를 통해 전체 아이템 목록을 조회 할 수있다.위 코드를 vscode에 입력해준뒤 insomnia로 돌아와 GET을 통해 URL을 검색해주면
아래처럼 지금 까지 내가 생성한 아이템 목록들이 코드번호 순서대로 나열하게 된다.

아이템 상세 조회 API

마지막으로 아이템 상세 조회를 해보자. 특정 아이템 조회도 마찬가지로 GET을 통해 Where절의 itemCode로 검색하는 방법이다.

insomnia로 들어가 GET에서 URL을 입력해준뒤 마지막에 몇번째 코드의 아이템을 조회할 것인지 입력해주면 된다.
1번째 아이템 코드로 조회 하면 아래처럼 파멸의 단검 아이템이 조회되는 모습을 볼 수 있따.

오늘은 아이템 테이블과 아이템 생성 , 수정 , 조회 API들을 구현해 보았다. 다음에는 비슷한 방법으로 JWT를 이용해 캐릭터 생성을 해보도록 하자.

0개의 댓글