CHAAANY ARCHIVE

전체 글

577개의 기록을 주제별로 둘러보세요.

요청이 느릴 때 서버의 어느 줄에서 기다리고 있을까?

요청 하나가 2초 뒤에 답을 돌려줬다. 그동안 중앙 처리 장치가 2초 내내 계산한 것은 아닐 수 있다. 데이터가 들어오기를 기다리거나, 실행할 차례를 기다리거나, 애플리케이션의 작업 목록에 들어 있었을 수도 있다. 같은 응답 시간이어도 기다린 위치에 따라 손볼 곳이 달라진다.중앙 처리 장치(Central Processing Unit, CPU)는 명령을 실행하는 하드웨어다. 소켓(socket)은 프로그램이 네트워크 연결로 데이터를 주고받는 통로다. 작업 큐(work queue)는 아직 실행할 담당자를 받지 못한 일을 순서대로 보관하는 목록이다. 셋은 하나의 대기열이 아니다.소켓에서 데이터가 오기를 기다리는 동안클라이언트가 요청 일부만 보내고 나머지를 늦게 보냈다고 하자. 서버는 연결을 받아도 요청 전체를 ..

8비트에 260을 넣으면 왜 4가 남을까?

250에 10을 더하면 260이다. 그런데 값을 담는 공간이 8비트로 고정돼 있고 넘친 부분을 버린다면 4가 남는다. 계산이 틀린 것이 아니라 저장할 수 있는 자리의 범위가 정해져 있기 때문이다. 이 과정을 보면 컴퓨터가 큰 수와 음수를 어떻게 다루는지도 이어서 이해할 수 있다.비트(bit)는 두 상태 가운데 하나를 0 또는 1로 나타내는 정보 단위다. 바이트(byte)는 일반적인 컴퓨터에서 비트 8개를 묶은 단위다. 8비트에는 0과 1을 놓을 수 있는 자리가 8개 있으므로 서로 다른 모양을 2의 8제곱, 즉 256개 만들 수 있다. 어느 모양을 어떤 숫자로 읽을지는 별도 규칙이다.부호가 없는 8비트의 범위부호 없는 정수(unsigned integer)는 비트를 0 이상의 크기를 나타내는 데 쓰는 값이다..

화면이 뜨는 데 5초가 걸렸다면 어디서 기다렸을까?

페이지를 여는 데 5초가 걸렸다고 하자. 서버 응답이 느렸다는 뜻일까? 이름 조회와 연결을 만드는 데 시간이 쓰였을 수도 있고, 문서는 빨리 왔지만 그림이나 실행 코드가 늦었을 수도 있다. ‘5초’라는 전체 시간만으로는 어느 작업을 고칠지 알 수 없다.여기서는 브라우저에서 새 페이지를 여는 상황을 가정한다. 5초는 설명을 위한 예시 숫자이며 실제 서비스의 측정값이 아니다. 시간을 처음부터 끝까지 나눠 합이 맞는지 본다.주소를 찾고 연결하는 시간도메인 이름 시스템(Domain Name System, DNS)은 사이트 이름에 맞는 서버 주소를 찾는다. 전송 제어 프로토콜(Transmission Control Protocol, TCP)은 서버와 순서가 보장되는 연결을 만든다. 보안 하이퍼텍스트 전송 프로토콜(..

자동 완성은 앞부분이 같은 단어를 어떻게 찾을까?

검색창에 ‘ca’를 입력한다고 하자. 저장된 단어가 cat, car, dog라면 앞의 두 단어가 후보로 나온다. 매번 저장된 단어 전체를 훑어도 답은 구할 수 있다. 단어가 많고 입력할 때마다 후보를 다시 찾아야 한다면, 같은 앞부분을 함께 저장하는 방법이 필요하다.트라이(trie)는 단어를 글자별 경로로 저장하는 트리 구조다. 접두사(prefix)는 단어의 맨 앞에서부터 이어지는 부분이다. cat과 car는 c와 ca라는 접두사를 공유한다. 트라이는 공유하는 경로를 한 번만 만들고 갈라지는 글자부터 따로 저장한다.단어를 넣으면 어느 노드를 함께 쓰나처음 cat을 넣을 때 빈 뿌리에서 c, a, t로 이어지는 경로를 만든다. 마지막 t에 단어가 끝난다는 표시를 남긴다. car를 넣을 때는 c와 a를 다시..

HTTPS 연결이 실패했다면 어느 단계에서 막혔을까?

주소창에 보안 연결 오류가 떠도 원인이 늘 인증서인 것은 아니다. 서버까지 연결하지 못했을 수도 있고, 서버와 암호화 방식을 합의하지 못했을 수도 있다. 인증서를 받았어도 이름이나 유효 기간 검사에서 실패할 수 있다. 어느 단계까지 진행했는지를 먼저 보면 확인할 범위가 좁아진다.전송 계층 보안(Transport Layer Security, TLS)은 통신 상대를 확인하고 오가는 데이터를 암호화하는 규칙이다. 보안 하이퍼텍스트 전송 프로토콜(Hypertext Transfer Protocol Secure, HTTPS)은 하이퍼텍스트 전송 프로토콜(Hypertext Transfer Protocol, HTTP)의 통신을 TLS로 보호한다. HTTPS 주소에 접속할 때는 HTTP 요청을 보내기 전에 TLS 연결을..

‘한 글자’의 길이는 왜 프로그램마다 다를까?

입력창에 ‘가’를 하나 쓰고 글자 수를 세면 1이다. 같은 내용을 전송할 때는 3바이트가 필요할 수 있다. 화면에 한 글자로 보이는 이모지는 숫자가 더 복잡하다. 길이 제한이나 문자열 자르기를 구현할 때 무엇을 세는지 정하지 않으면 같은 입력을 두고 서로 다른 답이 나온다.유니코드(Unicode)는 여러 언어의 문자에 번호를 붙여 다루는 표준이다. 코드 포인트(code point)는 유니코드가 부여한 번호 하나를 말한다. 유니코드 변환 형식 8비트(Unicode Transformation Format – 8-bit, UTF-8)는 이 번호를 저장하거나 전송할 바이트로 바꾸는 방식이다. 코드 포인트 하나가 UTF-8에서 1~4바이트를 차지할 수 있다.‘가’ 하나도 세는 단위에 따라 다르다한글 음절 ‘가’는..

HTTP/2와 HTTP/3에서 패킷 하나를 잃으면 다른 요청도 멈출까?

한 화면을 띄우려면 문서, 그림, 글꼴 같은 파일을 함께 받아야 한다. 네트워크에서 파일 하나의 데이터가 빠졌을 때 다른 파일도 기다릴까? 여러 요청을 한 연결로 처리하는 HTTP/2와 HTTP/3는 이 상황을 다르게 다룬다.하이퍼텍스트 전송 프로토콜(Hypertext Transfer Protocol, HTTP)은 웹 클라이언트와 서버가 요청·응답을 주고받는 규칙이다. HTTP/2는 여러 요청의 데이터를 한 연결에 섞어 보내고, HTTP/3는 전송 방식까지 바꿔 손실이 다른 요청에 주는 영향을 줄인다. 차이를 이해하려면 ‘요청을 나눠 관리하는 단위’와 ‘받은 데이터를 건네는 순서’를 따로 봐야 한다.HTTP/2는 요청을 섞어 보내지만 연결의 바이트 순서는 하나다전송 제어 프로토콜(Transmission ..

가장 가까운 길과 전체를 가장 싸게 잇는 길은 같을까?

세 장소 A, B, C를 길로 잇는다. A에서 C까지 빨리 가는 길을 찾는 일과 세 장소를 모두 연결하는 공사비를 줄이는 일은 얼핏 비슷하다. 하지만 두 질문은 비용을 더하는 범위가 다르다.그래프(graph)는 대상을 나타내는 정점(vertex)과 대상 사이의 관계를 나타내는 간선(edge)으로 이뤄진 구조다. 길마다 이동 시간이나 공사비를 적으면 그 수치를 가중치(weight)라고 한다. 최단 경로(shortest path)는 한 출발점에서 목적지까지 지나가는 간선의 비용을 최소로 만든다. 최소 신장 트리(minimum spanning tree)는 모든 정점을 연결하면서 선택한 간선 전체의 비용을 최소로 만든다.세 장소만 있어도 답이 달라진다A와 B의 연결 비용이 1, B와 C가 1, A와 C가 1.5..

다시 쓰려던 연결이 이미 끊어졌다면 요청은 어디까지 갔을까?

웹 클라이언트는 요청마다 새 연결을 만들지 않고 이전 연결을 다시 쓰기도 한다. 앞선 요청이 끝난 뒤 잠시 쉬는 동안 서버가 그 연결을 닫았다. 클라이언트는 닫힌 사실을 아직 모르고 다음 주문 요청을 보낸다. 오류가 나면 같은 요청을 곧바로 보내도 될까?하이퍼텍스트 전송 프로토콜(Hypertext Transfer Protocol, HTTP)은 웹에서 요청과 응답을 주고받는 규칙이다. HTTP/1.1의 지속 연결(persistent connection)은 한 번 만든 전송 연결로 여러 요청을 차례로 보낼 수 있게 한다. 연결을 새로 맺는 시간을 줄이지만, 재사용하려는 순간 상대가 이미 연결을 닫았을 수 있다.양쪽이 닫힘을 알게 되는 시각은 다르다서버가 연결을 닫을 때 종료 신호를 보냈더라도 클라이언트 프로..

해시 테이블에서 서로 다른 키가 같은 자리에 오면?

주문 번호를 입력하면 주문을 바로 찾을 수 있게 저장하려 한다. 번호 10과 18을 각각 다른 주문에 붙였다. 저장 칸이 여덟 개이고 번호를 8로 나눈 나머지를 칸 번호로 쓰면 둘 다 2번 칸에 간다. 뒤의 주문을 넣으면 앞의 주문이 사라질까?해시 테이블(hash table)은 키를 계산해 저장 위치를 찾는 자료구조다. 해시 함수(hash function)는 키를 숫자로 바꾸고, 그 숫자를 저장 칸의 범위에 맞춰 줄인다. 서로 다른 키가 같은 칸에 닿는 일을 충돌(collision)이라고 한다. 저장할 수 있는 키가 칸보다 많다면 충돌 자체를 없앨 수 없다. 중요한 것은 충돌한 키를 구분해 두 값을 모두 찾게 하는 규칙이다.같은 칸이라고 같은 키는 아니다번호 10과 18을 8로 나누면 나머지는 둘 다 2..

다산처럼 읽고 연암처럼 써라 — 글쓰기의 시작은 마음과 관찰

무슨 말을 하려는지 분명하지 않으면 문장을 아무리 다듬어도 글이 흐려진다. 반대로 하고 싶은 말이 있어도 대상을 자세히 보지 않으면 익숙한 말만 되풀이하기 쉽다. 글을 쓰기 전에 마음을 갖추고 사물을 살피는 일이 필요한 이유다.간호윤의 《다산처럼 읽고 연암처럼 써라》를 읽고 있다. 초반의 ‘마음 갖기’와 ‘사물 보기’에서는 글을 쓰기 전의 태도를 다룬다. 오늘 읽은 제1계부터 제4계는 마음을 가다듬는 일에서 출발해, 익숙한 생각을 벗어나 주변을 자세히 보는 일로 이어진다.글자를 고르기 전에 뜻부터 세운다제1계 ‘소단적치’에서는 글자를 병사에, 뜻을 장수에, 제목을 적국에 빗댄다. 글쓰기를 나라를 다스리는 일과 연결하는 비유다. 장수가 병사를 이끌듯 글에서도 뜻이 글자를 이끌어야 한다고 읽을 수 있다. 쓸..

TCP 연결은 어떻게 시작하고 끝날까?

브라우저가 서버에 요청을 보내려면 먼저 연결을 만들어야 한다. 연결을 열었다는 말은 양쪽 프로그램이 상대 주소만 알게 됐다는 뜻이 아니다. 어느 바이트부터 보낼지, 어디까지 받았는지, 더 보낼 데이터가 있는지를 서로 다른 시점에 기록한다.전송 제어 프로토콜(Transmission Control Protocol, TCP)은 네트워크에서 빠지거나 순서가 바뀐 바이트를 다루며 양쪽 프로그램에 순서 있는 바이트 흐름을 제공한다. TCP 연결은 시작·데이터 교환·종료에 따라 상태가 바뀐다. 이 상태를 따라가면 ‘연결이 끊겼다’는 한 문장 뒤에 어떤 차이가 있는지도 보인다.시작할 때 세 번 주고받는 까닭클라이언트가 연결을 요청하며 SYN을 보낸다. 서버는 요청을 받았다는 확인과 자신의 시작 번호를 담아 SYN/AC..

728x90