분류 전체보기

코드 snake > camel 로 변경하기error status code 고려하기 코드퀄리티 업그레이드회원가입 > 실패시 날라가는 errsql에 에러 없이 빈 값이 날라갈 경우 if 문으로 분기처리한다.+ 쿼리 코드의 모듈화 데이터베이스 중복 코드 > 모듈화ex. UserContorller > User 데이터 모듈(Model) - CRUD*DB 모듈 : mysql > 몽구스, 시퀄라이즈 패키지 구조 분리Router : 경로 URI, URL와  HTTP method로 요청에 따른 경로를 찾아주는 역할Controller : 요청을 환영! 직접 동작을 하지는 않는다.Service : 직접 동작을 한다 > 어떤 쿼리를 부를지, 정한다. = "비즈니스 로직" Model : DB와 소통 > Query의 집합어떤 쿼..
인증 ensureAuthorization 모듈화const jwt = require("jsonwebtoken");const dotenv = require("dotenv");dotenv.config();const ensureAuthorization = (req, res) => { try { let receivedJwt = req.headers["authorization"]; console.log(receivedJwt); let decodedJwt = jwt.verify(receivedJwt, process.env.PRIVATE_KEY); console.log(decodedJwt); return decodedJwt; } catch (err) { console.log(err...
조회 로그인 필요 XJWT가 필요한 부분? 좋아요 + 장바구니 담기, 내 장바구니 목록 조회, 장바구니 도서 삭제 + 결제 하기, 주문내역조회, 주문상세조회req.header의 `Authorization` 속성값에 토근값 담아서 > payload로 사용자의 id를 읽어낸다. JWT APIjwt, token  초기에 받은 값이 계속 유지된다. 덮어쓰기를 제대로 해주어야 한다.res.headers에 쿠키로 토큰값이 잘 들어왔다. 토큰검증값 전달하는 방법은req.header의 authorization 속성값에 토큰 담기토큰값이 잘 들어온걸 볼 수 있다. 최종 //GET + "/jwt" : 토큰 발행app.get("/jwt", function (req, res) { var token = jwt.sign({ f..
· 회고
☑️What I Learn좋아요 개수 count(*)로 likes 테이블의 행의 개수를 계산한다. 서브쿼리 Sub Query하나의 쿼리 `메인 쿼리`에 포함된 또다른 쿼리 `서브쿼리` . 메인쿼리의 조건을 만족시키기 위해 사용된다.주로 테이터 필터링, 정렬, 그룹화 등과 같은 방법으로 사용한다.보통 SELECT, INSERT, UPDATE, DELETE 문 내에서 사용된다.SELECT의 경우 SELECT, FROM, WHERE, HAVING 및 JOIN 절에서 사용된다.비교연산자와 집계함수 GROP BY 절 등을 포함한 유효한 SQL문을 사용해 작성할 수 있다. 유형단일 행 서브쿼리 (Single Row Subquery): 한 행만 반환하는 서브쿼리 `=`다중 행 서브쿼리 (Multiple Row Sub..
`.execute()` 로 sql 실행SQL 데이터 삭제 DELETE, TRUNCATE, DROP`DELETE FROM 테이블명 (WHERE 조건);` : 조건에 따라 행이 삭제 > 테이블 유지 (없으면 전체삭제)`DROP TABLE 테이블명;` : 테이블 통째로 삭제`TRUNCATE 테이블명;` : 모든 행 삭제하고 > 테이블 유지 DELETE, TRUNCATE 차이점 : Auto Increment 초기화 해준다!SET foreign_key_checks=0;TRUNCATE cartItems;SET foreign_key_checks=1; SET @count=0;UPDATE orderedBook SET id=@count:=@count+1;ALTER TABLE orderedBook AUTO_INCREMENT..
SPA vs MPASPA : Single Page Application하나의 페이지 내에서 동적으로 콘텐츠를 로드하고 업로드 하는 방식이다.리액트, 앵귤러, 뷰와 같은 프레임워크가 개발하는 웹 어플리케이션ex. 클릭 시 고정되어있고, 내용만 바뀌는것 * 일반적으로 > CSR 렌더링 방식 사용한다. MPA : Multi Page Application탭을 이동할때마다 서버로부터 새로운 html을 받아와서 렌더링하는 방식이다.전통적인 방식 AJAX가 등장한 이후로, 클라이언트가 원하는 부분만 동적으로 갈아끼울 수 있고, 화면 깜빡임도 없는 SPA를 많이 사용하게 되었다. * 일반적으로 > SSR 렌더링 방식 사용그렇지만, 같은 개념이라고 생각하면 안된다. CSR vs SSRCSR : Client Side Re..
비동기 non-blocking싱글 스레드, 이벤트 기반, 논블로킹 I/O중 논블로킹 I/O == 비동기식 동작 때문에 변수 가 다른 스코프에서 동작하지 않는다작업이 시작된 후 그 작업이 완료될 때까지 기다리지 않고 다음 작업을 계속 수행하는 방식 비동기 발행 : 실행되는 코드가 기다려야 하는 시간이 생긴다. 순서를 기다리지 않고 다음코드 실행한다.setTimeOut(), setInterval(), query()쿼리 실행하는 순간, 끝나기도 전에 뒤의 코드가 실행된다.비동기 처리 : 비동기가 필요없을때 > 쿼리 기다려야할때 등등.... ㅇ이전코드의 시간을 기다리고, 순서대로 실행한다.콜백 함수 : 메소드 실행 할꺼 다 하고, 이 함수 실행해줘(순서 맞춰서 이걸 뒤에 실행해달라고 요청)promis 객체 (r..
주문서 작성 > 주문 APIuser_id 있어야 한다.전체 ERD 테이블 생성 delivery, orders, orderedBook fk 컨벤션 정하고 플젝 시작하기!Ref: orders.delivery_id > delivery.idRef: orderedBook.order_id > orders.idRef: orderedBook.book_id > books.idRef: orders.user_id > users.id 주문 등록 INSERT, 주문된 상품은 DELETE{ items : [{ //orderedBook INSERT cartItemId : 장바구니 도서 id, bookId : 도서 id, quantity: 수량 }, { car..
장바구니에 담겨있는 아이템 APIcartItems 테이블에서 user_id 값으로 식별 cartItems  id(PK)book_id(FK)cntuser_id1111232132124    외래키 지정했던 제약조건에 한번 더 같은 이름으로 사용한다면? 충돌, 에러 발생[fk 제약조건 이름짓기]fk_기준 테이블명_참조테이블명_참조키cartItems.uer_id > users.id :  fk_catrItems_users_idlikes.user_id > users.id : fk_likes_users_id 장바구니 담기 INSERTconst addToCart = (req, res) => { const { book_id, quantity, user_id } = req.body; let sql = "INSER..
닷다라다나닷
'분류 전체보기' 카테고리의 글 목록 (7 Page)