34.4. 최적화

대부분의 쉘 스크립트로는 별로 복잡하지 않은 문제를 간단하게 풀 수 있습니다. 이런 경우에는 속도를 위한 최적화는 별 이슈가 되지 않습니다. 하지만 아주 중요한 작업을 수행하는 스크립트일 경우, 제대로 돌긴 하지만 속도가 너무 느린 경우를 생각해 봅시다. 이 스크립트를 컴파일 언어로 다시 작성하는 것은 별로 좋은 생각이 아닙니다. 이럴 경우에 가장 간단한 방법은 속도를 떨어뜨리는 부분만을 다시 작성하는 것입니다. 코드 최적화의 이론들을 이 초라한 쉘 스크립트에도 적용할 수가 있을까요?

스크립트에 나오는 루프문을 살펴 보세요. 반복적인 연산들은 시간을 많이 잡아 먹습니다. time이나 times를 써서 계산을 많이 하는 명령어들의 시간을 재 보기 바랍니다. 어떤 부분에서 시간이 중요한 변수라면 이 부분을 C 나 어셈블러로 다시 짜는 것도 고려해 보기 바랍니다.

파일 I/O를 최소화 하세요. Bash 는 파일을 다루는데 특별히 효과적이지 않기 때문에 파일 연산이 필요한 곳에서는 awk 나 펄처럼 더 적당한 도구를 쓰는 것도 좋은 방법입니다.

스크립트를 구조적이고 논리적으로 만드세요. 이렇게 하면 나중에 필요할 때 다시 작성하거나 더 업데이트 된 버전을 만들수 있습니다. 고급 언어에 적용할 수 있는 몇몇 최적화 기법들도 스크립트에 써 먹을 수 있지만 루프 unrolling 같은 것은 거의 무의미합니다. 무엇보다도 상식적인 선에서 해결하도록 하세요.