오늘 배운 내용 📚 주문하기 테이블부터 API 생성까지 👉 코드 바로가기 추가 정리 내용 📑 가장 최근에 등록한 PK 값 받아오기 여러 행 한 번에 데이터 추가하는 방법 쇼핑몰을 제작하는 과정 중에 가장 중요하다 생각이 되는 결제페이지 API를 만드는데 신경 쓸게 너무 많았습니다. 첫 번째로 배송지 문제였습니다. 제가 생각하는 배송지는 유저가 매번 입력을 하지 않더라도 만약에 등록해 놓은 배송지가 있다면 해당 배송지를 바로 전달을 해주고, 등록해 놓은 배송지가 없다면 새로 배송지를 입력하는 form이 생겼으면 했습니다. 왜냐하면 배송지 database에 계속 누적이 되는 것도 불필요한 데이터차지라고 생각을 했고, 저희가 배송지를 미리 등록을 할 수도, 혹은 새로운 배송지가 추가될 수도 있기 때문이었습니다..
분류 전체보기
오늘 배운 내용 📚 장바구니 테이블 생성부터 API 구현까지 👉 코드 바로가기 추가 정리 내용 📑 제약조건 이름 설정 및 INDEX 설정 이전에 테이블 미리 생성을 해보면서 겪었던 제약조건 이름 설정과 인덱스 설정에 대해서 정리를 해주셨는데 추측했던 내용이 맞았어서 좋았던 것도 있지만 언제 INDEX를 사용하는지 그 부분이 해결이 되지 않아 정리를 더 해야겠다는 생각을 했습니다. 그리고 요즘 SQL을 많이 작성하면서 느낀 건데 확실히 내가 작성한 SQL를 보면서 공부가 되는 것 같습니다. 이전에 작성한 코드를 토대로 추가적으로 표현하고 싶은 컬럼이나 어떻게 구현을 할지 생각을 하게 되는데 그걸 바로 controller에 작성하는 게 아니라 CLI나 workbench를 통해서 내가 표현하고 싶은 테이블이 ..
스칼라 서브쿼리란? 스칼라 서브쿼리는 우리가 흔히 SELECT안에 SELECT라 부르는 SELECT 절의 서브쿼리를 말합니다. 스칼라 서브쿼리를 작성을 하면 LEFT OUTER JOIN과 같은 결과 값을 얻을 수 있는데요, 하지만 JOIN을 사용하는 것보다 성능이 좋습니다. 성능에 대해서 이야기를 조금 더 해보자면 스칼라 서브쿼리가 무조건 JOIN보다 성능이 좋다? 이것은 아닙니다. 스칼라 서브쿼리와 JOIN을 각각 필요한 곳에 작성을 하는 게 제일 중요합니다. 다음과 같은 표를 만드는 SQL을 만들어봅시다. TABLE-A : id(A_id), title, description, price, pub_date, category_id(B_id) TABLE-B : B_id, category TABLE-C : ..
오늘 배운 내용 📚 좋아요 추가, 삭제 서브쿼리와 EXISTS를 이용하여 도서조회에 좋아요 여부 확인 추가 정리 내용 📑 스칼라 서브쿼리란? SQL을 어떻게 사용하면 좋을까? 오늘 좋아요를 추가하고 삭제하는 것을 배웠는데 조금 아쉬운 부분이 존재했습니다. 그 이유로는 프런트영역이 같이 진행이 되는 게 아니다 보니 이렇게 추가와 삭제만 할 수 있다고 해서 이미지가 변경이 되고 어떤 원리로 추가와 삭제를 하게 되는 건지 알 수 없었기 때문입니다. 예를 들어서 비활성화된 좋아요를 누르면 POST /likes/:id로 연결이 되고 활성화된 좋아요를 누르면 DELETE /likes/:id로 연결이 되는 건지 이런 설명이 없어서 그냥 '만들어는 놨는데...'로 끝난 거 같아서 아쉬웠습니다. 그리고 이제 서브쿼리를 ..
오늘 배운 내용 📚 SQL 시간범위를 구해 신간 도서 조회 페이지 별로 도서 정보 전달 - 코드 보러 가기 추가 정리 내용 📑 정렬 추가 작업 count를 이용하여 좋아요 개수 표기 어제에 이어서 도서 조회 API를 작성을 하였는데요. 강사님이 진행한 내용뿐만 아니라 도서 정렬 기능도 추가하였습니다. 또한 좋아요 테이블에 해당 도서번호가 존재한다면 count 하여 likes 칼럼을 생성을 하였고, 중첩이 되지 않게 GROUP BY를 사용하였습니다. 그리고 SQL의 중복을 어떻게 해야 줄일 수 있을까 하다가 기본적으로 다 들어가는 코드는 변수에 담아두고 각 조건에 맞춰서 +=를 이용하여 SQL을 추가하는 방식으로 진행하였습니다. 이전에 작성해 본 코드들과 비교를 해볼 수 있었습니다 // 이전 코드 cons..
SubQuery 작성위치 SubQuery를 작성하는 위치로는 SELECT, FROM, WHERE가 있습니다. 그중에 SELECT와 FROM에서 발생한 오류를 정리해 보려 합니다. - SELECT에서 SubQuery 작성하기 select 안에 select를 작성할 때는 결과 값이 1행이어야만 합니다. idx title name number 1 안녕 홍길동 20 2 하세요 아무개 30 SubQuery 결괏값이 2행인 테이블 SubQuery 결과가 위의 표처럼 1행 이상일 경우에 아래와 같은 오류가 발생합니다. 혹시 아래와 같은 오류가 난다면 SELECT문 결과 값이 1행인지 확인해 보시기 바랍니다. 발생오류 Error Code: 1242. Subquery returns more than 1 row - FRO..
오늘 배운 내용 📚 전체 도서조회와 카테고리별 도서조회 BookController 분리 추가 정리 내용 📑 이미지 테이블 데이터 삽입 및 SQL 작성 오늘 수업에서는 도서 테이블을 생성하고 그에 따른 코드를 작성하였습니다. 도서등록API가 존재하지 않아서 테이블에 직접적으로 데이터를 입력을 해주어야 해서 다음에 시간이 조금 남는다면 해당 API를 작성해봐야겠다는 생각을 했습니다. 작업을 하면서 명세에 작성한 전체 도서조회와 카테고리별 도서 조회에 대해서 생각을 하게 됐습니다. 1-1. localhost:8080/books?category=category&new=true 1-2. localhost:8080/books/category?sort=popular&new=true 조건 : 전체도서조회 / 카테고리별..
오늘 배운 내용 📚 Router와 Controller 비밀번호의 암호화 추가 정리 내용 📑 FK 사용 시 FK name설정 문제 복습방학을 이용하여 기존에 설정했던 테이블생성을 하고 있었는데 FK를 사용하는 과정에서 오류가 발생했었습니다. Error Code: 1005. Can't create table `bookstore`.`likes` (errno: 121 "Duplicate key on write or update") 위 에러코드를 해결하기위해서 뭘 잘못했는가 한참 테이블 설정을 확인을 하는 과정에서 FK name을 동일하게 설정한 것을 발견하였고, 중복된 name을 설정할 수 없는 것을 알게 되었습니다. 뿐만 아니라 테이블 생성이 자꾸 안 되는 이슈도 존재했는데요. 이 이슈는 FK 설정하는 과정에..
회원가입을 할 때 우리가 비밀번호를 그대로 database에 저장을 하게 되면 어떻게 될까요? database가 털리면 회원가입한 유저들의 정보들이 그대로 노출이 되는 불상하가 일어나는데요. 이 같은 일이 발생하지 않게 하는 게 바로 암호화입니다. 암호화는 node에서 제공하는 crypto라는 모듈, npm에서 설치해서 사용할수 있는 bcrypt라는 모듈이 존재합니다. 그렇다면 모듈을 이용하여 어떻게 비밀번호를 암호화 하는지 알아봅시다. crypto const salt = crypto.randomBytes(64).toString("base64"); const hashPassword = crypto .pbkdf2Sync(password, salt, 10000, 64, "sha512") .toString("..