프로젝트 4-8 ~ ()

Develop Kim·2024년 10월 9일

programmers

목록 보기
24/40

프로젝트: Node.js 기반의 REST API 구현

1 설계를 직접 해보자

1-1 ~ 1-6(API 설계)

1-7 ~ 1-11(ERD 설계)

2 프로젝트 구현 시작

1-12 ~ 2-5(API 설계 점검, 기본 세팅(모듈화, postman, diagram, workbranch))

3 회원 API(feat. 비밀번호 암호화)

3-1 ~ 3-7(비밀번호 암호화)

4 도서 API(feat. 나에게 페이징이란?)

4-1 ~ 4-7(도서 & 카테고리 API, queryString, picsum)

4-8 books-category 연관관계 설정

1️⃣ 테이블 조인하는 법 복습하기

  • left join을 하는 방법은 아래와 같음

    SELECT * FROM posts LEFT
    JOIN users ON posts.user_id = user.id;

2️⃣ 카테고리를 붙여보자

  • 먼저 FK 설정을 해준다

  • 설정이 잘 됨

  • join도 잘 됨

3️⃣ 출력 시 별칭을 적용해보자

  • 컬럼의 이름이 보이는 게 마음에 안들면 별칭을 따로 출력해줄 수 있다.

    SELECT name AS category_name FROM category;

  • 단, 별칭을 사용하면 * 를 사용하지 못하게 됨 ㅠㅠ

  • 그러니 웬만하면 컬럼명을 바꿔주자

4️⃣ dbDiagram 업테이트

  • 도서와 카테고리의 연관관계가 N(books) : 1(category) 이기 때문에 적용해준다. 적용방법은 아래를 참고




4-9 도서 목록 조회 API 조인 구현

1️⃣ JOIN을 구현해보자

  • 개별 도서 조회 시 카테고리가 보여야 하기 때문에 SQL문에 JOIN으로 붙여줌
// 도서 개별 조회
const bookDetail = (req,res) => {
  let {id} = req.params; // url을 가져올 때 prams가 json형태이기 때문에 비구조화가 될 수 있는 것

  let sql = `SELECT * FROM books LEFT JOIN category 
            ON books.category_id = category.id WHERE books.id=?;`;
  conn.query(sql, id,
    (err, results) => {
      if(err) {
        console.log(err);
        return res.status(StatusCodes.BAD_REQUEST).end(); // BAD REQUEST
      }
      if(results[0])
        return res.status(StatusCodes.OK).json(results[0]); // results[0]을 보내면 배열형태가 아니게 됨
      else
        return res.status(StatusCodes.NOT_FOUND).end();
    });
};



4-10 SQL 시간 범위 구하기(DATE_ADD, SUB)

1️⃣ MySQL: 데이터 베이스 시간 범위 구하기

  • 시간 더하기
    DATE_ADD(기준 날짜, INTERVAL)

  • 시간 빼기
    DATE_SUB(기준 날짜, INTERVAL)

  • 시간 범위를 설정해서 SELECT
    SELECT * FROM books WHERE pub_date BETWEEN ??? AND ???;

SELECT * FROM books WHERE pub_date BETWEEN DATE_SUB(NOW(), INTERVAL 1 MONTH) AND NOW(); // 최근 한달 이내 신간




4-11 카테고리별, 신간, 도서 목록 조회

1️⃣ 카테고리별 도서 목록 조회 수정

2️⃣ ****

3️⃣ ****

4️⃣ ****




4-5

1️⃣ ****

2️⃣ ****

3️⃣ ****

4️⃣ ****




4-6

1️⃣ ****

2️⃣ ****

3️⃣ ****

4️⃣ ****




4-7

1️⃣ ****

2️⃣ ****

3️⃣ ****

4️⃣ ****




profile
김개발의 개발여정

0개의 댓글