일반적인 서버(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 |