조금 깁니다. ㅠ.ㅠ
배경이 되는 상황을 말씀드려야할 것 같아서요...
...비루한 대학 졸업작품입니다.;
지금까지 php 기초만 해오다가..
오유 프게에서 조언을 얻어 코드이그나이터, 부트스트랩을 이용해서 홈페이지를 만들고 있습니다.
바탕이 되는 데이터는 외부 api 에서 가져오고 있구요.
json 도 처음 다뤄봅니다 --;;;
처음에 모든 기능을 우선 구현해봤는데... 어마어마 했습니다.
로딩시간이요 -_-;;;;
한번의 서비스를 이용하는데 총 로딩 시간이 30초~50초 가량 걸리더군요.
더 큰 문제는 도중에 사용자가 페이지를 꺼버리거나 ESC를 누르면 데이터가 중간에 입력되다가 중단. ㅠㅠ
(같은 내용을 두번째 이용할때는 자체 DB에서 불러오면서 0.1초 이내로 걸립니다.)
하하하... 우선 기능 구현은 다 했다는 점에서 만족하며 뜯어고치고 있습니다.
제게 당장 필요한건 비동기식 처리더라구요.
사용자는 가장 기본적인 틀만 불러오고 (1~2초) 우선 띄워줍니다.
그리고 각각 부분에서 필요한 부분들을 ajax의 get을 통해 ($.get) 값을 되돌려주는 페이지를 요청하게되고, 그 페이지가 응답이 돌아오면 사용자 페이지에 다시 뿌려주도록 고치고 있습니다.
그러던 중 궁금한점이 생겨서요...
여기까지 요약---
1. 외부 api를 불러와 db에 저장하고, 이걸 다시 사용자에게 뿌려주는 웹서비스를 개발 중
2. 기능 구현은 완료하였으나 페이지 로딩 시간이 너무 길고 중간에 중단할 경우 불상사가 발생함.
3. ajax의 get을 이용하여 외부api->DB 를 작동시켜주는 웹페이지를 불러오도록 다시 제작함.
4. 3번의 작업이 완료되면 사용자가 보고 있는 페이지에 표시해줌.
이때 궁금한게 ajax에서 get을 했을때의 처리 주체 입니다.
혹시나 싶어서
반복문을 만들고 1초에 1~100까지의 숫자를 DB에 집어넣는 문서를 만들었습니다.
해당 페이지를 웹브라우저에서 직접 호출하니 1 부터 차례대로 하나씩 입력을 하더군요.
근데 웹페이지를 종료시켰음에도 해당 작업은 계속해서 이루어졌습니다.(!?왜지?!)
혹시나 싶어서 $.get으로 해당 페이지를 로딩시킨 후 웹 브라우저를 종료하였으나 마찬가지로 DB에는 계속해서 데이터가 입력되었습니다.
좋다~~~ 라고 생각하고 있었으나 걱정거리가 생겼습니다.
외부 api가 불안정하여 만약 데이터를 제대로 제공해주지 못할 경우 다시 요청하도록 설계를하고 있는데...
문제는 이 외부 api가 계속 죽어 있으면 그동안에 재요청 작업이 무한히 일어날 것이고 사용자가 많다면 그 사용자수 만큼 요청이 쇄도할 것 같습니다.
왜 브라우저를 종료했음에도 계속해서 작업이 이루어지는걸까요?
만약 그렇다면 무한루프에 빠졌을때 해당 작업은 언제까지 반복되는 걸까요?
관련 설정을 아파치에서 해주는 거겠죠? 음... 뭘까요 -_-;;;
만약 이런 경우라면 어떻게 설계해야하고 코딩해야하는지 ... 그 방향조차 모르겠습니다. ㅜㅜ
전체적인 프로그램 흐름도
1-1. 사용자 요청 -> 내부 DB에 해당 데이터 존재여부 체크 -> 존재할 경우 표시해줌
1-2. 사용자 요청 -> 내부 DB에 해당 데이터 존재여부 체크 -> 존재하지 않을 경우 외부 api에 요청하여 데이터를 받아옮
1-2-1. 받아온 데이터를 DB에 저장함.
1-2-2. DB에 저장한 내용을 사용자에게 표시해줌.
현재 외부 api를 받아오는 과정 - 사용 언어 PHP CURL
1. 외부 api 요청
2. 받아온 데이터 검사
2-1. curl_errno 로 에러 번호가 존재하는지 체크
2-2. curl_getinfo 로 http_code가 200인지 체크
2-3. curl_exec로 받은 데이터에서 문제가 있는지 체크
3. 데이터 검사 결과
3-1. 에러 검출 시 1번부터 다시 시작
3-2. 검사 통과시 curl_exec로 받은 데이터를 리턴.
질문 요약
1. 외부 api를 가져와서 DB에 입력하거나 사용자에게 보여줘야함.
2. 외부 api가 신뢰할 수 없음. 만약 요청에 실패할 경우 재요청하도록 만드는 중
3. 그런데 외부 api가 계속 죽어 있다면 재요청을 무한히 하게 될텐데 어떻게 해야할지?
4. 혹은 이러한 문제가 발생할 수 있으니 외부 api를 받아오는 절차 자체를 다시 설계해야하는 것인지...
5. ajax를 이용하여 데이터를 로딩하는 페이지를 따로 만드는 행위 자체가 매우 위험한 행위인지...
6. 방향 혹은 힌트만이라도 주시면... 굽신굽신...