728x90
오랜만에 글을 작성합니다...
최근에 api를 만들게되면서 어차피 관리자에서 사용하는거니.. 대충 for로 다 만들어놨는데..
데이터가 점점 많아질 수록 심각하게 느려지는 상황이 생기더군요...
for안에 for안에 for안에 for 이러니깐 미친 듯이 하나에 따라서 너무 많이 도니깐 아... 이제는 바꿀때가 됐구나..
빨리 바꿀걸 그랬구나 라고 느껴지더라구요...
하나의 상황을 예로 들어서 파트별로 설명을 드리면
1. 하나의 고객이 존재
2. 그 고객이 작성한 글들이 존재
3. 각각의 게시글 댓글 작성자 들이 존재 (참고로 해당 댓글은 SNS 작성 할 수도 있고 그냥 회원이 작성 할 수 도 있음)
이런 상황에서 처음 짰던 코드는
// 1. 고객의 DB 값 찾기 : A
// 2. 그 고객의 게시글 DB 값 찾기 : B
// 3. 게시글 작성된 댓글 DB 값 찾기 : C
// 4. 댓글 작성자의 sns 데이터 찾기 : D
// 5. 그냥 회원의 DB 데이터 찾기 : E
for(let i = 0 ; i < A.length; i++ ) {
const subData = {
// 회원 정보
};
for(let j = 0 ; j < B.length; j++ ) {
// A의 아이디 == B 의 아이디 인 경우
if ( A[i].id === B[j].id) {
const article = {
// 게시글 정보
}
}
}
}
그때는 데이터가 별로 없어서 생각없이 꼬리물기 식으로 갔는데 하.. 데이터가 많아지면서 느껴지더라구요...
그래서 for..of 문을 이용해서 방식을 바꿔버렸습니다.
// 1. 고객의 DB 값 찾기 : A
// 2. 그 고객의 게시글 DB 값 찾기 : B
// 3. 게시글 작성된 댓글 DB 값 찾기 : C
// 4. 댓글 작성자의 sns 데이터 찾기 : D
// 5. 그냥 회원의 DB 데이터 찾기 : E
// 각각의 DB에 넣을 Map 설정
const clientMap = new Map();
const articleMap = new Map();
const commentMap = new Map();
const snsMap = new Map();
const userMap = new Map();
// 각각의 DB에 들어갈 값의 인덱싱 설정
for (const article of B) {
if (!articleMap.has(article.member_id)) articleMap.set(article.member_id, []);
articleMap.get(articleMap.member_id).push(article);
}
for (const comment of C) {
if (!commentMap.has(comment.article_num)) commentMap.set(comment.article_num, []);
commentMap.get(commentMap.article_num).push(comment);
}
// 각각의 맞춰서 값을 불러오기
for (const client of A) {
const subData = {
// 회원 정보
};
const articles = articleMap.get(client.member_id) || [];
for (const article of articles) {
const article = {
// 게시글 정보
}
const comments = commentMap.get(article.article_num) || [];
...
}
}
이런식으로 각각의 map에 가져오고자 하는 값으로 인덱싱 작업 후 처음부터 돌리면서 그거에 맞게 자동적으로 가져오도록 for...of문은 쓰면 그냥 for문 쓰는 것보다 훨씩 빠르게 가져올 수 있더라구요..
역시 문법은 중요한거 같습니다.. 문법을 열심히 봅시다...
728x90
'잡다한 지식' 카테고리의 다른 글
| [Linux] 파일에 권한 정보 (0) | 2025.05.16 |
|---|---|
| [PY] python을 이용한 Chromadb (0) | 2025.04.24 |
| [Vector] Pinecone 벡터 (0) | 2025.04.15 |
| [SQL] mediumtext 가 준 교훈.. (0) | 2025.03.21 |
| [JS] Promise 종류 (0) | 2024.11.20 |