인터넷을 매개로 컴퓨터와 컴퓨터가 정보를 주고받는 모든 형태의 서비스를 의미.
단순히 웹 브라우저(크롬, 사파리 등)로 접속하는 사이트뿐만 아니라,
특정 기능을 제공하는 API나 설치형 애플리케이션까지 포함하는 넓은 개념.
인터넷이라는 거대한 네트워크망 위에는 웹(HTTP) 외에도
목적에 따른 다양한 통신 규칙(프로토콜)이 존재
✉️ 이메일 서비스
이메일을 주고받기 위해 설계된 통신 방식
📁 파일 전송 서비스
대용량 파일을 안정적으로 전송하기 위한 방식
🎮 온라인 게임
리그 오브 레전드나 배틀그라운드 같은 게임을 할 때,
내가 쏜 총알이 적에게 맞았는지가 실시간으로, 아주 빠르게 반영되어야 한다.
이렇듯 실시간성이 중요한 게임 환경에서는
데이터의 완결성보다 속도가 우선시되기도 한다.
📞 실시간 음성, 영상 통신
줌(Zoom)이나 페이스타임 같은 서비스. 이것 역시 끊김 없는 실시간성이 중요.
웹의 동작은 딱 이 한 문장으로 요약할 수 있다.
"클라이언트가 요청(Request)하고, 서버가 응답(Response)한다."

[그림 1] 웹 서비스의 기본 구조
사용자(User): 서비스를 이용하는 주체인 사람
클라이언트(Client):
인터넷(Internet):
서버(Server):
데이터베이스(Database, DB):
요청(Request):
응답(Response):
UI(User Interface):
API(Application Programming Interface):
목적
한계점
해결책
역할이 명확히 분리된다(전문성 강화)
요청과 응답의 방향이 정해져 있다
여러 클라이언트가 하나의 서버를 사용할 수 있다
서버는 항상 대기하며 요청을 처리한다
서버에서 데이터와 기능을 중앙에서 관리한다(관리 효율성)
역할은 통신 상황에 따라 달라질 수 있다
이 클라이언트와 서버가 서로 통신할 때 사용하는 '공용어'
HTTP (HyperText Transfer Protocol)는
텍스트나 이미지 같은 정보(HyperText)를 전송하기 위한 규칙.
클라이언트가 "이거 줘!"라고 요청하면, 서버가 "여기 있어!"라고 응답하는
기본적인 통신 규칙인 셈.
# 응답의 header만 출력
curl -I (url)
# html 형식도 띄워줌
curl (url)
# 요청부터 응답까지의 모든 내용이 출력
curl (url) -v
curl: HTTP 요청을 보내기 위한 커맨드라인 도구🏗️ 크게 세 부분으로 구성된다.
시작 줄 (Start Line):
헤더 (Header):
본문 (Body):
요청과 응답은 특정한 형식의 메세지로 이루어진다.

[캡쳐 1] 메세지 출력 예시
클라이언트의 요청에 대해 서버가 처리 결과를 숫자로 알려주는 응답 코드
"요청하신 결과는 이렇습니다!"라는 요약인 셈.
2xx (성공): "잘 처리됐어요!"
3xx (리다이렉션): "주소가 바뀌었어요, 이쪽으로 가주세요!"
4xx (클라이언트 오류): "당신의 요청에 문제가 있어요."
5xx (서버 오류): "미안해요, 제 서버에 문제가 생겼어요."
현재 우리가 사용하는 거의 모든 웹 서비스는 HTTP(혹은 보안이 강화된 HTTPS)를 기반으로 동작하며,
이를 통해 전 세계의 웹 자원이 연결
1) 사용자가 UI 조작
2) 클라이언트가 프로그램이 사용자의 행동을 의도에 맞는 요청으로 해석
3) 클라이언트는 해당 요청을 HTTP 요청 메시지로 만들어 서버에 전송
4) 서버는 요청을 처리하고, HTTP 응답 메시지를 반환
5) 클라이언트는 응답을 받아 화면이나 기능으로 반영
CRUD: 데이터에 대한 대표적인 기본 동작 4가지(개념적 분류)
클라이언트가 서버에 요청을 하려면 아래 두 가지를 명확히 전달
행위는 HTTP Method로 표현(실제 수단)
자원은 URL(Uniform Resource Locator) 형태로 전달
http://example.com/users → 사용자 목록 자원http://example.com/users/1 → ID가 1인 사용자 자원http://example.com/posts/10/comments → 게시글 10번의 댓글 자원http://example.com/files/report.pdf → 파일 자원그래서 실제로 어떻게 표현하는가?
GET https://example.com/usersPOST https://example.com/posts/10/commentsDELETE https://example.com/orders/1231) 같은 자원이어도 메서드에 따라 전혀 다른 의미의 요청이 된다
GET /users → 사용자 목록 조회POST /users → 사용자 생성2) 행위는 URL이 아니라 메서드로 표현(매우 중요!!!)
/createUser ❌POST /users ⭕️/deleteOrder ❌DELETE /orders/123 ⭕️3) 자원은 보통 복수형 명사로 표현(개별 자원은 보통 ID로 구분)
GET /users → 사용자 목록(집합)GET /users/1 → 사용자 한 명4) 기본 CRUD를 벗어나는 예외의 경우도 존재
POST /orders/123/cancel → 주문 취소POST /auth/login → 로그인POST /payments/1/confirm → 결제 확정웹의 기본 원칙을 따르는 API 설계 방식
GET /getUsersGET /user-123POST /users/createPOST /deleteOrders/search?q=apple처럼 URL에 붙여서 전달하는 데이터.
"search(검색)를 하는데, 검색어(q)는 apple이야!"라고 전달하는 방식.
주로 조회 조건이나 옵션을 표현할 때 사용한다.
경로(path) 뒤에 ?key=value 형태로 추가하면 된다.
HTTP 메세지의 '본문(Body)'에 데이터를 담아 서버가 그대로 처리하도록 전달.
POST 메서드와 함께 주로 쓴다.
HTTP 요청은
[메서드 + 자원(URL) + 부가 정보(헤더) + 실제 데이터(본문)]의 조합으로 이루어진다는 것.
HTTP는 기본적으로 암호화가 되지 않는다.
아이디, 비밀번호 같은 민감한 정보가 그대로 노출될 위험이 있기 때문에
HTTPS가 필요해진다.
HTTPS는 HTTP에 'Security(보안)'를 더한 것.
HTTP가 평문으로 데이터를 주고받는다면,
HTTPS는 그 위에 암호화라는 옷을 입혀 안전하게 통신한다.
대칭키 암호화(Symmetric Encryption):
비대칭키 암호화(Asymmetric Encryption):
HTTPS는 처음에 이 대칭키와 비대칭키를 절묘하게 섞어서,
'TLS 핸드셰이크'라는 악수 과정을 거친다.
TLS 핸드셰이크가 끝나면,
클라이언트와 서버는 서로를 신뢰할 수 있고,
데이터를 안전하게 암호화해서 주고받을 수 있다.

[그림 2] 비유로 이해해보는 TLS 핸드셰이크 과정

[그림 3] HTTP vs. HTTPS
1) 브라우저 → 서버 접속 요청
2) 서버 → 인증서(공개키 포함) 전달
3) 브라우저 → 인증서 신뢰 여부 확인(CA)
4) 브라우저 → 대칭키를 공개키로 암호화해서 전달
5) 서버 → 비밀키로 복호화하여 대칭키 획득
6) 이후 통신 → 대칭키로 빠르게 암호화
keep-alive는 HTTPS에서 처음 한 번 맺은 연결을 바로 끊지 않고,
여러 개의 요청을 보낼 수 있게 해주는 기능.
'프론트엔드'는 사용자가 HTTP를 모르는 상태에서도 서비스가 동작하게 해주는 프로그램이다.
우리가 직접 보고 만지는 모든 화면을 만드는 일이라고 볼 수 있다.
'클라이언트'는 브라우저 그 자체라면, '프론트엔드'는 브라우저 위에서 돌아가는 화면과 로직.
프론트엔드는 클라이언트의 핵심 구성 요소인 셈.
1) 사용자가 회원가입 화면(UI)에서 정보를 입력(이메일, 비밀번호 등)
2) 프론트엔드가 입력값을 모아 회원가입 요청(HTTP 요청)을 서버로 전송
3) 백엔드 서버가 요청을 받아 입력값을 검증(형식, 중복 이메일 여부 등)
4) 문제가 없다면 비밀번호를 암호화하고 데이터베이스에 사용자 정보를 저장
5) 저장 결과를 바탕으로 성공 또는 실패 응답을 생성
'백엔드'는 눈에 보이지 않지만, 서버 뒷단에서 데이터를 처리하고 관리하는 핵심적인 부분
역할
기술 스택
REST API의 설계와 일관성은 백엔드가 책임지고, 프론트엔드는 그 계약을 따른다.
서버는 데이터를 직접 가지고 있기보다, 전문적인 데이터 저장소인 데이터베이스를 이용.
서버가 데이터베이스에 요청해서 데이터를 가져오거나 저장.
SQLite: 파일 기반의 경량 관계형 데이터베이스
DB Browser for SQLite: SQLite 데이터베이스 파일을 GUI로 열어보고 수정할 수 있는 도구
여러 컴퓨터가 서로 연결되어 데이터를 주고받을 수 있는 구조
전 세계 모든 네트워크가 연결된 하나의 거대한 네트워크
인터넷의 핵심은 딱 하나
👉 “데이터를 보내고 받는 것”
데이터를 보내려면 반드시 알아야 하는 두 가지가 있다.
📦 비유: 편지 보내기
편지를 보내려면?
이 두 정보가 필요하다.
👉 인터넷도 완전히 동일하다
| 필요 요소 | 의미 |
|---|---|
| IP 주소 | 어디로 보낼지 |
| Port 번호 | 누구에게 보낼지 |
IP 주소는 네트워크 상에서 컴퓨터를 식별하는 주소다.
📌 역할
Port는 한 컴퓨터 안에서 실행 중인 프로그램을 구분하는 번호다.
📌 자주 사용되는 포트
| 포트 | 의미 |
|---|---|
| 80 | HTTP |
| 443 | HTTPS |
🚨 핵심 포인트
도메인 이름을 IP 주소로 변환하는 시스템이다.
💡 왜 필요할까?
IP 주소는 기억하기 어려움
→ 사람이 이해하기 쉬운 이름 사용
(ex. google.com → 142.250.xxx.xxx)
비유: 전화번호부
1) google.com 입력
2) DNS에 "IP 뭐야?" 요청
3) IP 주소 응답
4) 해당 IP + Port(443)로 요청
👉 도메인 → DNS → IP → 서버 연결