티스토리 뷰

📌 3줄 요약
1. 업스트림은 원천(공급하는 쪽), 다운스트림은 받아서 쓰는 쪽입니다.
2. 분야마다 뜻이 달라 보이는 이유는 "무엇을 원천으로 보느냐"가 다르기 때문입니다.
3. 가장 헷갈리는 곳은 네트워크(방향으로 부름)와 프록시(뒷단 서버가 업스트림)입니다.

 

회의에서 이런 말이 동시에 나오면 머리가 복잡해집니다.

데이터팀: "업스트림 테이블이 깨져서 대시보드가 이상해요."
개발팀: "그 버그는 업스트림에 PR 올려서 이미 고쳐졌어요."
인프라팀: "Nginx upstream 서버 하나가 죽었습니다."
네트워크팀: "회선 업스트림 대역폭이 부족해요."

 

같은 단어인데 누구는 원천 테이블을, 누구는 오픈소스 원본 프로젝트를, 누구는 뒷단 서버를, 누구는 업로드 방향을 말하고 있습니다. 전부 맞는 말입니다. 다만 분야마다 가리키는 대상이 다를 뿐입니다.

이 글에서는 업스트림·다운스트림의 공통 개념을 먼저 잡고, 분야별로 의미가 어떻게 달라지는지, 어디서 가장 많이 헷갈리는지, 그리고 보안 관점에서 왜 중요한지를 정리했습니다.


🎯 업스트림 · 다운스트림 뜻

원래 뜻은 강의 상류(Upstream)와 하류(Downstream)입니다. IT에서는 "무언가가 흐를 때 앞쪽(공급)과 뒤쪽(소비)"을 가리킵니다.

 

구분 업스트림 (상류) 다운스트림 (하류)
한 줄 뜻 원천 · 공급하는 쪽 받아서 쓰는 쪽
흐름에서의 위치 앞쪽 뒤쪽
문제가 생기면 원인이 되는 쪽 영향을 받는 쪽
자주 하는 질문 "이건 어디서 왔지?" "이게 어디에 영향을 주지?"
강 비유 상류에서 오염되면 하류 전체가 오염됨
💡 외울 규칙은 하나입니다. "업스트림 = 원천(Origin) 쪽". 분야별 차이는 전부 "그 분야에서 무엇이 원천이냐"에서 생깁니다.

🧩 분야별 의미 차이 한눈에 보기

분야 흐르는 것 원천으로 보는 것 업스트림 다운스트림
데이터 파이프라인 데이터 데이터가 처음 생긴 곳 원천 DB, API, 로그 DW, 대시보드, ML 모델
Git 코드 원본 저장소 / 추적 대상 브랜치 원본 저장소, 원격 브랜치 내 Fork, 내 로컬 브랜치
오픈소스 · 리눅스 코드·패치 최초로 개발되는 프로젝트 Linux 커널, OpenSSL, Fedora RHEL, Ubuntu, 벤더 제품
네트워크 회선 트래픽 인터넷 코어(ISP) 방향 사용자 → 인터넷 (업로드) 인터넷 → 사용자 (다운로드)
프록시 · MSA 요청과 응답 응답(기능)을 공급하는 서버 뒷단 서버, 호출받는 서비스 클라이언트, 호출하는 서비스
산업 공급망 부품·제품 원자재와 기반 기술 소재, 장비, 부품 완제품, 유통, 서비스

 

① 데이터 파이프라인 — "데이터가 태어난 곳"

데이터가 처음 만들어지는 곳이 업스트림입니다. 주문 DB에서 DW로, DW에서 매출 대시보드로 흐르면 주문 DB가 가장 위, 대시보드가 가장 아래입니다.

상황 표현
원천 API가 빈 값을 보냄 업스트림 장애
그 결과 대시보드 숫자가 틀림 다운스트림 영향
어디가 원인인지 거슬러 올라감 업스트림 리니지 추적
어떤 보고서가 영향받는지 확인 다운스트림 영향도 분석

 

② Git — "원본 저장소" 또는 "추적 대상"

Git에서는 두 가지 뜻으로 씁니다. 다른 사람의 저장소를 Fork했다면 원본 저장소를 보통 upstream이라는 이름의 원격으로 등록합니다. 또 로컬 브랜치가 따라가는 원격 브랜치도 upstream(추적 브랜치)이라고 부릅니다.

# Fork한 저장소에 원본 저장소를 upstream으로 등록
git remote add upstream https://github.com/원본계정/프로젝트.git
git fetch upstream

# 로컬 브랜치가 추적할 원격 브랜치(upstream) 지정
git push --set-upstream origin feature-a

 

③ 오픈소스 · 리눅스 배포판 — "코드를 처음 만드는 곳"

오픈소스 원본 프로젝트가 업스트림, 그걸 가져다 패키징하는 배포판과 벤더 제품이 다운스트림입니다. "업스트림에 반영됐다"는 말은 원본 프로젝트에 수정이 들어갔다는 뜻이지, 우리 서버에 적용됐다는 뜻이 아닙니다.

구분 과거 (~2020) 현재 (2021~)
흐름 Fedora → RHEL → CentOS Fedora → CentOS Stream → RHEL → Rocky · Alma
CentOS 위치 RHEL의 다운스트림 (재빌드판) CentOS Stream은 RHEL의 업스트림 (개발 선행판)
의미 RHEL과 사실상 같은 안정판 RHEL 다음 버전이 먼저 들어오는 곳
⚠️ "CentOS 쓰니까 RHEL이랑 같다"는 말은 이제 맞지 않습니다. CentOS Stream은 RHEL보다 앞서 가는 업스트림이라 성격이 완전히 다릅니다.

 

④ 네트워크 회선 — 유일하게 "방향"으로 부르는 분야

네트워크에서는 인터넷 코어(ISP) 쪽을 상류로 봅니다. 그래서 사용자가 인터넷으로 보내는 방향(업로드)이 업스트림, 인터넷에서 사용자에게 오는 방향(다운로드)이 다운스트림입니다.

표현 의미 예시
업스트림 대역폭 업로드 속도 화상회의 송출, 백업 전송, CCTV 영상 업로드
다운스트림 대역폭 다운로드 속도 동영상 시청, 파일 내려받기
비대칭 회선 업·다운 속도가 다름 가정용 인터넷 "다운 1G / 업 100M"
💡 데이터 파이프라인 감각으로 보면 "사용자가 데이터를 만드니 사용자가 원천 아닌가?" 싶지만, 네트워크는 데이터를 누가 만들었는지가 아니라 코어를 향하는 방향으로 부릅니다. 가장 많이 헷갈리는 지점입니다.

 

⑤ 프록시 · MSA — "응답을 공급하는 뒷단"

Nginx, HAProxy, Envoy 같은 프록시에서 upstream은 요청을 넘겨받아 실제로 처리하는 뒷단 서버입니다. 요청을 보내는 클라이언트는 downstream입니다. 기능(응답)을 공급하는 쪽이 원천이라는 논리입니다.

# Nginx: 뒷단 WAS 서버 묶음을 upstream으로 정의
upstream was_servers {
    server 10.0.1.11:8080;
    server 10.0.1.12:8080;
}
server {
    location / {
        proxy_pass http://was_servers;   # 요청을 upstream으로 전달
    }
}

MSA도 같은 논리입니다. 주문 서비스가 결제 서비스를 호출하면, 결제 서비스가 업스트림(의존 대상), 주문 서비스가 다운스트림입니다. 결제 장애가 주문 실패로 번지는 구조입니다.

 

⑥ 산업 공급망 — "원자재와 기반 기술"

IT 산업을 이야기할 때는 가치사슬의 앞단이 업스트림입니다. 반도체라면 소재·장비가 업스트림, 칩 설계·생산이 중간, 스마트폰·클라우드 서비스가 다운스트림입니다. 뉴스에서 "업스트림 기업 수혜"라고 하면 보통 소재·장비 쪽을 말합니다.


⚠️ 가장 헷갈리는 두 가지

헷갈리는 점 왜 헷갈리나 정리
기준점에 따라 바뀜 DW는 원천 DB 기준으로는 다운스트림, 대시보드 기준으로는 업스트림 업스트림은 절대 위치가 아니라 상대 위치. "누구 기준"인지 같이 말해야 함
프록시 upstream 네트워크처럼 "업로드 방향"으로 생각하면 반대로 이해하게 됨 프록시는 방향이 아니라 역할. 응답을 공급하는 뒷단 서버가 upstream
네트워크 upstream 사용자가 데이터를 만드는데 왜 사용자 쪽이 다운스트림? 네트워크는 코어를 향하는 방향이 업스트림
"업스트림에 반영됨" 수정이 끝났다는 말로 오해 원본 프로젝트에만 반영. 배포판·우리 서버 적용은 별개

🔐 보안 관점에서 왜 중요할까?

 

 

보안에서 업스트림·다운스트림 구분은 곧 공급망 위험과 패치 판단의 문제입니다.

이슈 업스트림에서 벌어지는 일 다운스트림(우리)에 미치는 영향
공급망 공격 오픈소스·빌드 도구에 악성 코드 삽입 그 구성요소를 쓰는 모든 제품이 감염 (예: XZ Utils 백도어, 2024)
광범위 취약점 라이브러리 하나에 치명적 취약점 수많은 벤더 제품으로 번짐 (예: Log4Shell, 2021)
패치 시차 업스트림에서 먼저 수정 배포판 → 벤더 → 우리 적용까지 단계마다 지연
백포트 최신 버전 대신 옛 버전에 보안 수정만 이식 버전 문자열만 보는 스캐너가 오탐을 낼 수 있음
서비스 의존 업스트림 API·SaaS 장애 우리 서비스 기능 중단, 가용성 저하

 

점검할 때 이렇게 구분하세요

확인 항목 업스트림 기준 다운스트림(우리) 기준 체크
취약점 수정 여부 원본 프로젝트의 수정 버전 배포판 보안 권고(RHSA, USN 등)의 수정 패키지 버전 ☐
적용 여부 — 서버에 실제 설치된 패키지 버전 ☐
구성요소 파악 우리가 쓰는 오픈소스 목록 SBOM으로 제품별 포함 여부 관리 ☐
벤더 제품 내장된 오픈소스 버전 벤더의 공식 패치·권고 확인 ☐
외부 의존 서비스 API·SaaS 제공사 상태 장애 시 우회·차단 절차 ☐

🚫 이런 판단은 하지 마세요

① "업스트림에서 고쳤대요, 그럼 조치 완료죠?"

원본 프로젝트에 수정이 들어갔을 뿐입니다. 배포판 패키지가 나왔는지, 우리 서버에 설치됐는지까지 확인해야 조치 완료입니다.

② "버전이 낮으니 무조건 취약"

RHEL 같은 배포판은 업스트림 최신 버전으로 올리지 않고 보안 수정만 백포트합니다. 배포판 보안 권고 기준으로 판단해야 합니다.

③ "upstream 서버 = 외부 인터넷 서버"

프록시 설정의 upstream은 대부분 우리 내부 뒷단 서버입니다. 네트워크 방향과 섞어서 이해하면 설정을 반대로 읽게 됩니다.

④ "그 테이블은 업스트림이에요" (기준 없이)

업스트림은 상대적인 말입니다. "대시보드 기준 업스트림"처럼 기준을 붙여야 오해가 없습니다.


💬 자주 나오는 질문

Q. 업스트림이 더 중요한 쪽인가요?

중요도가 아니라 위치의 차이입니다. 다만 업스트림 문제는 아래로 번지기 때문에, 업스트림일수록 영향 범위가 넓다는 점은 기억해 두면 좋습니다.

Q. 미드스트림(Midstream)이라는 말도 있나요?

있습니다. 중간 단계를 가리킬 때 씁니다. 데이터 파이프라인의 변환 단계, 공급망의 부품·가공 단계가 여기에 해당합니다.

Q. Git에서 origin과 upstream은 뭐가 다른가요?

관례상 origin은 내가 Fork한 내 저장소, upstream은 원본 저장소입니다. 이름은 관례일 뿐 강제는 아닙니다.

Q. 영어 문서를 읽을 때 빠르게 구분하는 방법은요?

문장에 무엇이 흐르는지를 먼저 찾으세요. 데이터면 원천, 코드면 원본 프로젝트, 트래픽이면 코어 방향, 요청이면 뒷단 서버입니다.


🎉 정리

  1. 업스트림 = 원천(공급하는 쪽), 다운스트림 = 받아서 쓰는 쪽이다.
  2. 분야별 차이는 "무엇을 원천으로 보느냐"에서 생긴다.
  3. 데이터는 태어난 곳, Git·오픈소스는 원본 프로젝트, 공급망은 소재·장비가 업스트림이다.
  4. 네트워크는 유일하게 방향으로 부른다. 업로드 = 업스트림.
  5. 프록시·MSA는 응답을 공급하는 뒷단 서버·호출받는 서비스가 업스트림이다.
  6. 업스트림은 상대적인 말이다. 항상 "누구 기준"인지 붙이자.
  7. 보안에서는 "업스트림 수정 ≠ 우리 조치 완료". 배포판·설치 버전까지 확인해야 한다.

다음에 회의에서 "업스트림"이라는 말이 나오면, "지금 흐르는 게 뭐지?" 한 가지만 떠올려 보세요. 그 답이 나오면 업스트림이 어디인지도 자연스럽게 보입니다.


🔗 참고 자료