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

3티어 구축을 위한 REST 서버를 쉽고 간단하게 구현 방법 (WebBroker) Part 4


Recommended Posts

REST 서버 구축 Part1 보러가기

REST 서버 구축 Part2 보러가기

REST 서버 구축 Part3 보러가기

프로젝트 서버에서 클라이언트 앱의 요청 URL 과 파라미터를 읽어오는 과정을 Part3 에서 알아 보았고

이번에는 앱으로 부터 읽어온 파라미터를 사용 하여 데이터베이스 테이블의 내용을 표출 하는 방법에 대해 설명 합니다.

먼저 같은 방법으로 Action 에서 EndPoint를 추가 합니다. /querytb 라고 임으로 URL 명칭을 지정 합니다.

image.png

 

WebModule1 컨테이너에 TFDConnenction 과 TFDQuery를 추가 하여 데이터베이스에 연결 할 수 있게 합니다.

TFDConnenction 과 TFDQuery를 사용하는 방법은 일반적인 방법과 다르지 않습니다.

image.png

 

Action 이벤트에 메소드를 추가하여 데이터베이스에 연결하여 쿼리한 결과를 Json 으로 출력 합니다.

앱의 요청 파라미터에서 테이블명을 받아 와서 해당 테이블의 전체 내용을 select 하는 예시 입니다.

테이블의 레코드수가 가변적이므로 Json 배열로 표현 할 수 있습니다.

단일 항목의 경우에는  JTopObj.AddPair( 'Count', TJSONNumber.Create( FDQuery1.RecordCount ) ); 형태로 표현하고

가변적인 배열값은   JTopObj.AddPair( JPair ); 로 나타냅니다.

샘플소스에서는 배열항목명을  Items 라 지정 하였는데 Json Object 명칭들은 클라이언트 앱에서 확인 할 수 있도록 사전에 규약으로 정의 되어 있는 명칭을 사용 하면 됩니다. (클라이언트 앱에서 Json  데이터를 불러 오는 방법은 이 후 Part 에서 다룰 예정 입니다.)

쿼리가 모두 완료 되었으면  Response.Content := JTopObj.ToString; 형태로 Json Object 의 결과 값을 String 으로 변환 하여 Response.Content 에 전달 하면 됩니다.

// http://127.0.0.1:8080/querytb?tname=productinfo
procedure TWebModule1.WebModule1WebActionItem2Action(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
  JTopObj, JsubObj : TJSONObject;        // Uses System.JSON,
  JArr  : TJSONArray;
  JPair : TJSONPair;
  tname : string;
  i  : integer;
begin
  tname  := Request.ContentFields.Values['tname'];

  JTopObj := TJSONObject.Create;  // 메인 블럭 정의
  try
    FDConnection1.Open;

    try
      FDQuery1.Close;
      FDQuery1.SQL.Clear;
      FDQuery1.SQL.Add( 'select * from ' + tname + ' '  );
      FDQuery1.Open;
      FDQuery1.First;

      JArr :=  TJSONArray.Create;
      while Not FDQuery1.EOF do
      begin
        JsubObj := TJSONObject.Create;

        for i := 0 to FDQuery1.FieldCount - 1 do
           JsubObj.AddPair( FDQuery1.Fields[ i ].FullName,  FDQuery1.Fields[ i ].AsString );  // 조회 결과값의 필드명과 데이터를 같이 출력 하는 방법

        JArr.AddElement( JsubObj );
        FDQuery1.Next;
      end;

      JPair := TJSONPair.Create( 'Items', JArr );

      JTopObj.AddPair( 'PathInfo', '/querytb' );
      JTopObj.AddPair( 'TableName', tname );        // 테이블명 별도 추가 됨.
      JTopObj.AddPair( 'Count', TJSONNumber.Create( FDQuery1.RecordCount ) );
      JTopObj.AddPair( JPair );
    except
      on e: Exception do begin
            Form1.LogMemo.Lines.Add( e.Message );  // 에러 로그 출력
      end;
    end;

  finally
    FDConnection1.Close;

    Response.StatusCode := 200;
    Response.Content := JTopObj.ToString;

    JTopObj.Free;
  end;
end;

 

부가적으로 발생한 에러메시지를 쉽게 확인 하기 위해서 FormUnit1 Form 에 Memo 를 추가 하였습니다.

image.png

 

프로젝트 서버를 실행 한 후 브라우저에서 URL로 데이터를 요청 합니다.

>> http://127.0.0.1:8080/querytb?tname=productinfo   

tname 파라미터 데이터에 테이블 명을 지정 합니다.  예시에서는 productinfo  라는 테이블명을 조회 합니다.

tname  := Request.ContentFields.Values['tname'];   //  tname에 테이블명을 할당

FDQuery1.SQL.Add( 'select * from ' + tname + ' '  );  // 해당 테이블 쿼리

결과값을 브라우저에서 확인 할 수 있습니다.

image.png

 

아래 링크와 같은 크롬 확장 앱을 설치 하면 Json 데이터를 브라우저에서 보기 쉽게 표현 할 수 있습니다.

https://chromewebstore.google.com/detail/json-viewer/gbmdgpbipfallnflgajpaliibnhdgobh

 

Json Viewer 크롬앱을 설치한 후  Json 데이터 보기 화면.

image.png

 

Part1 ~Part4 까지의 내용으로 델파이 에서 REST 서버를 웹브로커 방식으로 구현 하는 방법을 설명하였습니다.

이렇게 만들어진 서버는 웹브라우저나 클라이언트 앱으로 서버에서 데이터를 받아 올 수 있으므로 클라이언트 앱의 플랫폼이나 앱의 종류에 상관 없이 모두 서비스가 가능 합니다.

따라서 클라이언트 플랫폼과 무관하게 독립적은 서버를 구축 할 수 있으므로 보통 많이 사용 하는 JAVA, NodeJS  등을 사용 하지 않고도 델파이 만으로도 서버 프로젝트 개발이 가능 합니다. (C++빌더도 같은 방법으로 구축 가능).

 

프로젝트 소스 다운로드 링크 (데이터베이스 서버 연결은 사용하는 DB 계정으로 연결 하여 실행)

WBServer.zip

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

  • c2design changed the title to 3티어 구축을 위한 REST 서버를 쉽고 간단하게 구현 방법 (WebBroker) Part 4

이 토의에 참여하세요

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

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

중요한 정보

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