AI/Vibe coding

백엔드의 3요소 유튜브 보고 공부

Phantomer 2025. 9. 1. 16:37

https://youtu.be/M8E6vYAIuzQ?si=VL0YOOlIQNwWcN7k

 

 

 

백엔드 3요소 완벽 이해 스터디 가이드

1. 핵심 개념 정리

1.1 백엔드의 3요소:

  • 웹 서버 (Web Server): 정적 파일을 클라이언트에게 전달하는 역할. (예: HTML, CSS, JavaScript, 이미지)
  • WAS (Web Application Server): 동적인 웹 페이지를 생성하고, 비즈니스 로직을 처리하며, 데이터베이스와 연동하는 역할. (예: JSP, PHP, ASP.NET, Spring, Django 실행 환경)
  • 데이터베이스 (Database): 데이터를 영구적으로 저장하고 관리하며, 동시성 제어 및 무결성을 보장하는 역할. (예: MySQL, PostgreSQL, Oracle, MongoDB)

1.2 웹 서버의 탄생 배경 및 역할:

  • 탄생 배경: 1990년대 초 WWW 등장 시, HTML 문서와 같은 정적 파일을 효율적으로 공유하기 위해 탄생.
  • 주요 역할:클라이언트 요청(예: index.html 파일 요청)을 받아 컴퓨터에 저장된 정적 파일을 그대로 전송.
  • 모든 사용자에게 항상 동일한 페이지를 보여주는 '정적 웹(Static Web)'을 제공.
  • 대표적인 예시: Nginx, Apache, Microsoft IIS, Caddy

1.3 WAS의 탄생 배경 및 역할:

  • 탄생 배경: 웹 대중화에 따라 방문자 수 표시, 사용자별 다른 정보 제공, 방명록 기능 등 동적인 콘텐츠 요구가 증가하면서 기존 웹 서버의 한계를 극복하기 위해 탄생.
  • 주요 역할:동적인 웹 페이지 생성 (요청에 따라 서버에서 작업을 수행하고 그 결과를 담은 새로운 HTML을 실시간으로 생성).
  • 특정 요청을 받으면 미리 약속된 프로그램을 실행시키고 그 결과물을 사용자에게 전달.
  • 진정한 백엔드의 탄생 지점 (서버가 단순히 파일을 전달하는 것을 넘어 사고, 연산, 로직 처리 시작).
  • WAS와 백엔드 프레임워크의 관계:백엔드 프레임워크 (예: Spring, Django, FastAPI, Express): 자동차를 만들기 위한 정교한 설계도이자 부품 세트. 개발자가 비즈니스 로직을 쉽고 빠르게 만들 수 있도록 미리 준비된 뼈대와 도구 모음.
  • WAS: 프레임워크로 조립된 자동차를 움직이게 하는 엔진. 개발자가 프레임워크를 이용해 작성한 코드를 서버 환경에서 실제로 실행시켜 주는 런타임 환경. WAS 없이는 백엔드 프레임워크는 동작할 수 없음.
  • 현대 백엔드 프레임워크의 내장 WAS: Spring Boot (내장 Tomcat), Express (Node.js의 HTTP 모듈 활용)처럼 WAS 기능을 프레임워크 내부에 통합하여 별도 설치 없이 동작하는 것처럼 보일 뿐, 실제로는 내장 WAS가 작동함.
  • 대표적인 예시: Apache Tomcat (Java), Gunicorn/Uvicorn (Python), Node.js (JavaScript), Microsoft IIS (.NET - 웹 서버 역할 겸임)

1.4 데이터베이스의 탄생 배경 및 역할:

  • 탄생 배경: WAS 도입 후 방명록처럼 동적인 데이터 생성이 가능해졌지만, 서버 재시작 시 데이터 소실 문제 발생. 회원 정보, 상품 재고, 동시 접근 제어 등 데이터의 영구 저장 및 안전한 관리가 필요해짐.
  • 주요 역할:데이터를 영구적으로 저장하고 관리.
  • 파일 시스템의 한계 극복:동시성 제어: 여러 사용자가 동시에 데이터를 변경하려 할 때 데이터의 일관성을 유지 (예: 락(lock) 메커니즘을 통한 레이스 컨디션 방지).
  • 데이터 무결성 보장: 데이터가 중간에 깨지지 않도록 보장 (예: 트랜잭션(Transaction)을 통한 All-or-Nothing 방식의 작업 단위 보장).
  • 검색 속도 최적화: 대량의 데이터 속에서 원하는 정보를 빠르게 찾아냄 (예: 인덱스(Index) 기술 활용).
  • 대표적인 예시: MySQL, PostgreSQL, Oracle, SQL Server, MongoDB

1.5 백엔드 3요소의 협력 과정 (원트코딩 커뮤니티 예시):

  1. 정적 파일 요청 (웹 서버): 사용자가 wantcoding.com 입력 -> 웹 서버가 프론트엔드 정적 파일 전송 -> 브라우저가 화면 구성.
  2. 로그인 요청 (웹 서버 -> WAS -> DB): 사용자가 로그인 정보 입력 -> 프론트엔드 앱이 /api/login으로 POST 요청 -> 웹 서버가 API 요청을 WAS로 전달 (프록시) -> WAS가 비즈니스 로직 처리 (DB에서 회원 정보 조회) -> 데이터베이스가 회원 정보 일치 여부 응답 -> WAS가 JWT 토큰 생성 및 응답 -> 웹 서버를 통해 브라우저에 토큰 전송.
  3. 게시글 조회 요청 (웹 서버 -> WAS -> DB): 사용자가 게시글 클릭 -> 프론트엔드 앱이 /api/post/123 요청 (인증 토큰 포함) -> 웹 서버가 API 요청을 WAS로 전달 -> WAS가 토큰 검사 및 사용자 식별 -> WAS데이터베이스에 게시글 정보 조회 요청 -> 데이터베이스가 게시글 데이터 응답 -> WAS가 JSON 형식으로 가공하여 응답 -> 웹 서버를 통해 브라우저에 최종 전달.

2. 단답형 퀴즈

문제:

  1. 백엔드의 핵심 3요소는 무엇이며, 각 요소가 해결하는 주요 문제는 무엇인가요? (각 요소당 1문장)
  2. 웹 서버의 주요 역할은 무엇이며, 어떤 종류의 콘텐츠를 주로 처리하나요? (2문장)
  3. WAS가 탄생하게 된 결정적인 이유는 무엇이며, WAS의 등장으로 백엔드 시스템에 어떤 변화가 생겼나요? (2-3문장)
  4. 백엔드 프레임워크(예: Spring, Django)와 WAS는 어떤 관계를 가지는지 간략하게 설명하세요. (2-3문장)
  5. 현대 백엔드 프레임워크(예: Spring Boot)가 별도의 WAS 설치 없이 동작하는 것처럼 보이는 이유는 무엇인가요? (2문장)
  6. 데이터베이스가 등장하기 전 데이터를 저장하는 방식의 가장 큰 문제점은 무엇이었나요? (1문장)
  7. 파일 시스템으로는 해결하기 어려운 데이터베이스의 3가지 핵심 기능은 무엇인가요? (각 기능당 1문장)
  8. 사용자가 웹 서비스에 접속했을 때 웹 서버가 가장 먼저 하는 역할은 무엇인가요? (1-2문장)
  9. 사용자가 로그인 요청을 보낼 때, 웹 서버는 해당 요청을 어떻게 처리하고 어느 요소로 전달하나요? (2문장)
  10. 백엔드의 3요소가 결국 보여주는 '현대 백엔드 시스템의 핵심 철학'은 무엇이라고 설명하고 있나요? (1문장)

정답:

  1. 백엔드의 3요소는 웹 서버, WAS, 데이터베이스입니다. 웹 서버는 정적 파일 전달, WAS는 동적 콘텐츠 생성, 데이터베이스는 데이터의 영구적이고 안전한 관리를 해결합니다.
  2. 웹 서버는 클라이언트의 요청을 받아 HTML, CSS, JavaScript와 같은 정적 파일을 그대로 전송하는 역할을 합니다. 주로 변경되지 않는 고정된 콘텐츠를 효율적으로 제공합니다.
  3. WAS는 정적인 콘텐츠만 제공할 수 있는 웹 서버의 한계를 넘어, 사용자 요청에 따라 실시간으로 변화하는 동적인 웹 페이지를 생성하기 위해 탄생했습니다. WAS의 등장으로 서버가 단순히 파일을 전달하는 것을 넘어 생각하고, 연산하고, 로직을 처리하는 진정한 백엔드 시대가 시작되었습니다.
  4. 백엔드 프레임워크는 개발자가 비즈니스 로직을 쉽고 구조적으로 구현할 수 있도록 돕는 설계도이자 도구 모음인 반면, WAS는 그 프레임워크로 작성된 코드를 실제로 서버 환경에서 실행시켜 주는 런타임 환경입니다. WAS는 프레임워크가 동작하기 위한 엔진과 같은 필수적인 존재입니다.
  5. 현대 백엔드 프레임워크는 내장 WAS를 통합하여 제공하기 때문입니다. 예를 들어, Spring Boot는 내장 Tomcat 라이브러리를 포함하고 있어, 개발자가 별도로 WAS를 설치하지 않아도 애플리케이션 실행 시 자동으로 WAS 인스턴스가 구동됩니다.
  6. 데이터베이스가 등장하기 전에는 데이터를 메모리나 임시 파일에만 저장했기 때문에 서버를 껐다 켜면 모든 데이터가 사라지는 치명적인 문제가 있었습니다.
  7. 데이터베이스는 동시성 제어(레이스 컨디션 방지), 데이터 무결성 보장(트랜잭션), 검색 속도 최적화(인덱스)라는 파일 시스템의 근본적인 문제들을 해결합니다.
  8. 사용자가 브라우저에 웹사이트 주소를 입력하면 웹 서버가 가장 먼저 요청을 받아 프론트엔드 애플리케이션을 구동하는 데 필요한 정적 파일들을 사용자 브라우저로 빠르게 전송합니다. 이를 통해 사용자 화면에 멋진 홈페이지가 그려지게 됩니다.
  9. 로그인 요청과 같이 /api로 시작하는 요청을 받으면, 웹 서버는 이를 자신의 일이 아닌 동적인 처리 요청으로 판단합니다. 따라서 웹 서버는 해당 요청을 뒤에 있는 WAS로 그대로 전달하는데, 이를 프록시(Proxy)라고 합니다.
  10. 백엔드의 3요소는 현대 백엔드 시스템의 핵심 철학인 '역할과 책임의 분리'가 어떻게 자연스럽게 진화해 왔는지를 보여주는 역사적 증거라고 설명하고 있습니다.

3. 에세이 형식 질문

  1. 웹 서버, WAS, 데이터베이스 각각의 탄생 배경과 해결하고자 했던 문제점을 역사적인 맥락에서 설명하고, 이 세 요소가 현대 백엔드 아키텍처에서 어떻게 '역할과 책임의 분리'라는 철학을 구현하고 있는지 논하시오.
  2. WAS와 백엔드 프레임워크(예: Spring, Django)의 관계를 자동차 비유를 사용하여 상세히 설명하고, 현대 백엔드 개발에서 내장 WAS의 등장으로 인한 변화와 그 장단점을 분석하시오.
  3. 데이터베이스가 단순한 파일 시스템으로는 해결할 수 없는 3가지 핵심 문제점(동시성 제어, 데이터 무결성, 검색 속도)을 구체적인 예시를 들어 설명하고, 각 문제점을 데이터베이스가 어떤 메커니즘으로 해결하는지 기술하시오.
  4. 사용자가 웹 서비스에 접속하여 로그인하고 특정 게시글을 조회하는 과정을 웹 서버, WAS, 데이터베이스의 상호작용 중심으로 단계별로 상세히 설명하시오. 이 과정에서 각 요소가 어떤 정보를 주고받으며 어떤 역할을 수행하는지 중점적으로 다루시오.
  5. 모니터링, 로드 밸런싱, 캐싱, CI/CD, 쿠버네티스와 같은 고급 백엔드 기술들이 백엔드 3요소에 대한 이해 없이는 '모래 위에 성'에 불과하다고 언급한 이유를, 각 기술이 백엔드 3요소와 어떤 관계를 맺고 있는지 설명하며 논리적으로 전개하시오.

4. 핵심 용어 정리 (Glossary)

  • 웹 서버 (Web Server): 클라이언트의 HTTP 요청을 받아 HTML 문서, 이미지, CSS, JavaScript 파일 등 정적인 콘텐츠를 제공하는 소프트웨어.
  • WAS (Web Application Server): 웹 서버로부터 동적인 요청을 받아 비즈니스 로직을 처리하고, 데이터베이스와 연동하여 동적인 웹 페이지 또는 데이터를 생성한 후 웹 서버로 다시 전달하는 서버 소프트웨어.
  • 데이터베이스 (Database): 데이터를 체계적으로 저장, 관리, 검색할 수 있도록 해주는 시스템. 데이터의 영속성, 무결성, 동시성 제어 등을 제공한다.
  • 정적 웹 (Static Web): 사용자나 시간에 관계없이 항상 동일한 콘텐츠를 제공하는 웹 페이지. 주로 웹 서버가 직접 처리한다.
  • 동적 웹 (Dynamic Web): 사용자 요청, 시간, 데이터베이스 상태 등에 따라 실시간으로 내용이 변경되는 웹 페이지. 주로 WAS가 처리한다.
  • 백엔드 프레임워크 (Backend Framework): 웹 애플리케이션 개발에 필요한 공통 기능(라우팅, 데이터베이스 연동, 인증 등)을 미리 구현해 놓은 구조화된 코드 및 도구 모음. (예: Spring, Django)
  • 런타임 환경 (Runtime Environment): 프로그램이 실행될 수 있는 환경을 제공하는 소프트웨어 또는 하드웨어. WAS는 백엔드 프레임워크 코드가 실행되는 런타임 환경의 일종이다.
  • 내장 WAS (Embedded WAS): 백엔드 프레임워크 자체에 WAS 기능이 통합되어 있어, 별도의 WAS 설치 없이 애플리케이션 실행만으로 서버가 구동되도록 하는 방식.
  • 프록시 (Proxy): 클라이언트와 서버 사이에서 클라이언트의 요청을 대신 받아 서버로 전달하거나, 서버의 응답을 대신 받아 클라이언트로 전달하는 역할. 웹 서버가 WAS로 요청을 넘길 때도 프록시 역할을 한다.
  • 동시성 제어 (Concurrency Control): 여러 사용자가 동시에 데이터를 접근하거나 변경할 때, 데이터의 일관성과 무결성을 유지하기 위한 메커니즘. (예: 락)
  • 레이스 컨디션 (Race Condition): 여러 프로세스나 스레드가 공유 자원에 동시에 접근하여 예상치 못한 결과가 발생하는 상황. 동시성 제어를 통해 방지한다.
  • 데이터 무결성 (Data Integrity): 데이터의 정확성, 일관성, 유효성이 유지되는 상태.
  • 트랜잭션 (Transaction): 데이터베이스에서 하나 이상의 작업을 묶어 하나의 논리적인 작업 단위로 처리하는 것. All-or-Nothing(전부 성공하거나 전부 실패) 방식으로 데이터 무결성을 보장한다.
  • 인덱스 (Index): 데이터베이스 테이블에서 원하는 데이터를 빠르게 찾을 수 있도록 돕는 자료 구조. 책의 목차와 유사하다.
  • HTTP 패킷 (HTTP Packet): 웹 통신에 사용되는 HTTP 프로토콜에 따라 구조화된 데이터 단위.
  • Request 객체 (Request Object): 클라이언트로부터 받은 HTTP 요청의 내용을 구조화하여 백엔드 애플리케이션에서 쉽게 접근할 수 있도록 한 객체.
  • Response 객체 (Response Object): 백엔드 애플리케이션에서 클라이언트로 보낼 응답 내용을 구조화한 객체.
  • JWT (JSON Web Token): 웹 환경에서 정보 교환을 위한 안전하고 간결한 방법을 정의하는 개방형 표준. 주로 사용자 인증 및 권한 부여에 사용된다.
  • 역할과 책임의 분리 (Separation of Concerns): 시스템을 구성하는 각 요소가 고유하고 명확한 역할과 책임만을 가지도록 설계하는 원칙.

*notebookLM 통하여 요약하였습니다