[ Network ] 웹 통신의 큰 흐름 : https://www.google.com 을 접속할 때 일어나는 일

junjun·2023년 12월 17일
0

기술면접

목록 보기
2/3
post-thumbnail

웹 세계가 이런줄은 몰랐지 내가

🎙 https://www.google.com 에 접속할 때 일어나는 일을 설명해주세요!
라는 질문을 받았을 때 오? 하는 면접관님의 반응 얻는 방법에 대한 포스팅입니다.


[1] 브라우저( Web Client )는 URL을 받아서 뭘 하는가?

  1. 사용자가 브라우저 주소창에 접속하고자 하는 서버의 URL을 입력한다.

  2. 웹 브라우저에서 URL의 구조를 분석한다.
    ( 브라우저 프로세스의 URL을 해독하는 부분부터 브라우저의 동작이 시작됨 )

  3. 분석한 구조를 기반으로 HTTP Request를 작성한다.

  4. 브라우저는 HTTP Request를 생성했지만, 이를 직접적으로 네트워크에 송출하는 기능을 가지지는 않는다. OS에게 해당 메시지를 google 웹 서버에 보내는 작업을 의뢰한다.

이 때, 네트워크 애플리케이션은
소켓 라이브러리의 기능을 사용해 프로토콜 스택에 데이터 송수신을 요청한다.

public Socket(String host, int port) throws UnknownHostException, IOException {
    this(host != null ? new InetSocketAddress(host, port) :
         new InetSocketAddress(InetAddress.getByName(null), port),
         (SocketAddress) null, true);
}

...

public InetSocketAddress(String hostname, int port) {
    checkHost(hostname);
    InetAddress addr = null;
    String host = null;
    try {
        addr = InetAddress.getByName(hostname);
    } catch(UnknownHostException e) {
        host = hostname;
    }
    holder = new InetSocketAddressHolder(host, addr, checkPort(port));
}

...

public static InetAddress getByName(String host) throws UnknownHostException {
        return getAllByName(host)[0];
}

...


https://wonsjung.tistory.com/614

https://cl8d.tistory.com/71

PC ( Windows ) - 공유기/NAT(R) - ISP ( Internet ) - Naver

PC - 공유기 - DNS

URL + URI

  • 위치 지정자 vs 식별자

윈도우 운영체제 기준으로,
URL ( 도메인 네임 ) - www.naver.com / naver.com 도메인에 속해있는 이름 www
IP 주소를 알아야 함. => DNS에게 질의를 하게 되어있다.
DNS Hierarchy ( 분산형 DB 구조 )
DDNS ( Dynamic DNS )

1) DNS 서버에 IP 주소 질의
2) 그 이전에, 컴퓨터마다 hosts파일을 뒤져본다.
3) DNS 캐시 결과를 본다. ( expire )
4) 만약, hosts 파일에 없다면 질의를 한다. -> 192.168.0.1 ( 공유기 ) ->

PC에서 서버로 TCP 연결을 한다. ( HTTP 통신을 한다. -> 근데 HTTP 통신은 TCP 연결을 기반으로 한다 )

TCP 연결 Success -> HTTP Request (6)
-> HTTP Response (7) // 신입사원이 할 말 수준.


GSLB ( ? )
-> 구현하는 방법 : CDN 서비스 ( Content Delivery Network Service )

CDN : akamai, kt

CDN을 왜 쓰나요?

GSLB를 구현하는데,
DNS를 통한 구현
System ( DNS ) / Health Check

DNS -> IP 주소를 알려줌.

Akamai CDN

  • PC => 접속 / CDN에서, 접속자의 IP를 보고 DB로 IP 주소의 위치를 파악한다.
    어떤 IP 주소로 접속할 때 가장 빠를까?
    Naver 웹서버가 N개 중에, 서울에서 가장 원활하게 접속할 수 있는, 반응성이 좋은 IP 주소로 연결해준다.
    ( GSLB )

Health Check?

  • 서버가 죽었다면..
    네이버 서버가 여러개가 있을 때,
    서울 | 도쿄 | 미국 | 부산 서버가 있을 때, 하나가 DDoS를 받아서 죽었다..
    그럼 다른거 연결시켜주는 것

로그인 상태에서 다운.. 부산으로 접속 ( 로그인 세션 유지? )
-> 만약, 그게 되게 하려면 서버를 어떻게 아키텍처를 구성해야하는가?
Fail Over를 어떻게 구현? 부하 분산? 장애 대응 어떻게 할 것?

DR = Disaster Response ( 재대응 )

BE 개발자.. 세션 유지 ( FailOver 났을 때, 어떻게 극복할 것인가? )

DNS를 속이는 공격 ( DNS Spoofing )

GSLB, CDN 을 이야기..


DNS와 DDNS

GSLB ( 부하분산 방법론 )

CDN ( Content Delivery Network )

Akamai

Docker + K8S
( 무중단 배포 해봤어? )
-> 서비스가 중지되지 않고, 버전 업
( 잘 활용시, 장애 대응도 된다 )

DevOps는 무엇인가?

Health Check -> 장애 대응 -> 무중단 배포

유저 모드 - 커널 모드 - 하드웨어
소켓, 패킷


이 질문으로부터 파생될 수 있는 질문들

  • URL과 URI의 차이가 뭔가요?
  • 왜 브라우저는 네트워크에 직접적으로 데이터를 송출하는 기능을 가지고 있지 않죠?
  • OS의 프로토콜 스택은 무엇인가요?
  • ARP는 무엇이고 어디에 사용하나요? RARP는 무엇이고 어디에 사용하나요?
  • 소켓에 대해 아는만큼 설명해주세요.

참고할만한 블로그
https://wonsjung.tistory.com/614

0개의 댓글