Errors (4) 썸네일형 리스트형 [ruby on rails] n+1 해결한 기억나는 경험 다른 SI 업체에 대량의 데이터를 보내주는 작업인데, DB to DB로 보냈었다. 그때, 데이터를 연관관계에 의해서 데이터를 보냈는데, 그 연관관계에 있는 데이터에서 크기가 큰 ids를 추가하다 보니 그때마다 쿼리를 날렸었다. 하지만 이 데이터는 최초 단 한 번 보내는 것이고, 데브에서 실 서버 데이터로 테스트를 했을 땐, 별 문제가 없어서, 실서버 적용했을 때에도 문제가 없을 거라 생각했다. 하지만.. 실서버 배포하는 날 문제가 발생하였고, 1시간이 넘도록 끝까지 전송이 안되었었다. 크기가 큰 ids를 받는 쿼리가 루프에 루프를 타며 디비에서 데이터를 가져오는데 부하가 발생했던 것이다. 그래서, 전송하던 것을 바로 멈추고 코드 리팩토링에 들어갔고, 연관관계에 넣었던 조건식들을 없애고 n+1 문제를 발생.. [ruby on rails] n+1 문제 해결 경험 ruby on rails를 다루며 n+1 문제를 굉장히 많이 경험을 해보았고, 이 문제에 대한 해결은 디비에 요청을 최소화하기 위해 한 번 요청을 보낼 때, 연관관계에 있는 필요한 데이터를 한 번에 가져오는 것이다. 이때, 두 가지 방법으로 문제를 해결했다. 1. 첫 번쨰 방법 : preload() or includes() 두 함수의 장단점 약간의 차이점은 있지만, 날아가는 쿼리는 동일하다. 연관관계에 있는 모든 값들을 미리 가져온다. 그래서 한 모델에서 연관관계에 있는 모델에 직접 접근할 때 사용하면 굉장히 편하게 쓸 수 있다. 1) 언제 사용? 한 모델에 연관관계에 있는 모델에 적접 접근할 때 사용하면 굉장히 편하게 사용할 수 있다. 2) 예시 store = '도매' wholesale_stores =.. 에러를 해결하기 위한 마음가짐 검색어를 생각할 때, 내가 겪고 있는 에러 하고 밀접한 부분의 검색어를 생각해볼 것. 복잡한 로직은 하나하나 노트에 적어보며 그룹화하고 쪼개서 해결한 후 연결시킬 것. 복잡할수록 조건들을 세세하게 시간과 여유를 가지고 생각해보고 기록하고 연결해볼 것. 유연한 사고가 중요하다. 기억나는 에러들 1. 버전 문제 datagrip 도 버전 업그레이드했다가 버그 터져서 롤백했었다. yarn install 명령어도 node.js 버전이 안 맞아서 잘 안 되어서 node.js 버전을 맞추어서 처리했다. oracle도 버전이 안 맞아서 싱크가 안 맞았었다. 이전 1 다음