스프링부트를 쓰다보니 WAS에 대해서는 디테일이 좀 떨어졌다. 아니 나는 그냥 네트워크에 대한 개념이 아직 많이 부족하다고 말하는게 맞다. 이 글 역시 정보 전달에 목적이 있지 않다. 나의 개발일지이다. 그러므로 이 글을 맹신하지는 말아달라고 부탁하고 싶다. 틀린 것을 지적해주면 달게 받겠다.
이번에 간 직장에서는 레거시의 끝판왕이다. svn이며 jdk는1.7이고 spring mvc를 쓴다. 전 직장에 있었을 때 마지막 프로젝트가 저런 구성이어서 불만이 많았다. 왜 좋은거 다 내버려두고 레거시?라고 생각했지만 직장을 여러가지 이유로 그만두고 드문드문 생각해보고 여러가지를 보다보니 레거시에 불만을 가질건 아니라고 생각하게되었다. 아무튼 이번에도 레거시다!!
나는 평소에 공부를 Springboot로 했고, 따로 진행한 사이드 프로젝트도 Springboot로 진행했기 때문에 tomcat이 내장된 프로젝트를 진행했다. Springboot에서는 yml파일에 몇 가지 간단하게 작성하면 무탈하게 잘 돌아갔고, 심지어 배포할 때에도 톰캣을 따로 설치할 필요조차 없었다. 그러다보니 WAS의 기본적인 부분조차도 모르고 지나갔다.
오늘 적을 것은 수정사항 요청이 왔고, 그것을 수정하고 배포하는 중에 벌어진 일들을 적는 것이다. 사건은 간단하다. 해당 고객사는 보안 때문에 소스를 클라우드 컴퓨터 내에서 직접 작성해야 한다. 결과적으로는 수정한 소스가 오류가 났다. 그러나 규정상 톰캣을 가동했을때 서비스 로그를 찍을 수가 없다. 처음에는 포트 중복 사용 에러가 떳다.
톰캣은 세 가지 포트를 사용한다. 첫 번째는 우리가 흔히 8080포트라고 부르는 HTTP 포트이고, 두 번째는 AJP 포트인데, 이 친구는 웹서버(Apache)에서 요청되는 것을 WAS에서 들어오는 요청에 위임하는 프로토콜이다. 웹 WAS를 구축하는 사람들은 AJP를 통해 웹서버로부터의 오는 요청들을 로드 밸런스 역할로 이용한다고 한다. 세 번째는 톰캣 어드민 포트인데 얘는 뭔지 모르겠다. 검색해도 잘 안나온다.
다시 사건으로 돌아가서, HTTP포트를 종료시키고 다시 서버를 가동시켰다. 그럼에도 에러가 계속 났다. 왜지? 하고 머리를 쥐어뜯다가 보니 예전에 eclipse를 세팅할 때 보던 AJP포트와 똑같은 포트가 계속 돌아가고 있는 것을 보았다. 어? 제대로 뭔가 종료가 안되었구나 이 친구를 종료시켜볼까? 종료를 시키고 나서도 여전히 서버는 가동되지 않았다. 아... 그러면 서버의 문제가 아니구나! 어쩌면 변경한 소스의 문제가 아닐까? 라는 생각에 이전 소스로 롤백시키고 서버를 재가동하였다. 다행히 서버가 잘 돌아갔다.
어... 그럼 다시 돌아가니까 끝인가? 그건 아닌거 같다. 우리는 왜 이런 문제를 이렇게 어렵게 해결해야만 했는가? 생각해보면 서버의 로그를 별도로 볼 수가 없다는 것이 가장 큰 문제다. 그리고 문제는 또 있다. 에러가 발생했을 때 고객사의 불만이 폭주한다. 그러니까 이 프로그램은 무중단배포가 필요하다. 오늘 이 사건을 겪고, AJP에 대해서 알아보았다. 위에 썻듯이 이것이 로드밸런서의 역할을 할 수 있다고한다. 그렇다면 이 레거시에서도 무중단 배포를 할 수 있는 것이 아닌가? 이렇게 한다면, 일단 초조해하면서 배포를 할 이유가 없다. 배포를 시도해보고 안되면 느긋하게 커피한잔 마시면서 생각하면서 하면된다. 해서 이번 시리즈에서는 이것을 연구해보는 것을 기록하는 글들을 작성하려고 한다.