machine code를 직접 생성하는 컴파일러 언어로는 무려 30년 이상 C/C++ 언어가 주로였는데요.
그러다가 최근...이라기에는 나이가 5년 10년 이상씩 되었지만, 관심권에 들게 된 게 C/C++에
비해서는 훨씬 짧은 5년 정도이기 때문에... 아무튼 최근에 Go와 Rust가 독자 생존 가능한 수준으로
생태계를 확보하고, 관심도 많이 받고 있는 상황이죠.
앞으로는 Go나 Rust가 C/C++을 대체할 것이라는 전망도 많고, 실제로 C/C++을 대체해서
Go나 Rust를 사용하는 영역과 사례가 늘어나고 있기도 합니다.
그럼 미래 전망을 해보면... Go나 Rust 중 어느 것이 대세가 될까요? 현재는 TIOBE ranking
같은 것을 보면 Go는 순위권에 안착했고, Rust는 겨우 관심권에 든 정도라서, 이런 추세라면
Go가 대세 되기에 유리한 것 같긴 해요.
그런데 제 의견은... 어느 한쪽이 망해서 사라지는 일은 없겠지만, 10년 쯤 후에 Go는 특정
영역에서 사용되는 정도가 되고, Rust가 대세가 될 것 같아요. 왜 그렇게 추정하느냐고 물으면
딱히 설명을 못하겠고, 느낌적인 느낌이라고 해야할지 그렇기는 한데요. Python vs Ruby에서
Python이 대세가 되고, Ruby는 특정 영역에서 사용되는 상황하고 비슷하게 될 것 같다고
전망하는 겁니다.
다른 분들은 어떻게 생각하시나요? 공식 기관에서 전망한 자료 같은 것이 혹시 있을까요?
rust는 c/c++ 영역을 대체하지 않을까 싶네요.
근거는 없고 그냥 느낌적인 느낌 입니다.ㅎㅎ
Go가 네트웍 쪽으로 프로그래밍하기 좋다는 얘기가 있던데, 그에 따른 추정이신 듯 하네요.
네 실제로 제가 java로 웹서버 개발합니다..
개인 프로젝트엔 go를 쓰는데 좋습니다 ㅎㅎ
갑자기 또 귀가 팔랑팔랑 하는??? ㅎㅎ
Go 의 경우에는 언어가 단순하고 기능도 별로 없어서 불편하지만, 그냥 마음에 드는 언어라고 할까요.
불편해도 뭔가 새로운걸 만들땐 Go 를 항상 대상에 올려놓고 고려합니다.
특히 서버쪽은 정적 타이핑과 고루틴 덕분에 퍼포먼스도 좋습니다. gRPC를 사용하는 경우에는 저는 무조건 서버는 Go로 작성합니다.
다만, GC 때마다 stop the world 가 발생하기 때문에 대용량 트래픽에서 빠른 응답시간을 요하는 경우에는 좀 문제가 있어서 Rust 로 넘어가는 경우가 심심찮게 있습니다.
Rust는 GC가 없어서 서버용으로도 좋고, 속도도 빠르기 때문에 다양한 분야에서 C/C++ 이 차지하고 있던 부분을 대체할걸로 보입니다. Microsoft도 공식적으로 밀고 있긴합니다.
다만, 초기 러닝 커브가 너무 가파른 문제가 있어서 메인 스트림으로 부상하기에는 시간이 오래 걸리지 않을까 싶습니다.
처음에 객체 소유권 개념때문에 컴파일 하는것 자체가 고난의 연속입니다. 이것만 넘어가면 좀 쉽긴 합니다만...
지금도 새 버전 나오면서 문법이 바뀌는 경우도 생기고 해서, 아직 안정화되고 대중화되려면 좀 더 있어야할 듯합니다.
저같은 경우에는 CPU 속도가 중요한 경우나 wasm 개발시에 주로 사용하고 있습니다.
Go가 자바처럼 삽질만 하지 않고 개발자들이 원하는 기능들을 잘 추가해준다면, 당분간은 대중적으로 봤을 때는 Go와 Rust만의 비교라면 Go의 우세일듯합니다. Rust를 대중적으로 사용하는 날이 오려면 아직도 요원해보입니다.
Microsoft가 Rust 비슷한 새로운 언어를 만들려고 한다고 들었었는데요.
제 생각도 Rust가 가까운 장래에 대세가 되지는 않을 것 같구요.
5년 정도 후면 순위권에 들다가, 대세 되려면 10년 이상 되어야 할 것 같아요.
IT분야처럼 변화가 무지 빠른 분야에서 10년은 엄청 긴 시간이죠.
MSA 기반 프로젝트를 진행하며, 초기에는 go를 쓰고 중후반에 리펙토링을 하면서 GC 없는 메모리 관리가 필요해 보이면 러스트로 부분부분 손 봐주는 식으로 상호 보완적으로 써주는게 현재로써는 답인 것 같습니다.
서비스는 그런 편인데, 프론트엔드나 데이터 팀에서는 저수준에서 연산 할 때 러스트 많이 쓰더군요. js나 py로 커버 안 되는 부분은 러스트가 워낙 좋다보니....
rust가 라이브러리가 부족하다는 뜻인지, 언어가 까다로와서 코딩하기 어렵다는 뜻인지, 아님 다른 이유인가 해서요.
제 생각은...
rust가 코딩하기 까다롭기는 한데, 그만큼 디버깅 시간을 줄여주니까 전체적으로는 큰 차이가 없을 것 같구요.
go는 실제로 써본 적은 없지만 잠깐 봤을 때, 코딩하기는 쉬운데 디버깅할 때는 거의 C에 근접하게 어려움을 줄 것 같더군요. runtime error가 많을 것 같아서요.
러스트 디버깅의 용이성과 go 개발 속도를 다 고려하면 전체적으로 큰 차이 없을 수 있죠. 더 쓰자면...
러스트는 컴파일러가 까다롭고, 만들고자 했던 기능을 구현 하는데 코드량이 go에 비해 길죠. 최근에 tokio가 v1에 도달하며 breaking change가 있었죠. 필수 라이브러리가 부족하진 않지만 이런 큰 변화가 앞으로도 빈번할 것 같습니다. 조심해야 할 부분인 것 같습니다.
go는 반대로 nil 에 접근해서 패닉 나는 것을 피하기 위해서 써야하는 코드량이 러스트에 비해 길죠. 다만 왠만해서는 생각한 대로 작성하는데 크게 거리낄게 없죠. 아쉬운 점은, 시스템 유틸이나 서비스 만드는 것 말고 다른 곳에 쓰이기가 쉽지 않은 것 같습니다.
go가 디버깅 하기에 어려울 수 있죠. 러스트에 비하면 어떤 언어도 디버깅이 쉽다고 할 수 없죠. 그래도 go를 쓰며 최대한 접근 영역을 명확히 나누고 csp에 맞게 코드를 짠다면 (고루틴들 간의 공유를 최대한 제한...), c 디버깅의 어려움에 비할 바는 아니라고 봅니다.
러스트는 프로젝트 초기에 mvp 뽑아서 뭔가 보여주기에는 걸리적 거리는게 많아서 개발 초기 단계에 쓰기에는 매니저 한테 불만 듣기 쉽상인데, 후기로 갈수록 자잘한 문제가 안 나오니 맘이 편하죠. 그래서 윗 댓글에 적은 것 같은 전략을 적용하고 있습니다. 처음에는 go로 빨리 개발해서 돌아가는 것을 보여주고, 나중에 리펙토링 할 때, 러스트로 바꿔가면서 안정화를 시키는거죠.
go와 러스트의 용도가 겹치는 부분이 꽤 있어서, 어느 쪽에 베팅 해야할지 고민이 되기도 합니다만, 둘 다 쓰는게 어려운 일도 아니고, 장단점이 극명하기 때문에 MSA 상황에서 적절하게 맞춰 쓰는게 최선이라고 생각 합니다.
C를 이해하고 사용할 수 있으면 go도 편하게 접근할 수 있을 듯 해요.
하지만, java나 다른 스크립트 언어를 사용하던 사람들 입장에서는 불편하게 보이겠더군요.
한편으로 피로곰님 말씀도 이해가 되죠. 그래서 깊이 팔 때는 rust를 사용한다는 얘기도 위에서 나오는 것이구요.
지금은 그나마 선택지는 늘어났으니 그런 면에서는 좋아지긴 했네요.
러스트는 컴파일러 선생님께서 넘 빡빡하시다고 ㅋㅋ
저도 Go는 자바 대체용으로 쓰일것 같아요.
코어나 보안이 중요한 곳은 러스트가 쓰일 듯 하고요.
그런 이유로 다른 언어 없이 Go만 가지고 할수 있는건 매우 한정적이긴 합니다. 저야 C/C++을 비롯한 많은 언어를
같이 쓰니까 부족한 부분은 dll 을 만들어서 끌어오던 여러 방법을 쓸수 있지만 .. Go하나만 가지고서는 쉽지 않죠
많이 좋아지긴 했지만 쓸만한 디버거가 별로 없다는것도 Go의 단점중 하나긴 합니다.. 초기에 비해선 vscode 로 디버깅 하는것도 많이 좋이지긴 했지만.. vc 따라가려면 어후 .......
어짜피 언어 하나만 가지고 모든것을 커버할순 없는 세상 아니겠습니까~
여튼 저는.. 곧 죽어도 Go! ㅎㅎㅎㅎㅎ
Go의 불편한 점을 잘 이해하시고 적응도 잘 하신 것 같네요 ㅎㅎ
제대로 이해하고 문제점 피할 만큼 익숙하게 사용할 수 있다면 그게 좋은 언어겠죠.
널리 쓰이는 언어라도 어느 언어나 장단점이 있기 마련이니까요.
혹시 어떤 프로그램인지 알 수 있을까요? 직접 프로그램을 얘기하기 어려우시면 어떤 종류인지라도요.
그나마 Go는 이거라도 있기는 한데...
https://github.com/lxn/walk
Go를 다양하게 활용할 수 있네요.
저도 Go를 다양하게 활용할 수 있도록 사용해봐야겠어요.
WinForm까지는 아니라도 MFC수준만이라도 되어줬음 좋겠습니다.
저도 데스크탑 앱은 웹으로 만드는것 보다는 네이티브 UI를 선호하거든요.
반면 Rust는 개인프로젝트로 꽤 쓰이고 있었습니다.
c/c++ 사용할 수 있는 곳이면 어디든 사용할 수 있는 것 같습니다.
go는 네트웍 쪽 프로그래밍에 편한 등의 이유 때문에 서버단에서 많이 사용하는 것 같네요.
백엔드 쪽에서는 Fiber 프레임워크를 주로 사용 하구요, GC나 고루틴은 어지간하면 라이브러리에서 잘 처리 되었는지 -_-a
웹 개발 쪽에는 신경 안쓰고 잘 사용 중입니다.
만든것 중에 제일 오래 쓰고 있는게, Fiber + Excelize를 사용해 DB로 엑셀/csv -> DB로 대량 등록하는 웹API 인데요.
지금 확인해보니 360일 동안 무중단으로 운용 되고 있습니다. ^^;
제 경우도 아쉬운게 있긴 하지만...Go에서는 함수에서 리턴값을 여러개 뺄 수 있는게 너무 너무 좋습니다. ㅠ.ㅠ 이게 단점을 모두 압살 하네요.
(확인 해보니 이건 Rust도 되는군요 ^^b)
java를 대체할 거라는 얘기도 그래서 나오는가 봐요?
해당 API의 경우 고객사에서 보통 1회 처리할때 20~90만줄 정도 처리를 하는데요,
저는 고루틴을 그런데 쓰는줄 몰랐네요 -_-..
엑셀 읽고 DB insert 하는 프로세스는 로컬에서 동작 되도록 따로 만들어 둔다음에 (xls_to_db.exe)
이벤트가 발생되면 xls_to_db_UUID.exe 이런식으로 복제되어서 실행 완료되면 os.Exit() 하도록 쓰고 있었습니다.
다음에는 고루틴으로 시도 해봐야겠습니다. 감사합니다. ㅎ.ㅎb
저는 언어만 보면 swift 가 정말 마음에 들었기 때문에 오픈소스화 되기도 했으니 다양하게 쓰이길 바랬지만 무리였던 것 같습니다. ㅎㅎㅎ
이래서는 Swift는 사용하기 힘들거 같습니다.
아니 swift 에서는 c++ 을 사용을 못하...는건 아닌데 정수형, 실수형등의 원시 데이터타입만 받을 수 있는 상황 때문에 결국 C++ 이용하는 부분만 Objective-C 를 사용하긴 했습니다.
아니 그런데 아직도 안되는것이었군요. 앞으로도 안되려나 보네요 ㅠ.ㅠ
하지만 그 외의 부분에서는 전부 swift 로만 작업하긴 했습니다. ㅎㅎㅎ
제가 C/C++부터 프로그래머를 시작했습니다만...
어떻건 기본에 충실하라고 하셨는데
어떤 게 충실해야 할 기본인가요?
그 내용은 안 적으셔서요.
저는 두셋 언어에 집중하고 싶은데, 요새는 배우면 좋은 언어가 넘넘넘 많습니다.