러스트 자동 생성 코드가 프로그램 크기에 미치는 영향
1. 이게 뭔가요?
러스트는 프로그램의 안정성과 성능을 중요하게 여기는 프로그래밍 언어입니다. 러스트에서는 데이터 구조를 만들 때 화면에 내용을 보여주거나 복사하는 등의 기본적인 기능을 자동으로 덧붙여주는 유도 기능을 제공합니다. 이 글은 그 유도 기능을 사용할 때 컴퓨터가 코드를 처리하는 방식인 인라인 지시어가 자동으로 함께 포함된다는 사실을 다루고 있습니다. 인라인 지시어는 컴퓨터에게 이 작은 코드를 다른 곳에 끼워 넣라고 귀띔해 주는 역할을 합니다. 글쓴이는 간단한 구조에서는 이 방식이 좋지만, 크고 복잡한 오류 구조에서는 예상치 못한 문제를 일으킬 수 있음을 발견했습니다.
2. 왜 화제인가요?
보통은 자동으로 코드가 끼워 넣어지도록 처리하는 것이 성능 면에서 유리하지만, 오류 구조가 복잡하게 겹쳐 있는 경우에는 상황이 다릅니다. 복잡한 오류 구조에서 이 자동 설정이 그대로 작동하면, 컴퓨터가 똑같은 코드를 여러 곳에 반복해서 집어넣게 되면서 전체 프로그램 파일의 용량이 불필요하게 커지는 문제가 발생합니다. 글쓴이는 실제 프로그램인 유브이의 용량을 분석하는 과정에서, 디버그 기능을 나타내는 코드의 자동 끼워 넣기를 막는 것만으로도 프로그램 크기를 약 160킬로바이트 줄일 수 있다는 점을 확인했습니다. 컴파일러가 크기가 큰 코드나 반복 횟수에 대해 제한을 두지 않는다는 점이 이 글에서 주목하는 핵심 특징입니다.
3. 핵심 내용
러스트 언어에서는 디버깅 화면에 정보를 출력하거나 데이터를 복사하는 등의 기본적인 기능을 직접 길게 코딩하지 않고 자동으로 만들어내도록 지정하는 가장 흔한 방법 중 하나로 derive 단어를 사용하는 방식을 씁니다. 최근까지 잘 몰랐던 사실이지만, 러스트는 현재 이러한 기본 기능을 자동으로 만들어낼 때 그 부품 내부에 인라인이라는 특별한 힌트를 함께 붙여서 내보냅니다. 내용이 아주 단순하고 짧은 기능들은 이렇게 코드를 미리 심어두는 방식이 실행 속도를 높여주는 등 이득이 많기 때문에 대다수의 상황에서 유용합니다. 하지만 프로그램이 실행되다가 문제가 생겼을 때 오류를 단계별로 보여주는 복잡한 오류 상자 구조에서는 상황이 달라집니다. 에러 내용을 기록할 때마다 상당히 많은 양의 코드가 프로그램 곳곳에 반복해서 복사되며, 특히 프로그램 실행 과정을 기록하는 디버그나 추적 로그 기능을 사용할 때는 복사된 코드의 용량이 엄청나게 늘어날 수 있습니다. 실제로 파이썬 패키지 관리 도구인 유브이 프로그램에서 특정 에러 출력 기능이 무작정 복사되는 것을 막았더니, 전체 프로그램 파일 크기를 약 160킬로바이트 줄일 수 있었습니다. 이 결과는 프로그램 크기가 생각보다 훨씬 빠르게 불어난다는 점과 러스트 컴파일러가 에러 출력 기능이 복사되는 크기나 횟수에 대해 특별한 제한을 두지 않는다는 점을 보여줍니다. 글쓴이와 동료들은 겉모습은 똑같이 동작하지만 내부적으로는 복사해서 끼워 넣지 말라는 뜻인 인라인을 절대 하지 마라라는 지시를 포함하는 우리만의 특별한 매크로를 직접 만들어 이 문제를 해결했습니다.
4. 나에게 어떤 영향이 있나요?
일반 독자에게는 당장 직접적인 영향이 크지 않지만, 러스트 언어를 사용해 프로그램을 직접 개발하는 프로그래머들에게는 중요한 참고 사항이 됩니다. 복잡하고 깊게 중첩된 오류 구조를 다루는 대규모 프로그램을 만들 때, 자동 생성되는 디버그 기능 때문에 프로그램 파일 크기가 늘어나는 현상을 겪을 수 있습니다. 이 글의 방식처럼 개발자가 직접 매크로를 만들어 자동 끼워 넣기를 금지하는 설정을 적용하면, 불필요하게 커지는 프로그램 용량을 줄이는 개선 효과를 기대할 수 있습니다. 다만 이 영향은 프로그램의 구조와 개발 환경에 따라 다르게 나타나므로 모든 상황에 무조건 적용되는 해결책은 아니며, 세부적인 코드 작성 과정에서 고려해야 할 하나의 요령에 가깝습니다.