현재 공부하면서 홈페이지를 만들고 있는데 오픈api를 조회해서 데이터를 사용하는것은 이해를 하겠는데 

조회한 데이터를 db에 넣는 이유를 아직 잘 모르겠습니다 

매번 조회하면 성능이 많이 떨어져서 그런가요?? 

또 db에 처음 저장을 한 후에 다음에 조회할때는 제db에 있는 데이터를 조회하는 것인가요??

 

  • Lv36

    네, 외부의 API에서 정보를 가져오는 것은 로컬 DB에서 가져오는 것보다 수백~수천 배 느립니다. 게다가 API마다 조회수 제한이 있기 때문에 불특정다수를 대상으로 실서비스를 개시하면 금방 제한에 걸려 버리지요.

     

    그래서 날씨나 주식처럼 실시간으로 정보를 받아올 수밖에 없는 경우를 제외하면 API 조회 결과를 일단 DB에 저장해 놓고, 백그라운드에서 주기적으로 API를 조회하여 DB에 저장한 내용을 업데이트하는 방식을 씁니다.

     

    앞에서 언급한 날씨나 주식 같은 것도 실제로는 로컬 캐시를 활용하는 경우가 많습니다. 방문자는 초 단위로 계속 페이지를 왔다갔다하는데 날씨가 초 단위로 바뀌지는 않고, 주식 사이트는 1초에도 수만 명씩 방문하는데 주식값이 1/10000초 단위로 바뀌지는 않으니까요. 10000번 불러올 것을 10번만 불러온다면 처리 시간을 무려 99.9% 줄일 수 있겠지요?^^

  • Lv36 ?
    답변 정말 감사합니다!!
    그런데 백그라운드에서 업데이트를 하는 작업은 성능에 영향을 많이 미치지 않나요??
    그리고 업데이트 주기는 어떤식으로 판단 해야할까요??
  • ? Lv36

    사용자의 요청과 무관하게 크론탭 등을 사용하여 일정한 주기로 업데이트하는 것을 의미합니다. 사용자가 기다리고 있는 사이에 업데이트하는 일은 없어야겠지요. 위에서 말씀드렸듯이 사용자 수가 많을수록 백그라운드 업데이트가 압도적으로 유리합니다. 최소 수십%에서 최대 99.n%의 효율 개선이 가능한데 안 하면 바보죠. ㅎㅎ

    업데이트 주기는 해당 데이터의 특성에 따라 다르겠지요? 흔히 사용하는 공공데이터만 해도 몇 분 주기로 계속 업데이트되는 것이 있는가 하면, 1년에 한 번 바뀔까 말까 한 것도 있으니까요. 국내주식은 평일 낮에만 업데이트되고, 코인은 24시간 업데이트되고, 버스 시간표는 몇 주마다 불규칙하게 업데이트되고...

  • Lv2

    안녕하세요? ^^
    API의 데이터를 가져와서 이를 DB에 저장하는 이유를 여러 측면에서 고려해볼 수 있겠지만
    기진곰 님께서 설명해주신 두 가지 이유가 가장 중요한 것 같습니다 :)
    1. 외부 API에서 GET 전송으로 정보를 가져오는 것은 느리다.
    2. API의 조회 횟수 제한에 걸린다.

    덧붙여 API에서 제공하는 정보(A)와 해당 사이트에서 필요로 하는 정보(B)가 동일하지 않으면
    결국 A를 가공하여 B를 추출해야되는데 이러한 과정에서도 리소스가 사용됩니다 ㅠㅠ
    위와 같은 과정을 번번이 거치지 않으려면 한 번 데이터를 가져와서 가공한 후 이를 DB에 저장해야겠죠~
    예컨대 (1) 우리나라 시군구별 인구 1,000명 당 출생아수, (2) 시군구별 인구 데이터를 매년 1회 가져와서
    당해 연도의 국내 인구 1,000명 당 출산율을 보여주려면
    해마다 한 번 도출한 결과값을 DB에 저장하는 쪽이 리소스 절감 측면에서 당연히 유리할 것입니다 :)

    그리고 "백그라운드에서 업데이트를 하는 작업은 성능에 영향을 많이 미치지 않나요??"라는 질문에 대하여는
    케바케라서 일률적으로 답변을 드리기 어렵지만,
    경우에 따라서 별도의 크롤링 서버를 두거나, 웹 서버와 DB 서버를 분리하는 방법으로 대처할 수 있습니다 ^-^

    그럼 좋은 주말 저녁 되세요~!