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

2티어에서 3티어 전환시 코드변환 작업을 획기적으로 줄일 수 있는 방법.


Recommended Posts

참고:

아키텍처를 일반적인 2 티어(클라이언트-DB서버)에서 멀티-티어(클라이언트-미들웨어...-DB서버)로 변경하는 것은, 중간 계층을 통해 보다 유연하고 확장성 있는 구조를 갖추는 작업입니다. 이때, 각 티어별로 각자 고유한 역할을 담당하도록 해야 합니다 (예: 클라이언트 계층은 사용자와의 상호작용을 담당하고 비즈니스 로직은 미들웨어로 떼어 넘기기). 하지만, 마이그레이션 프로젝트에서는 일정 상 목표하는 틀 구성을 먼저 완료하고, 그 후에 단계적으로 내부 구현을 옮겨 가는 경우도 있습니다. 또는 (대체로 아키텍처를 엄격하게 통제하고 뒷문을 아예 만들지 않는 것이 좋지만) 상황에 따라 뒷문이 필요할 수도 있습니다.

아래 글은, 그런 경우에 사용할 수 있도록, 클라이언트를 위한 다목적 뒷문을 미들웨어에서 열어 주는 방식을 설명합니다. 따라서 장점도 있고 단점도 있습니다. 그 장단점을 논하기 보다는 이 방식을 알아 두었다가 "상황에 맞게" 활용하기 바랍니다. 늘 그렇지만, 개발자의 "경험"은, 공유될 때, 다른 개발자에게 큰 도움이 됩니다. 

 

2티어로 되어 있는 프로젝트를 3티어로 변환시에는 2티어 앱에서 사용하던 sql 쿼리문을 3티어의 미들웨어 서버쪽으로 옮기는 작업을 하게 되는 경우가 많다 보니 작업량도 많아지고 서버의 프로젝트도 방대해 지게 된다.

이럴때 2티어 프로젝트에서 사용하는 쿼리문을 서버쪽으로 옮기지 않고 sql 문 자체를 String 파라미터로 전송하는 방법이 있다.

이럴경우 미들웨어 서버에서는 sql String을 받아서 처리 한 후 결과를 Client 앱에서 볼 수 있게 해주면 되는데

sql 쿼리문에 따라 데이터베이스에서 조회한 컬럼명이나 sql 쿼리문에서 as 로 치환한 필드명이 모두 다르기 때문에 아래과 같이 필드명도 같이 출력해 주면 된다.

       for i := 0 to FDQueryI.FieldCount - 1 do
           JsubObj.AddPair( FDQueryI.Fields[ i ].FullName,  FDQueryI.Fields[ i ].AsString );

 

데이터베이스에 자체적으로 조회한 결과값의 필드명을 알 수 있는 경우도 있으나 FireDAC 에서는 샘플 소스와 같은 방식으로 조회결과값의 필드명을 알 수 있으므로 활용 하면 된다.

샘플소스는 결과를 Json 으로 출력하므로 Rad 서버나 Datasnap Rest 방식을 활용 하면 된다.

function TRTestResource1.QueryText_sql( sqlText : string ) : String;
var
  JTopObj, JsubObj : TJSONObject;
  JArr  : TJSONArray;
  JPair : TJSONPair;
  i : integer;

begin
  JTopObj := TJSONObject.Create;  

  try
    FDConnection1.Open;

    try
      FDQueryI.Close;
      FDQueryI.SQL.Clear;
      FDQueryI.SQL.Add( sqlText );

      FDQueryI.Open;
      FDQueryI.First;

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

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

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

      JPair := TJSONPair.Create( 'Items', JArr );                           
      JTopObj.AddPair( 'Count', TJSONNumber.Create( FDQueryI.RecordCount ) );  
      JTopObj.AddPair( JPair );                                                

    except
      on e: Exception do begin
            result := 'Error';
            Exit;
      end;
    end;


  finally
      FDConnection1.Close;

      result := JTopObj.ToString;   // 결과값 전달.
      JTopObj.Free;
  end;
end;

 

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

  • c2design changed the title to 2티어에서 3티어 전환시 코드변환 작업을 획기적으로 줄일 수 있는 방법.
  • 2주 후...

이 토의에 참여하세요

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

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

중요한 정보

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