🎮HTTP
Hyper Text Transfer Protocol
인터넷에서 데이터를 주고 받을 수 있는 프로토콜이다. 웹 서버에서 통신하기 위해 사용하는 하나의 규칙으로써 4가지 요청형식이 존재한다.
- GET : 문서 요청의 역할. 서버가 클라이언트에 상태 정보와 복제된 문서를 보냄으로써 응답한다. - 조회
- HEAD : 상태 정보 요청. GET과 동일한 형태의 응답. 문서 복제X
- POST : 데이터를 서버로 송신. 서버는 해당 데이터를 아이템에 붙임 - 생성
- PUT : 데이터를 서버로 송신. 서버가 특정 아이템을 대체함 - 수정
HTTP 동작
클라이언트에서 브라우저를 통해 서비스를 요청(request)을 하면 서버에서는 해당 요청사항에 맞는 결과를 찾아 사용자에게 응답(response)하는 형태로 동작한다. HTML 뿐만 아니라 기본 text 부터 API 응답시 자주 사용하는 JSON형태, XML 형태등 다양한 형태의 정보를 주고 받을 수 있다.
HTTP 특징
1. TCP/IP를 이용한 응용 프로토콜이다. TCP/IP란 컴퓨터와 컴퓨터간의 원활한 통신을 가능하도록 하기 위한 Protocol로 정의할 수 있다. IP기반에 TCP가 사용되는 것으로 TCP로 데이터를 추적하고 IP로 데이터패킷을 전송한다(TCP/IP설명 참조). SMTP 프로토콜을 사용하는 EMAIL, HTTP, HTTPS,FTP, TELNET등 익숙한 인터넷 서비스 대부분이 이에 속한다.
2. HTTP는 연결 상태를 유지하지 않는 비연결성 프로토콜이다. 이를 해결하기 위해 Cookie와 Session을 통해 극복할 수 있다. 클라이언트에 정보를 저장하는 Cookie와 서버에 정보를 저장하는 Session의 적절한 사용이 중요하다.
3. 비연결성 프로토콜이기 때문에 request/response 방식으로 동작한다.
<Client Server 통신방식>
HTTP Request Header / Response Header : 요청, 응답 헤더
header에는 수 많은 정보가 담겨있다. URL 정보부터 USER-AGENT, Upgrade-Insecure-Requests 등등 헤더의 종류는 매우 많아 필요한 정보를 얻을 수 있다. 특히 User-Agent의 web정보를 받아 특정 브라우저에서 동작하지 않는 문제등을 서버에서 상황에 맞게 해결할 수 있다. (Safari - UTF-8 인코딩 문제 등)
응답코드에는 content-type, content-length등 서버의 요청에 대한 답변의 정보를 담고 있다.
특히 상태코드(Status Code)를 통해 응답 상태를 알 수 있다.
- 1XX (조건부 응답) : 요청을 받았으며 작업을 계속한다.
- 2XX (성공) : 클라이언트가 요청한 동작을 수신하여 이해했고 승낙했으며 성공적으로 처리했음을 가리킨다.
- 3XX (리다이렉션 완료) : 클라이언트는 요청을 마치기 위해 추가 동작을 취해야 한다.
- 4XX (요청 오류) : 클라이언트에 오류가 있음을 나타낸다.
- 5XX (서버 오류) : 서버가 유효한 요청을 명백하게 수행하지 못했음을 나타낸다.
브라우저 캐싱 (Cache)
웹페이지의 성능 최적화를 위해 캐시는 반드시 짚고 넘어가야 하는 부분이다. 사이즈가 매우 큰 이미지가 많은 사이트를 반복 접속하는 경우 페이지 로드 시 반복적으로 큰 리소스를 지속적으로 다운로드 받는 것은 비효율적이다. 그렇기 때문에 한번 방문한 웹의 리소스를 디스크에 저장하고 캐시로 사용한다.브라우저는 캐시가 최신버전인지 HEAD 요청을 날려 Last-Modified Date를 비교해 최신임을 확인한다.(하지만 업데이트를 바로 반영해 주지않기 때문에 개발 중 캐시를 삭제해야 반영이 되는 부분도 많다). 주의할 점은 모든 파일에 대해 캐시를 하는 것이 효율적일지 고민해 봐야할 것이다. 또한 첫 페이지 로드시 성능 하락은 필자 경험상브라우저 캐싱으로 해결하는 것이 아니라 리소스를 resize하는 방식이나 lazy-loading 방식으로 해결하였다.
⌚HTTPS
Hypertext Transfer Protocol Over Secure Socket Layer
보안이 강회된 HTTP 프로토콜이다. 기존 HTTP의 패킷을 분석하면 POST로 보낸 데이터가 Plain Text로 바로 출력되어 보안에 취약한 것을 알 수 있다. 이 같은 단점을 해결하는 프로토콜. HTTP에 SSL(Secure Sockets Layer)의 암호화 전달 방식을 더한 프로토콜.
상호간에 키를 교환하는 암호화 방식인 공개키 암호화 방식을 채용하고 암호화, 복호화에 하나의 키를 사용하게 된다. 공개키 증명은 인증기관(CA, Certificate Authority)에서 발행하는 증명서가 이용된다.
HTTPS 사용시 증명서를 구입해야하며 따라서 HTTP만을 사용하는 서비스도 많다. 또한 성능 측면에서 SSL에 필요한 통신이 추가되고 암호화 복호화 로직이 추가되기 때문에 리소스 관리 측면에서 소비가 많다.
🎡DNS 서비스
Domain Name System
도메인 이름은 인터넷 주소로 사람들이 기억하기 쉽게 의미를 두어 붙인 이름이지만, 실제로 통신에서는 IP 주소가 필요하다. DNS 서비스는
사람이 읽을 수 있는 도메인 이름(www.with.mbc.co.kr)을 IP주소(255.255.255.0)으로 변환한다.
Amazon Route 53과 같은 DNS 서비스는 전 세계에 배포된 서비스로 도메인 이름을 IP주소로 변환하여 컴퓨터가 서로 통신할 수 있게 한다. 인터넷의 DNS 시스템은 이름과 숫자 간 매핑을 관리하고 전화번호부와 같은 기능을 수행한다. DNS는 DNS 계층을 관리하고 해당 네임 계층과 주소 공간 간의 변환 서비스를 제공한다.
관련 규칙은 RFC 1035, RFC 1123, RFC 2181에 정의되어 있다.
💾FTP
File Transfer Protocol
인터넷 상의 컴퓨터들 간 파일을 교환하기 위한 표준 프로토콜이다.
HTTP와는 다르게 클라이언트에서 서버로 한번 연결을 하면 해당 연결은 명령어 입력을 위해 남겨두고 파일을 보낼 때 새로운 연결을 추가하여 파일을 전송한다.
안정성과 신뢰성이 보장되며 접속하기 위해서 FTP서버에 등록된 로그인 계정과 암호가 필요하다. 대표적인 프로그램으로 FileZilla와 알FTP가 존재한다.
💦Control Connection(제어 연결) : 제어
- 클라이언트에서 서버로의 명령과 서버의 응답을 위한 연결을 하며 21번 포트사용.
- 명령, 응답 형태의 제어정보 전송
- 전체 FTP 세션 동안 계속 연결 상태를 유지한다.
💦Data Connection(데이터 연결) : 전송
- 파일이 전송될 때 생성되는 새로운 연결.
- 20번 포트 사용.
- 능동모드와 수동모드가 있으며 클라이언트가 방화벽, NAT(IP 마스킹) 등을 사용하는 환경일 때 능동모드가 아닌 수동모드를 사용한다. 이때 1023보다 큰 포트를 사용한다.
💼SMTP , MIME
Simple Mail Transfer Protocol
Multi-purpose Internet Mail Extensions
SMTP
메일 전송 프로그램등이 서버로 메일을 보낼 때 사용하는 프로토콜이다. 텍스트만 전송 가능하며 스트림 방식으로 읽어 전송한다. SMTP는 한 개의 메세지를 해당 서버의 여러 수신자에게 보낼 수 있다는 특징이 있다. 임시 비밀번호, 단순 알림 메일 서비스는 SMTP를 통해 처리 가능하다.
MIME
SMTP 전송시 이메일에 텍스트만 전송하는 단점을 보완한 프로토콜이다.
기존 SMTP의 UU인코딩의 치명적 단점을 보완해 텍스트 이외의 값(ex파일)을 텍스트 문자로 변환해서 이메일 프로그램을 통해 전달하기 위해 개발되었다. MIME은 Binary 파일을 출력 가능한 문자열 형태로 인코딩 후 수신 시 디코딩한다. Base64 방식이 기본.
😋주요 MIME 타입
1) application/octet-stream : 이진 파일을 위한 기본값
2) text/plain
3) text/css
4) text/html
5) 이미지 타입
6) 오디오/비디오 타입
7) multipart/form-data
- 브라우저에서 서버로 HTML 폼의 내용을 전송 시 사용한다. 멀티 파트 문서로 자주 사용되는 타입. 자신의 HTTP Header를 가진다. Content-Disposition, Content-Type등을 가진다.
'Web > Web지식' 카테고리의 다른 글
[모듈번들링] Module Bundler: Webpack 도입 적용 경험 #1,2 (0) | 2021.08.05 |
---|---|
[ASP .NET C#] 개인정보 암호화 적용 사례 (0) | 2021.02.25 |
우리가 Base64를 사용하는 이유 (0) | 2021.02.18 |