여러분은 포트 충돌이 일어나면 어떻게 하나요?

왜 Spring Boot는 "같은 포트(기본 8080)"만 쓰나?
Port 8080 was alerdy in use.
Spring boot 쓰다 보면 지겹도록 보는 에러입니다.. IntelliJ를 강제 종료하거나, IDE가 예기치 않게 종료되었을 때 백그라운드 프로세스에서는 기존 포트가 이미 가동 중이므로, 충돌이 나는 거죠.

물론 mySQL에서도 자주 보는 에러입니다.💦
Spring Boot는 서비스 서버입니다. 클라이언트/리버스 프록시/웹훅/OAuth 콜백 등 외부에서 고정 주소로 붙어야 합니다.
포트가 이미 점유되어 있으면 실패(fail-fast) 하는 게 맞습니다. 자동으로 다른 포트로 도망가면 모니터링/프록시/헬스체크가 전부 틀어집니다.
`lsof -i :{포트번호}`를 입력하면 아래처럼 조회할 수 있습니다.

lsof -i
네트워크(Internet) 소켓을 사용 중인 프로세스를 보여주는 명령어
그리고 `kill -9 {PID}`를 입력하면 포트를 종료할 수 있죠
kill
SKGKILL 신호를 보내 '즉시 강제 종료'하는 명령어. 커널이 바로 프로세스를 죽임
매번 타이핑 귀찮다면: 함수/alias로 등록
매번 포트 찾고 포트번호 넣어서 kill 하는 거 귀찮아서 `alias` 등록해서 쓰고 있어요
진작해 둘걸.. 써보니까 편한 듯
killports='f(){ lsof -tiTCP:$@ | xargs -r kill -9; }; f'

Vite는?
근데 여기서 궁금점. Vite는 이미 사용 중인 포트가 있으면 다른 포트 번호를 켜지는데 왜일까?
Vite는 기본값으로 `strictPort: fasle`라서 그렇습니다.
strictPort
`strictPort`는 Vite의 서버 옵션으로, 지정한 포트가 이미 사용 중일 때의 동작을 정한다.
- strictPort: false(기본): 지정 포트(기본 5173)가 점유되어 있으면 자동으로 다음 빈 포트(5174, 5175 …)로 바꿔서 실행.
- strictPort: true: 지정 포트가 점유되어 있으면 실패(에러 후 종료). 포트를 고정해야 할 때 사용.
즉, 지정한 포트(기본: 5173)가 이미 사용 중이면 자동으로 빈 다음 포트를 찾아서 띄운다. (ex. 5174, 5175)
이는 개발 중 서버가 자주 켜졌다 꺼져도 멈추지 않게 하려는 DX 설계이다.
현재 프로젝트에서 vite를 쓰고 있음에도, 직접 셋팅하지 않다 보니 서버 옵션에 대해서는 모르는 게 많은 것 같다.
공부해야겠지...

'Development' 카테고리의 다른 글
| [Web] 브라우저 “탭( Tab )”을 노리는 공격, Tabnabbing (0) | 2025.10.13 |
|---|---|
| [C언어] return 0, 그리고 0과 1의 진짜 의미 (0) | 2025.10.06 |
| [Cursor] Figma MCP 연결하기 (더이상의 반복 작업은 지양한다) (2) | 2025.09.30 |
| [ChatGPT] 이미 구독 중이라면, 3개월 동안 Plus 50% 할인 받기 (0) | 2025.09.29 |
| [Git] Git Merge 충돌, IntelliJ와 GitHub Desktop에서 다르게 동작하는 이유 (1) | 2025.06.27 |