7부 · 전체를 잇기 + 다음 걸음
지금 다루는 단계: 전체 — 1부부터 6부까지를 하나의 흐름으로 다시 꿰어 봅니다.
처음부터 끝까지: 주소창 엔터의 전 생애
이제 모든 조각을 배웠으니, 첫 장의 그 질문 — "google.com을 치고 엔터를 누르면 무슨 일이 벌어질까?" — 에 완전한 답을 할 수 있습니다.
sequenceDiagram
participant U as 사용자
participant B as 브라우저
participant D as DNS
participant S as 서버
U->>B: 주소창에 example.com 입력 + 엔터
Note over B,D: ① 이름을 주소로
B->>D: example.com 의 IP는?
D-->>B: 93.184.x.x
Note over B,S: ② 연결 (TCP/TLS 핸드셰이크)
B->>S: 안전한 연결 수립
Note over B,S: ③ 요청
B->>S: GET / HTTP/1.1 (HTTP)
Note over S: ④ 서버 처리
S-->>B: ⑤ 200 OK + HTML
Note over B: ⑥ 렌더링 시작
B->>S: (추가) GET style.css, app.js, img...
S-->>B: 각 파일 응답
Note over B: DOM → 스타일 → 레이아웃 → 페인트
B->>U: 완성된 페이지 표시 🎉
말로 한 문장씩 옮기면:
- ① DNS(2부): 브라우저가
example.com이라는 이름을 IP 주소(번호)로 바꿉니다. - ② 연결(3부): 그 주소의 서버와 안전한 연결(HTTPS면 TLS 봉투)을 맺습니다.
- ③ 요청(3부):
GET / HTTP/1.1같은 HTTP 요청 편지를 보냅니다. - ④ 서버 처리: 서버가 요청을 읽고 응답을 준비합니다.
- ⑤ 응답(3부):
200 OK와 함께 HTML 본문을 돌려줍니다. - ⑥ 렌더링(4·5·6부): 브라우저가 HTML을 DOM으로 만들고, CSS·JS·이미지를 추가 요청으로 받아, 스타일을 입히고 위치를 계산해 픽셀로 칠합니다. 화면 완성!
여러분이 4·5부에서 만든 소개 페이지도 누군가의 브라우저에서 정확히 이 과정을 거쳐 보이게 됩니다.
우리 페이지를 세상에 공개하려면
지금 실습 페이지는 내 컴퓨터 안에만 있습니다(더블클릭으로 열었으니까요). 남이 보려면 어딘가의 서버에 올려 주소를 부여해야 합니다. 개념만 짚자면:
flowchart LR
LOCAL["내 컴퓨터의<br/>index.html"]:::doc
HOST["호스팅 서비스에<br/>올리기 (배포)"]:::server
DOMAIN["도메인 연결<br/>(이름 부여)"]:::net
WORLD["누구나 접속<br/>가능"]:::good
LOCAL --> HOST --> DOMAIN --> WORLD
classDef doc fill:#e9d8fd,stroke:#6b46c1,color:#000
classDef server fill:#e9d8fd,stroke:#6b46c1,color:#000
classDef net fill:#cfe8ff,stroke:#2b6cb0,color:#000
classDef good fill:#c6f6d5,stroke:#276749,color:#000
- 배포(deploy): 내 파일을 항상 켜져 있는 서버(호스팅)로 복사하는 일.
- 도메인 등록: 2부에서 배운 이름을 사서 그 서버 주소에 연결하는 일.
정적인 HTML 페이지를 무료로 올려 주는 서비스가 여럿 있습니다(특정 제품을 정답으로 권하진 않겠습니다 — "정적 사이트 호스팅"으로 검색하면 현재 쓸 만한 선택지를 비교할 수 있습니다). 핵심은 "내 파일을 남이 요청할 수 있는 서버에 둔다"는 개념입니다. 그 순간 여러분의 페이지도 이 안내서가 설명한 요청-응답 파이프라인의 응답하는 쪽(서버)이 됩니다.
무언가 안 될 때: 증상 → 원인 빠른 진단
웹을 다루다 보면 자주 만나는 오류들이 있습니다. 이 안내서의 개념으로 대부분 짚어낼 수 있습니다.
| 증상 | 흔한 원인 | 관련 부 |
|---|---|---|
| "사이트를 찾을 수 없음" | 도메인 오타, DNS 문제 | 2부 (DNS) |
| 404 Not Found | 주소(경로)가 틀렸거나 페이지가 없음 | 3부 (상태 코드) |
| 403 Forbidden | 권한 없음 (로그인 필요 등) | 3부 |
| 500 / 503 | 서버 쪽 오류 — 내 잘못이 아님 | 3부 |
| 자물쇠 경고·"안전하지 않음" | HTTPS 인증서 문제 | 3부 (HTTPS) |
글자가 ���로 깨짐 | 인코딩 불일치 (<meta charset> 누락) | 4부 (HTML) |
| 스타일이 하나도 안 먹음 | CSS 경로 오타, 선택자 틀림 | 5부 (CSS) |
| 버튼이 안 눌림 | JS 오류 (콘솔에 빨간 글씨 확인) | 5부 (JS) |
막혔을 때 첫 번째로 할 일: 개발자 도구(F12)의 Console 탭을 여세요. JS 오류가 빨간 글씨로 찍혀 있고, 대개 몇 번째 줄이 문제인지까지 알려줍니다. 두 번째로 Network 탭에서 어떤 요청이 실패(빨간색)했는지 봅니다. 이 두 탭이 거의 모든 문제의 단서를 줍니다.
알아두면 좋은 보안 기초
웹은 누구나 접근할 수 있어 편리한 만큼, 악용도 가능합니다. 초보 단계에서 이름만이라도 알아두면 좋은 것들입니다.
- HTTPS 사용: 앞서 본 밀봉 봉투. 로그인·결제 페이지라면 필수입니다. 자물쇠 없는 사이트에 비밀번호를 입력하지 마세요.
- 입력값을 믿지 말 것: 사용자가 폼에 무엇을 넣을지 모릅니다. 악의적 입력으로 공격하는 대표 수법이 XSS(악성 스크립트 주입)와 SQL 인젝션(데이터베이스 조작)입니다. 그래서 서버는 들어온 입력을 늘 검증·소독합니다.
- 비밀은 클라이언트에 두지 말 것: 브라우저로 보낸 코드(HTML·JS)는 누구나 들여다볼 수 있습니다(F12로요). 비밀번호·API 키 같은 민감 정보는 절대 프런트엔드 코드에 넣지 않고, 서버에서 다룹니다.
깊이 들어갈 필요는 없지만, 핵심 원칙 하나는 기억하세요: "클라이언트(브라우저)에서 오는 것은 무엇도 무조건 믿지 않는다." 보안의 출발점입니다.
자주 헷갈리는 것 빠른 정리
| 헷갈리는 짝 | 핵심 차이 |
|---|---|
| 인터넷 vs 웹 | 인터넷=도로망 전체 / 웹=그 위 한 서비스 |
| 클라이언트 vs 서버 | 요청하는 쪽 / 응답하는 쪽 |
| HTML vs CSS vs JS | 구조 / 모양 / 동작 |
| HTTP vs HTTPS | 엽서(평문) / 밀봉 봉투(암호화) |
| GET vs POST | 가져오기(읽기) / 보내기(제출) |
| HTML vs DOM | 배달된 설명서 / 조립된 살아있는 나무 |
| 쿠키 vs 캐시 | 신원 표(누구인지) / 재사용 저장본(같은 파일 또) |
| 프런트엔드 vs 백엔드 | 브라우저(클라이언트)에서 도는 일 / 서버에서 도는 일 |
더 깊이 들어가고 싶다면 (방향 안내)
이 안내서는 '큰 그림'에 집중했습니다. 다음 단계로 각 조각을 깊게 파고들 수 있습니다. 무엇이든 하나를 끝까지 보다 보면 나머지가 따라옵니다.
- HTML·CSS 더 깊이: 시맨틱 태그(
<header>,<nav>,<article>), 반응형 디자인(화면 크기에 맞춰 배치 바꾸기), Flexbox·Grid 같은 배치 도구. - JavaScript 더 깊이: 변수·함수·조건·반복 같은 프로그래밍 기본기, 이벤트 다루기, 서버와 데이터를 주고받는
fetch. - 백엔드 입문: 서버를 직접 만들어 보기, 데이터베이스, API 개념.
- 개발 도구 친해지기: 3부에서 연 개발자 도구(F12)의 Network·Elements·Console 탭을 일상적으로 써 보기. 가장 빠른 성장 도구입니다.
가장 신뢰할 만한 무료 학습 출처로 MDN Web Docs(developer.mozilla.org)가 있습니다. 한국어 문서도 많고, 표준에 충실합니다. 막힐 때 "MDN + 키워드"로 검색하는 습관을 들이면 큰 도움이 됩니다.
실습 프로젝트, 여기까지 온 것
처음엔 빈 메모장이었습니다. 안내서를 따라오며 이렇게 자랐습니다.
- 4부: HTML로 구조를 세웠다 (제목·이미지·목록·링크).
- 5부: CSS로 모양을 입히고 JavaScript로 버튼을 동작시켰다.
- 6부: 그 페이지가 브라우저 안에서 DOM이 되고 픽셀로 그려지는 과정을 이해했다.
- 7부: 이 페이지가 인터넷에 올라가 남에게 보이기까지의 전체 흐름을 다시 꿰었다.
이제 여러분은 웹페이지를 만들 수 있고, 그것이 화면에 뜨기까지 무슨 일이 벌어지는지 설명할 수 있습니다. 그게 이 안내서의 목표였습니다.
마지막 한마디
웹은 결국 단순한 아이디어의 반복입니다 — 누군가 요청하면, 누군가 응답한다. DNS도, HTTP도, 렌더링도 모두 이 한 문장을 거드는 장치일 뿐입니다. 이 골격만 단단히 잡고 있으면, 앞으로 만나는 새 기술(프레임워크·API·클라우드 등)도 "전체 그림의 어디에 끼는 조각인지"로 이해하게 될 것입니다.
수고하셨습니다. 이제 메모장을 열고, 여러분만의 페이지를 한 줄 더 고쳐 보세요. 🎉
빠른 참조가 필요하면 부록을 활용하세요 — 용어집, 상태 코드표, 증상→원인 진단표, 새 페이지 체크리스트가 정리돼 있습니다.