3장. 효율성 정복하기
이 작품은 AI를 사용하여 번역되었습니다. 여러분의 피드백과 의견을 환영합니다: translation-feedback@oreilly.com
이제 실행 시간입니다! 1장에서는 소프트웨어 효율성이 중요하다는 것을 배웠습니다. 2장에서는 Go 프로그래밍 언어의 기초와 고급 기능에 대해 공부했습니다. 그 다음에는 읽기 쉽고 쓰기 쉬운 Go의 기능에 대해 논의했습니다. 마지막으로 효율적인 코드를 작성하는 데에도 효과적인 언어가 될 수 있다는 점을 언급했습니다.
의심할 여지 없이, 프로그램에서 더 나은 효율성을 달성하는 것은 노력 없이는 불가능합니다. 어떤 경우에는 개선하려는 기능이 이미 잘 최적화되어 있어 시스템 재설계 없이 추가 최적화를 시도해도 시간이 많이 걸리고 미미한 차이만 있을 수 있습니다. 그러나 현재 구현이 매우 비효율적인 경우도 있을 수 있습니다. 낭비되는 작업의 인스턴스를 제거하면 단 몇 시간의 개발자 시간만으로 프로그램의 효율성을 개선할 수 있습니다. 엔지니어로서 진정한 기술은 짧은 시간 동안의 조사를 통해 현재 어떤 상황에 처해 있는지 파악하는 것입니다:
-
성능 측면에서 개선이 필요한 부분이 있나요?
-
그렇다면 낭비되는 사이클을 제거할 수 있는 가능성이 있나요?
-
함수 X의 지연 시간을 줄이려면 얼마나 많은 작업이 필요하나요?
-
전체적으로 의심스러운 할당이 있나요?
-
네트워크 대역폭을 과도하게 사용하는 것을 중단하고 대신 메모리 공간을 희생해야 할까요?
이 장에서는 이러한 질문에 효과적으로 답하는 데 도움이 되는 도구와 방법론을 알려드립니다.
이러한 기술에 어려움을 겪고 계시더라도 걱정하지 마세요! 정상입니다. 효율성 주제는 사소한 것이 아닙니다. 수요에도 불구하고 이 분야는 여전히 많은 사람들이 마스터하지 못하고 있으며, 심지어 주요 소프트웨어 업체들도 때때로 잘못된 결정을 내리는 경우가 있습니다. 고품질의 소프트웨어처럼 보이는 제품이 비효율성이 상당히 명백한 상태로 출시되는 경우가 얼마나 자주 있는지 놀라울 정도입니다. 예를 들어, 2021년 초에 한 사용자가 소스 코드에 액세스하지 않고 인기 게임인 Grand Theft Auto Online의 로딩 시간을 6분에서 2분으로 최적화한 적이 있습니다! 1장에서 언급했듯이 이 게임은 1억 4천만 달러라는 엄청난 비용과 몇 년의 제작 기간이 소요되었습니다. 하지만 이 게임은 순진한 JSON 파싱 알고리즘과 중복 제거 로직으로 인해 대부분의 게임 로딩 시간이 걸리고 게임 경험을 악화시키는 명백한 효율성 병목 현상이 있었습니다. 이 사람의 작업은 훌륭하지만 여러분이 배우려는 것과 동일한 기술을 사용했습니다. 유일한 차이점은 우리의 작업이 조금 더 쉬울 수 있다는 것입니다. 즉, C++ 코드로 작성된 바이너리를 리버스 엔지니어링할 필요가 없다는 것입니다!
앞의 예에서 게임 개발사는 게임 로딩 성능에 영향을 미치는 명백한 연산 낭비를 놓쳤습니다. 이 회사는 이 부분을 최적화할 전문가를 구할 리소스가 없었을 가능성이 높습니다. 대신, 더 우선순위가 높은 개발 ...