우선, 카테고리를 나타내는 페이지가 있는 만큼 카테고리 이름이 잘 뽑아지도록 JOIN을 해줘야한다.category 테이블과 books 테이블을 조인해서, category_id에 맞는 category_name이 뽑아지도록 해주었다.( category 테이블의 name => category_name 으로 변경 )foreign Key 설정하기JOIN 해주기diagram 수정category 테이블의 id 1개 당 books 테이블의 category_id는 다수가 존재하므로 다대일 로 설정해주었다. let sql = 'SELECT * FROM books LEFT JOIN category ON books.category_id = category.id WHERE books.id=?;';개별 도서 조회에서 카테고리를 ..
우선, 도서 API를 구현해보기 전에 바꿔야할 것이 있다.API 설계 당시 books의 컬럼명에 문제가 있었다. format과 description 그리고 index 이다.해당 단어들로 컬럼으로 만들어서 사용하려하면 파란색으로 바뀐다.즉, 예약어이니 웬만하면 사용하지말지? 라는 뜻이다.그래서 format 은 form 으로, description은 detail로, index는 contents로 바꿔서 사용하였다. 이번 도서 API도 이전에 했던 회원가입 API와 동일하게 routes 폴더안에 books 라는 경로 파일을 만들어주고,controller 폴더 안에 BookController 라는 파일을 만들어 로직을 짰다. 도서 API는 총 3가지로 설계했었다.1. 전체 도서 조회2. 개별 도서 조회3. 카테..
2024.12.11 - [웹 개발 공부하기] - [12.11] 설계한 API를 구현해보자(회원가입,로그인)😀 회원가입과 로그인은 잘 되었으니, 이번엔 비밀번호 초기화 요청을 해보고 초기화까지 해보도록 하겠다. 💥 비밀번호 초기화 요청사실상 비밀번호 초기화 요청은 API 설계할 때도 그랬지만 어려울 것은 없었다.입력받은 email이 가입된 email 이 맞는 지 확인하는 정도이다.그래서 sql 은 SELECT 문을 사용하였다.const user = results[0];if(user){ return res.status(StatusCodes.OK).json({ email : email });} else { return res.status(StatusCodes.UNAUTHORIZ..
node.js 패키지(파일) 구조는 아래와 같다.app.js : 프로젝트의 메인 라우터 역할/user.js : 하위 라우터 역할....... 이런 식으로 라우터는 경로를 찾아주는 역할을 한다.근데 지금까지 프로젝트는 router와 연결하여 로직을 짰었다. 그렇게 되면 라우터가 로직까지 다~ 수행을 하기 때문에 코드가 복잡해지고 가독성이 떨어져서 유지보수에 어려움이 있다.그래서 오늘부턴 좀 다르게 해보려고 한다! UserController 라는 js 파일을 새로 생성하고 controller 라는 폴더안에 넣어서 사용할 것이다.UserController 파일에 실질적인 로직이 들어가는 것이다. 이렇게 되면 지난 번의 프로젝트와는 다르게라우터가 로직까지 수행하지 않아도 되고 경로만 찾아주기 때문에 관리에도 굉..
2024.12.10 - [웹 개발 공부하기] - [12.10] express-generator 구조 오늘은 새로운 프로젝트 들어가기 전에, 가장 기본적인 app.js 구현과 users.js 파일 기본 모듈화를 하였다.const express = require('express');const app = express();const dotenv = require('dotenv');dotenv.config();app.listen(process.env.PORT);const userRouter = require('./routes/users');const bookRouter = require('./routes/books');const cartRouter = require('./routes/carts');const l..
bin/www : 포트 번호 등과 같은 웹 서버를 구축하는데 필요한 설정 데이터가 정의되어 있는 파일 => .env 파일과 같이 설정 값을 가지고 에러 처리, 기타 추가 설정을 해주는 파일 node_modules : Node.js, Express에 필요한 모듈들이 설치되는 폴더 public : images, javascripts, stylesheets -> 정적 파일(ex. 로고, 회사 소개 페이지, ...)(cf. 동적 : 사람마다 다른 데이터) routes : 각 경로를 담당하는 모듈들이 들어있는 폴더 = 라우팅 로직을 구현하는 모듈들 : 클라이언트에서 어떤 요청을 주냐에 따라서 어떤 로직을 수행할 지 파일별로 분할해서 관리하는 정도(cf. 자바의 controller 역할) vie..
이번에 새로 시작한 프로젝트의 API설계가 끝났다.생각한 부분과는 다르게 만들어져서 어떻게 구현이 될 지 궁금하다..🤔생각보다 API 설계라는 게 뚝딱 완성되는 게 아니었다..강사님 말씀에 의하면 실무에서 API 설계만 해도 한달이 걸린다던데... 확실히 지금은 적은 양이다 보니금방 뚝딱 끝난 것 같지만 실제론 아니라는 것.. 이번 API 설계 하면서도 많이 고치게 되고 많이 지우게 되었다.또한, 이 API 설계를 토대로 DB도 설계를 해야하니.. 생각보다 개발 전에 할 일이 엄청 많은 것 같다.이렇게 API 설계를 하여도 절대 네버 100% 끝난 설계가 아니다.개발을 하면서 내용이 추가될 수도 삭제될 수도 있으니 달라질 수도 있다는 점 🙄 usersidusernamepasswordcreated_a..
💥 유효성 검사(Validation)유효성 검사는 말 그대로 "사용자가 입력한 값"의 유효성(타당성)을 확인하는 것이다.유효성 검사를 위한 외부 모듈은 express-validator를 사용했다.코드의 일부를 가져와봤다.우선 위에 express-validator를 먼저 require 해준다.마지막 코드처럼 validate 를 모듈형태로 만들어 필요한 곳에 편하게 사용할 수 있도록 만들었다.실제로 전체 코드에서 이 모듈이 총 4번 필요했다. 그래서 이렇게 모듈형태로 만들어 놓고 쓰니 정말 편했다. 사실 위의 코드는 다음 강의 까지 듣고난 후 최종 리팩토링 된 코드이다.3일에 들었던 강의에선 next() 라는 함수가 나오지 않았어서 오류가 하나 있었다.에러를 안 만났더니 그대로 끝나버리는 오류였다. 에러를..
회원가입 회원 개별 조회 회원 로그인 회원 개별 삭제 12월 2일 과제를 왜 이제서야 업로드 하냐고 묻는다면.... 사실 중간에 이해가 안 간 부분이 꽤 있었다.그래서 한 번 더 돌려보면서 다시 한 번 더 작업해보려고 과제를 따로 제출하지 않았었다.당일에 들었을 땐 음.. 이렇게 하면 오류 나지않을려나? 했던 부분들이 있었는데그 부분들은 이후에 유효성 검사와 함께 리팩토링 하면서 해결이 되었었다.또한, 마지막 강의 때 실패해도 201이 뜨는 걸 보고 고쳐보려고 했는데.... 못 고쳤다 ^ㅁ^..역시 아직은 여기까진 아닌가보다 🤣확실히 포스트맨으로 직접 실습해보고 보면서 하니까 왜 오류가 나는 지 이럴 땐 어떻게 해야할 지 등등많은 걸 느낄 수 있어서 좋았던 것 같다.
[BOOK STORE]1. 메인 페이지2. 상세 페이지3. 장바구니 페이지4. 주문서 작성 페이지5. 주문 목록 페이지6 .회원가입 페이지7. 로그인 페이지8. 비밀번호 초기화 페이지이전에 해본 API와 다른 API도 등장할 것 같고, 사용해본 API도 등장할 것 같다.이것 또한 복습이니 이번에도 코드만 따라하는 것이 아니라 제대로 하나하나 다 이해해가며 잘 들어야 할 것 같다. 이번엔 요구사항이 좀 존재하는데, 좋아요를 눌렀을 때 좋아요가 올라간다거나.. 좋아요 전체 수를 보여준다거나..한 페이지에 상품은 8개만 보이게끔하기, 페이지 넘버를 눌렀을 때 페이지가 넘어가게 하기 등..해보지 않은 부분들도 꽤 많아서 기대 반 두려움 반 ㅎ...뭔가 sql은 이렇게 될 것 같고, api는 이런 식일 것 같은데..