0213 도서 관리 프로젝트 고도화

Younha Lee·2026년 2월 13일

TIL

목록 보기
31/70

도서 테이블 생성


books 테이블을 만들고, 4개의 더미 데이터를 넣어놨어요.

BookController 떼어내기

이전에 UsersController를 라우터에서 분리했듯이

라우터와 컨트롤러를 분리했어요.

도서 전체 조회, 상세 도서 조회

도서 전체 조회 api를 위해 select books하는 코드를 추가했는데, 명세서에서 요구하는 것보다 더 많은 칼럼이 리턴되었어요.
저는 당연히 select * 를 고칠 줄 알았는데, 인강에서는 프론트에서 알아서 가공시키게 할 것이라고 해서 흠...이게 맞나 싶었어요.
BookListDTO랑 BookDetailDTO를 따로 만들어서 해당 DTO에 맞게 가공하는 것이 올바른 백엔드 코드라고 생각해요.
하지만 일단 강의에 따라가야하니 모든 정보를 반환하도록 구현했어요.

export const findBooks = (req, res) => {
    const sql = 'SELECT * FROM books';
    db.query(sql, (err, results) => {
        if (err) return res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({message: err.message});
        return res.status(StatusCodes.OK).json(results);
    });
};

export const findBookById = (req, res) => {
    const { id } = req.params;
    const sql = 'SELECT * FROM books WHERE id = ?';
    db.query(sql, id, (err, results) => {
        if (err) return res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({message: err.message});
        if (results.length === 0) return res.status(StatusCodes.NOT_FOUND).end();
        return res.status(StatusCodes.OK).json(results[0]);
    });
};

piksum, 이미지 경로 추가

piksum은 더미 이미지를 추가할 수 있는 사이트, 링크만 입력하면 이미지를 사용할 수 있어요.
우리는 해당 이미지 url에 id만 추가해서 이미지를 받아올 수 있도록 img id를 칼럼에 추가했어요.

카테고리별 도서 목록 조회

export const findBooks = (req, res) => {
    const { categoryId } = req.query;
    if ( categoryId ) {
        const sql = 'SELECT * FROM books WHERE category_id = ?';
        db.query(sql, categoryId, (err, results) => {
            if (err) return res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({message: err.message});
            return res.status(StatusCodes.OK).json(results);
        });
    } else {
    const sql = 'SELECT * FROM books';
    db.query(sql, (err, results) => {
        if (err) return res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({message: err.message});
        return res.status(StatusCodes.OK).json(results);
    });
    }
};

쿼리 스트링의 유무에 따라 분기별로 db에서 데이터를 가져오도록 바꾸었어요.

카테고리 테이블 생성


카테고리를 따로 테이블로 나누었어요.

카테고리 전체 목록 조회 API

import db from "../db.js";
import {StatusCodes} from "http-status-codes";

export const findAllCategories = (req, res) => {
    const sql = 'SELECT * FROM category';
    db.query(sql, (err, results) => {
        if (err) return res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({message: err.message});
        return res.status(StatusCodes.OK).json(results);
    });
};

기존 조회문과 똑같이 빠르게 만들었어요.

잘 만들어진 것을 볼 수 있어요.

profile
할 땐 하고 놀 땐 노는 일일놀놀입니다.

0개의 댓글