서버(Server)에 대하여

2024. 11. 27. 16:17CS

1. 서버의 정의

서버(Server)는 요청을 받아 -> 데이터를 처리하고 -> 응답을 제공하는 역할을 하는 컴퓨터나 소프트웨어를 말해.

(1) 하드웨어 서버와 소프트웨어 서버

  • 하드웨어로서의 서버  
    • "서버실"의 서버 컴퓨터는 실제 물리적인 하드웨어야.
    • 서버 컴퓨터는 일반 PC보다 훨씬 강력하고 안정적인 성능을 제공하도록 설계돼 있어.
    • 여러 사용자(클라이언트)가 동시에 접속해도 문제없도록 처리 속도, 저장 공간, 네트워크 연결이 뛰어나지.
    • 물리적 서버를 직접 관리하지 않고, AWS, GCP 같은 클라우드 서비스를 이용해 가상 서버를 운영할 수도 있다. 가상 서버란 실제 물리적인 서버 위에서 동작하는 가상화 기술로 제공되는 서버. (물론 클라우드 서버도 물리적 서버 위에 구축된 것)
  • 소프트웨어로서의 서버
    • 서버는 하드웨어뿐만 아니라 특정 역할을 수행하는 소프트웨어를 의미하기도 해.
    • 예를 들어, Apache Tomcat 같은 소프트웨어는 "웹 서버" 역할을 하는 프로그램이야.
    • 이 소프트웨어가 클라이언트의 요청을 받고 처리해서 응답을 보내는 기능을 담당해.
  • 서버 컴퓨터와 서버 소프트웨어의 관계
    • 서버 소프트웨어는 물리적/가상 서버 컴퓨터에 설치돼야 작동한다. 
    • 물리적인 서버 컴퓨터에 Apache 웹 서버 소프트웨어를 설치하면, 그 컴퓨터는 웹 서버가 돼.
    • 같은 서버 컴퓨터에 데이터베이스 서버 소프트웨어(예: MySQL)를 설치하면, 그 컴퓨터는 데이터베이스 서버 역할도 할 수 있어.
    • 서버 컴퓨터와 서버 소프트웨어가 둘이 합쳐져서 우리가 일반적으로 부르는 "서버"의 개념이 만들어지는 거야.

(2) 개발 서버와 운영 서버의 차이 

  • 개발 서버: 내 노트북에 서버 프로그램 설치 → 내 노트북이 서버가 된다
    • 서버 프로그램(예: Apache, Nginx, Tomcat 등)을 설치하면, 네 노트북은 서버 역할을 할 수 있어.
    • 예를 들어 네 노트북에 Apache Tomcat을 설치하면, 클라이언트(브라우저)에서 네 노트북 IP 주소로 요청을 보내면 응답을 줄 수 있어.
    • 스프링 애플리케이션을 네 노트북에서 실행하면, 네 노트북이 웹 서버로 동작하게 돼.
    • 개발 중일 때는 노트북에서 서버 프로그램을 돌려보는 게 일반적이야.
    • 로컬 개발 환경: 스프링 애플리케이션을 실행 → 브라우저에서 localhost:8080으로 접속하면 동작 확인.
      내 노트북에 서버를 깔고 애플리케이션을 실행해 보면, 코드가 어떻게 작동하는지 확인 가능!
  • 하지만 내 노트북을 운영 서버로 쓰는 건 조금 제한적
    • 24시간 켜두기 힘듦: 서버는 보통 항상 켜져 있어야 하는데, 노트북은 끄거나 이동할 일이 많잖아.
    • 성능 제한: 노트북은 대규모 요청을 처리하기에는 성능(메모리, CPU)이 부족할 수 있어.
    • 네트워크 안정성 부족: 가정용 인터넷은 고정된 IP가 아닌 경우가 많아서, 외부에서 접근하기 어려울 수 있어.
  • 운영 서버로 넘어가면?
    • 실제로 서비스 배포 시에는 더 강력한 하드웨어(서버 컴퓨터)를 사용하는 클라우드 서비스(AWS, Google Cloud, Azure 등)를 통해 운영.
    • 클라우드 서버에 스프링 애플리케이션과 서버 소프트웨어를 설치해서 사용자들이 접근할 수 있도록 만들어.
 
 

 

2. 서버의 종류

(1) 웹 서버 (Web Server)

  • 웹 서버는 주로 정적인 콘텐츠를 클라이언트(브라우저)에게 제공하는 역할을 해.
  • 정적 콘텐츠란? HTML, CSS, JavaScript 파일, 이미지 등 파일 형태로 바로 제공될 수 있는 콘텐츠.
  • 대표적인 웹 서버: Apache HTTP Server, Nginx, Microsoft IIS

(2) 애플리케이션 서버 (Application Server)

  • 애플리케이션 서버는 동적인 콘텐츠를 생성하고 처리하는 역할을 해.
  • 클라이언트가 데이터베이스나 비즈니스 로직을 요청하면, 애플리케이션 서버가 이를 처리하고 결과를 반환.
  • 대표적인 애플리케이션 서버:
    • Apache Tomcat (Java 기반)
    • JBoss/WildFly (Java EE)
    • WebLogic, WebSphere
    • Django 서버, Flask 서버 (Python)
특징 웹 서버 애플리케이션 서버
역할 정적 콘텐츠 제공 동적 콘텐츠 처리
주요 처리 내용 HTML, CSS, 이미지 제공 데이터베이스 조회, 비즈니스 로직 실행, API 처리
대표 소프트웨어 Apache HTTP Server, Nginx Apache Tomcat, Tomcat, Jeus, JBoss, WebLogic, Spring Boot
클라이언트와의 관계 브라우저와 직접 통신 보통 웹 서버를 통해 통신
동작 방식 요청받은 파일을 그대로 제공 프로그램 로직을 실행해서 응답을 생성

*Spring Boot는 프레임워크이지만, 내장 서버(Tomcat 등)를 통해 애플리케이션 서버처럼 동작할 수 있다. 

(3) 웹 서버와 애플리케이션 서버는 함께 사용되기도 함

  • 현대 웹 서비스에서는 웹 서버와 애플리케이션 서버를 함께 사용하는 경우가 많아.
  • 웹 서버가 먼저 요청을 받고, 요청 내용에 따라
    • 정적 콘텐츠는 웹 서버가 바로 처리. 웹 서버(Apache HTTP Server) → 파일 바로 제공.
    • 동적 콘텐츠는 애플리케이션 서버로 전달해서 처리. 웹 서버 → 애플리케이션 서버(Tomcat)로 전달 → 결과 반환.

(4) 종류를 나누는 이유

  • 전문성
    • 웹 서버는 정적 파일 처리에 최적화되어 있고,
    • 애플리케이션 서버는 복잡한 로직이나 동적 데이터 생성에 최적화되어 있어.
    • 따로 두면 각각의 역할에 집중할 수 있어 더 효율적이야.
  • 확장성
    • 정적 콘텐츠 요청이 많으면 웹 서버를 추가하면 되고,
    • 복잡한 로직이 많으면 애플리케이션 서버를 확장하면 돼.

(5) 다른 종류의 서버들 

  • 데이터베이스 서버: 데이터를 저장하고 제공 (예: MySQL, PostgreSQL, MongoDB).
  • 파일 서버: 파일 공유와 관리 (예: FTP 서버, SMB 서버).
  • 메일 서버: 이메일 전송과 수신 (예: Postfix, Microsoft Exchange).
  • 프록시 서버: 클라이언트 요청을 대신 전달하고 응답 (예: Squid, HAProxy).

 

3. 스프링 프레임워크와 내장 서버

Spring Boot는 내장 Tomcat 서버를 제공해 애플리케이션 실행 환경을 빠르게 구축. 하지만 실제 서비스 배포 시에는 Tomcat과 같은 외부 서버나 클라우드 환경과 연동 필요.

(1) 내장 서버란?

  • 스프링 프레임워크(특히 Spring Boot)는 Tomcat, Jetty 같은 웹 서버를 애플리케이션 내부에 포함하고 있어.
    즉, 개발자가 별도로 서버를 설치하거나 설정하지 않아도 스프링 애플리케이션을 실행하면 자동으로 서버가 실행돼.
  • 과거의 방식 (서버를 직접 설정)
    과거에는 이렇게 해야 했어:
    1. 웹 서버 설치: 예를 들어, Apache Tomcat 같은 서버 소프트웨어를 따로 설치.
    2. 설정 파일 작성: 서버와 애플리케이션이 통신할 수 있도록 복잡한 설정.
    3. 배포: 애플리케이션을 서버에 올려서 실행.
    이 모든 과정을 개발자가 직접 해야 했기 때문에 시간이 많이 걸리고 실수하기도 쉬웠어.
  • 스프링 내장 서버의 편리함
    스프링 프레임워크는 이런 과정을 없애고, 내장 서버가 포함된 상태로 애플리케이션을 실행할 수 있게 해 줘.
    개발자는 단순히 코드를 작성하고 실행하기만 하면, 애플리케이션이 자동으로 서버에서 작동하게 돼.

(2) 내장 서버의 장점

  • 설정이 간단: 따로 서버를 설치하거나 설정할 필요가 없어.
  • 빠른 실행: 애플리케이션만 실행하면 서버도 바로 실행되니까 개발 속도가 빨라져.
  • 휴대성: 애플리케이션과 서버가 하나로 묶여 있어서, 다른 환경에서도 쉽게 실행 가능.

(3) 그래도 외부 서버를 쓰는 경우는?

  • 내장 서버는 고성능 트래픽 처리에는 제한적이며, 운영 환경에서는 보안, 성능, 확장성 측면에서 외부 서버를 사용하는 게 일반적임.
  • 외부 서버가 더 안정적이고, 성능이 뛰어나기 때문.
  • 다양한 커스터마이징이 필요할 때는 외부 서버가 더 유리해.
 
출처: ChatGPT