앙큼한 개발기록

[sequelize] sequelize data 다이어트 방법 본문

개발/javascript

[sequelize] sequelize data 다이어트 방법

angkeum 2022. 12. 12. 22:24

sequelize 를 사용하면서 가장 많이 고민하는 부분인 데이터 베이스 구조와 api 의 속도 개선을 위해서 

어떤식으로 진행했는지에 대해 

간단하게 적어 보고자 한다. 

 

다른 직원분들이나 회사 동료들에게 데이터 다이어트를 하라고 하거나

속도 개선을 하자고 하면 어디서 부터 시작해야 될지 모르는 분들이 많은것 같다. 

 

나또한 예전에 작업하면서 아무리 해도 안되는 부분이 있었지만 

그래도 어느정도 내가 여태까지 해왔던 아주 심플한 방법으로 개선했던 점들을 공유 한다. 

 

1. 데이터 미리 받아오기 

sequelize에서 include를 거는걸 최소화 하고 배열에서 가져올때에는 관계 되어 있는 데이터를 미리 가져와서 

공유 데이터에 넣어 놓고 (vuex, redux등등..) 사용한다면 api 속도가 미친듯이 빨라지는 효과를 간혹 볼 수 있다.

sequelize의 강력한 include 사용은 데이터를 모두 가져오는데 편리하지만 실제 실행되는 쿼리를보면 이상하리 만큼 긴 문장을 볼때 효율성이 급격하게 떨어지고 있음을 알 수 있다. 

 

2. include 대신에 literal 사용

무슨일이 있어도 include를 써야 되는 경우는 없다. 단지 literal를 잘 쓰지 못해서 그럴 뿐.

실제로 include를 걸어서 가져오는 속도 보다 literal이나 rawquery를 통해서 가져오는 select 문이 속도가 훨씬 빠르다. 

 

3. api를 통해서 전달받은 list를 클라이언트에서 가공하려 하지 말자. 

list 데이터를 그대로 내려주고 사칙연산이나 데이터를 클라이언트에서 가공한다면 db에서 내려준 데이터를 한번더 가공하기 때문에 클라이언트 서버 쪽의 버벅거림이 생기는 경우가 간혹 존재 한다.

이런 경우 mvvm 모델을 쓰거나 view modeling을 해서 화면에서 필요한 데이터가 무엇인지 모두 추출 해 보고 

왠만하면 서버에서 모두 바인딩해서 보내주면 그래프나 대량의 데이터를 연산하는 작업의 속도를 개선 할 수 있다. 

 

4. 정말 말도 안되는 데이터 양이라면 clustering, paging

사실 간단하면서도 많이 놓치는 부분이 clustering이랑 paging 이다 

데이터양이 정말 엄청나게 많거나 통계 처리를 해야 된다면 클러스터링과 페이징 처리를 통해서 충분히 해소할 수 있다. 

 

5. 참조 코드 혹은 검색 조건에 index 걸기 

select문에서 where 절에 index 가 걸려 있냐 안걸려 있냐는 검색 속도를 엄청나게 차이나게 만든다. 

단 index의 과도한 사용은 오히려 속도를 감소 시키니 주의하자. 

 

끝. 

Comments