업스트림(Upstream)과 다운스트림(Downstream)
1. 기본 정의 : 흐르는 강물(Stream)
이 용어는 데이터와 요청의 흐름을 강물에 비유한 것
- 업스트림 (Upstream, 상류): 데이터(물)의 원천이 되는 곳
- 다운스트림 (Downstream, 하류): 데이터(물)를 받아서 소비하는 곳
흐름의 법칙
- 데이터(응답): 상류 → 하류 (위에서 아래로 흐름)
- 요청(Request): 하류 → 상류 (거슬러 올라감)
2. 핵심 개념 : “위치는 상대적이다”
업스트림과 다운스트림은 절대적인 역할이 고정된 것이 아님
“누구를 기준(주체)으로 보느냐"에 따라 달라지는 상대적인 개념
전체 흐름이 다음과 같을 때를 가정
클라이언트 → ALB(로드밸런서) → 서버(Core-System) → Cafe24(외부 API)
각 주체(나)의 시점별 차이
1) ALB(로드밸런서)의 입장
- 나의 시선: “나는 서버한테 요청을 보내고 답을 받으니까, 내 윗물(Upstream)은 서버야”
- 특징: ALB는 서버 뒤에 Cafe24가 있는지 없는지 알 필요가 없으며, 오직 바로 위의 서버만 봄
2) 서버(Core-System)의 입장
- 나의 시선: “나는 Cafe24한테 요청을 보내고 답을 받으니까, 내 윗물(Upstream)은 Cafe24야”
- 특징: 내 뒤에 ALB가 있는지, 클라이언트가 바로 붙었는지는 중요하지 않음. 나는 데이터를 주는 Cafe24만 봄
3. 상황별 관계 요약표
내가 어떤 위치에서 개발하거나 설정을 만지느냐에 따라 업스트림과 다운스트림은 계속 변함
| 흐름(상황) | 기준 (나) | 나의 업스트림 (데이터 원천) | 나의 다운스트림 (데이터 소비) |
|---|---|---|---|
| 기본 웹 구조 | ALB (로드밸런서) | 백엔드 서버 (WAS) | 클라이언트 (브라우저) |
| 외부 연동 | 백엔드 서버 | Cafe24 API 서버 | ALB (혹은 클라이언트) |
| DB 조회 | 백엔드 서버 | 데이터베이스 (DB) | ALB (혹은 클라이언트) |
4. 결론 및 용어 사용 팁
- 기술적 정의: “나와 직접 연결되어 데이터를 건네주는 바로 윗 단계의 대상“이 나의 업스트림 (최초의 원천이 어디인지는 중요하지 않음)
- 리퀘스트의 방향:
- 서버 → Cafe24 요청: 업스트림 리퀘스트(Upstream Request)
- Cafe24 → 서버 데이터 응답: 업스트림 응답(Upstream Response)
- 에러 해석:
Upstream Timeout에러가 발생했다면?- 의미: “내가 요청을 보낸 바로 윗 놈(Upstream)이 응답을 안 준다.”
- 조치: ALB 로그에 이 에러가 있다면, ALB의 윗물인 백엔드 서버를 점검