한통으로 만들어서 한방에 서비스를 하는 덩치 큰 녀석을 만드는 게 이제는 낯설게 되었습니다. 그보다는 작은 단위로 쪼개서 가볍게 띄운 다음 하나하나가 유기적으로 연동하여 서비스를 완성하도록 하는 것이 익숙해졌습니다. 먼저 것을 모노리딕, 나중 것을 마이크로 서비스라고 하나요? 뭐 명칭이야 어쨌든 이제 작은 단위로 앱을 나누고, 필요할 때 필요한 것들만 많이 띄워서 처리량을 빠르게 늘리는 것을 목표로 서비스를 만듭니다.
이렇게 만드는 것이 서비스를 할 때, 즉각적인 대응이 가능하다는데 큰 장점이 있습니다. 급작스런 트래픽 증가에도 유연하게 대응할 수 있기 때문입니다. 하지만 장점만 존재하는 것은 아닙니다. 잘 설계되지 않는 다면, 복잡도는 증가되게 되고, 그에 따라 개발 난이도가 증가되고 유지보수가 힘들어집니다. 그래서 기능을 잘 나누어야 하고, 각 모듈 간의 관계를 이해하기 쉽도록 설계해야 합니다. 일관된 기준에 따라 만들어진 인터페이스도 필수입니다.
그리고 또 불편해지는 점이 하나 있는데, 로그를 추적하는 겁니다. 모듈이 여러개로 나뉨에 따라 로그도 여러 개로 나뉘게 되고 이걸 한꺼번에 트랙킹 하기란 쉬운 일이 아니죠. 로그를 한 곳으로 모아서 한 번에 조회할 수 있는 별개의 시스템을 만들기도 합니다. 그런데 로컬에서 이런 방식으로 개발을 하는데 로그를 위한 별도의 시스템을 띄우는 것은 좀 과한 것 같습니다.
그렇다고 로그파일을 하나 열고 확인하고, 다른 로그파일을 다시 열고 또 확인하고, 또 다시 확인하고를 반복하기도 하고, 여러 개의 창을 띄워서 모든 파일을 추측하기도 합니다. 어떤 방법을 사용하건 귀찮을 뿐만 아니라, 시간의 순서를 파악하기도 어렵습니다. 그래서 한 번에 모든 로그파일을 조회하고 또 로그가 생긴 시간에 따라 확인할 방법이 필요합니다. 물론 방법은 있고 간단합니다.
먼저 간단하게 웹서버(nginx)와 웹어플리케이션하나를 만들어 구동했습니다. 그러면 웹서버의 로그(access.log, error.log)와 애플리케이션의 로그파일(development.log)이 생기게 되죠. 이 파일들을 한꺼번에 확인하려면 어떻게 해야 할까요?
방법은 매우 간단합니다. 자주 사용하는 tail 명령어를 이용해 여러 파일을 인자로 주면 됩니다. 위와 같은 경우라면,
$ tail -f access.log -f error.log -f development.log
위 코드와 같이 파일을 차례대로 인자로 적어주면 됩니다.
결과는 다음과 같습니다.
==> development.log <==
Started GET "/posts" for 192.168.219.113 at 2020-05-29 22:04:34 +0900
Cannot render console from 192.168.219.113! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by PostsController#index as HTML
Rendering posts/index.html.erb within layouts/application
Post Load (0.3ms) SELECT "posts".* FROM "posts"
↳ app/views/posts/index.html.erb:13
Rendered posts/index.html.erb within layouts/application (2.0ms)
Completed 200 OK in 36ms (Views: 32.7ms | ActiveRecord: 0.3ms)
==> access.log <==
172.17.0.1 - - [29/May/2020:13:04:34 +0000] 200 "GET /posts HTTP/1.1" 2095 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36" "-"
각 파일의 구분되어 어떤 파일에 쌓인 로그인지 확인할 수 있을 뿐만 아니라, 로그가 생긴 순서대로 확인할 수 있으니, 일련의 과정을 추적하기도 용이해집니다. 서론이 길었는데, 하고 싶었던 얘기는 "tail을 이용하면 여러 파일을 한꺼번에 볼 수 있다" 였습니다.
아래에 동작하는 것을 영상으로 올렸는데, 영상에 광고가 포함되네요.. 저 광고는 저와는 관계 없는 광고입니다. 다음번엔 다른 방법을 찾아보겠습니다.