포스트

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를 써보니까, 실제 개인 프로젝트를 만들 때, 사용자 데이터가 부족한 경우를 대비하여 위의 기능들을 이용하여 사용자를 만들어 낼 수 있을 것 같다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.