같은 리스트를 탄생 목적 / 실사용 두 줄로 분리해서 정리한다. (★ 표시는 둘이 크게 갈라진 케이스 — 즉 “원래 그러려고 만든 게 아닌데 더 유명해진” 기술)
1. 프로그래밍 언어
- C (1972, Dennis Ritchie @ Bell Labs)
- 탄생: Unix를 다른 컴퓨터로 이식하기 위한 OS 기술용 언어
- 실사용: OS, 임베디드, 다른 언어의 런타임/확장
- Java (1995, James Gosling @ Sun) ★
- 탄생: 셋톱박스/가전제품용 임베디드 언어 (Project Oak). 인터랙티브 TV 시장 노림
- 실사용: 엔터프라이즈 백엔드, Android
- Python (1991, Guido van Rossum)
- 탄생: ABC 언어 후속. CWI의 Amoeba OS 자동화용 스크립트 + 가독성 실험
- 실사용: 웹 백엔드, 데이터/ML, DevOps
- Ruby (1995, 마츠모토 유키히로)
- 탄생: Perl보다 OO스럽고 Smalltalk보다 실용적인 스크립트 언어. “프로그래머 행복”
- 실사용: Rails 백엔드, DevOps (Chef/Puppet)
- PHP (1995, Rasmus Lerdorf) ★
- 탄생: 자기 개인 홈페이지에 방문자 카운터 같은 거 넣을 Perl/CGI 스크립트 모음
- 실사용: WordPress, 전 세계 웹 70%
- Go (2009, Google)
- 탄생: Google 내부 C++ 빌드 너무 느림 + 동시성 어려움. 시스템 SW를 단순하게
- 실사용: 클라우드 인프라(Docker, k8s, Terraform), 마이크로서비스
- Rust (2010, Graydon Hoare @ Mozilla) ★
- 탄생: Mozilla 차세대 브라우저 엔진(Servo)의 메모리 안전성 위해
- 실사용: 시스템 SW, 블록체인, CLI 도구, 일부 백엔드
- Node.js (2009, Ryan Dahl)
- 탄생: Apache가 “오래 열린 연결”(파일 업로드 진행률 같은) 다루기 어려움. V8 위에 이벤트 기반 IO 서버
- 실사용: 웹 백엔드, 빌드 도구, Electron
- Kotlin (2011, JetBrains) ★
- 탄생: JetBrains가 자기 IDE를 Java로 짜다 boilerplate에 지쳐 만든 사내 언어
- 실사용: Android 공식 언어
- TypeScript (2012, Anders Hejlsberg @ MS)
- 탄생: MS 내부 대규모 JS 프로젝트(Bing/Office) 유지보수 위해 점진적 타입 추가
- 실사용: 모던 프론트엔드 + Node 백엔드 표준
2. 웹 프레임워크
- Ruby on Rails (2004, DHH)
- 탄생: 자기 회사 Basecamp 만들면서 추출
- 실사용: 스타트업 MVP, GitHub/Shopify 백엔드
- Django (2005, Lawrence Journal-World)
- 탄생: 캔자스 지역 신문사 내부 도구. 기사 사이트 빠르게 찍어내기
- 실사용: 콘텐츠 사이트(Instagram, Pinterest), 어드민
- Spring (2003, Rod Johnson)
- 탄생: 책 부록 코드. EJB 무거움을 IoC + DI로 대체
- 실사용: 엔터프라이즈 자바 백엔드 표준
- Express (2010, TJ Holowaychuk)
- 탄생: Ruby Sinatra에 영감받아 Node용 minimal 프레임워크
- 실사용: Node 라우팅 사실상 표준
- FastAPI (2018, Sebastián Ramírez)
- 탄생: Flask는 type hint 활용 못 하고 자동 문서 없음. Pydantic + Starlette 위에
- 실사용: ML 모델 서빙, 모던 Python API
3. RDB
- SQL (1974, IBM)
- 탄생: System R 프로젝트에서 Codd의 관계형 모델(1970)을 실제 쿼리 언어로 구현
- 실사용: 거의 모든 RDB의 표준
- PostgreSQL (1986, Stonebraker @ UC Berkeley)
- 탄생: 학술 프로젝트. 확장 가능한 DBMS 연구 (custom type, 객체-관계형 등)
- 실사용: 범용 OLTP, JSON/지리정보/벡터까지 다 처리
- MySQL (1995, MySQL AB)
- 탄생: 스웨덴 회사 TcX가 자기 데이터 도구에 mSQL 쓰려다 너무 느려서 직접 만듦
- 실사용: LAMP 스택, WordPress
- SQLite (2000, D. Richard Hipp) ★
- 탄생: 미 해군 구축함 통신 SW에 임베드할 의존성 없는 작은 DB
- 실사용: 모바일 앱, 브라우저, 데스크톱 SW의 로컬 저장소
4. NoSQL / 특수 DB
- MongoDB (2009, 10gen) ★
- 탄생: 원래 만들려던 PaaS의 백엔드 DB. PaaS는 망하고 DB만 살아남음
- 실사용: 스키마 자주 바뀌는 웹앱, 프로토타입
- Redis (2009, Salvatore Sanfilippo)
- 탄생: 자기 스타트업 실시간 분석이 MySQL로 너무 느려서. 메모리 자료구조 서버
- 실사용: 캐시, 세션, rate limiting, pub/sub, 큐
- Cassandra (2008, Facebook)
- 탄생: Facebook 받은편지함 검색의 폭주하는 쓰기를 받기 위해. Dynamo + Bigtable
- 실사용: 시계열, 로그, 대규모 쓰기 (Apple, Netflix, Discord)
- DynamoDB (2012, AWS)
- 탄생: Amazon 쇼핑카트가 RDB로 안 버틴 경험(2007 Dynamo 논문)을 매니지드화
- 실사용: AWS 환경 키-값, 서버리스
- Elasticsearch (2010, Shay Banon)
- 탄생: 자기 아내 요리 레시피 검색 앱 만들다 Lucene 분산화 필요
- 실사용: 로그 검색(ELK), 전문 검색
- Neo4j (2007)
- 탄생: 자산 관리 시스템에서 RDB JOIN으로 그래프 쿼리가 지옥
- 실사용: 추천, 사기 탐지, 지식 그래프
- pgvector / Pinecone / Weaviate
- 탄생: ML 임베딩 벡터 유사도 검색 (Pinecone은 원래 추천 시스템용)
- 실사용: LLM RAG 백엔드 ★ (LLM 붐 이후)
5. 메시지 큐 / 스트리밍
- RabbitMQ (2007)
- 탄생: AMQP(JPMorgan 주도 금융권 메시징 표준)의 레퍼런스 구현
- 실사용: 범용 작업 큐, 마이크로서비스 통신
- Kafka (2011, LinkedIn)
- 탄생: LinkedIn 사이트 활동 데이터를 여러 소비자에게 흘려보낼 통합 파이프라인
- 실사용: 이벤트 스트리밍 백본 (탄생 목적과 거의 동일)
- Celery (2009)
- 탄생: Django 앱의 백그라운드 작업(이메일 등) 비동기 처리
- 실사용: Python 비동기 작업 표준
6. API 통신
- REST (2000, Roy Fielding 박사논문)
- 탄생: 새 기술이 아님. 박사논문에서 HTTP/웹이 왜 잘 작동하는지 분석한 아키텍처 스타일
- 실사용: 웹 API 사실상 기본값
- GraphQL (2012 FB 내부, 2015 공개)
- 탄생: Facebook 모바일 앱 리뉴얼 시 REST의 over-fetching/under-fetching, endpoint 폭증
- 실사용: SPA·모바일 백엔드, BFF
- gRPC (2016, Google)
- 탄생: Google 내부 RPC(Stubby) 오픈소스화. 서비스 간 빠른 통신
- 실사용: 마이크로서비스 internal 통신, k8s 컴포넌트 간
- WebSocket (2011 표준)
- 탄생: HTTP polling/long-polling으로 양방향 흉내내는 게 비효율적
- 실사용: 채팅, 게임, 실시간 협업
- SSE (HTML5의 일부) ★
- 탄생: 서버→클라 단방향 push를 polling 없이 (2008년경 알림용으로 도입)
- 실사용: 지금은 거의 LLM 응답 스트리밍 때문에 부활
7. 인증 / 보안
- OAuth (1.0: 2007, 2.0: 2012)
- 탄생: Twitter API 등에서 3rd party 앱이 사용자 비밀번호 받는 게 위험. 권한 위임
- 실사용: “구글로 로그인”, API 권한 위임
- JWT (2015) ★
- 탄생: OpenID Connect용 ID 토큰 포맷. SAML(XML)을 JSON/URL-safe로 대체
- 실사용: stateless 백엔드 인증, API 토큰 (탄생 의도와 다름)
- SAML (2002)
- 탄생: 엔터프라이즈 환경 시스템 간 신원 정보 교환 표준 (XML)
- 실사용: 기업 SSO (Okta, Azure AD)
- TLS/SSL (SSL 1.0: 1995 Netscape)
- 탄생: Netscape가 e-commerce(신용카드) 위해 HTTP 트래픽 암호화
- 실사용: 모든 HTTPS, gRPC, 이메일, VPN
- bcrypt (1999, OpenBSD)
- 탄생: MD5/crypt가 너무 빨라 brute-force 취약 → 의도적으로 느린 비밀번호 해시
- 실사용: 비밀번호 저장 표준
8. 컨테이너 / 오케스트레이션
- Docker (2013) ★
- 탄생: dotCloud라는 PaaS 회사가 자기 플랫폼 내부에서 쓰던 LXC 래퍼를 오픈소스화
- 실사용: 개발 환경 일치, 배포 단위, k8s 실행 단위
- Kubernetes (2014, Google)
- 탄생: Google Borg(15년 운영) + Omega 경험 오픈소스화. AWS 대항마 의도도
- 실사용: 컨테이너 오케스트레이션 표준 (탄생 목적 그대로)
- Helm (2015)
- 탄생: k8s YAML이 환경별로 반복적이라 패키지 매니저 필요
- 실사용: k8s 앱 배포 패키지
- Istio (2017)
- 탄생: Lyft Envoy + Google service mesh. 통신 정책/관측을 코드 밖으로
- 실사용: 마이크로서비스 mTLS, 트래픽 관리
9. 웹 서버 / 프록시
- Apache (1995)
- 탄생: 망한 NCSA HTTPd의 사용자들이 패치 모음(“a patchy server”) 만든 게 기원
- 실사용: 전통적 웹 서버, PHP 호스팅
- Nginx (2004, Igor Sysoev)
- 탄생: 러시아 검색 사이트 Rambler의 C10K 문제 해결용 이벤트 기반 서버
- 실사용: 리버스 프록시, 정적 파일, 로드밸런서 (탄생 그대로 + 더 확장)
- HAProxy (2001)
- 탄생: 자기 회사 트래픽 분산할 무료 L4/L7 LB가 없어서 직접 작성
- 실사용: 고성능 로드밸런싱
- Caddy (2015)
- 탄생: HTTPS 설정이 너무 복잡 (Let’s Encrypt 자동 통합)
- 실사용: 작은~중간 웹 서버
10. CI/CD / IaC
- Jenkins (2011)
- 탄생: Sun이 만든 Hudson의 fork. Oracle 인수 후 라이선스 분쟁
- 실사용: 자체 호스팅 CI/CD
- GitHub Actions (2019)
- 탄생: GitHub repo와 통합된 CI 부재 (CircleCI/Travis 의존 내재화)
- 실사용: 오픈소스 + 중소 프로젝트 표준
- Terraform (2014, HashiCorp)
- 탄생: 클라우드 GUI 클릭은 재현 불가. 코드 + multi-provider 통합
- 실사용: IaC 표준
- Ansible (2012)
- 탄생: Puppet/Chef는 agent 필요 + Ruby DSL. SSH + YAML로 더 단순하게
- 실사용: 서버 설정 관리
- ArgoCD (2018, Intuit)
- 탄생: Intuit가 자기 k8s 배포 관리하려고. GitOps 개념 정립
- 실사용: k8s GitOps 배포
11. 관측
- Prometheus (2012, SoundCloud)
- 탄생: SoundCloud가 마이크로서비스 옮기는데 기존 도구가 동적 환경에 약함. Borgmon 영향
- 실사용: k8s/마이크로서비스 메트릭 표준 (탄생 목적 그대로)
- Grafana (2014) ★
- 탄생: Kibana를 fork해 Elasticsearch 외 시계열 DB(InfluxDB/Graphite)도 시각화
- 실사용: 모든 데이터 소스 대시보드 표준
- Jaeger (2015, Uber)
- 탄생: Uber 마이크로서비스 추적. Google Dapper 논문 기반
- 실사용: 분산 트레이싱 표준
- OpenTelemetry (2019)
- 탄생: OpenTracing + OpenCensus 두 표준이 경쟁하다 합쳐짐
- 실사용: vendor-중립 관측 데이터 수집
12. 버전 관리
- Git (2005, Linus)
- 탄생: Linux 커널팀이 BitKeeper 무료 사용권 박탈당해 Linus가 2주 만에
- 실사용: 소스 관리 사실상 표준
- GitHub (2008)
- 탄생: Git CLI가 너무 어려움. 웹 UI + 협업(PR, 이슈)
- 실사용: 오픈소스/기업 코드 호스팅
13. 클라우드 / 서버리스
- AWS (2006) ★
- 탄생: Amazon이 자기 e-commerce 인프라를 외부 판매. Bezos의 “API everything” 정책 부산물
- 실사용: 범용 클라우드 인프라
- S3 (2006)
- 탄생: Amazon 내부 다양한 데이터 저장 표준화
- 실사용: 파일 저장, 백업, 데이터 레이크
- Lambda (2014)
- 탄생: 서버 없이 코드만 올려 실행하는 이벤트 기반 컴퓨팅 모델
- 실사용: 짧은 작업, 이벤트 처리, 서버리스 백엔드
- Cloudflare Workers (2017)
- 탄생: Cloudflare CDN edge에서 코드 실행 (V8 isolate로 Lambda보다 가볍게)
- 실사용: edge computing, API 게이트웨이
14. ORM / DB 도구
- Hibernate (2001)
- 탄생: Java 개발자가 EJB CMP에 지쳐 만든 ORM
- 실사용: Java ORM 표준
- SQLAlchemy (2006)
- 탄생: Python에 본격적 ORM 부재. Core(SQL 추상화) + ORM 두 레이어
- 실사용: Python ORM 표준
- Prisma (2019)
- 탄생: TypeScript에서 type-safe DB 접근. Sequelize 등은 타입 약함
- 실사용: TS 풀스택
- Alembic (2009)
- 탄생: SQLAlchemy 작성자가 마이그레이션 도구로 같이 만듦
- 실사용: Python 마이그레이션
- dbt (2016)
- 탄생: 컨설팅 회사 Fishtown이 분석 SQL을 SW 엔지니어링 방식으로 관리
- 실사용: 데이터 웨어하우스 변환 표준
15. 테스팅
- JUnit (1997, Kent Beck + Erich Gamma)
- 탄생: 비행기에서 SUnit(Smalltalk)을 Java로 포팅
- 실사용: Java 단위 테스트 표준
- pytest (2003)
- 탄생: Python의 unittest(JUnit 이식)가 boilerplate 많음
- 실사용: Python 테스트 표준
- Selenium (2004, ThoughtWorks)
- 탄생: ThoughtWorks가 자기 웹앱 테스트 자동화
- 실사용: E2E 테스트, 웹 자동화
- Playwright (2020, MS)
- 탄생: Puppeteer 만든 팀이 MS로 옮겨 멀티 브라우저 후속작
- 실사용: 모던 E2E
- Postman (2012) ★
- 탄생: 자기가 API 개발 중 curl 반복이 귀찮아 만든 Chrome 확장
- 실사용: API 수동 테스트, 팀 컬렉션 공유 (회사로 성장)
- k6 (2017)
- 탄생: JMeter 등 부하 테스트가 GUI 위주라 CI 친화적이지 않음
- 실사용: 부하 테스트, 성능 회귀
16. 빌드 / 패키지
- Maven (2004)
- 탄생: Apache가 Jakarta 프로젝트 빌드 표준화. Ant는 자유로워서 일관성 없음
- 실사용: Java 빌드 표준
- npm (2010)
- 탄생: Node 모듈 공유/설치 표준 부재
- 실사용: 거의 모든 JS 프로젝트 의존성 관리
- pip (2008) → poetry (2018) → uv (2024)
- 탄생: 단계별로 “이전 도구의 한계”를 풀려고 만들어짐 (의존성 해결, lock, 속도)
- 실사용: Python 패키지 관리 (현재는 uv로 빠르게 이동 중)
★ 표시들에서 보이는 패턴
탄생 목적과 실사용이 갈라진 케이스를 보면 공통점이 있다:
| 패턴 | 예시 |
|---|---|
| 회사 내부 도구가 오픈소스화 후 다른 곳에서 더 유명 | Docker, Kafka, k8s, Cassandra |
| 다른 분야(임베디드/PaaS/브라우저)용으로 만들었는데 백엔드가 가져감 | Java, SQLite, JWT, Rust |
| 스크래치 가려운 데에서 출발해 회사가 됨 | PHP, Postman, Elasticsearch |
| fork/패치 모음으로 시작 | Apache, Jenkins, Grafana, MariaDB |
| 이전 기술의 라이선스 분쟁이 만든 결과 | Git, MariaDB, Jenkins |
→ “탄생 목적과 실사용이 다르다”는 건 실패가 아니라 오히려 정상이다. 한 분야에서 잘 만들어진 도구는 인접 분야에서 자주 재발견되고, 진짜 좋은 도구는 원래 의도를 넘어 살아남는다. 새 기술 평가할 때 “지금 사람들이 어떻게 쓰나”와 “원래 어떤 문제를 풀려고 만들어졌나”를 모두 보면, 그 도구의 강점이 어디서 오는지 더 정확히 보인다 (예: SQLite는 “임베디드 신뢰성”이 뿌리라서 모바일 앱이 신뢰하고 쓰는 것).