다중 클라이언트를 위한 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 14387
공지 [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
663 [고객 사례- 의료, 임베디드DB] PAR Springer-Miller Systems – SpaSoft  관리자 2016.11.03 435
662 [고객 사례- 제어장치, 차량] 세진인포텍21의 ABS 제어장치 file 관리자 2016.11.03 808
661 [고객 사례- 서비스(회계, 재정, 세무), 임베디드DB] Bonev Soft Audting 의 AJUR (회계, 재정, 세무 솔루션) file 관리자 2016.11.03 699
660 [고객 사례- 의료, 델파이+임베디드DB] Siemens Healthcare 의 체외진단기기 (IVD, In Vitro Diagnostics) file 관리자 2016.11.03 669
659 [고객 사례- 건설, 임베디드DB] GivenHansco 의 콘크리트 건설 사업 솔루션 (Keystone) file 관리자 2016.11.03 517
658 [RAD서버] [웨비나-딥다이브] 매장 관리 솔루션 개발하기(개발 시나리오와 데모) file 험프리 2016.11.02 1310
657 델파이/C++빌더 개발자를 위한 최고의 미들웨어 서버 - RAD 서버 file 험프리 2016.11.02 1765
656 [고객 사례- 제조, 임베디드DB] Electrolux 의 세탁정보관리시스템 (CMIS) file 관리자 2016.11.02 787
655 [고객 사례- 패션, 의료, 사물인터넷] Spinali Design의 Connected Bikini 관리자 2016.11.02 784
654 [동영상] 애플 터치 아이디 연동하기 file 험프리 2016.11.01 412
653 [동영상] 앱테더링 데이터 암호화/복호화 방법 file 험프리 2016.11.01 797
652 [스타터] C++빌더로 2D 게임을 완성해보세요 (소스코드 제공) file 관리자 2016.10.28 935
651 이 달의 기술자료 - 2016년 11월 험프리 2016.10.28 434
650 [베를린 U2] 윈도우 10 달력 컨트롤이 새롭게 추가될 예정입니다. 험프리 2016.10.28 863
649 Connascence: 커필링을 측정하는 방법(닉 하지스) 험프리 2016.10.17 587
648 COM 오브젝트 연동 유닛 생성하기: Import a Type Library file 험프리 2016.09.30 2482
647 이 달의 기술자료 - 2016년 10월 file 험프리 2016.09.30 386
646 [발표자료] 20160929 나만의 앱 완성하기 with 델파이 험프리 2016.09.21 868
645 안드로이드 SDK 설정 방법 file 험프리 2016.09.20 2852
644 [베를린 U1] TGrid가 네이티브 렌더링을 지원해 더 부드럽고 강력한 기능을 제공합니다. file 험프리 2016.09.20 554