WebInfrastructureLoad BalancerDNS

웹 요청은 어떻게 처리 되는가(인프라)

·8 min read

소신발언: 네트워크, 보안보다 인프라가 더 재미있음

아무튼 보안은 내 전문이 아니기도 하고 덕분에 어제 글은 조금 슴슴했었다.

어쨋든 이번에는 인프라를 기준으로 이야기를 해보겠다.

먼저 우리의 암호화된 요청(HTTPS) 대부분은 백엔드 서버 도착하기 전에 전처리가 되는 경우가 많다.

특히나 실무에서 대규모 서비스를 운용하다보면 좀더 앞단에 여러 겹에 '중계소'나 '방화벽'이 존재한다.

로드 밸런서 = 교통 정리

만약에 아주 만약에 우리의 작고 소중한 서버에 100만명의 트래픽이 몰린다면?

"이렇게 큰 트래픽은 안들어갓!" 하고 터져버릴 것이다.

그러니 트래픽도 적절히 분산해서 처리를 해야하는데 이게 바로 로드 밸런서의 역할이다.

사용자 요청은 먼저 로드 밸런서를 만나고,

로드 밸런서는 연결된 여러 대의 건강한(Healthy) 서버들에게 트래픽을 적절히 분산한다.

참고로 분산 과정에 있어서도 OSI 계층이랑 연관이 있는데

처음 글쓸대 배웠던게 요청에서 부터 응답까지 U 자형으로 처리된다는 내용을 기억하는가?

무슨말이냐면 분산할때 뭘 기준으로 하냐에 따라서,

L4 LB(전송 계층): IP랑 포트번호로 단순 처리할게(빠름)

L7 LB(응용 계층): 안에 내용 보고 분산할게(/api 요청은 A 서버, /user 요청은 B 서버 등)

등으로 나뉠 수도 있다는 것이다.

참고로 서버를 분산화 해서 트래픽을 조절할 떄 부가적인 고민사항이 생긴다.

일반적으로 로드 밸런서를 쓴다는 것은 부가적인 다른 서버나 구성 요소들도 분산이 되어있다는 뜻이다.

즉 A 서버 있고, B 서버 있듯이, A DB서버 있고, B DB 서버 있고... 이렇듯 분산이 한개뿐은 아닐 수 있다는 것이다

그럼 문제가 뭐냐

A서버에서 서비스 이용하다가 로드 밸런서가 B 서버로 튕겼을떄, 세션이나 상태 관리 어떻게함?

A DB 서버 데이터 조회하다가 B DB 서버로 옮겨졌는데 데이터 똑같음?

등의 부가적인 관리 포인트가 생긴다

아무튼 그건 지금 시간에는 안다루고, 그냥 고민만 해보시라고 화두만 던진다.

어차피 내용 까고 볼꺼면 니가 보안 처리도 해(TNS Termination)

아까 L7 LB는 요청 내용도 보고 분산한다는 이야기를 했었다.

통신 내용이 공개되면 보안 문제가 있으니 TLS를 이용해서 암호화를 하지만,

암호화 된 내용을 복호화 한다는 것은 컴퓨팅 파워가 좀 들어간다는 것이다.

근데 L7 LB 누구꺼? 내꺼

로드 밸런서랑 서버랑 통신 네트워크는? 내꺼(내부망)

내용 보려면? 어차피 복호화 해야함

즉 어차피 여기서도 복호화 할꺼

이라는 조건 하에 로드 밸런서가 기존 암호화를 미리 종료해버리고

고오급 애플리케이션 서버는 비즈니스 로직에 집중하라는 방법이다.

즉 로드 밸런서에서 요청이 처리되고 나면 보안은 벗겨지고,

그 다음부터는 평문 HTTP 요청으로 처리 되는 것이다.

내용 까볼 수 있으니 이제 해킹 요청은 차단하기(WAF, Web Application Firewall)

우리가 아는 방화벽(Firewall)은 네트워크 중심으로 보통 허용된 포트나 허용된 아이피를 관리한다.

WAF는 우리가 요청을 평문으로 까보고 확인할 수 있으니,

웹 어플리케이션 레벨의 공격을 탐지한다.

과거에 유명했던 SQL Injection이나...XSS, DDOS 등의 악의적인 요청을 탐지하는 것이다.

실무에서 일하다보면 있다는 것은 아는데(약간 정부 기관이나 대형 기관 한정)

실제로 접근하지는 못하는 경우가 많다보니 이 부분은 지식이 부족하기도 하고, 이정도로 넘어가겠다.

90% 요청은 단순하다.

우리 깊은 뒷단에 있는 WAS는 복잡한 비즈니스 로직을 처리하셔야한다.

하지만 실제로 사용자 요청의 90%는 아주 단순한 정적 리소스 요청이 대부분일 것이다.

귀하신 분이 쓸데없는 일에 신경을 쓰셔야 되겠는가?

그렇기 때문에 우리는 WAS 앞에 WEB 서버를 두고 정적인 요청은 굳이 백엔드까지 안끌고 가고 웹 서버가 직접 파일을 읽어 즉시 응답한다.

WEB 서버는 요청의 대부분인 간단한 처리를 하고

남은 소수의 실제(동적) 요청을 뒤에 있는 전문가인 WAS 에게 전달 하는 것이다.

요약
  1. 로드 밸런서가 부하 관리하면서 적잘한 서버로 넘길 준비함

  2. 복잡한 암호화는 TLS Termination을 통해 벗겨내고, 평문 HTTP만 전달함

  3. 껍질 까진 알맹이 가지고 WAF가 보안 검사 돌려서 확인함

  4. 웹 서버가 단순 요청은 직접 처리하고, 복잡한 요청은 뒷단 WAS로 보냄

일단 웹 처리 과정에 대해서 물어본다면 아마

네트워크 + 보안 + 인프라 범위 내에서 물어보지 않을까?

백엔드나 프론트나 그건 이제 각 영역에서 심화 질문으로 들어갈 것이기에

일단 여기까지 글을 쓰고 다음에는 좀더 흥미로운 주제로 가겠다.

← Previous
아키텍처와 설계
Next →
AWS 배포