본문 바로가기

분류 전체보기

(80)
웹 풀사이클 데브코스 TIL 42일차 camel vs snake http response 에서는 카멜 케이스 방식을 사용하는 것이 좋다. 하지만 데이터베이스에서는 스네이크 케이스를 사용하는데 응답을 전송하기 전에 이를 바꿔주어야 한다. conn.query(sql, values, (err, results) => { if(err) { console.log(err); // return res.status(StatusCodes.INTERNAL_SERVER_ERROR); } if(results.length){ results.map((result) => { result.pubDate = result.pub_date; delete result.pub_date; }); allBooksRes.books = results; } else return res.s..
웹 풀사이클 데브코스 TIL 41일차 jwt 분리 auth.js 파일을 만들어서 jwt 부분을 모듈화 하였다. const jwt = require('jsonwebtoken'); const dotenv = require('dotenv'); dotenv.config(); const ensureAuthorization = (req, res) => { try{ let receivedJwt = req.headers["authorization"]; console.log("received jwt : ", receivedJwt); let decodedJwt = jwt.verify(receivedJwt, process.env.PRIVATE_KEY); console.log(decodedJwt); return decodedJwt; ..
웹 풀사이클 데브코스 TIL 40일차 jwt api 좋아요 api, 장바구니 api, 주문 api에 jwt가 필요하다. 쿠키에 jwt를 보내놓으면 http에서 기억해뒀다가 다음 요청에서 그 값을 쿠키에 자동으로실어서 보낸다. 이 값을 그대로 쿠키에 넣는것이 아닌 authorization 헤더에 넣어서 보낸다. 백엔드의 코드는 다음과 같다. // GET + "/jwt" : 토큰 발행 app.get('/jwt', function (req, res) { // 서명 = 토큰 발행 var token = jwt.sign({ foo: 'bar' }, process.env.PRIVATE_KEY); res.cookie("jwt", token, { httpOnly : true }); res.send("토큰 발행 완료") }) //..
웹 풀사이클 데브코스 TIL 39일차 MySQL 데이터 삭제하는 방법 DELETE ```sql DELETE FROM 테이블명 (WHERE 조건); -- 조건이 없으면 모든 행이 삭제된다. 2. DROP ```sql DROP TABLE 테이블명; -- 테이블을 통쩨로 삭제 TRUNCATE ```SQL TRUNCATE 테이블명; -- 모든 행이 삭제됩니다.(테이블은 당연히 남아있다) **DELETE는 fk를 들고있는 테이블을 먼저 지우는것이 좋다.** ## Error Code: 1175 가장 최상위 테이블인 orderedBooks를 삭제하려고 보니 오류가 난다. 에러코드 1175이다. 이를 해결하는 방법은 다음과 같다. 설정에 들어가서 safe updates 를 비활성화해준 후 워크벤치를 껐다 키면 간단하게 해결된다. ## DELETE와 TRU..
웹 풀사이클 데브코스 TIL 38일차 논 블로킹 I/O 비동기식 I/O 처리 전날의 강의에서 발생했던 문제는 이 비동기식 처리 때문에 발생한 일이다. 노드 js 한테는 순서가 의미가 없다. 그렇다면 여태까지는 왜 문제가 없었을까? Node.js 비동기 처리 방식 비동기 발생 : 실행되는 코드가 기다려야 하는 시간이 생긴다는 뜻. 이전 시간이 오래걸리면 안 기다려주고 다음코드를 무작정 실행 ex) setTimeOut(), setInterval(), query() 비동기 처리 : 비동기가 필요 없을 때가 있는데 이런 부분은 처리해주어야 한다. 이전 코드들의 시간을 다 기다려 준다. 순서를 맞춰서 코드를 실행해 주겠다 비동기 처리 콜백 함수 : 함수 할일 다하고 이걸 실행해줘(= 순서 맞춰서 이걸 뒤에 실행해 줘) Promise(resolve, ..
웹 풀사이클 데브코스 TIL 37일차 주문하기 Table delivery { id integer [primary key] address varchar receiver varchar contact varchar } Table orders { id integer [primary key] delivery_id integer book_title varchar total_quantity integer total_price integer created_at timestamp user_id integer } Table orderedBook { id integer [primary key] order_id integer book_id integer quantity integer } 세 개의 테이블을 사용한다. 테이블 상 delivery 부터 insert 하..
웹 풀사이클 데브코스 TIL 36일차 장바구니 cartItems 컬럼에 user_id를 추가해준다. Table cartItems { id integer [primary key] book_id integer quantity integer user_id integer } errno: 121 "Duplicate key on write or update" 제약조건 이름이 겹쳐서 생기는 문제 제약 조건의 이름을 규칙성 있게 지어줘야한다. fk_기준 테이블명_참조테이블명_참조키 cartItems.user_id > users.id : fk_cartItems_users_id likes.user_id > users.id : fk_likes_users_id 중복된 인덱스 이름 제약 조건 이름 문제를 해결했더니 또 다른 문제가 생겼다. 이번엔 인덱스 이름이 겹..
웹 풀사이클 데브코스 TIL 35일차 좋아요 좋아요 테이블은 user_id, liked_book_id 두 개의 컬럼으로 이루어진다. INSERT INTO likes (user_id, liked_book_id) VALUES (1, 1) DELETE FROM likes WHERE user_id = 1 AND liked_book_id = 1; 좋아요 추가 삭제 예시이다. COUNT 원하는 결과값들의 갯수를 얻는 방법이 있다. SELECT count(*) FROM likes WHERE liked_book_id = 1; 서브 쿼리 쿼리 문 안에 또다른 쿼리문을 넣는 방법이 있다. SELECT *, (SELECT count(*) FROM likes WHERE liked_book_id = books.id )AS likes FROM books; 이와 같이..