블로그 | CTO 사무실

왜 WebAssembly에 관심을 가져야 할까요?

오스카 스펜서 썸네일
오스카 스펜서
2024년 10월 2일 게시

우리 주변에서 기술은 빠르게 변화하고 있습니다. WebAssembly(또는 간단히 Wasm)가 개발자와 기술 매니아들 사이에서 큰 인기를 끌고 있다는 말을 들어보셨을 겁니다. 하지만 WebAssembly가 정확히 무엇이고, 왜 그것이 여러분이 주의를 기울여야 할 만큼 중요한 것일까요? 시작해 볼까요.

WebAssembly란 무엇인가?

기본적으로 WebAssembly는 이진 명령어 집합입니다. x86이나 ARM과 같이 여러분이 들어봤을 수 있는 어셈블리 언어와 비슷하지만, 몇 가지 새로운 특성과 보안 보장이 추가되었습니다. C나 Rust와 같은 프로그래밍 언어로 코드를 작성하면 해당 코드를 WebAssembly 아티팩트로 컴파일할 수 있습니다. Wasm은 원래 웹용으로 만들어졌기 때문에 가장 큰 장점은 거의 기본 속도로 웹에서 고성능 애플리케이션을 실행할 수 있다는 점이었지만, 오늘날 WebAssembly는 브라우저 밖에서도 널리 채택되고 있습니다.

Wasm을 다른 컴파일러 타겟과 차별화하는 한 가지는 이식성입니다. WebAssembly 코드는 기본 아키텍처와 관계없이 런타임이 있는 한 모든 플랫폼에서 실행될 수 있습니다. 즉, 개발자는 코드를 한 번만 작성하면 Windows, macOS, Linux, 모바일 운영 체제, 브라우저, 심지어 전구 등 어디에서나 실행될 수 있다는 것을 기대할 수 있습니다.

WebAssembly는 안전한가요?

특히 오늘날 우리가 살고 있는 디지털 세계에서는 보안이 무엇보다 중요합니다. 따라서 WebAssembly는 보안을 핵심 설계 목표로 만들어졌습니다. 잠시 시간을 내어 웹 브라우저가 무엇을 하는지 생각해 보겠습니다. 웹 페이지를 방문하면 브라우저가 알려지지 않고 신뢰할 수 없는 코드를 다운로드하여 실행합니다. 곰곰이 생각해 보면 정말 무섭습니다. 브라우저의 역할은 악성 코드로부터 사용자와 기기를 보호하는 것이며, 바로 이러한 사고방식이 WebAssembly에 내장되어 있습니다.

  1. 샌드박싱: 이렇게 하면 WebAssembly 코드가 호스트 환경에서 분리되어 승인되지 않은 데이터에 액세스하거나 코드가 실행되는 위치에 대한 정보를 확인하는 것이 방지됩니다.
  2. 기본적으로 거부된 액세스: WebAssembly는 매우 엄격한 기본 거부 보안 정책을 가지고 있습니다. 즉, 명시적인 허가 없이는 시스템 리소스에 액세스할 수 없습니다. 이는 Wasm 코드와 특별히 공유되지 않는 한 전혀 사용할 수 없는 시스템 시간과 같은 간단한 리소스에도 적용됩니다.
  3. 기억의 경계: 실행 중인 각 WebAssembly 인스턴스는 다른 WebAssembly 인스턴스와 호스트 메모리에서 완전히 분리되어 그 너머를 볼 수 없는 자체 메모리 덩어리를 갖습니다.

WebAssembly는 빠른가요?

WebAssembly는 빠르게 설계되었습니다. JavaScript와 비교해 Wasm 코드는 JavaScript 코드가 구문 분석되기 전에도 디코딩되어 실행을 시작할 수 있습니다. 브라우저에서 새로운 경험을 제공할 뿐만 아니라, 이식성과 보안이 보장되어 브라우저 외부에서도 네이티브에 가까운 성능을 제공합니다.

왜 신경 써야 하나요?

JavaScript를 대체하는 것이 전혀 아닙니다. 둘은 상호 보완적인 기술이며, 경쟁하기보다는 함께 사용되도록 설계되었습니다. JavaScript는 여전히 웹 앱의 동적이고 대화형 부분에 필요한 반면, Wasm은 컴퓨팅 비용이 많이 드는 작업에 더 많이 사용되고 있습니다.

WebAssembly 코드는 런타임 내에서 실행되므로 기존 애플리케이션에 쉽게 삽입할 수 있습니다. 웹 애플리케이션이든 에지나 서버에서 실행되는 애플리케이션이든 상관없습니다. 이를 통해 거의 모든 언어로 작성된 코드나 심지어 타사의 신뢰할 수 없는 코드로 애플리케이션을 확장할 수 있습니다. 따라서 WebAssembly는 플러그인 시스템에 적합하며, 커뮤니티 멤버나 고객이 제공한 애플리케이션 내에서 코드를 안전하게 실행할 수 있습니다. WebAssembly의 뛰어난 보안 모델이 이 모든 것을 가능하게 합니다.

WebAssembly는 효율적입니다

WebAssembly는 서버리스 컴퓨팅 분야에 큰 변화를 가져왔습니다. Wasm 모듈은 컨테이너에 비해 매우 작습니다. 생산된 대부분 모듈은 킬로바이트 또는 한 자릿수 메가바이트 규모이지만, 컨테이너는 쉽게 수백 메가바이트 또는 수 기가바이트에 달할 수 있습니다. Wasm은 저장소 크기 외에도 유명한 "콜드 스타트" 문제도 해결합니다. Wasm 코드는 마이크로초 단위로 실행을 시작할 수 있으므로 요청에 신속하게 응답하기 위해 코드를 실행 상태로 둘 필요가 없습니다. 대기 시간에 미치는 영향이 매우 미미한 방식으로 요청을 수신했을 때 Wasm 인스턴스를 시작할 수 있습니다. 즉, WebAssembly 기반 시스템은 트래픽이 없을 때 크기를 최대 0까지 줄일 수 있습니다. 이는 자연과 은행 계좌 모두에게 축복이 될 것입니다.

WebAssembly는 구성 가능합니다

제 생각에, 정말로 획기적인 것은 WebAssembly 컴포넌트 모델입니다. 이는 개발자가 소프트웨어를 구축하고 구성하는 방식을 근본적으로 바꿀 것입니다.

  1. 크로스 에코시스템 접근: Go의 암호화 라이브러리, Rust의 JSON 직렬화기, Python의 숫자 처리 유틸리티를 원하시나요? 괜찮아요. 구성 요소 모델을 사용하면 거의 모든 언어 생태계에서 소프트웨어를 선택하고 마치 모두 같은 언어로 작성된 네이티브 라이브러리인 것처럼 이를 함께 구성할 수 있습니다.
  2. 개발 유연성: 조직 내의 다양한 팀은 업무에 가장 적합한 도구를 선택할 수 있습니다. 그들은 팀의 성과물이 전체 애플리케이션에 원활하게 연결될 것이라는 확신을 가지고, 자신의 전문성과 프로젝트 요구 사항에 맞는 프로그래밍 언어와 소프트웨어 스택을 선택할 수 있습니다.

간단히 말해서, 개발자는 WebAssembly 코드를 생성할 수 있는 어떤 언어로든 소프트웨어 구성 요소를 빌드한 다음 이를 쉽게 단일 애플리케이션으로 구성할 수 있습니다.

WebAssembly는 여러분의 관심을 끌만한 기술입니다. 애플리케이션에 새로운 기능을 추가하려는 개발자이든, 확장 가능하고 비용 효율적인 솔루션을 구축하는 데 중점을 둔 기업이든 Wasm이 적합할 수 있습니다. WebAssembly는 점점 더 성숙해지고 지지를 얻으면서 소프트웨어 개발에 대한 우리의 생각과 상호작용 방식을 새롭게 정의할 태세를 갖추고 있습니다. WebAssembly에 주목하세요. WebAssembly는 단순한 미래가 아니라 이미 존재하며 우리가 아는 소프트웨어를 재구성하고 있습니다.

WebAssembly에 대해 더 알고 싶으신가요? YouTube , Spotify 또는 Apple Podcast 에서 F5의 WebAssembly Unleashed 팟캐스트를 확인하세요.