소개
이 실습에서는 명령어와 프로그램의 실행 시간을 측정하는 강력한 유틸리티인 Linux 의 time 명령어를 살펴봅니다. 여러분은 TechInnovate 의 주니어 소프트웨어 개발자로서 데이터 처리 스크립트 세트를 최적화하는 업무를 맡았습니다. 팀장은 성능 병목 지점을 식별하기 위해 time 명령어를 사용할 것을 제안했습니다. 이 실습 경험을 통해 time을 사용하여 코드의 효율성을 평가하고 개선하는 방법을 배우게 됩니다.
이 실습에서는 명령어와 프로그램의 실행 시간을 측정하는 강력한 유틸리티인 Linux 의 time 명령어를 살펴봅니다. 여러분은 TechInnovate 의 주니어 소프트웨어 개발자로서 데이터 처리 스크립트 세트를 최적화하는 업무를 맡았습니다. 팀장은 성능 병목 지점을 식별하기 위해 time 명령어를 사용할 것을 제안했습니다. 이 실습 경험을 통해 time을 사용하여 코드의 효율성을 평가하고 개선하는 방법을 배우게 됩니다.
time 명령어는 명령어 실행 중에 소비된 리소스에 대한 통찰력을 제공하는 다재다능한 도구입니다. 먼저 간단한 파일 작업의 시간을 측정하는 것부터 시작해 보겠습니다.
먼저, 내용이 포함된 파일을 생성합니다.
echo "This is a test file for TechInnovate's performance analysis." > test_file.txt
이 명령어는 현재 디렉토리에 test_file.txt라는 새 파일을 생성하고 지정된 텍스트를 기록합니다. > 기호는 echo의 출력을 파일로 리다이렉션하는 데 사용됩니다.
이제 이 파일을 읽는 작업의 시간을 측정해 보겠습니다.
time cat test_file.txt
파일의 내용이 출력된 후, 이어서 시간 측정 정보가 표시됩니다. 출력 결과는 다음과 유사할 것입니다.
This is a test file for TechInnovate's performance analysis.
cat test_file.txt 0.00s user 0.00s system 85% cpu 0.003 total
각 측정 항목의 의미는 다음과 같습니다.
0.00s user: 프로세스 내에서 사용자 모드 코드 (커널 외부) 를 실행하는 데 소비된 CPU 시간입니다.0.00s system: 프로세스 내에서 커널을 실행하는 데 소비된 CPU 시간입니다.85% cpu: CPU 사용률의 백분율입니다.0.003 total: 엔터를 누른 시점부터 명령어가 완료될 때까지 경과된 총 시간입니다.이러한 간단한 작업의 경우 측정된 시간은 매우 짧습니다. 시스템 부하 및 기타 요인으로 인해 명령어를 실행할 때마다 약간의 차이가 발생할 수 있습니다.
팀장이 로그 파일을 처리하는 스크립트를 제공했습니다. 최적화를 위한 기준점을 얻기 위해 이 스크립트의 실행 시간을 측정해 보겠습니다.
먼저, 간단한 처리 스크립트를 생성합니다.
cat << EOF > process_logs.sh
#!/bin/zsh
for i in {1..1000}; do
echo "Processing log entry $i" >> output.log
done
sort output.log > sorted_output.log
uniq -c sorted_output.log > final_output.log
rm output.log sorted_output.log
EOF
chmod +x process_logs.sh
이 스크립트는 다음 작업을 수행합니다.
chmod +x 명령어는 스크립트에 실행 권한을 부여합니다.
이제 이 스크립트의 실행 시간을 측정해 보겠습니다.
time ./process_logs.sh
출력 결과에는 전체 스크립트가 실행되는 데 걸린 시간이 표시됩니다. 다음과 같은 형식으로 나타날 것입니다.
./process_logs.sh 0.03s user 0.01s system 92% cpu 0.045 total
이 수치는 시스템 성능에 따라 달라질 수 있지만, 최적화 작업을 위한 기준 데이터를 제공합니다. 총 시간 (total) 이 사용자 (user) 시간과 시스템 (system) 시간의 합보다 큰 것을 알 수 있습니다. 이러한 차이는 종종 I/O 작업 (이 경우 파일 읽기 및 쓰기 작업) 으로 인해 발생합니다.
time 명령어가 서로 다른 유형의 작업에서 어떻게 작동하는지 살펴보겠습니다. 이를 통해 다양한 작업에 대한 결과를 해석하는 방법을 더 잘 이해할 수 있습니다.
먼저, CPU 집약적인 작업의 시간을 측정해 보겠습니다.
time echo {1..10000} | wc -w
이 명령어는 일련의 숫자를 생성하고 그 개수를 셉니다. 주로 CPU 자원을 많이 사용합니다.
다음으로, I/O 집약적인 작업의 시간을 측정해 보겠습니다.
time find / -name "*.txt" 2> /dev/null
이 명령어는 루트 디렉토리부터 모든 .txt 파일을 검색합니다. 주로 디스크 입출력 (I/O) 자원을 많이 사용합니다.
마지막으로, CPU 와 I/O 를 모두 사용하는 명령어의 시간을 측정해 보겠습니다.
time sort -R /etc/passwd | head -n 5
이 명령어는 /etc/passwd 파일의 내용을 무작위로 정렬하고 처음 5 줄을 표시합니다.
이 명령어들의 출력 결과를 비교해 보세요. CPU 집약적인 작업은 사용자 (user) 시간이 높은 경향이 있는 반면, I/O 집약적인 작업은 사용자 및 시스템 시간에 비해 총 시간 (total) 이 훨씬 더 길게 나타나는 것을 확인할 수 있습니다.
이 실습에서는 명령어 실행을 측정하고 최적화하는 데 필수적인 도구인 Linux 의 time 명령어를 살펴보았습니다. 여러분은 다음 내용을 학습했습니다.
time의 동작을 비교하는 방법.이러한 기술은 TechInnovate 에서 스크립트를 최적화하고 성능을 분석하는 업무를 수행할 때 매우 유용하게 활용될 것입니다.
코드를 최적화할 때 다음 사항을 기억하세요.
user + system) 과 총 시간 (total) 을 모두 고려하십시오.user) 시간을 줄이는 데 집중하십시오.이러한 기법을 업무에 적용하면 코드의 성능 병목 지점을 식별하고 해결하는 데 더욱 능숙해질 것입니다.