개발자

코인마켓캡은 어떻게 많은 양의 데이터를 계속 업데이트하는 걸까요

2023년 04월 05일조회 697

React query 연습할겸 업비트api로 코인리스트를 만들어 보고있는중 입니다. 그냥 단순히 리스트만 나오는게 아니라 현재가, 변동률, 변동가격 시각총액등 데이터를 코인마켓캡처럼 1초단위로 계속 업데이트 해주고 싶은데 한번에 보는 코인리스트의 수가 10개만 넘어가도 too many requests경고문이 뜨네요... 그래서 Pagnation으로 코인리스트 개수를 10개로 합의보고 refeting을 1초단위로해봤는데 페이지를 바꿀때 어김없이 too many requests가 떠버리네요... 업비트api 특성상 꼭 url에 코인이름을 담아 보내야하고(코인전체 정보 가져오기 불가능) 제가 필요한 데이터들이 두개의 api에 나눠져있어서(코인정보 api, 코인 분봉 정보 api) 코인 하나의 정보가 필요하면 fetching을 두번하는 꼴이라(코인 10개면 fetching 20번...) 이해하긴 하지만 코인마켓캡이나 다른 코인거래소들은 어떻게 그렇게 많은 양의 데이터를 계속 업데이트하는데 too many requests가 안뜰까요? 분명 저가 알지못하는,놓친 무언가가 있는거 같은데 감을 못잡겠네요... 원리가 궁금합니다.

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 3

인기 답변

이국범님의 프로필 사진

다음은 업비트 서비스 운영중인 두나무 채용 공고입니다 https://www.wanted.co.kr/wd/38836 다음과 같이 적혀있습니다 "- 증권 데이터 처리에는 실시간으로 생산되는 수백만의 패킷을 가공하여 모바일과 웹 환경을 위한 실시간 (WebSocket) 및 API (HTTP) 서비스로 제공하고 있습니다. 이 때에 다양한 트래픽에 유연하게 대응할 수 있는 마이크로 서비스와 데이터베이스, 캐시 서버, 메시지 큐 등으로 구성된 시스템을 설계하고 운영하며, 지속적으로 고민하고 개선합니다. " 즉 WebSocket 및 http 프로토콜 기반이라고 적혀있습니다. 사실일까요 ? 실제로 업비트에 들어가셔서 devtools를 켜보세요 https://upbit.com/exchange?code=CRIX.UPBIT.KRW-BTC devtools에서 네트워크 탭으로 이동 -> 그리고 다시 WS로 필터링하면 웹소켓 커넥션이 보입니다 주소는 wss://crix-ws-web.upbit.com/websocket 이군요 바이너리 형태로 통신하고 있고 시세가 변동될 때 http 리퀘스트를 수행하지 않습니다. 웹소켓 기반이 명백합니다 too many request는 위에 개발자분이 답변주신 것 처럼 Public API에 사용 제한을 걸어놓은 것입니다. 보통 정식 서비스는 Public API 와는 다른 방식으로 통신합니다 결론적으로 어떤 회사의 기술이 궁금하시면 채용 공고를 보시면 되겠습니다 그리고 사이트 들어가서 devtools를 켜서 네트워크 탭을 살펴보세요

백시현님의 프로필 사진

백시현

작성자

취준생2023년 04월 09일

오....확인해보니 말씀하신게 맞네요. 정말 자세한 답변 감사합니다

류호준님의 프로필 사진

자체적으로 개발하는 부분과 외부 API를 이용하는데서 오는 한계점 같습니다. API들은 스스로를 보호하기위해서 다양한 방법으로 Rate Limit을 걸어둡니다. Too many request error는 API에서 너무 많은 요청이 같은 요청저에게서 받았을때 요청을 처리하지않고 패스하는 에러입니다. 자체 서버에서는 이러한 에러를 리턴하지 않도록 예외처리를 했을 수도있고 이렇게 많은 요청을 보내야 하는 상황이라는 통상적인 https요청이 아닌 소켓 같은 지속적인 커넥션을 활용했을 가능성이 높습니다.

백시현님의 프로필 사진

백시현

작성자

취준생2023년 04월 06일

아쉽네요..긴글읽고 답변해주셔서 감사합니다

커리어리 AI 봇님의 프로필 사진

코인마켓캡과 같은 큰 규모의 플랫폼들은 다양한 최적화 기법과 기술을 사용하여 많은 양의 데이터를 효율적으로 처리합니다. 일반적인 방법은 다음과 같습니다. 1. 백엔드 캐싱: 서버에서 캐싱을 사용하여, 각 코인의 데이터를 일정 주기로 업데이트하고, 클라이언트에게 캐싱된 데이터를 제공합니다. 이렇게 하면 매번 API 요청을 보내지 않아도 되며, 요청 횟수를 크게 줄일 수 있습니다. 2. 웹소켓: 대부분의 거래소는 웹소켓 API를 제공합니다. 웹소켓은 단일 연결을 통해 서버와 클라이언트 간에 실시간으로 데이터를 주고받을 수 있는 기술입니다. 이를 사용하면 일정 시간마다 요청을 보내지 않고, 서버가 새로운 데이터를 보낼 때마다 클라이언트가 이를 수신할 수 있습니다. 3. 디바운싱 및 쓰로틀링: 클라이언트 측에서 너무 많은 요청을 보내지 않도록, 디바운싱이나 쓰로틀링 기법을 사용하여 요청 주기를 조절할 수 있습니다. 이를 통해 서버 부하를 줄이고, 필요한 경우에만 요청을 보낼 수 있습니다. 4. 데이터 병합: 여러 API에서 데이터를 가져와야 할 때, 서버 측에서 이를 병합하여 하나의 요청으로 데이터를 받을 수 있도록 처리할 수 있습니다. 이렇게 하면 클라이언트가 여러 번 요청을 보내지 않아도 되므로 효율이 향상됩니다. 5. 페이징 및 데이터 로딩 최적화: 리스트를 표시할 때, 한 번에 모든 데이터를 보여주지 않고, 페이징이나 무한 스크롤과 같은 방식으로 데이터를 불러오는 것도 효율성을 높일 수 있습니다. 위와 같은 기법들을 적절히 조합하여 사용하면, 코인마켓캡처럼 많은 양의 데이터를 효율적으로 업데이트하고 처리할 수 있습니다. 각 거래소의 API 제한 및 요구 사항을 확인하고, 해당 제한에 맞추어 애플리케이션을 개발하는 것이 중요합니다.

커리어리 AI 봇의 답변을 평가해 주세요!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!