Effective Debugging/Chapter 3. 범용 도구를 활용한 기법
created : Tue, 07 Apr 2020 20:44:40 +0900
modified : Sat, 26 Sep 2020 23:27:39 +0900
읽을거리
The Art of Command Line
(https://github.com/jlevy/the-art-of-command-line)
Item 22. 유닉스 명령줄 도구로 디버깅 데이터 분석하기
- 아래와 같은 순서로 스크립트를 작성한다.
- 가져오기(Fetching)
- 선택하기(Selecting)
- 처리하기(Processing)
- 정리하기(Summarizing)
- 읽을거리를 참고해서 CLI 사용법을 좀 더 잘 익히자
기억할 사항
- 텍스트 형태의 레코드를 가져오고, 선택하고, 처리하고, 정리하는 유닉스 명령어를 이용하여 디버깅 데이터를 분석한다.
- 여러 가지 유닉스 명령을 파이프라인으로 조합하는 방식으로 복잡한 분석 작업을 간단히 처리할 수 있다.
Item 23. 명령줄 도구 옵션과 관용 표현 활용하기
- grep에서 제공하는 다양한 옵션을 활용하면 탐색 범위를 줄일 수 있다.
- 프로그램의 에러 메시지를 분석할 때는 표준 에러를 리다이렉션한다.
- 로그 파일에 추가되는 내용을 모니터링하고 싶다면 tail -f 명령을 활용한다.
Item 24. 코드 편집기로 디버깅 데이터 탐색하기
- 철자가 틀린 식별자를 찾을 때는 편집기에서 제공하는 검색 기능을 활용한다.
- 차이점이 눈에 띄도록 텍스트파일을 적절히 수정한다.
- 로그 파일을 좀 더 읽기 좋도록 적절히 수정한다.
Item 25. 작업 환경 최적화하기
- Path 환경 변수에 실행할 프로그램에 관련된 디렉터리가 빠짐없이 담겨 있는지 확인한다. 디벅이 과정에서 시스템 관리자 권한의 명령을 실행해야 하는 경우도 종종 있다. 따라서 이러한 명령에 대한 경로도 포함해야 한다.
- 쉘과 편집기에서 자동 완성 기능을 사용하도록 설정한다.
- 쉘 프롬프트와 터미널 바에 사용자 계정과 현재 디렉터리, 호스트 이름이 표시되도록 설정한다. 디버깅하는 과정에서 여러 호스트와 계정을 오갈 수 있기 때문에 현재 상태를 명확히 알 수 있도록 계정과 위치 정보를 표시한다.
- 명령줄에서 편집할 때 자신이 사용할 편집기와 연동하도록 키 바인딩을 설정한다. 이렇게 해두면 데이터 분석 파이프라인을 점진적으로 만들어나가는 작업을 훨씬 효율적으로 수행할 수 있다.
- 자주 사용하는 명령과 흔히 저지르는 입력 오류에 대해 앨리어스나 단축키를 만든다.
- 버전 관리 시스템을 비롯한 다양한 유틸리티에서 자신이 주로 사용하는 페이징 프로그램(
less
나more
처럼 파일의 내용을 페이지 단위로 출력하는 프로그램)과 편집기를 활용하도록 환경변수를 설정한다. - 입력한 명령을 모두 히스토리 파일에 기록하도록 설정한다. 이렇게 하면 디버깅할 때 자주 사용하거나 중요한 구문을 몇 달이 지난 뒤에도 쉽게 찾아낼 수 있다. 이때 구문 앞에 공백을 붙여서 (패스워드를 담은 부분처럼) 명령을 호출하는 부분은 기록하지 않도록 설정한다.
- 쉘의 경로 이름 확장 기능 또는 *과 같은 와일드카드 문자로 표현하는 글로빙(globbing)을 실행할 때 서브 디렉터리에 있는 파일도 포함하도록 설정한다. 이렇게 하면 하위 계층에 있는 모든 디렉터리에 대해 적용되는 ** 와일드 카드를 사용할 수 있기 때문에, 계층이 깊게 구성된 디렉터리에 대해 실행하는 명령을 간결하게작성할 수 있다.
기억할 사항
- 사용하는 도구를 적절히 설정하여 생산성을 향상시킨다.
- 여러 호스트에 걸쳐 작업할 때는 디버깅 환경에 대한 설정 파일을 버전 관리 시스템을 통해 관리한다.
Item 26. 버전 관리 시스템으로 버그 원인과 히스토리 추적하기
가령 버그가 발생한 버전의 구간을 알고 있고, 오류가 발생하면 0이 아닌 코드를 반환하며 종료하는 테스트 스크립트도 있다면, 그 버전 사이에서 발생한 모든 변경 내역을 이진 탐색으로 검색해서 해당 버그를 발생시킨 지점을 찾아준다.
git bisect start V1.1.0 V1.2.3 git bisect run test.sh git reset
잠시 작업한걸 숨기고 싶을 때
git stash save {wanted name} git stash pop
기억할 사항
- 버전 관리 시스템에 기록된 파일의 변경 내역을 분석하면 버그가 언제 어떻게 생겼는지 알아낼 수 있다.
- 버전 관리 시스템을 활용하여 정상적인 버전과 버그가 있는 버전을 비교한다.
Item 27. 독립적인 프로세스로 구성된 시스템에서 모니터링 도구 사용하기
모니터링할 대상
- 어플리케이션의 엔드 투 엔드(end-to-end) 가용성
- 웹 서비스, 데이터베이스 테이블, 정적 웹 페이지, 인터랙티브 웹 폼, 리포팅 서비스 등과 같이 어플리케이션을 구성하는 요소들
- 응답 지연 시간, 큐에 저장되거나 완료된 명령, 활동 중인 사용자의 수, 실패한 트랜잭션, 발생한 에러, 리포팅 된 충돌 사항 등과 같이 핵심적인 측정 지표
ghi
도구를 활용하는 쉘 스크립트를 작성하자
기억할 사항
- 모니터링 환경을 구축하여 개발하고자 하는 서비스에 관련된 모든 부분의 상태를 지속적으로 확인한다.
- 장애가 발생하는 즉시 알림을 보내도록 설정하면 에러가 나타난 상태에서 디버깅 작업을 수행할 수 있다.
- 오류 발생 내역을 분석하면 문제의 원인을 정확히 찾아내는 데 도움되는 패턴을 도출할 수 있다.