본문 바로가기
Spring

Spring Boot Port 8080 was already in use 오류 해결: 프로세스 종료와 포트 변경 방법

by 바른정보블로그 2026. 8. 19.
Spring Boot Port 8080 was already in use 오류 해결을 안내하는 대표 이미지

IntelliJ에서 Spring Boot 애플리케이션을 실행하면 콘솔에 "APPLICATION FAILED TO START"와 함께 "Web server failed to start. Port 8080 was already in use."라는 오류가 뜨며 서버가 올라오지 않는 경우가 있다. 코드 로직 문제가 아니라 포트를 다른 프로세스가 이미 쓰고 있어서 발생하는 오류다. Spring Boot 공식 문서(버전 4.1.0, 2026년 8월 19일 확인) 기준으로 원인 진단과 해결 방법을 정리한다.

가장 흔한 원인은 IntelliJ에서 이전 실행이 완전히 종료되지 않고 백그라운드에서 8080 포트를 그대로 점유하고 있는 경우다.
Windows는 netstat, macOS·Linux는 lsof 명령으로 포트를 점유한 프로세스를 찾아 종료하거나, application.properties의 server.port 값을 바꿔 다른 포트로 실행하면 된다.
Docker로 띄운 컨테이너의 "port is already allocated" 오류는 원인이 다르므로 혼동하지 않는다.

상황별 확인표

상황확인 방법조치
같은 앱을 두 번 실행IntelliJ Run 창에 이전 인스턴스가 남아있는지 확인Stop 버튼으로 종료 후 재실행
다른 프로그램이 8080 사용netstat·lsof로 점유 프로세스 확인프로세스 종류 확인 후 필요 시 종료
포트를 바꿔서 쓰고 싶음application.properties 확인server.port 값 변경
테스트 코드에서만 발생같은 포트로 여러 테스트 동시 실행 여부랜덤 포트(server.port=0) 사용

점검 체크리스트

  • IntelliJ Run 창에 초록 원(실행 중) 표시가 남아있는지 확인
  • Windows 작업 관리자 또는 netstat으로 8080 사용 프로세스 확인
  • 8080을 다른 프로그램(다른 톰캣, 다른 백엔드 등)이 쓰고 있지 않은지 확인
  • application.properties·yml의 server.port 값 확인
  • Docker 컨테이너 포트 매핑과 혼동하고 있지 않은지 확인

단계별 해결 방법

  1. 오류 메시지에서 정확한 포트 번호를 확인한다. 기본값은 8080이지만 프로젝트 설정에 따라 다를 수 있다.
  2. IntelliJ Run 도구 창에서 이전 실행을 종료한다. 상단 Run 창 탭 목록에 실행 중이던 이전 Application이 남아 있다면 선택한 뒤 빨간 정지 아이콘(Stop)을 눌러 완전히 종료한다.
  3. Windows에서 포트를 점유한 프로세스를 찾는다.
    netstat -ano | findstr :8080
    마지막 열에 표시되는 숫자가 PID(프로세스 ID)다.
  4. PID로 프로세스 이름을 확인한 뒤 종료한다.
    tasklist /fi "pid eq 12345"
    taskkill /PID 12345 /F
  5. macOS·Linux에서 포트를 점유한 프로세스를 찾는다.
    lsof -i :8080
  6. macOS·Linux에서 프로세스를 종료한다.
    kill 12345
    kill -9 12345
    일반 종료(kill)가 안 되면 강제 종료(-9)를 사용한다.
  7. 포트를 바꿔서 계속 쓰고 싶다면 application.properties에 값을 추가한다.
    server.port=8081
  8. 파일을 건드리지 않고 이번 실행만 임시로 바꾸려면 커맨드라인 인자를 쓴다.
    java -jar app.jar --server.port=8081
  9. 포트 번호가 무엇이든 상관없다면 사용 가능한 포트를 자동으로 할당하게 한다.
    server.port=0

확인되지 않은 프로세스를 무작정 taskkill이나 kill -9로 강제 종료하지 않는다. 같은 PID가 다른 업무 프로그램이나 데이터베이스, 사내 VPN 클라이언트일 수 있으므로 tasklist·ps 명령으로 프로세스 이름을 먼저 확인한 뒤 종료 여부를 판단한다.

그래도 해결되지 않을 때 추가 점검

포트를 바꿔도 여전히 실패한다면 방화벽이나 백신 프로그램이 새 포트를 막고 있는지 확인한다. WSL2를 함께 쓰는 환경이라면 WSL 쪽 프로세스가 같은 포트를 점유하고 있지 않은지도 확인한다. Docker Desktop을 함께 쓰다가 "port is already allocated" 오류를 만났다면 원인이 다른 문제이므로 Docker 포트 충돌 해결 글에서 별도로 확인한다. IntelliJ 자체가 느려지거나 메모리 부족 오류가 겹친다면 IntelliJ 메모리 부족·느려짐 해결 글을, Gradle 빌드 시 JVM 버전 오류까지 함께 발생한다면 IntelliJ Gradle JVM 버전 오류 해결 글을 참고한다.

자주 묻는 질문

Q1. 포트 번호를 바꾸면 프론트엔드 연결이 끊기지 않나요?

A1. React·Vue 같은 별도 프론트엔드나 API 문서 도구가 8080을 직접 호출하도록 설정돼 있다면 그 설정도 함께 바꿔야 한다. 로컬 개발에서만 임시로 바꾼다면 프록시 설정의 대상 포트도 맞춰준다.

Q2. server.port=0으로 실행하면 포트를 어떻게 확인하나요?

A2. 콘솔 로그의 Tomcat·Netty 시작 메시지에서 실제 포트를 확인할 수 있고, 테스트 코드에서는 Spring Boot가 제공하는 @LocalServerPort로 주입받을 수 있다(공식 문서 기준).

Q3. 관리자 권한 없이 taskkill이 안 돼요.

A3. 다른 사용자 계정이나 관리자 권한으로 실행된 프로세스는 일반 권한에서 종료할 수 없다. 명령 프롬프트나 PowerShell을 관리자 권한으로 다시 열어 시도한다.


공식 출처: Spring Boot 공식 문서 – Embedded Web Servers: Change the HTTP Port

댓글