API로 받은 데이터, DB업데이트 시 중복체크(1회만 적용) 가능 및 실패체크

API로 받은 데이터, DB업데이트 시 중복체크(1회만 적용) 가능 및 실패체크

QA

API로 받은 데이터, DB업데이트 시 중복체크(1회만 적용) 가능 및 실패체크

본문

API로 받은 데이터, DB업데이트 시 중복체크(1회만 적용) 가능 및 실패체크

 

1. 보내온 데이터가 이미 있는지 확인(이슈번호로 구별) 

2, 있으면 종료 exit; 없으면 업데이트(insert DB)

3. 업데이트 시 받은 데이터에서 DB에서 데이터를 가공하여서 insertDB를 할 예정인데 한번 가공 후 다시 가공은 안하도록 하고, 향후 출금이 되었을 때, 

** 문의 1번: 보내온 데이터가 실패 했는지 여부를 체크 하려면 어떤 룰케이스를 적용해 둬야할까요? 
(테스트 상에는 하나하나씩은 문제가 없는데 실제로 여러 건들이 많이 빠르게 또는 일시적으로 몰렸을 때 데이터를 받지 못할 것 대비)

** 문의 2번: 종료하는 방법에 아무것도 안쓰면 되는 것인지 아니면 exit; 를 넣어야 하는지 결과는 같은 것 같은데 어떤 부분이 좋은가요? 

 

경험있는 고수님들의 생각을 여쭙습니다. 

현재는 위 기능 구현없이 외부 데이터를 다음과 같이 받아서 업데이트(insert)를 하고 있습니다. 

 


include_once('../common.php');
// 컨텐츠 타입이 JSON 인지 확인한다
/*if(!in_array('application/json',explode(';',$_SERVER['CONTENT_TYPE']))){
    echo json_encode(array('result_code' => '400'));
    exit;
    }
*/
if(!in_array('application/x-www-form-urlencoded',explode(';',$_SERVER['CONTENT_TYPE']))){
    echo json_encode(array('result_code' => '400'));
    exit;
    }
    $arr = $_POST ? $_POST : $_GET;
    foreach($arr as $key => $value) {
        ${$key} = $value;
    }   
    $data = json_decode(stripslashes($_POST['response']), true);

이 질문에 댓글 쓰기 :

답변 3

1. 데이터가 실패를 했는지 여부를 체크하려면 db상에 Y,N을 기입하는 필드를 넣으시고

데이터가 정상이면 Y, 실패면 N을 넣으시고 상단에서 체크하시면 되지않을까요?

 

2. 해당 페이지는 api를 받는 페이지 인거 같은데

api를 보내주는 쪽에서 보내기만하고, 결과를 따로 요청하지 않았다면

exit;를 하셔도, 안하셔도 무방합니다.

저는 보통 exit로 해당 페이지의 하단을 종료시킵니다.

 

그리고 코드상에 post인지 get인지 구분하는 부분이있는데

굳이 그렇게 하지않으시고


foreach($_REQUEST as $key => $value) {
        ${$key} = $value;
}

형태로 간단하게 처리하셔도됩니다.

 

api를보니 광원 가상계좌 api를 사용하시는듯한데,

궁금하신것 도와드릴테니 쪽지로 연락처남겨주세요.

감사합니다. 네 초보라 여기서 많이 배우고 있습니다.

1. 데이터가 잘 못 된 부분은 결과 값을 보내게 되어 있는데, 아예 누락 되어 있는 지를 체크를 할 수 있는 지가 고민이었습니다.
2. 결과 값을 보내도록 되어 있습니다. 기본적으로 성공했는지 실패했는지 보내주고 실패 시 10회까지 재전송 하도록 요청합니다. 결과 값을 보내고 나서 exit;를 쓰는 방향으로 해서 구현해보겠습니다.

** 추가적으로 궁금한 점이 생겼는데, 위에서 데이터를 받고 나서 그럼 각 데이터를 가공해서 추가적인 업데이트를 할 계획입니다.(더하기 빼기 곱하기 등등)
 이 때 새로운 데이터 테이블에 넣어야 하는지 아니면 기존 테이블에서 그냥 가공해서 필드를 추가해서 넣는 것이 좋은지 궁금합니다.(기존의 질문에 기존 테이블을 이용하면 된다고 해서 그냥 두었는데 이 데이터를 가지고 가공이 좀 많이 될 것 같아서 같은 테이블이 외부에서 SQL insert도 많이 될 것인데 업데이트랑 계속 사용이 되면 문제가 되지 않을까요?)

 기존 구현은 매 껀껀마다 잠시는 임시테이블을 만들었다가 결과 값만 member테이블에 업데이트 해줬는데, 향후 수많은 데이터를 주고 받을 때 문제가 되지 않을까 추측합니다.

말씀 주신 내용 참고해서 전체 코드를 한번 구현해보고 문제가 있을 시 추가적으로 도움을 요청해봐야겠습니다.

감사합니다.

데이터를 받는것은 모두 테이블에 기록해야합니다.

금액이 관련되있다보니 로그가 핵심입니다.

그리고 디비 속도는 하드웨어의 영향도 많이 받으니

추후 부화가되면 고사양 서버를 사용하는게 좋습니다.

보통 member테이블에는 회원정보만 넣어서 쓰도록하고

다른 테이블을 사용해서 금액을 연동해야합니다.

같은 api로 구현을 많이 해봣으니 필요하면 말씀하세요

https://19park.tistory.com/173

트랜잭션에 대해서 공부를 좀 하셔야 합니다.

답변이 매우 늦었지만 감사합니다. 어떠한 부분이 부족한지 궁금했는데 말씀 주셔서 확인할 수 있었습니다. 이 부분에 대하여서 기존에 그 명확하지 않으면서 사용했던 부분인데, 롤백부분에 대한 고민이 여기에 있었습니다. 감사합니다. 관련 한 부분에 대하여서 직접 공부하여 해결하겠습니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 15
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT