Tiny Bunny
[TIL] Week 10 bookShop ๊ณ ๋„ํ™” ๋ฐ ๋žœ๋ค ๋ฐ์ดํ„ฐ API
ยท
๐Ÿ•Š๏ธ DevCourse/Backend
๐Ÿ—‚๏ธ ํšŒ์› ์ธ์ฆ ๋ชจ๋“ˆํ™”req.headers์—์„œ authroization์„ ๊บผ๋‚ด๊ณ , ๊ฒ€์ฆํ•ด์„œ ๋Œ๋ ค์ฃผ๋Š” ์ฝ”๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ํŒŒ์ผ์—์„œ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค.var jwt = require('jsonwebtoken');const dotenv = require('dotenv');dotenv.config();const ensureAuthorization = (req, res) => { try { let receivedJWT = req.headers["authorization"]; console.log("receivedJWT : ", receivedJWT); let decodedJWT = jwt.verify(receivedJWT, process.env.PRIVATE_KEY); ..
[TIL] Week 9 JWT Token ํ™œ์šฉ
ยท
๐Ÿ•Š๏ธ DevCourse/Backend
๐Ÿ—๏ธ JWT ์‚ฌ์šฉํ•ด๋ณด๊ธฐ๋กœ๊ทธ์ธํ•  ๋•Œ ๋ฐœํ–‰ํ•ด์ฃผ๋Š” ํ† ํฐ์œผ๋กœ ์š”์ฒญ์„ ๋ณด๋‚ธ ์‚ฌ์šฉ์ž๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ํŒ๋ณ„ํ•ด์ฃผ๋ ค๊ณ  ํ•œ๋‹ค.๋จผ์ € ํ† ํฐ์„ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•˜๋Š” ์ง€ ์—ฐ์Šต๋ถ€ํ„ฐ ํ•ด๋ณด์ž. var jwt = require('jsonwebtoken');const express = require('express');const app = express();const dotenv = require('dotenv');dotenv.config();app.listen(process.env.PORT); app.get('/', function (req, res) { var token = jwt.sign({ foo : 'bar'}, process.env.PRIVATE_KEY); res.cookie("jwt", token, { httpOnly..
[TIL] Week 9 ์ฃผ๋ฌธ API ์ตœ์ข…..!
ยท
๐Ÿ•Š๏ธ DevCourse/Backend
๐Ÿ—‘๏ธ MySQL ๋ฐ์ดํ„ฐ ์‚ญ์ œ1. DELETEDELETE FROM ํ…Œ์ด๋ธ”๋ช… [WHERE ์กฐ๊ฑด;]์กฐ๊ฑด์ด ์žˆ๋‹ค๋ฉด, ์กฐ๊ฑด์— ๋งž๋Š” ํ–‰๋งŒ ์‚ญ์ œ์กฐ๊ฑด์ด ์—†๋‹ค๋ฉด, ๋ชจ๋“  ํ–‰ ์‚ญ์ œํ…Œ์ด๋ธ”์€ ์‚ญ์ œ๋˜์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋งŒ ์‚ญ์ œ โญ Auto Increment ๊ฐ’์€ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์Œ   2. DROPDROP TABLE ํ…Œ์ด๋ธ”๋ช…;๋ฐ์ดํ„ฐ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ…Œ์ด๋ธ”๊นŒ์ง€ ํ†ต์งธ๋กœ ์‚ญ์ œ 3. TRUNCATETRUNCATE ํ…Œ์ด๋ธ”๋ช…;๋ชจ๋“  ํ–‰ ์‚ญ์ œํ…Œ์ด๋ธ”์€ ์‚ญ์ œ๋˜์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋งŒ ์‚ญ์ œ  โญ Auto Increment ๊ฐ’์ด ์ดˆ๊ธฐํ™” ๋จ   ๋งŒ์•ฝ ์‚ญ์ œํ•˜๋ ค๋Š” ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์„ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์—์„œ FK๋กœ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋‹ค. Error Code: 1701. Cannot truncate a table referenced in a foreign key const..
[TIL] Week 9 ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ
ยท
๐Ÿ•Š๏ธ DevCourse/Backend
๐Ÿ›๏ธ ์ฃผ๋ฌธํ•˜๊ธฐ API ์ „์ฒด flow ํ…Œ์ŠคํŠธ์ฃผ๋ฌธํ•˜๊ธฐ์˜ ๊ฒฝ์šฐ FK๋•Œ๋ฌธ์— delivery, orders, orderedBook ํ…Œ์ด๋ธ”์— ์ˆœ์„œ๋Œ€๋กœ INSERT๋ฅผ ํ•ด์•ผํ–ˆ๋‹ค.deliveryํ…Œ์ด๋ธ”์— INSERT๋ฅผ ์ง„ํ–‰ํ•œ ํ›„ ํ•ด๋‹น id๊ฐ’์„ ๋ฐ›์•„์™€ delivery_id ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๊ณ ๋‹ค์Œ SQL๋ฌธ์— ํ•ด๋‹น ๋ณ€์ˆ˜๋ฅผ ๋„ฃ์–ด์ฃผ๋Š” ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.  ๊ทธ๋Ÿฐ๋ฐ delivery_id๋ž‘ order_id๊ฐ€ ์ „๋ถ€ null์ด๋ผ๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.  let delivery_id;let order_id;let sql = `INSERT INTO delivery (address, receiver, contact) VALUES (?, ?, ?)`;let values = [delivery.address, delivery.receiver, del..
[TIL] Week 9 ์ฃผ๋ฌธ API
ยท
๐Ÿ•Š๏ธ DevCourse/Backend
โœ๐Ÿป ์„ค๊ณ„DB ์„ค๊ณ„ ERD ์„ค๊ณ„ ๐Ÿ—‚๏ธ DB ์ƒ์„ฑํ…Œ์ด๋ธ” ์ƒ์„ฑ FK ์ œ์•ฝ์กฐ๊ฑด ์ƒ์„ฑ ์ด๋ ‡๊ฒŒ FK์˜ ์ œ์•ฝ์กฐ๊ฑด์˜ ์ด๋ฆ„์„ ๋‚˜๋งŒ์˜ ๊ทœ์น™์— ๋งž๊ฒŒ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ์ปจ๋ฒค์…˜์ด๋ผ๊ณ  ํ•œ๋‹ค.  ๐Ÿ”– ์ฃผ๋ฌธ SQLitems ๐Ÿ‘‰๐Ÿป orderedBook ํ…Œ์ด๋ธ”์— INSERTdelivery ๐Ÿ‘‰๐Ÿป delivery ํ…Œ์ด๋ธ”์— INSERTtotalQuantity, totalPrice, userId, firstBookTitle ๐Ÿ‘‰๐Ÿป orders ํ…Œ์ด๋ธ”์— INSERT orderedBook ํ…Œ์ด๋ธ”์€ order์˜ id๊ฐ’์„ ํ•„์š”๋กœ ํ•˜๊ณ orders ํ…Œ์ด๋ธ”์€ delivery์˜ id๊ฐ’์„ ํ•„์š”๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—delivery → orders → orderedBook์ˆœ์œผ๋กœ INSERT ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. 1. delivery ํ…Œ์ด๋ธ” INSERT ( ๋ฐฐ์†ก ์ •..
[TIL] Week 9 ์žฅ๋ฐ”๊ตฌ๋‹ˆ API
ยท
๐Ÿ•Š๏ธ DevCourse/Backend
๐Ÿ›’ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ํ…Œ์ด๋ธ” ์ƒ์„ฑ CREATE TABLE Bookshop.cartItems ( id INT NOT NULL, book_id INT NOT NULL, num INT NOT NULL DEFAULT 1, user_id INT NOT NULL, PRIMARY KEY (id)} book_id๋Š” books ํ…Œ์ด๋ธ”์˜ id๋ฅผ, user_id๋Š” usersํ…Œ์ด๋ธ”์˜ id๋ฅผ FK๋กœ ์‚ผ๊ณ  ์žˆ์œผ๋‹ˆ ์ง€์ •ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.๊ทธ๋Ÿฐ๋ฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.  ๐Ÿšจ Operation failed: There was an error while applying the SQL script to the database. ERROR 1005: Can't create table Bookshop.cartItems (errno..
[TIL] Week 8 ๋„์„œ ์ƒ์  ์ข‹์•„์š” API
ยท
๐Ÿ•Š๏ธ DevCourse/Backend
๐Ÿ“” ERD์ข‹์•„์š” ํ…Œ์ด๋ธ”์— ์–ด๋–ค ํšŒ์›์ด ์–ด๋–ค ๋„์„œ์— ์ข‹์•„์š” ํ–ˆ๋Š”์ง€ id๊ฐ’๋“ค์„ FK๋กœ ์ €์žฅ ๐ŸŽˆ ํ…Œ์ด๋ธ” ์ƒ์„ฑ๋ˆ„๊ฐ€ ์ข‹์•„์š”๋ฅผ ๋ˆŒ๋ €๋Š” ์ง€ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋กœ๊ทธ์ธํ•œ ์œ ์ €๊ฐ€ ์ข‹์•„์š”๋ฅผ ๋ˆŒ๋Ÿฌ์•ผ ํ•œ๋‹ค.๋กœ๊ทธ์ธ์„ ํ–ˆ๋‹ค๋ฉด ํ† ํฐ์„ ๊ฐ€์ง€๊ณ  ์žˆ์„ ๊ฒƒ์ด๊ณ  ํ•ด๋‹น ํ† ํฐ์œผ๋กœ ์ข‹์•„์š” ๋ˆ„๋ฅธ ์œ ์ €๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค. ์šฐ์„  ํ† ํฐ์€ ๋‚˜์ค‘์— ๊ตฌํ˜„ํ•˜๊ธฐ๋กœ ํ•˜๊ณ  ์œ ์ € id๊ฐ’์„ body์— ๋„ฃ์–ด ๊ตฌํ˜„ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค. โค๏ธ ์ข‹์•„์š” ์ถ”๊ฐ€ APIconst addLike = (req, res) => { const {liked_book_id} = req.params; const {user_id} = req.body; let sql = `INSERT INTO likes (user_id, liked_book_id) VALUES (?, ?);`; le..
[TIL] Week 8 ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„, ์‹ ๊ฐ„์— ๋”ฐ๋ฅธ ๋„์„œ API ํŽ˜์ด์ง•
ยท
๐Ÿ•Š๏ธ DevCourse/Backend
๐Ÿ”— books & category ์—ฐ๊ด€๊ด€๊ณ„ ์„ค์ •๋„์„œ ์กฐํšŒํ•  ๋•Œ ์นดํ…Œ๊ณ ๋ฆฌ ํ…Œ์ด๋ธ”๊ณผ ์กฐ์ธํ•˜์—ฌ ์นดํ…Œ๊ณ ๋ฆฌ๋ช…์„ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋„๋ก FK ์„ค์ •Foreign Key Name : ์—ฐ๊ด€๊ด€๊ณ„๋ช…Referenced Table : ์—ฐ๊ฒฐํ•  ํ…Œ์ด๋ธ”Column : ํ˜„์žฌ ์„ ํƒ๋œ ํ…Œ์ด๋ธ” ์ปฌ๋Ÿผ ์ค‘ FK๋กœ ์„ค์ •ํ•  ์ปฌ๋ŸผReferenced Column : Referenced Table์˜ ์ปฌ๋Ÿผ ์ค‘ ์—ฐ๊ฒฐํ•  ์ปฌ๋Ÿผ ์„ ํƒ์ด์ œ books์˜ ์นดํ…Œ๊ณ ๋ฆฌ id๊ฐ’๊ณผ category์˜ id๊ฐ’์ด ๋™์ผํ•œ ๊ฒฝ์šฐ ์กฐ์ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.  * ์ปฌ๋Ÿผ๋ช…๋งŒ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด category์˜ name ์ปฌ๋Ÿผ์„ category_name์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ์—ˆ๋‹ค.  let sql = `SELECT * FROM books LEFT JOIN category ON boo..
๋ฏผ๋ฆฌ๋ฒ„
'๐Ÿ•Š๏ธ DevCourse/Backend' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก