서버란 무엇인가? 초보자를 위한 개념 정리 (요청-응답, 포트, 서버 종류까지)


서버란 무엇인가? 초보자를 위한 개념 정리 (요청-응답, 포트, 서버 종류까지)

요약

서버(Server)는 한 문장으로 정리하면 “요청(Request)을 받아서, 처리한 뒤 응답(Response)을 돌려주는 역할을 하는 시스템”입니다. 여기서 시스템은 하드웨어(컴퓨터), 운영체제, 그리고 실제로 요청을 처리하는 소프트웨어(웹 서버·앱 서버·DB 등)를 모두 포함합니다. 많은 분들이 서버를 “좋은 컴퓨터” 정도로만 생각하지만, 실무에서 서버는 보통 “특정 서비스를 안정적으로 제공하도록 구성된 환경 전체”를 의미합니다.

이 글에서는 서버를 어렵게 외우지 않고, ① 클라이언트-서버 구조, ② 요청-응답 흐름, ③ 포트와 프로토콜, ④ 서버 종류(웹/앱/DB), ⑤ 직접 실행해보는 미니 실습까지 순서대로 정리합니다. 마지막에는 운영 관점에서 “서버답게” 만들기 위해 무엇을 신경 써야 하는지도 함께 짚어드립니다.

목차


핵심 포인트

  • 서버는 “요청을 받아 처리하고 응답하는 역할”이며, 하드웨어만이 아니라 운영체제+서비스 소프트웨어까지 포함하는 개념입니다.
  • 클라이언트(브라우저/앱)가 요청하고, 서버가 응답하는 “요청-응답” 구조를 이해하면 서버의 80%가 정리됩니다.
  • 서버는 보통 특정 포트(예: 80, 443, 8000)에서 요청을 기다리며, 프로토콜(HTTP/HTTPS 등) 규칙대로 통신합니다.
  • 웹 서버(정적 파일/프록시), 앱 서버(비즈니스 로직), DB 서버(데이터 저장)는 역할이 다르며 함께 조합됩니다.
  • 실무의 핵심은 “켜졌다”가 아니라 “안정적으로 계속 제공된다”이며, 로그·재시작·모니터링이 운영의 기본입니다.

상세 설명

1) 서버의 정의: 요청을 처리하고 응답하는 쪽

서버를 가장 쉽게 이해하는 방법은 “누가 요청을 받는가”로 구분하는 것입니다. 예를 들어, 웹 브라우저가 어떤 사이트 주소를 열면 브라우저는 데이터를 달라고 요청합니다. 이 요청을 받아 HTML/CSS/이미지 또는 API 응답(JSON)을 돌려주는 쪽이 서버입니다. 반대로 요청을 보내는 쪽은 클라이언트(Client)입니다.

중요한 점은 서버가 “항상 켜져 있고, 네트워크로 접근 가능하며, 요청을 처리할 준비가 되어 있어야 한다”는 것입니다. 그래서 서버는 개인 PC처럼 사용자가 잠깐 켰다 끄는 용도가 아니라, 특정 서비스를 지속 제공하도록 구성됩니다.

2) 클라이언트-서버 구조(가장 중요한 그림)

클라이언트-서버 모델은 IT 서비스의 기본 구조입니다. 예시를 하나만 잡으면 이해가 빠릅니다. “스마트폰 앱에서 로그인 버튼을 눌렀다”는 상황을 보겠습니다. 앱(클라이언트)은 아이디/비밀번호를 서버로 보내고, 서버는 DB에서 사용자 정보를 확인한 뒤 성공/실패를 응답합니다. 즉, 서버는 ‘처리’와 ‘판단’의 중심이며, 클라이언트는 ‘사용자 입력’과 ‘화면 표시’를 담당하는 경우가 많습니다.

여기서 서버는 단일 컴퓨터 1대일 수도 있고, 웹 서버·앱 서버·DB 서버가 각각 분리된 여러 대의 조합일 수도 있습니다. 서비스가 커질수록 역할 분리가 일반적입니다.

3) 프로토콜과 포트: 서버는 “어디로” 들어오나

서버는 “요청을 기다리는 주소”가 필요합니다. 네트워크에서 서버를 찾기 위한 기본 요소는 (1) IP 또는 도메인, (2) 포트, (3) 프로토콜입니다.

  • 도메인/IP는 “어느 컴퓨터로 갈지”를 정합니다.
  • 포트는 “그 컴퓨터 안에서 어느 프로그램으로 갈지”를 정합니다.
  • 프로토콜은 “서로 어떤 규칙으로 대화할지”를 정합니다.

예를 들어 https://example.com 은 보통 HTTPS(프로토콜)로 443 포트(기본값)에 접속합니다. 반면 개발 중인 API 서버를 8000 포트로 띄웠다면, http://localhost:8000 같은 형태로 접근합니다. 같은 컴퓨터에서도 포트가 다르면 서로 다른 서버 프로그램이 동시에 대기할 수 있습니다.

4) 서버의 종류: 웹 서버 vs 앱 서버 vs DB 서버

실무에서 “서버”라고 부를 때는 역할을 기준으로 구분하는 습관이 중요합니다. 아래 표를 먼저 보고, 각 항목의 역할을 감각적으로 잡으시면 좋습니다.

아래 표는 서버 역할을 “무엇을 담당하는가” 관점으로 비교한 것입니다.

구분 주 역할 대표 예시 실무에서 자주 하는 일
웹 서버(Web Server) 정적 파일 제공, 요청 라우팅/프록시, TLS 종료(HTTPS 처리) Nginx, Apache 리버스 프록시, 캐싱, 정적 파일 서빙, 80/443 처리
애플리케이션 서버(App Server) 비즈니스 로직 처리, API 응답 생성 Uvicorn/FastAPI, Node.js, Spring 인증/권한, 결제/주문 로직, 요청 검증, JSON 응답
DB 서버(Database Server) 데이터 저장/조회/트랜잭션 PostgreSQL, MySQL, Redis 쿼리 처리, 인덱스/백업, 성능 튜닝, 복제/고가용성

많은 서비스는 “웹 서버(Nginx) → 앱 서버(Uvicorn/FastAPI) → DB(PostgreSQL)” 같은 흐름으로 구성됩니다. 웹 서버가 먼저 외부 요청을 받고, 앱 서버로 전달하며, 앱 서버는 DB에 질의해 결과를 만들고, 다시 웹 서버를 거쳐 클라이언트로 응답하는 방식입니다.

5) 물리 서버, 가상 서버, 클라우드의 차이

서버를 “어디에 두고 어떻게 빌리느냐” 관점으로 보면 다음처럼 정리할 수 있습니다.

  • 물리 서버(온프레미스)는 실제 장비를 구매해 직접 운영하는 형태이며, 초기 비용과 관리 부담이 큽니다.
  • 가상 서버(VM)는 물리 장비 위에 여러 개의 가상 컴퓨터를 만들어 사용하는 방식이며, 자원 분리가 비교적 명확합니다.
  • 클라우드는 VM, 네트워크, 스토리지, 관리형 DB 같은 구성 요소를 필요에 따라 조합해 빠르게 구축하는 방식으로, 확장과 자동화가 강점입니다.

다만 어떤 형태든 “요청을 받고 응답한다”는 서버의 핵심은 변하지 않습니다. 결국 중요한 것은 서버가 제공하는 서비스의 안정성과 운영 방식입니다.

6) 실습: 1분 만에 서버 띄우고 요청 보내기

서버가 어렵게 느껴질 때는 “직접 띄워보고 요청을 보내보는 경험”이 가장 빠른 이해 방법입니다. 아래 실습은 별도 코드 작성 없이, 파이썬 내장 기능으로 간단한 HTTP 서버를 실행해봅니다.

# 1) (파이썬 설치되어 있다는 가정) 현재 폴더를 웹으로 공유하는 간단 서버 실행
python3 -m http.server 8000

# 2) 다른 터미널에서 같은 PC로 요청 보내기
curl -I http://127.0.0.1:8000/

첫 줄을 실행하면 8000 포트에서 “요청을 기다리는 서버”가 켜집니다. 두 번째 명령은 클라이언트 역할을 하며, 서버에게 “헤더만 보내줘”라고 요청합니다. 서버 터미널에 요청 로그가 찍히면, 지금 여러분은 “클라이언트-서버, 요청-응답”의 핵심 흐름을 직접 확인한 것입니다.

# 브라우저로도 확인 가능
# 주소창에 아래를 입력하면 현재 폴더 파일 목록이 보입니다.
http://127.0.0.1:8000/

브라우저는 훨씬 친숙한 클라이언트입니다. 주소창 입력은 “요청”이고, 화면에 뜨는 페이지는 “응답”입니다. 이 감각이 잡히면, 웹 서버·API 서버·DB 서버도 결국 같은 원리의 변형이라는 점이 보이기 시작합니다.

7) 운영 관점: “서버처럼” 동작하려면

개발 PC에서 잠깐 켜는 서버와, 운영 환경에서 돌아가는 서버의 차이는 “지속성”과 “관리 가능성”입니다. 운영 서버는 문제가 생겼을 때 원인을 찾고, 자동으로 복구하며, 트래픽 변화에 대응해야 합니다. 그래서 다음 항목이 서버 운영의 기본 체크리스트가 됩니다.

  • 프로세스 관리: 재부팅 후 자동 실행, 장애 시 재시작(systemd 같은 도구가 대표적입니다).
  • 로그: 요청 로그, 에러 로그를 남기고 검색할 수 있어야 합니다.
  • 모니터링: CPU/메모리/디스크, 응답 시간, 에러율 등을 관찰합니다.
  • 보안: 방화벽, 최소 권한, HTTPS, 업데이트 관리가 필요합니다.
  • 확장: 트래픽이 늘면 워커 수/서버 수를 늘리거나 캐시/큐를 도입합니다.

즉, 서버를 안다는 것은 단순히 “서버 프로그램을 실행할 줄 안다”를 넘어 “서비스를 안정적으로 제공하는 방법을 이해한다”에 가깝습니다.


따라하기

  1. 서버를 “요청을 처리하고 응답하는 역할”로 정의해보시고, 일상에서 서버가 등장하는 예시(웹사이트, 앱 로그인, 검색, 결제)를 3개만 떠올려 보시기 바랍니다. 이 단계만으로도 서버의 역할이 추상 개념에서 현실 감각으로 바뀝니다.
  2. 클라이언트(브라우저/앱)와 서버의 역할을 구분해보시기 바랍니다. 사용자가 입력하는 쪽이 클라이언트이고, 데이터를 처리해서 결과를 보내는 쪽이 서버입니다.
  3. 포트 개념을 “같은 컴퓨터 안의 출입구 번호”로 이해해보시기 바랍니다. 80/443/8000 같은 포트는 결국 서버 프로그램이 요청을 받기 위해 열어 둔 통로입니다.
  4. 미니 실습으로 python3 -m http.server 8000을 실행하고, 브라우저 또는 curl로 요청을 보내보시기 바랍니다. 서버 로그에 요청이 기록되는 순간이 “서버가 무엇인지”를 가장 빠르게 체감하는 포인트입니다.
  5. 마지막으로 웹 서버/앱 서버/DB 서버를 표로 다시 확인하고, 여러분이 만들고 싶은 서비스가 어떤 조합이 필요한지 간단히 설계해보시기 바랍니다. 예를 들어 “웹 서버+앱 서버+DB”는 가장 흔한 기본 구성입니다.

추가로 생각해볼 점

최근에는 “서버리스(Serverless)” 같은 용어도 많이 보이지만, 이것은 서버가 없다는 뜻이 아니라 “서버 운영을 직접 하지 않아도 되게 해주는 형태”에 가깝습니다. 즉, 서버라는 개념은 사라지지 않고, 운영 책임의 범위가 바뀌는 것입니다. 서버를 제대로 이해하면, 클라우드 구조를 배우는 속도도 함께 빨라집니다.



이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

Reactions

댓글 쓰기

0 댓글