일반적으로 상대 호스트를 특정하기 위해서는 IP주소보다 도메인 주소를 많이 사용한다. naver의 도메인은 알지만 ip는 모르는 것처럼 말이다. 도메인과 ip는 네임서버에서 관리하는데, 도메인을 관리하는 네임 서버를 DNS(Domain Name System)라고 한다.
여기서 면접 빈출 질문이 나온다.
www.naver.com을을 주소창에 치면 무슨일이 일어나나요?
사용자가 도메인 이름을 주소창에 치면, DNS가 도메인 이름에 맞는 IP주소를 찾아낸다. 연결을 위해 tcp 연결 설정을 한다. 이 과정에서 3way-handshake 가 일어난다. 대부분의 사이트는 보안상 https를 이용하기에 ssl/tsl 인증서를 서버가 브라우저에 보낸다. 이 과정이 끝나면 렌더링을 위한 http요청을 서버에 보낸다. 서버는 html 파일을 브라우저에 보낸다.
네트워크적 흐름 요약
- 브라우저가 URL을 입력 → 2. DNS 서버로 IP 조회 → 3. 서버와 TCP 연결 → 4. HTTPS로 암호화된 연결 → 5. HTTP 요청 → 6. 서버의 응답 → 7. 브라우저가 HTML 렌더링 → 8. 웹 페이지 표시 → 9. 사용자 상호작용.
DNS 레코드 타입
처음 EC2 인스턴스를 발급받으면 IP가 가변적인 IP를 할당받는다. AWS ROUTE53에서 도메인을 구입 후, 가변 IP가 아닌 탄력적 IP(Elastic ip)를 받아 A 타입으로 매핑한다. 이 때는 구매한 도메인이 example.com이라면 이것만 매핑되고, CNAME에 별칭, 예를 들면 www.example.com을 을 쳐도 자동으로 리다이렉션되도록 한다.
HTTP 의 특징
1. 요청 - 응답 기반 프로토콜이다.
2. 미디어 독립적이다.
3. 상태를 저장하지 않는다. (Stateless)
4. 지속 연결 기능을 지원한다. (connect)
만 봤을 때는 무슨 소리인지 모르겠다...
2번 특징은 http가 요청하는 대상을 자원이라 할 때, 자원의 특성을 제한하지 않는다.
3번 특징은 클라이언트와 관련된 상태를 저장하지 않는다는 뜻이다. 기본적으로 독립적으로 작동한다.
HTTP 메서드
실제 사용 사례
이를 통해, 권한이 없는 클라이언트는 이 기능을 사용하지 못한다.
HTTP 상태코드
200은 요청과 응답이 성공하고, 201은 post 요청에 대한 정보 업데이트 성공 시이다.
200번대와 400번대가 특히 중요하다고 한다. 400번대는 클라이언트 측 오류 코드이다. 400은 요청이 잘 못되었을때, 401은 권한이 없을 때, 403은 요청이 서버에 의해 거부될 때, 404는 요청 받은 자원을 찾을 수 없을 때, 405는 요청 메서드를 지원하지 않을 때이다.
나의 경우, API 사용 시 환경변수 파일 경로를 잘못 설정했을 때, HTTP 오류 코드가 403이 떴었다. 잊지 않을 것 같다.
HTTP 헤더
요청과 응답 시 헤더가 다르다.
4. Authorization
캐시
클라이언트가 이미지를 조회하기 위해 GET요청을 보내는데 똑같은 내용인데 매번 같은 요청을 보낼 필요가 있을까? 데이터 변화가 없으면 대역폭의 낭비이다. 응답 내용의 사본을 저장해서 활용한다. 그러나 사본이기에, 원본 데이터의 변화가 발생하면, 그를 반영해줘야 한다. 유효기간을 반영하기도 하고, 데이터가 변화되었는지를 감지하여 변했을 때만 새 자원으로 갱신해달라고 할 수 있다.
적용 : 대부분의 API의 경우 API 요청 상한이 정해져있다.
etag는 자원의 버전을 확인하기 위한 정보이다. 버전이란 유의미한 변경사항을 말한다. 캐시 신선도를 검사할 때, etag를 검색해서 같은 버전이 없으면 갱신된 것이므로 새로 캐시 데이터를 유효한 값으로 변경하도록 할 수 있다.
1번의 경우 200번 코드를, 2번의 경우 304(not modified), 3번의 경우 404(not found) 상태 코드를 반환한다.
쿠키
HTTP의 상태를 저장하지 않는다는 특성을 보완하기 위한 수단이다.
쿠키의 한계 쉽게 접근이 가능해, 보안이 취약하다. Httponly로 방어할 수 있다.
세션 스토리지는 세션이 유지될 때, (브라우저가 열려 있는 동안) 유지되는 정보이고, 로컬 스토리지는 브라우저가 닫혀도 유지되는 스토리지이다. 별도로 삭제하지 않는 한 영구 저장된다.
쿠기와 웹 스토리지 모두 key, value 형태를 띈다.
'네트워크' 카테고리의 다른 글
[혼공네] 03-3 라우팅 (0) | 2024.10.30 |
---|