최근 Future Flutter 행사에 다녀오면서 플러터를 다양한 환경에서 사용하고 있는 분들을 많이 만나게 되었다. 이번 주에는 이와 관련된 지식들을 포스팅을 통해 정리해보려 한다.
첫 강연은 Unity의 리핵님이 진행하신, 플러터에서 Go 언어를 사용하는 방법에 대한 내용이었다. 가장 먼저 떠오른 생각은 '왜 Dart가 아닌 Go를 사용해야 하는가?'였다.

Go는 C 언어를 기반으로 한 비교적 저수준(Low-level) 언어다.
저수준 언어란 사람이 작성하는 코드가 컴퓨터가 이해할 수 있는 기계어로 변환되는 과정이 짧다는 것을 의미한다.
저수준 언어는 프로그래머가 코드를 작성하기 어렵지만 빌드와 런타임 속도가 빠르다.
반면, 고수준 언어는 작성하기 쉽지만 속도가 상대적으로 느리다는 단점이 있다.
C를 기반으로 한 C++, C#, Go 같은 언어들은 Dart보다 상대적으로 빠른 속도로 복잡한 계산을 효율적으로 처리할 수 있기 때문에, 강연자님도 Go를 선택했다고 하셨다.
사실 다른 언어를 사용하는 방법은 네이티브 환경에서도 충분히 가능하다.
그럼에도 불구하고 플러터를 선택한 이유는 크로스 플랫폼의 이점과 스키아 엔진의 효율적인 렌더링 때문이라고 언급하셨다.
비즈니스 로직과 연산은 Go로 처리하고 UI는 보여주기만 하면 되는 Go 모듈 환경에서 크로스 플랫폼을 지원하는 플러터는 리소스의 낭비가 없는 적합한 선택이었고,
스키아 엔진의 효율적인 렌더링 덕분에 변경된 부분만 빠르게 업데이트할 수 있는 Hot reload가 가능했다.
FFI(Foreign Function Interface) 플러그인을 활용하여 Go 모듈을 가져올 수 있다. 기본적으로 lib 안의 main 함수에서 src 안의 Go 모듈을 호출해 결과를 리턴받고, 이를 UI에 적용하는 방식이다.
기본적으로 지원되지 않기 때문에 안드로이드와 iOS용으로 각각 크로스 컴파일을 해줘야 하며, FFIgen 파일을 통해 함수별 바인딩도 설정해야 한다.
자세한 방법은 해당 링크를 참고하면 된다.
https://dev.to/leehack/how-to-use-golang-in-flutter-application-golang-ffi-1950
그러면 Go 모듈을 활용한 고성능, 고효율 앱은 어디에 사용할까?
한 참가자가 이에 대해 질문을 했고, 강연자님은 대표적으로 머신러닝을 언급했다.
머신러닝이 일반적인 환경에서 자주 사용되지는 않지만, 플러터에서 이런 방식으로 활용하는 것도 가능하다는 것을 보여준 강연이었다.
또한, 유니티 개발자로 근무하시는 분이라 게임 환경에서의 최적화도 고려하셨을수도 있을 것 같았다.
출처 : 리핵@Unity 님의 FFI로 연결하는 고(Go)와 플러터
Future Flutter에서의 강연을 기반으로 작성되었으며, 문제 시 삭제하겠습니다.