해결된 질문
작성
·
127
0
안녕하세요 DRF 인스타그램을 만들다가 조금더 업그레이드를 하고 싶어서
이런저런 기능을 추가하였는데요 추가를 하다보니 너무 많이 한 Viewset 에
많은 조인을 걸려있어서 이부분이 차후 DB성능에 문제가 될 수 있을것 같아서 질문을드립니다!
위와 같이 한 포스트리스트에 댓글, 좋아요 유저셋, 이미지셋, 태그셋 등등 너무 많이 조인이 걸려있는데
또 저기에 스크랩여부 추가하려고 해서,, 걱정이되네요....
(지금이야 데이터양이 적고 유저가 테스트 1~2명 유저이기 때문에 빠르게 동작하지만, 만일 저게 배포가 되어서 많은 데이터가 쌓이고 여러 유저가 사용된다면 문제가 될 것처럼 보여서 질문드립니다 ㅠ)
즉 저렇게 많이 걸려있어도 문제가 없는지? (문제가 없다는 기준은 scale up이 된다면 데이터양에 상관없이 충분히 성능이 나오는지)
아니면 저런 queryset 코드 자체가 잘못된건지 판단이 잘 서지 않네요 (실무 경험이 없다보니 )
그래서 차라리 api호출을 두번 이상 하는게 나은지? (한페이지에 여러 정보를 표시하다보니 저렇게 됬네요 )
아니면 다른 방법이 있는지,,,,??
어떻게 하면 위의 viewset호출을 좀 더 실무적으로 효과적으로 api를 호출 할 수있을까요??
답변 1
1
안녕하세요.
하나의 API 응답에서 모든 것을 처리할 수도 있겠지만, 하나의 Endpoint에서 모든 응답을 다 받으려하시기 보다, 생각하신 것처럼 리소스 별로 API 호출을 나눠서 호출하는 것이 좀 더 확장성있는 접근이 될 수 있습니다.
API 응답도 성능 향상을 위해 캐싱(Caching)을 할 수 있는 데, 매번 DB에 쿼리하게 되면 캐싱을 전혀 사용할 수 없고, 모든 부하가 DB에 다 걸리게 됩니다. 요즘 클라우드 서비스가 아무리 좋아졌어도 가장 비싸고 확장력이 느린 부분이 DB거든요.
그러니 리소스 별로 API 호출을 나누면 캐싱을 적절히 활용할 수도 있고, 최적화할 수 있는 여지가 많아지게 됩니다. 어느 정도로 API 리소스를 쪼갤 지는 하기 나름인데요. 처음부터 잘게 쪼개시기보다 서비스를 개발/관리하시면서, 다양한 APM 서비스 (ex: DataDog 등)를 통해 서비스를 모니터링해가시며 최적화해가셔야 합니다. 섵부른 최적화는 유지보수성을 해치고 오히려 독이 됩니다.
궁금증이 해결되셨다면, 본 질문의 상태를 해결됨으로 변경 부탁드립니다.
화이팅입니다. :-)