프로젝트 리팩토링 중 학습 자료 정리_24.04.23

안승지·2024년 4월 23일
0

사이트 초기 로딩 속도가 너무 느린 문제에 대해서 탐색중 질문과 답변

새로고침 후 사이트 로딩까지 10초 가까이 걸리거나 에러가 뜨는 상황 발견.

현재 프로젝트는 프론트는 netlify, DB는 mongoDB atlas, 백엔드 api는 koyeb에 배포되어 있는 상황.

mongoDB의 용량 문제로 최근 플랜을 업그레이드 한 이후 유효한 환경 개선을 체감하면서 netlify 혹은 koyeb의 플랜 또한 업그레이드를 할지 고민중이던 상황.

어느 구간에서 느린지 확인해 보았는가?

네트워크 탭을 정확히 볼 줄 몰라 추측이나, 음원 파일을 불러오는 과정에서 문제가 있는것으로 생각된다.

음원은 어디에 올려놓고 서빙하고 있는가?

mongoDB에 업로드되어 koyeb에 배포된 백엔드 api를 통해서 불러온다. 현재 백엔드를 구성했던 분께선 프로젝트에 없어 자세하게는 말씀 드리기가 어렵다.

음원을 서버가 매번 클라이언트에 보내주는게 시스템 자원을 차지하는것 인지, 그렇다면 파일 불러올 때만 전체적으로 느려지는 것인지 판단이 필요하다.

백엔드가 어떻게 구성되어 있는지 전혀 몰랐고 성능 관련은 경험이 없다보니 체크해볼 생각을 못했다. 참고하겠다.

음원 파일 크기는 어떻게 되는지?

최근 테스트에 사용한 고용량 음원의 경우 30MB정도 되었던것 같다.

성능을 올려서 해결할 문제라기 보다는 최적화를 해야 해결이 될것 같다. 백엔드에서 매번 파일을 api통해서 응답해주는 구조인가?

정확히 매번 10MB가 넘는 파일을 보내고 있는지는 확인이 필요할것 같다, 재생이 필요 없는 화면도 느린것을 보면 그런것으로 판단된다.

30M를 매번 서버가 보내주고 있다면 30M 다운받을 동안 서버는 해당 파일 내보내는거에 자원을 쓰고 있는것.

보통 그런 파일은 파일 전용 서버에 따로 올린다. aws에서는 s3에 올리거나 다른방법으로는 cdn을 이용해서 파일 다운로드가 다른 서버에 영향을 거의 미치지 않도록 분리한다.

그 음원은 고정적으로 파일이 정해져 있는것인지? 아니면 서버에 올려서 추가하는 등 관리하고 있는것인지?

두 점의 차이를 잘 이해못한것 같다. 파일 업로드 api(koyeb)를 통해서 mongoDB에 매번 파일이 올라가고 그걸 호출한다. 계정 정보 및 결제 정보등도 mongoDB에 저장되어 있다.

업로드 하고 관리하는 것이다.

그 파일은 업로드 이후에 어디에 저장되는가? 파일을 hdd, ssd 같은 저장장치에 저장해서 불러와서 쓸수도 있을거고 가끔은 디비에도 저장해서 쓰더라.

mongoDB 컬렉션중 하나에 저장된다.
그럼 하나의 개인 pc를 서버에 연결한다…정도로 생각하면 되겠는가?

맞다, 서버도 그냥 하나의 PC다.

파일을 그곳에 저장하고 있다면, 그것은 부하가 크다.
몽고디비에 지금 파일을 저장하고 있다면 몽고디비 사용에 있어 느리고 비효율적인것
몽고디비가 파일을 응답하는 동안 몽고디비는 다른 작업을 덜 할수밖에 없고 용량제어도 어려워지고 쿼리속도도 느려질 것.

30m 다운받는 동안 몽고db 커넥션 하나를 물고 있는거라 다른사람은 그시간동안 남은 연결 가능한 자원안에서 접근이 가능해지는데 이건 비싼 디비를 너무 편하게 쓰고 있는.

아직 제대로 이해한 것인지 모르겠으나, 음원 파일 전용 DB나 서버를 따로 마련하고 현재 프론트에서 파일 호출하는 api들을 전부 바꾸는 것으로 해결될것 같은데, 맞는가?

음원 파일은 koyeb을 통해업로드는 해야하지만 파일자체는 최종적으로 디비에 저장하지 말고 파일은 다른데 저장해야 하는 것이다.
그리고 브라우저가 파일을 가져올 때 koyeb을 거치지 않아야 할것 같다.
예를 들어 https://주소/files/음원파일 이런식으로 하는데도 koyeb이 응답하는게 아닌것.

그럼 백엔드 api를 손본다면 파일 업로드가 몽고디비를 향하게 하는게 아니라 다른 새로운 디비를 향하게끔 고쳐야 하는것인가?
현재는 음원 게시물안에 파일이 포함된 통째로 가져오는 구조다보니 느렸던것 같다.

파일업로드 할때 몽고디비에 정보는 저장해야 한다. 파일 위치가 어디있는지 주소같은 것.

어디까지 수정이 가능할지 모르겠으나 S3에 올리면 좋다. 그럼 파일 다운로드는 S3가 대신 알아서 해준다.
나중에는 S3가 아니어도 파일은 별도로 서빙하는 서버가 있으면 좋다.
불러올때는 디비에 요청안하는 그냥 파일서버로 하면 s3도 필요없다.

0개의 댓글