참고: 이 글은 Vojta Jakubec의 게스트 게시물입니다. Concur 기술는 기업에 출장 및 경비 관리 서비스를 제공하는 출장 관리 경비 회사입니다.

Concur는 15년 이상 서비스형 소프트웨어를 구축한 경험이 있습니다. 작년에 9,300만 명의 항공 승객이 여행 및 경비 제품을 통해 예약하면서 비즈니스 여행 시장을 선도하고 있습니다. 이는 전 세계 모든 상용 항공기에는 평균 3명 이상의 승객이 당사의 소프트웨어를 통해 항공권을 예약했다는 의미입니다.

하지만 10년 넘게 성공적인 SaaS 제품을 운영하다 보니 몇 가지 단점도 있었습니다. 저희는 프론트엔드 UI의 수명을 당초 예상보다 훨씬 더 연장해야 하는 상황에 처했습니다. 그 중 상당 부분은 여전히 .NET이 등장하기 전의 Microsoft 기술 스택인 클래식 ASP를 사용하고 있습니다. 고객의 요구에 부응하기 위해 환경을 현대화하기 위한 몇 가지 기술적 조치를 취했습니다.

클래식 ASP의 데이터 캐싱

우리가 취한 이니셔티브 중 하나는 ASP 계층에 데이터 캐싱을 도입하는 것이었습니다. UI와 중간 계층 간의 각 호출에는 몇 밀리초가 걸립니다. 문제는 기존 ASP 렌더링 엔진이 이러한 호출을 병렬화할 방법을 제공하지 않기 때문에 총 페이지 실행 시간이 계속 늘어난다는 점입니다. 경우에 따라 최대 수백 밀리초까지 늘어날 수 있습니다. 따라서 중간 계층 데이터를 가져오는 데 걸리는 시간을 최소화해야 합니다.

저희의 해결책은 Couchbase에서 데이터 캐시를 호스팅하는 것이었습니다. UI는 중간 계층에 30ms의 비싼 호출을 하는 대신 Couchbase의 캐시에서 1ms 이내에 동일한 데이터를 가져올 수 있습니다. 중간 계층 호출은 캐시된 데이터가 없는 경우에만 필요합니다.

데이터 액세스 시간을 최소화하기 위해 기존 ASP에서 기본적으로 Couchbase 데이터에 액세스해야 했습니다. 추가 서비스 계층을 통해 라우팅하면 지연 시간만 늘어나고 캐싱 작업에 방해가 될 뿐이었습니다. 이러한 이유로 저희는 오픈 소스 COM 래퍼 를 중심으로 Couchbase용 .NET SDK를 지원합니다. 이를 통해 COM 개체로 작업할 수 있는 모든 애플리케이션이 기본적으로 Couchbase 서버와 함께 작동할 수 있습니다.

COM SDK 배포

가장 간단한 배포 시나리오는 Couchbase COM SDK 파일을 서버에 복사하고 COM 클래스를 서버에 등록하는 것입니다. 레가즘 도구를 사용하세요. 최신 바이너리는 최신 GitHub 릴리스 를 사용하거나 직접 프로젝트를 빌드하세요. Regasm 도구는 .NET Framework 설치의 일부이며 서버에 이미 설치되어 있어야 합니다.

이 시점에서 애플리케이션에서 Couchbase COM SDK를 사용할 수 있어야 합니다.

COM SDK 구성

.NET 구성 클래스를 COM 개체에 매핑하려면 이 두 가지를 동기화하기 위해 장기적으로 상당한 노력이 필요합니다. 다행히도 .NET SDK는 외부 구성 파일을 사용할 수 있는 옵션을 제공했습니다. 실제로는 모든 .NET 애플리케이션에서 App.config 또는 Web.config 파일로 작업하는 것과 똑같습니다. 자세한 내용은 다음을 참조하세요. .NET SDK 문서.

ASP 코드에서 COM SDK를 구성하는 예제입니다:

위의 예는 지정된 경로에서 구성 파일을 열고 "aspCacheConfigSection"이라는 구성 섹션을 조회한 후 이를 사용하여 기본 .NET SDK를 구성합니다. 이 작업은 애플리케이션 시작 시 global.asa에서 수행할 수 있는 일회성 작업입니다.

리소스 사용 최적화

ASP에서는 일반적으로 사용자가 COM 개체를 매우 빠르게 만들고 삭제합니다. 기본 .NET SDK 개체의 수명을 COM 개체 래퍼에서 분리함으로써 리소스 사용이나 성능에 부정적인 영향을 미치지 않고 이 사용 사례에 맞게 최적화할 수 있었습니다. 하나의 카우치베이스 버킷을 나타내는 모든 COM SDK 버킷 개체는 실제로 그 아래에 있는 싱글톤 .NET SDK 버킷 개체를 사용합니다.

간단한 ASP 캐싱의 예

다음 예제에서는 이미 "default"라는 버킷이 있는 Couchbase 클러스터에 연결하도록 SDK를 구성했다고 가정합니다.

우리는 항상 팩토리 클래스를 생성하는 것으로 시작하며, 이 클래스에서 명명된 버킷(이 예에서는 "기본")으로 작업할 수 있는 객체를 요청합니다. Get 작업을 사용하여 캐시된 데이터를 찾아서 즉시 사용하거나 중간 계층 요청을 실행하고 결과를 Couchbase에 저장합니다. 데이터를 저장하는 Upsert 작업에는 만료(이 경우 60초)를 지정하는 추가 매개 변수가 필요합니다.

결론

Couchbase .NET SDK를 둘러싼 이 간단한 COM 래퍼를 통해 기존 ASP 애플리케이션에서 기본적으로 제공할 수 있는 모든 기능을 활용할 수 있습니다. 덕분에 몇 가지 코드 조정만으로 ASP UI를 쉽게 확장할 수 있었습니다. 또한 COM SDK를 만들면서 .NET SDK를 개선하고 사용 방법의 한계를 뛰어넘는 여러 가지 공헌을 하게 되었습니다.

작성자

게시자 Jeff Morris, 수석 소프트웨어 엔지니어, Couchbase

Jeff Morris는 Couchbase의 수석 소프트웨어 엔지니어입니다. Couchbase에 입사하기 전에는 6년 동안 Source Interlink에서 엔터프라이즈 웹 아키텍트로 근무했습니다. Jeff는 Couchbase SDK 개발과 N1QL(쿼리 언어)과 통합하는 방법을 담당하고 있습니다.

댓글 남기기