Jump to content
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr ×
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr

RESTful 서버 API를 통해 데이터를 업데이트할 때 TRESTRequestDataSetAdapter를 사용하기


Recommended Posts

엠바카데로 블로그에 Stephen Ball이 쓴 "Using TRESTRequestDataSetAdapter to update data via a RESTful Server API"를 번역한 글 (원문 작성일: 2022년 4월 205일, 번역일: 2022년 5월 6일)

spacer.png

 

TRESTRequestDataSetAdapter는 TDataSet에 있는 데이터를 읽어서 JSON으로 변환하여 원격에 있는 RESTful API로 보낼 수 있는 컴포넌트이며, RAD 스튜디오 11에 새로 추가되었다. 지금부터 REST URL/API가 어떻게 작동하는 지를 정리해보고 나서 이 컴포넌트 사용법을 이야기하고자 한다.

 

REST API와 기본 동사 (REST APIs and VERBS)

 

REST API는 전형적으로 엔드포인트(endpoint)로 전달하는 요청(request)의 유형을 정의하는 여러가지 HTML 동사 (POST, GET, PUT, PATCH, DELETE)를 사용하려고 할 때 만드는 것이 전형적이다.

예를 들어, 데이터베이스를 사용하여 작업 목록을 저장해두고 완료 여부를 관리한다고 가정해보자. 그러면 “https://<내 URL>/data/tasks/”와 같이 주소가 기반이 되는 Base API URL이 엔드포인트(endpoint)가 된다. 그리고, 이 엔드포인트를 기준으로 (데이터를 담아오기, 추가하기, 변경하기, 삭제하기 등을) 수행할 동작의 유형을 정의하여 호출한다. 실제 상황에서는 ID가 되는 값이 필요한 경우가 있다. 그래야 당신이 다루고 싶은 데이터를 콕 찝을 수 있다 (예를 들면, 수정 / 삭제하려는 레코드가 무엇인가?), 따라서 현실적으로, 이 엔드포인트 URL에는 특정 작업을 수행할 수 있도록 ID 값을 받도록 하는 경우가 있다. 예를 들면, “/data/tasks/{id}”와 같은 형식이다.

데이터를 서버로 다시 보내려고 할 때, TRESTRequestDataSetAdapter를 사용하려면 수행할 동작 유형에 맞는 올바른 동사(verb)를 사용하는 것이 중요하다. 또한 서버에 해당 엔드포인트가 올바르게 정리되어 있는 지 확인하는 것 역시 중요하다.

(위에서 본 것과 같이) URL 지정을 표준 방식으로 구성하고, 여기에 더하여 TRESTRequestDataSetAdapter를 사용한다면, JSON 패킷을 서버로 보내도록 구현할 때 코드 작업을 거의 하지 않아도 된다.

이 동작을 자동화하려면 TDataSet에 있는 이벤트를 사용한다.  AfterInsert, AfterPost, BeforeDelete 와 같은 이벤트에서 데이터셋 안에서 발생한 변경을 감지하여 원격 호출을 수행하면 해당 서버와 동기화할 수 있다.

하지만!… 연결(connection)에 문제가 있으면 동기화는 어떻게 될까?

 

네이티브 개발의 장점을 활용하여 REST 애플리케이션 기능을 더 풍부하게 하기
(Benefiting from Native Development to make REST applications more feature rich)

FireDAC (과 TClientDataSet과 같은 기타 데이터셋)에 들어있는 유용한 기능 하나로 CachedUpdate 옵션을 꼽을 수 있다. CachedUpdates를 사용하면 데이터셋 내부의 변경을 추적하고 보존할 수 있다.  그 결과 변경은 캐시될(cached) 될 수 있고, 로컬에 저장될 수 있어서, 이후 원하는 시점에 원격으로 보낼 수 있다. (무제한 연결이 안되는 환경이라면 훌륭한 해법이다).

네이티브 라이브러리에 있는 이 멋진 능력을 TRESTRequestDataSetAdapter와 함께 사용하면, 로컬에 변경 사항을 저장해 두었다가 원할 때 서버로 다시 보내는 것이 가능하다. 아무래도 조금 더 복잡해질 수는 있다. 특히 삽입(insert), 변경(update), 삭제(delete) 동작을 같은 캐시(cache) 안에서 처리하려면 (원격 서버에 전달하는 동사(verb)가 다르기 때문에) 더 그럴 수 있다. 이때는, 데이터 캐시를 처리할 각 유형에 따라 필터링하는 기능이 도움이 된다.

GitHub에는 구현 방식을 볼 수 있는 예제가 있다. 여기에는 REST.RESTUpdater 유닛이 있는데, 그 안에는 코드 몇줄 만으로 데이터를 이송(transport)하고 전달(post)할 수 있도록 도와주는 헬퍼 클래스들이 들어 있다! - 이 예제에 대한 보다 자세한 설명은 이 글을 참조 

 

이 댓글 링크
다른 사이트에 공유하기

이 토의에 참여하세요

지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.

Guest
이 토픽(기고/질문)에 답하기

×   서식있는 텍스트로 붙여넣기.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   이전에 작성한 콘텐츠가 복원되었습니다..   편집창 비우기

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

중요한 정보

이용약관 개인정보보호정책 이용규칙 이 사이트가 더 잘 작동하기 위해 방문자의 컴퓨터에 쿠키가 배치됩니다. 쿠키 설정 변경에서 원하는 설정을 할 수 있습니다. 변경하지 않으면 쿠키를 허용하는 것으로 이해합니다.