9osari.log
← 목록으로

[Network] 네트워크 장애 대응기

네트워크 접속 이슈…

지금 시스템 접속이 안 되는데요? 오늘 PQ 진행해야하는데..

급하게 VPN을 켜고 접속을 시도했다. 내 PC에서는… 멀쩡하게 접속된다.


상황 파악

침착하게 상황을 정리해봤다.

문제 증상

시도해본 방법


소거법으로 범인 찾기

패킷은 출발지에서 생성될 때 이미 모든 계층의 정보를 감싸 이동
장애 상황에서는 하위 계층부터 순차적으로 점검하여 문제를 좁혀가는 것이 가장 효율적
하위 계층에 문제가 있다면 상위 계층은 동작할 수 없기 때문에 2계층 → 3계층 → 4계층 -> 7계층 순으로 확인

Ping 테스트 (2-3계층 확인)

ping 203.xxx.xxx.xxx

결과: 성공

네트워크 경로는 정상이다. IP까지는 도달한다는 뜻이니, 라우터나 경로 문제는 아니다.

2계층

2계층

3계층

3계층

클라이언트가 외부 서버에 접속할 때:

  1. 목적지 IP가 내부망(192.168.x.x)이 아니면 → 외부망으로 판단
  2. 게이트웨이의 MAC 주소를 ARP로 찾아서
  3. 패킷을 게이트웨이로 전송
  4. NAT로 사설 IP를 공인 IP로 변환하여
  5. 여러 라우터를 거쳐 목적지 서버에 도달

Ping이 성공했다는 건 이 과정이 정상이라는 의미다.


Telnet 테스트 (4계층 확인)

4계층

4계층

Ping이 성공했으니 이제 포트까지 확인해보자.

telnet 203.xxx.xxx.xxx 8080

결과: 실패

‘어? 포트가 막혀있나?’

고객사 담당자에게 다시 확인했다. “서버 방화벽에서 8080 포트 열려있는 거 맞죠?” “네, 분명 열려있어요.”

그런데 telnet은 실패한다. 이건 뭔가 중간에 막고 있다는 뜻이다.

패킷에는 이런 정보가 들어있다:

서버까지는 도달하는데(ping 성공), 포트 연결은 안 된다(telnet 실패). 그럼 서버와 클라이언트 사이 어딘가에 포트를 막는 무언가 있다는 거다.


범인 찾기

“지금 Ping은 성공하고 Telnet이 실패해서 그러는데 서버랑 클라이언트 사이에 다른 네트워크 장비 있는지 확인해 주실 수 있나요? “음… 잠시만요, 네트워크 담당자한테 물어볼게요.”

“아, L7 스위치가 있다는데요?”

범인을 찾았다.

고객사도 몰랐던 중간 네트워크 장비가 특정 URL 패턴을 차단하고 있었던 것이다. 주말 사이 보안팀에서 보안 정책을 업데이트했고, 그 과정에서 시스템 경로가 차단 규칙에 걸려버렸다.


L7 스위치

L7 스위치는 7계층(응용 계층)에서 동작하는 로드밸런서다.

L4 스위치 (4계층 - 전송 계층)

L7 스위치 (7계층 - 응용 계층)

우리 경우는 L7 스위치가 URL 패턴을 보고 차단한 케이스였다.


해결

네트워크 담당자와 협업하여:


배운 것들

소거법

무작정 이것저것 시도하는 것보다, 체계적으로 하위 계층부터 확인하는 게 훨씬 효율적이다.

Ping (2-3계층) → 네트워크 경로 확인

Telnet (4계층) → 포트 연결 확인

WAS 로그 (7계층) → 애플리케이션 확인

근거 기반 커뮤니케이션

고객사에 확인을 요청하려면 근거가 필요하다. 우리는 ‘을’ 입장이다.

“뭔가 안 되는데 확인 좀 해주세요”

보다는

“Ping은 성공하는데 Telnet이 실패합니다. 서버 방화벽은 열려있다고 하셨으니, 혹시 중간에 다른 네트워크 장비가 있는지 확인 부탁드립니다.”

네트워크 흐름을 이해하고 있어야 정확하게 요청할 수 있다.

숨어있는 장비들

실제 운영 환경에는 생각보다 많은 장비들이 숨어있다:

담당자도 모를 수 있으니, 네트워크 담당자와의 협업이 중요하다.


또 다른 장애 케이스

DB Connection Timeout

증상:
- ping 성공
- telnet 성공
- 서버 접속 500 Error
- WAS 로그에 아무것도 안 뜸

이 경우는 4계층까지는 정상이고, 애플리케이션 레벨 문제다.

원인

해결


마치며

네트워크 장애는 패킷이 어떻게 이동하는지 이해하고 하위 계층부터 체계적으로 확인하면 생각보다 빠르게 해결할 수 있다.

물데네전세표응을 외우는 것보다, 흐름을 이해하고 실전에 적용하는 게 중요하다.

다음 장애가 왔을 때는 조금 덜 당황할 수 있을 것 같다.


더 알아보기

···
← PREV [쿼리튜닝] 공통쿼리 개선 NEXT → [DevBid - JPA] 낙관적 락 적용과 데드락