Port 8080 is already in use

org.springframework.boot.web.server.PortInUseException: Port 8080 is already in use

스프링부트를 이용하여 개발한 내용을 로컬에서 확인하기 위해 위와 실행했을 때, 위와 같은 에러가 발생할 수 있습니다. 이 에러가 발생하는 이유는 이미 포트를 사용중인 포트이기 때문입니다.

발생 원인

  1. 동일한 포트를 사용하는 어플리케이션을 번갈아가며 실행 시키는 경우 (이미 다른 하나가 실행중)
  2. IDE 상에서는 프로세스가 종료되었으나 실제 프로세스가 종료되지 않은 경우

일반적으로 위 두 가지 경우에 PortInUseException 에러가 발생하게되고, 보통 2번의 경우가 많이들 겪게 되는 상황이라고 생각됩니다.

2번 상황이 발생하는 이유는 컴퓨터가 한번 종료되었을 경우라던가 IDE의 문제라고 생각됩니다.

해결 방법

포트가 이미 실행중이라면 생각해볼 수 있는 해결방법은 두 가지가 있습니다.

  1. 실행하려고하는 어플리케이션의 실행 포트를 변경한다.
  2. 현재 포트를 사용하고 있는 프로세스를 종료한다.

포트 변경하기

# application.yml
+ server.port: 8081

스프링 또는 스프링부트에서 위와 같이 설정해주시면 어플리케이션의 포트를 변경할 수 있습니다.


프로세스 종료하기

Window

프로세스를 종료하는 방법은 OS 별로 다르기 때문에 macOS와 Windows에서 각각 소개해드리도록 하겠습니다.

Windows OS 프로세스 종료1. cmd 창을 열고 아래와 같은 명령어를 입력해줍니다.

netstat -ano
  1. netstat: 현재 TCP/IP 네트워크 연결 상태 확인
  2. a: 모든 연결 및 수신 대기 포트를 표시
  3. n: 주소 및 포트 번호를 숫자 형식으로 표시
  4. o: 각 연결의 소유자 프로세스 ID를 표시
프로토콜  /    로컬 주소    /  외부 주소   /    상태     /  PID
TCP       0.0.0.0:8080    0.0.0.0     LISTENING     12345

2. taskkill 명령어로 해당 포트를 사용하고 있는 프로세스 종료한다.

taskkill /f /pid 12345

위 명령어를 통해 프로세스를 종료해줍니다.

 

 

Mac

macOS 프로세스 종료1. lsof 명령어로 해당 포트를 사용하는 프로세스를 조회합니다.

lsof -n -i -P | grep 8080
 
  1. lsof: 현재 실행중인 프로세스를 확인한다.
  2. -n: 호스트네임을 제거한다.
  3. -i: IPv[46] 파일들을 선택한다.
  4. -P: 포트의 이름을 제거한다.

 

COMMAND   PID    USER  FD    TYPE DEVICE    SIZE/OFF   NODE NAME
java      12345  user  128u  IPv6 0x5210d6  0t0        TCP 127.0.0.1:8080 (LISTEN)

2. 해당 포트를 사용하는 프로세스를 종료한다.

kill -9 12345
위 명령어를 통해 프로세스를 종료합니다.

'Develop > SpringBoot' 카테고리의 다른 글

DAO, DTO, VO, Entity의 개념  (0) 2021.12.30
Spring Boot : MVC패턴  (0) 2021.12.30
IntelliJ 콘솔창 색깔 바꾸기 : Grep Console  (0) 2021.12.28
템플릿 엔진이란?  (0) 2021.12.24
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기