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

[온라인 세미나-What's NEW! RAD스튜디오11] 세션 2-1. 데이터 서비스를 HTTP 기반의 REST 표준 API로 서비스 하기 (RAD 서버 활용)


Recommended Posts

온라인 세미나-WHAT’S NEW! RAD스튜디오 11 중 세션 2-1의 다시보기, 자료, 따라하기입니다.

데이터 서비스를 HTTP 기반 REST 표준 API로 서비스하기 "다시보기"

데이터 서비스를 HTTP 기반 REST 표준 API로 서비스하기 "자료"

기타

 

데이터 서비스를 HTTP 기반 REST 표준 API로 서비스 작성 "따라하기"

데이터베이스 데이터를 REST API로 서비스하는 과정을 따라하며 기능을 익히고, 여러분의 데이터를 REST API로 서비스하도록 적용해 보세요.

다음 내용을 집중적으로 보시기 바랍니다.

  • TEMSDataSetResource 컴포넌트(몇가지 속성 설정만으로): 데이터베이스 데이터를 REST API로 서비스하는 리소스 추가
    image.png
  • 커스텀 엔드포인트 작성: 이미지 제공과 같은 로직이 포함된 엔드포인트

목차(따라하기 순서)

 

1. 준비하기

RAD 서버 환경설정(최초 사용 시)

이 따라하기는 RAD 서버를 이용해 REST API를 제공합니다. RAD 서버를 처음 사용하는 경우 "RAD 서버 개발환경 설정하기(준비 중)"를 참고해 설정합니다.

샘플 데이터 파일 다운로드

이 따라하기는 인터베이스 용 "Fish facts(어류도감) 데이터"를 샘플 데이터로 사용합니다. 다음 링크에서 [Download] 버튼을 눌러 적절한 경로에 다운로드 합니다.

https://github.com/devgear/FishFactsRSX/blob/main/Data/BIOLIFE.IB

 

image.png

2. RAD 서버 패키지 프로젝트 생성하기

  1. IDE를 열고, File > New > Other 메뉴 클릭
  2. Delphi > RAD Server > RAD Server Package 선택 > [OK] 버튼 클릭
    image.png
     
  3. 리소스를 포함한 패키지 생성
    "Create package with resource" 선택 > [Next >>] 버튼 클릭
     
  4. 리소스 이름 입력 및 파일 타입을 데이터 모듈로 선택(논비주얼 컴포넌트 사용에 필요)
    Resource name "fishfacts" 입력 > File type "Data Module" 선택 > [Next >>] 버튼 클릭
     
  5. 샘플 엔드포인트에서 이미지 제공에 사용할 GetItem만 선택
    GetItem만 선택 > [Finish] 버튼 클릭
    image.png
    • Sample Endpoints: 프로젝트 생성 시 선택한 커스텀 엔드포인트 메소드 코드 자동 생성
    • Database Endpoints: 사전 정의된 데이터베이스 연결의 테이블을 선택 해 데이터를 제공하는 리소스 자동 생성
      (이 따라하기에서는 이 과정을 수작업으로 진행)
    • API Documentation: 코드를 이용해 Swagger API 문서 제공
       
  6. 프로젝트 생성 완료
  7. (선택사항) 프로젝트 저장
    • 프로젝트 파일: FishfactsPackage.dproj
    • 유닛 파일: BiolifeResource.pas
    • (다른이름(및 형식)의 파일명으로 저장해도 문제 없음)

3. 데이터베이스 연결하기

"1, 사전 준비하기" 단계에서 다운로드 받은 인터베이스 데이터베이스와 연결합니다.

참고> 이 따라하기에서는 인터베이스 데이터베이스와 연결하지만, 다른 DBMS와 연결해도 됩니다.

참고> 이 따라하기에서는 FireDAC을 이용해 데이터베이스와 연결하지만, 다른 데이터 엑세스 컴포넌트를 사용해도 됩니다.

  1. 데이터베이스 연결
    1. TFDConnection 컴포넌트를 데이터 모듈에 추가
    2. 추가된 TFDConnection 컴포넌트를 더블클릭해 "FireDAC Connection Editor" 표시
       
    3. 데이터 연결 속성 설정
      image.png
      • Driver ID: IB 선택
      • Database: 다운로드 받은 "BIOLIFE.IB" 파일 선택
      • User_Name: sysdba 입력
      • Password: masterkey 입력
      • [Test] 버튼 클릭해 연결 확인
      • [OK]버튼 클릭
    4. Object Inspector에서 TFDConnection의 LoginPrompt 속성을 "False"로 변경
  2. 쿼리 설정
    1. TFDQuery 컴포넌트를 데이터 모듈에 추가
    2. 추가된 TFDQuery 컴포넌트를 더블클릭해 "FireDAC Query Editor" 표시
       
    3. SQL 조회 문구 입력
      SELECT * FROM BIOLIFE
    4. [Execute] 버튼 클릭 후 데이터 확인
    5. [OK] 버튼 클릭

 

4. 데이터를 REST API 리소스로 제공하도록 설정하기

앞에서 추가한 데이터셋의 데이터를 HTTP 기반 REST API로 제공하도록 설정하고, 이미지 제공을 위한 커스텀 엔드포인트를 설정합니다.

데이터 제공 용 TEMSDataSetResource 컴포넌트 설정

TEMSDataSetResource 컴포넌트(10.3 리오에서 추가)를 이용해 리소스를 추가합니다.

TEMSDataSetResource 컴포넌트는 DataSet 속성에 설정된 데이터셋의 데이터를 REST API로 제공합니다.
리소스에 HTTP 메소드(Get, Post, Put, Delete) 요청 시 데이터 제공(조회) 및 처리(등록, 수정, 삭제)를 자동화 해줍니다.

  1. TEMSDataSetResource 컴포넌트를 데이터 모듈에 추가
  2. (Object Inspector에서)AllowAcctions 속성 모두 선택
    image.png
    • List: 데이터셋 목록 제공
    • Get: 특정 항목 제공
    • Post: 신규 항목 생성
    • Put: 특정 항목 수정
    • Delete: 특정 항목 제거
       
  3. 데이터셋 설정
    DataSet 속성에 앞에서 추가한 TFDQuery 컴포넌트 선택
     
  4. 키필드 설정
    • KeyFIelds 속성 더블클릭
    • SPECIES_NO 선택 후 [>] 버튼을 클릭해 "Included fields:"로 이동
    • [OK] 버튼 클릭
       
  5. API로 제공할 필드 선택
    • ValueFIelds 속성 더블클릭
    • 용량이 큰 GRAPHIC(Blob Field) 제외한 모든 항목을 "Included fields:"로 이동
      image.png
    • [OK] 버튼 클릭
       
  6. 리소스 이름 지정
    • 코드 에디터로 변경(F12)
    • TEMSDataSetResource 선언부 위에 리소스 이름 특성 추가
          [ResourceName('biolifes')]
          EMSDataSetResource1: TEMSDataSetResource;

이미지 제공 커스텀 엔드포인트 추가

이미지 제공 등 큰 용량의 데이터 제공은 별도의 엔드포인트로 제공해야 합니다.

샘플 엔드포인트로 생성한 GetItem에 Blob 필드에 저장된 이미지를 제공하도록 구현합니다.

  1. 그래픽 조회 용 쿼리 컴포넌트 추가
    1. TFDQuery 컴포넌트를 데이터 모듈에 추가(FDQuery2)
    2. 추가된 TFDQuery 컴포넌트를 더블클릭해 "FireDAC Query Editor" 표시
       
    3. SQL 조회 문구 입력
      SELECT GRAPHIC FROM BIOLIFE WHERE SPECIES_NO = :ITEM
    4. [OK] 버튼 추가
       
  2. 커스텀 엔드포인트 수정
    1. GetItem 선언부 위에 리소스 접미사 변경
          [ResourceSuffix('bio/lifes/{item}/photo/')]
          procedure GetItem(const AContext: TEndpointContext; const ARequest: TEndpointRequest; const AResponse: TEndpointResponse);
    2. 엔드포인트 호출 시 이미지 제공하도록 구현부 변경

      procedure TFishfactsResource1.GetItem(const AContext: TEndpointContext; const ARequest: TEndpointRequest; const AResponse: TEndpointResponse);
      var
        item: string;
        Stream: TMemoryStream;
      begin
        item := ARequest.Params.Values['item'];
        Stream := TMemoryStream.Create;
        try
          FDQuery2.Close;
          FDQuery2.ParamByName('item').AsString := item;
          FDQuery2.Open;
      
          if FDQuery2.RecordCount = 0 then
            AResponse.RaiseNotFound('Not found', '''' + item + ''' is not found');
      
          TBlobField(FDQuery2.FieldByName('GRAPHIC')).SaveToStream(Stream);
      
          if Stream.Size = 0 then
            AResponse.RaiseNotFound('Not found', '''' + item + ''' is not found');
      
          Stream.Position := 0;
          AResponse.Body.SetStream(Stream, 'image/jpeg', True);
        except
          Stream.Free;
          raise;
        end;
      end;

       

5. RAD 서버 실행 및 결과 확인

RAD 서버 실행

RAD 서버는 패키지를 개발해 RAD 서버 엔진을 이용해 패키지를 로드하는 방식입니다.
(개발한 프로젝트의 확장자는 *.bpl(Boload Package Library))

개발 시점에는 RAD Development Server를 실행해 결과 확인과 테스트를 진행합니다.
운영서버에서는 "Microsoft IIS" 및 "Apache Server" 엔진을 이용하는 것이 좋습니다.(운영환경에서 RAD 서버 엔진 설치(영문) 참조)

  1. 프로젝트 실행(F9)
  2. (최초 1회) 필요 패키지 추가
    아래와 같은 대화상자 표시된 경우 [OK] 버튼 클릭
    image.png
    • FireDAC에서 사용하는 패키지 추가
       
  3. RAD Development Server 실행 및 로그 확인
    image.png
    • 빨간색 로그
      {"Thread":1812,"Loading":{"Filename":"C:\Users\Public\Documents\Embarcadero\Studio\22.0\Bpl\FishfactsPackage.bpl"}}
      • 우리가 생성한 RAD 서버 패키지가 로드 된 것을 확인
         
    • 주황색 로그
      {"Thread":1812,"RegResource":{"name":"fishfacts","endpoints":[
        {"name":"GetItem","method":"Get","path":"fishfacts/bio/lifes/{item}/photo/"},
        {"name":"biolifes.List","method":"Get","path":"fishfacts/biolifes/","produce":"application/json, *;q=0.9"},
        {"name":"biolifes.Get","method":"Get","path":"fishfacts/biolifes/{id}","produce":"application/json, *;q=0.9"},
        {"name":"biolifes.Put","method":"Put","path":"fishfacts/biolifes/{id}","consume":"application/json, *;q=0.9"},
        {"name":"biolifes.Post","method":"Post","path":"fishfacts/biolifes/","consume":"application/json, *;q=0.9"},
        {"name":"biolifes.Delete","method":"Delete","path":"fishfacts/biolifes/{id}"}
      ]}}
      • GetItem: 이미지 제공을 위한 커스텀 엔드포인트 제공한 것을 확인
      • biolifes.{Actions}: TEMSDataSetResource에서 제공하는 액션 제공한 것을 확인
         

웹브라우저에서 결과확인

  1. 웹브라우저에서 List 액션 결과 확인
    1. 웹브라우저 실행 후 주소에 다음 URL 입력 후 실행
      http://localhost:8080/fishfacts/biolifes/
       
    2. 결과 확인(FireFox에서 확인 결과)
      image.png
       
  2. 웹브라우저에서 이미지 제공 결과 확인
    1. 웹브라우저 실행 후 주소에 다음 URL 입력 후 실행
      http://localhost:8080/fishfacts/biolifes/90020/photo/

       
    2. 결과 확인(FireFox에서 확인 결과)
      image.png

 

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

  • 김나래 changed the title to [온라인 세미나-What's NEW! RAD스튜디오11] 세션 2-1. 데이터 서비스를 HTTP 기반의 REST 표준 API로 서비스 하기 (RAD 서버 활용)

Q&A

  • "세션 2. RAD서버를 이용해 “빠르게” 표준 REST API 구축하기 데모" 관련 Q&A들을 정리했습니다.
  • 세미나 중 나왔던 더 많은 질문과 답변은 세션 5. Live Q&A with 한국 엠바카데로 MVP!를 클릭해 확인할 수 있습니다.

 

Q.RAD 서버 라이트 배포 방법을 설명해 주세요.

A.아직 RAD 서버 라이트 관련 기술자료가 배포되지 않았습니다. 향후 자료 등록 시 포럼 기고 및 이메일로 안내하겠습니다.

 

Q. RAD 서버에서 요청 시 인증 관련 오류가 발생합니다.

A. RAD 서버 엔진 인증을 사용한 것으로 보입니다. RAD 서버는 사용자 관리, 인증 등의 기본 기능들이 내장되어 있습니다.

RAD 서버의 사용자 로그인 후 토큰을 받아, 요청 시 토큰을 HTTP 해더에 포함해 전송하도록 구현이 필요합니다.

마침, 다음 질문/답변에 해당 내용이 포함되있으니 참고하시기 바랍니다: 

 

 

 

 

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

이 토의에 참여하세요

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

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...

중요한 정보

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