회원가입을 하면 원하는 문장을
저장할 수 있어요!
다음
AWS 이용 중이라면 최대 700만 원 지원받으세요
최근 10년 사이에 등장한 두 개의 프로그래밍 언어가 있습니다. 이 두 가지 프로그래밍 언어는 주로 소프트웨어 개발에 사용되고 있으며, 현재도 발전 진행 중에 있습니다. 바로 모질라에서 탄생한 ‘러스트(Rust)’와 구글에서 만든 ‘고(Go)’인데요. 이 두 개의 프로그래밍 언어의 가장 큰 공통점은 비슷한 시기에 출시되었다는 점 외에도 둘 다 소프트웨어 개발에 사용되어 다양한 기능을 제공한다는 점입니다. 예를 들면 툴체인, 메모리 안전성, 오픈 소스 개발 등 개발자들이라면 꼭 필요한 여러 기능들이죠.
회원가입을 하면 원하는 문장을
저장할 수 있어요!
다음
회원가입을 하면
성장에 도움이 되는 콘텐츠를
스크랩할 수 있어요!
확인
최근 10년 사이에 등장한 두 개의 프로그래밍 언어가 있습니다. 이 두 가지 프로그래밍 언어는 주로 소프트웨어 개발에 사용되고 있으며, 현재도 발전 진행 중에 있습니다. 바로 모질라에서 탄생한 ‘러스트(Rust)’와 구글에서 만든 ‘고(Go)’인데요. 이 두 개의 프로그래밍 언어의 가장 큰 공통점은 비슷한 시기에 출시되었다는 점 외에도 둘 다 소프트웨어 개발에 사용되어 다양한 기능을 제공한다는 점입니다. 예를 들면 툴체인, 메모리 안전성, 오픈 소스 개발 등 개발자들이라면 꼭 필요한 여러 기능들이죠.
그래서 러스트와 고(Go)를 유사한 언어로 보며 비교하고, 어느 것이 우월한지 이야기를 하는 경우가 종종 있습니다. 그런데 여기서 우리가 알아야 하는 사실은 프로그래밍 언어로 개발됐지만, 서로 다른 목적으로 만들어졌다는 점입니다. 그래서 이번 편에서는 러스트와 고(Go), 두 언어를 사용할 때 어떠한 점을 기준으로 선택하면 되는지 중점을 두고 살펴보겠습니다.
먼저 대형 프로젝트에 더 적절한 언어를 살펴보면 고(Go)가 우세합니다. 고(Go)는 세계적인 빅테크 기업 구글에서 내놓은 언어인 만큼 여러 대형 프로젝트에 사용되고 있습니다. 그래서 사용 점유율도 해마다 늘어나는 등 IT 클라우드 시장에서 꾸준히 성장하고 있습니다. 그런데 고(Go)가 대형 프로젝트에 자주 이용되는 것은 단순히 빅테크 기업인 구글에서 만들었다는 이유가 전부는 아닙니다. 개발자들이 주로 사용하는 C, C++ 언어를 토대로 작업할 수 있는 연관성이 있기에 활용성이 높은 프로그래밍 언어로 평가받고 있습니다.
구글은 고(Go)를 개발한 이후 다양한 프로젝트에 활발히 사용하고 있는데요. 대표적으로 컨테이너의 배포, 관리, 확장, 네트워킹을 자동화하는 플랫폼 작업에 이용되고 있습니다. 구글 이외에도 드롭박스, 넷플릭스, 트위치 등 많은 글로벌 기업들도 고(Go)를 이용하고 있는데요. 주로 도커, 쿠버네티스 등 클라우드 기반의 대형 프로젝트에 쓰이고 있습니다.
우리나라의 개발자들도 고(Go)로 작업하는 경우가 많습니다. 개발자들이 고(Go)로 작업하는 분야는 이더리움 기반의 블록체인 기술을 담은 분산 컴퓨팅 플랫폼 작업, 명령어인 커맨드 도구, 사내 API를 개발하는 서브 언어 등입니다. 한편으로 고(Go)는 여러 분야에서 두루 사용되고 있는데, 몇 가지 기능이 생략되어 있어서 다른 프로그래밍 언어와 함께 우회해서 사용해야 하는 경우가 있어 단점이라는 평을 받기도 합니다.
반면 러스트는 대형 프로젝트에 쓰이는 사례가 아직 많지 않습니다. 최근에 아마존 웹서비스(AWS)가 보안 강화를 위해 인프라 일부분을 개발한 사례가 대표적이긴 하지만, 아직 대표적인 활용 사례는 많지 않습니다. 하지만 아마존 웹서비스(AWS)뿐 아니라 마이크로소프트(MS), 구글, 페이스북 등 글로벌 IT기업에서 조금씩 관심을 보이는 중입니다. 러스트의 대형 프로젝트 활용 사례는 아직은 미비하지만, 미래에는 활용도가 높아질 것으로 보입니다.
프로그래밍을 할 때 동시성과 병렬성은 곡 필요한 작업 중 하나인데요. 러스트와 고(G0) 두 언어 모두 동시성과 병렬성 구현이 가능합니다. 개발자가 러스트를 선택할 것인지, 고(Go)를 선택할 것인지는 개발자의 프로그램 환경과 개발자의 언어 구현 처리 능력 정도에 따라 택하면 됩니다.
먼저 고(Go)의 경우 많은 작업을 동시에 처리해야 하는 네트워크 서비스 등과 같은 애플리케이션을 동시에 사용할 수 있는 동시성을 지닙니다. 고(Go)의 동시성(Concurrency)은 두 개 이상의 작업을 같은 시간 내에 시작하고 실행하면서 종료될 때까지 상호 작용할 수 있는 작업을 말합니다. 이때 말 그대로 동시성 작업은 순차적으로 수행되는 것이 아니라 동시에 수행됩니다. 그리고 고(go)는 고루틴과 채널을 활용해 멀티코어 환경에서 병렬 처리를 쉽게 구현할 수 있습니다.
러스트도 동시성과 병렬성을 구현하는데요. 러스트의 멀티코어 하드웨어를 기반으로 하는 동시성은 메모리 안전성을 기반으로 이루어집니다. 러스트의 경우 복잡한 구문 규칙으로 사용이 어렵다는 말도 있지만, 장기적으로 보면 높은 내구성과 안정성을 구현한다는 평가를 받고 있습니다. 또한 러스트는 병렬성을 지원하면서 메모리 안정성을 보장하는 정적 타입 시스템도 제공합니다. 정적 타입 언어는 데이터와 해당 동작에 대한 컴파일러 검사 제한을 허용하면서 오버헤드와 오작동을 완화해 주는 역할을 하기 때문에 유용한 기능이라 할 수 있습니다.
메모리 관리 부분에 있어서도 러스트와 고(Go) 모두 안정성을 뒷받침하는 언어입니다. 먼저 고(Go)는 메모리 관리를 할 때 수천 라인의 고(Go)를 쓰면서도 메모리 할당이나 해제에 대해서는 생각하지 않아도 되는 안정성을 보장합니다. 예를 들면 런타임 가비지 수집기의 경우 개발자가 통제 가능한 영역이 있는데, 개발자 스스로가 가비지 수집 임곗값을 조절할 수 있기 때문에 작업의 방해 요인을 제거할 수 있어 메모리 관리를 안전하게 할 수 있습니다.
러스트의 경우도 메모리 관리의 안전성 부분에 최적화된 언어인데요. 특히 프로그래밍 작업이 수동 메모리를 이용할 경우 더 적절합니다. 경우 메모리 안전성이 확보되지 않은 프로그램은 컴파일이 되지 않기 때문에 안전도가 높을 수밖에 없습니다. 이는 가비지 수집이 없어도 러스트 자체로 소유권 기능이 작동되어 메모리 안전 관련 문제를 해결할 수 있기 때문입니다. 이러한 부분에 있어서 러스트의 메모리 관련 부분은 고(Go)보다 높다는 평가를 받기도 합니다.
그런데 러스트를 사용할 때 난관에 부딪칠 수도 있습니다. 러스트의 구문이 어렵기 때문에 학습이 필요하기 때문인데요. 이런 면에서 C, C++ 자바 등을 사용하는 개발자가 러스트를 사용하려면 먼저 러스트를 학습해야 한다는 난점도 존재합니다. 하지만 초기 진입에 대한 장벽을 넘을 수만 있다면 러스트의 메모리 안전성은 꽤 높다는 평가를 받고 있습니다.
프로그래밍에 있어서 속도 역시 중요한 요소입니다. 그런데 속도를 우선으로 할 때는 러스트가 조금 우세합니다. 그런데 이 역시 개발자가 러스트의 추상화에 대한 학습이 되어 있는 상태여야 합니다. 이러한 점이 해결되었다면 속도 면에서 러스트는 확실히 강점을 드러냅니다. 특히 프로그램의 메모리 취급과 처리를 위한 러스트의 제로 코스트(zero-cost) 런타임 추상화 부분에서도 C 및 C++와 대등할 정도여서 더욱 인정받고 있습니다. 왜냐하면 프로그램의 안전이나 편리함을 위한 성능 희생을 하지 않아도 되기 때문입니다.
이러한 면에 있어 고(Go)는 성능 프로그래밍 속도에 희생되는 면이 있습니다. 고(Go)의 경우 메모리 관리는 고(Go)의 런타임이 담당하는데, 이때 간접적인 처리 시간(오버헤드)이 발생하기 때문에 속도 면에서 다소 느릴 수 있습니다.
여기까지 오늘은 십년지기에 해당하는 프로그래밍 언어 러스트와 고(Go)를 어느 상황에 사용하면 되는지 적절한 기준에 대해서 살펴보았습니다. 이 두 가지 언어를 평가할 때 어느 것이 더 우월하다 말하기보다는 어느 때에 더 적절한가 하는 기준으로 사용해야 합니다. 또 개발자의 시간과 환경 그리고 언어 처리 능력 정도 여하에 따라 선택하는 것이 적절합니다. 소프트웨어 개발 프로젝트에 사용되는 이 두 언어 중. 러스트를 선택하든, 고(Go)를 선택하든 두 언어 모두 장점이 많은 언어임에는 틀림없는 듯합니다.
좋아요
댓글
공유
공유
좋아요
댓글
스크랩
공유
공유