본문 바로가기
삵

스프링부트에서 외부 API 호출이 몰리면 Cannot assign requested address가 납니다

조회 0 · 댓글 0
모나미153모나미153작성자2026년 11월 3일

지난번 nginx 뒤 스프링부트 돌리던 그 서버입니다. Ubuntu 22.04, OpenJDK 17, Spring Boot 3.2 애플리케이션이고 내부 결제 승인용 API로 RestTemplate으로 HTTPS 호출을 많이 보냅니다. 평소엔 멀쩡한데 트래픽이 몰리는 시간대(초당 수백 건)만 되면 일부 호출이 아래처럼 터집니다.

org.springframework.web.client.ResourceAccessException: I/O error on POST request for "https://내부api/approve": Cannot assign requested address
  ...
Caused by: java.net.BindException: Cannot assign requested address
	at java.base/sun.nio.ch.Net.bind0(Native Method)
	at java.base/sun.nio.ch.Net.bind(Net.java:565)

상대 서버가 막힌 건 아닙니다. 같은 순간에 curl로 그 API를 치면 바로 응답이 옵니다. 피크가 지나면 에러도 사라지고요. 서버에서 소켓 상태를 보면 TIME_WAIT가 유난히 많습니다.

$ ss -s
Total: 1123
TCP:   29500 (estab 180, closed 29100, timewait 28800)

$ cat /proc/sys/net/ipv4/ip_local_port_range
32768	60999

nofile 리밋은 지난번에 올려둬서 Too many open files는 안 납니다. JVM 힙이나 커넥션 풀 크기도 의심해서 로그를 봤는데 애플리케이션 예외보다 먼저 OS단에서 bind가 실패하는 것 같습니다. 특정 시간대, 특정 목적지로 호출이 집중될 때만 재현됩니다.

이 bind 실패가 왜 호출이 몰릴 때만 나는지, 어디를 봐야 하는지 짚어주실 수 있을까요.

로그인 후 답글을 남길 수 있습니다.