블로그

애플리케이션의 컴포넌트화가 성능과 보안에 미치는 영향

로리 맥비티 썸네일
로리 맥비티
2019년 4월 8일 게시

예전에는 기업에서 전략적으로 배치된 프록시를 사용하여 애플리케이션 성능을 개선할 수 있었습니다. 기존 애플리케이션(모놀리스 및 3계층 아키텍처)은 일반적으로 클라이언트와 서버 간에 단일 데이터 경로를 채택했기 때문입니다.

간단히 말해서, 정적 콘텐츠든 동적 콘텐츠든, 텍스트 기반 콘텐츠든 이미지 기반 콘텐츠든 모든 콘텐츠에 대해 단 하나의 경로만 있었습니다. 즉, 애플리케이션 제공 컨트롤러(프록시)가 둘 사이에 위치하여 적절한 컨트롤러가 있으면 성능을 최적화할 수 있다는 의미입니다. 이런 작업은 흔히 다양한 IP, TCP, 심지어 HTTP 버튼과 노브를 조정하여 달성되었고, 지금도 그렇습니다. 캐싱, 압축, 콘텐츠별 가속 기술과 같은 애플리케이션 서비스를 구축하여 이러한 종류의 기술이 사용되는 것을 볼 수 있습니다.

애플리케이션의 구성 요소화가 성능과 보안에 미치는 영향

하지만 현대의 애플리케이션은 더 이상 자립적이지 않습니다. Sonatype에 따르면 현재 이러한 구성 요소는 대부분(80-90%) 타사(그리고 점차 오픈 소스) 구성 요소로 구성되어 있습니다. 이는 웹 애플리케이션에서 발견되는 수많은 스크립트와 기타 삽입 코드에서 확인할 수 있습니다. 때로는 해당 스크립트가 원격으로 실행되어 이미지나 광고, 웹 글꼴, 스프라이트와 같은 다른 콘텐츠를 반환하기도 합니다. 다른 경우에는 스크립트 자체가 런타임에 로드되어 jQuery와 같이 브라우저 내에서 실행됩니다.

이것을 컴포넌트화라고 합니다. 혹은 원자화라고 부르기도 합니다. 이는 애플리케이션을 여러 개의 작은 조각으로 나누는 것을 의미합니다. 일반적으로 동일한 공간에서 실행되므로 이를 클라이언트 측의 구성요소라고 합니다. 서버 측에서는 이를 마이크로서비스라고 부르고 컨테이너에 배포하는 경우가 늘고 있습니다. 두 경우 모두 영향은 비슷합니다. 성능에 직접적인 영향을 미치는 예측할 수 없는 수의 데이터 경로가 발생합니다.

기본적으로 여러분은 하나의 데이터 경로만 제어할 수 있습니다. 이는 애플리케이션의 약 20%를 차지합니다. 즉, 성능을 거의 제어할 수 없으므로 사용자 경험을 거의 제어할 수 없습니다.

보안에도 해당됩니다. 알려주셔서 감사합니다. 중요한 것은, 우리는 보안을 강화하기 위해 클라이언트 측 코드 기술을 활용하는 방법을 빠르게 배워가고 있다는 것입니다. 이 방법은 성능 면에서 효과적이지 않습니다. 대부분의 앱은 모바일이거나 웹이고, 둘 다 네트워크 스택을 건드릴 기회나 능력이 없기 때문입니다.

이 문제에 대처하는 방법 중 하나는 통제권을 되찾는 것입니다. 제어권을 되찾는 것의 멋진 점은 보안 측면에서도 이점을 얻을 수 있다는 것입니다.

윈윈: 위험 감소 및 성과 개선

앱이 외부 사이트에서 구성 요소를 동적으로 로드하는 경우가 있다면 중지하세요. 이제 그만해요. 이는 성능 문제뿐만 아니라 보안 문제이기도 합니다. 외부 소스 스크립트가 애플리케이션 컨텍스트 내에서 실행되도록 암묵적으로 무제한 권한을 부여하는 셈입니다. 보안 침해가 발생할 경우 사용자는 여러분이 만든 구성 요소와 외부에서 로드한 구성 요소를 구별할 수 없을 거라고 믿으세요. 최근 runc 컨테이너 취약점을 둘러싼 폭동에서 알 수 있듯이, 타사 레지스트리나 사이트에서 로드한 리소스에 악성 코드를 주입하면 보안 위험이 따릅니다.

스크립트인 경우 자체 인프라에서 복제하여 제공하는 것이 좋습니다. 통제력을 유지함으로써 위험을 줄이고 사용자의 성과를 향상시키는 노브와 버튼을 조정할 수 있는 이점이 있습니다. 여기에는 DNS가 포함됩니다. DNS는 애플리케이션 성능에 가장 큰 (종종 부정적인) 영향을 미치는 것으로 꾸준히 나타났습니다. 외부 사이트에서 구성 요소를 가져오는 경우 해당 DNS 인프라가 기대에 부응하는 성능을 발휘해야 합니다. 사용자의 로컬 DNS 캐시가 작동하기 때문에 자신의 사이트에서 구성 요소를 가져오면 영향을 크게 줄일 수 있습니다.

자체 사이트에서 스크립트를 호스팅하면 TCP 최적화나 SSL/TLS 오프로드 또는 일반적인 앱 가속 기술을 사용하여 전반적인 성능을 개선할 수도 있습니다. 또한 이를 통해 스크립트에 대한 보안 검사를 수행하여 깊숙한 곳에 숨겨진 놀라운 사항이 없는지 확인할 수 있는 기회도 제공됩니다.

구성 요소화는 개발에 유용하며 가치 실현 시간을 단축하는 데 확실히 도움이 됩니다. 하지만 성능과 보안에 부정적인 영향을 미칠 수도 있습니다. 보안 및 사용자 만족 위험과 이를 방지하기 위해 할 수 있는 일을 알아보세요.