CHAAANY ARCHIVE

전체 글

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

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..

배열과 연결 리스트는 값을 끼워 넣을 때 무엇이 다를까?

주문 네 건이 접수 순서대로 놓여 있다. 두 번째와 세 번째 주문 사이에 빠졌던 주문 한 건을 넣어야 한다. 겉으로는 목록 한 칸만 바꾸는 일처럼 보인다. 컴퓨터 안에서는 어디를 얼마나 고쳐야 할까?배열(array)은 같은 크기의 칸을 연속해서 두고 번호로 원하는 칸을 찾는 자료구조다. 연결 리스트(linked list)는 각 항목이 다음 항목의 위치를 가리키도록 이어 놓은 자료구조다. 둘 다 순서가 있는 목록을 나타낼 수 있지만, 원하는 항목에 도달하는 방식과 중간에 값을 넣는 방식이 다르다.배열은 뒤쪽 값을 밀어 자리를 만든다배열에 [10, 20, 30, 40]이 들어 있다고 하자. 20 뒤에 25를 넣고 기존 순서를 지키려면 30과 40을 한 칸씩 뒤로 옮긴다. 새 자리가 생긴 뒤 그곳에 25를 쓴..

육아휴직 10주차, 아기 첫 이발과 백일 풍선

육아휴직 10주차.이번 주에는 아기의 배냇머리를 처음 잘랐다. 일요일에 가족들을 만나러 갔더니 아기 백일을 축하하는 풍선도 붙어 있었다. 중간에는 누수 메모를 받고 보험을 알아보느라 머리가 아팠지만, 친구들도 만나고 수영과 러닝도 했다.집에 놀러 온 친구, 시흥집에서 지낸 밤10월 5일 월요일에는 아내의 절친이 집에 놀러 왔다. 점심에는 엽떡에 치즈만두를 추가해 먹었다. 엽떡은 정기적으로 먹어줘야 하는데 한 번 먹었으니 당분간 쿨타임을 돌려야겠다. 친구가 아기를 엄청 예뻐해줘서 나도 기분이 좋았다. 아내와 친구가 둘만의 시간을 보낼 수 있게 나는 아기와 집을 지켰다. 저녁 7시쯤 러닝을 다녀왔는데 새벽까지 잠이 오지 않아 바둑을 뒀다.화요일에는 저녁에 시흥집에서 제사가 있어 낮 동안 아기를 돌봤다. 틈틈..

육아휴직 9주차, 안동에서 돌아와 수영을 시작했다

육아휴직 9주차.안동에서 며칠 더 머물다가 부천으로 돌아왔다. 아기와 함께 탈춤 축제도 다녀오고, 혼자 온천에서 푹 쉰 뒤 저녁에는 아내와 같이 뛰었다. 돌아와서는 수영을 시작했다.온천에서 푹 쉬고, 아내와 함께 러닝9월 28일 월요일 오전에는 아내와 장모님이 학가산 온천에 가셔서 점심때까지 아기와 단둘이 있었다. 돌아온 아내와 미리 사둔 불닭볶음탕면 두 개, 피자를 먹었다. 아내는 요즘 핫하다는 미역국에 불닭볶음탕면을 끓였고 나는 오리지널로 먹었다. 내 입맛에는 오리지널이 더 나았다.나도 온천이 궁금했고 몸도 피곤해서 혼자 차를 끌고 학가산으로 갔다. 거의 2시간 반에서 3시간 동안 모든 탕을 돌아다녔다. 따뜻한 물에 들어가자마자 피로가 쫙 풀렸다. 물줄기로 마사지하는 곳도 잘 되어 있어서 무료로 마사..

서버 주소를 바꿨는데 왜 어떤 사람은 아직 옛 서버로 갈까?

예를 들어 서비스를 새 서버로 옮겼다. 도메인 설정도 새 주소로 바꿨다. 내 컴퓨터에서는 새 화면이 열리는데 다른 사람은 한동안 옛 화면을 본다. 설정이 저장되지 않은 걸까?도메인 이름 시스템(Domain Name System, DNS)은 사람이 쓰는 이름에 연결된 주소 같은 정보를 여러 서버에 나눠 보관하고 찾는 체계다. 사용자가 매번 원본 서버에 물어보지 않도록 중간에 얻은 답을 저장한다. 도메인 설정을 바꾼 시각과 모든 사용자가 새 주소를 받는 시각이 같지 않은 이유가 여기에 있다.주소를 누가 기억하고 있을까www.example.com의 주소를 찾는 요청은 브라우저와 운영체제의 기록을 먼저 확인할 수 있다. 거기에 답이 없으면 인터넷 서비스 제공업체나 회사에서 설정한 재귀 리졸버(recursive ..

728x90