본문 바로가기

개발 이야기/Go 언어 이야기

Go vs Rust 언어 - 미래 전망은?

728x90

Go 와 Rust 라는 언어의 전망에 관한 의견을 아래와 같이 퍼왔습니다.

글이 길지만 읽다보면 Go 와 Rust의 장단점도 알 수 있고

그에따라 현 시점에서의 미래 전망을 알 수 있을 것 같습니다,

 

"""

미래 전망을 해보면... Go나 Rust 중 어느 것이 대세가 될까요? 현재는 TIOBE ranking

같은 것을 보면 Go는 순위권에 안착했고, Rust는 겨우 관심권에 든 정도라서, 이런 추세라면

Go가 대세 되기에 유리한 것 같긴 해요.

그런데 제 의견은... 어느 한쪽이 망해서 사라지는 일은 없겠지만, 10년 쯤 후에 Go는 특정

영역에서 사용되는 정도가 되고, Rust가 대세가 될 것 같아요. 왜 그렇게 추정하느냐고 물으면

딱히 설명을 못하겠고, 느낌적인 느낌이라고 해야할지 그렇기는 한데요. Python vs Ruby에서

Python이 대세가 되고, Ruby는 특정 영역에서 사용되는 상황하고 비슷하게 될 것 같다고

전망하는 겁니다.

 

 =>

이런 언어 전망 비교는 분야마다 다르기 때문에, 보통 어떤 분야에 사용하느냐에 따라 전망을 달리하는 경우가 많습니다.

Go 의 경우에는 언어가 단순하고 기능도 별로 없어서 불편하지만, 그냥 마음에 드는 언어라고 할까요.
불편해도 뭔가 새로운걸 만들땐 Go 를 항상 대상에 올려놓고 고려합니다.
특히 서버쪽은 정적 타이핑과 고루틴 덕분에 퍼포먼스도 좋습니다. gRPC를 사용하는 경우에는 저는 무조건 서버는 Go로 작성합니다.
다만, GC 때마다 stop the world 가 발생하기 때문에 대용량 트래픽에서 빠른 응답시간을 요하는 경우에는 좀 문제가 있어서 Rust 로 넘어가는 경우가 심심찮게 있습니다.

Rust는 GC가 없어서 서버용으로도 좋고, 속도도 빠르기 때문에 다양한 분야에서 C/C++ 이 차지하고 있던 부분을 대체할걸로 보입니다. Microsoft도 공식적으로 밀고 있긴합니다.
다만, 초기 러닝 커브가 너무 가파른 문제가 있어서 메인 스트림으로 부상하기에는 시간이 오래 걸리지 않을까 싶습니다.
처음에 객체 소유권 개념때문에 컴파일 하는것 자체가 고난의 연속입니다. 이것만 넘어가면 좀 쉽긴 합니다만...
지금도 새 버전 나오면서 문법이 바뀌는 경우도 생기고 해서, 아직 안정화되고 대중화되려면 좀 더 있어야할 듯합니다.
저같은 경우에는 CPU 속도가 중요한 경우나 wasm 개발시에 주로 사용하고 있습니다.

Go가 자바처럼 삽질만 하지 않고 개발자들이 원하는 기능들을 잘 추가해준다면, 당분간은 대중적으로 봤을 때는 Go와 Rust만의 비교라면 Go의 우세일듯합니다. Rust를 대중적으로 사용하는 날이 오려면 아직도 요원해보입니다.

 

==> 

Microsoft가 Rust 재단에 합류했네요?
Microsoft가 Rust 비슷한 새로운 언어를 만들려고 한다고 들었었는데요.

제 생각도 Rust가 가까운 장래에 대세가 되지는 않을 것 같구요.
5년 정도 후면 순위권에 들다가, 대세 되려면 10년 이상 되어야 할 것 같아요.
IT분야처럼 변화가 무지 빠른 분야에서 10년은 엄청 긴 시간이죠.

 

===>

저희 회사/팀에서도 서비스 만들 때 go와 러스트를 함께 쓰는데, 다 러스트로 하라고 하면 일정 맞추기 쉽지 않을 것 같습니다;;

MSA 기반 프로젝트를 진행하며, 초기에는 go를 쓰고 중후반에 리펙토링을 하면서 GC 없는 메모리 관리가 필요해 보이면 러스트로 부분부분 손 봐주는 식으로 상호 보완적으로 써주는게 현재로써는 답인 것 같습니다.

서비스는 그런 편인데, 프론트엔드나 데이터 팀에서는 저수준에서 연산 할 때 러스트 많이 쓰더군요. js나 py로 커버 안 되는 부분은 러스트가 워낙 좋다보니....

 

러스트 디버깅의 용이성과 go 개발 속도를 다 고려하면 전체적으로 큰 차이 없을 수 있죠. 더 쓰자면...

러스트는 컴파일러가 까다롭고, 만들고자 했던 기능을 구현 하는데 코드량이 go에 비해 길죠. 최근에 tokio가 v1에 도달하며 breaking change가 있었죠. 필수 라이브러리가 부족하진 않지만 이런 큰 변화가 앞으로도 빈번할 것 같습니다. 조심해야 할 부분인 것 같습니다.

go는 반대로 nil 에 접근해서 패닉 나는 것을 피하기 위해서 써야하는 코드량이 러스트에 비해 길죠. 다만 왠만해서는 생각한 대로 작성하는데 크게 거리낄게 없죠. 아쉬운 점은, 시스템 유틸이나 서비스 만드는 것 말고 다른 곳에 쓰이기가 쉽지 않은 것 같습니다.

go가 디버깅 하기에 어려울 수 있죠. 러스트에 비하면 어떤 언어도 디버깅이 쉽다고 할 수 없죠. 그래도 go를 쓰며 최대한 접근 영역을 명확히 나누고 csp에 맞게 코드를 짠다면 (고루틴들 간의 공유를 최대한 제한...), c 디버깅의 어려움에 비할 바는 아니라고 봅니다.

러스트는 프로젝트 초기에 mvp 뽑아서 뭔가 보여주기에는 걸리적 거리는게 많아서 개발 초기 단계에 쓰기에는 매니저 한테 불만 듣기 쉽상인데, 후기로 갈수록 자잘한 문제가 안 나오니 맘이 편하죠. 그래서 윗 댓글에 적은 것 같은 전략을 적용하고 있습니다. 처음에는 go로 빨리 개발해서 돌아가는 것을 보여주고, 나중에 리펙토링 할 때, 러스트로 바꿔가면서 안정화를 시키는거죠.

go와 러스트의 용도가 겹치는 부분이 꽤 있어서, 어느 쪽에 베팅 해야할지 고민이 되기도 합니다만, 둘 다 쓰는게 어려운 일도 아니고, 장단점이 극명하기 때문에 MSA 상황에서 적절하게 맞춰 쓰는게 최선이라고 생각 합니다.

 

=====>

기본적으로 미들웨어나 백엔드 서버등을 만들기엔 참 좋습니다.. 문제는 Go가 가진 가장 큰 장점중 하나가 고루틴인데 .. 흔히 시작하시는 분들이 고루틴과 쌍을 이루는 채널을 남발하다 피를 보시는 경우가 많구요.. 분명 좋은 개념이긴 한데 고루틴간의 채널을 통한 무언가를 하고자 각 잡고 들어가다 보면 지옥을 보실수 있습니다.. 전 그냥 고루틴 써도 .. 뮤텍스로 동기화 시켜버려요 ㅎㅎ .. GC문제는 .. 뭔가 Go가 메모리 관리가 좀 헐렁?합니다.. 한번 잡아논 메모리를 앵간하면 잘 풀지 않고 버티는 성향이 좀 있어서 .. GC가 커지면 효율이 급감하는 문제도 분명 있구요.. 제 경우 그래서 .. 강제로 중간중간 GC자체를 정리해 버리고 있습니다. 아직 러스트를 사용해야할 일은 거의 없어서 앞으로도 계속 Go를 애정할것 같긴 한데요.. 개인적으론 GUI관련된 쓸만하고 편리한 무언가가 나와주면 참 좋을것 같은데 .. 윈도 API 나 Gtk , Qt 같은건 참 .. ㅎㅎ 선택하기 쉽지 않죠 .. 일렉트론등을 써서 하이브리드 앱을 만들수도 있지만 네이티브 앱이 꼭 필요한 경우도 있어서..

그런 이유로 다른 언어 없이 Go만 가지고 할수 있는건 매우 한정적이긴 합니다. 저야 C/C++을 비롯한 많은 언어를
같이 쓰니까 부족한 부분은 dll 을 만들어서 끌어오던 여러 방법을 쓸수 있지만 .. Go하나만 가지고서는 쉽지 않죠

많이 좋아지긴 했지만 쓸만한 디버거가 별로 없다는것도 Go의 단점중 하나긴 합니다.. 초기에 비해선 vscode 로 디버깅 하는것도 많이 좋이지긴 했지만.. vc 따라가려면 어후 .......

어짜피 언어 하나만 가지고 모든것을 커버할순 없는 세상 아니겠습니까~

 

======>

백엔드 쪽에서는 Fiber 프레임워크를 주로 사용 하구요, GC나 고루틴은 어지간하면 라이브러리에서 잘 처리 되었는지 -_-a
웹 개발 쪽에는 신경 안쓰고 잘 사용 중입니다.

만든것 중에 제일 오래 쓰고 있는게, Fiber + Excelize를 사용해 DB로 엑셀/csv -> DB로 대량 등록하는 웹API 인데요.
지금 확인해보니 360일 동안 무중단으로 운용 되고 있습니다. ^^;

제 경우도 아쉬운게 있긴 하지만...Go에서는 함수에서 리턴값을 여러개 뺄 수 있는게 너무 너무 좋습니다. ㅠ.ㅠ 이게 단점을 모두 압살 하네요.
(확인 해보니 이건 Rust도 되는군요 ^^b)

 

"""

 

위의 글은 하기 링크에서 퍼와서 박제한 것 입니다.

링크는 여기 => www.clien.net/service/board/cm_app/15932430?od=T31&po=0&category=&groupCd=

 

 

(추가업데이트)

Go 언어 관련하여 한국어로 학습하기 좋은 사이트는 하기에서 시작하면 좋을 듯 합니다.

=> golang.site/

 

Rust 언어 관련 한국어로 시작하기 좋은 사이트는 하기와 같습니다.

=> rust-kr.org/

 

 

 

 

(사족1)

더 좋은 정보를 공유하도록 저에게 힘을 실어 보내주세요.

그런 의미에서 커피 한잔 사주실래요 ^^

=> https://www.buymeacoffee.com/openbini

 

 

 

 

(추가1)

이젠 여기저기 있는 중고거래앱들을 번거롭게 일일이 찾아드릴 필요가 없이 '무료나눔'앱 이거 하나만으로 중고거래앱들의 무료로 나눔하는 물품들을 검색해 볼 수 있습니다. 하기에서 다운로드 가능합니다.

:=> https://play.google.com/store/apps/details?id=com.opensupport.freenanumG 

 

무료나눔, 그냥드림, 중고거래 (한번의 검색으로 모든 중고장터를 득템하자!) - Google Play 앱

무료로 원하는 아이템을 득템하자!

play.google.com

 

 

(추가업데이트2)

'IT뉴스모아' 라고 오픈소스와 최신IT동향의 소식을 접할 수 있는 앱을 공유합니다.

다운로드는 하기에서 가능합니다.

:=> https://play.google.com/store/apps/details?id=com.opensupport.ITNewsMoa

 

IT뉴스모아 (최신 IT와 테크 뉴스를 한번에 모아서 보자!) - Google Play 앱

최신 IT와 테크 뉴스를 한번에 모아서 보자!

play.google.com

 

 

(추가3)

스택오버플로우 같이 국내 개발자 커뮤니티를 한데모아 보고 원하는 키워드로

검색해 볼 수도 있는 앱이 있습니다. '데브모아' 라는 앱인데 하기에서 다운로드 가능합니다.

:=> https://play.google.com/store/apps/details?id=com.opensupport.DevMoa 

 

데브모아 (한국의 개발자들 모두 모여라!) - Google Play 앱

한국의 개발자 커뮤니티를 모아서 보자!

play.google.com

 

 

 

그럼,

  정보 공유합니다.