언어에서의 약속
문장의 의미는 문장을 구성하는 단어의 의미, 문법 구조, 맥락, 독자의 배경 지식 등으로 결정됩니다. 이 중 단어의 의미와 문법은 사회적으로 합의되어 있습니다.
인코딩이란?
컴퓨터의 모든 데이터는 0과 1로 구성됩니다. 지금 보고 있는 글도 사실은 0과 1의 집합입니다. “사과”가 사과를 가리키는 데 약속이 필요하듯, 0과 1로 우리의 문자를 표현하는 것도 일종의 약속 덕분입니다. 이런 약속들을 특별히 인코딩(Encoding) 표준이라고 부르는데, 대표적으로 아스키(Ascii)와 유니코드(Unicode)가 있습니다.
아스키는 7비트 데이터에 대한 인코딩 표준입니다. 이를 이용하면 알파벳과 특수 문자 등을 표현할 수 있습니다. 예를 들어, 아스키에서 1 한 개, 0 다섯 개, 1 한 개를 이어 붙이면 “A”로 해석됩니다. 이에 따라 “1000001”이라는 데이터를 아스키로 변환하면 “A”가 됩니다.
컴퓨터가 개발된 초기에는 각 문자권마다 고유의 인코딩 표준을 사용했습니다. 영어는 아스키, 한글은 CP-949, EUC-KR 등을 사용했습니다. 그런데 이러한 방식은 호환성 측면에서, 국제 소프트웨어를 개발하려는 회사에 큰 부담이 됐습니다. 가끔 소프트웨어를 실행했을 때 글자가 🆡🆡🆡 등으로 출력되는 것이 인코딩이 호환되지 않아 발생하는 문제입니다.
이러한 어려움을 해결하고자 유니코드라는 새로운 표준이 만들어졌습니다. “Uni(하나의)”라는 접두사가 나타내듯, 유니코드는 모든 언어의 문자를 하나의 표준에 담겠다는 목표로 제정되었습니다. 유니코드에서 한 문자는 최대 32개의 비트로 표현됩니다. 32비트로 표현할 수 있는 정보의 가짓수는 2^{32}2 32 , 대략 42억 개입니다. 전 세계의 문자를 표현하고도 남을 넓은 공간입니다. 그래서 최근에는 한글, 한자, 히라가나, 가타카나, 알파벳과 같은 문자 외에 각종 이모지(Emoji)들도 유니코드에 포함되고 있습니다.
인코딩을 이용하면 우리의 문장을 컴퓨터에 저장하고, 표현할 수 있습니다. 그리고 네트워크를 이용하면 인코딩한 정보를 다른 사람들과 쉽게 교환할 수도 있습니다.
💡네트워크 포트와 서비스 포트
네트워크 포트(Network Port)란 네트워크에서 서버와 클라이언트가 정보를 교환하는 추상화된 장소를 의미합니다. 포트에는 항구라는 의미가 있는데, 클라이언트가 서버의 포트에 접근하여 데이터를 내려놓고, 서버가 클라이언트에 보낼 데이터를 실어서 돌려보내는 장면을 연상하면 포트의 기능을 이해할 수 있습니다. 편의상, 네트워크를 설명하는 맥락에서는 네트워크를 생략하여 “포트”라고 부르기도 합니다.
서비스 포트(Service Port)는 네트워크 포트 중에서 특정 서비스가 점유하고 있는 포트를 이릅니다. 예를 들어, HTTP가 80번 포트를 점유하고 있다면 HTTP의 서비스 포트는 80번 포트가 됩니다.
포트로 데이터를 교환하는 방식은 전송 계층(Transport Layer)의 프로토콜을 따릅니다. 대표적으로는 TCP와 UDP가 있습니다. TCP로 데이터를 전송하려는 서비스에 UDP 클라이언트가 접근하면, 데이터가 교환되지 않습니다. 반대의 경우도 마찬가지입니다. 그래서 서비스 포트를 표기할 때는 서비스가 사용하는 전송 계층 프로토콜을 같이 표기하기도 합니다. 예를 들어, HTTP의 서비스 포트가 TCP/80 이라고 하면, HTTP 서비스를 80번 포트에서 TCP로 제공하고 있다는 뜻입니다.
포트의 개수는 운영체제에서 정의하기 나름입니다. 그러나 현대의 윈도우나 리눅스, 맥 운영체제는 0번 부터 65535번까지, 총 65536개의 같은 수의 네트워크 포트를 사용합니다.
포트 중 0번부터 1023번 포트는 잘 알려진 포트(Well-known port) 또는 특권 포트(Privileged port)라고 합니다. 문자 그대로 각 포트 번호에 유명한 서비스가 등록되어 있습니다. 대표적으로 22번 포트에는 SSH, 80에는 HTTP, 443에는 HTTPS가 할당되어 있습니다. 잘 알려진 포트에 서비스를 실행하려면 관리자 권한이 필요합니다. 따라서 클라이언트는 이 대역에서 실행 중인 서비스들은 관리자의 것이라고 신뢰할 수 있습니다.
'개발일지 > Http통신' 카테고리의 다른 글
로그인(POST) (0) | 2022.11.14 |
---|---|
회원가입(POST) (0) | 2022.11.14 |
게시글 모든 데이터 / 사용자 유저 모든 데이터 가져오기 (GET요청) (0) | 2022.11.14 |
Talend API (구글 확장 프로그램) (0) | 2022.11.14 |
통신 프로토콜이란 (0) | 2022.11.14 |
댓글