SONUB 홈 KO English 한국어 日本語 中文 हिन्दी বাংলা اردو Español Português Français Deutsch Русский العربية Bahasa Indonesia Tiếng Việt ไทย Türkçe

알림을 켜는 방법

이 브라우저 또는 주소에서는 알림을 사용할 수 없습니다. 지원되는 브라우저로 보안 연결된 SONUB 사이트에 접속해 주세요.

알림이 차단되어 있으면 브라우저 설정에서 허용해 주세요.

  1. 주소 표시줄 옆의 사이트 설정 또는 브라우저의 사이트 설정을 열고, 이 사이트의 알림을 허용으로 바꾸세요.
  2. 기기 설정에서 브라우저 알림을 허용하고 방해 금지 또는 집중 모드를 확인하세요.
  3. SONUB으로 돌아와 페이지를 새로고침한 뒤 벨을 눌러 알림을 켜세요.

iPhone 또는 iPad에서는 SONUB을 홈 화면에 추가하고 거기에서 연 뒤 알림을 허용하세요.

바이브코딩 전체 보기
바이브코딩

웹서버

가 말을 걸어 주는 스크립트 20줄.

웹서버는 을 기다렸다가 을 보내는 일 뿐입니다. 그것을 증명하기 위해 bash 와 , 만으로 를 만듭니다 — 한 줄도 빠짐없이 읽을 수 있습니다. 그다음 실제 사이트를 까지 붙여 돌리는 Caddy 로 넘어갑니다.

쉘 스크립트 한 장으로 만드는 웹서버

아래가 bash 로 쓴 완전한 웹서버입니다. 포트를 열고, 요청 줄을 읽고, 기록을 남기고, index.html 을 제대로 된 HTTP 응답으로 돌려줍니다. 스무 줄, 없음, 그리고 브라우저는 차이를 알아채지 못합니다.

무거운 일은 두 명령이 맡습니다. netcat(nc) 이 네트워크를 말하고, 가 이름 있는 파이프를 만들어 우리가 쓴 답을 nc 가 붙들고 있는 연결로 되돌려 보냅니다.

server.sh
#!/bin/bash

PORT=8084
PIPE=simple-web-server-pipe

rm -f "$PIPE"
mkfifo "$PIPE"

response() {
    read -r method path _
    echo "[$(date)] $method $path" >&2
    index=$(cat index.html)
    printf 'HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=utf-8\r\nConnection: close\r\n\r\n%s' \
      "$index"
}

while true; do
    response < "$PIPE" | nc -l "$PORT" > "$PIPE"
done

한 줄씩 뜯어보기

  1. PORT=8084귀를 기울일 포트입니다. 1024 보다 큰 번호는 관리자 권한 없이 쓸 수 있고, 8084 는 이미 쓰고 있는 것과 부딪힐 일이 적습니다.
  2. PIPE=simple-web-server-pipe파이프 파일의 이름입니다. 폴더에 보통 파일처럼 나타나지만 안에 저장되는 것은 없습니다 — 두 명령 사이로 자료를 지나가게 할 뿐입니다.
  3. mkfifo "$PIPE"이름 있는 파이프(FIFO)를 만듭니다. 바로 윗줄이 지난번에 남은 것을 지우는 이유는, mkfifo 가 이미 있는 파일 위에 덮어쓰기를 거부하기 때문입니다.
  4. read -r method path _요청의 첫 줄을 읽어 방법 · 경로 · 나머지로 나눕니다. 그 뒤에 오는 브라우저의 헤더들은 이 서버가 그냥 흘려보냅니다.
  5. echo "[$(date)] $method $path" >&2기록을 한 줄 남깁니다. 표준 오류로 방향을 돌린 덕분에 이 글이 브라우저로 가지 않고 터미널에만 나타납니다.
  6. index=$(cat index.html)지금 폴더의 index.html 을 읽어 변수에 담습니다. 서버를 그 파일이 있는 폴더에서 실행해야 하는 이유가 이것입니다.
  7. printf 'HTTP/1.1 200 OK\r\n…'응답을 씁니다. 상태 줄, 내용의 종류, 여기서 연결을 끝낸다는 헤더, 그리고 빈 줄과 페이지. 헤더와 내용을 가르는 것이 그 빈 줄이고, HTTP 는 모든 줄 끝에 캐리지리턴과 줄바꿈을 함께 요구합니다.
  8. response < "$PIPE" | nc -l "$PORT" > "$PIPE"이것이 동작하게 만드는 요령입니다. nc 는 파이프에서 우리 응답을 읽고, 브라우저의 요청을 그 파이프에 다시 써 넣습니다. 두 쪽이 서로에게 먹이를 주는 셈입니다.
  9. while true; do … done반복문입니다. nc 는 연결 하나를 처리하면 끝나 버리므로, 이 줄이 없으면 서버는 손님 한 명만 받고 멈춥니다.
왜 변수가 아니라 파이프여야 하나

요청이 함수에 닿아야 함수의 답이 nc 에 닿을 수 있습니다 — 고리 모양입니다. 그런데 쉘의 파이프라인은 한 방향으로만 흐릅니다. 이름 있는 파이프가 그 고리를 닫아 줍니다. 응답은 파이프라인을 타고 nc 로 가고, 요청은 FIFO 를 타고 되돌아옵니다. 두 명령이 양방향으로 말을 주고받게 하는 가장 작은 방법입니다.

직접 띄워 보기

스크립트를 server.sh 로 저장하고 옆에 index.html 을 두고 실행합니다. 그 은 켜 둔 채로, 두 번째 터미널에서 요청을 보내 보세요.

terminal
# 1. create an index.html in the same folder
echo '<h1>Hello</h1>' > index.html

# 2. save the script above as server.sh and start it
bash server.sh

# 3. open it in a browser (or check from a second terminal)
open http://localhost:8084
curl http://localhost:8084

브라우저를 새로고침하면서 첫 터미널을 보세요. 요청 하나마다 기록이 한 줄씩 쌓입니다. Control-C 로 멈추고, 파이프 파일이 남아 있으면 지웁니다. 의 nc 는 포트 앞에 -p 를 더 붙여야 할 수 있고, macOS 에 기본으로 들어 있는 판은 적힌 그대로 동작합니다.

여기 쓰인 쉘 명령 배우기

스스로 표시하는 칸이에요. 여기서 채점하지는 않아요.

이 단계를 이해한 것으로 표시할까요?

아직 취소할 수 없으니, 정말 이해했을 때만 표시해 주세요.

이해한 것으로 표시했어요

스스로 표시하는 칸이에요. 여기서 채점하지는 않아요.