현재 오즈코딩스쿨 강의를 통해 프론트엔드를 학습하고 있습니다.
본 포스트는 해당 강의에 대한 내용 정리를 목적으로 합니다.

| 구성 요소 | 설명 |
|---|---|
| 호스트(Host) | 네트워크에 연결된 컴퓨터나 장비 (예: PC, 스마트폰 등) |
| 라우터(Router) | 네트워크 간 데이터 경로를 선택하고 전달 |
| 스위치(Switch) | 동일 네트워크 내 장비를 연결하고 데이터 전송 제어 |
| 허브(Hub) | 여러 장치를 단순 연결 (요즘은 거의 사용되지 않음) |
| 모뎀(Modem) | 아날로그 ↔ 디지털 신호 변환, 인터넷 제공 |


| 구분 | LAN (Local Area Network) | MAN (Metropolitan Area Network) | WAN (Wide Area Network) |
|---|---|---|---|
| 정의 | 근거리 통신망 | 도시권 통신망 | 광역 통신망 |
| 범위 | 사무실, 집, 학교 등 작은 지역 | 도시 하나 정도의 중간 규모 지역 | 국가, 대륙 등 매우 넓은 지역 |
| 속도 | 빠름 (1Gbps 이상 가능) | 보통 빠름 | 느린 편 (거리·회선 상태에 따라 다름) |
| 소유자 | 일반적으로 개인이나 조직 소유 | 보통 기업이나 지역 ISP가 관리 | 국가, 대기업, ISP 등 |
| 예시 | 집에서 사용하는 와이파이, 회사 내 네트워크 | 시청, 공공기관, 대학 캠퍼스 간 연결망 | 인터넷, 국가 간 연결망 |
| 비용 | 저렴함 | 중간 | 매우 높음 |


| 계층 (번호) | 이름 (한글) | 주요 역할 / 기능 | 예시 |
|---|---|---|---|
| 7 | 응용 계층 (Application) | 사용자와 직접 통신하는 계층 | HTTP, FTP, SMTP |
| 6 | 표현 계층 (Presentation) | 데이터의 형식, 인코딩, 암호화/복호화 처리 | JPEG, MP4, SSL |
| 5 | 세션 계층 (Session) | 통신 세션의 시작, 유지, 종료 관리 | API, NetBIOS |
| 4 | 전송 계층 (Transport) | 데이터의 정확한 전송 보장 (오류 처리, 흐름 제어) | TCP, UDP |
| 3 | 네트워크 계층 (Network) | 경로 설정, IP 주소 기반의 데이터 전달 | IP, ICMP, 라우팅 |
| 2 | 데이터 링크 계층 (Data Link) | MAC 주소 기반, 오류검출, 프레임 단위 전송 | Ethernet, 스위치 |
| 1 | 물리 계층 (Physical) | 전기적 신호, 케이블·하드웨어 등 실제 전송 매체 | 케이블, 허브, 전압 등 |
a. 물리 계층
b. 데이터 링크 계층
c. 네트워크 계층
d. 전송 계층
e. 세션 계층
f. 표현 계층
g. 응용 계층

데이터를 보낼 때, 상위 계층에서 하위 계층으로 내려가면서 각 계층이 자신만의 헤더(제어 정보)를 붙이는 과정
예를 들어 (OSI 7계층 기준)
[응용 계층 데이터]
→ 표현 계층 헤더 + 데이터
→ 세션 계층 헤더 + 데이터
→ 전송 계층 헤더(TCP/UDP) + 데이터
→ 네트워크 계층 헤더(IP) + 데이터
→ 데이터 링크 계층 헤더(MAC) + 데이터 + 트레일러
→ 물리 계층: 전기/광신호로 전송
데이터를 받을 때, 하위 계층에서 상위 계층으로 올라가면서 각 계층이 자신의 헤더를 제거하고 처리하는 과정
예를 들어 (OSI 7계층 기준)
[물리 계층] 전기 신호 수신
→ 데이터 링크 계층: MAC 헤더 제거
→ 네트워크 계층: IP 헤더 제거
→ 전송 계층: TCP/UDP 헤더 제거
→ 세션/표현/응용 계층까지 도달
| 이유 | 설명 |
|---|---|
| 표준화된 통신 가능 | 서로 다른 장비/운영체제 간에도 일관된 통신이 가능 |
| 유지보수 용이 | 각 계층이 독립적으로 작동하므로 기능 분리 및 디버깅이 쉬움 |
| 보안, 오류 처리 가능 | 각 계층에서 암호화, 오류 제어, 흐름 제어 등 추가 기능 처리 |
| 데이터 추적 및 분석 용이 | 헤더 정보를 분석하여 패킷 경로, 문제 원인 파악 가능 |


HTTP(HyperText Transfer Protocol)는 웹에서 클라이언트(보통 웹 브라우저)와 서버가 데이터를 주고받기 위한 통신 규약(Protocol)이다.



HTTP는 요청 간의 상태를 저장하지 않기 때문에 "무상태 프로토콜"이라고 하며, 로그인 유지 같은 기능은 쿠키, 세션, 토큰 등으로 상태 유지를 따로 구현해야 한다.

HTTP의 비연결성이란, 요청-응답 후 연결을 종료하는 구조를 말하며, 이는 서버 자원을 아끼지만, 성능 문제 때문에 Keep-Alive 같은 기술로 보완된다.


HTTPS (HyperText Transfer Protocol Secure)는 웹에서 데이터를 주고받을 때, 암호화된 보안 연결을 제공하는 HTTP의 보안 버전


HTTPS = HTTP + SSL/TLS
| 이유 | 설명 |
|---|---|
| 🔒 데이터 암호화 | 로그인 정보, 카드 번호 등 중요 데이터가 노출되지 않도록 암호화 |
| 🧑💻 중간자 공격 방지(MITM) | 누군가 통신을 가로채고 조작하는 것을 차단 |
| ✅ 웹사이트 신뢰성 확보 | 브라우저에 🔒자물쇠 표시가 뜨며 사용자 신뢰 상승 |
| 📶 데이터 무결성 보장 | 전송 중 데이터가 변경되지 않았음을 확인 가능 |
| 📈 검색 엔진 최적화(SEO) | 구글 등 주요 검색 엔진에서 HTTPS 사이트를 우선 노출 |

🔸 특징
🔸 예시:
보내는 사람 → [암호화 (키 A)] → 암호문
암호문 → [복호화 (키 A)] → 받는 사람

🔸 특징
🔸 예시:
보내는 사람 → [암호화 (수신자의 공개키)] → 암호문
암호문 → [복호화 (수신자의 개인키)] → 받는 사람
| 항목 | 대칭키 암호화 | 비대칭키 암호화 |
|---|---|---|
| 키 개수 | 1개 (같은 키 사용) | 2개 (공개키 + 개인키) |
| 속도 | 빠름 | 느림 |
| 보안성 | 키 유출 시 매우 위험 | 키 교환 과정에서 안전 |
| 사용 용도 | 데이터 대량 암호화 | 인증, 키 교환, HTTPS 초기 단계 |
| 대표 알고리즘 | AES, DES, RC4 | RSA, ECC, DSA |
대칭키는 빠르지만 키 공유가 위험하고, 비대칭키는 느리지만 키 공유가 안전하다 — 실제 시스템에서는 둘을 적절히 조합해 사용한다.
| 항목 | HTTP (HyperText Transfer Protocol) | HTTPS (HTTP Secure or HTTP over SSL/TLS) |
|---|---|---|
| 🔒 보안 | 암호화 X (평문 전송) | 암호화 O (SSL/TLS 사용) |
| 📡 전송 방식 | 텍스트 그대로 전달 | 암호화된 채널을 통해 전송 |
| 🌐 포트 번호 | 기본 포트: 80 | 기본 포트: 443 |
| 📜 주소 형식 | http://example.com | https://example.com |
| 🧪 무결성 보장 | 보장하지 않음 | 데이터 위/변조 방지 기능 제공 |
| 🧑💻 인증 기능 | 없음 | SSL 인증서로 서버 신원 보장 |
| 🔍 브라우저 표시 | 일반 텍스트 표시, 때로는 경고 발생 | 🔒 자물쇠 아이콘 표시, “보안 연결” 표시 |
🔐 암호화 (Encryption)
🛡️ 무결성 (Integrity)
✅ 인증 (Authentication)
🧑🤝🧑 사용자 신뢰도 증가
사용자들이 HTTPS를 신뢰하고 거래나 로그인 등의 행동을 더 안심하고 수행함
📈 SEO에 유리
구글은 HTTPS 사이트를 검색 순위에서 우선시합니다



→ 예: https://example.com
클라이언트는 세션 키 생성용 정보를 암호화해서 서버에 전달
(이때 서버의 공개키를 사용해 암호화)

CORS는 웹 브라우저에서 다른 출처(origin)의 리소스를 안전하게 요청할 수 있도록 허용하는 보안 메커니즘이다.
출처(origin) 구성
기본적으로 브라우저는 SOP(Same-Origin Policy)라는 보안 정책을 따른다.
이 정책은 다른 출처(origin)에서 온 요청은 기본적으로 차단한다.
❗문제 : 웹 앱을 개발하다 보면, 이런 상황이 자주 발생한다.
이 둘은 출처가 다르기 때문에 브라우저는 API 요청을 막는다.
✅ 해결책: CORS
CORS를 이용하면 서버가 명시적으로 특정 출처에서 온 요청을 허용해줄 수 있습니다.
Access-Control-Allow-Origin: http://localhost:3000
→ 브라우저는 해당 요청을 허용하게 됩니다.

"CORS policy: No 'Access-Control-Allow-Origin' header" 오류 출력


Same-Origin Policy(SOP)는 웹 브라우저가 서로 다른 출처(origin)의 리소스 간 접근을 제한하는 보안 정책이다.
출처(origin) 구성
| 요청 위치 | 자원 위치 | SOP 판정 |
|---|---|---|
https://example.com | https://example.com | ✅ 동일 출처 |
https://example.com | http://example.com | ❌ 다른 출처 |
https://example.com | https://api.example.com | ❌ 다른 출처 |
https://example.com:443 | https://example.com:8443 | ❌ 다른 출처 |
// evil.com에서 실행된 JS가 bank.com에 접근 → SOP로 인해 차단
document.cookie; // 다른 출처 쿠키 접근 불가

🌐 현대 웹 환경에서는 출처가 나뉘는 경우가 많음
📡 교차 출처 리소스 요청이 필요한 경우 많음
🔄 해결 수단이 필요함
| 헤더 이름 | 설명 |
|---|---|
Access-Control-Allow-Origin | 허용할 출처 지정 (* 또는 특정 도메인) |
Access-Control-Allow-Methods | 허용할 HTTP 메서드 지정 (GET, POST 등) |
Access-Control-Allow-Headers | 요청 시 사용할 수 있는 헤더 지정 |
Access-Control-Allow-Credentials | 쿠키 포함 요청을 허용할지 여부 |
const express = require('express');
const cors = require('cors');
const app = express();
// 특정 출처만 허용
app.use(cors({
origin: 'https://frontend.example.com',
methods: ['GET', 'POST'],
credentials: true // 쿠키 허용
}));
app.get('/data', (req, res) => {
res.json({ message: 'CORS 허용됨!' });
});
location /api/ {
add_header Access-Control-Allow-Origin "https://frontend.example.com";
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
add_header Access-Control-Allow-Headers "Content-Type";
add_header Access-Control-Allow-Credentials "true";
}
🔹 단순 요청 (Simple Request)
조건이 맞으면 브라우저가 바로 요청을 보낸다.
예: GET, POST 요청이고 Content-Type이 application/x-www-form-urlencoded, multipart/form-data, text/plain일 경우.
흐름
1. 클라이언트: fetch('https://api.example.com/data') 요청
2. 서버: 응답 시 Access-Control-Allow-Origin: https://client.com 헤더 포함
3. 브라우저: 응답 허용
🔹 프리플라이트 요청 (Preflight Request)
조건을 벗어난 요청은 브라우저가 먼저 OPTIONS 메서드로 "물어보고" → 서버가 OK하면 → 실제 요청을 진행.
예:
흐름
1. 클라이언트 → OPTIONS 요청 전송 (프리플라이트)
2. 서버 → 다음 헤더 포함 응답
Access-Control-Allow-Origin: https://client.com
Access-Control-Allow-Methods: POST, OPTIONS
Access-Control-Allow-Headers: Content-Type
🔹 CORS에서 자주 보는 오류

Access to fetch at 'https://api.com' from origin 'http://localhost:3000'
has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present...
→ 서버에서 해당 도메인을 CORS로 허용하지 않았기 때문에 발생합니다.