🔗 API, 서버, 프록시, JSON, CORS — 웹 통신의 다섯 기둥
1. API (Application Programming Interface)
API는 ‘애플리케이션 간의 대화 통로’다.
쉽게 말하면 프로그램이 프로그램에게 말을 거는 방법이다.
예를 들어, 네가 만든 웹페이지에서 날씨 정보를 가져오려면
‘기상청 서버의 데이터베이스’에 직접 접속할 수는 없겠지.
그 대신 “API”를 통해 정해진 형식으로 요청(request)을 보내면,
기상청 서버가 JSON이나 XML로 데이터를 응답(response)한다.
API는 규칙과 언어의 집합이다.
서로 다른 시스템이 안전하게, 예측 가능한 방식으로 소통하도록 만든다.
2. 서버(Server)
서버는 데이터를 저장하고 제공하는 주체다.
클라이언트(사용자, 브라우저)가 요청하면 응답을 돌려주는 **‘제공자’**의 입장에 있다.
웹 서버는 HTML, CSS, JS 같은 정적 콘텐츠를 제공하고,
WAS(Web Application Server)는 로그인·결제 같은 동적 처리를 담당한다.
한마디로 말하자면,
“서버는 정보를 돌려주는 뇌, 클라이언트는 그것을 보는 눈”이다.
3. 프록시(Proxy)
프록시는 **클라이언트와 서버 사이의 중계자(대리자)**다.
직접 연결하지 않고, 중간에서 대신 요청과 응답을 전달한다.
예를 들어 회사 네트워크에서 어떤 사이트가 차단되어 있다면,
프록시 서버를 거쳐 접속하면 우회가 가능하다.
또한, 기업은 이 기능을 이용해 보안 강화, 캐싱, 로드 밸런싱, 접근 통제를 수행한다.
포워드 프록시 (Forward Proxy)
- 사용자의 익명성 보호와 콘텐츠 접근 제어를 담당.
- 클라이언트 쪽에 존재한다.
- 예: 회사·학교 네트워크의 내부 보안용 프록시.
리버스 프록시 (Reverse Proxy)
- 서버 쪽에 위치하며 서버의 IP를 숨기고 트래픽 분산을 담당.
- 예: NGINX, Cloudflare 같은 CDN(콘텐츠 전송 네트워크).
프록시와 VPN의 차이:
- VPN은 네트워크 계층(L3)에서 동작해 전체 트래픽을 암호화.
- 프록시는 애플리케이션 계층(L7)에서 HTTP, FTP 요청만 처리.
4. JSON (JavaScript Object Notation)
JSON은 서버와 클라이언트가 데이터를 주고받을 때 쓰는 표준 데이터 형식이다.
문자열 기반이지만 구조는 **자바스크립트 객체(Object)**와 비슷하다.
예시
{ "user": "김또깡", "age": 13, "skills": ["HTML", "CSS", "JavaScript"] }
가볍고 단순하며,
대부분의 프로그래밍 언어에서 쉽게 파싱(parse, 해석) 가능하다.
즉, 사람도 읽고, 기계도 읽는 데이터 언어다.
5. CORS 정책 (Cross-Origin Resource Sharing)
CORS는 보안 장치다.
“다른 도메인(origin)에서 오는 요청을 허용할지” 결정한다.
예를 들어,
네가 example.com에서 만든 웹페이지가
api.weather.com의 데이터를 가져오려 하면 브라우저는 이렇게 묻는다.
“그 도메인에서 우리 사이트 요청을 허용했나?”
허용하지 않았다면 브라우저가 요청을 차단한다.
CORS는 보안을 위한 방화벽이자 규칙이다.
서버가 응답 헤더에
Access-Control-Allow-Origin: *
을 포함하면 모든 외부 요청을 허용한다.
특정 사이트만 허용하고 싶다면
Access-Control-Allow-Origin: https://mydomain.com
처럼 설정한다.
📚 정리
- API: 프로그램끼리 통신하는 규칙과 약속
- 서버: 데이터를 저장하고 제공하는 주체
- 프록시: 중간 대리인, 보안·캐싱·우회 기능 담당
- JSON: 경량 데이터 형식 (사람과 기계 모두 읽기 쉬움)
- CORS: 다른 출처 간 요청을 제한하는 보안 정책
🧠 단어장
응용프로그램 인터페이스(應用程序接口) / Application Programming Interface
- 응(應: 응하다), 용(用: 쓰다), 프(프로그램), 그램(gram: 기록·쓰기)
- 어원: ad (toward) + plicare (fold) → “서로 엮어 연결하다”
- 의미 확장: 기능을 외부에 공개해 상호 작용 가능하게 하는 통로.
서버(Server) / Server
- serve(섬기다, 제공하다) + -er(행위자)
- “서비스를 제공하는 사람(또는 기계)”의 의미.
대리(代理) / Proxy
- 대(代: 대신하다), 리(理: 다스리다)
- 영어 proxy는 pro (앞에서, 대신) + procusare (대표하다)에서 유래.
- 의미 확장: 요청을 대신 수행하는 중개자.
자료교환형식(資料交換形式) / JSON (JavaScript Object Notation)
- 자(資: 재물, 자원), 료(料: 헤아릴, 계산할), 교(交: 사귀다, 교류하다), 환(換: 바꾸다)
- JavaScript의 object 구조를 본뜬 “데이터 표현 형식”.
교차출처자원공유(交叉出處資源共有) / CORS (Cross-Origin Resource Sharing)
- 교(交: 섞이다), 차(叉: 갈라지다), 출(出: 나가다), 처(處: 곳), 자(資: 자원), 원(源: 근원), 공(共: 함께), 유(有: 있다)
- origin (시작점) + share (나누다)
- 의미: 다른 출처(origin) 간 자원을 공유하는 보안 규칙.