본문 바로가기
강의 실습/비전공자도 이해할 수 있는 리눅스 입문 실전

특정 포트 번호에 실행되고 있는 프로세스 조회하기 / 포트 충돌 해결하기 (lsof)

by jint 2025. 11. 25.

1. 실전에서 자주 만나는 에러
이전에 Spring Boot 실행 후 발생한 "Port 8080 was already in use" 에러는 실제 현업에서도 자주 만난다. 이 에러의 원인을 정확히 파악하려면 포트(Port)에 대한 개념을 알아야 한다.


2. 포트(Port)란?
포트(Port) : 한 컴퓨터 내에서 실행되고 있는 특정 프로그램의 주소
하나의 컴퓨터에는 총 65536개(0~65535)의 포트 번호를 가지고 있다. Spring Boot 와 같은 백엔드 서버를 실행시킬 때 어떤 포트에서 실행시킬지 정해야 하는데, 만약 아무런 설정을 하지 않으면 Spring Boot 는 기본적으로 8080번 포트에서 실행하도록 작동한다. 
주의할 점은 하나의 포트에는 단 하나의 프로세스만 실행시킬 수 있다는 점이다. 예를 들어, 8080번 포트에 이미 Spring Boot 서버가 실행되고 있다고 가정하고 Node.js 서버를 8080번 포트에 띄우려고 하면 에러가 발생한다. 8080번 포트에 이미 Spring Boot 프로세스가 실행되고 있기 때문이다.


3. 에러 원인 해석하기

Port 8080 was already in use


포트는 "한 컴퓨터 내에서 실행되고 있는 특정 프로그램의 주소"이므로, 8080번 포트에서 어떤 프로그램이 이미 실행되고 있다는 뜻이다. 그래서 Spring Boot 실행시 에러가 발생한 것이다.


4. 특정 포트 번호에 실행되고 있는 프로세스 조회
sudo lsof -i:[포트번호] : 특정 포트 번호에 실행중인 프로세스 조회
* 주의
sudo 를 붙여야 시스템 내 모든 프로세스를 기반으로 특정 프로세스를 조회한다.

- Ubuntu

ubuntu@ip-172-31-39-75:~$ sudo lsof -i:8080
COMMAND    PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
java    386662 ubuntu    9u  IPv6 3837529      0t0  TCP *:http-alt (LISTEN)


8080번 포트에서 실행중인 프로세스가 조회된다. 조회된 프로세스에서 2가지 항목만 살펴본다.

· COMMAND : 프로세스를 실행시킬 때 사용한 명령어의 "일부"만 보여줌
· PID : 프로세스 식별 ID

COMMAND 항목의 값만으로 어떤 프로세스인지 유추하기 어려울 때 ps aux 명령어와 PID 값을 활용한다.

- Ubuntu

ps aux | grep 386662
ubuntu    386662  0.1 15.2 2785592 142396 ?      Sl   Nov24   2:30 java -jar linux-springboot-0.0.1-SNAPSHOT.jar
ubuntu    390824  0.0  0.2   7076  2092 pts/0    S+   12:24   0:00 grep --color=auto 386662


구체적으로 어떤 명령어를 통해 어떤 프로세스를 실행시켰는지 더 명확하게 파악할 수 있게 된다.


5. 특정 포트 번호에 실행되고 있는 프로세스 종료하기
8080번 포트에 원하는 프로세스를 실행시키기 위해 기존에 실행중인 프로세스를 종료시킨다.
sudo lsof -i:[포트번호] 명령어를 통해 8080번 포트에서 실행중인 프로세스의 PID 값을 알아낸 후, kill 명령어를 통해 프로세스를 종료시킨다.

- Ubuntu

ubuntu@ip-172-31-39-75:~$ sudo lsof -i:8080
COMMAND    PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
java    386662 ubuntu    9u  IPv6 3837529      0t0  TCP *:http-alt (LISTEN)
ubuntu@ip-172-31-39-75:~$ kill 386662
ubuntu@ip-172-31-39-75:~$ sudo lsof -i:8080


프로세스가 잘 종료되었다.
Spring Boot 서버를 다시 실행시킨 후 실행된 프로세스를 조회한다.
포트 충돌 없이 잘 실행되었는지 nohup.out 로그 파일을 확인해본다.

- Ubuntu

ubuntu@ip-172-31-39-75:~$ ls
all.txt  app.txt  awesome-service  directory.txt  dummy.txt  error.txt  linux-springboot  list.txt  list2.txt  list3.txt  list4.txt  myfile.txt  new-box  result.txt
ubuntu@ip-172-31-39-75:~$ cd linux-springboot/build/libs
ubuntu@ip-172-31-39-75:~/linux-springboot/build/libs$ ls
app.log  linux-springboot-0.0.1-SNAPSHOT-plain.jar  linux-springboot-0.0.1-SNAPSHOT.jar  result.log
ubuntu@ip-172-31-39-75:~/linux-springboot/build/libs$ nohup java -jar linux-springboot-0.0.1-SNAPSHOT.jar &
[1] 390872
ubuntu@ip-172-31-39-75:~/linux-springboot/build/libs$ nohup: ignoring input and appending output to 'nohup.out'

ubuntu@ip-172-31-39-75:~/linux-springboot/build/libs$ sudo lsof -i:8080
COMMAND    PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
java    390872 ubuntu    9u  IPv6 3878294      0t0  TCP *:http-alt (LISTEN)
ubuntu@ip-172-31-39-75:~/linux-springboot/build/libs$ ls
app.log  linux-springboot-0.0.1-SNAPSHOT-plain.jar  linux-springboot-0.0.1-SNAPSHOT.jar  nohup.out  result.log
ubuntu@ip-172-31-39-75:~/linux-springboot/build/libs$ cat nohup.out

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/

 :: Spring Boot ::                (v3.5.0)

2025-11-25T12:43:21.252Z  INFO 390872 --- [linux-springboot] [           main] c.e.l.LinuxSpringbootApplication         : Starting LinuxSpringbootApplication v0.0.1-SNAPSHOT using Java 17.0.17 with PID 390872 (/home/ubuntu/linux-springboot/build/libs/linux-springboot-0.0.1-SNAPSHOT.jar started by ubuntu in /home/ubuntu/linux-springboot/build/libs)
2025-11-25T12:43:21.261Z  INFO 390872 --- [linux-springboot] [           main] c.e.l.LinuxSpringbootApplication         : No active profile set, falling back to 1 default profile: "default"
2025-11-25T12:43:23.368Z  INFO 390872 --- [linux-springboot] [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port 8080 (http)
2025-11-25T12:43:23.402Z  INFO 390872 --- [linux-springboot] [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2025-11-25T12:43:23.403Z  INFO 390872 --- [linux-springboot] [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.41]
2025-11-25T12:43:23.462Z  INFO 390872 --- [linux-springboot] [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2025-11-25T12:43:23.465Z  INFO 390872 --- [linux-springboot] [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2052 ms
2025-11-25T12:43:24.140Z  INFO 390872 --- [linux-springboot] [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port 8080 (http) with context path '/'
2025-11-25T12:43:24.174Z  INFO 390872 --- [linux-springboot] [           main] c.e.l.LinuxSpringbootApplication         : Started LinuxSpringbootApplication in 3.943 seconds (process running for 4.888)
2025-11-25T12:45:25.930Z  INFO 390872 --- [linux-springboot] [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2025-11-25T12:45:25.931Z  INFO 390872 --- [linux-springboot] [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2025-11-25T12:45:25.934Z  INFO 390872 --- [linux-springboot] [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 3 ms


에러메시지 없이 정상적으로 실행된 것을 확인할 수 있다.


참고링크 : https://www.inflearn.com/course/%EB%B9%84%EC%A0%84%EA%B3%B5%EC%9E%90%EB%8F%84-%EC%9D%B4%ED%95%B4%ED%95%A0-%EC%88%98-%EC%9E%88%EB%8A%94-%EB%A6%AC%EB%88%85%EC%8A%A4-%EC%9E%85

 

비전공자도 이해할 수 있는 리눅스 입문/실전| JSCODE 박재성 - 인프런 강의

현재 평점 5.0점 수강생 295명인 강의를 만나보세요. 비전공자 입장에서도 쉽게 이해할 수 있고, 실전에서 바로 적용 가능한 '리눅스 입문' 강의를 만들어봤습니다! 리눅스를 처음 배우시는 분, Per

www.inflearn.com

댓글