마르코 칸투(Marco Cantu)의 The New RAD Server Lite (RSLite) in RAD Studio 11을 번역했습니다.
RAD 스튜디오 11 알렉산드리아 출시와 함께, RAD 서버 배포/라이선스에 라이트(Lite) 버전이 새로 추가되었다. 이것은 REST 요청이 많지 않은, 배포/설치가 보다 간소화된 RAD 서버이다.
RAD 서버는 무엇인가?
세부 사항에 앞서 RAD 서버가 무엇인지 살펴 보자. RAD 서버는 REST 서버 엔진이다. 개발자는 REST 엔드포인트 (주로 JSON을 제공)를 빠르게 개발할 수 있다. 개발 도구는 델파이 또는 C++빌더를 사용하며 FireDAC(또는 다른 데이터 엑세스 레이어)를 사용하여 데이터에 연결한다. 정리하면, 개발자가 애드온 패키지(BPL)를 만들고, 이것에 URL 엔드포인트를 등록하는 방식으로 원하는 서비스를 구현/제공한다. RAD 서버에는 이처럼 개발자가 직접 구현할 수 있는 능력 뿐만 아니라 일반적인 서비스들이 바로 사용할 수 있도록 미리 구현되어 있다 (자세한 내용: https://www.embarcadero.com/products/rad-server).
RAD 서버 라이트(Lite)가 왜 추가 되었는가?
RAD 서버는 서버 데이터를 관리하는 데이터베이스(InterBase)가 백엔드에서 작동한다. 그리고, RAD 서버는 웹서버 DLL 모듈 형태로 IIS 또는 Apache에 배포되는 것이 일반적이다.
따라서, 표준 배포를 하려면, 아래 사항이 필요하다.
- 웹 서버를 작동하고, 그 웹 서버에 "RAD 서버 모듈"을 구성
- RAD 서버를 배포하고 구성
- InterBase를 설치하고 RAD 서버 전용 InterBase 라이선스를 등록 (RAD서버를 배포되는 장비에 이 라이선스를 등록해야 사용할 수 있다)
개발용 독립 실행 버전인, "RAD 서버 개발자 에디션"이 제공된 지는 이미 꽤 오래되었다. RAD 서버 개발자 에디션은 Indy HTTP 서버 기반이므로 성능에 제한이 있다. 하지만 배포가 훨씬 쉽고, 디버거 안에서도 실행될 수 있다 (덕분에 개발자는 RAD 서버 모듈의 코드를 디버깅할 수 있다). 개발자 버전이라고 해서 배포를 허용하지 않는 것은 아니다. 다만, 사용자 수에 제한이 있으며, 데이터베이스로는 (RAD 스튜디오 라이선스에 포함되어 있는) "InterBase 개발자 에디션"이 사용된다.
RAD 서버 라이트(일명 RSLite)는 배포 모델이 더 간단하며, 용도는 테스트 서버 또는 처리량이 많지 않은 시나리오에 적합하다. RSLite에서 사용되는 InterBase 데이터베이스는 모든 기능을 갖춘 서버 버전이 아니라 임베디드 엔진인 IBToGo가 사용되며, 라이선스 모델도 더 단순하다. RSLite는 "RAD 서버 개발자 에디션(RAD 스튜디오와 함께 제공됨)"과 동일한 바이너리, IBToGo 바이너리, 라이선스 슬립파일을 사용하므로, 한번에 솔루션과 함께 배포할 수 있다 (즉 배포할 컴퓨터에서 따로 등록할 필요가 없다)
임베디드 데이터베이스와 IndyHTTP 서버 컴포넌트를 사용하기 때문에, 일반적인 RAD 서버에 비해 초당 요청 처리 능력이 떨어지고, 프론트 엔드에 RAD 서버를 여러대 추가하는 방식으로 확장하지 못한다는 단점이 있다. 우리가 별도 작업을 통해 기능을 제약하지는 않았지만, 기반 아키텍처 상 RSLite의 확장성은 매우 제한적이다. 하지만, 단순한 시나리오에서 사용하기에는 충분할 것이다. 단, 처리 능력은 RAD 서버 모듈에서 실행되는 코드 즉 개발자가 구현한 코드에 따라 달라진다는 점을 명심해야 한다. 외부에 공개되는 시스템에 배포할 때에는 RSLite HTTP 서버를 외부로 직접 노출하지 말고, 프록시 통해서 접근하도록 구성하기를 강력히 권장한다. 이렇게 (Apache, IIS와 같은) 웹서버를 앞에 배치함으로써, 인바운드 HTTPS 호출을 RSLite로 포워딩하기 전에 보안 컨텍스트를 제공할 수 있기 때문이다.
라이선스 요청/확보 하기
이제 RSLite를 실제로 어떻게 하면 되는 지를 알아보자. 가장 먼저, 라이선스를 확보해야 한다. 개발 도구인 RAD 스튜디오 11(델파이 11 및 C++빌더 11 포함)의 엔터프라이즈 또는 아키텍트 라이선스를 가지고 아래 페이지의 안내를 따라 진행하면 RSLite 라이선스를 받을 수 있다.
https://reg.embarcadero.com/srs6/promotion.jsp?promoId=572
개발 도구의 등록 키(시리얼번호)와 EDN 계정을 미리 준비하고 진행하자. 이 절차를 모두 마치고 나면 RSLite 라이선스 키와 해당 슬립파일 (라이선스가 기록된 .TXT)을 받게 된다. 슬립 파일은 RAD 서버를 설치할 때 함께 배포하기 위한 라이선스 파일이다. 이 라이선스는 설치 횟수 제한이 없다 (그러나 동일한 컴퓨터에 인스턴스를 2개를 실행할 수는 없다). 라이선스 파일은 특정 하위폴더에 배치해야 한다(아래에 설명을 참고할 것, 라이선스를 확보한 웹페이지에 있는 설명과는 다르니 주의 바람).
RAD 서버 라이트 프로젝트 배포하기
이제 라이선스를 확보했으니, RSLite를 배포하자. 다음 두가지를 알아 두어야 한다.
- 첫번째로, RSLIte의 배포 구성, 필요한 런타임 패키지, IBToGo 배포를 만들어야 한다(아래에서 절차 설명)
- 두번째로, 데이터베이스 파일을 만들 때에는 운영 시 사용할 IBToGo 라이선스와 호환되는 파일을 만들어야 한다. — RAD 서버 개발자 에디션에서 생성한 로컬 데이터베이스는 호환되지 않는다.
배포할 파일
RSLite 솔루션을 배포하기 위해 필요한 파일 목록 (실제로는, 당신이 만든 애플리케이션 패키지와 해당 의존 파일들을 아래 파일들과 함께 배포하게 된다)
- RSLite 실행 파일 (RAD 서버 개발자 에디션과 동일한 파일): EMSDevServer.exe는 RAD 스튜디오 bin 폴더에 들어 있다(또는 비슷한 64-비트 버전)
- 필수 RAD 스튜디오 런타임 패키지(최소 설치에 필요한 패키지로써 RAD Studio win32 또는 win64 redist 폴더에 들어 있다),
그리고 당신이 작성한 RAD 서버 모듈 코드에서 참조하는 런타임 패키지:- bindengine280.bpl
- dbrtl280.bpl
- emsclientfiredac280.bpl
- emsserverapi280.bpl
- FireDAC280.bpl
- FireDACCommon280.bpl
- FireDACCommonDriver280.bpl
- FireDACIBDriver280.bpl
- rtl280.bpl
- vcl280.bpl
- vcldb280.bpl
- vclFireDAC280.bpl
- vclimg280.bpl
- vclwinx280.bpl
- vclx280.bpl
- Xmlrtl280.bpl
- InterBase ToGo 배포 파일들, 공용문서의 InterBase redist 폴더(예, C:/Users/Public/Documents/Embarcadero/Interbase/redist/InterBase2020) 아래의 win32_togo 또는 win64_togo 폴더 안에 있다 — 리눅스 배포용 파일은 알맞은 InterBase redist 폴더에 있는 libibtogo.so 파일이다.
- 앞에서 확보한 라이선스 파일을 interbase/license 폴더 안에 넣는다.
MSVC 런타임
또한 IBToGo (RSLite는 IBToGo를 사용한다)가 작동하려면 배포할 윈도우 시스템에 Visual C++ 2013 런타임 라이브러리가 설치되어 있어야 한다. RAD 스튜디오가 설치된 개발자 컴퓨터라면 이미 설치되어 있을 가능성이 크다. 그러나 일반적인 시스템이라면 아마도 Microsoft에서 다운로드하여 설치해야 할 것이다.
운영 환경에서 사용할 데이터베이스 생성
앞에서 명시된 서버 구성을 모두 마치고 나면, EMSDevServer.exe 애플리케이션을 실행하여 RSLite를 시작하면 된다. 이때 대상 컴퓨터에 InterBase 클라이언트가 설치되어 있으면 이것이 IBLite보다 더 우선하여 선택된다. 그리고 그 InterBase 클라이언트가 RAD 스튜디오와 함께 제공된 "InterBase 개발자 버전"인 경우라면, 모든 동작이 잘 되지만 RSLite가 아니라 표준 RAD 서버의 개발자 에디션으로 작동하게 된다.
이점은 쉽게 파악할 수 있다. RAD 서버가 시작되면 로그에 “RSLite” 구성인지 아닌 지를 기록하기 때문이다. 처음 몇줄은 다음과 같다.
{“Thread”:19124,”ConfigLoaded”:{“Filename”:”[folder]emsserver.ini”,”Exists”:true}}
{“Thread”:19124,”Licensing”:{“Lite”:true,”Licensed”:true,”LicensedMaxUsers”:2}}
{“Thread”:19124,”DBConnection”:{“InstanceName”:””,”Filename”:”[folder]emsserver.ib”}}
만약 로그에 “Lite”가 false라고 기록되어 있다면, InteBase 클라이언트 라이브러리인 gds32.dll이 로딩되지 않도록 하는 조치를 직접해야 한다. 이 파일은 일반적으로 C:\Windows\SysWOW64 폴더에 들어 있다. (RSLite는 표준 RAD 서버와 마찬가지로 기동하면서, 이 폴더에서 InteBase 클라이언트 라이브러리를 찾으려고 한다. 따라서 이 폴더에 gds32.dll 파일을 없어야만, RSLite 안에서 ibtogo.dll를 찾아서 로딩한다. 이와 관련된 보강은 다음 릴리즈에 반영할 예정이다)
구성도 잘 마쳤고 RSLite도 잘 기동했는데, emsserver.ini 파일과 emsserver.ib 데이터베이스 파일을 새로 만들라는 메시지가 표시되고, "RAD Server Setup Wizard"가 실행되어 이 파일들을 만들 수 있다. 하지만 이 마법사를 실행하려면 RAD 스튜디오 Object Repository 폴더의 설정 파일들이 필요하다. 개발자 PC의 (RAD 스튜디오 설치 경로)/ObjRepos/en/EMS 폴더의 파일들을 배포 환경의 EMSDevServer.exe 기준 ../ObjRepos/en/EMS 폴더로 복사해야 한다.
(역자 주: 만약, D:\RSLite\bin\EMSDevServer.exe가 설치되어 있다면
개발자 PC의 RAD 스튜디오 Object Repository 폴더 하위의 en/EMS 폴더의 파일들을 D:\RSLite\ObjRepos\en\EMS 폴더에 복사해야 합니다.)
참고: 위 작업은 매번 RSLite 배포마다 진행하지 않아도 된다. 최초 1회 프로덕션 데이터베이스 생성을 위해 위 작업을 진행하고, 다음 배포시에는 생성한 프로덕션 데이터베이스를 복사해 사용할 수 있다. 개발환경에서 InterBase 개발자 에디션 기반으로 생성한 데이터베이스는 RSLite와 호환되지 않기 때문이다.
마법사에서 emsserver.ini 파일과 emsserver.ib 데이터베이스 파일 생성 시 RSLite와 동일한 폴더를 지정하는 것을 권장한다.
이제 RSLite, 설정파일, 런타임 패키지 및 라이선스, IBToGo를 모두 백업 받는다. 이제 윈도우 컴퓨터에 배포할 모든 파일들이 준비되었다.(역자 주: 다음 배포 시에는 백업 받은 파일들을 그대로 배포하면 됩니다.)
프록시 구성
앞서 언급했듯 RSLite는 보호 및 암호화 측면에서 제한이 있기 때문에 공개 웹 애플리케이션으로 직접 노출하지 않는 것이 좋다. RSLite 앞단에 프록시 레이어 전용 서비스를 사용하거나, 인기 있는 웹 서비스를 배치하는 것을 권장한다. 예를 들어 Apache에서 가상 호스트 구성 시 HTTPS를 활성화하고, 다음과 같이 구성해 트래픽을 RSLite로 리다이렉션한다.
ProxyPass / http://localhost:8088
ProxyPassReverse / http://localhost:8088
ProxyPreserveHost On
리눅스
리눅스의 경우 위와 비슷한 절차를 진행할 수 있으며, 대부분 예상대로 작동할 것이다. 또한 전체 RAD 서버를 설치하고 나서, IBToGo를 추가도 가능하다.
- RAD 서버 폴더에 있는 ems_install.sh를 사용해 RAD 서버 설치 (https://docwiki.embarcadero.com/RADStudio/en/Configuring_Your_RAD_Server_Engine_or_RAD_Server_Console_on_Linux)(역자 주: 이 도움말의 내용 중 개발 도구가 설치된 폴더 위치는 버전 별로 다를 수 있다. 예를 들어 19.0 이라는 폴더가 없으면, 22.0 등 내가 설치한 버전에 해당하는 폴더라고 이애하면 된다)
- InterBase "redist" 폴더(예. C:\Users\Public\Documents\Embarcadero\InterBase\redist\InterBase2020\linux64_togo)의 IBToGo 파일들을 Linux의 EMS 폴더(/usr/lib/ems)로 복사
- EMSDevServerCommand를 실행하고 마법사를 따라 EMS 데이터베이스 및 구성 파일 생성 (애플리케이션을 실행할 권한이 없다면, 슈퍼 유저로서 실행하기 위해 명령어 앞에 'sudo'를 붙여야 할 수도 있음)
전체 기능이 포함된 RAD 서버로 업그레이드
마지막으로 RSLite는 감당할 수 있는 사용자 요청 트래픽에 한계가 있다는 점을 상기한다. RSLite 보다 더 넓은 대역 폭과 처리량이 필요하다면, 일반 RAD 서버를 배포하는 것이 좋다. RAD 스튜디오, 델파이 또는 C++빌더의 엔터프라이즈 에디션을 구입하고 받는 ESD 라이선스 이메일에는 서버 한 대에 배포할 수 있는 일반 RAD 서버 라이선스가 들어있다. 아키텍트 에디션의 ESD 라이선스 이메일에는 RAD를 서버 여러대에 배포할 수 있는 라이선스가 들어있다. 배포한 RAD 서버가 작동하려면 장비 별로 라이선스를 활성화해야 한다. 당사 영업팀에 문의하여 VAR(Value Added Reseller) 계약을 체결하면 라이선스 슬립파일을 사용하여 별도의 등록 과정 없이도 모든 기능이 있는 일반 RAD 서버를 쉽게 배포할 수도 있다.