Guider/Frontend/FrontendDevGuide0001
Frontend#01

FrontendDevGuide0001

인터넷과 웹의 동작 원리

🌐 FrontendDevGuide0001 — 인터넷과 웹의 동작 원리 완전 정복

 

💡 이 글을 읽고 나면...
웹사이트가 어떻게 동작하는지, 브라우저란 무엇인지, URL의 의미가 무엇인지,
HTTP란 무엇인지, DNS가 어떻게 작동하는지 — 인터넷의 핵심 원리를 완전히 이해하게 됩니다!

 

📌 예상 학습 기간: 1주  |  난이도: ⭐☆☆☆☆ (입문)  |  선수 지식: 없음 (완전 초보 OK!)

 


📡 1. 인터넷이란? — 거대한 컴퓨터 네트워크

인터넷(Internet)은 전 세계 수십억 대의 컴퓨터가 서로 연결된 거대한 네트워크입니다.
우리가 유튜브 영상을 보고, 카카오톡 메시지를 주고받고, 쇼핑을 하는 것 — 모두 인터넷을 통해 이루어집니다.

 

🏙️ 비유로 이해하기:
인터넷 = 전 세계 도시들을 연결하는 도로망
컴퓨터 = 도로 위의 건물들
데이터 = 도로를 달리는 택배 트럭
웹(Web) = 도로망 위에서 동작하는 택배 서비스

 

⚠️ 인터넷 ≠ 웹!
많은 사람들이 혼동하지만, 인터넷은 인프라(도로)고, 웹(World Wide Web)은 그 위에서 동작하는 서비스(택배)입니다.
이메일, FTP, SSH 등도 인터넷을 사용하지만 웹은 아닙니다.

 


🖥️ 2. 웹사이트는 어떻게 동작할까? — 클라이언트와 서버

우리가 네이버나 유튜브에 접속할 때 실제로 어떤 일이 벌어지고 있을까요?
클라이언트-서버 모델로 이해해보겠습니다.

 

🍕 피자 배달로 비유하기:
나(고객) = 클라이언트 — "피자 한 판 주세요!" (요청)
피자 가게 = 서버 — 피자를 만들어 배달해줌 (응답)
피자 = HTML/CSS/JS 파일 — 실제로 받아오는 데이터

 

클라이언트 vs 서버 비교 도표

 


🔄 3. 웹 동작 전체 흐름 — 브라우저에서 화면까지

주소창에 naver.com을 입력하는 순간, 1초도 안 되는 시간에 이런 일들이 벌어집니다.

 

웹 동작 전체 흐름 도표

 

🔎 각 단계 자세히 보기:
① URL 입력: 브라우저 주소창에 "https://naver.com" 입력
② DNS 조회: 도메인 이름을 실제 IP 주소(숫자)로 변환
③ HTTP 요청: 브라우저가 해당 서버에 "페이지를 보여주세요!" 요청
④ 응답 수신: 서버가 HTML, CSS, JS 파일을 보내줌
⑤ 화면 렌더링: 브라우저가 받은 코드를 해석해 예쁜 화면으로 그려줌

 


📡 4. DNS란? — 인터넷의 전화번호부

컴퓨터는 숫자 주소(IP 주소)로만 서버를 찾을 수 있습니다.
그런데 사람이 223.130.200.104 같은 숫자를 외우기는 너무 힘들죠?
그래서 DNS(Domain Name System)"naver.com → 223.130.200.104"처럼 이름을 숫자로 변환해줍니다.

 

DNS 동작 원리 도표

 

📱 실생활 비유:
전화번호부 = DNS
친구 이름 "김철수" = 도메인 이름 (naver.com)
친구 전화번호 "010-1234-5678" = IP 주소 (223.130.200.104)

 


🔗 5. URL 완전 해부 — 주소창의 모든 의미

URL(Uniform Resource Locator)은 인터넷 상에서 특정 자원의 위치를 나타내는 주소입니다.
한 번 제대로 뜯어보면, 주소창의 모든 글자가 다 의미를 가지고 있습니다.

 

URL 구조 해부 도표

 

🏠 URL을 집 주소로 비유하면:
https:// = 어떤 교통수단(자동차 도로 vs 전용 고속도로)
naver.com = 도시 + 건물 이름
/search = 건물 내 방 번호
?q=프론트엔드 = 방 안에서 찾는 물건 이름

 

🔒 http vs https 차이:
http = 일반 우편 (누구나 내용을 볼 수 있음 — 보안 취약)
https = 암호화된 택배 (내용이 암호화되어 안전)
→ 현대 웹사이트는 반드시 https를 사용해야 합니다!

 


📮 6. HTTP/HTTPS — 웹의 대화 방식

HTTP(HyperText Transfer Protocol)는 클라이언트와 서버가 서로 데이터를 주고받는 약속된 대화 방식(프로토콜)입니다.
우리가 서버에게 무언가를 요청할 때, 크게 4가지 방법(메서드)을 사용합니다.

 

HTTP 메서드 비교 도표

 

📬 HTTP 요청/응답 구조:
요청(Request): [메서드] + [URL] + [헤더] + [바디(선택)]
예) GET https://api.naver.com/articles → "기사 목록 주세요!"

응답(Response): [상태코드] + [헤더] + [바디(데이터)]
예) 200 OK + JSON 데이터 → "여기 기사 목록이에요!"

 

📊 HTTP 상태코드 — 서버가 보내는 응답 신호

서버는 요청을 받으면 숫자 코드로 결과를 알려줍니다. 콘솔에서 자주 보게 될 코드들입니다!

 

HTTP 상태코드 도표

 


🌐 7. 브라우저 완전 정복 — 개발자의 가장 중요한 도구

브라우저는 서버에서 받아온 HTML, CSS, JavaScript 코드를 우리가 볼 수 있는 화면으로 변환해주는 프로그램입니다.
프론트엔드 개발자에게 브라우저는 곧 작업실이자 테스트 도구입니다.

 

주요 브라우저 비교 도표

 

🎨 브라우저 렌더링 파이프라인 — 코드가 화면이 되는 과정

브라우저가 HTML 파일을 받은 후 화면을 그리기까지의 내부 과정입니다. 성능 최적화의 핵심 개념입니다!

 

브라우저 렌더링 파이프라인 도표

 

💡 개발자 도구(DevTools) 활용하기:
크롬에서 F12 또는 Ctrl+Shift+I (Mac: Cmd+Option+I) 를 눌러보세요!
Elements 탭: HTML/CSS 구조 실시간 확인 및 수정
Console 탭: JavaScript 실행 및 오류 확인
Network 탭: HTTP 요청/응답 내역 확인
Performance 탭: 렌더링 성능 분석

 


🔒 8. 웹 보안 기초 — 프론트 개발자가 알아야 할 것

보안은 백엔드만의 일이 아닙니다. 프론트엔드 개발자도 반드시 알아야 하는 기초 보안 개념입니다.

 

🛡️ HTTPS의 동작 원리 (TLS/SSL):
HTTPS는 데이터를 암호화하여 주고받습니다. 마치 편지를 자물쇠 상자에 넣어 보내는 것과 같습니다.
→ 주소창의 🔒 아이콘이 HTTPS 연결을 의미합니다.
→ 개인정보, 비밀번호 등을 다루는 모든 사이트는 반드시 HTTPS를 사용해야 합니다.

 

🍪 쿠키(Cookie)와 세션(Session):
HTTP는 기본적으로 "상태를 기억하지 않는" 프로토콜입니다(Stateless).
쿠키: 브라우저에 저장하는 작은 데이터 조각 (로그인 상태, 장바구니 등 기억)
세션: 서버에 저장되는 사용자 정보 (쿠키에는 세션 ID만 저장)

 

🚫 CORS (Cross-Origin Resource Sharing):
다른 도메인에서 리소스를 요청할 때 브라우저가 보안상 막는 정책입니다.
예) naver.com의 JS가 google.com API를 호출하면 → 브라우저가 차단!
→ 서버에서 CORS 헤더를 설정해야 허용됩니다. 프론트 개발 중 자주 만나는 오류입니다!

 

⚠️ 주요 웹 취약점:
XSS (Cross-Site Scripting): 악성 스크립트를 웹페이지에 삽입하는 공격
→ 대응: 사용자 입력값을 항상 검증(sanitize)하고 이스케이프 처리

CSRF (Cross-Site Request Forgery): 사용자 모르게 요청을 보내는 공격
→ 대응: CSRF 토큰 사용, SameSite 쿠키 설정

 


⚡ 9. 웹 성능 기초 — 빠른 사이트를 만드는 핵심

사용자는 3초 이상 로딩되면 사이트를 떠납니다. 성능은 프론트엔드의 핵심 과제입니다.

 

📦 캐싱(Caching):
브라우저는 한 번 받아온 파일(이미지, CSS, JS)을 저장해두고, 다음 방문 시 서버에 다시 요청하지 않습니다.
→ 훨씬 빠르게 페이지가 로딩됩니다!
→ 개발자 도구 Network 탭에서 "from cache"라고 보이면 캐시에서 불러온 것입니다.

 

🗜️ 압축(Compression) & 최소화(Minification):
gzip/brotli 압축: 서버가 파일을 압축해서 전송 → 용량 70~80% 감소
Minification: JS/CSS 파일에서 공백, 주석 제거 → 파일 크기 최소화
→ 빌드 도구(Webpack, Vite 등)가 자동으로 처리해줍니다

 

🖼️ 이미지 최적화:
이미지는 웹페이지에서 가장 큰 용량을 차지합니다.
WebP 포맷: JPG보다 25~34% 작고 품질은 동일
Lazy Loading: 화면에 보이지 않는 이미지는 나중에 로드
<img loading="lazy"> 속성 하나로 자동 적용!

 

📏 Core Web Vitals — Google 성능 측정 지표:
LCP (Largest Contentful Paint): 가장 큰 콘텐츠가 보이는 시간 → 2.5초 이내 목표
FID (First Input Delay): 첫 클릭에 반응하는 시간 → 100ms 이내 목표
CLS (Cumulative Layout Shift): 레이아웃이 갑자기 이동하는 정도 → 0.1 이하 목표
→ Chrome DevTools > Lighthouse 탭에서 직접 측정 가능!

 


🛠️ 10. 현업에서 자주 쓰는 개념 정리

 

📡 REST API vs GraphQL:
REST API: 각 URL이 하나의 자원을 나타냄 (GET /users/1 → 1번 유저 조회)
GraphQL: 필요한 데이터만 골라서 한 번에 요청 가능 → 오버페칭 방지
→ 현업에서는 REST API가 훨씬 많이 사용됩니다. REST 먼저 마스터!

 

⚡ CDN (Content Delivery Network):
전 세계 곳곳에 서버를 분산 배치하여, 사용자에게 가장 가까운 서버에서 파일을 전달합니다.
→ 서울 사용자는 서울 서버에서, 뉴욕 사용자는 뉴욕 서버에서 받아 속도가 빠름!
→ 이미지, JS, CSS 같은 정적 파일에 주로 사용

 

🔄 CSR vs SSR vs SSG:
CSR (Client-Side Rendering): 브라우저에서 JS가 화면을 그림 (React 기본 방식)
→ 빠른 인터랙션, 초기 로딩 느림, SEO 불리

SSR (Server-Side Rendering): 서버에서 HTML을 완성해서 전송 (Next.js)
→ 초기 로딩 빠름, SEO 유리, 서버 부하 증가

SSG (Static Site Generation): 빌드 시 HTML을 미리 생성
→ 가장 빠름, 동적 콘텐츠 불리 (블로그, 문서 사이트에 적합)

 

📦 번들러(Bundler)와 빌드 도구:
여러 JS/CSS 파일을 하나로 묶어(bundle) 최적화하는 도구입니다.
Webpack: 가장 많이 사용되는 번들러 (React CRA 기본)
Vite: 매우 빠른 최신 빌드 도구 → 현재 트렌드
esbuild: Go로 작성된 초고속 번들러

 


✅ 핵심 요약 & 체크리스트

 

"인터넷과 웹의 동작 원리를 이해하면, 코드를 작성할 때 '왜 이렇게 해야 하는지'를 알게 됩니다.
원리를 아는 개발자와 모르는 개발자의 실력 차이는 시간이 갈수록 벌어집니다."

 

📋 학습 완료 체크리스트:
☐ 인터넷과 웹의 차이를 설명할 수 있다
☐ 클라이언트-서버 모델을 설명할 수 있다
☐ URL의 각 구성요소(프로토콜, 도메인, 경로, 쿼리스트링)를 안다
☐ DNS가 무엇인지 설명할 수 있다
☐ HTTP 메서드 4가지(GET/POST/PUT/DELETE)를 안다
☐ 자주 쓰는 HTTP 상태코드(200, 404, 500)를 안다
☐ 브라우저 렌더링 파이프라인을 설명할 수 있다
☐ 크롬 개발자 도구를 열어서 Network 탭을 확인했다
☐ CORS가 무엇인지 안다
☐ CSR과 SSR의 차이를 설명할 수 있다

 

🚀 실습 미션:
① 크롬에서 F12 → Network 탭 열고, 네이버 접속하면서 어떤 파일들이 오가는지 확인해보기
② 주소창의 URL을 직접 분해해서 프로토콜, 도메인, 경로를 찾아보기
③ Console 탭에 document.title 입력하고 현재 페이지 제목 출력해보기

 

🎉 다음 단계: FrontendDevGuide0002 — HTML 완전 정복 으로 넘어가세요!
원리를 이해했다면 이제 직접 코드를 작성할 차례입니다. 💪

 

반응형