웹 서비스를 운영하다 보면 이런 상황을 자주 만난다.
- “curl로는 되는데 브라우저에서는 안 됩니다”
- “OPTIONS 요청이 왜 이렇게 많이 오죠?”
- “배포했는데 데이터가 바뀌지 않습니다”
- “로그인은 성공했는데 다음 요청에서 세션이 사라집니다”
이 문제들의 출발점은 대부분 Ajax 요청의 동작 구조에 있다.
이 글에서는 Ajax의 개념이 아니라,
서비스 운영과 장애 대응에 필요한 핵심 동작 흐름을 정리한다.
1. Ajax 요청은 어디서 시작되는가?
Ajax는 단순히 말하면:
브라우저 안의 JavaScript가 서버로 HTTP 요청을 보내는 방식
예:
fetch("/api/order")
중요한 점은:
- 요청은 서버가 아니라 브라우저에서 시작된다
- 브라우저는 일반 HTTP 클라이언트와 다르게 강한 보안 정책을 적용한다
2. Ajax 요청의 실제 흐름
실제 요청은 다음 단계를 거친다:
브라우저(JS 실행)
↓fetch / axios
↓
브라우저 보안 검사 (CORS 등)
↓
(필요 시) PreflightOPTIONS
↓
DNS 조회
↓
TCP 연결 / TLS 협상
↓Load Balancer / Ingress / WAF
↓
애플리케이션 서버
↓
응답
↓
브라우저 캐시 / 쿠키 처리
이 중 어느 단계에서든 문제가 발생할 수 있다.
3. fetch는 무엇을 하는가?
fetch는 브라우저가 HTTP 요청을 만들도록 하는 API다.
요청 정보는 두 곳에서 만들어진다.
1) 코드에서 지정
- URL
- Method
- Headers
- Body
2) 브라우저가 자동으로 추가
- Origin
- Referer
- Cookie (조건 충족 시)
- User-Agent
이 차이 때문에 이런 현상이 발생한다:
curl은 되는데 브라우저는 안 된다
curl은 브라우저 보안 정책을 따르지 않기 때문이다.
4. Preflight OPTIONS는 무엇인가?
Preflight는:
브라우저가 실제 요청을 보내기 전에 “이 요청을 보내도 되는지” 확인하는 절차
특정 조건에서 브라우저는 먼저:
OPTIONS /api/order
요청을 보낸다.
서버가 적절한 CORS 헤더로 응답하지 않으면
실제 요청은 아예 전송되지 않는다.
일반 OPTIONS와의 차이
구분 일반 OPTIONS Preflight OPTIONS
| 목적 | 메서드 확인 | CORS 허용 확인 |
| 발생 주체 | 클라이언트 | 브라우저 자동 |
| 운영 영향 | 낮음 | 매우 큼 |
5. CORS는 왜 발생하는가?
CORS는 서버 기능이 아니다.
브라우저 보안 정책이다.
출처(origin)가 다르면 기본적으로 차단된다:
frontend.com → api.backend.com
이 경우 서버가 다음과 같은 헤더를 내려줘야 한다:
Access-Control-Allow-Origin
curl은 이 정책을 적용하지 않는다.
그래서 curl은 되는데 브라우저는 안 되는 상황이 발생한다.
6. DNS는 누가 조회하는가?
DNS 조회는:
요청을 보내는 쪽(브라우저/OS)이 수행한다.
흐름:
브라우저
↓
OS 네트워크 스택
↓
DNS Resolver
이 때문에 발생하는 문제:
- 특정 PC에서만 접속 불가
- VPN 환경에서만 실패
- 내부 DNS 설정 문제
7. 자주 발생하는 운영 이슈 3가지
1) curl은 되는데 브라우저는 안 됨
주요 원인:
- CORS
- Mixed Content (HTTPS → HTTP 호출)
- 쿠키 정책(SameSite)
2) OPTIONS 403
주요 원인:
- 인증 필터가 OPTIONS까지 검사
- Ingress에서 OPTIONS 미허용
- CORS 헤더 미설정
3) 로그인 후 쿠키가 안 붙음
주요 원인:
- SameSite=Lax/Strict
- Secure 설정 (HTTPS 필수)
- 도메인 불일치
- fetch에서 credentials 옵션 미설정
8. Ajax와 캐시
Ajax 응답도 캐시 대상이다.
개입 위치:
- 브라우저 캐시
- Service Worker
- CDN
- API Gateway 캐시
이 때문에:
배포했는데 화면/데이터가 안 바뀐다
같은 현상이 발생할 수 있다.
9. 운영자가 반드시 이해해야 할 질문
Ajax를 깊이 코딩할 필요는 없다.
하지만 아래 질문에 답할 수 있어야 한다:
- 요청은 어디에서 시작되는가?
- 브라우저는 어떤 보안 정책을 적용하는가?
- OPTIONS 요청은 왜 발생하는가?
- 인증은 어디에서 검증되는가?
- DNS는 어디에서 해결되는가?
- 캐시는 어디에서 개입되는가?
마무리
Ajax는 단순한 프론트 기술이 아니다.
- CORS 정책
- 인증 구조
- TLS 설정
- 캐시 전략
- DNS 구성
과 직접 연결되어 있는 서비스 운영의 핵심 지점이다.
Ajax의 네트워크 흐름을 이해하면
브라우저 기반 장애의 대부분을 구조적으로 설명할 수 있다.
'WEB,WAS' 카테고리의 다른 글
| Chrome 디스크 캐시 정리 방법 — 강력 새로고침으로 안 될 때 (0) | 2026.02.12 |
|---|---|
| 웹에서 사용하는 캐시 총정리 — 브라우저부터 서버까지 13가지 (0) | 2026.02.11 |
| curl은 되는데 브라우저 접속 안되는 경우- ERR_UNSAFE_PORT (0) | 2024.01.30 |
| Angular 버전 마이그레이션 (0) | 2023.10.17 |
| angular build (0) | 2023.10.12 |
댓글