<개발 Tip> Spring boot Was 가동 시 별다른 에러 없이 멈추는 현상

Posted by bbubbush on March 31, 2019

스프링부트를 공부하는 중에 간헐적으로 was가 가동하다 멈추는 현상이 발생했습니다. 별다른 에러메세지도 없이 쭈욱 진행하다가 멈추는 경우라 원인을 찾기 힘들었습니다.

제 개발환경은 Spring boot와 gradle, hibernate로 구성하였고, DB는 PostgreSQL을 사용했습니다.

맨 처음 시도는 스프링 설정파일 내에 있는 옵션을 하나하나 주석을 해보며 서버를 기동했고 그 중 spring.jpa.hibernate.ddl-auto=update을 주석처리할 경우 정상적으로 돌아가는 것을 확인했습니다.

해당 옵션은 하이버네이트를 사용할 때 DDL 명령어를 어떻게 처리할지에 대한 옵션입니다. 제 기준으로는 update로 하였기 때문에 기존 데이터와 다른 부분만 변경하는 방식으로 설정했습니다. 마침 DB tool도 해당 DB에 접근한 상태면서 트랜잭션을 프로그램 종료시점까지 유지하는 설정이 되어있었습니다.

따라서 해당 상황을 통해 유추해보니 ‘was가 켜지는 시점에 DB의 트랜잭션을 DB Tool이 가지고 있고, 스프링부트는 별도의 Timeout 설정이 없었기 때문에 무한히 기다린다’ 같단 생각이 들었습니다. 결과적으로는 해답이 되었지만 그 과정이 맞는지는 별도의 테스트를 하지 않았습니다.(해결되었단 기쁨이 너무 커서…ㅎㅎ)

혹시 저와 같이 was를 가동할 때 DB 커넥션 이후에 별다른 오류메세지 없이 멈춰버린다면 DB tool을 종료하고 다시 가동해보시기 바랍니다.

결론: 혹시 다른 DBMS Tools을 열어두고 있는지, 백그라운드에서 돌아가고 있지 않은지 확인해보자. 다른 응용프로그램이 트랜잭션을 잡고 있으면 해당 트랜잭션이 끊어질 때 까지 기다리는 현상이 발생할 수 있다.