글 하나에 URL 열두 개
이 블로그의 모든 글은 주소 열두 개에 삽니다. 열하나는 언어 접두사를 지니고 — /en/blog/…, /de/blog/… 그리고 아홉 개 더 — 열두 번째는 접두사가 아예 없습니다. 그것은 브라우저의 Accept-Language 헤더를 읽고 열하나 가운데 알아본 언어로 답합니다. 8월 27일과 28일에 크롤러가 이 사이트에서 블로그…
카운터를 지우면 실제로 무엇이 건드려지는가
여기서 카운터를 지우면 표 33개가 비워집니다. 어제는 25개를 비웠습니다. 놓친 여덟 개는 모두 그 전날 오전 11시 10분과 오후 3시 10분 사이에 만들어진 것이었습니다. 삭제는 어떻게 돌아가는가 주인은 자기 카운터를 지울 수 있습니다. POST와 주인의 토큰, 그리고 손으로 친 카운터 번호가 필요합니다. 되돌리기가 없기…
백업을 처음부터 끝까지 되돌려 보았습니다
이 서버는 8월 11일부터 밤마다 스스로를 백업해 왔습니다. 로그에는 163줄이 있습니다. "되돌리기"라는 낱말은 그 가운데 어디에도 없습니다. 모든 줄이 쓰기에 관한 것이기 때문입니다. 오늘 읽기 쪽 절반도 걸어 보았습니다. 이 백업은 대부분보다 낫습니다 새벽 세 시에 돌고, 모든 데이터베이스를 덤프하고, 웹 디렉터리를 묶고, 저장소…
언제나 참인 확인
이 서비스에는 UPDATE 문이 23개 있습니다. 그 가운데 정확히 하나가 무언가 바뀌었는지 확인합니다. 그 확인은 이렇습니다: 'success' => $n->rowCount() >= 0 rowCount()는 맞는 줄이 없을 때 0을 돌려줍니다. 0은 0보다 크거나 같습니다. 무슨 일이 있어도 그 확인은 통과합니다. 그 문은 무엇을 위한…
curl로 시험하면 엉뚱한 것을 시험합니다
브라우저 신원 없이 들어온 카운터 요청은, 세어진 방문이 보통 건드리는 열두 자리 가운데 둘에만 씁니다. 200으로 답합니다. 유효한 카운터 그림을 돌려줍니다. 열둘 가운데 열이 건너뛰어졌다고 말해 주는 것은 어디에도 없습니다. 그 거르개는 무엇을 위한 것이고, 값은 얼마인가 여기 카운터는 로봇과 사람을 가르고, 그 가름은 클라이언트가…
lib/ 전체를 불러오는 값은 실제로 얼마인가
이 서비스의 유일한 진입 파일 46번째 줄: foreach (glob(__DIR__ . '/lib/*.php') as $f) { require_once $f; } 파일 65개, 1.5메가바이트이고, 요청마다 불러옵니다. 카운터 그림이든, 통계 페이지든, 404이든 모두 같습니다. 어제 그 일이 20,734번 있었습니다. 중요한 숫자는…
캐시가 반대 방향으로 커질 때
이 서비스의 캐시 폴더에 작은 파일 넷이 있습니다. 가장 큰 것이 35바이트입니다. 합쳐서 카운터 번호 셋을 담고 있고, 모든 카운터 요청마다 읽힙니다. 계수 경로가 데이터베이스에 거의 언제나 "아니오"로 답하는 물음 넷을 던지지 않아도 되도록 존재합니다. 이 카운터는 주인 자신의 방문을 제외하는가? 나가는 클릭을 따라가는가? 사이트를…
인덱스를 더하면 오히려 느려질 때
일별 수치 표에는 열쇠가 하나 있습니다. 카운터와 날짜를 함께 묶은 것입니다. 코드의 다섯 자리가 그 표에 다른 물음을 던집니다 — "이 카운터를 시간에 따라"가 아니라 "이 날짜들의 모든 카운터"입니다. 첫 페이지 갤러리, 톱리스트, 사이트맵, 90일 그래프, 그리고 상태 수치입니다. 날짜 칸에 인덱스가 없으면 그 하나하나가…
데이터베이스 스키마는 실제로 어디에 사는가
이 서비스가 하는 모든 것은 버전 관리 안에 있습니다. 적어도 코드는 그렇습니다. 그것이 도는 데이터베이스는 표 32개이고, 그 가운데 15개는 저장소 어디에도 정의가 없습니다 — CREATE TABLE도, 스키마 파일도, 아무것도 없습니다. 덤프는 32개를 구조까지 온전히 되돌립니다. 저장소가 담고 있지 않은 것은 그 구조의 두 번째…
왜 우리는 재방문자를 셀 수 없는가
Stats4U 어디에도 재방문자 수치가 없습니다. 아무도 손대지 못해서 빠진 것이 아닙니다. 만들었고, 진짜 데이터에 한 번 돌렸고, 2026년 8월 27일에 도로 걷어 냈습니다. 그것이 내놓은 숫자가 첫 방문 100.0%였고 — 모든 카운터에 대해, 날마다, 영원히 그렇게 말했을 것이기 때문입니다. 까닭은 해시 속의 재료 하나입니다.…
왜 우리 설정 파일은 대부분 주석인가
이 서버의 .htaccess은 478줄입니다. 그 가운데 98줄이 규칙입니다. 309줄이 주석입니다. 무언가를 하는 줄 하나마다 설명 세 줄입니다. 계획한 비율이 아닙니다. 규칙을 쓰는 규칙이 "까닭을 그 옆에 두어야 한다"일 때 생기는 결과입니다. 왜 재작성 규칙에 한 문단이 필요한가 서버 설정의 규칙은 나중에 읽히기에 유난히…
모든 번역을 어떻게 확인하는가
이 블로그에는 열한 개 언어로 된 글 64편이 있습니다. 704줄이고 약 220만 자입니다. 어느 언어에서도 빠진 글이 없으며, 그것은 무언가가 강제할 때에만 뜻을 갖는 주장입니다. 강제하는 것이 있습니다. 번역된 줄이 쓰이기 전에 영어 원문과 맞대어 확인되고, 떨어진 줄은 아예 쓰이지 않습니다 — 보고되고 사람이 볼 수 있게…