2024.06.05 프로그래머스-북끼오 (bookkio) 마무리 및 랜덤 API
Bookkio 프로젝트 11일차
- Github : https://github.com/ykdman/Programmers-DevCourse/tree/main/bookkio
- 프로젝트를 마무리 하며…
프로젝트를 어느정도 마무리 한 후…
현재 데브코스에서 진행했던 Bookkio (도서 구매 서비스) 의 백엔드 API 기능을 전부 실행은 되도록 마무리 하였다.
이제 고려할 것은 프로젝트의 구조, 코드개선과 같은 부분이 남아있다.
실제 작성하면서, 강의에서는 변수명에, camel Case와 snake_case를 섞어서 사용하였는데
나는 애초에 이전에 직장에서 개발을 진행할 때도, 변수명이나 작명 부분에서 상당히 신경을 쓰는 스타일이었어서, 애초에 모두 자바스크립트의 Camel케이스를 사용했다. 다만 JSON 응답 값으로만 snake_case를 사용하였다.
개선해야할 것으로 패키지 구조도 적었는데, MVC 와 같이 실제 Model 쪽에 대해서는 깊게 사용하지 않았지만, View와 Controller 부분에서는 이미 구조를 정립하고 시작하여서 크게 바꿀 부분이 없다고 생각이 들었다.
그리고 프로젝트에서 계속해서 작업 해주어야 하는 것 중에 빠질 수 없는 것이 예외처리
가 아닐까 싶다.
try…catch 문을 사용하여 추가적으로 오류가 예상되는 부분에 예외처리를 진행해야 한다.
추가로 현재는 강의에서나 내가 직접 만든 데이터를 DB에 넣고 API를 만들었기 때문에 임시로 랜덤 API를 통해 더 많은 데이터를 DB에 넣는 방법을 알아보려고 한다.
랜던 유저 데이터 API 사용해보기
- https://randomuser.me/
- https://fakerjs.dev/
외부 API
- faker라는 js를 이용하여 사용자 정보를 랜덤으로 얻어올 수 있다.
faker-js 설치
1
npm install @faker-js/faker --save-dev
- faker-js 를 개발 의존성으로 설치한다.
faker-js 사용
1
2
3
4
5
6
7
8
9
10
11
12
const { faker } = require("@faker-js/faker");
console.log("internet 인스턴스");
console.log(faker.internet.email());
console.log(faker.internet.userName());
console.log(faker.internet.password());
console.log("\nperson 인스턴스");
console.log(faker.person.firstName());
console.log(faker.person.fullName());
console.log(faker.person.sex());
- internet 인스턴스를 사용하여, 웹사이트에서 이용되는 사용자 정보에 관련한 랜덤 값을 얻을 수 있다.
- person 인스턴스는 실제 사용자의 개인정보의 값을 얻기에 유용하다.
1
2
3
4
5
6
7
8
9
10
/결과
internet 인스턴스
Phoebe.Mills9@gmail.com
Guadalupe43
XknhEcoO73EW8gT
person 인스턴스
Linnie
Linda Lang
female
프로젝트에 faker-js 적용해보기
bookkio 프로젝트에 faker라우터를 생성하여, 랜덤한 사용자 정보를 응답받을 수 있는 API를 만든다.
랜덤한 사용자 정보 얻어오기 API
faker.data.js
1 2 3 4
const { faker } = require("@faker-js/faker"); exports.faker = faker;
faker.route.js
1 2 3 4 5 6 7 8
const express = require("express"); const { getRandomUser } = require("../controller/faker.controller.js"); const router = express.Router(); router.get("/user", getRandomUser); module.exports = router;
faker.contoller.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
const { StatusCodes } = require("http-status-codes"); const { faker } = require("../model/faker.data.js"); /** * 랜덤한 사용자 정보를 반환하는 API * @param {import("express").Request} req * @param {import("express").Response} res */ const getRandomUser = (req, res) => { const userData = { user_name: faker.internet.userName(), email: faker.internet.email(), password: faker.internet.password(), contact: faker.helpers.fromRegExp("010-[0-9]{4}-[0-9]{4}"), }; return res.status(StatusCodes.OK).json(userData); }; module.exports = { getRandomUser, };
랜덤하게 사용자 한 명의 정보를 얻어 올 수 있는 getRandomUser 컨트롤러 함수를 작성하였다.
입력한 수만 큼 랜덤한 사용자 정보 생성하기
faker.route.js
1 2 3 4 5 6 7 8 9 10 11 12
const express = require("express"); const { getRandomUser, createRandomUsers, } = require("../controller/faker.controller.js"); const router = express.Router(); router.get("/user", getRandomUser); router.post("/user/:max", createRandomUsers); module.exports = router;
faker.controller.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
const { StatusCodes } = require("http-status-codes"); const { faker } = require("../model/faker.data.js"); /** * 랜덤한 사용자 정보를 반환하는 API * @param {import("express").Request} req * @param {import("express").Response} res */ const getRandomUser = (req, res) => { const userData = { user_name: faker.internet.userName(), email: faker.internet.email(), password: faker.internet.password(), contact: faker.helpers.fromRegExp("010-[0-9]{4}-[0-9]{4}"), }; return res.status(StatusCodes.OK).json(userData); }; /** * 입력한 수만큼의 랜덤 사용자를 생성하는 API * @param {import("express").Request} req * @param {import("express").Response} res */ const createRandomUsers = (req, res) => { const { max } = req.params; const userDatas = []; for (let i = 0; i < +max; i++) { let user = { user_name: faker.internet.userName(), email: faker.internet.email(), password: faker.internet.password(), contact: faker.helpers.fromRegExp("010-[0-9]{4}-[0-9]{4}"), full_name: faker.person.fullName(), company: faker.company.name(), }; userDatas.push(user); } return res.status(StatusCodes.OK).json(userDatas); }; module.exports = { getRandomUser, createRandomUsers, };
랜덤 데이터 API를 써보니까, 실제 개인 프로젝트를 만들 때, 사용자 데이터가 부족한 경우를 대비하여 위의 기능들을 이용하여 사용자를 만들어 낼 수 있을 것 같다.