Skip to content

내가 터미널과 친해지려는 이유

개발자에게 로그는 정말 중요하다.
로그는 프로그램이 내가 의도한 대로 실행이 되는지, 오류가 발생하는지 확인할 수 있는 단서를 제공하기 때문이다.
대부분의 사람들은 개발할 때 여러 편의 기능을 제공하는 이클립스, IntelliJ 등의 IDE에서 개발한다. 그리고 IDE는 Run as server와 같은 버튼을 클릭하기만 하면 프로그램의 로그를 친절하게 콘솔 창에 보여준다.
덕분에 개발자들은 로그를 확인하며 오류를 추적할 수 있다.

요구 사항을 모두 구현하고 개발한 내용을 서버에 배포한 상황을 상상해보자.
내가 작성한 코드가 문제없이 동작해 줬으면 좋겠지만, 예상과는 다르게 오류가 발생해버렸다.
모니터링 시스템을 구축해서 로그를 확인할 수 있었으면 좋았겠지만, 아쉽게도 그럴만한 능력도 시간도 없었다.
결국 직접 서버에 접속해서 로그를 확인해야 하는 상황이다.
서버에 접속을 했지만 로그를 보여주던 IDE는 없고 검은 바탕의 터미널에 깜빡이는 커서만이 나를 맞이할 뿐이다.
서버에서는 로그를 어떻게 확인하면 좋을까?

tail -n file

로그는 보통 설정 파일에서 정의한 디렉터리에 쌓이게 된다.
그리고 날짜로 구분 지어 생성되도록 설정하는 경우가 많기 때문에 오늘 날짜로 추정되는 파일을 열어서 보면 된다.
단순한 프로그램이라면 로그가 쌓이는 디렉터리로 가서 오늘 날짜의 파일을 열어서 확인하는 것으로 원하는 내용을 확인할 수 있을지도 모른다.
하지만 프로그램이 커서 로그의 내용이 많다면 무작정 열어서 확인하는 것은 그다지 효율적이지 못한 방법이다. 물론 상황마다 방법은 최적의 방법은 다르겠지만, 오류가 발생한 시점으로부터 얼마 지나지 않은 상황이라 가정해 보자.
그렇다면 로그가 기록된 지 얼마 안됐기 때문에 마지막 부분부터 확인하는 편이 원하는 내용에 빠르게 도달하는 방법일 것이다.
이처럼 가장 최근에 기록된 내용만 읽고 싶은 상황인 경우 tail이라는 명령어를 사용하면 쉽게 로그를 확인할 수 있다.
tail은 파일을 끝에서부터 읽는 명령어이다.
로그는 마지막 라인에 최근 기록이 써진다는 특징이 있으므로 tail -n [파일]의 형태로 사용하면 원하는 분량의 최근 로그를 얻을 수 있다.
예를 들어 로그에서 최근에 기록된 500줄 정도만 보고 싶다면, tail -500 log.txt와 같이 입력하면 된다.

tail -f file

서버가 중지된 상태거나 아무도 사용하지 않고 있다면 위 방법이면 충분하다.
그런데 서버가 실행 중인 경우에는 계속해서 쌓이는 로그 때문에 생각처럼 원하는 로그를 확인하기 어렵다.
이런 경우에는 문제상황을 재현하고 실시간으로 로그를 확인하는 편이 낫다는 생각이 들지도 모른다.
tail -f [파일]은 대상 파일을 모니터링하며 새로 저장되는 내용을 터미널에 계속 출력한다.
실시간으로 쌓이는 로그를 확인하려면 tail -f log.txt 로 볼 수 있다. tail은 이 외에도 여러 옵션이 있지만 로그를 확인할 때 이 정도만 알고 있어도 충분히 도움이 될 것이다.

head -n file

마지막부터 읽는 명령어가 있으니 그 반대도 있을 거라는 생각이 들것이다.
head라는 명령어는 tail과 상반되게 동작한다.
head -n [파일]과 같이 사용하면 파일의 처음부터 지정한 라인수만큼 보여주는데 tail과 비교했을 때 사용할만한 상황이 많지는 않다.
그 때문인지 옵션도 tail에 비교해서 적은 편이다.

마치며..

위에 예시로 든 상황은 사실 내가 전 직장에서 경험했던 일인 동시에 셸 스크립트 공부를 시작하게 된 계기이기도 하다.
서버에 발생한 오류를 빨리 추적해서 해결 해야하는 상황이었지만, 검은화면 앞의 나는 무력감을 느끼는 것 외에 달리 할 수 있는 일이 없었다.
다행히도 사수와 함께 있어 금방 해결할 수 있었지만, 나 혼자 남겨졌더라면 고생 깨나 했을 것이다.
진화하는 개발도구 덕분에 개발자들은 나날이 더욱 편하게 개발할 수 있게 되었다.
하지만 편한 환경에 익숙해진 만큼 기본적인 원리나 접근법에 소홀해지고 끝내 바보가 되어버리는 일도 많은 것 같다.
때로는 믿었던 도구의 고장, 낙후된 개발환경, 고객사의 보안 정책 등의 이유로 갑작스럽게 무인도와 같은 불편한 상황에 놓일지도 모른다.
그러나 이런 상황에서도 터미널과 스크립트는 부싯돌과 맥가이버칼처럼 의지할 수 있는 도구로서 제 몫을 다 해줄 것이다.


작성자: 성승익

작성일: 2021-09-05