logo
logo
언어
Rust
StackOverflow 질문 수: 43787
Github Stars : ★ 102358
사용 기업
금융/보험
소셜/컨텐츠
이커머스
종합
블록체인
인공지능
헬스케어
techstack-logo
두나무
techstack-logo
하이퍼커넥트
techstack-logo
스포카
techstack-logo
업라이즈
techstack-logo
SK플래닛
techstack-logo
데브시스터즈
techstack-logo
SK텔레콤
techstack-logo
오퍼스엠
techstack-logo
CJ올리브네트웍스
techstack-logo
메타플라드
techstack-logo
티오리
techstack-logo
현대자동차그룹
기술 블로그 글
한글과컴퓨터
WASI 표준화로 가능하게 되는 것들
WebAssembly(이하 Wasm) 기술이 소개된 지 10년이 되어가면서 최근 웹 개발의 성능을 개선하기 위해서 활발하게 사용되고 있습니다.Wasm 모듈을 브라우저 외부에서 활용하기 위한 WASI 표준화에 대해 알아보겠습니다. WASI는 2019년 발표된 기술로 Wasm 하위 그룹 WASI.dev(https://wasi.dev/)에서 표준화 작업을 진행하고 있습니다.WebAssembly System Interface(WASI)는 W3C WebAssembly(Wasm)로 컴파일된 소프트웨어를 위한 시스템 인터페이스 표준 스펙입니다. WASI가 제공하는 인터페이스로 Wasm 애플리케이션은 브라우저 외부에서 클라우드, 임베디드 장치까지 모든 환경에서 실행될 수 있습니다.WASI는 Wasm 모듈이 File System, Networking, Time, Random 등의 시스템 리소스에 접근할 수 있도록 하는 표준화된 API를 제공합니다.Wasm과 WASI로 할 수 있는 것• 단일 릴리즈 파일을 Wasm 런타임이 있는 모든 플랫폼에서 실행할 수 있습니다. 모든 프로젝트를 동일한 대상으로 컴파일하고 단일 런타임에서 실행할 수 있습니다.• 클라이언트와 서버, 모바일과 데스크톱의 다양한 플랫폼 간의 애플리케이션 아키텍처에서 코드를 재사용할 수 있습니다. WASI Shell 구현으로 크로스플랫폼 래퍼를 작성하여 라이브러리를 작성할 수도 있습니다.단일 환경으로 컨테이너화• 모든 애플리케이션 간의 종속성을 Wasm 파일로 단일하게 컴파일할 수 있습니다. 다른 종속성을 위한 컨테이너가 필요하지 않기 때문에 사용성이 개선되고, 컨테이너 간의 오버헤드가 줄어들거나 없어지게 됩니다.WASI 표준화는 진행 중이기 때문에 현재 버전의 WASI로 모든 사례가 가능한 것은 아닙니다.Wasm 모듈이 WASI를 사용하는 방법Wasm 모듈은 import 구문으로 표준화된 WASI API 바인딩을 사용할 수 있습니다.• 호스트는 Wasm 모듈을 실행하는 Wasm 런타임입니다. Google Chrome의 V8과 같은 웹 브라우저의 모듈도 Wasm 런타임입니다.• 브라우저 외부에서 Wasm 모듈을 실행할 때는 HTML, CSS, JavaScript 등을 지원하는 전체 브라우저 엔진이 필요하지 않습니다. 호스트로 많이 사용하는 다양한 독립형 Wasm 런타임 / 인터프리터가 있습니다.대부분의 Wasm 런타임 / 인터프리터는 CLI로 사용되거나, 라이브러리 API로 애플리케이션에 연동됩니다.• 게스트는 호스트가 실행하는 Wasm 모듈입니다. Wasm 모듈을 작성하려는 경우 호스트 애플리케이션 내부에서 실행되는 게스트 애플리케이션을 작성하게 됩니다.• 호스트는 게스트의 작업을 수행하여 게스트에게 추가 기능을 제공합니다. 이 기능은 importObject에 함수를 전달하여 제공됩니다.WASI는 호스트가 게스트 Wasm 모듈에 대한 시스템 수준의 작업을 수행하기 위한 표준화된 API 집합입니다. 이러한 방식으로 개발자는 시스템 리소스에 접근할 수 있는 Wasm 모듈을 작성할 수 있습니다.WASI는 기능 기반의 보안 모델을 사용합니다. 호스트가 게스트 모듈에 기능을 명시적으로 승인해야 게스트 모듈이 작업을 수행할 수 있습니다. 예를 들어 Wasmtime에서 게스트 모듈은 기본적으로 호스트 파일 시스템의 어떤 부분도 접근할 수 없습니다. Wasmtime을 호출하는 사용자는 –mapdir 또는 –dir fla를 설정하여 모듈에 호스트 파일 시스템의 디렉터리에 접근할 수 있는 기능을 부여해야 합니다.현재 시점에도 WASI의 많은 부분이 아직 제안 상태로 표준화 과제로 남아 있습니다. networking과 같은 시스템 리소스는 아직은 WASI 표준에 포함되지 않았습니다. WASI가 제공하고자 하는 기능 중 filesystem 접근과 같은 일부 기능만 구현이 완료되어 표준화되었습니다.Wasm 바이너리는 Wasm 스펙에 따라 빌드된 모듈이 될 수도 있고, 컴포넌트 모델에 따라 빌드된 컴포넌트가 될 수도 있습니다.WASI API를 사용하여 Wasm 애플리케이션을 작성하려면 먼저 바이너리 유형을 선정해야 합니다. 사용하려는 Wasm 런타임이 지원하는 WASI 릴리스 버전을 참고합니다.모듈은 초기 버전인 WASI 0.1의 API를 사용할 수 있습니다.WASI P1 API는 WITX Interface Description Language(IDL)로 정의되었습니다. WASI 0.1 및 WITX에 대한 설명서는 WASI GitHub 저장소의 legacy 디렉터리에서 확인할 수 있습니다.컴포넌트는 2024년 2월에 출시된 WASI 0.2와 컴포넌트 모델을 사용합니다. 어떤 언어(예를 들어 Rust)에서 컴파일된 Wasm 컴포넌트는 다른 언어(예를 들어 Go)에서 컴파일된 컴포넌트와 연동될 수 있습니다. WASI 0.2는 WASI의 미래 기술을 제공합니다.WASI 0.2는 가장 최신의 WASI 릴리스입니다. WASI 0.2 및 컴포넌트 모델로 설계된 API는 WebAssembly Interface Type(WIT) Interface Description Language(IDL)로 정의됩니다. WIT API의 정의는 Wasm 컴포넌트 바이너리로 구성된 .wit 파일에 작성됩니다. WASI P2에는 다음 인터페이스가 포함되어 있습니다.WASI 0.2 API를 사용하면 WIT 정의와 Wasm으로 컴파일할 언어 간의 바인딩을 생성합니다. WIT에 대한 자세한 내용은 컴포넌트 모델 설명서의 WIT 섹션을 참고할 수 있습니다.WASI 애플리케이션을 작성하는 예제 프로그램을 작성해 보겠습니다.우선 호스트로 사용할 Wasm 런타임으로 Wasmtime을 설치합니다. Linux 및 macOS 사용자는 다음 스크립트로 설치할 수 있습니다.Windows 사용자는 https://github.com/bytecodealliance/wasmtime/releases 페이지에서 MSI 설치 프로그램을 다운로드하여 설치할 수 있습니다.이제 rustup 도구를 사용하여 Rust가 설치되어 있는지 확인합니다.Windows 사용자는 https://www.rust-lan
rust
한글과컴퓨터
WebAssembly(WASM) & WASI 2024 : 크로스플랫폼의 미래
• Wasm 기술과 WASI 인터페이스의 2024년 발전 방향과 그것이 가져올 변화를 알아보겠습니다.1. 어떤 프로그래밍 언어로도 개발WebAssembly(이하 Wasm)는 2015년부터 JavaScript의 느린 속도를 보완하기 위해 개발이 되었습니다.Wasm은 C, C++, JavaScript, Rust, Go, Python 등의 프로그래밍 언어로 작성된 소스 코드를 저수준의 바이트코드로 컴파일하여 웹 브라우저상에서 동작할 수 있도록 하는 런타임 환경으로 개방형 표준 기술입니다.Wasm 모듈로 컴파일할 수 있는 언어는 공식 웹사이트에서 확인할 수 있습니다.Emscripten 도구를 사용하면 C/C++ 언어로 작성된 프로그램을 Wasm 모듈로 변환할 수 있습니다.Rust는 기본적으로 C/C++과 유사한 형태로 Wasm 변환이 자연스러워 최근 Wasm 개발 언어로 많이 사용되고 있습니다. Wasm-bindgen 도구를 사용해서 Rust와 JavaScript 간의 코드를 연동할 수 있습니다.Wasm 런타임은 Wasm 바이너리 코드를 로드하고 실행할 수 있는 환경입니다. Wasm 바이너리를 실행하는 데 필요한 인프라를 제공합니다.Wasm의 가장 매력적인 특징은 샌드박스 실행 모델이라는 것입니다. 이러한 특징은 플랫폼의 보안이 샌드박스를 구현하는 Wasm 런타임에 의해 크게 좌우된다는 것을 의미합니다.V8은 Google Chrome과 Node.js에서 사용하는 Wasm 런타임입니다. 현재 다른 Wasm 런타임으로 Wasmer, Wasmtime, WasmEdge 등이 있으며 빠르게 진화하고 있습니다.• 여러 언어로 작성된 코드를 기계어에 가까운 속도로 웹 브라우저상에서 실행할 수 있습니다. 웹 브라우저에서 더욱 복잡하고 기능적인 애플리케이션의 개발을 가능하게 합니다.• Wasm 런타임에서 실행되는 코드는 샌드박스 안에서 메모리가 할당되고 기능이 제한됩니다. 기존의 웹 기술들과 동일한 수준의 보안을 제공합니다.• 40개 이상의 언어를 Wasm으로 컴파일할 수 있습니다. C, C++, Rust 등의 시스템 언어와, Go, Python, Ruby와 같은 garbage collection 언어까지 웹에서 실행할 수 있습니다.• Wasm은 중간 코드로 변환을 통해서 모든 주요 브라우저에서 지원하며, 여러 주요 런타임에서 대부분의 CPU(x86, ARM, RISC-V)와 Linux, Windows, macOS 및 비 Posix를 포함한 대부분의 OS를 지원합니다.Wasm의 장점들로 인해 데스크톱 앱과 동일한 품질과 성능의 웹 앱으로 활용되고 있습니다.웹 기반 UI/UX 디자인 및 프로토타이핑을 위한 협업 도구• Figma: 협업을 위한 인터페이스 디자인 도구스케치, 공유, 개선, 제작 및 아이디어 실현을 위한 3D 모델링 도구2D 및 3D 설계 워크플로우 최적화를 위한 CAD 자동화 도구2. 컴파일 한 번으로 어디서든 실행Wasm 기술을 웹 브라우저 이외의 환경에서도 실행하기 위해 표준화되고 있는 기술이 WebAssembly System Interface
rust
SK텔레콤
에이닷 RAG 기능 개발을 위한 Qdrant 벡터 DB 구축 (from source tarball)
에이닷에서 파인튜닝을 통해 각 도메인별 특화 데이터를 추가 학습시켜 맞춤형 모델을 만들고 있지만실시간으로 업데이트 되는 동적인 데이터에 대한 대응 그리고 할루시네션 억제, 모델 외부 데이터의 대한 접근을 위해서는 RAG 기능 활용하는게 옳은 선택이라고 합니다.RAG 기능 구현에 있어 VectorDB는 필수 솔루션이며, 여러 VectorDB 중에서 현재 플랫폼에서 스테이징으로 이용하고 있는 Qdrant 구축 내용을 공유하고자 합니다.일반적인 Cloud 솔루션, Kubernetes , Docker 방식이 아닌 정통(?) 방식의 source tarball를 이용한 컴파일 및 Qdrant Cluster 구성방식 입니다.위 링크 내용과 같이 Qdrant 설치에 있어 추천하는 Production 방식은 Qdrant Cloud, Kubernetes Helm, Qdrant Kubernetes Operator, Docker and Docker Compose 입니다.플랫폼에서는 대부분 On-premise 환경을 이용하기 때문에 Kubernetes와 Docker 방식이 적합한걸로 판단되었습니다.현재 내부 정책상 Redis, MongoDB, MySQL, Kafka 등 플랫폼에서 사용하는 주요 stateful 솔루션은 독립된 서버 호스트를 이용 Cluster로 구성하여 이용하고 있습니다.단일 솔루션의 장애가 다른 솔루션으로 전파되는걸 방지하는 목적이며, 그렇기 때문에 Kubernetes 방식은 차선택으로 우선순위가 밀리게 되었습니다.Docker 방식으로 구성을 검토하면서, Qdrant github의 Dockerfile 내부에서 소스파일 컴파일을 진행하는걸 확인했습니다.위 내용을 보면서 추가적인 Docker 레이어 없이 프로세스를 직접 컨트롤 할 수 있는 바이너리 형태로 서비스 운영이 가능하다고 판단하여 source tarball를 이용한 소스컴파일로 서비스 구성을 결정하였습니다.소스 컴파일은 Qdrant에서 추천하는 방식은 아닙니다. 그렇기 때문인지 컴파일을 위한 설명이 매우 미비합니다.Qdratn Github의 Dockerfile을 참고하여 컴파일 과정을 이해 하였고 아래 내용부터는 해당 과정을 정리하였습니다.• None Node : Cluster 구성을 위해 Baremetal 노드 3대 (VM구성시 최소 메모리는 6GB 이상 필요)• None 서비스 운영 환경에 따라 스펙이 변경되어야 하므로 상세 스펙은 생략• None 컴파일시 실제 메모리 사용이 6GB이상 발생하는것 확인 되었습니다.• None Network : 각 노드가 Master 역할을 하며, HA 위해 L4 스위치 이용하는걸 추천합니다.라이브러리 및 소스 다운로드로 위해 모든 노드들은 임시로 Outbound Any Open 된 상태가 되어야 합니다.참고로 Qdrant Github releases 에서 x86_64 범용 바이너리를 패키지를 제공하나 RHEL 8.x , RHEL 9.x , CentOS Stream 9 에서는 gcc 및 주요 라이브러리 버전 이슈로 사용이 어렵습니다.Qdrant는 Rus
docker
github
kubernetes
nodejs
rust
SK텔레콤
첫공부! Rust 란 무엇인가? Hello world는 찍어봐야죠?
Rust 에 대해서 공부및 정리 후 나만의 노하우와 지식을 공유한다• None Rust 를 통해서 첫 프로그램을 작성해본다. Hello World ?Rust는 현대적이고 안전한 시스템 프로그래밍 언어로, 메모리 안전성과 병행성을 강조하는 특징을 가지고 있다고 하네요.Mozilla에서 개발된 이 언어는 C나 C++과 같은 저수준 언어의 성능을 유지하면서도 메모리 안전성과 스레드 안전성을 보장한다고 하고요.이러한 Rust의 특징은 시스템 프로그래밍, 웹 개발, 임베디드 시스템 등 다양한 분야에서 널리 사용되고 있다고 하니 개발자로써 한번 써봐야겠죠?참고로 홈페이지는 아래와 같습니다.Rust는 메모리 안전성을 보장하는데, 이는 프로그램이 잘못된 메모리 접근으로 인한 버그를 방지합니다.또한, Rust 컴파일러는 컴파일 시간에 다양한 에러를 검출하여 개발자가 이를 미리 수정할 수 있도록 돕습니다.뛰어난 에러 메시지와 간결한 문법을 통해 Rust는 생산성을 향상시킵니다.Rust 컴파일러는 친절한 에러 메시지를 제공하여 개발자가 빠르게 오류를 해결할 수 있도록 돕습니다.또한, 강력한 타입 추론 시스템을 통해 코드를 더욱 간결하게 작성할 수 있습니다.Rust는 활발한 개발자 커뮤니티를 가지고 있습니다.Crate라 불리는 패키지 레지스트리를 통해 다양한 라이브러리를 사용할 수 있으며, 이는 개발 생산성을 높여줍니다.또한, Rust의 범용성은 다양한 분야에서 사용될 수 있음을 보여줍니다.다시말해서 Rust Crate는 Rust 언어에서 사용되는 라이브러리 또는 패키지를 가리킵니다.이러한 Crate들은 Rust 커뮤니티에 의해 만들어지며, 다양한 기능을 제공합니다.이것들은 크게 두 가지 범주로 나뉩니다표준 라이브러리 (std) 크레이트와 외부 크레이트.표준 라이브러리 크레이트는 Rust 프로그래밍 언어의 기본 기능을 제공하며, 외부 크레이트는 개발자들이 Rust로 다양한 프로젝트를 빌드할 때 사용할 수 있는 다양한 기능을 제공합니다.Rust의 크레이트는 crates.io라는 공식 저장소에서 찾을 수 있습니다. 거기에서는 수천 개의 크레이트가 제공되며, 이는 Rust 생태계의 풍부함을 보여줍니다.Rust는 안전하고 효율적인 병행 프로그래밍을 지원한다고 하는데요소유권 시스템과 함께 사용되는 스레드 안전성을 보장하는 기능들은 멀티스레드 환경에서 안전하게 프로그램을 작성할 수 있도록 돕는다고 하네요.또한, Rust의 '고양이의 발자국'(?) 철학을 따라, 데이터 경합 문제를 사전에 방지하여 병행성을 쉽게 다룰 수 있습니다.참고로, 고양이의 발자국 철학은 Rust 커뮤니티에서 사용되는 개념인데요.동시성 프로그래밍에 대한 접근 방식을 설명합니다.이 철학은 "Rust의 소유권 시스템과 타입 시스템은 고양이의 발자국처럼 작동해야 한다"라는 의미를 담고 있다고 하네요.고양이의 발자국은 다음과 같은 특징을 갖습니다:고양이는 유연하고 민첩하게 움직일 수 있습니다.마찬가지로, Rust 코드도 데이터를 쉽게 이동하고 복사할 수 있어야 합니다.Rust의 소유권 시스템은 데이터의 이동성을 강조하며, 이를 통해 불필요한 복사와 메모리 누수를 방지합니다.고양이는 다른 고양이나 개와 격렬한 경합을 피합니다.Rust도 다중 스레드 환경에서 데이터 경합을 피하기 위해 안전한 병행성을 지원합니다.이를 통해 Rust 코드는 안전하게 다중 스레드 환경에서 실행될 수 있습니다.고양이는 자신의 영역을 지키고 보호합니다.마찬가지로, Rust는 소유권 시스템을 통해 메모리 및 자원에 대한 접근을 제어하고 보호합니다.이를 통해 런타임 에러와 메모리 누수를 방지하며 안전한 프로그래밍 환경을 제공합니다.다시말해서 고양이의 발자국 철학은 Rust의 핵심 원칙 중 하나로, 안전하고 효율적인 병행 프로그래밍을 위한 기반을 제공합니다.Rust 코드가 고양이처럼 유연하고 안전하게 동작할 수 있도록 설계되어 있다고 하네요.기본으로 설치해본다. (1번선택)위와 같이 Rust is installed now. Great! 가 나오면 정상 설치된것임아래와 같이 설치버전을 확인해 볼 수 있습니다.컴파일은 아래와 같이 하면된다.Rust에 대한 간단한 내용이였고요..시작이 반이다라는 말을 항상 떠올리며, rust 에 익숙해질 때까지 달려야(?) 겠습니다.Rust는 안전성, 병행성, 생산성 등의 면에서 우수한 프로그래밍 언어라고 하고요.현대적인 소프트웨어 시스템을 개발하고자 하는 개발자들에게 매우 유용한 도구라고 하니 저도 한번 사용해 보려고 합니다.오늘의 블로그는 여기까지고요그럼 오늘하루도 건강하시고 행복한 하루되세요~나의 목표 및 다짐을 항상 내곁에 두기• None• None 나의 강점을 바탕으로 나의 일을 잘해냄으로써 타인과 사회를 아릅답게 만든다.• None 현재 내가 가진 능력으로 누군가에 도움이 될 수 있을까? 에 대해서 항상 생각하기• None 나는 블로그 생태계에서 IT 테크관련 파워블로거가 반드시 된다!• None 유튜브 시장(?)을 호령하는 100만 유튜버가 반드시 된다!! (feat. 100만 유튜버가 반드시 될 매직!!)• None 나는 꾸준히 공부하고 공부한것을 실천하는 창의적인 개발자가 된다.! (feat. devocean 개발&운영자가될 매직!!)• None• None 꾸준한 블로깅/기록법/독서법으로 넘버원이 아닌 온리원이 되보자.• None 천사불여일행(千思不如一行)을 항상생각하며 체화 및 각인시키자.• None "천번 생각하는것보다 한번 행동하는 것이 더 중요하다."• None• None 천리마도 한번에 열걸음을 뛸 수 없고, 느리고 둔한말이라도 열흘이면 하룻길을 간다.• None 모든 실수에는 마술이 숨어 있다. 따라서 나는 실수하면 실수할수록, 그런 실수에서 더 많이 배울수록 삶에서 더 많은 마술을 갖는다.조금이나마 제 글이 도움이 되셨다면, 아래 배너 링크를 통해서 네이버인플루언서 팬이되주시면 제가 컨텐츠를 생산(?)하는데 큰 도움이 될것 같습니다. ^^;
rust
Copyright © 2025. Codenary All Rights Reserved.