{"id":26868764,"url":"https://github.com/devbong92/sparta-item-simulator","last_synced_at":"2026-05-18T04:43:14.301Z","repository":{"id":255985902,"uuid":"852588184","full_name":"devbong92/sparta-item-simulator","owner":"devbong92","description":"[내일배움캠프] 개인과제 - 아이템 시뮬레이터","archived":false,"fork":false,"pushed_at":"2024-09-12T08:47:12.000Z","size":6974,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-09-12T18:54:39.629Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://vamuzz.shop:3020/","language":"CSS","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/devbong92.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-09-05T04:22:01.000Z","updated_at":"2024-09-12T08:47:15.000Z","dependencies_parsed_at":"2024-09-11T17:08:09.190Z","dependency_job_id":null,"html_url":"https://github.com/devbong92/sparta-item-simulator","commit_stats":null,"previous_names":["devbong92/sparta-item-simulator"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devbong92%2Fsparta-item-simulator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devbong92%2Fsparta-item-simulator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devbong92%2Fsparta-item-simulator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devbong92%2Fsparta-item-simulator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devbong92","download_url":"https://codeload.github.com/devbong92/sparta-item-simulator/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246423523,"owners_count":20774796,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-03-31T05:34:56.733Z","updated_at":"2026-05-18T04:43:09.254Z","avatar_url":"https://github.com/devbong92.png","language":"CSS","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Chapter 3, 개인과제 : 아이템 시뮬레이터\n\n## 사용법\n\n- 최초 실행 시\n\n  - yarn 설치(global) : sudo npm install -g yarn\n  - 의존성 및 패키지 설치 : yarn\n\n- 실행 : yarn run start\n- Swagger : yarn run swagger\n- Site : ${domain}/\n\n## 구조 \n```\n📁 ROOT\n├── README.md\n├── package.json\n├── 📁 prisma\n│   └── schema.prisma\n├── 📁 src\n│   ├── app.js\n│   ├── 📁 middlewares\n│   │   ├── auth.middleware.js\n│   │   ├── authPage.middleware.js\n│   │   └── error-handling.middleware.js\n│   ├── 📁 routes\n│   │   ├── character.router.js\n│   │   ├── characterActions.router.js\n│   │   ├── items.router.js\n│   │   ├── pages.router.js\n│   │   └── users.router.js\n│   ├── 📁 swagger\n│   │   ├── swagger-output.json\n│   │   └── swagger.js\n│   └── 📁 utils\n│       ├── Utils.js\n│       └── 📁 prisma\n│           └── index.js\n└── yarn.lock\n```\n\n## 필수 기능\n\n- [x] 회원가입 API\n- [x] 로그인 API\n- [x] 캐릭터 생성 API (JWT 인증만 가능)\n- [x] 캐릭터 삭제 API (JWT 인증만 가능)\n- [x] 캐릭터 목록 조회 API (JWT 인증만 가능)\n- [x] 캐릭터 상세 조회 API (JWT으로 기능 구분)\n- [x] 아이템 생성 API\n- [x] 아이템 수정 API\n- [x] 아이템 목록 조회 API\n- [x] 아이템 상세 조회 API\n\n## 도전 기능\n\n- [x] 게임머니 100 증가 API (JWT 인증만 가능)\n- [x] 아이템 구입 API (JWT 인증만 가능)\n- [x] 아이템 판매 API (JWT 인증만 가능)\n- [x] 캐릭터가 보유한 인벤토리 내 아이템 목록 조회 API (JWT 인증만 가능)\n- [x] 캐릭터가 장착한 아이템 목록 조회 API\n- [x] 아이템 장착 API (JWT 인증만 가능)\n- [x] 아이템 탈착 API (JWT 인증만 가능)\n\n## API 명세서\n\n[API 명세서 (Notion) ](https://dev-bong92.notion.site/3758f20ae7f04e3993743a97092442c4?v=13d7c277ee8c4f7c8a534e684a4e161b)\n\n[Swagger-UI](http://vamuzz.shop:3020/api-docs)\n\n## ERD\n\n![](./assets/img/erd.png)\n\n### 테이블 목록\n\n| 구분 | 테이블명        | 테이블명(영문) | 설명                    |\n| ---- | --------------- | -------------- | ----------------------- |\n| 필수 | 회원 테이블     | Users          | 회원 정보               |\n| 필수 | 아이템 테이블   | Items          | 아이템 정보             |\n| 필수 | 캐릭터 테이블   | Characters     | 회원 캐릭터 정보 테이블 |\n| 도전 | 인벤토리 테이블 | Inventories    | 캐릭터 소지품 테이블    |\n| 도전 | 장비 테이블     | Equipments     | 캐릭터 착용장비 테이블  |\n\n## 트러블 슈팅\n\n- [AWS RDS 비용 관련](https://velog.io/@vamuzz/AWS-RDS-public%EC%97%90%EC%84%9C-private%EC%9C%BC%EB%A1%9C)\n- [express-swagger](https://velog.io/@vamuzz/express-swagger%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0)\n\n---\n\n## Q \u0026 A\n\n### 1. 암호화 방식\n\nQ, 비밀번호를 DB에 저장할 때 Hash를 이용했는데, Hash는 단방향 암호화와 양방향 암호화 중 어떤 암호화 방식에 해당할까요?\n\n- 단방향 암호화\n\nQ, 비밀번호를 그냥 저장하지 않고 Hash 한 값을 저장 했을 때의 좋은 점은 무엇인가요?\n\n- 복호화할 수 없어서 보안성이 높다.\n\n### 2. 인증 방식\n\nQ, JWT(Json Web Token)을 이용해 인증 기능을 했는데, 만약 Access Token이 노출되었을 경우 발생할 수 있는 문제점은 무엇일까요?\n\n- 다른 사용자가 사용할 수 있고, Token에 들어있는 데이터도 노출될 수 있음.\n\nQ, 해당 문제점을 보완하기 위한 방법으로는 어떤 것이 있을까요?\n\n- Access Token에 만료기간을 설정하여, 해당 토큰을 긴 시간 사용할 수 없게만든다.\n- 토큰 내부에 유출되면 안되는 값을 넣지 않는다.\n- 토큰 생성 시, 요청위치에 대한 정보를 저장하고 비교하고 아닌 경우, 블랙스트에 등록\n\n### 3. 인증과 인가\n\nQ, 인증과 인가가 무엇인지 각각 설명해 주세요.\n\n- 인증(Authentication)\n  - 서비스를 이용하려는 사용자가 인증된 신분을 가진 사람이 맞는지 검증하는 작업\n  - 로그인 기능\n- 인가(Authorization)\n  - 인증된 사용자가 특정 리소스에 접근하거나 특정 작업을 수행할 수 있는 권한이 있는지를 검증하는 작업\n  - 권한 확인\n\nQ, 위 API 구현 명세에서 인증을 필요로 하는 API와 그렇지 않은 API의 차이가 뭐라고 생각하시나요?\n\n- 인증을 필요로 하는 API의 경우, 특정 유저정보를 필요로 하는데 인증/인가를 통해 정보를 확인합니다.\n\nQ, 아이템 생성, 수정 API는 인증을 필요로 하지 않는다고 했지만 사실은 어느 API보다도 인증이 필요한 API입니다. 왜 그럴까요?\n\n- 유저의 권한이 아니라 관리자의 권한으로 확인해야한다고 생각합니다.\n  하지만, 지금 구성되어있는 API에는 해당 관리자 관련처리가 안되어있기 때문이라고 생각합니다.\n\n### 4. Htttp Status Code\n\nQ, 과제를 진행하면서 사용한 Http Status Code를 모두 나열하고, 각각이 의미하는 것과 어떤 상황에 사용했는지 작성해 주세요.\n\n- 200 OK\n\n  - 요청이 성공했음을 나타내는 성공 응답 상태 코드입니다\n  - 샤용된 상황\n    - 캐릭터 상세 조회 : 성공\n    - 캐릭터 목록 조회 : 성공\n    - 캐릭터 삭제 : 성공\n    - 게임머니 증가 : 성공\n    - 인벤토리 목록 조회 : 성공\n    - 아이템 장착 : 성공\n    - 아이템 탈착 : 성공\n    - 장착아이템 목록 조회 : 성공\n    - 아이템 목록 조회 : 성공\n    - 아이템 상세 조회 : 성공\n    - 로그인 : 성공\n\n- 201 Created\n\n  - 요청이 성공적으로 처리되었으며, 자원이 생성되었음을 나타내는 성공 상태 응답 코드입니다\n  - 사용된 상황\n    - 캐릭터 생성 : 성공\n    - 회원가입 : 성공\n    - 아이템 생성 : 성공\n    - 아이템 수정 : 성공\n\n- 400 Bad Request\n\n  - 서버가 클라이언트 오류(예: 잘못된 요청 구문, 유효하지 않은 요청 메시지 프레이밍, 또는 변조된 요청 라우팅) 를 감지해 요청을 처리할 수 없거나, 하지 않는다는 것을 의미합니다\n    - 사용된 상황\n      - 캐릭터 삭제 : 실패 - 캐릭터 정보 조회 실패\n      - 캐릭터 상세 조회 : 실패 - 캐릭터 정보 조회 실패\n      - 게임머니 증가 : 실패 - 캐릭터 정보 조회 실패\n      - 아이템 구입 : 실패 - 캐릭터 정보 조회 실패\n      - 아이템 판매 : 실패 - 캐릭터 정보 조회 실패\n      - 인벤토리 목록 조회 : 실패 - 캐릭터 정보 조회 실패\n      - 아이템 장착 : 실패 - 캐릭터 정보 조회 실패\n      - 아이템 탈착 : 실패 - 캐릭터 정보 조회 실패\n      - 캐릭터 장비 목록 조회 : 실패 - 캐릭터 정보 조회 실패\n\n- 401 Unauthorized\n\n  - 요청된 리소스에 대한 유효한 인증 자격 증명이 없기 때문에 클라이언트 요청이 완료되지 않았음을 나타냅니다\n  - 사용된 상황\n    - 인증 미들웨어 : 실패 - token 파싱 실패, 토큰 대상 미존재 등\n    - 로그인 : 실패 - 아이디 또는 비밀번호 불일치 시\n\n- 404 Not Found\n\n  - 서버가 요청받은 리소스를 찾을 수 없다는 것을 의미합니다\n  - 사용된 상황\n    - 없는 페이지 조회\n\n- 409 Conflict\n\n  - 서버의 현재 상태와 요청이 충돌했음을 나타냅니다\n  - 사용된 상황\n    - 회원가입 : 이메일 중복 시 사용\n    - 캐릭터 생성 : 캐릭터명 중복 시 사용\n    - 아이템 장착 : 실패 - 이미 착용하고 있는 아이템\n    - 아이템 탈착 : 실패 - 이미 해제하고 있는 아이템\n\n- 500 Internal Server Error\n  - 요청을 처리하는 과정에서 서버가 예상하지 못한 상황에 놓였다는 것을 나타냅니다.\n  - 사용된 상황\n    - 서버 오류 발생 시\n\n### 5. 게임 경제\n\nQ, 현재는 간편한 구현을 위해 캐릭터 테이블에 money라는 게임 머니 컬럼만 추가하였습니다.\n\nQ, 이렇게 되었을 때 어떠한 단점이 있을 수 있을까요?\n\n- 게임 머니에 관련된 행동이 잦을수록 캐릭터 테이블 조회에 대한 부담이 커질 수 있습니다.\n\nQ, 이렇게 하지 않고 다르게 구현할 수 있는 방법은 어떤 것이 있을까요?\n\n- 별도의 테이블로 관리합니다.\n\nQ, 아이템 구입 시에 가격을 클라이언트에서 입력하게 하면 어떠한 문제점이 있을 수 있을까요?\n\n- 구입 가격을 변조할 가능성이 있습니다.\n\n---\n\n## 어려웠던 점\n\n- 에러 핸들링을 조금 더 세세하게 하고 싶었다.\n- swagger를 조금 더 쉽게 하는 방법이 있었을 것 같은데, 더 찾아보지 못해서 아쉽다.\n\n---\n\n#### 캐릭터 이미지 출처\n\n- \u003ca href=\"https://kr.freepik.com/free-vector/hand-drawn-clip-art-people-office-worker-character_23374868.htm#fromView=keyword\u0026page=1\u0026position=3\u0026uuid=adca9d95-7f05-4a0b-8bd7-ea072d02a20b\"\u003e작가 felicities 출처 Freepik\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevbong92%2Fsparta-item-simulator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevbong92%2Fsparta-item-simulator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevbong92%2Fsparta-item-simulator/lists"}