카테고리 없음
개발개발 ·
환영합니다!
#1 글을 작성하고 블로그를 관리해보세요.

마늘냄새폴폴님의 회원 가입을 진심으로 축하합니다. 이 글은 비공개로 작성돼 있습니다.
'편집'으로 내용을 바꾸시거나, 삭제 후 '새 글을 작성'하셔도 됩니다. 글뿐만 아니라 블로그의 각종 설정을 변경할 수도 있습니다. '블로그관리'를 확인해 보세요.
#2 다양한 스킨이 있어요.

티스토리에 있는 다양한 '스킨(https://www.tistory.com/skin)'도 살펴보세요. 블로그나 사이트를 쓰는 목적에 맞게 스킨을 고를 수 있습니다.
어떤 이야기를 주로 하실 건가요? 잘 생각해 보시고 마음에 드는 스킨을 고르세요. '스킨 편집'으로 다양한 커스텀과 홈 꾸미기를 적용하실 수도 있습니다.
#3 포럼에서 사람들과 소통하세요.

마지막으로, 쓰시다가 티스토리에 대해 궁금한 점이 있다면 '포럼(https://www.tistory.com/community/forum)'을 확인하세요.
찾기 어려울 땐 직접 질문을 해 보는 건 어떨까요? 친절한 티스터 분들이 바로 답변해 주실 거예요.
Rust와 Go
트위터에서 개발자들의 이야기를 듣다 보면, Go를 써서 치명적인 버그가 생겼다는 글과 그에 비해 Rust는 대단한 언어라는 글을 몇 번 본 적이 있습니다.
어떤 분은 운영체제만큼은 C로 개발하는 것이 일반적이었으나 마이크로소프트가 터미널 커널을 C에서 Rust로 바꾸고 있다는 게시글을 첨부하며 Rust를 찬양(?)하기도 했고요.
문득 궁금해졌습니다. Rust와 Go의 차이가 무엇이고, 왜 Go는 멸시받고 Rust는 흥하게 되었는지 말이죠.
이번 카테고리는 새로 시작하는 "GPT야 이것 좀 알려줘"입니다. 제 블로그 주제(자바, 스프링, CS, 알고리즘 문제)와는 어긋나지만 평소 궁금했던 내용을, GPT를 통해 더블체크 없이 상식을 쌓는 느낌으로 공부하는 카테고리입니다.
GPT로 얻은 정보는 '~이다' 체로, 제 생각은 '~습니다' 체로 적겠습니다.
첫 주제는 Rust와 Go, 그리고 프로그래밍 언어입니다.
Rust 넌 뭐길래 이렇게 사람들이 좋아해? (Rust의 장점)
Rust의 장점을 GPT에 물어보면 이렇게 답합니다.
• 메모리 안정성 : Rust는 buffer overflow나 null pointer dereferencing처럼 흔한 프로그래밍 에러로부터 보호하도록 설계되었다. 이는 취약점이나 충돌을 막아 준다. Rust의 ownership과 borrowing 시스템은 GC 없이도 메모리가 안전하고 효율적으로 관리되도록 보장한다.
• 성능 : Rust는 C나 C++처럼 높은 성능을 보여 주는 언어이다. zero-cost 추상화 같은 현대적인 특징들이 빠르면서도 유지하기 쉬운 코드를 작성하도록 돕는다.
• 동시성 : Rust의 ownership과 borrowing 시스템은 다른 언어에서 흔히 생기는 데드락이나 data race 없이 동시성 코드를 작성하기 쉽게 만들어 준다. async/await 문법은 비동기 코드를 쉽게 만들어 주며, 이는 네트워크나 웹 프로그래밍에서 특히 중요한 요소로 자리 잡고 있다.
• 안전성 : Rust의 안전 장치들은 정확하고 신뢰성 있는 코드를 작성하기 쉽게 만든다. 컴파일러가 컴파일 시점에 흔한 에러를 검사하고, 타입 시스템이 코드의 타입이 알맞고 일관적인지 보장한다. 덕분에 문제가 생기기 전에 버그를 잡기 쉬워진다.
• 커뮤니티 : Rust는 최고의 언어를 만들기 위해 최선을 다하는 활발한 오픈소스 커뮤니티를 갖고 있다. 그 안에서 높은 품질의 라이브러리와 도구가 많이 개발되어 왔고, 이는 Rust를 쉽게 시작할 수 있게 해 준다.
장점만 보면 어마어마하네요. 그럼 Rust와 Go가 이렇게까지 비교되는 이유를 알기 위해 둘의 차이를 물어봤습니다.
참고로 프롬프트는 "개발자들 사이에서 Go에 대한 인식이 Rust보다 낮다고 하더라. 어떤 부분에서 개발자들이 그렇게 말하는 건지 알고 싶어. 나는 C 생태계에 대해서 잘 모르니까 디테일하고 쉽게 설명해줘"라고 넣었습니다.
Rust와 Go의 차이점
1. 메모리 관리에 대한 접근 방식
Rust와 Go의 차이 중 하나는 메모리 관리 방식이다. Rust는 안전 장치를 갖추면서도 수동 메모리 관리를 제공한다. 반면 Go는 메모리 관리를 자동화하기 위해 GC를 도입했고, 이는 더 높은 메모리 사용과 일부 경우의 성능 저하로 이어졌다.
2. 동시성에 접근하는 방식
또 다른 차이는 동시성 문제에 접근하는 방식이다. Rust의 ownership과 borrowing 시스템은 동시성 코드를 더 안전하고 효율적으로 작성하도록 해 준다.
반면 Go는 채널과 고루틴으로 동시성을 내장 지원한다. 두 언어 모두 동시성 코드를 잘 다루지만, Rust의 ownership 시스템은 일부 경우에 추가적인 안정성을 보장한다.
3. 성능
성능 면에서 Rust는 일반적으로 Go보다 빠르다고 알려져 있다. 특히 CPU를 집중적으로 쓰는 작업에서 차이가 두드러진다. 메모리에 대한 low-level 제어와 GC를 채택하지 않은 선택이 고성능 애플리케이션에 잘 맞는다.
그러나 Go는 더 간단한 문법과 내장된 동시성 기능 덕분에 네트워크나 웹 애플리케이션을 만드는 데 탁월한 선택이 된다.
4. 사용처
Go는 컨테이너화(containerization)와 클라우드 인프라와 자주 연관된다. 넓은 범위에서 쓸 수 있는 범용 언어라는 뜻이다.
반면 Rust는 시스템 프로그래밍, 네트워크 프로그래밍, 그 밖의 low-level 코딩에서 자주 쓰인다.
정리하자면 Rust는 GC 없이 메모리를 관리해 성능이 뛰어나고, Go는 간결한 문법과 동시성 지원으로 네트워크·웹 애플리케이션에 강하다는 뜻이군요.
그런데 여기서 의문이 들었습니다. Java도 GC 때문에 느리다는 평가를 받았지만 이후 JIT 컴파일러 도입으로 성능을 크게 끌어올렸고, 이제 "Java는 느리다"는 옛말이 되었죠. 그럼 Go도 Java처럼 GC를 갖고도 성능을 끌어올릴 요소가 있지 않았을까 궁금해졌습니다.
Go와 JIT 컴파일러
Go도 Java와 비슷하게 GC로 메모리를 관리하면서도 높은 성능을 냈다. Go의 GC는 concurrent GC나 generational GC 같은 기술로 GC에 소모되는 시간을 최소화하도록 설계되었다.
Go 역시 Java처럼 JIT(Just-In-Time) 컴파일러를 도입해 런타임에 실행되는 코드를 최적화함으로써 성능을 끌어올렸다. 다만 Go의 JIT 컴파일러는 Java의 것만큼 발전하지는 않았다.
정리하면 Go도 GC를 가지고 성능 향상을 꾀했지만 Java만큼 드라마틱하지는 못했다는 말이군요.
오해하실까 봐 덧붙이면, 그렇다고 Java가 Go보다 빠르다는 뜻은 아닙니다. Java도 Go에 비하면 high-level 언어라 속도가 느린 것은 어쩔 수 없습니다.
이때 또 궁금해진 것이 파이썬입니다. 파이썬은 왜 그렇게 느릴까요? 제가 알던 이유는 high-level 중에서도 high-level이고 GC를 갖고 있기 때문인데, 제가 모르는 내용이 더 있을까 봐 GPT에 물어봤습니다.
파이썬
들어가기 전에 low-level과 high-level을 잠깐 짚겠습니다. 프로그래밍 언어는 낮아질수록 기계어에 가까워 기계가 이해하기 쉬우므로 속도가 빠릅니다. 대신 그만큼 진입 장벽이 높죠.
반대로 high-level로 갈수록 사람의 언어에 가까워 이해하기 쉽고 진입 장벽이 낮지만 속도가 느립니다.
이제 파이썬이 느린 이유를 하나씩 보겠습니다.
동적인 타이핑
파이썬은 동적 타이핑을 지원한다는 것이 첫 번째 이유이다. 변수의 타입이 런타임에 바뀔 수 있다는 뜻이고, 이는 메모리 사용과 실행 시간 양쪽에서 많은 오버헤드를 낳는다.
인터프리터에 의한 실행
파이썬은 인터프리터 실행을 바탕으로 하는데, 인터프리터는 바이트코드를 한 줄씩 실행한다. 이렇게 한 줄씩 실행하다 보니, 컴파일 시점에 모든 코드를 한 번에 해석하는 컴파일 언어와는 속도에서 차이가 날 수밖에 없다.
참고로 Java도 인터프리터를 씁니다.
GC의 존재
파이썬도 메모리 관리에 GC를 쓰는데 이는 성능에 영향을 줄 수 있다. 파이썬의 GC는 일반적으로 효율적이지만, 가끔 GC가 동작하는 동안 프로그램이 멈추는 상황이 생기기도 한다.
여기서 오해하시면 안 되는 것이, 모든 언어에서 속도가 전부를 좌우하지는 않는다는 점입니다. 파이썬은 AI와 머신러닝에서 가장 인기 있는 언어입니다.
NumPy, Pandas, SciPy, scikit-learn 같은 다양한 라이브러리와 도구로 데이터 분석, 과학 계산, 머신러닝을 지원하죠.
마치며
여기까지 GPT에게 Rust와 Go, 그리고 파이썬에 대해 물어봤습니다.
학교를 오가는 지하철에서 할 게 없었는데, GPT로 평소 몰랐던 것을 공부하니 시간도 빨리 가고 유익했습니다. 여러분도 한번 해 보시길 추천드립니다.
다만 주의하실 점은 영어로 질문하고 답을 받는 편이 품질 차이를 만든다는 것입니다. 영어로 주고받으시길 권합니다.
긴 글 읽어 주셔서 감사합니다. 오늘도 즐거운 하루 보내세요.