[이어드림스쿨 1주차] 인터넷과 Http

KiwiChipKiwiChip
8 min read

1️⃣ TCP/IP란? – 인터넷을 가능하게 만든 언어

TCP/IP란 무엇인가?

TCP/IP는 인터넷에서 기기끼리 데이터를 주고받을 수 있도록 만든 프로토콜 집합이다.
인터넷은 단순히 케이블을 연결한다고 해서 동작하지 않는다.
서로 말이 통해야 한다. 그 공통의 언어가 바로 TCP/IP다.

  • TCP (Transmission Control Protocol): 데이터를 신뢰성 있게 전송하는 역할

  • IP (Internet Protocol): 데이터를 어디로 보낼지 정하는 주소 지정 시스템

왜 중요할까?

우리는 유튜브를 보고, 메일을 보내고, 파일을 다운로드하지만
그 모든 것이 실은 **작게 나뉜 데이터 조각(패킷)**들이 인터넷이라는 도로를 달려가는 것이다.
그 도로의 교통 규칙이 TCP/IP인 셈이다.


2️⃣ IP와 TCP는 각각 무슨 일을 할까?

IP – 데이터의 길잡이

IP는 "이 데이터가 어디로 가야 하는지"를 알려주는 주소이다.
즉, 모든 인터넷 연결 기기는 IP 주소를 가진다. (예: 192.168.0.1)

  • IP는 실제로 데이터를 전송하지 않는다.

  • 단지 "데이터를 보낼 목적지"를 표시할 뿐이다.

💡 비유: 택배 상자에 붙은 주소 스티커.


TCP – 데이터의 보디가드

TCP는 데이터를 목적지까지 안전하게 도착하게 만든다.

  • 데이터를 **작은 조각(패킷)**으로 쪼갠 뒤

  • 순서대로, 빠짐없이, 오류 없이 도착하도록 확인하고

  • 도착하면 다시 원래의 순서대로 재조립한다.

💡 비유:
패키지마다 일련번호를 붙이고
도착한 박스를 하나하나 확인하고 조립하는 배송 관리자.


3️⃣ HTTP란? – 브라우저와 서버의 대화법

HTTP란 무엇인가?

HTTP(HyperText Transfer Protocol)는
**브라우저(클라이언트)**와 **웹 서버(서버)**가 웹페이지, 이미지, 데이터를 주고받을 수 있게 하는 통신 규약이다.

인터넷의 대부분은 HTTP를 통해 이루어진다.
우리가 브라우저에 naver.com을 치는 순간, HTTP 요청이 날아가고, HTTP 응답이 돌아오는 것이다.


⚙️ 동작 방식

  1. 사용자가 주소창에 www.example.com 입력

  2. 브라우저가 DNS를 통해 IP 주소를 확인

  3. HTTP 요청이 서버로 전달됨

  4. 서버가 HTML, CSS, JS 등으로 응답

  5. 브라우저가 응답을 화면에 렌더링

💡 비유:
브라우저는 웨이터, 서버는 주방.
HTTP는 둘 사이의 주문서 양식이다.


4️⃣ HTTP 요청의 구성

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
구성 요소설명예시
요청 줄무엇을 요청할지GET /index.html HTTP/1.1
헤더요청에 대한 부가 정보Host, User-Agent
빈 줄헤더와 본문 구분
본문전송할 데이터 (주로 POST에서 사용)name=John&age=30

5️⃣ HTTP 메서드와 행동 유형

CRUD 매핑

메서드설명대응되는 CRUD
GET정보를 요청Read
POST새 데이터를 생성Create
PUT기존 정보를 전체 수정Update
PATCH기존 정보를 부분 수정Update
DELETE정보를 삭제Delete

📌 실무 예시:

  • 회원가입 폼 → POST /signup

  • 게시글 수정 → PUT /posts/1


6️⃣ HTTP 상태 코드 – 서버의 응답 언어

HTTP 상태 코드 간단 정리

상태 코드의미설명
1xx (정보)요청을 받았으며, 처리 중서버가 요청을 받았고, 계속 진행 중이라는 의미. 자주 보이진 않음.
2xx (성공)요청 성공클라이언트의 요청이 정상적으로 처리되었을 때 사용.
3xx (리다이렉션)다른 위치로 이동 필요요청한 자원이 다른 곳에 있으며, 그곳으로 이동해야 함.
4xx (클라이언트 오류)요청 오류클라이언트 측의 잘못된 요청. 주소 오류, 권한 없음 등.
5xx (서버 오류)서버 내부 문제요청은 올바르지만 서버에서 처리 중 오류 발생.

자주 보는 상태 코드

상태 코드의미실무 예시
200 OK요청 성공페이지 정상 로딩
301 Moved Permanently영구 이동HTTP → HTTPS
400 Bad Request잘못된 요청잘못된 파라미터
401 Unauthorized인증 필요로그인하지 않고 접근
403 Forbidden접근 금지권한 없는 사용자
404 Not Found요청한 페이지 없음오타난 URL
500 Internal Server Error서버 오류코드 에러, DB 실패 등

💡 이 코드를 보면 어디가 문제인지 즉시 파악 가능하다.
개발자는 로그와 함께 이 코드를 기준으로 디버깅을 시작한다.


7️⃣ 프로토콜의 핵심 기능

프로토콜이란?

인터넷에서 수많은 컴퓨터와 기기들이 서로 메시지를 주고받는다. 이때 모든 기기가 말이 통하게 하려면 공통된 약속, 즉 **프로토콜(protocol)**이 필요하다.

마치 우리가 한국어, 영어 같은 공용어로 대화하듯, 컴퓨터들끼리도 정해진 형식과 규칙에 따라 데이터를 주고받는다. 이게 바로 프로토콜이다.


프로토콜의 구성 요소: 구문, 의미, 시간

프로토콜은 크게 다음 세 가지 요소로 구성된다.

구성 요소설명예시
구문(Syntax)데이터의 형식과 구조메시지를 JSON으로 보낼지, XML로 보낼지
의미(Semantics)메시지의 의미 해석 방식"200 OK"는 요청이 성공했음을 의미
시간(Timing)메시지를 언제, 어떤 순서로 주고받을지요청 후 응답을 기다려야 하는 규칙

이 세 요소가 어긋나면, 아무리 데이터가 도착해도 의미 없는 소음이 된다.

프로토콜이 없다면 인터넷은 존재할 수 없다.
HTTP 덕분에 웹사이트를 보고, TCP 덕분에 안정적으로 파일을 받고, SMTP 덕분에 이메일을 주고받는다.

각 프로토콜은 특정 목적에 맞게 설계되어 있으며, 정확하고 효율적인 통신을 가능하게 해준다.


프로토콜의 주요 기능

프로토콜은 단순히 데이터를 주고받는 데 그치지 않는다. 보다 안정적이고 효율적인 통신을 위해 여러 기능을 수행한다. 그 중 대표적인 기능은 다음과 같다:

1. 캡슐화 (Encapsulation)

  • 프로그래밍에서의 캡슐화는 정보 은닉을 의미하지만,

  • 프로토콜에서의 캡슐화는 데이터를 감싸고 헤더 정보를 덧붙이는 것에 가깝다.

  • 마치 소포를 보낼 때 포장하고 주소를 붙이는 것처럼, 데이터에도 출발지·도착지 정보, 순서, 오류 검출 정보 등을 함께 담는다.

2. 주소 결정 (Addressing)

  • 데이터를 누구에게 보낼지를 명확히 지정한다.

  • IP 주소, MAC 주소, 포트 번호 등을 통해 정확한 목적지를 설정한다.

3. 순서 결정 (Sequencing)

  • 데이터를 어떤 순서로 보낼지/받을지 관리한다.

  • 특히 큰 데이터를 나눠 전송할 때, 원래 순서대로 조립할 수 있게 해준다.

프로토콜 정리

기능역할비유
주소 지정누가 누구에게 보낼지편지봉투의 주소
라우팅어디로 보낼지 경로 탐색내비게이션 경로
흐름 제어너무 빨리 보내지 않게 조절고속도로 속도 제한
오류 제어손상된 데이터 재전송잘못 온 택배 다시 발송
캡슐화계층별로 데이터 포장박스 안 박스, 택배 다층 포장

8️⃣ CORS와 SOP – 브라우저의 보안 메커니즘

SOP (Same-Origin Policy)

**Same-Origin Policy(동일 출처 정책)**은 웹 브라우저의 보안 정책 중 하나로, 다른 출처(origin)의 리소스에 자유롭게 접근하지 못하도록 제한하는 규칙이다.
즉, 악의적인 사이트가 사용자의 정보를 몰래 가져가는 걸 방지하기 위한 보안 장치이다.

출처(Origin)란 무엇인가?

출처(Origin)는 다음 세 가지 요소가 모두 동일해야 같은 출처로 간주된다:

  1. 프로토콜 (Protocol): http, https

  2. 호스트 (Host): example.com

  3. 포트 (Port): :80, :443

예를 들어,

URL같은 출처인가?
https://example.com vs https://example.com✅ 동일 출처
http://example.com vs https://example.com❌ 다른 출처 (프로토콜 다름)
https://example.com vs https://api.example.com❌ 다른 출처 (호스트 다름)
https://example.com:443 vs https://example.com:3000❌ 다른 출처 (포트 다름)

📌 https://a.com에서→ https://b.com/data 요청 시 기본적으로 브라우저는 막는다.

CORS (Cross-Origin Resource Sharing)

만약 다른 출처에서 정상적으로 접근을 허용하고 싶다면, 서버 측에서 CORS(Cross-Origin Resource Sharing) 정책을 설정해줘야 한다.

  • 즉, 서버가 특정 출처만 허용하도록 설정할 수 있다.
Access-Control-Allow-Origin: https://a.com

💡 비유:
내 가게 창고는 내 직원만 쓸 수 있지만, 허락받은 협력 업체에게는 키를 줄 수 있다.

const express = require('express');

const app = express();

app.use((req, res, next) => {
  // 일반적으로 같은 url에서는 cors error가 발생할 일이 없습니다.

  // 아래와 같이 요청을 허용할 출처 설정합니다. 특정 url을 설정한 뒤 CORS 에러가 발생하는 상황을 확인해보세요.
  res.set('Access-Control-Allow-Origin', `https://localhost`);

  // 아래 주석을 해제해서 CORS 에러를 해결한 상황을 확인해보세요.
  res.set('Access-Control-Allow-Origin', `https://${req.hostname}`);
  res.set('Access-Control-Allow-Credentials', 'true'); // 쿠키와 같은 자격 증명을 설정

  // 그 외에 아래와 같은 설정도 할 수 있습니다.
  // res.set('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE'); // 요청 메서드를 설정
  // res.set('Access-Control-Allow-Headers', 'Content-Type'); // 요청 헤더를 설정
  next();
});

app.get('/api/data', (req, res) => {
  res.json({
    message: 'Hello, Cross-Origin World!',
  });
});

app.listen(8090, () => {
  // 8090 포트로 실행하지만 엘리스 실습 환경에서 서버가 8190 포트로 실행중입니다.
  console.log('Server is running on 8190 PORT');
});

요청 유형별 CORS 흐름

요청 종류설명예시
SimpleGET, POST 등 단순한 요청뉴스 기사 요청
Preflight사전 OPTIONS 요청을 보내 확인PUT, DELETE 요청
Credentialed쿠키 포함 요청로그인 유지 상태

9️⃣ 캡슐화 & 역캡슐화 – 데이터는 어떻게 이동하나?

📦 캡슐화

데이터가 전송되기 전에, 각 계층마다 **필요한 정보(헤더)**가 덧붙여진다.

계층덧붙이는 정보예시
응용 계층HTTP 헤더요청 메서드, 경로
전송 계층TCP 헤더포트 번호, 순서 정보
인터넷 계층IP 헤더출발지/도착지 IP
링크 계층MAC 주소물리 주소
물리 계층0과 1 신호전기적 신호 변환

💡 비유:
택배 포장: 내용물 → 상자 → 스티커 → 송장 → 봉인 → 출발!

🔄 역캡슐화

  • 받은 데이터는 각 계층마다 헤더를 제거하며 해석된다.

✅ 최종 정리

개념요약
TCP/IP인터넷 통신을 위한 프로토콜 집합
IP데이터를 어디로 보낼지 결정하는 주소
TCP데이터를 안전하게, 순서대로 보내는 시스템
HTTP브라우저 ↔ 서버 간 웹페이지 전송 방법
CORS브라우저의 보안 제한을 완화하는 서버 설정
상태 코드서버의 상태를 숫자로 표현
캡슐화데이터를 포장하는 과정
프로토콜장치 간 대화 규칙

0
Subscribe to my newsletter

Read articles from KiwiChip directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

KiwiChip
KiwiChip

I'm currently learning Python and studying RAG (Retrieval-Augmented Generation).