WEB/Spring & Spring boot

Spring Boot 프로젝트 ERROR : port 8080 is already in use 해결 방법

hyunah 2021. 6. 10. 21:44

Spring Boot ERROR 해결 과정

 

'스프링 부트와 AWS로 혼자 구현하는 웹 서비스' 책을 따라 스프링 부트 프로젝트를 만들고 EC2 서버에 올린 후 배포 자동화 구성을 하던 중 꽤 오랫동안 에러에 시달렸다. 거의 지난 한 달간 고통받았다.



앞으로 돌아가 차근차근히 오타를 바로잡고 났음에도, 나를 기다린 건.. org.springframework.boot.web.server.PortInUseException이었다.🤣






이 에러를 마주한 대부분의 경우 해결책은 매우 간단하다.

 

1. cmd 창에서 netstat -ano | findstr 8080을 시행
2. 8080 port를 사용하고 있는 task의 id를 기억해뒀다가 tastkill /F /PID (task의 id)를 시행




그러나 내 경우에는 netstat -ano | findstr 8080을 시행했을 때 아무런 task도 검색되지 않았다! 혹시나 명령이 먹히지 않았나 싶어 눈으로 샅샅이 찾았음에도 8080 port를 쓰고 있는 task는 눈씻고 찾아볼 수가 없었다. 정말 미치고 팔짝 뛸 노릇이었다.





 

상식적으로 이해가 안 가는 오류였지만, 내가 참고하고 있는 책의 깃허브 issue에 검색을 해보니, port 8080 is already in use 에러가 떠도 다른 것이 원인인 경우가 꽤 있는 듯 했다.



아무래도 이전에 시행되고 있는 애플리케이션의 pid를 찾아 삭제하는 부분이 제대로 이루어지지 않는 것 같아 putty에 그 부분의 명령어를 하나 하나씩 입력해보고 나서야 원인을 알 수 있었다.

 

 

 

 

 

17681 java가 구동 중에 있으나, grep jar로 시행하니 pid가 제대로 나오지 않는다.

pgrep -fl springboot-aws-webservice | grep jar | awk '{print $1}'로 현재 구동되고 있는 애플리케이션의 pid를 받도록 해놨는데, pgrep 부분만 시행해보니 jar이 아니라 java여서 grep jar을 붙이니 현재 구동 중인 애플리케이션이 있어도 검색이 제대로 되지 않는 것이었다.



 

 

grep java로 바꾸니 제대로 동작하는 모습

이 이슈를 참고해 코드를 pgrep -fl springboot-aws-webservice | grep java | awk '{print $1}'로 바꾸었고, 무사히 실제 배포 과정 체험을 끝마칠 수 있었다.





 

 

혹시나 나와 같은 오류에 빠져 허우적대고 있을지도 모르는 사람들과, 미래에 또 다시 이 오류에 빠질지도 모르는 나를 위해 정리하였다.