럿고의 개발 노트
[WEB] HTTP, TCP/IP, 메시지란? 본문
● HTTP(Hyper Text Transfer Protocol, 하이퍼텍스트 전송 방식)
- 웹 서비스는 HTTP를 통해 데이터를 주고 받음
- 하이퍼 텍스트란 하이퍼링크를 통하여 움직일 수 있는 텍스트
- 앞에서 뒤로 읽어나가는 순차적 흐름이 아니라 중간에서 다른곳으로 오가는 방식을 의미
● TCP/IP(Transmission Control Protocol / Internet Protocol)
- TCP규약 + IP규약 / 웹에서만 사용
▶ TCP(Transmission Control Protocol)
- TCP는 데이터 전달 관리 규칙. 즉, 데이터를 작게 나누어서 옮기고 다시 조립하여 원래 데이터로 만드는 규칙
- 여기서 잘게 나눈 데이터 단위는 패킷으로 인터넷에서 정보를 전달하는 단위
- TCP는 패킷을 조립하고 손실된 패킷을 확인하고, 재전송하도록 요청하는 기능
▶ IP(Internet Protocol)
- IP는 인터넷상의 주소 규칙
- 이전에는 IPv4 사용하였지만, 주소가 고갈되어 IPv6로 전환 중이다.
▶ TCP/IP(Transmission Control Protocol / Internet Protocol) 4계층
- OSI(Open Systems Interconnections) 7계층은 시스템들의 연결을 위한 모델
- TCP/IP 4계층은 이를 웹 서비스에 맞게 단순화시킨 모델
- Application Layer(응용계층) => Transport Layer(전송계층) => Internet Layer(인터넷계층) => Physical Layer(물리계층)
- Application Layer(응용계층) : HTTP(Hyper Text Transmission Protocol), FTP(File Transfer Protocol), Telnet, SMTP(Simple Mail Transfer Protocol)등 네트워크를 사용하는 응용프로그램
- Transport Layer(전송계층) : TCP(Transmission Control Protocol), UDP(User Datagram Protocol) 등 시스템을 연결하고 데이터를 전송하는 역할
- Internet Layer(인터넷계층) : ICMP(Internet Control Message Protocol), IGMP(Internet Group Message Protocol), IP(Internet Protocol)등 데이터를 정의하고 데이터의 경로를 라우팅함.
- Physical Layer(물리계층) : Ethernet, ATM(Asynchronous Transfer Mode)등 네트워크 하드웨어를 의미
++ FTP(File Transfer Protocol) : 파일 전송 프로토콜로 TCP/IP 프로토콜을 가지고 서버와 클라이언트 사이의 파일 전송을 하기 위한 프로토콜
++ Telnet : 문자기반의 원격 가상단말 기능을 하는 소프트웨어적인 인터페이스(서버와 클라이언트 간에 문자 혹은 줄 단위로 정보가 송수신됨)
++ SMTP(Simple Mail Transfer Protocol) : 간이 전자 우편 전송 프로토콜로 인터넷에서 이메일을 보내기 위해 이용되는 프로토콜로 TCP 포트번호는 25번이다.
++ UDP(User Datagram Protocol) : 데이터를 데이터그램 단위로 처리하는 프로토콜로 여기서 데이터그램이란 독립적인 관계를 지니는 패킷임.
++ ICMP(Internet Control Message Protocol) : TCP/IP에서 IP 패킷을 처리할 때 발생되는 문제를 알리거나, 진단 등과 같이 IP 계층에서 필요한 기타 기능들을 수행하기위해 사용되는 프로토콜로 IP와 하나의 쌍을 이루며 동작
++ IGMP(Internet Group Message Protocol) : 서브넷(로컬 네트워크) 상의 멀티캐스팅 멤버십 제어(그룹관리)를 위한 프로토콜
++ Etherent : 네트워킹의 한 방식으로 즉, 네트워크를 만드는 방법중 하나로써 가장 큰 특징은 CSMA/CD라는 프로콜을 사용해서 통신을 함
++ CSMA/CD(Carrier Sense Multiple Access/Collision Dection) : 반송파 감지 다중 접속 및 충돌탐지
++ ATM(Asynchronous Transfer Mode) : 비동기 전송 방식
- 위의 사진은 TCP/IP 4계층을 통하여 데이터를 통신하는 순서
- 클라이언로부터 특정 주소 요청이 들어오면 DNS(Domain Name System)상에서 IP(Internet Protocol)주소를 받아옴 => HTTP(Hyper Text Transport Protocol)계층에서 HTTP(Hyper Text Transport Protocol)메시지를 작성 => TCP(Transmission Control Protocol)계층에서 HTTP(Hyper Text Transmission Protocol)메시지를 패킷으로 분해 => IP(Internet Protocol)계층에서 전송위치를 확인 => 네트워크를 통하여 전송 => 그 이후는 위 과정을 역순으로 진행하여 처리
● 통신
- 프로토콜을 이용하여 source와 target간의 데이터를 주고 받는 방법
▶ 동기식 통신
- 대표적으로 HTTP(Hyper Text Transmission Protocol), 클라이언트 요청을 서버에서 응답할 때 까지 기다리는 방식
- HTTP1.1의 Pipe Lining으로 클라이언트에서 응답메시지를 받기 전에 요청메시지를 전달(그러나 본질적으로 비동기통신은 아님)
▶ 비동기식 통신
- 대표적으로 AMQP(Advanced Message Queue Protocol, 개선된 메시지 큐 프로토콜), 메시지 브로커를 통하여 요청 메시지를 전달하는 방식
- 클라이언트에서는 브로커에게 메시지를 전달하고, 기다리지 않기 때문에 비동기식으로 부름
- 요청하는 측에서 메시지를 Publish하고 처리하는 쪽에서는 메시지를 Subscribe하기 때문에 pub/sub구조라고도 부름
++ AMQP(Advanced Message Queuing Protocol) : 메시지 지향 미들웨어를 위한 개방형 표준 응용 계층 프로토콜로 정의 기능들은 메시지 지향, 큐잉, 라우팅(P2P 및 발생 - 구독), 신뢰성, 보안
● HTTP(Hyper Text Transmission Protocol) 메시지
▶ 시작줄
- 요청메시지 : 요청 내용을 구체적으로 포함
메서드, 요청 URL, HTTP 버전
GET /document/item/1 1.1
- 응답 메시지 : 사용자에게 일어난 내용을 응답, 상태코드와 사유내용은 1:1 구조로 대응
버전, 상태코드, 사유구절
1.1 200 OK
▶ 헤더
- 메시지 본문에 대한 부가정보 표현
- 종류는 일반, 요청, 응답, 엔티티, 확장 등
- Connection(연결) : 일반적으로 클라이언트와 서버의 통신은 한번 맺고 끝, 그러나 Connection 비용이 많이 소비되기 때문에 이를 개선하기 위해 keep-alive 옵션을 통해 Connection을 재활용
- Content-type : 응답하는 컨텐츠 유형 의미
- Cache-control : 캐쉬 사용을 막을 것인지, 허용할 것인지 제어
- Access-Control-Allow-Origin : 클라이언트에서 현재와 다른 도메인에서 정보를 가져올 수 있는 도메인의 정보를 담고 있음. 이를 CORS(Cross Origin Resource Sharing)이라고 부름
++ Keep-Alive : 연결된 소켓에 입출력의 접근이 마지막 종료된 시점부터 정의된 시간까지 접근이 없더라도 대기하는 구조
++ CORS(Cross-Origin Resource Sharing) : 추가 HTTP 헤더를 사용하여 브라우저가 한 출처에서 실행중인 웹 어플리케이션에 선택된 엑세스 권한을 부여하도록 하는 메커니즘
● HTTP(Hyper Text Transmission Protocol) 응답코드
- 웹 서비스를 개발하면서 자주 접하게 되는 응답 코드
▶ 100대 코드 : 정보전달
▶ 200대 코드 : 성공응답
- 200 : OK, 정상
- 204 : No Content, 보통 특정내용을 삭제시 해당 응답코드를 응답
- 206 : Range, 헤더를 지정한 요청을 응답할 때 사용
▶ 300대 코드 : Redirection, request완료를 위해 추가 동작이 필요
- 301 : Moved Permanently, 영구적으로 URI 변경을 의미
- 302 : Found, 일시적인 URI 이동을 의미
- 304 : Not Modified, 변경 없음
- 307 : Temporary Redirect, 임시적인 Redirect
▶ 400대 코드 : 클라이언트의 에러
- 400 : Bad Request, 잘못된 요청
- 403 : Forbidden, 접근권한없음
- 404 : Not Found, 요청 내용이 없거나 찾을 수 없음
- 408 : Request Timeout, 요청 타임아웃
▶ 500번대 코드 : 서버의 에러
- 500 : Internal Server Error, 서버에러, 로직에러 발생시 자주 등장
- 503 : Service Unavailable, 서버 한계 초과등 오류
출처
'Web Note' 카테고리의 다른 글
Semantic한 태그 (0) | 2019.12.07 |
---|---|
[WEB] SPA란? (0) | 2019.11.12 |