[디자인(설계)] 팩토리 메소드 패턴과 Class 타입을 활용 객체 생성 시 참조 관계 제거

2017.04.25 16:30

데브맥스 프레임워크를 개발하고 있습니다. 데브맥스에서 사용하는 기술을 틈틈히 정리 및 공유하려 합니다.

(데브맥스 프레임워크에 대한 소개는 다음에 진행하겠습니다.)


이번 글에서는 팩토리 메소드 패턴(부모 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴)과 클래스 타입을 활용해, 여러가지 객체 생성 시 참조 관계를 제거하는 방법을 소개합니다.


배경

1) 메인UI에서 여러가지 서브UI를 동적으로 생성하고 싶다.

2) 메인UI 소스에서 서버UI 소스 참조시 서브UI가 많아질 수록 메인UI 소스가 복잡해 진다.


과제

메인UI에서 서브UI Id로 서브UI 객체를 생성할 수 있어야 한다.

메인UI 소스에서 서브UI 소스를 직접 참조하지 않아야 한다.

서브UI가 늘어나도 메인UI 소스는 변경되지 않아야 한다.


방안

팩토리 메소드 패턴 활용

Class 타입을 이용해 확장성 제공


구현

아키텍처

위 그림과 같이 서브UI들은 ClassTypeFactory에 등록하고, 메인UI는 ClassTypeFactory를 참조해 객체를 생성하는 구조이다.


클래스 타입 지정

  TViewItemClass = class of TControl;
  TViewItemClassInfo = record
    Id: string;
    ViewItemClass: TViewItemClass;

    constructor Create(AId: string; AItemClass: TViewItemClass);
  end;
서브UI(TViewItem)의 클래스 타입(TViewItemClass)을 지정한다.
클래스의 종류는 현재 TControl로 정의 되어 있지만 폼(TForm), 여러분들이 만든 객체(또는 컴포넌트)  등으로 정의해 사용할 수 있다.
클래스 정보 구조체를 선언한다.

Factory 클래스

type
  TViewItemClass = class of TControl;
  TViewItemClassInfo = record
    Id: string;
    ViewItemClass: TViewItemClass;

    constructor Create(AId: string; AItemClass: TViewItemClass);
  end;

  TViewItemFactory = class
  private
    class var FInstance: TViewItemFactory;
  private
    FViewItems: TDictionary;
    function GetList: TArray;
  public
    constructor Create;
    destructor Destroy; override;

    procedure Regist(AId: string; AItemClass: TViewItemClass);
    function GetClass(AId: string): TViewItemClass;
    function CreateControl(AId: string): TControl;

    property List: TArray read GetList;

    class function Instance: TViewItemFactory;
    class procedure ReleaseInstance;
  end;

{ TViewItemFactory }

class function TViewItemFactory.Instance: TViewItemFactory;
begin
  if not Assigned(FInstance) then
    FInstance := Create;
  Result := FInstance;
end;

class procedure TViewItemFactory.ReleaseInstance;
begin
  if Assigned(FInstance) then
    FInstance.Free;
end;

constructor TViewItemFactory.Create;
begin
  FViewItems := TDictionary.Create;
end;

function TViewItemFactory.CreateControl(AId: string): TControl;
var
  ItemClass: TViewItemClass;
begin
  ItemClass := GetClass(AId);
  if not Assigned(ItemClass) then
    Exit(nil);
  Result := ItemClass.Create(nil);
end;

destructor TViewItemFactory.Destroy;
begin
  FViewItems.Free;

  inherited;
end;

function TViewItemFactory.GetClass(AId: string): TViewItemClass;
var
  Info: TViewItemClassInfo;
begin
  Result := nil;
  if FViewItems.TryGetValue(AId, Info) then
    Result := Info.ViewItemClass;
end;

function TViewItemFactory.GetList: TArray;
begin
  Result := FViewItems.Values.ToArray;
end;

procedure TViewItemFactory.Regist(AId: string; AItemClass: TViewItemClass);
begin
  FViewItems.Add(AId, TViewItemClassInfo.Create(AId, AItemClass));
end;

initialization
finalization
  TViewItemFactory.ReleaseInstance;

Factory 클래스가 싱글톤 패턴이 적용되어 약간 복잡하다

주요 메소드는 클래스 타입을 등록하는 Regist 메소드와 클래스 타입을 제공하는 GetClass 메소드이다.


서브UI에서 클래스 등록

type
  TFrame1 = class(TFrame)
    Label1: TLabel;
    Circle1: TCircle;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

implementation

uses
  ClassTypeFactoryType;

{$R *.fmx}

initialization
  TViewItemFactory.Instance.Regist('프레임1', TFrame1);

서브UI에서는 ClassTypeFactory(TViewItemFactory)에 id('프레임1')와 클래스 타입(TFrame1)을 등록한다.


메인UI에서 서브UI 생성

uses
  ClassTypeFactoryType;

{$R *.fmx}

procedure TForm1.Button1Click(Sender: TObject);
var
  Info: TViewItemClassInfo;
  Item: TListBoxItem;
begin
  for Info in TViewItemFactory.Instance.List do
  begin
    Item := TListBoxItem.Create(ListBox1);
    Item.Parent := ListBox1;
    Item.Text := Info.Id;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  Id: string;
  ItemClass: TViewItemClass;
begin
  if Assigned(FActiveControl) then
    FActiveControl.Free;

  Id := ListBox1.Selected.Text;
  ItemClass := TViewItemFactory.Instance.GetClass(Id);
  FActiveControl := ItemClass.Create(Self);
  FActiveControl.Parent := Layout1;
  FActiveControl.Align := TAlignLayout.Client;
end;

메인UI에서는 ClassTypeFactory에 등록된 서브UI를 참조할 수 있다.

메인UI는 Id 값으로 서브UI 클래스(TViewItemClass)를 가져와 동적으로 생성할 수 있다.

메인UI 소스에서는 서브UI 소스를 참조하지 않는다.(결합도를 낮출 수 있다.)


샘플코드

다운로드 :  01_ClassTypeFactory.zip

활용 : https://github.com/devgear/DevMax/blob/master/View/DevMax.View.Factory.pas



PS

짧은 시간을 할애해 정보를 자주 올리기 위해 두서없이 글을 작성했습니다. 혹시 이해되지 않는 내용이 있으면 댓글로 질문주시면 앞으로 보강하도록 하겠습니다.

저작자 표시 비영리 동일 조건 변경 허락
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

험프리.김현수 험프리.김현수 Team Thoth/DevMax

[환경설정] 아마존 EC2 이용해 리눅스 서버 환경 구축하기

2017.04.20 12:02

이 글에서는 아마존 EC2 기반으로 리눅스 서버 환경을 구축하는 내용을 안내합니다.

RAD 스튜디오 10.2 도쿄 버전부터 리눅스 개발을 지원합니다. WebBroker, 데이테스냅, EMS 서버, 소켓 서버 용 테스트 및 서비스에 사용할 수 있습니다.


아마존 EC2

아마존 EC2란?

아마존 EC2는 클라우드 기반으로 서버 인프라를 제공합니다. 웹 페이지를 이용해 필요한 플랫폼과 용량을 선택해 서버 인스턴스를 실행하고 접속해 테스트 및 서비스 할 수 있습니 - 아마존 EC2 자세히보기


아마존 EC2를 사용하는 이유

AWS 프리 티어를 이용해 12개월 동안 무료로 체험할 수 있습니다. - AWS 프리 티어 자세히보기



이 글에서 다루는 내용은 아래와 같습니다.

  • Ubuntu Server 16.04 LTS 인스턴스 생성
  • 보안설정(필요한 포트번호 오픈)
  • 터미널로 연결
  • 리눅스 개발환경 설정

준비

AWS 가입(게정생성)

EC2를 사용하기 위해서는 AWS 계정이 필요합니다.

이미 많은 글들에서 가입 절차를 소개하고 있으니 아래 링크를 참조해 가입하시기 바랍니다.

(참고로 가입 시 마스터 또는 비자 카드가 필요합니다.)

인스턴스 생성

리눅스 서버 인스턴스를 추가하는 과정을 설명합니다.


아마존 웹서비스 로그인


EC2 서비스 선택

  • 필터에 ec2 입력 후 선택


인스턴스 목록 표시

  • 왼쪽 메뉴 중 Instances 항목 선택


가까운 지역 선택

  • 상단 우측의 지역을 누르고, 가까운 지역 선택
    (저는 Asia Pacific(Seoul)을 선택했습니다.)


새로운 인스턴스 추가

  • [Launch Instance] 버튼 클릭


인스턴스 이미지 선택

  • 적합한 항목의 [Select] 버튼 클릭
    (저는 "Ubuntu Server 16.04 LTS (HVM), SSD Volume Type"(64 - bit)를 선택 했습니다.)



인스턴스 유형 선택

  • 적합한 인스턴스 유형 선택
  • [Review and Launch] 버튼 클릭


내용 확인

  • 내용 확인 후 [Launch] 버튼 클릭
  • 주의 문구는 무시합니다.(보안설정은 뒤에서 다시 진행합니다.)


Key Pair 생성 및 다운로드

중요: 해당 키페어 파일(*.pem)은 터미널 접속 시 개인키(*.ppk) 생성에 사용합니다. 해당 파일을 분실하지 않도록 주의하시기 바랍니다.
  • "Create a new key pair" 항목 선택
  • Key pair name 입력
  • [Download key Pair] 버튼 클릭 해 다운로드(*.pem 파일이 다운로드 됩니다.)


보안설정

애플리케이션 서버에서 사용할 포트번호를 Inbound 규칙에 추가하는 절차를 설명합니다.

인스턴스의 Security Group 확인

  • 인스턴스 목록 항목 중 가장 오른쪽 항목에서 Security Group을 확인합니다.
    (저는 launch-wizard-2 입니다.)

 Security Groups 메뉴 선택

  • 왼쪽 메뉴에서 Network & Security > Security Groups 메뉴 클릭


Security Group 선택

  • 인스턴스에 설정된 Security Group을 선택합니다.
    (저는 launch-wizard-2을 선택)



Inbound 탭에서 Inbound 규칙 수정

  • 아래 탭 중 Inbound 탭 선택
  • [Edit] 버튼 클릭


Inbound 규칙 편집

  • [Add Rule] 버튼 클릭
  • 필요한 규칙을 추가합니다.

    • EMS 서버, 데이터스냅 HTTP, WebBroker의 경우 "Custom TCP Rule / TCP / 8080" 규칙 추가

    • PAServer(Platform Assistance Server: 원격 디버깅 및 SDK 취득) 포트번호 "64211" 규칙 추가
    • 데이터스냅 TCP/IP의 경우 "Custom TCP Rule / TCP / 211" 규칙 추가
    • 리눅스 상에서 FTP 서비스 이용 시 "1024 - 1048", "20 - 22")" 규칙 추가
    • 기타 서버에서 사용할 포트번호를 추가합니다.
  • [Save] 버튼을 눌러 저장


터미널로 연결

리눅스 서버 인스턴스에 터미널을 이용해 연결하는 절차를 안내합니다.

다음 내용은 아마존 웹서비스 도움말을 참고해 작성되었습니다.

인스턴스 선택 후 연결(연결 방법 확인)

  • 인스턴스 목록에서 인스턴스 선택
  • [Connect] 버튼 클릭
  • Connect To Your Instance 팝업창 표시


접속 주소(Public DNS) 확인

  • 4번 단계의 접속 주소(Public DNS) 확인


접속에 필요한 소프트웨어 설치

리눅스에 터미널에 접속할 SSH Client와 파일 전송을 위한 SCP(Secure Copy) 프로그램을 아래 링크에서 다운로드 후  설치합니다.


개인 키 변환

PuTTY는 위에서 다운로드 받은 키페어 파일(*.pem)을 지원하지 않습니다. PuTTYgen을 통해 PuTTY에서 지원하는 개인 키(*.ppk)로 변환합니다.

  • PuTTYgen을 시작합니다.(시작 > 모든 프로그램 > PuTTY > PuTTYgen 선택)
  • Type of key to generate 에서 RSA를 선택
  • [Load] 버튼을 눌러 키페어파일을 선택(파일 필터를 All Files로 변경 후 선택)
  • [Save private key] 버튼을 누르고 개인 키(*.ppk)를 저장합니다.


터미널 접속

PuTTY를 이용해 리눅스 서버 터미널로 접속합니다.

  • PuTTY를 시작합니다.(시작 > 모든 프로그램 > PuTTY > PuTTY 선택)
  • Host Name에 "ubuntu@{접속주소}"를 입력합니다.
    • 기본 계정명은 "ubuntu" 입니다.
    • 포트 번호는 22 입력
    • 연결 타입은 "SSH" 선택
  • [Category] 탭에서 Connection > SSH > Auth 메뉴를 선택합니다.
  • private key file for authentication 항목에서 [Browse...] 버튼을 눌러 개인 키(*.ppk)를 선택합니다.
  • [Open] 버튼을 눌러 접속을 시도합니다.
    (최초 1회 신뢰할 수 있는지 묻는 보안 알림 대화상자가 표시되면 [Yes]를 선택 합니다.)


파일 전송을 위한 SCP 연결

WinSCP를 이용해 SCP 연결해 파일을 전송할 수 있는 환경을 확인합니다.

  • WinSCP를 실행합니다.
  • 로그인 창에서 접속 정보를 입력합니다.
    • 호스트 이름에 (접속주소)를 입력합니다.
    • 사용자 이름에 "ubuntu"를 입력합니다.
  • [고급] 버튼을 눌러 개인 키를 설정합니다.
    • 개인 키 파일 항목에서 [...] 버튼을 눌러 개인 키 파일을 선택합니다.
    • [확인] 버튼을 눌러 적용합니다.
  • 로그인 화면에서 [저장] 버튼을 누르고 세션 이름을 지정해 저장합니다.
  • [로그인] 버튼을 눌러 접속합니다.

리눅스 개발환경 설정

RAD 스튜디오에서 리눅스 애플리케이션 개발하기 위한 환경을 설정합니다.


자세한 내용은 다음 링크를 통해 설명합니다.


관련링크



저작자 표시 비영리 동일 조건 변경 허락
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

험프리.김현수 험프리.김현수 Delphi/C++Builder AWS, 델파이, 리눅스

델파이 앱에서 움직이는 GIF 표현하기(소스 포함)

2017.04.20 10:20

한 중국인 델파이 개발자 블로그(武稀松(wr960204)的博客)에서 움직이는 GIF를 파이어몽키에서 사용할 수 있는 소스코드가 공개되어 공유합니다.



위 GIF는 샘플 프로젝트로 돌려본 화면입니다. 

첫번째 버튼은 GIF 파일 로드, 두번째 버튼으로 시작/종료 입니다. 세번째, 네번째는 느리게 빠르게 동작하는 버튼입니다.


이 소스코드는 윈도우32, 윈도우64, 안드로이드 그리고 리눅스까지 지원합니다.

더 자세한 내용(중국어)과 소스코드 다운로드는 아래 링크를 참고하세요.


저작자 표시 비영리 동일 조건 변경 허락
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

험프리.김현수 험프리.김현수 파이어몽키

[환경설정] 아마존 EC2 이용해 윈도우 서버 환경 구축하기

2017.04.06 12:42

이 글에서는 아마존 EC2 기반으로 윈도우 서버 환경을 구축하는 내용을 안내합니다.

데이터 스냅 서버, EMS 서버, WebBroker 서버, 소켓 서버 용 테스트 및 서비스에 사용할 수 있습니다.


아마존 EC2

아마존 EC2란?

아마존 EC2는 클라우드 기반으로 서버 인프라를 제공합니다. 웹 페이지를 이용해 필요한 플랫폼과 용량을 선택해 서버 인스턴스를 실행하고 접속해 테스트 및 서비스 할 수 있습니 - 아마존 EC2 자세히보기


아마존 EC2를 사용하는 이유

AWS 프리 티어를 이용해 12개월 동안 무료로 체험할 수 있습니다. - AWS 프리 티어 자세히보기



이 글에서 다루는 내용은 아래와 같습니다.

  • Windows 2012 R2 인스턴스 생성
  • 보안설정(서버에서 사용하는 포트번호 오픈)
  • 원격 데스크탑으로 연결

준비

AWS 가입(게정생성)

EC2를 사용하기 위해서는 AWS 계정이 필요합니다.

이미 많은 글들에서 가입 절차를 소개하고 있으니 아래 링크를 참조해 가입하시기 바랍니다.

(참고로 가입 시 마스터 또는 비자 카드가 필요합니다.)

인스턴스 생성

윈도우즈 서버 인스턴스를 추가하는 과정을 설명합니다.


아마존 웹서비스 로그인


EC2 서비스 선택

  • 필터에 ec2 입력 후 선택


인스턴스 목록 표시

  • 왼쪽 메뉴 중 Instances 항목 선택


가까운 지역 선택

  • 상단 우측의 지역을 누르고, 가까운 지역 선택
    (저는 Asia Pacific(Seoul)을 선택했습니다.)


새로운 인스턴스 추가

  • [Launch Instance] 버튼 클릭


인스턴스 이미지 선택

  • 적합한 항목의 [Select] 버튼 클릭
    (저는 "Microsoft Windows Server 2012 Base"(64 - bit)를 선택 했습니다.)


인스턴스 유형 선택

  • 적합한 인스턴스 유형 선택
  • [Review and Launch] 버튼 클릭


내용 확인

  • 내용 확인 후 [Launch] 버튼 클릭
  • 주의 문구는 무시합니다.(보안설정은 뒤에서 다시 진행합니다.)


Key Pair 생성 및 다운로드

중요: 인스턴스(서버) 접속 시 비밀번호 인증에 사용할 키파일을 로컬 저장소에 저장합니다. 해당 파일을 분실하지 않도록 주의하시기 바랍니다.
  • "Create a new key pair" 항목 선택
  • Key pair name 입력
  • [Download key Pair] 버튼 클릭 해 다운로드


보안설정

애플리케이션 서버에서 사용할 포트번호를 Inbound 규칙에 추가하는 절차를 설명합니다.

인스턴스의 Security Group 확인

  • 인스턴스 목록 항목 중 가장 오른쪽 항목에서 Security Group을 확인합니다.
    (저는 launch-wizard-1 입니다.)


 Security Groups 메뉴 선택

  • 왼쪽 메뉴에서 Network & Security > Security Groups 메뉴 클릭
  • 인스턴스의 Security Groups 항목을 확인합니다.


Security Group 선택

  • 인스턴스에 설정된 Security Group을 선택합니다.
    (저는 launch-wizard-1을 선택)


Inbound 탭에서 Inbound 규칙 수정

  • 아래 탭 중 Inbound 탭 선택
  • [Edit] 버튼 클릭


Inbound 규칙 편집

  • [Add Rule] 버튼 클릭
  • 필요한 규칙을 추가합니다.

    • 데이터스냅 TCP/IP의 경우 "Custom TCP Rule / TCP / 211" 규칙 추가

    • EMS 서버, 데이터스냅 HTTP, WebBroker의 경우 "Custom TCP Rule / TCP / 8080" 규칙 추가

    • 기타 서버에서 사용하는 포트번호를 추가합니다.

원격 데스크탑 연결

윈도우즈 서버 인스턴스에 원격 데스크탑 연결하는 절차를 설명합니다.

인스턴스 선택 후 연결

  • 인스턴스 목록에서 인스턴스 선택

  • [Connect] 버튼 클릭

  • Connect To Your Instnace 팝업창 표시


비밀번호 가져오기

  • [Get Password] 버튼 클릭


Key pair 파일 선택

  • 인스턴스 생성 시 다운로드 받은 Key Pair 파일을 로컬 저장소에서 선택
  • [Decrypt Password] 버튼 클릭


접속 정보 확인

  • 화면에 표시된 접속 정보 확인


원격 데스크톱 연결

  • 원격 데스크톱 연결 실행
  • 컴퓨터 항목에 Public DNS 항목 입력(복사 > 붙여넣기)


사용자 자격 증명 입력

  • User name, Password 입력
  • [확인] 버튼 클릭


서버 접속 확인


윈도우즈 방화벽 규칙 추가

관련링크



저작자 표시 비영리 동일 조건 변경 허락
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

험프리.김현수 험프리.김현수 Delphi/C++Builder

[RAD서버] EMS 서버 운영환경에 설치하기(독립형 실행파일)

2017.04.06 09:46

이 글에서는 독립형 실행파일(Stand alone) 방식 EMS 서버를 운영환경(윈도우즈 서버)에 설치하는 내용을 설명합니다.

EMS 서버

EMS 서버란?

EMS 서버는 HTTP 기반 REST API를 제공하는 웹서버입니다.


REST API란?


더보기


델파이 클라이언트 뿐 아니라 대부분의 클라이언트 프로그램은 REST API를 통해 EMS 서버에 접속 해 필요한 데이터(리소스)를 조회하거나 추가, 수정, 삭제 할 수 있습니다.


EMS 서버는 자주 사용하는 리소스(사용자 정보, 사용자 그룹 정보, 설치정보, 모바일 원격 푸시 등)가 내장되어 있습니다.(일명 턴키 방식 미들웨어라 칭합니다.)

추가로 필요한 업무 로직 등의 리소스는 개발자가 직접 EMS Package를 작성할 수 있습니다. EMS Package는 EMS 서버에 등록해 지속적으로 기능을 추가 확장할 수 있습니다.


EMS 서버 설치 방식

운영환경에 EMS 서버를 운영환경에 설치하는 방식은 3가지 입니다.

1, 독립형 실행파일(Stand alone) 방식으로 설치

2, ISAPI(인터넷 정보 서비스: IIS) 기반으로 설치

3, 아파치 서버 기반으로 설치


이 글에서 독립형 실행파일 방식으로 설치하는 내용을 설명합니다.

ISAPI 또는 아파치 서버 기반으로 설치하는 내용은 엠바카데로 기술문서를 통해 참고하시기 바랍니다.

이 글은 델파이 10.2 도쿄 기준으로 작성되었습니다. 다른 버전의 델파이 또는 C++빌더의 경우 버전 번호(10.2 도쿄: 19.0)가 다를 수 있습니다.


다음 순서로 진행합니다.

  • 윈도우즈 서버 준비하기
  • 인터베이스 데이터베이스 설치
  • 필요한 파일을 개발환경에서 운영환경으로 복사
  • 환경 설정
  • 직접 개발한 EMS 패키지 추가하기
  • 실행 및 테스트


윈도우즈 서버 준비하기

이 글에서는 EMS 서버를 윈도우즈 서버에 설치하는 내용을 설명합니다.
참고로, EMS 서버는 윈도우 서버와 리눅스 서버(RAD 스튜디오 10.2 도쿄 부터)를 지원합니다.

윈도우즈 서버 준비

사내 또는 IDC에 구성된 윈도우즈 서버를 준비합니다. 원격 데스크톱 연결과 파일 복사, 외부에서 연결(포트: 8080)이 가능해야 합니다.

만약, 윈도우즈 서버가 준비되지 않았다면, 다음 글을 통해 아마존 웹서비스를 이용해 테스트 용 윈도우즈 서버 환경을 먼저 구성할 수 있습니다.

윈도우즈 서버 접속

원격 데스크톱을 이용해 윈도우즈 서버에 접속합니다.
(저는 아마존 EC2를 이용 Windows 2012 R2 64bit / 영문 서버로 접속합니다.)

인터베이스 데이터베이스 설치

EMS 서버는 내부 데이터 관리를 인터베이스 데이터베이스를 이용합니다.


RAD 서버용 인터베이스 다운로드 및 설치

RAD 서버 배포용 InterBase XE7을 다음 링크에서 다운로드 후 설치파일을 이용해 설치합니다.

라이선스 입력 단계에서 RAD 서버 라이선스를 입력합니다.


InterBase XE7 for RAD Server deployment : https://cc.embarcadero.com/item/30669


필요한 파일을 개발환경에서 운영환경으로 복사

EMS 실행파일과 환경파일, DB파일을 개발 PC에서 원격서버로 복사하는 과정을 설명합니다.

EMS 서버 폴더 지정 및 하위 폴더 생성

원격 서버에서 EMS 서버를 설치할 경로를 지정합니다.(저는 C:\EMSServer로 지정했습니다. 원하는 경로로 지정해도 됩니다.)

하위 디렉토리 3개를 아래와 같이 생성합니다.

  • EMSDevServer : EMS Development Server 실행파일과 필요한 바이너리 파일을 복사할 경로
  • EMSPackages : EMS Package를 배포할 경로
  • EnvFile : 환경파일(ini)과 EMS DB 파일을 복사할 경로

EMS 실행파일과 필요한 라이브러리(*.bpl) 복사

개발 PC에서 탐색기를 열고, RAD 스튜디오 설치 경로 하위 bin 디렉토로리로 이동합니다.
(10.2 도쿄 기준 기본 경로: C:\Program Files (x86)\Embarcadero\Studio\19.0\bin)


원격 서버에서 탐색기를 열고 EMS 서버 디렉토리 하위 \EMSDevServer 디렉토리로 이동합니다.

개발 PC에서 원격서버로 아래 그림의 목록을 참고해 파일들을 복사합니다.
(10.2 도쿄 버전 기준으로 bpl 파일들의 번호가 다를 수 있으니 주의하시기 바랍니다.)

  • 소스(개발PC) : C:\Program Files (x86)\Embarcadero\Studio\19.0\bin
  • 대상(원격서버) : C:\EMSServer\EMSDevServer


파일 복사가 잘 됐는지 확인하기 위해 EMSDevServer를 실행합니다.

만약, 아래와 같은 오류가 표시된다면 오류에서 설명하는 bpl 파일을 개발PC에서 원격 서버로 복사합니다.

위 메시지가 표시되지 않는다면 EMSDevServer를 종료합니다.


EMS 환경파일, DB파일 복사

개발 PC에서 탐색기를 열고, EMS 환경파일 경로(C:\Users\Public\Documents\Embarcadero\EMS)로 이동합니다.


원격서버에서 탐색기를 열고, 환경파일 경로(C:\EMSServer\EnvFile)로 이동합니다.

개발 PC의 환경파일(emsserver.ini) 파일과 EMS DB파일(EMSSERVER.IB)을 원격서버로 복사합니다.

환경 설정

환경파일과 DB파일 경로를 설정하는 과정을 설명합니다.

환경파일 경로 지정

원격 서버에서 레지스트리 편집기를 실행합니다.

HKEY_CURRENT_USER\Software\Embarcadero\EMS 경로로 이동(만약 경로가 없으면 키 생성 후 이동)합니다.

문자열 값을 추가합니다.(오른쪽 마우스 클릭 > New > String Value)

Value name을 "ConfigFile", Value data에 emsserver.ini 파일 경로(C:\EMSServer\EnvFile\emsserver.ini)을 입력하고 [OK] 버튼을 클릭합니다.


DB파일 경로 지정

원격 서버에서 탐색기를 열고, EMS 서버 환경파일 경로(C:\EMSServer\EnvFile)로 이동합니다.

EMS 서버 환경파일(emsserver.ini)을 메모장으로 엽니다.

[Data] 섹션의 Database 값을 EMS DB파일 경로(C:\EMSServer\EnvFile\emsserver.ib)로 변경합니다.


직접 개발한 EMS 패키지 추가하기

RAD 스튜디오 개발한 EMS Package를 EMS 서버에 추가하는 과정을 설명합니다.

원격 서버에 EMS 패키지 복사

원격서버에서 탐색기를 열고, EMS Package를 배포할 경로(C:\emsserver\Packages)로 이동합니다.
직접 개발한 패키지 파일을 개발PC에서 해당 경로로 복사합니다.


EMS 환경파일에 패키지 추가

EMS 환경파일을 열고, [Server.Packages] 섹션으로 이동합니다.

아래 그림과 같이 패키지 경로와 패키지 이름을 입력합니다.

  • 형식 : 패키지 경로(bpl 파일 포함)=패키지 이름

실행과 테스트

EMS 서버 실행

원격서버에서 탐색기를 열고, EMS 서버 실행파일 경로 이동후 EMSDevServer를 실행합니다.

로그 창에 환경파일 경로, 배포한 EMS 패키지 등록 여부를 확인합니다.

테스트

개발 PC에서 웹브라우저 실행 후 http://(서버 IP):(EMS 포트번호)/version을 입력합니다.
저는 "http://13.124.73.214:8080/version"으로 테스트 합니다.

직접 작성한 패키지 리소스도 확인합니다.


만약, 연결이 되지 않는다면, 서버의 IP 확인하고 윈도우 방화벽에 EMS 서버의 포트번호(기본 8080)가 Inbound 규칙으로 추가되었는지 확인하고 다시 시도 하시기 바랍니다.


참고링크



저작자 표시 비영리 동일 조건 변경 허락
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

험프리.김현수 험프리.김현수 Delphi/C++Builder