목록전체 글 (194)
센로그
요즘 소프트웨어 시스템 중에서 단 하나의 프로그램으로만 구성된 것은 거의 없다.대부분의 시스템을 여러 서비스와 컴포넌트, 라이브러리로 구성되어 있다.따라서 어느 부분에서 오류가 발생했는지 신속하고 효율적으로 알아내는 것이 중요하다. 서버 시스템에서는 인프라스트럭처 모니터링 시스템을 구축하면 문제의 발생 지점을 쉽게 찾을 수 있다.모니터링 환경을 구축하여 개발하고자 하는 서비스에 관련된 모든 부분의 상태를 지속적으로 확인한다.책에서는 Nagios를 소개하지만, 좀더 대규모 서버를 모니터링하기에 적합한 현대적인 모니터링 시스템들이 되게 많다.ZabbixPrometheus + Grafana 암튼 모니터링 방법은!발생한 문제를 정확히 집어내려면 애플리케이션을 구성하는 스택 전체를 모니터링해야 한다.가장 먼저 시..
버전 관리 시스템에 기록된 파일의 변경 내역을 분석하면 버그가 언제 어떻게 생겼는지 알아낼 수 있다.버전 관리 시스템을 활용하여 정상적인 버전과 버그가 있는 버전을 비교한다. 버그 분석에 유용한 깃 명령어들새로운 버그를 발견했다면 먼저 이전 버전에서 어떤 부분을 변경했는지 살펴본다.git log발생한 문제와 관련된 파일을 찾았다면 그 파일에 대한 변경 사항만 자세히 살펴본다.git log path/to/myfile.js발생한 문제가 코드의 특정 라인에 관련되어 있다고 의심되면, 해당 코드에 대한 어노테이션 정보를 출력해서 각 라인에서 가장 최근 발생한 변경 사항을 자세히 살펴본다.git blame path/to/myfile.js해당 파일 내부 또는 여러 파일 사이에서 이동한 라인을 추적하려면 -C와 -M..
사용하는 도구를 적절히 설정하여 생산성을 향상시킨다.예를들어 배시 명령과 관련된 설정 사항을 몇가지 소개하면 다음과 같다.PATH 환경 변수에 실행할 프로그램에 관련된 디렉터리가 빠짐없이 담겨 있는지 확인한다. 디버깅 과정에서 시스템 관리자 권한의 명령을 실행해야 하는 경우도 종종 있다. 따라서 이러한 명령에 대한 경로도 포함해야 한다.쉘과 편집기에서 자동 완성 기능을 사용하도록 설정한다.쉘 프롬프트와 터미널 바에 사용자 계정과 현재 디렉터리, 호스트 이름이 표시되도록 설정한다. 디버깅하는 과정에서 여러 호스트와 계정을 오갈 수 있기 때문에 현재 상태를 명확히 알 수 있도록 계정과 위치 정보를 표시한다.명령줄에서 편집할 때 자신이 사용할 편집기와 연동하도록 키 바인딩을 설정한다. 이렇게 해두면 데이터 분..
철자가 틀린 식별자를 찾을 때는 편집기에서 제공하는 검색 기능을 활용한다.대부분의 IDE는 식별자를 검색하면 같은 같은 부분을 찾아주므로 단어가 나타난 지점을 탐색하기 좋다. 차이점이 눈에 띄도록 텍스트파일을 적절히 수정한다.diff와 같은 도구를 활용할 수도 있다. 핵심과 관련 없는 부분을 모두 일정 문자로 치환하면 diff로 작업하기 쉬워진다.IP 주소, 타임 스탬프 등 문제의 핵심과 관련 없는 부분들을 의미 로그 파일을 좀 더 읽기 좋도록 적절히 수정한다.불필요한 부분을 삭제하고 원하는 내용만 남긴다.로그 파일 내용이 너무 복잡해서 한눈에 들어오지 않는다면 부연 설명을 주석으로 추가하는 것도 도움이 된다.

grep에서 제공하는 다양한 옵션을 활용하면 탐색 범위를 줄일 수 있다. 프로그램의 에러 메시지를 분석할 때는 표준 에러를 리다이렉션한다.에러 메시지는 표준 출력으로 보내는 게 아니라 표준 에러로 보내도록 하는 것이 관례이다.표준 출력과 섞이면 처리하는 프로그램도 헷갈리고 보기도 어렵다. 로그 파일에 추가되는 내용을 모니터링하고 싶다면 tail -f 명령을 활용한다.디버깅하려는 에러가 아주 가끔 발생한다면, 해당 에러가 발생하는 즉시 알려주는 모니터링 환경을 구축하는 것이 좋다.
여러 가지 유닉스 명령을 파이프라인으로 조합하는 방식으로 복잡한 분석 작업을 간단히 처리할 수 있다.디버깅 과정에서 다루는 데이터는 대부분 텍스트 포맷으로 되어 있기 때문에 사용하는 도구의 표준 입력으로 데이터를 그대로 전달할 수 있다.텍스트를 분석할 때 여러 유닉스 명령을 파이프라인으로 조합하여 사용한다.일반적으로 다음 순서로 스크립트를 작성하면 된다.가져오기(Fetching)선택하기(Selecting)처리하기(Processing)정리하기(Summarizing) 자주 쓰이는 유닉스 명령어grep:텍스트 파일에서 특정 문자열 또는 패턴을 검색하고 일치하는 줄을 출력find:디렉터리 트리에서 파일이나 디렉터리를 이름, 크기, 수정 시간 등 다양한 조건으로 검색awk:텍스트 데이터를 행(row)과 열(col..