오늘 배운 내용 📚
- database 비동기화
- FOREIGN_KEY가 존재할 때 데이터 삭제 방법
- 주문하기 완료
추가 정리 내용 📑
- 반정규화
오늘 수업시간에는 database의 비동기화로 시작을 했습니다. database 연결 시에도 시간이 걸리기 때문에 동기 처리를 해주야 하기 때문입니다. 하지만 createConnection의 경우에는 계속 연결을 해야 해서 비동기를 동기처리 해주어야 하지만, createPool의 경우에는 한번 연결해 놓고 pool의 연결을 썼다 끊었다 할 수 있기 때문에 어떠한 이유로 연결을 하는지 궁금해서 공식사이트를 들어가 확인해 봤지만 만족하지 못하고 오히려 비동기 처리를 하기 위해서 조치한 코드 때문에 오히려 동작하지 않아 난관을 겪었고, 그나마 해결한 방법을 공유해 보자면
// database.js
const dotenv = require("dotenv");
dotenv.config();
const { DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE } = process.env;
const connection = async ()=>{
const mysql = require("mysql2/promise");
const pool = await mysql.createPool({
host: DB_HOST,
user: DB_USER,
password: DB_PASSWORD,
database: DB_DATABASE,
connectionLimit: 10,
dateStrings: true
});
return pool
}
module.exports = connection();
// users.js
const pool = require("../config/database");
const signin = async (req, res) => {
try {
const [data] = await (await pool).query(sql,values)
} catch(err){
console.log(err)
}
}
이렇게 코드를 작성하면 database.js 모듈을 그대로 이용하면서 pool을 이용할 수 있게 됩니다. 하지만 await이 두 번 들어가서 이게 맞는지는 정확하게 모르겠습니다.
그리고 오늘 배운 내용 중에 가장 크게 느낀 경험은 바로 정규화였습니다. 이전에 정규화에 대해서 정리를 했었는데요. 정규화는 쉽게 말하면 중복이 되지 않는 테이블을 만들 때 하는 작업입니다. 하지만 오늘 수업을 들으면서 모든 테이블에 정규화 작업을 거치면 어떤 결과가 발생하는지 알게 되는 시간이었습니다. 흔히 반 정규화라 불리는 작업은 모든 테이블의 중복을 허가하지 않는 정규화보다 조금 더 유연하게 작업하는 정규화 작업인데요. 오늘 작업한 코드로 예시를 보여드리자면
SELECT o.idx as id, create_at, address, receiver, contact,
(SELECT title FROM books WHERE idx =
(SELECT book_id FROM order_books where order_id = o.idx LIMIT 1)) as title,
total_count, total_price FROM orders as o
LEFT JOIN deliveries as d ON o.delivery_id = d.id WHERE o.user_id = 1 ORDER BY idx DESC
SELECT o.idx as id, create_at, address, receiver, contact, title, total_count, total_price
FROM orders as o LEFT JOIN deliveries as d ON o.delivery_id = d.id
WHERE o.user_id = 1 ORDER BY idx DESC
그냥 봐도 차이가 느껴지는데요. 바로 서브쿼리에 서브쿼리까지 끌어다 써야 하는 정규화 SQL문과 다르게 반정규화 한 테이블은 스칼라 서브쿼리가 사라진 것을 확인할 수 있습니다. 오늘 쿼리문을 작성하면서 반정규화에 대해 알게 되었고, 상황에 맞게 필요한 SQL문을 작성해야겠다 다짐을 한 날이 되기도 했습니다.
'프로그래머스 데브코스 > TIL' 카테고리의 다른 글
[Day 45] 웹 풀사이클 데브코스 TIL (0) | 2024.01.15 |
---|---|
[Day 44] 웹 풀사이클 데브코스 TIL (0) | 2024.01.12 |
[Day 42] 웹 풀사이클 데브코스 TIL (0) | 2024.01.10 |
[Day 41] 웹 풀사이클 데브코스 TIL (0) | 2024.01.09 |
[Day 40] 웹 풀사이클 데브코스 TIL (0) | 2024.01.08 |