연결 수락
listener.incoming()
반복자가 `TcpStream`을 하나씩 넘겨 단일 스레드 루프가 처리합니다.
`TcpListener`가 스트림을 하나씩 넘기면, 서버는 요청 첫 줄을 읽고 상태 라인과 파일을 고른 뒤 바이트 응답을 작성합니다.
listener.incoming()
반복자가 `TcpStream`을 하나씩 넘겨 단일 스레드 루프가 처리합니다.
GET / HTTP/1.1
`/` 요청인지 비교해 성공 응답과 404 응답을 나눕니다.
hello.html / 404.html
상태 라인과 파일 이름만 분기하고 파일 읽기는 한곳에 둡니다.
write_all(bytes)
`Content-Length`와 빈 줄 뒤에 HTML 본문을 붙여 보냅니다.
`/`만 200으로 두고 나머지 URI는 명시적으로 404로 떨어뜨립니다.
브라우저가 응답을 끝까지 읽도록 실제 HTML 길이를 헤더에 둡니다.
싱글스레드 구조라 한 요청이 지연되면 다음 연결도 기다립니다.