새로운 글
새로운 덧글

이 글에서는 델파이를 이용해 리눅스 서버에서 구동되는 아파치 모듈을 웹브로커 기술을 이용해 만드는 방법을 소개합니다.

(이 글에서는 리눅스 서버 설정과 MySQL 설정 등에 대해서는 자세히 다루지 않습니다.)

 

델파이로 리눅스 기반 웹서비스 제작하기(WebBroker 이용)

 

RAD 스튜디오 10.2 도쿄버전에서 리눅스 개발을 지원합니다. 이제 델파이로 리눅스 서버용 프로그램을 개발 및 배포, 디버깅 할 수 있습니다. 

이 글은 RAD 스튜디오 10.2 도쿄 버전 기준으로 작성되었습니다.

 

이 글에서 아래의 내용을 진행합니다.

 - 콘솔 기반 WebBroker 프로젝트 제작 및 리눅스에서 실행

 - 아파치 모듈 기반 WebBroker 프로젝트 제작 및 리눅스에 배포, 테스트

 - 리눅스의 MySQL(FireDAC 이용) 데이터 연동해 JSON 데이터 응답하기

 

다음 순서로 진행합니다.

 - 개발준비

 - 콘솔 기반 WebBroker 프로젝트 만들기

 - 콘솔 애플리케이션 리눅스에서 실행

 - 아파치 모듈 기반 WebBroker 프로젝트 만들기

 - 아파치 모듈 리눅스에 배포

 - MySQL 연결(FireDAC 이용)

개발 준비

리눅스가 설치된 별도의 컴퓨터 또는 가상머신을 준비합니다.

개발환경 설정은 다음 링크를 통해서 진행할 수 있습니다.

 - 델파이/C++빌더 리눅스 개발환경 설정하기

 

콘솔 기반 WebBroker 프로젝트 만들기

WebBroker 프로젝트 생성(Stand-alone console application)

델파이 실행 후 File > New > Other 메뉴를 선택합니다.

 

Delphi Projects > WebBroker 메뉴 선택 후 Web Server Application 항목 선택 후 [OK] 버튼을 클릭합니다.

 

 

마법사 창에서 Linux 플랫폼을 추가로 선택 후 [Next >>] 버튼을 클릭합니다.

 

프로젝트 타입으로 Stand-alone console application 항목을 선택합니다.

 - Apache dynamic link module : 아파치 모듈을 만들어 아파치 웹서버를 이용해 구동합니다.

 - Stand-alone console application : 독립형 콘솔 어플리케이션을 제작합니다.

 

독립형 콘솔 애플리케이션이 사용할 HTTP 포트번호를 입력 후 [Finish] 버튼을 누릅니다.

포트번호는 소스코드 상에서 변경 가능합니다.

 

생성한 프로젝트를 저장합니다.(Ctrl + Shift + S) 프로젝트 명은 LinuxSAConsole로 지정합니다.(이름을 다르게 지정해도 됩니다.)

 

윈도우에서 실행

테스트를 위해 윈도우에서 실행하면 아래와 같이 콘솔모드로 실행됩니다."start" 키워드 입력해 서버를 시작할 수 있습니다.

 

웹브라우저에서 "http://localhost:8080" 주소를 열면 아래와 같이 WebModuleUnit1에 정의된 응답데이터가 표시됩니다.

 

(콘솔 프로그램을 종료하고) 구동 시 서버가 자동으로 시작되도록 프로젝트 파일(LinuxSAConsole)의 RunServer 함수에 아래 그림을 참고해 "StartServer(LServer);"를 추가합니다.

 

리눅스에서 실행(콘솔 기반 WebBroker 프로젝트)

PAServer 실행

리눅스 터미널에서 PAServer가 설치된 경로로 이동 후 PAServer를 실행합니다.

 

연결에 사용할 비밀번호 입력 후 엔터, "i" 명령어로 PAServer의 IP주소를 확인합니다.

 

타겟 플랫폼을 리눅스로 지정

델파이 IDE의 프로젝트 매니저에서 Target Platforms을 "64-bit Linux" 항목을 선택합니다.

만약, "64-bit Linux" 항목이 없다면, Target Platforms 항목의 팝업메뉴에서 "Add Platform..." 메뉴를 선택 후 "64-bit Linux"를 추가합니다. 

(64-bit Linux 플랫폼은 RAD 스튜디오 10.2 도쿄 이후 버전,  엔터프라이즈 에디션 이상에서 사용할 수 있습니다.)

 

PAServer 연결

PAServer 연결 설정하기 위해 "64-bit Linux" 항목의 팝업 메뉴에서 "Edit Connection..." 메뉴를 선택합니다.

 

 

리눅스에서 실행한 PAServer 연결설정을 선택(또는 추가 후 선택) 후 [OK] 버튼을 누릅니다.

 

리눅스에서 실행

프로젝트를 실행(Run, F9)합니다.

 

웹브라우저에서 리눅스 서버 IP와 8080포트로 웹페이지를 열면 아래와 같이 표시됩니다.

 

프로젝트 파일 저장 경로 하위 "\Linux64\Debug\" 경로에 리눅스 실행파일이 생성됩니다.

 

PAServer를 통해 리눅스에도 실행파일이 배포됩니다.

홈디렉토리 하위 "/PAServer/scratch-dir/(PAServer 연결문자)/(프로젝트명)" 하위에 LinuxSAConsole 파일이 복사됩니다. 리눅스에서 콘솔 프로그램을 직접 실행할 수 있습니다.

 

아파치 모듈 기반 WebBroker 프로젝트 만들기

WebBroker 프로젝트 생성(Apache dynamic link module)

WebBroker 프로젝트를 생성(File > New > Other > Delphi > WebBroker > Web Server Application)하고, "Apache dynamic link module" 프로젝트 타입을 선택합니다.

 

Apache module을 수정하고 [Finish] 버튼을 누릅니다.

 - Apache module(아파치 모듈 이름)은 뒤에서 설명하는 "apache2 모듈 활성화에 등록" 시 사용합니다.

 

생성한 프로젝트를 저장합니다.(Ctrl + Shift + S)

 

WebBroker 프로젝트 빌드

WebModule 유닛에 필요한 기능을 구현합니다.

 

리눅스 타겟으로 빌드합니다.

 

 

아래와 같이 프로젝트 저장 경로 하위 ".\Linux64\Debug\" 디렉토리에 so 확장자의 아파치 모듈이 생성됩니다.

 

리눅스에 배포(아파치 모듈 기반 WebBroker 프로젝트)

아파치 모듈 리눅스로 복사

위에서 생성한 아파치 모듈(libmod_webbroker.so)을 리눅스로 복사합니다.(USB 메모리, FTP 클라이언트 프로그램 등을 이용합니다.) 

저는 제 작업디렉토리(/home/humphrey/WorkData/)에 복사했습니다.

 

 

아파치 모듈 디렉토리로 복사

아파치 모듈 디렉토리(/usr/lib/apache2/modules)로 아파치 모듈을 복사합니다.

su : root 권한을 가져옵니다.(/usr/lib 하위 경로에 복사하기 위해 root 권한이 필요합니다.)

cp : 파일을 복사합니다.

cd : 디렉토리를 변경합니다.

ls : 현재 디렉토리의 파일목록을 표시합니다.

 

apache2 모듈 활성화에 등록

/etc/apache2/mods-enabled/ 디렉토리로 이동 합니다.

nano 에디터를 이용(vi 등 다른 에디터를 이용해도 됩니다.) libmod_webbroker.load 파일을 편집(생성) 합니다.(root 권한 필요)

nano libmod_webbroker.load

 

nano 에디터에서 아래와 같이 입력하고 저장(Ctrl + X > Y > 엔터)합니다.(root 권한 필요)

LoadModule (아파치 모듈 이름) (아파치 모듈 파일경로) 

LoadModule webbroker_module /usr/lib/apache2/modules/libmod_webbroker.so

 

아파치를 다시 시작합니다.(root 권한 필요)

/etc/init.d/apache2 restart

 

apache2 사이트 활성화에 등록

/etc/apache2/sites-enabled/ 디렉토리로 이동합니다.

nano 에디터를 이용해 000-default.conf 파일을 편집합니다.(root 권한 필요)

nano 000-default.conf

 

 

DocumentRoot 아래에 아래 코드를 입력합니다.

 

<Location /webbroker>

  SetHandler libmod_webbroker-handler

</Location>

 

현재서버의 /webbroker 경로로 웹서버 호출 시 libmod_webbroker.load 로드하도록 설정

저장하고 빠져나옵니다.(Ctrl + X > Y > 엔터)

 

배포가 완료되었습니다. 리눅스 서버의 아이피(또는 도메인)과 webbroker 경로를 웹브라우저에서 입력해 열면 아래와 같은 결과를 볼 수 있습니다.

MySQL 연결(FireDAC 이용)

리눅스에 설치된 MySQL의 데이터를 JSON 포맷으로 출력합니다. 위에서 만든 WebBroker 아파치 모듈에 기능을 추가합니다. 데이터 엑세스 컴포넌트는 FireDAC을 이용합니다.

 

MySQL 준비

리눅스 서버에 설치된 MySQL과 연결하기 위해 리눅스 서버에 MySQL이 설치되어 있어야 합니다.

 - 우분투 MySQL 설치하기 - http://moomini.tistory.com/66

 

델파이가 설치된 원격환경에서 MySQL과 연결하기 위해 MySQL 외부 접속을 허용합니다.

 - MySQL 외부접속 허용 - http://idchowto.com/?p=11068

 

스키마와 계정, 테이블을 생성합니다. 스키마 명과 계정명, 비밀번호는 모두 'test'로 합니다.

스키마 생성

create schema test;

 

계정 생성

create user 'test'@'%' identified by 'test';

 

테이블 생성

CREATE TABLE USER(

  USER_ID int, 

  NAME VARCHAR(255) character set utf8, 

  ADDRESS VARCHAR(255) character set utf8, 

  CITY VARCHAR(255) character set utf8);

 

테스트 데이터 입력

INSERT INTO USER VALUES(1, '김현수', '내가 사는 우리집', '인천');

INSERT INTO USER VALUES(2, '홍길동', '네가 사는 너희집', '강릉');

 

FireDAC 컴포넌트를 이용해 MySQL과 연결

FireDAC을 이용해 리눅스 서버의 MySQL과 연결합니다.

 

DB 연결 컴포넌트 추가

WebModuleUnit1을 열고, TFDConnection, TFDQuery 컴포넌트를 추가합니다.

 

데이터베이스 연결 설정

TFDConnection 컴포넌트의 연결설정 화면을 열고(컴포넌트 더블클릭) 아래와 같이 입력합니다.

 - Driver ID : MySQL

 - Database : test

 - User_Name : test

 - Password : test

 - Server : 리눅스 서버의 IP 주소(또는 도메인)

 - CharacterSet : UTF8(한글을 표현하기 위해)

 

[Test] 버튼을 눌러 연결을 확인합니다.(만약 연결되지 않는 경우 서버 IP주소 또는 MySQL 외부연결 설정을 확인합니다.)

LoginPrompt 속성을 False로 변경합니다.

 

쿼리 설정

쿼리 컴포넌트(TFDQuery)의 Query Editor를 열고(컴포넌트 더블클릭) 쿼리문을 작성합니다.

 

SELECT * FROM USER 

[Execute] 버튼을 눌러 결과를 확인합니다. 

[OK] 버튼을 눌러 적용합니다.

 

테이블 내용을 JSON 포맷으로 데이터 작성

JSON 데이터 작성은 TJsonObjectWriter 클래스를 활용합니다.(System.JSON.Writers 유닛 필요)

 

아래 코드를 참조해 private 영역에 QueryUser 메소드를 작성합니다.

QueryUser 메소드는 쿼리 결과를 JSON 포맷으로 작성 후 JSON 문자열로 반환하는 역할을 합니다.

uses

  System.JSON, System.JSON.Writers;

 

function TWebModule1.QueryUser: string;

var

  Writer: TJsonObjectWriter;

begin

  Writer := TJsonObjectWriter.Create;

  try

    Writer.WriteStartObject; // start resource

    Writer.WritePropertyName('users');

    Writer.WriteStartArray;

 

    FDQuery1.Open;

    FDQuery1.First;

    while not FDQuery1.Eof do

    begin

      Writer.WriteStartObject;

 

      Writer.WritePropertyName('USER_ID');

      Writer.WriteValue(FDQuery1.FieldByName('USER_ID').AsString);

 

      Writer.WritePropertyName('NAME');

      Writer.WriteValue(FDQuery1.FieldByName('NAME').AsString);

 

      Writer.WritePropertyName('ADDRESS');

      Writer.WriteValue(FDQuery1.FieldByName('ADDRESS').AsString);

 

      Writer.WritePropertyName('CITY');

      Writer.WriteValue(FDQuery1.FieldByName('CITY').AsString);

 

      Writer.WriteEndObject;

      FDQuery1.Next;

    end;

    Writer.WriteEndArray;

 

    Result := Writer.JSON.ToJSON;

  finally

    Writer.DisposeOf;

  end;

end;

 

WebModule1DefaultHandlerAction에서 응답 컨텐츠로 QueryUser를 연결합니다.

procedure TWebModule1.WebModule1DefaultHandlerAction(Sender: TObject;

  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);

begin

  Response.Content := QueryUser;

end;

 

리눅스로 배포하기

프로젝트를 빌드하고, 생성된 아파치 모듈(libmod_webbroker.so)을 리눅스로 복사합니다.

저는 제 작업디렉토리(/home/humphrey/WorkData/)에 복사했습니다.

 

아파치 모듈 복사

아파치 모듈 복사하기 전 아파치 서비스를 중단합니다.(root 권한 필요)

아파치 모듈을 복사하고 다시 아파치 서비스를 시작합니다.

 

 

결과확인

리눅스 서버의 주소 하위 /webbroker 페이지 호출 시 JSON 포맷 문자열로 출력됩니다.

(한글은 UTF8로 인코딩된것을 확인할 수 있습니다.)

 

REST Debugger(Tools > REST Debugger)로 확인해 한글이 잘 표현되는 것을 확인할 수 있습니다.

 

참고자료


번호 제목 글쓴이 날짜 조회 수
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 3151
공지 이 달의 기술자료 & 기술레터 관리자 2017.02.06 593
공지 [프로그래밍 강의] 2018.5~2018.7 (델파이/C++빌더 마스터 과정-7월 개강) 관리자 2015.01.22 6039
공지 RAD Studio(Delphi, C++Builder) 시작하기 관리자 2015.06.30 10663
공지 RAD 스튜디오로 개발된 모바일 앱 사례(17년 12월 13일 업데이트) 험프리 2014.01.16 147826
731 [RAD 서버] 비콘펜스 소개 및 데모(실내외 길찾기, 지역진입 감지하기) [1] 험프리 2017.04.13 307
730 [발표자료] 소개합니다! RAD Studio 10.2 도쿄 관리자 2017.04.06 285
729 이 달의 기술자료 - 2017년 04월 file 험프리 2017.03.30 253
» [10.2 도쿄] 델파이로 리눅스 기반 웹서비스 제작하기(WebBroker 이용) [1] 험프리 2017.03.30 1067
727 블루투스 바코드 스캐너(BI-07) 안드로이드 라이브러리를 델파이에서 연동하는 방법 file 험프리 2017.03.24 924
726 [10.2 도쿄] 기타 개선 사항 김원경 2017.03.24 245
725 [10.2 도쿄] RTL file 김원경 2017.03.24 232
724 [IBLite] IBLite 라이브러리 배포하기 file 험프리 2017.03.24 183
723 [10.2 도쿄] 디버거 기능 김원경 2017.03.23 252
722 [10.2 도쿄] VCL: 고 해상도(DPI) 지원. 김원경 2017.03.23 317
721 [10.2 도쿄] 개발환경 개선사항 file 김원경 2017.03.23 377
720 [10.2 도쿄] FireDAC과 데이터베이스 개선 file 김원경 2017.03.23 526
719 [10.2 도쿄] 파이어몽키의 새로운 기능들 file 김원경 2017.03.23 560
718 [10.2 도쿄] 리눅스 지원을 제공합니다. file 김원경 2017.03.23 553
717 [발표자료] VCL 애플리케이션 확장하기 with RAD 서버 관리자 2017.03.16 178
716 RAD Studio 10.2 도쿄! 곧 출시됩니다. 관리자 2017.03.16 306
715 델파이로 개발된 '3D Train Studio'가 BizWireTV의 'Startup Standout' 분야에 선정되었습니다. file 관리자 2017.03.14 117
714 [고객 사례- 3D, 시뮬레이션, 델파이] 3D Train Studio 관리자 2017.03.02 374
713 리팩토링 3-메소드 추출 file 김원경 2017.02.24 276
712 이 달의 기술자료 - 2017년 03월 file 험프리 2017.02.24 333


광고 모듈이 설치되어 있지 않아 실행을 중단합니다..