개발자
안녕하세요 현재 spring 프로젝트에서 동기식api가 tps가 낮아서 개선하고자 스케쥴러랑 mq를 사용해서 비동기식으로 변경했습니다. 이것과 관련해서 궁금한점이 내부적으로 아직 처리가 완료되지않았는데, 비동기처리라서 응답이 먼저 가기때문에 tps가 높아졌다는게 단순 눈속임일 수도 있다는 생각이 들어서요. 그래서 처리가 완료되면 sse알람도 구현했는데, 비동기처리를 했다는 것이 tps를 향상 시켰다고 말할 수 있는건지 궁금합니다.
답변 1
인기 답변
안녕하세요! 동기식으로 했을 때 처리가 오래 걸리는 작업이면 말씀하신것처럼 비동기로 처리하는게 사용자가 체감하는 속도나 비용면에서 더욱 효율적일 수 있습니다. 다만, 비동기로 처리를 하게 되면 데이터에 대한 상태를 관리할 수 있어야 하고 비동기 처리를 위한 아키텍쳐와 이에 대한 모니터링을 추가로 고민해야하기 때문에 이러한 trade off 를 잘 고민하여 진행해야 합니다. 비동기 처리를 통해 요청에 대한 tps 가 증가하고, 사용자가 서비스 기능을 사용함에 있어 불편함을 느끼지 않는다면 충분히 좋은 방향으로 개선했다라고 생각할 수 있을것 같습니다. 하지만 tps 는 API 요청 자체에 대한 속도이고, 비동기 방식으로 변경하면서 실제 사용자가 처리 속도가 오래 걸리는걸 체감한다면 이는 잘못된 개선방향이다 라고 말씀드리고 싶습니다. 그래서 실제 비동기 방식으로 처리 될때의 성능도 추가로 모니터링하여 이 부분에 대해 문제가 없는지 추가로 검토를 진행하고 필요시 scale out 이나 개선을 모색해보셔야합니다. 저의 짧은 지식이 조금이나마 도움이 되시길 바라겠습니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2024년 04월 12일
비동기 API 구현은 시스템의 TPS(Transaction Per Second)를 높이는 데 도움이 될 수 있습니다. 비동기 API의 핵심적인 특징은 요청과 응답 사이에 블로킹이 없다는 것입니다. 즉, 요청을 받은 서버는 해당 작업을 백그라운드에서 처리하고 클라이언트에게 즉시 응답을 보냅니다. 이렇게 되면 클라이언트는 다른 작업을 계속 진행할 수 있으며, 서버는 대량의 요청을 빠르게 받고 처리할 수 있게 됩니다. 이 경우 TPS가 실제로 향상될 가능성이 있습니다. 하지만 비동기 처리를 하더라도 실제 업무 처리 성능(요청부터 최종 결과까지 걸리는 시간)은 동기식 방식과 크게 다르지 않을 수 있습니다. 왜냐하면 비동기식으로 변경한다고 해서 실제 내부적으로 해당 작업을 처리하는 데 걸리는 시간이 줄어들지는 않기 때문입니다. 즉, 비동기 방식은 전체적인 시스템의 부하를 줄이고, 다량의 요청에 대해 빠르게 응답하는 데에 주로 이용되며, 이를 통해 TPS를 높일 수 있습니다. 하지만 특정 요청의 완료 시간을 단축시키는 것과는 다른 개념입니다. 따라서 비동기 처리가 '눈속임'이라고 볼 수는 없지만, 이로 인한 성능 향상은 상황에 따라 다르며, TPS 측면에서만 보았을 때 성능 개선이 있다고 할 수 있습니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!