본문 바로가기

프로그래머스 풀스택 데브코스/데브코스 TIL

웹 풀사이클 데브코스 TIL 33일차

SQL 관리

프로젝트에서 sql등을 따로 정리해 놓고 싶다면

다음과 같이 data.sql 파일을 하나 만들어서 사용하면 된다.

picsum

더미 이미지를 제공하는 사이트.
https://picsum.photos/

https://picsum.photos/id/1/200/300

이와같이 간단한 URL로 이미지를 가져올 수 있다.

쿼리 스트링과 일반 요청이 같은 url을 사용할 때


router.get('/', allBooks)
router.get('/:id', bookDetail)
router.get('/', booksByCategory)

books 라우터를 보면 한가지 문제점이 있다. allBooks와 booksByCategory가 같은 URL을 사용하고 있는 것이다. 카테코리별 도서 조회는 대신 쿼리 스트링을 사용하지만 라우터 입장에서는 이를 알 방법이 없다. 이때 라우터는 가장 위쪽에 있는 핸들러로 요청을 처리한다. 따라서 쿼리스트링이 있든 없든 이 경우 전체 도서조회만 실행하게된다.


router.get('/:id', bookDetail)
router.get('/', booksByCategory)
router.get('/', allBooks)

그렇다면 이번에는 카테코리별 도서 조회를 상단으로 올리면 어떻게 될까? 이렇게 해도 문제는 해결되지 않는다. 이번에는 반대로 카테고리별 도서 조회 핸들러만 동작하는 것이다.

해결책은 다음과 같다. 한 핸들러에서 두 가지 연산을 모두 처리해 주면 되는 것이다.

router.get('/', books)

라우터에서는 두 api를 통합할 이름으로 함수를 변경해주고,

const books = (req, res) => {
    let {category_id} = req.query;
    if(category_id)
        booksByCategory(req, res);
    else
        allBooks(req, res);
}

컨트롤러에서는 쿼리 스트링의 여부에 따라 다른 컨트롤러를 호출하도록 변경하면 정상작동하는 것을 확인할 수 있다.

후기

도서 도메인과 카테고리를 구현하였다. piksum 이라는 무료 이미지 api 사이트도 알게되었다.

키워드: 프로그래머스 데브코스, 국비지원교육, 코딩부트캠프