3. 3‑Tier(Web–WAS–DB)로 보는 프론트·백·DB·프레임워크
2026. 1. 10. 12:36
Tech Note · 개발 기초 · 용어 지도/아키텍처

개발 용어 한 번에 정리하기

: 3‑Tier(Web–WAS–DB)로 보는 프론트·백·DB·프레임워크

프레임워크, 프론트엔드, 백엔드, DB, WAS, 리버스 프록시…

용어가 한꺼번에 나오면 누구나 뒤엉킨 느낌이 드실 수 있습니다.
이 글은 “정답 암기”가 아니라, 각 용어가 어디 레이어(범주)에 속하는지부터 잡아드리는 것을 목표로 합니다.

✅ 먼저 결론부터
언어로 코드를 쓰고 → 런타임에서 실행하고 → 프레임워크로 구조를 잡아 서비스(백엔드/프론트)를 만들고 → Reverse Proxy로 앞단을 정리한 뒤 → DB에 데이터를 저장합니다.

1. 큰 그림: 3‑Tier(Web–WAS–DB)로 먼저 고정하기

전통적인 웹 서비스는 보통 Web(앞단)WAS/App(로직)DB(데이터)로 역할을 나눕니다. 요즘은 여기에 Reverse Proxy(NGINX), 캐시/세션(Redis) 같은 구성요소가 자주 붙습니다.

이 그림을 “업무 흐름”으로 읽는 방법
  • 브라우저가 요청을 보내면,
  • Reverse Proxy가 “어디로 보낼지(라우팅)”를 결정하고, 보안/로그/SSL 같은 공통 처리를 합니다.
  • 프론트(정적 자원)은 파일(HTML/JS/CSS)을 내려주고,
  • 백엔드(API)는 권한/업무 로직을 처리하며,
  • DB는 데이터를 저장/조회하고,
  • Redis는 “자주 쓰는 데이터/세션”을 빠르게 꺼내기 위해 선택적으로 사용합니다.

1-1) “정적 자원”과 “동적 응답”은 무엇이 다른가요?

여기서 초심자가 가장 많이 헷갈리시는 포인트가 정적(static) vs 동적(dynamic)입니다.

정적 자원(Static Asset)
  • 요청할 때마다 내용이 거의 변하지 않는 파일입니다.
  • 예: index.html, bundle.js, style.css, 이미지
  • React/Vue/Angular로 “개발”하지만, 빌드 결과는 파일로 떨어집니다.
동적 응답(Dynamic Response)
  • 요청마다 결과가 달라질 수 있는 실행 결과입니다.
  • 예: 로그인 사용자에 따라 다른 데이터, 권한에 따른 필터링
  • 주로 백엔드(API)에서 처리합니다.

참고로, 프론트에도 “서버에서 HTML을 만들어 주는 방식(SSR, 예: Next.js)”이 있고, 이 경우 프론트 영역이 동적으로 동작하기도 합니다.

다만 입문 단계에서는 “React/Vue = 빌드하면 정적 파일이 나온다”라는 큰 틀부터 잡으시면 이해가 훨씬 편해집니다.


2. 언어 · 런타임 · 프레임워크 · WAS · DB · 도구 간의 연관 관계

Python, node.js, spring, react.. 용어는 많고, 뭐가 무슨 역할로 서로 엮여있는지 항상 헷갈리는데..

서로 다른 레이어의 단어들이 한 줄에 섞여 있기 때문입니다.

아래 “범주 지도”를 기준으로, 각각의 솔루션들이 어떤 관계로 엮여있는지 확인해보겠습니다.

2-1) 언어(Language): “무슨 문법으로 코드를 쓰는가”

대표 예시
  • Java: 엔터프라이즈/대규모 서비스에서 역사적으로 강한 생태계
  • JavaScript: 원래 브라우저용 언어로 시작, Node.js 등장 이후 서버에서도 활용
  • TypeScript: JavaScript에 “타입(안전성)”을 더해 대규모 개발에 유리
  • Python: 자동화/스크립팅/데이터 영역에서 강점
  • C/C#: 시스템/성능 또는 .NET 생태계(특히 Windows 기반)에서 활용

언어는 “역할”이 아니라 “표현 방식”입니다. 예를 들어 JavaScript는 프레임워크가 아니라 언어이고,

React는 언어가 아니라 프론트엔드 라이브러리/프레임워크 쪽에 속합니다.

2-2) 런타임(Runtime): “쓴 코드를 실제로 실행시키는 엔진”

같은 언어라도 실행 환경이 다르면 생태계(툴/라이브러리/운영 방식)가 달라집니다. 특히 질문하신 Node.jsJVM은 입문자 분들이 많이 헷갈리십니다.

Node.js의 생성 배경
JavaScript는 원래 브라우저 안에서만 쓰이던 언어였는데, “서버에서도 JS를 돌리자”는 흐름이 커지면서
V8(Chrome 엔진) 기반의 서버 런타임이 탄생했습니다. 이것이 Node.js입니다.
JVM의 역사적 맥락
Java는 “한 번 컴파일하면 어디서든 돌아가게 하자”라는 철학으로 커졌고, 이를 위해 JVM이라는 공통 실행 환경이 발전해 왔습니다. 기업 환경에서 장기 운영/표준화 요구가 크다 보니 엔터프라이즈 생태계가 두터워졌습니다.

2-3) 프레임워크(Framework): “구조/규칙/뼈대를 제공하는 도구”

프레임워크는 쉽게 말해 “혼자 만들면 제각각이 될 코드를, 일정한 규칙으로 만들게 해주는 뼈대”입니다.

프론트와 백엔드는 각각 프레임워크가 다르고, 목적도 다릅니다.

프론트엔드(React/Angular/Vue)

프론트엔드 프레임워크가 하는 일
  • 화면(UI) 상태 관리(예: 버튼 클릭, 입력 폼)
  • 컴포넌트 기반으로 화면을 재사용 가능하게 구성
  • 빌드하면 “정적 파일(HTML/JS/CSS)”로 만들어 배포
즉, 개발 방식은 동적이지만 “배포 결과는 파일(정적 자원)”인 경우가 많습니다.

백엔드(Spring / Express / Nest)

Spring(주로 Java/JVM) — 왜 많이 쓰이나요?
  • 대규모 조직에서 필요한 기능(보안, 인증, 트랜잭션, 관측)이 성숙하게 갖춰진 편입니다.
  • 구조(레이어)와 규칙이 강해서 팀 개발/장기 운영에 유리합니다.
  • Spring Boot 이후로는 “내장 서버” 덕분에 실행/배포가 더 단순해졌습니다.
Express(주로 Node.js) — 왜 ‘가볍다’고 하나요?
  • Node.js 위에서 API 서버를 빠르게 만들 수 있는 미니멀한 웹 프레임워크입니다.
  • 자유도가 높아 작은 서비스/MVP에 빠르게 적용할 수 있습니다.
  • 대신 규모가 커지면 “규칙/구조”를 팀이 스스로 정해야 하는 부담이 생길 수 있습니다.
NestJS(주로 Node.js + TypeScript) — Express와 무엇이 다른가요?
  • Express(또는 Fastify) 위에 “구조/규칙(모듈·DI·데코레이터)”을 얹은 프레임워크입니다.
  • Spring처럼 구조를 잡고 싶을 때 Node 진영에서 자주 선택됩니다.
  • “팀 개발/확장”을 염두에 둔 Node 백엔드라면 비교해 볼 만합니다.

3. WAS는 무엇이고, 왜 JEUS 같은 제품이 나오게 되었나요?

WAS(Web Application Server)는 특히 Java 생태계에서 많이 쓰이던 용어입니다. 과거에는 “웹 서버(Apache 등)”와 “애플리케이션 실행(Java EE 등)”을 분리해서 운영하는 구조가 일반적이었고, 기업 환경에서는 트랜잭션/보안/관리 기능이 강한 상용 WAS가 널리 쓰였습니다(예: JEUS).

요즘은 왜 “WAS가 사라진 것처럼” 느껴질까요?
  • Spring Boot처럼 내장 서버를 포함한 형태가 보편화되면서 “WAS 설치/운영”을 직접 덜 하게 된 경우가 많습니다.
  • Docker/클라우드 환경에서는 “애플리케이션을 컨테이너 단위로 배포”하며 경계가 더 흐려집니다.
  • 다만 기업 환경에서는 여전히 WAS를 표준으로 쓰는 경우도 많고, 조직/규정/운영 방식에 따라 달라집니다.

4. DB는 왜 SQL이 필요하고, RDBMS vs NoSQL은 어떻게 고르면 좋을까요?

DB는 “데이터를 영구 저장하고, 안전하게 읽고 쓰는 계층”입니다. 입문 단계에서 가장 중요한 것은 특정 제품이 아니라 SQL/트랜잭션/인덱스 같은 기본기입니다.

구분 대표 제품 장점 주의/포인트
RDBMS MySQL, MariaDB,
PostgreSQL, DB2
SQL로 구조화된 데이터 처리에 강하고,
트랜잭션/정합성이 성숙
스키마 설계(테이블/관계), 기본기가 중요
NoSQL MongoDB 문서형(JSON) 데이터에 유리하고,
유연한 스키마
정합성/트랜잭션 요구에 따라 설계가 달라짐
Cache Redis 자주 쓰는 데이터를 빠르게 제공
(성능/세션 공유)
‘영구 저장’이 아니라 ‘보조 계층’으로 보는 편이 안전
초심자에게 추천되는 “DB 학습 우선순위”
  1. SELECT/JOIN/WHERE/GROUP BY
  2. 인덱스가 왜 필요한지(조회 속도)
  3. 트랜잭션/격리 수준의 감각(동시성)
  4. ORM(예: JPA, Prisma 등)은 그 다음에 “편의 도구”로 접근

5. Reverse Proxy (NGINX/WebtoB)는 왜 거의 항상 앞에 붙을까요?

Reverse Proxy는 초심자 입장에서 “굳이 왜 하나 더 두지?”라는 느낌이 들 수 있는데, 실무에서는 운영 편의 때문에 앞단을 정리하는 역할이 매우 큽니다.

Reverse Proxy의 존재 이유(실무 관점)
  • 라우팅: /api는 백엔드로, /는 프론트로 보내기
  • SSL 종료: 인증서/HTTPS를 앞에서 통합 관리
  • 로그 표준화: 접속 로그/에러 로그를 한 곳에서 모으기
  • 보안 헤더/접근 제어: 공통 정책을 중앙에서 적용
# 예시(개념): /api는 백엔드로, 나머지는 정적 자원으로
location /api/ { proxy_pass http://backend:3000/; }
location /     { root /usr/share/nginx/html; try_files $uri /index.html; }

6. “대체 가능한 것”과 “같이 쓰는 것”을 분리해 보겠습니다

초보자 입장에서 가장 큰 혼란은 “이게 저걸 대체하나요?”인데요, 원칙은 간단합니다. 같은 레이어 안에서는 대체 후보가 될 수 있고, 레이어가 다르면 보통 같이 씁니다.

레이어 서로 대체(선택지) 대체가 아니라 ‘조합’
프론트 React ↔ Vue ↔ Angular 프론트 + Reverse Proxy + 백엔드(API) + DB
백엔드 프레임워크 Spring ↔ (Node 계열 프레임워크들) ↔ (Python 계열 프레임워크들) 백엔드(로직) + DB(SQL) + 캐시(Redis)
DB(RDBMS) MySQL ↔ MariaDB ↔ PostgreSQL ↔ DB2 RDBMS + (필요 시) NoSQL + (필요 시) Redis
Reverse Proxy NGINX ↔ WebtoB Reverse Proxy + (내부) 여러 서비스 라우팅
IDE/도구 Eclipse ↔ IntelliJ(미표기) ↔ VSCode(미표기) / PyCharm 등 IDE + Git + Docker + CI/CD

7. 실제로는 이렇게 조합합니다(연계 예시 3개)

예시 A) “현대적인 내부 포털/대시보드”
  • 프론트: React
  • 프록시: NGINX
  • 백엔드: Node.js + NestJS
  • DB: PostgreSQL
  • 캐시/세션: Redis(선택)
장점: 빠른 개발/확장, 프론트·백 언어 통일 가능(TS). 주의: 구조/테스트/관측을 초기에 잡아두면 장기 운영이 편해집니다.
예시 B) “전통적인 엔터프라이즈 표준형”
  • 프론트: (React 또는 Angular)
  • 프록시: WebtoB 또는 NGINX
  • 백엔드: Java + Spring
  • WAS: JEUS(조직 표준인 경우)
  • DB: DB2 또는 PostgreSQL
장점: 조직 표준/감사/운영체계가 강합니다. 주의: 표준이 강한 만큼 초기 구성은 무거울 수 있습니다.
예시 C) “자동화/데이터 중심 서비스”
  • 백엔드: Python(FastAPI 등)
  • DB: PostgreSQL
  • 캐시/큐: Redis(선택)
  • 프록시: NGINX
장점: 자동화/데이터 처리와 친화적. 주의: 대규모 팀 개발 시 구조/테스트 문화를 같이 잡아두는 편이 좋습니다.

8. 입문자 관점 학습 루트(“무엇부터 공부할지”가 막막할 때)

추천 루트(현실적으로 가장 덜 헤매는 순서)
  1. HTTP 기본: 요청/응답, 상태코드, 쿠키/세션 개념
  2. 프론트 1개 선택: React(또는 Vue)로 화면 하나 만들기
  3. 백엔드 1개 선택: Node(Express/Nest) 또는 Spring으로 API 3개 만들기
  4. DB 연결: CRUD + 간단한 JOIN + 인덱스 감각
  5. Reverse Proxy: NGINX로 /api 라우팅 + 로그 확인
  6. Docker: 개발/운영 환경을 “한 번에 재현”해보기
초심자에게 가장 자주 생기는 함정
  • “도구/제품 이름”만 많이 아는 상태 → 실제로는 레이어가 안 잡혀서 계속 헷갈립니다.
  • 그래서 이 글의 핵심은 기술을 외우는 것이 아니라 어디에 붙는 기술인지(레이어)를 먼저 고정하는 것입니다.

참고 자료(용어별 공식 문서 · 상세 확장용)

각 용어의 자세한 내용(명령/설정/운영 팁)은 아래 링크를 바탕으로 별도 글로 확장하시면 정리하기 좋습니다.