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
'강의 실습 > 비전공자도 이해할 수 있는 리눅스 입문 실전' 카테고리의 다른 글
| 내 IP 주소 확인하기 (ip) (0) | 2025.11.27 |
|---|---|
| 서버가 잘 작동하는 지 API 요청 보내보기 (curl) (0) | 2025.11.26 |
| 백그라운드에서 실행되고 있는 프로세스의 로그 확인하는 법 (nohup) (0) | 2025.11.24 |
| 터미널 창을 끄더라도 프로그램이 계속 실행되도록 만들기 (nohup, &) (0) | 2025.11.23 |
| [실습] 실행시킨 Spring Boot 프로세스를 조회하고 종료해보기 (0) | 2025.11.20 |
댓글