개발자
Express 기반의 서버를 koyeb에 무료로 배포하여 사용중입니다. 다름이 아니라, 프론트 단에서 서버로부터 요청 후 응답까지의 시간이 너무 길어 개선하려고 하는데 gzip 적용이나 sql 쿼리 수정 등의 작업을 해도 속도가 2초 정도 걸려 질문드립니다. 1. DB 데이터를 redis 서버에 캐시해놓고 사용하면 응답 속도가 개선될까요? 2. 클라우드 무료 성능으로 인한 응답속도 저하일까요? 3. 이 외의 개선 방안이 궁금합니다.
답변 3
인기 답변
안녕하세요! 서버 구성이나 코드 구성이 어떻게 되어있는지 몰라서 정확한 답변은 어렵지만 답변 남깁니다. 1. DB 데이터를 redis 서버에 캐시해놓고 사용하면 응답 속도가 개선될까요? 서버에서 DB 서버를 조회하는게 느린건가요? 그렇다면 redis 캐시를 앞단에 두면 응답 속도 개선은 있을겁니다. 2. 클라우드 무료 성능으로 인한 응답속도 저하일까요? 이건 koyeb 쪽 문서를 확인해보시면 될 것 같습니다. 아마 무료 티어라고 응답 속도 관련해서 성능 저하를 하지는 않을겁니다. 3. 이 외의 개선 방안이 궁금합니다. 몇 가지 질문을 하겠습니다. 서버와 DB가 물리적으로 먼 곳에 위치하고 있지 않나요? 서버를 거치지 않고 DB 서버를 조회해도 느린가요? 서버가 서버리스로 돌아가나요? cold-start 하는 경우는 없나요? 사견으로는 koyeb로 배포한 백엔드 서버와 koyeb에서 제공하는 DB 서비스를 이용하고 있다면 물리적으로 서버들이 국내에 있지 않기 때문에 응답속도가 좀 걸리는 것 같습니다. 만약 그게 아니라면 서버가 문제인건지 DB가 문제인건지 하나씩 뜯어봐야 자세하게 알 수 있을 것 같아요 :)
익명
작성자
2024년 01월 03일
답변 해주셔서 감사합니다. 성능 검사 수행 시, 서버로부터의 응답 속도가 2초 정도 걸리는 것을 확인했고 DB 가 문제는 아닌 것 같은게 DB 로직 부분을 주석처리하고 배포했을 때에도 똑같은 시간이 걸리고 있습니다. 서버와 DB는 koyeb으로 배포하여 둘 다 워싱턴 리전을 사용합니다.
이미 서버 애플리케이션 단에서 많은 노력을 하셨다면, 서버의 리전이 미국에 있다는 지리적 요인이 영향이 있을 것 같습니다. 클라이언트(한국)에서 보내는 요청이 서버가 있는 미국까지 가야 하니, 네트워크를 통해 전송되는 시간이 길어질 수 밖에 없습니다. 마찬가지로, 응답도 미국에서부터 한국으로 넘어와야 하니 시간이 오래 걸립니다. 만약 서버가 한국이었다면, 한국에서 한국으로 요청을 보내니 그만큼 짧은 시간 내에 응답을 받을 수 있었을 것입니다.
응답시간이라는 하나의 요소만 가지고 원인을 집어내긴 어렵습니다. 제대로 찾으려면 모니터링이 있어야 하는데요. koyeb 이라는 환경은 모니터링이 제한적인 것으로 보이네요. 그럼 어쩔 수 없이 찍어야 합니다. 저라면 이렇게 하겠습니다. 1. 문자열 Hello, world를 리턴하는 아주 간단한 GET API를 작성하고 성능을 테스트 해 봅니다. 이 것도 느리면 인프라 탓일 가능성이 큽니다. koyeb의 인프라를 바꿀 수 없으니 극복하기 어렵습니다. 2. GET API의 속도가 빠르다면 DB를 읽는 간단한 API를 하나 만들어서 테스트 해봅니다. 한 줄 select 도 느리다면 DB 문제일 가능성이 큰데요. 이것도 역시 뾰족한 답이 없습니다. 3. 1~2번 테스트를 모두 통과했다면 드디어 최적화로 극복할 여지가 생긴 것입니다. 코드를 한줄씩 지워보면서 어디서 병목이 생기는지 파악합니다. redis 캐싱을 통해 read 성능을 높일 수 있긴 한데요. 저라면 인덱스를 적절하게 잘 만들었는지를 먼저 점검하겠습니다. 보통 인덱스에서 오는 성능 변화가 더 극적입니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2024년 01월 03일
1. 네, Redis를 사용하여 DB 데이터를 캐시하면 응답 시간이 단축될 수 있습니다. 특히, 자주 조회되는 데이터나 계산에 시간이 많이 소요되는 복잡한 쿼리의 결과들을 캐싱한다면 큰 성능 향상을 볼 수 있습니다. 2. 무료 클라우드 서비스의 경우, 제공하는 리소스가 제한적이므로 응답 시간에 영향을 줄 수 있습니다. 정확한 것은 해당 클라우드 서비스의 성능과 제공하는 리소스 상태 등 여러 요인들을 고려해봐야 합니다. 3. 기타 응답 속도 개선 방안으로는 - 서버와 클라이언트 사이의 네트워크 지연 최소화: CDN(Content Delivery Network) 활용 - DB 인덱싱 최적화: 필요에 따라 인덱스를 재구성하거나 추가 생성 - SQL 쿼리 최적화: 불필요한 Join 제거, Sub-Query 대신 Join 사용 등 - 코드 최적화: 비효율적인 로직 수정, 불필요한 함수 호출 감소 등 등이 있습니다. 하지만 이 모든 방법들은 애플리케이션 및 사용하고 있는 데이터베이스의 현재 상태, 요구사항에 따라 적절하게 선택적으로 사용해야 합니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!