Loading...
MySQL 9.5 Reference Manual 9.5의 27.3.9 Using WebAssembly Libraries의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
이 섹션에서는 C, C++ 또는 기타 코드를 WebAssembly로 컴파일하는 방법, 컴파일된 코드를 MySQL 라이브러리에 포함하는 방법, 그리고 그러한 라이브러리를 MySQL JavaScript 프로그램에서 사용하는 방법에 대해 설명합니다.
다음 예제들에서는 C 코드를 WebAssembly로 컴파일하기 위해 Emscripten 툴체인을 사용하며, 이에 대한 소스 또는 바이너리는
https://emscripten.org/docs/getting_started/downloads.html
에서 얻을 수 있습니다. 이어지는 설명에서는 Emscripten 설명서에 따라 이를 다운로드 및 설치했다고 가정합니다. 시작점으로는
https://emscripten.org/docs/getting_started/index.html
을 참조할 것을 권장합니다.
이 예제에서는 먼저 세 개의 단순한 함수들을 포함하는 다음 C 코드를 main.c라는 이름의 파일에 저장합니다:
1int foo() { return 42; } 2 3int bar(int x) { return x + foo(); } 4 5int my_add(int a, int b) { return a + b; }
아직 필요한 환경 및 기타 변수들을 현재 터미널 세션에 로드하지 않았다면, 진행하기 전에 다음에 표시된 명령을 사용하여 이를 수행해야 합니다:
1$> source ./emsdk_env.sh
이제 다음 Emscripten 명령을 사용하여 이 파일을 WebAssembly로 컴파일할 수 있어야 합니다:
1$> emcc --no-entry -s EXPORTED_FUNCTIONS=_foo,_bar,_my_add -o my_module.wasm main.c -O3
EXPORTED_FUNCTIONS에는 JavaScript 모듈이 import할 수 있도록 export되어야 하는 모든 C 함수들이 나열됩니다.
방금 생성한 WebAssembly 모듈은 이제 다음과 같이 JavaScript 저장 프로그램에서 로드하고, export된 함수들을 사용할 수 있습니다. 여기서 입력 파라미터 wasm_src는 my_module.wasm에서 로드된 바이너리 버퍼입니다:
1CREATE FUNCTION my_func(IN wasm_src LONGBLOB) RETURNS INT LANGUAGE JAVASCRIPT 2AS $$ 3 // Create a new WebAssembly module instance 4 const wasmModule = new WebAssembly.Module(wasm_src) 5 let wasmInstance = new WebAssembly.Instance(wasmModule) 6 7 // Access exported functions through its exports member 8 let expect42 = wasmInstance.exports.foo(); 9 console.log("expect42: ", expect42); 10 11 let expect49 = wasmInstance.exports.bar(7); 12 console.log("expect49: ", expect49); 13 14 let expect3 = wasmInstance.exports.my_add(1, 2); 15 console.log("expect3: ", expect3); 16 17 return 0; 18$$;
my_func()을 테스트하려면 먼저 다음 SQL 문을 실행하는데, 경로는 로컬 환경에 맞게 조정합니다:
1mysql> SET @wasm_content=LOAD_FILE('path/to/my_module.wasm');
SQL LOAD_FILE() 함수를 사용하려면 FILE 권한이 있어야 합니다.
secure_file_priv 서버 시스템 변수 또한 데이터 가져오기 및 내보내기 작업에 영향을 미칩니다. 자세한 내용은 이 변수를 설명한 내용을 참조하십시오.
이제 다음과 같이 함수를 호출하고 그 출력을 확인할 수 있습니다:
1mysql> SELECT my_func(@wasm_content); 2+-------------------------+--------------+ 3| my_func(@wasm_content) | expect42: 42 4 expect49: 49 5 expect3: 3 | 6+-------------------------+--------------+
27.3.8 Using JavaScript Libraries
27.3.10 JavaScript GenAI API