본문 바로가기
컴퓨터보안/웹서버

서버 관련 정리(자세히)

by 데이빗제이2 2024. 5. 23.

일반적인 서버(Server)란?

서버는 클라이언트의 요청을 처리하고, 특정 서비스를 제공하는 컴퓨터 시스템입니다. 서버는 다양한 종류가 있으며, 그 역할에 따라 여러 가지 형태로 존재할 수 있습니다. 

서버의 종류와 역할:

서버 종류 역할 예시
웹서버 클라이언트로부터의 요청을 받아 웹 페이지를 제공하며, 정적 및 동적 콘텐츠를 전달합니다. Apache HTTP Server, Nginx, Microsoft IIS, LiteSpeed
프록시 서버 클라이언트와 다른 서버 사이의 중개자로서 동작합니다. Squid, Nginx
애플리케이션 서버 애플리케이션 서버는 웹 애플리케이션 프레임워크를 실행하고, 웹 애플리케이션 로직을 처리하여 동적 콘텐츠를 생성하고 클라이언트에 반환하는 환경을 제공합니다. Apache Tomcat, JBoss
데이터베이스 서버 데이터를 저장하고 관리하며, 클라이언트의 데이터 요청(예: SQL 쿼리)을 처리합니다. MySQL, PostgreSQL, MongoDB
파일 서버 파일 저장소 역할을 하며, 클라이언트가 파일을 업로드하고 다운로드할 수 있게 합니다. FTP 서버, SMB 서버
메일 서버 이메일의 송수신을 처리합니다. Microsoft Exchange, Postfix
게임 서버 온라인 게임의 데이터를 처리하고, 여러 클라이언트 간의 게임 상태를 동기화합니다. Minecraft 서버, World of Warcraft 서버

웹 애플리케이션 플로우

더보기

1. 클라이언트 요청: 웹 브라우저 → DNS 조회 → IP 주소 획득 → TCP 연결 → HTTP 요청

  • 클라이언트: 사용자가 웹 브라우저를 통해 웹 페이지를 요청합니다. 예를 들어, 사용자가 http://example.com에 접속합니다.
  • DNS 조회: 클라이언트의 브라우저는 도메인 이름(예: example.com)을 IP 주소로 변환하기 위해 DNS 서버에 조회 요청을 보냅니다.
  • IP 주소 획득: DNS 서버는 해당 도메인에 대한 IP 주소를 반환합니다.

2. 요청 처리: TCP 연결 → HTTP 요청 전송

  • TCP 연결: 클라이언트의 브라우저는 웹 서버의 IP 주소와 포트(기본적으로 80 또는 443)로 TCP 연결을 설정합니다.
  • HTTP 요청 전송: TCP 연결이 설정되면 클라이언트는 HTTP 요청을 웹 서버에 전송합니다. 이 요청에는 URL, HTTP 메서드(GET, POST 등), 헤더 정보 등이 포함됩니다.

3. 웹서버 처리: HTTP 요청 수신 → 정적/동적 콘텐츠 처리

  • 요청 수신: 웹 서버(예: Apache, Nginx)는 클라이언트로부터의 HTTP 요청을 수신합니다.
  • 정적 콘텐츠 처리: 요청된 리소스가 정적 파일(HTML, CSS, JavaScript, 이미지 파일 등)이라면, 웹 서버는 해당 파일을 찾아 클라이언트에 직접 응답합니다.
  • 동적 콘텐츠 처리: 요청된 리소스가 동적 콘텐츠라면, 웹 서버는 요청을 웹 애플리케이션 서버로 전달합니다.
정적 콘텐츠 index.html 웹 페이지의 기본 구조를 정의하는 HTML 파일
styles.css 웹 페이지의 스타일을 정의하는 CSS 파일
script.js 클라이언트 측의 인터랙티브 기능을 구현하는 JavaScript 파일
logo.png 웹 페이지에 포함된 로고 이미지 파일
동적 콘텐츠 profile.php 사용자 로그인 상태에 따라 다른 프로필 정보를 표시하는 PHP 페이지
news.jsp 데이터베이스에서 최신 뉴스 기사를 조회하여 표시하는 JSP 페이지
search.py 사용자가 입력한 검색어에 따라 결과를 반환하는 Python 페이지
recommendations.node.js 사용자 프로필에 따라 개인화된 추천 콘텐츠를 제공하는 Node.js 페이지

4. 웹 애플리케이션 프레임워크 처리: 비즈니스 로직 실행 → 데이터베이스 요청/응답

  • 애플리케이션 로직 처리: 웹 애플리케이션 프레임워크는 요청된 URL과 일치하는 비즈니스 로직을 실행합니다. 여기에는 사용자 인증, 데이터 처리, 비즈니스 규칙 적용 등이 포함됩니다.
  • 데이터베이스 요청: 필요한 경우, 웹 애플리케이션 프레임워크는 데이터베이스 서버(예: MySQL, PostgreSQL)에 쿼리를 전송하여 데이터를 조회하거나 수정합니다.
  • 웹 애플리케이션 프레임워크: 비즈니스 로직, 데이터베이스 상호작용, URL 라우팅 등을 관리하여 동적 콘텐츠를 생성하는 소프트웨어 프레임워크입니다.
  • 웹 애플리케이션 서버: 웹 애플리케이션 프레임워크를 실행하고, 클라이언트의 요청을 처리하는 서버 환경을 제공합니다.

5. 데이터베이스 서버 처리: 쿼리 실행 → 결과 반환

  • 쿼리 처리: 데이터베이스 서버는 웹 애플리케이션 프레임워크로부터 받은 쿼리를 실행하고, 결과를 반환합니다.
  • 응답 데이터: 데이터베이스 서버로부터 받은 데이터를 웹 애플리케이션 프레임워크에 반환합니다.

6. 응답 생성 및 반환: 동적 콘텐츠 생성 → 웹 서버에 반환 → 클라이언트에 최종 응답

  • 응답 생성: 웹 애플리케이션 프레임워크는 데이터베이스로부터 받은 데이터를 사용하여 동적 콘텐츠(HTML 페이지, JSON 데이터 등)를 생성합니다.
  • 응답 반환: 생성된 콘텐츠를 웹 서버에 반환합니다.
  • 최종 응답: 웹 서버는 웹 애플리케이션 프레임워크로부터 받은 콘텐츠를 클라이언트에 반환합니다.

7. 클라이언트 처리: HTTP 응답 수신 → 웹 페이지 렌더링

  • HTTP 응답 수신: 클라이언트의 브라우저는 웹 서버로부터 HTTP 응답을 수신합니다. 응답에는 상태 코드(예: 200 OK), 헤더, 콘텐츠가 포함됩니다.
  • 렌더링: 브라우저는 받은 HTML, CSS, JavaScript 파일을 해석하여 웹 페이지를 렌더링합니다. 이 과정에서 추가적인 리소스 요청이 발생할 수 있습니다.

웹 서버

더보기

정의

웹 서버는 클라이언트의 HTTP 요청을 처리하여 정적 콘텐츠(HTML, CSS, JavaScript, 이미지 파일 등)를 제공하는 서버입니다. 웹 서버는 동적 콘텐츠 요청을 WAS 또는 WSGI 서버로 전달할 수 있습니다.

역할

  • HTTP 요청 처리: 클라이언트로부터 HTTP 요청을 수신하고 응답을 반환합니다.
  • 정적 콘텐츠 제공: 정적 파일(HTML, CSS, JavaScript, 이미지 파일 등)을 클라이언트에 제공.
  • 리버스 프록시 기능: 동적 콘텐츠 요청을 WAS 또는 WSGI 서버로 전달합니다. (선택적 기능)

예시

  • Apache HTTP Server: 널리 사용되는 오픈 소스 웹 서버.
  • Nginx: 높은 성능과 확장성을 제공하는 경량 웹 서버.
  • Microsoft IIS (Internet Information Services): Windows 환경에서 주로 사용되는 웹 서버.

웹 프레임워크

더보기

정의

웹 프레임워크는 웹 애플리케이션을 개발하기 위한 구조와 도구를 제공하는 소프트웨어 프레임워크입니다. 웹 프레임워크는 비즈니스 로직, 데이터베이스 상호작용, URL 라우팅 등을 관리하여 동적 콘텐츠를 생성합니다.

역할

  • 비즈니스 로직 관리: 애플리케이션의 핵심 로직을 구현하고 관리합니다.
  • 데이터베이스 상호작용: ORM(Object-Relational Mapping) 등을 통해 데이터베이스와 상호작용합니다.
  • URL 라우팅: 클라이언트 요청을 적절한 핸들러나 컨트롤러로 라우팅합니다.
  • 템플릿 엔진: 동적 HTML 콘텐츠를 생성하기 위한 템플릿 기능을 제공합니다.
  • 폼 처리 및 유효성 검사: 폼 데이터를 처리하고 유효성을 검사합니다.

예시

  • Django (Python): "배터리 포함" 철학을 가진 풀스택 웹 프레임워크.
  • Flask (Python): 경량 마이크로 프레임워크로, 필요한 기능을 확장하여 사용할 수 있습니다.
  • Ruby on Rails (Ruby): 간결한 코드를 작성할 수 있도록 도와주는 웹 프레임워크.
  • Express (Node.js): 경량의 유연한 Node.js 프레임워크로, 다양한 미들웨어를 사용하여 기능을 확장할 수 있습니다.
  • Spring Boot (Java): Spring 프레임워크를 기반으로 한 마이크로서비스용 프레임워크.

WSGI (Web Server Gateway Interface)

더보기

정의

WSGI는 Python 프로그래밍 언어에서 웹 서버와 웹 애플리케이션 간의 상호작용을 위한 표준 인터페이스입니다. WSGI는 웹 서버가 클라이언트로부터 받은 요청을 Python 웹 애플리케이션에 전달하고, 그 응답을 다시 클라이언트에 전달할 수 있도록 합니다.

역할

  • 인터페이스 제공: 웹 서버와 웹 애플리케이션 간의 표준화된 인터페이스를 제공합니다.
  • 요청 및 응답 처리: 클라이언트의 HTTP 요청을 받아 웹 애플리케이션에 전달하고, 웹 애플리케이션의 응답을 웹 서버에 반환합니다.

예시

  • Gunicorn: Python WSGI 서버로, 높은 성능과 유연성을 제공합니다.
  • uWSGI: WSGI 및 다양한 다른 프로토콜을 지원하는 서버.

 

웹 애플리케이션 서버 (WAS)

더보기

정의

웹 애플리케이션 서버(WAS)는 웹 애플리케이션을 실행하고 동적 웹 콘텐츠를 생성하는 서버 환경입니다. WAS는 클라이언트 요청을 처리하고, 애플리케이션 로직을 실행하며, 데이터베이스와 상호작용합니다.

역할

  • 클라이언트 요청 처리: 클라이언트로부터 HTTP 요청을 수신하고 처리합니다.
  • 애플리케이션 로직 실행: 웹 애플리케이션의 비즈니스 로직을 실행합니다.
  • 세션 및 트랜잭션 관리: 사용자 세션과 데이터베이스 트랜잭션을 관리합니다.

예시

  • Apache Tomcat: Java 서블릿과 JSP를 실행하는 서버.
  • JBoss (WildFly): Java EE 애플리케이션을 실행하는 서버.
  • WebSphere: IBM의 엔터프라이즈급 WAS.
  • WebLogic: Oracle의 엔터프라이즈급 WAS.

내용 비교

항목 WSGI WAS (웹 애플리케이션 서버) 웹 프레임워크 웹 서버
정의 Python 웹 애플리케이션과 웹 서버 간의 표준 인터페이스 동적 웹 콘텐츠를 생성하고, 애플리케이션을 실행하는 서버 환경 웹 애플리케이션을 개발하기 위한 구조와 도구를 제공하는 프레임워크 클라이언트의 HTTP 요청을 처리하여 정적 콘텐츠를 제공하는 서버
주요 역할 웹 서버와 웹 애플리케이션 간의 요청/응답 전달 클라이언트 요청 처리, 애플리케이션 로직 실행, 세션 및 트랜잭션 관리 비즈니스 로직, 데이터베이스 상호작용, URL 라우팅, 템플릿 엔진 등 관리 HTTP 요청 처리, 정적 콘텐츠 제공, 리버스 프록시 역할
예시 Gunicorn, uWSGI Apache Tomcat, JBoss, WebSphere, WebLogic Django, Flask, Ruby on Rails, Express, Spring Boot Apache HTTP Server, Nginx, Microsoft IIS
상호작용 웹 서버와 웹 애플리케이션 간의 인터페이스 역할 웹 프레임워크를 실행하고, 클라이언트 요청을 처리 WAS 또는 WSGI 서버에서 실행되며, 비즈니스 로직을 관리 클라이언트 요청을 수신하여 정적 콘텐츠 제공, 동적 요청을 WAS/WSGI 서버로 전달
언어 및 환경 Python 주로 Java EE 환경 다양한 언어 및 환경 (Python, Ruby, JavaScript, Java 등) 다양한 언어 및 환경 (주로 C, C++, Python 등)

요약된 플로우 예시

단계 WSGI 사용 (Python) WAS 사용 (Java) 웹 프레임워크만 사용 (Python)
1. 클라이언트 요청 클라이언트가 URL 요청 클라이언트가 URL 요청 클라이언트가 URL 요청
2. 웹 서버 처리 Nginx가 요청 수신 → WSGI 서버로 전달 Nginx가 요청 수신 → WAS로 전달 N/A (웹 프레임워크가 직접 수신)
3. 서버 처리 Gunicorn이 요청 전달 → Django 비즈니스 로직 실행 Tomcat이 요청 전달 → 서블릿/JSP 비즈니스 로직 실행 Flask가 비즈니스 로직 실행
4. 데이터베이스 상호작용 Django가 DB와 상호작용 → 동적 콘텐츠 생성 서블릿/JSP가 DB와 상호작용 → 동적 콘텐츠 생성 Flask가 DB와 상호작용 → 동적 콘텐츠 생성
5. 응답 반환 Gunicorn이 응답 반환 → Nginx → 클라이언트 Tomcat이 응답 반환 → Nginx → 클라이언트 Flask가 응답 반환 → 클라이언트

 

프록시 서버의 기능 요약 표

기능설명예시

보안 강화 클라이언트의 IP 주소를 숨기고, 서버의 IP 주소를 보호합니다. 모든 프록시 서버 유형
성능 향상 캐싱을 통해 자주 요청되는 콘텐츠를 저장하여 빠르게 제공합니다. Squid, Varnish
로깅 및 필터링 요청과 응답을 로깅하고, 악성 트래픽을 필터링합니다. 모든 프록시 서버 유형
로드 밸런싱 여러 서버에 트래픽을 분산시켜 서버 부하를 줄입니다. HAProxy, Nginx
정방향 프록시 클라이언트의 요청을 받아 서버에 전달하는 프록시. Squid, HAProxy
리버스 프록시 서버의 요청을 받아 클라이언트에 전달하는 프록시. Nginx, Apache, Varnish

 

 

 

'컴퓨터보안 > 웹서버' 카테고리의 다른 글

파일 취약성  (0) 2024.05.24
서버 관련 정리(간단히)  (0) 2024.05.23
커맨드 인젝션 (Command Injection)  (0) 2024.05.21
NoSQL Injection 기법 정리(MongoDB)  (0) 2024.05.20
NoSQL Injection  (0) 2024.05.20