우리는 순수 최적화의 기술을 잃어버린 것일까요?
초기 엔지니어들은 매우 제한적인 환경에서 작업했습니다. 아폴로 유도 컴퓨터(Apollo Guidance Computer)의 RAM은 단 2KB뿐이었습니다. 모든 비트가 중요했고, 모든 CPU 사이클이 필수적이었습니다.
오늘날 우리는 기가바이트 단위의 메모리를 사용합니다. 우리는 종종 더 많은 하드웨어를 추가함으로써 문제를 해결하곤 합니다. 코드가 느리거나 무거우면 RAM을 더 추가합니다. 이러한 습관은 우리에게서 순수 최적화의 기술을 앗아갑니다.
제약 조건을 고려함으로써 더 나은 소프트웨어를 작성할 수 있습니다.
Python에서 대용량 텍스트 파일을 처리하는 방식을 살펴보겠습니다.
일반적인 방식: 많은 개발자가 파일 전체를 한 번에 메모리로 읽어 들입니다.
f.readlines()를 사용합니다.- 이는 모든 줄을 RAM 내의 리스트로 로드합니다.
- 파일 크기가 10GB라면, 10GB의 RAM이 필요합니다.
- 이 방식은 사양이 낮은 서버나 제한된 기기에서는 작동하지 않습니다.
최적화된 방식: 파일을 한 번에 한 줄씩 처리합니다.
- 파일 객체를 직접 반복(iterate)합니다.
- Python은 한 줄을 읽고, 처리한 뒤, 다음 줄로 넘어갑니다.
- 메모리 사용량이 낮고 일정하게 유지됩니다.
- 파일이 1MB이든 100GB이든 상관없습니다.
이 차이는 엔지니어링 철학에 관한 것입니다.
리소스를 추가하는 것은 임시방편일 뿐입니다. 이는 취약한 소프트웨어를 만듭니다. 제약 조건을 설계의 핵심으로 삼는 것이 견고한 소프트웨어를 만듭니다.
최적화는 단순히 속도에 관한 것이 아닙니다. 리소스를 세심하게 고려하는 것에 관한 것입니다.
코드를 작성할 때 스스로에게 물어보세요:
- 이 코드는 메모리를 얼마나 사용하는가?
- 데이터가 10배로 커져도 잘 작동할 것인가?
- 나쁜 코드를 감추기 위해 고가의 하드웨어에 의존하고 있지는 않은가?
더 나은 소프트웨어는 절제된 습관에서 나옵니다.
출처: https://dev.to/prabashanadev/have-we-lost-the-art-of-pure-optimization-31b9