Web 기본 지식

2021. 4. 15. 20:20dev

URL 입력 후, 일어나는 일들 

클라이언트가 브라우저 주소창에 URL을 입력하고 일어나는 일들은?

1. URL 해석

먼저, 브라우저가 URL을 해석한다. 이때 URL 문법에 맞지 않는다면, 기본 검색엔진으로 검색을 진행하고, 문법에 맞는 경우 URL의 호스트 부분을 인코딩한다. 이때, HSTS(HTTP Strict Transport Security) 목록을 조회하는데, HSTS는 http를 허용하지 않고 https만 허용하는 기능이다. HSTS 목록에 해당 URL이 존재한다면 명시적으로 http를 통해 요청을 해도 브라우저가 이를 https로 요청한다. 

URL 문법 표현방법
protocol: [//[user:password@]host[:port]][/]path[?query][#fragment]

 

만약 검색창에 네이버 주소를 입력했다면,

https://www.naver.com/

이런식으로 URL이 입력될 것이고, www.naver.com  이부분이 호스트가 된다. 

 

2. DNS 조회

먼저, DNS란 Domain Name Server를 말한다. IP주소를 외우고다닐 수 없기때문에, 우리가 사용하기 편하도록 각 IP주소에 도메인 네임을 지정해 사용하는 것이다. 이 도메인 네임과 IP주소에 대한 정보를 저장하고 있는 곳이 DNS이다. 

 

URL 입력후, 브라우저와 로컬의 캐시를 확인하여 도메인에 해당하는 IP주소가 있는지 알아보고, 만약 없다면 OS에게 DNS에 요청하라고 지시한다. 이때 DNS 서버가 해당 도메인에 해당하는 IP주소를 돌려주는 것이다. 

 

3. 게이트웨이 이동 

DNS 서버에게 IP주소를 받았으므로, 이제 해당 서버로 요청을 보내야한다. IP주소의 목적지는 라우터를 통해 찾아가면 된다. 라우터는 라우팅 테이블을 통해 해당 요청이 어떤 경로를 통해 가야할지 경로를 지정해주는 역할을 수행한다. 

 

4. IP주소를 MAC주소로 변환

실질적 통신을 위해서는 IP주소(논리 주소)를 MAC주소(물리 주소)로 변환시켜야 한다. 이때 변환은 ARP라는 주소 결정 프로토콜을 통해 이루어진다. ARP는 네트워크 상에서 IP주소를 물리적 네트워크 주소로 대응(bind) 시켜준다. 

 

5. TCP 소켓 연결

대상이 되는 서버와 통신하기 위해서 TCP 소켓을 연결한다. 소켓 연결방식은 3-way-handshake라는 과정을 통해 이루어진다. 

 

HTTPS의 경우, 암호화 통신을 위한 TLS 핸드쉐이킹이 추가된다. 이 과정을 통해서 서버와 클라이언트가 서로 암호화 통신을 진행할 수 있는 것이다. 

 

6. HTTP(S) 프로토콜 요청 및 응답 

마지막으로, 해당 URL 페이지를 달라고 서버에 HTTP를 요청한다. 이때, 서버는 이 요청에 대해 수락 여부를 판단하고 응답을 생성하여 브라우저에게 전달한다. 이 모든 과정을 거친 후에야 클라이언트 눈에 브라우저 화면이 보이게 되는것이다. 


HTTP와 HTTPS의 차이점 

HTTPS는 HTTP + SSL 이다. 

기존의 HTTP는 TCP와 직접 통신했지만, HTTPS는 HTTP와 TCP 사이에 SSL, TLS가 끼워져 있는 것이다. HTTPS에서 S는 Secure Socket을 의미하고, 기본 HTTP 기능에 데이터를 주고받는 과정에서 '보안' 요소가 추가된 것이라 생각하면 된다. 


쿠키와 세션의 차이점 

요약하면, 쿠키는 local에 저장되고 세션은 local과 sever에 저장된다. 또한, 쿠키는 탈취와 변조가 가능하고 세션은 ID값만 가지고 있기 때문에 쿠키에 비하여 상대적으로 안전하다. 

공통점으로는 로그인 정보같은 계속 유지시켜야하는 데이터를 저장하기 위해 사용하는 기능인데, 쿠키는 개인 PC에 저장되는 것이고 세션은 서버에 저장되는 것. 

 

그렇다면, 세션을 쓰면되지 왜 굳이 쿠키를 사용하는 것일까??

쿠키는 속도 측면에서 세션보다 빠르기 때문이다. 예를들어, 방문한 사이트에서 아이디와 비밀번호를 기억해두고 다시 방문할때 자동 입력되게 하고싶은지 물어보는 알림창을 본적 있을 것이다. 그때 쿠키가 사용되는 것이고, 로그인 세션처럼 사용자가 페이지 안에서 로그인하고 어떤 동작을 하더라도 로그인이 풀리지 않도록 해주는게 세션이다. 

하지만 쿠키는 방문 기록이나 개인정보가 기록될 수 있고 서버가 가지고 있는 것이 아니라, 사용자에게 저장되기 때문에 임의로 고치거나, 지울 수 있어 보안에 취약하다. 따라서 노출이 되면 안되는 중요한 정보들은 세션으로 저장해 서버안에서 관리해야한다.