Zeno ZENO
개인작업 / zenoBlog · 조회 2 · 좋아요 0

[CHAPTER 0] Part 3. 서버가 하는 일

웹 브라우저의 요청을 받아 데이터를 처리하고 응답을 보내주는 서버의 역할과 동작 원리, 웹 서버(Web Server)와 WAS의 차이를 실제 구축 환경(Laravel, MySQL) 예시로 알아봅니다.

[CHAPTER 0] Part 3. 서버가 하는 일

1. 정의

서버(Server)는 방문자(클라이언트)가 브라우저를 통해 무언가를 요청(Request)했을 때, 그 요구사항을 분석하여 적절한 데이터나 웹페이지를 찾아 응답(Response)해 주는 컴퓨터 또는 프로그램입니다. ZenoBlog가 24시간 돌아가고 있는 Railway 클라우드 내의 가상 컴퓨터 공간이 바로 서버입니다.

2. 필요한 이유

프론트엔드(브라우저가 하는 일)가 '보여주는 화면'을 담당한다면, 백엔드(서버가 하는 일)는 '데이터의 저장과 처리'를 담당합니다. 블로그에 접속 에러(예: 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. 실제 흐름 (서버 내부 동작)

AD

제휴 광고 · 일부 링크는 수수료를 받을 수 있습니다

패널파워 - 설문조사로 돈 버는 습관

브라우저의 요청이 Railway 서버에 도착한 직후 일어나는 5단계 과정입니다.

  1. 요청 수신: 맨 앞단의 웹 서버(Nginx)가 443번 포트로 방문자의 HTTPS 요청을 받습니다.
  2. 역할 분담: 웹 서버가 요청을 봅니다. "단순 로고 이미지(zenoLogo.png)를 달라는 거면 내가 창고에서 꺼내서 바로 줄게. 하지만 카테고리별 글 목록을 달라는 거라면 이건 내가 못해. WAS(라라벨), 네가 처리해!" 하고 넘깁니다.
  3. DB 조회: 라라벨 코드가 작동합니다. 데이터베이스(MySQL)에 "현재 공개 상태(is_published)인 글 중에서 가장 최근에 쓴 글 10개만 꺼내줘"라고 쿼리(명령)를 보냅니다.
  4. 데이터 가공(조립): MySQL이 글 데이터를 넘겨주면, 라라벨은 미리 만들어둔 HTML 뼈대(Blade 템플릿)에 글 제목과 본문을 예쁘게 끼워 넣어 완성된 HTML 문서를 조립해 냅니다.
  5. 응답 (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)을 브라우저에게 응답으로 돌려줍니다.


핵심 용어 정리

  • 서버 (Server) = 클라이언트의 요청을 받아 연산을 수행하고 데이터를 제공하는 상시 대기 중인 컴퓨터
  • 웹 서버 (Web Server) = 이미지나 단순 HTML 등 변하지 않는 '정적인 데이터'를 제일 앞단에서 빠르게 던져주는 프로그램 (예: Nginx)
  • WAS (애플리케이션 서버) = PHP, Java 등으로 작성된 코드를 실행해 회원가입, 글 작성 등 '동적인 데이터'를 생성하는 프로그램 (예: Laravel)
  • 데이터베이스 (DB) = 변경되는 데이터(회원 정보, 글 목록, 방문자 수)를 표 형태로 안전하고 체계적으로 보관하는 전용 창고 (예: MySQL)
  • 포트 (Port) = 한 컴퓨터 안에서 특정 서비스(웹, DB, 메일 등)로 들어오기 위해 지정된 고유한 문 번호 (웹은 주로 80, 443 사용)

AD

'zenoBlog' 카테고리의 다른 글

전체보기