[CHAPTER 0] Part 3. 서버가 하는 일
웹 브라우저의 요청을 받아 데이터를 처리하고 응답을 보내주는 서버의 역할과 동작 원리, 웹 서버(Web Server)와 WAS의 차이를 실제 구축 환경(Laravel, MySQL) 예시로 알아봅니다.
[CHAPTER 0] Part 3. 서버가 하는 일
1. 정의
서버(Server)는 방문자(클라이언트)가 브라우저를 통해 무언가를 요청(Request)했을 때, 그 요구사항을 분석하여 적절한 데이터나 웹페이지를 찾아 응답(Response)해 주는 컴퓨터 또는 프로그램입니다. ZenoBlog가 24시간 돌아가고 있는 Railway 클라우드 내의 가상 컴퓨터 공간이 바로 서버입니다.
2. 필요한 이유
AD
제휴 광고 · 일부 링크는 수수료를 받을 수 있습니다
프론트엔드(브라우저가 하는 일)가 '보여주는 화면'을 담당한다면, 백엔드(서버가 하는 일)는 '데이터의 저장과 처리'를 담당합니다. 블로그에 접속 에러(예: 500 Internal Server Error)가 났을 때, 이것이 서버 코드를 잘못 짠 것인지(Laravel 에러), 아니면 데이터를 보관하는 창고가 멈춘 것인지(MySQL 에러) 파악하려면 서버의 작동 구조를 반드시 알아야 합니다.
3. 핵심 개념
- 상시 대기 (24/365): 서버는 언제 전 세계 어디서 방문자의 요청이 들어올지 모르기 때문에 1년 365일 내내 켜져 있어야 합니다. (개인 PC 대신 Railway 같은 클라우드 호스팅을 돈을 내고 사용하는 이유입니다.)
- 포트 (Port): 서버 컴퓨터에는 수만 개의 가상의 출입문(포트)이 있습니다. 일반적으로 웹 통신(HTTP)은 80번 문을, 암호화된 안전한 웹 통신(HTTPS)은 443번 문을 열어두고 요청을 기다립니다.
- 정적 처리 vs 동적 처리: 저장된 이미지 파일을 그대로 넘겨주는 단순한 일(정적)을 할 때도 있고, 사용자가 입력한 검색어를 분석해 데이터베이스에서 조건에 맞는 글만 추려내어 화면을 조립(동적)하는 복잡한 일을 하기도 합니다.
4. 주변 기초 개념
실제 실무에서 서버는 보통 3가지 역할로 쪼개져서 협업합니다.
- 웹 서버 (Web Server): 서버의 '안내데스크'입니다. 이미지(.jpg), 스타일시트(.css) 같이 변하지 않는 단순 파일(정적 데이터) 요청이 오면 뒤로 넘기지 않고 여기서 바로 빠르게 던져줍니다. (예: Nginx, Apache)
- WAS (Web Application Server): 서버의 '전문 실무자'입니다. "최신 글 5개를 뽑아서 화면으로 만들어줘" 같은 복잡한 연산 로직(동적 데이터)을 처리합니다. ZenoBlog에서는 PHP와 Laravel(라라벨) 프레임워크가 이 역할을 합니다.
- 데이터베이스 (DB / Database): 서버의 '거대한 파일 창고'입니다. 블로그의 글 내용, 방문자 수, 회원 정보 등을 영구적으로, 그리고 찾기 쉽게 체계적으로 보관합니다. (예: MySQL, MariaDB)
5. 실제 흐름 (서버 내부 동작)
브라우저의 요청이 Railway 서버에 도착한 직후 일어나는 5단계 과정입니다.
- 요청 수신: 맨 앞단의 웹 서버(Nginx)가 443번 포트로 방문자의 HTTPS 요청을 받습니다.
- 역할 분담: 웹 서버가 요청을 봅니다. "단순 로고 이미지(zenoLogo.png)를 달라는 거면 내가 창고에서 꺼내서 바로 줄게. 하지만 카테고리별 글 목록을 달라는 거라면 이건 내가 못해. WAS(라라벨), 네가 처리해!" 하고 넘깁니다.
- DB 조회: 라라벨 코드가 작동합니다. 데이터베이스(MySQL)에 "현재 공개 상태(is_published)인 글 중에서 가장 최근에 쓴 글 10개만 꺼내줘"라고 쿼리(명령)를 보냅니다.
- 데이터 가공(조립): MySQL이 글 데이터를 넘겨주면, 라라벨은 미리 만들어둔 HTML 뼈대(Blade 템플릿)에 글 제목과 본문을 예쁘게 끼워 넣어 완성된 HTML 문서를 조립해 냅니다.
- 응답 (Response): 다 조립된 HTML 문서를 다시 웹 서버를 거쳐 방문자의 브라우저로 발송합니다.
6. 예시 (ZenoBlog 글 저장 과정)
관리자인 내가 ZenoBlog 관리자 페이지에서 '새 글 쓰기' 버튼을 눌러 글을 저장(Submit)할 때 서버가 하는 일입니다.
- 요청: 브라우저가 내가 작성한 제목, 본문, 태그 데이터를 묶어서 서버로 전송(POST 요청)합니다.
- 검증 (Validation): 라라벨(WAS)이 데이터를 받아서 검사합니다. "제목이 비어있진 않나? 이미지 용량이 너무 크진 않나?" (규칙 위반 시 에러 메시지를 돌려보냅니다.)
- 저장 (DB 연동): 검증을 통과하면 라라벨이 MySQL 데이터베이스의
posts테이블(표)에 제목, 본문, 발행일자 등을 새로운 행(Row)으로 안전하게 기록합니다. - 응답: 저장이 완료되면 서버는 브라우저에게 "글이 성공적으로 저장되었습니다."라는 메시지와 함께 글 목록 페이지로 이동하라는 응답(Redirect)을 보냅니다.
7. 주의점
- 서버 부하 (Load): 갑자기 방문자가 폭주하여 수만 명이 동시에 DB 조회를 요청하면, 서버(MySQL 등)의 메모리와 CPU가 꽉 차서 사이트가 멈추게 됩니다. 이를 막기 위해 한 번 만든 글 목록 화면은 임시 공간에 저장해 두고(캐싱, Cache), DB를 거치지 않고 빠르게 보여주는 최적화 기술이 필수적입니다.
- 보안 (Security): 데이터베이스에는 중요한 정보가 들어있습니다. 서버 코드를 작성할 때 방문자가 입력한 텍스트를 검증 없이 그대로 DB에 넣게 되면, 해커가 악성 코드(SQL Injection)를 입력해 DB를 통째로 지워버릴 수 있으므로 철저한 방어가 필요합니다.
8. 요약
서버는 24시간 켜져서 브라우저의 전화를 받는 '고객센터'와 같습니다. 단순한 문의(이미지, CSS 등 정적 파일)는 앞단의 안내데스크(웹 서버)가 즉시 처리하고, 복잡한 업무(DB 조회, 로직 계산 등 동적 데이터)는 전문 상담원(WAS와 DB)이 처리하여 조립된 결과물(HTML)을 브라우저에게 응답으로 돌려줍니다.
핵심 용어 정리
AD
제휴 광고 · 일부 링크는 수수료를 받을 수 있습니다
- 서버 (Server) = 클라이언트의 요청을 받아 연산을 수행하고 데이터를 제공하는 상시 대기 중인 컴퓨터
- 웹 서버 (Web Server) = 이미지나 단순 HTML 등 변하지 않는 '정적인 데이터'를 제일 앞단에서 빠르게 던져주는 프로그램 (예: Nginx)
- WAS (애플리케이션 서버) = PHP, Java 등으로 작성된 코드를 실행해 회원가입, 글 작성 등 '동적인 데이터'를 생성하는 프로그램 (예: Laravel)
- 데이터베이스 (DB) = 변경되는 데이터(회원 정보, 글 목록, 방문자 수)를 표 형태로 안전하고 체계적으로 보관하는 전용 창고 (예: MySQL)
- 포트 (Port) = 한 컴퓨터 안에서 특정 서비스(웹, DB, 메일 등)로 들어오기 위해 지정된 고유한 문 번호 (웹은 주로 80, 443 사용)
AD








