다중 클라이언트를 위한 DataSnap 서버 만들기

델파이 XE2의 DataSnap 기능은 이전버전인 Midas에 비하여 월등히 강력하고 사용하기 쉽게 변경 되었습니다. DataSnap 기능을 활용하여 다중 클라이언트( Windows, OSX, iPhone, Android) 환경에서 접근 가능한 애플리케이션 서버와 클라이언트 프로그램의 개발을 통하여 DataSnap을 활용하는 방법을 배워 봅니다.

DataSnap 서버는 델파이 XE2의 위저드 기능을 이용하여 생성 합니다. 메뉴에서 File – New – Other를 선택하여 왼쪽 트리에서 DataSnap Server를 선택하면 아래의 그림과 같은 DataSnap Server를 선택할 수 있는 화면이 나타납니다.

두번째 아이콘인 DataSnap Server 를 선택하고 OK 버튼을 누르면 아래와 같이 프로그램 실행 방법을 선택하는 화면을 볼 수 있습니다. 서버의 경우 Service Application으로 만들어 줄 수도 있습니다만 여기서는 화면이 보이는 VCL Forms Application 을 선택합니다.

Next 버튼을 누르면 서버의 기능을 선택하는 화면을 불 수 있습니다. 델파이 클라이언트만을 위해서는 TCP/IP 만 선택해도 되지만 여기서는 아이폰등 다중 클라이언트 환경을 위한 REST protocol을 지원하기 위하여 HTTP도 함께 선택 합니다. HTTPS환경을 구축하고자 한다면 HTTPS를 동시에 선택 할 수도 있습니다. 사용자 확인이 필요한 경우 Authorization 옵션을 선택 할 수도 있습니다. Server Methods Class는 필히 선택 해야 합니다. 여기서 생성한 메소드를 클라이언트에서 호출하게 됩니다.

다음을 누르면 아래와 같이 포트를 선택할 수 있는 다이얼로그가 나옵니다. 테스트포트 버튼을 눌러 포트 사용 여부를 확인하고 다음을 선택합니다.

서버 메소드의 조상 클래스를 선택하는 화면에서는 TDSServerModule을 선택하여 줍니다.

Finish 버튼을 누르면 아래 그림과 같은 프로젝트를 생성해 줍니다. 각각 생성된 이름대로 저장합니다. ServerContainer1 유닛을 살펴보면 아래의 그림과 같은 컴포넌트들이 자동으로 생성되어 있습니다.

DSServer1 – DataSnap 메인 서버

DSServerClass1 – DataSnap 서버에서 클라이언트에 중계 하고자 하는 메소드를 연결하기 위한 클래스 컴포넌트

DSTCPServerTransport1 – TCI/IP 프로토콜 전송을 위한 통신 컴포넌트 – 델파이 클라이언트용

DSHTTPService1 – HTTP 프로토콜 전송을 위한 통신 컴포넌트 – 아이폰 혹은 REST 클라이언트를 위한 통신 컴포넌트

ServerContainerUnit1 유닛에는 아래의 그림과 같이 클라이언트에서 메소드를 호출했을 때 ServerMethodsUnit1으로 연결 해주는 코드가 위저드에 의해 이미 작성되어 있습니다.

이제 데이터베이스와 연결하기 위하여 ServerMethodsUnit1에 TSqlConnection, TSQLDataset, TDatasetProvider를 각각 화면에 올려 놓고 데이터베이스와 연결합니다.

SQLConnection1 Setting

SQLDataSet1 Setting

컴포넌트 셋팅과 데이터베이스 연결을 확인하면 클라이언트에서 호출할 메소드를 만들어 봅니다. 실습에서 사용할 메소드는 GetRecordCount, GetRecords, GetRecord 이름으로 세개의 메소드를 아래와 같이 선언합니다. 메소드 선언시에 주의할 점은 컴파일러 지시자 {$METHODINFO ON} 과 {$METHODINFO OFF} 의 사이에 선언한다는 점입니다. 워저드를 이용하여 생성한 코드는 자동으로 이 컴파일러 지시자를 생성해 주지만 사용자가 직접 만들 때에는 이것을 사용자가 입력해 주어야만 합니다. 이 지시자는 델파이 클라이언트를 만들 때 자동으로 클라이언트 코드를 생성하도록 도와줍니다.

생성한 메소드의 세부 코드는 다음과 같습니다.

여기까지 하면 다중 클라이언트를 위한 DataSnap 서버 프로그램 만들기가 완료 됩니다. 완료된 프로그램을 서버 컴퓨터에 실행 시켜두고 클라이언트 프로그램을 만들어 보겠습니다.

번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 14390
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13023
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 15532
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 21064
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 22297
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 17933
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 38228
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 173741
623 [추가된 문법 정리] - 클래스 메소드(Class Method):델파이 2007 추가 관리자 2016.06.03 1269
622 [추가된 문법 정리] - 클래스 필드(Class Field):델파이 2007 추가 관리자 2016.06.03 824
621 [발표자료] 20160602 Upgrade VCL! 오래된 프로그램, 최신식으로 탈바꿈하기 관리자 2016.06.02 785
620 [베를린] GetIt 속성값을 별도의 옵션창에서 관리할 수 있습니다. 관리자 2016.05.30 334
619 [베를린] Eddystone 비콘을 사용할 수 있습니다. 관리자 2016.05.30 331
618 [베를린] 윈도우10에서 블루투스LE와 비콘을 활용할 수 있습니다. 관리자 2016.05.30 976
617 이 달의 기술자료 - 2016년 06월 file 험프리 2016.05.27 629
616 [업데이트][핫픽스][10.1 베를린] 갤럭시 S7 Edge(안드로이드 6.0.1) 디버깅이 되지않는 이슈 패치 험프리 2016.05.27 672
615 10.1 베를린 부터는 리본 컨트롤을 겟잇 패키지 매니저에서 설치할 수 있습니다. 험프리 2016.05.27 510
614 코드사이트(CodeSite)로 로그를 기록하며 프로그램의 문제를 파악할 수 있습니다. file 험프리 2016.05.26 2658
613 브레이크 포인트를 설정해도 디버깅이 안되는 경우 살펴볼 항목 file 험프리 2016.05.13 2789
612 [발표자료] 20160504 새로 강화된 기능들: RAD Studio, Delphi, C++Builder 관리자 2016.05.09 483
611 [베를린] TBufferedFileStream을 이용해 TFileStream 보다 더 빠르게 파일을 읽고, 쓸수 있습니다. file 험프리 2016.05.09 3060
610 [필독] Berlin Dialog 사용법 상당부분 변경 및 기능추가 (소스링크추가) [1] c2design 2016.05.04 852
609 [업데이트][핫픽스][10.1 베를린] 데이터스냅(DataSnap) ApplyUpdates 핫픽스 험프리 2016.04.28 866
608 이 달의 기술자료 - 2016년 05월 file 험프리 2016.04.26 655
607 [베를린] 스타일 디자이너에 미리보기, 클립보드 기능등이 강화되어 더욱 사용하기 편리해 졌습니다. file 험프리 2016.04.26 851
606 [베를린] 연락처 컴포넌트(TAddressBook)로 연락처 정보를 읽고 쓸수 있습니다. file 험프리 2016.04.25 618
605 [베를린] ListView 레이아웃을 입맛에 맞게 변경할 수 있습니다. file 험프리 2016.04.22 2119
604 [베를린] FireUI 앱 미리보기 - 개발중인 앱의 디자인을 장치에서 실시간으로 확인하며 개발할 수 있습니다. file 험프리 2016.04.22 1115