학습용 공간

JAVA Spring 2020.08.31 댓글 개 starmk95

JAVA Spring) Web server failed to start. Port 8080 was already in use. 해결 방법

# 발생 이유

위 사진과 같은 에러는 로컬 포트(8080 포트)를 이미 사용하고 있는 프로세스가 있기 때문에 발생한 것이다.

 

인텔리제이 커뮤니티에디션의 경우에는 스프링을 공식지원하지 않는다고 한다.

그래서 스프링 부트가 돌아가는 방식이

VM 메인이 먼저 돌아가고 그 VM 메인이 스프링부트 어플리케이션을 띄우는 구조를 갖는다고 한다.

이때 스프링 부트를 끄지 않고 VM 메인을 종료시키면 

VM 메인만 종료되고 부트는 혼자 계속 돌아간다.

그렇기 때문에 프로그램을 끈 것처럼 보여도 실제 프로세스(스프링 부트)는 로컬 포트를 사용중인 것이 되는 것이다.

 

# 해결방법

로컬 포트 8080을 사용중인 프로세스를 kill 해주면 된다.

Windows 기준으로 cmd창을 키고

1. 8080 포트를 사용하고 있는 프로세스를 확인한다. (pid를 확인)

cf) pid : process identifier로 프로세스 식별자, 즉 프로세스를 식별하는 고유번호를 의미한다.

아래 명령어를 통해 확인할 수 있다.

netstat -ano | findstr 8080

2. 해당 프로세스를 kill해준다.

1번 명령어로 확인한 8080포트를 사용중인 프로세스의 pid(맨 뒤의 숫자)를 확인하고

아래 명령어를 실행해준다.

taskkill /F /pid pid번호

 

3. 프로세스 kill 성공!

 

# 원인

(인텔리제이 기준)

필자의 경우에는 Spring에서 코드를 수정하고 종료(빨간 네모 버튼)가 아닌 재시작(시계방향의 화살표)를 눌렀는데

이 방법이 부트는 종료하지 않고 VM 메인만을 종료하고 다시 실행하였기 때문에 

위와 같은 에러가 발생했다.(고 추측한다 ㅎ)

 

Spring 종료 시에 빨간 네모 버튼으로 종료를 하고 다시 실행하는 방식으로 재시작을 하면 위와같은 에러는 발생하지 않는다.