문제
애플리케이션을 실행시키는데 '8080 port is already used' 라는 에러가 났다.
문제 원인
다른 애플리케이션을 실행시키고 있는 게 없었기 때문에, 8080 port를 어디서 사용해야되는 지 알아야 했다.
아래 명령어를 터미널에 입력해서, 현재 열린 포트 목록과 PID를 확인했다.
PID는 참고로 운영체제에서 사용하는 Process의 ID이다.
sudo lsof -PiTCP -sTCP:LISTEN
-- 실행 결과
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 524 root 43u IPv6 0xf228382879241e9d 0t0 TCP *:49195 (LISTEN)
java 524 root 45u IPv6 0xf228382879240f9d 0t0 TCP *:8080 (LISTEN)
java 524 root 64u IPv6 0xf228382879242d9d 0t0 TCP *:2181 (LISTEN)
AnySign.e 525 root 9u IPv4 0xf228382d468c3b05 0t0 TCP localhost:31026 (LISTEN)
AnySign.e 525 root 13u IPv4 0xf228382d468c5c35 0t0 TCP localhost:31027 (LISTEN)
아래 명령어를 입력하면 8080 포트를 사용하는 PID만 확인할 수 있다.
sudo lsof -i :8080
-- 실행 결과
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 524 root 45u IPv6 0xf228382879240f9d 0t0 TCP *:http-alt (LISTEN)
아래 명령어를 입력하면 프로세스 실행 명령어를 알려준다.
8080 포트로 실행중인 PID가 524이므로, ps 524를 실행시켜 주었다.
--ps 프로세스ID
ps 524
-- 실행 결과
PID TT STAT TIME COMMAND
524 ?? Ss 0:03.27 /opt/homebrew/opt/openjdk/bin/java -Dzookeeper.log.dir=/opt/homebrew/Cellar/zook
실행 명령어를 보니 Zookeeper가 8080 포트를 사용하고 있음을 확인할 수 있었다.
문제 해결
우선, Zookeeper를 사용하는 프로세스를 종료시키는 것으로 문제를 해결하려 하였다.
아래 명령어를 입력하면, PID로 process를 종료시킬 수 있다.
-- sudo kill -9 PID
sudo kill -9 524
다시 열려있는 포트 목록을 확인하였는데, zookeeper가 재실행되는 것을 확인하였다.
sudo lsof -PiTCP -sTCP:LISTEN
-- 실행 결과
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 28548 root 45u IPv6 0xf2283828757aa61d 0t0 TCP *:8080 (LISTEN)
PID를 Kill하는 것으로는, 문제를 해결할 수가 없어서, 로컬에 설치했던 kafka와 zookeeper를 모두 삭제하였다.
zookeeper를 kafka에서 사용하고 있기 때문에, kafka부터 삭제하면 된다.
brew uninstall --force kafka
brew uninstall --force zookeeper
물론, kafka나 zookeepr를 삭제하지 않고, 애플리케이션의 HTTP port를 변경해주어도 된다.
아니면 zookeeper의 환경 설정에서 사용하는 port를 8080에서 다른 포트로 변경해주어도 된다.
내 경우에 애플리케이션은 8080 포트를 사용하고 싶고, kafka와 zookeeper를 한동안 사용하지 않을 것 같았기에 삭제하였다.
참고 자료