Programming/Study

웹 프로그래밍 구조 - 웹서버와 WAS, 서버와 클라이언트, HTTP 프로토콜

재은초 2023. 10. 28. 17:16
반응형

웹 프로그래밍이란?

  • 웹 프로그래밍은 인터넷을 통해 웹 브라우저에서 실행되는 소프트웨어인 웹 애플리케이션을 개발하는 과정을 말한다. 웹 프로그래밍은 클라이언트와 서버 간의 상호작용을 구현하고 웹 페이지를 개발하는 데 필요한 기술과 도구를 사용하는 것을 포함한다.
  • 웹 프로그래밍에서는 서버 측과 클라이언트 측 개발이 필요하다. 서버 측 개발은 서버에서 동작하는 웹 애플리케이션의 백엔드를 구현하는 것을 의미하며 주로 Python, Java, PHP 등의 프로그래밍 언어와 웹 프레임워크를 사용하여 데이터베이스와의 상호작용, 사용자 인증, 비즈니스 로직 처리 등을 구현한다. 반면에 클라이언트 측 개발은 사용자가 웹 페이지를 브라우저에서 인터랙션하는 부분을 개발하는 것을 의미하며, 주로 HTML, CSS, JavaScript를 사용하여 웹 페이지의 렌더링, 사용자 입력 처리, AJAX를 통한 비동기 요청 처리 등을 구현한다.

 

웹 서버란?

https://developer.mozilla.org/ko/docs/Learn/Common_questions/Web_mechanics/What_is_a_web_server

  • 웹 서버(Web Server)는 클라이언트로부터 HTTP 요청을 받아들이고, 해당 요청에 대한 응답을 생성하여 클라이언트에게 전송하는 소프트웨어다. 웹 서버는 웹 페이지, 이미지, 동영상 등의 정적인 콘텐츠를 제공하며, 클라이언트의 요청에 따라 동적인 콘텐츠를 생성하고 처리하는 역할을 수행한다.
  • 웹 서버는 HTTP 프로토콜을 기반으로 동작하며, 클라이언트가 요청한 리소스를 찾아서 응답으로 제공하는데, 이를 위해 파일 시스템에서 정적인 리소스를 찾거나 동적인 컨텐츠를 생성하기 위해 웹 애플리케이션 서버(WAS)나 프록시 서버와 통신할 수도 있다.
  • 웹 서버는 클라이언트와 서버 간의 통신을 관리하고, 요청에 따라 적절한 응답을 제공하는 중간 역할을 수행한다. 대표적인 웹 서버로는 Apache, Nginx, Microsoft IIS 등이 있으며, 이러한 웹 서버들은 다양한 기능과 설정을 제공하여 웹 애플리케이션의 성능, 보안, 확장성 등을 관리할 수 있다.

정적 데이터와 동적 데이터

  • 정적 데이터(Static Data)는 변하지 않는 고정된 데이터를 말하는데, 생성된 후에는 수정되지 않으며 웹 서버에서 클라이언트로 전송될 때도 변하지 않는다. 예를 들어, 웹 페이지의 이미지, CSS 파일, JavaScript 파일 등은 정적 데이터다.
  • 동적 데이터(Dynamic Data)는 시간이 지남에 따라 변경되거나 사용자의 요청에 따라 다른 결과를 보여주는 데이터를 말한다. 동적 데이터는 웹 애플리케이션에서 서버 측에서 생성되며, 클라이언트의 요청에 따라 데이터가 동적으로 생성되거나 처리됩니다. 예를 들어, 사용자의 로그인 정보, 게시글의 목록, 사용자가 작성한 댓글 등은 동적 데이터다. 
  • 정적 데이터는 주로 웹 서버에 미리 저장되어 있으므로 빠르게 제공될 수 있습니다. 반면, 동적 데이터는 요청 시에 서버에서 처리되어야 하므로 처리 시간이 필요하다. 웹 애플리케이션은 동적 데이터를 사용하여 개인화된 콘텐츠, 실시간 업데이트, 사용자 상호작용 등 다양한 기능을 제공할 수 있다.

 

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

https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html

  • 웹 애플리케이션 서버(Web Application Server)는 웹 애플리케이션을 실행하기 위한 서버 환경을 제공하는 소프트웨어다. WAS는 클라이언트 요청에 대해 웹 서버와 데이터베이스 서버 등과 상호작용하여 동적인 웹 애플리케이션을 실행하고 결과를 반환한다.
  • WAS는 웹 애플리케이션의 실행 환경을 제공하고 중요한 서버 사이드 기능을 처리하여 개발자가 웹 애플리케이션을 구현하는 데 도움을 준다. WAS는 웹 서버와는 달리 다양한 기능을 포함하고 있으며, 다음과 같은 주요 기능을 제공한다:
    • 웹 컨테이너: 웹 애플리케이션의 실행 환경을 제공하며, 웹 컨테이너는 웹 애플리케이션의 생명주기 관리, 스레드 관리, 세션 관리 등을 담당한다. 대표적인 웹 컨테이너로는 Apache Tomcat, Jetty, JBoss 등이 있다.
    • 데이터베이스 연동: 웹 애플리케이션은 데이터베이스에 접근하여 데이터를 저장, 조회, 수정, 삭제할 수 있다.
    • 트랜잭션 관리: 웹 애플리케이션에서 발생하는 데이터베이스 작업을 트랜잭션 단위로 관리하며, 이를 통해 데이터의 일관성과 안정성을 보장할 수 있다.
    • 보안 기능: 사용자 인증, 접근 제어, 암호화 등의 보안 기능을 제공한다.
    • 확장성: 다수의 클라이언트 요청을 동시에 처리하기 위한 확장성을 제공한다. WAS는 클러스터링, 로드 밸런싱 등의 기술을 사용하여 웹 애플리케이션의 성능과 가용성을 향상시킨다.

 

웹 서버와 웹 애플리케이션 서버의 차이점

  • 웹 서버(Web Server)와 웹 애플리케이션 서버(WAS, Web Application Server)는 웹 애플리케이션을 실행하기 위한 서버 환경을 제공하는데 사용하는 것은 동일하지만 몇 가지 차이점이 있다.
    • 웹 서버(Web Server)는 정적인 파일(HTML, CSS, JavaScript 등)을 제공하고 HTTP 프로토콜을 기반으로 클라이언트 요청을 처리한다. 반면에 웹 애플리케이션 서버(WAS, Web Application Server)는 동적인 웹 애플리케이션 로직을 실행하고 데이터베이스와의 상호작용, 비즈니스 로직 처리 등을 수행한다. 즉, 웹 서버는 정적 파일을 서비스하는 역할을 수행하고, WAS는 웹 애플리케이션의 동적인 처리와 관련된 역할을 담당한다.
    • 웹 서버(Web Server)는 정적 파일 서비스, HTTP 요청 처리, 요청 로깅, 압축 및 캐싱, 리다이렉션 등과 같은 기본적인 웹 서비스 기능을 제공하며, 예시로는 Apache, Nginx 등이 있다. 반면에 웹 애플리케이션 서버(WAS, Web Application Server)는 웹 서버의 기능을 포함하면서도 동적인 웹 애플리케이션을 실행하기 위한 기능을 제공하는데, 예시로는 Tomcat, JBoss, WebLogic, Django, Flask 등이 있다.
    • 웹 서버(Web Server)는 정적 파일 서비스에 특화되어 있으므로 대용량 정적 콘텐츠를 효율적으로 제공하는 데 강점이 있어, 여러 웹 서버를 로드 밸런싱하는 방식으로 확장할 수 있다. 반면에 웹 애플리케이션 서버(WAS, Web Application Server)는 동적인 웹 애플리케이션의 실행과 데이터 처리에 특화되어 있으므로, 애플리케이션 서버 자체적으로 확장성을 가지고 있어 여러 WAS 인스턴스를 클러스터링하거나 로드 밸런싱하여 부하 분산을 달성할 수 있다.
  • 중요한 점은 웹 서버와 WAS는 서로 보완적인 역할을 수행하며 종종 함께 사용된다. 정적인 콘텐츠를 처리하는 데는 웹 서버가 효율적이고, 동적인 웹 애플리케이션 로직을 처리하는 데는 WAS가 적합합니다. 따라서 실제 웹 애플리케이션 개발 시에는 웹 서버와 WAS를 함께 조합하여 사용하는 것이 일반적이다.

 

서버와 클라이언트란?

https://developer.mozilla.org/ko/docs/Learn/Server-side/First_steps/Client-Server_overview

서버(Server)

  • 서버는 네트워크를 통해 클라이언트에게 서비스를 제공하는 컴퓨터 또는 소프트웨어다. 웹 개발에서 서버는 클라이언트로부터 요청을 받아 처리하고, 그에 대한 응답을 생성하여 반환하는데, 서버는 주로 데이터, 파일, 웹 페이지, 애플리케이션 등을 저장하고 관리하는 역할을 수행한다.
  • 웹 애플리케이션의 경우, 서버는 클라이언트의 요청을 받아 해당 요청을 처리하기 위해 필요한 데이터베이스 조회, 계산, 파일 조작 등을 수행하고 그에 대한 결과를 응답으로 반환하여 클라이언트에게 제공한다. 서버는 일반적으로 강력한 컴퓨터 또는 클러스터로 구성되며, 항상 켜져 있어 클라이언트의 요청을 수신하고 처리할 준비가 되어 있다.

클라이언트(Client)

  • 클라이언트는 서버에게 서비스를 요청하는 사용자의 디바이스(예: 웹 브라우저, 모바일 앱) 또는 소프트웨어다. 클라이언트는 사용자가 인터넷을 통해 웹 페이지를 요청하거나 서비스를 이용할 때 서버에게 요청을 보내고, 클라이언트는 사용자와 상호작용하며 사용자의 요청에 따라 서버로 데이터를 보내고 서버로부터 받은 응답을 표시한다.

    웹 브라우저는 가장 흔히 사용되는 클라이언트입니다. 사용자는 웹 브라우저를 통해 웹 페이지에 접속하고, 웹 페이지의 내용을 서버로부터 받아서 화면에 표시합니다. 클라이언트는 서버에게 요청을 보내는 역할을 하며, 이를 통해 서버에서 처리된 결과를 받아와 사용자에게 보여줍니다.

 

요청(request)과 응답(response)이란?

  • 클라이언트는 웹 브라우저를 통해 서버에 요청을 보내고, 서버는 해당 요청에 대한 응답을 생성하여 클라이언트에게 반환합니다. 이 과정은 HTTP(Hypertext Transfer Protocol)를 통해 이루어진다.

요청(Request)

https://gnaseel.tistory.com/23

  • 요청은 클라이언트가 서버에게 특정 동작을 수행하거나 데이터를 요구하기 위해 보내는 메시지다. HTTP 요청은 다음과 같은 구성 요소로 이루어진다:
    • HTTP 메소드: 요청의 목적을 나타내는 동사 형태의 메소드다. 일반적으로 사용되는 메소드는 GET, POST, PUT, DELETE 등이 있는데, 각 메소드는 서버에게 원하는 동작을 알려줍니다.
    • URL(Uniform Resource Locator): 서버에 접근할 리소스의 위치를 나타내는 주소다. URL은 프로토콜(http:// 또는 https://), 도메인명 및 경로로 구성된다.
    • 헤더(Headers): 요청과 관련된 추가 정보를 포함하는 헤더 필드다. 헤더는 클라이언트와 서버 간에 전송되는 데이터의 형식, 언어, 인증 정보 등을 포함할 수 있다.
    • 바디(Body): 일부 요청은 바디에 데이터를 포함하여 서버로 전송한다. 주로 POST, PUT 메소드에서 사용되며, 서버가 이 데이터를 처리하거나 업데이트할 때 사용된다.

응답(Response)

https://www3.ntu.edu.sg/home/ehchua/programming/webprogramming/http_basics.html

  • 응답은 서버가 클라이언트의 요청에 대해 전송하는 메시지다. HTTP 응답은 다음과 같은 구성 요소로 이루어진다:
  • 상태 코드(Status Code): 요청의 처리 상태를 나타내는 세 자리 숫자다. 일반적으로 200은 "성공", 404는 "찾을 수 없음", 500은 "서버 오류" 등으로 사용된다.
  • 헤더(Headers): 응답과 관련된 추가 정보를 포함하는 헤더 필드다. 헤더는 응답의 메타데이터, 데이터의 형식, 캐싱 지시 등을 포함할 수 있다.
  • 바디(Body): 응답에 포함되는 실제 데이터다. 주로 HTML, JSON, 이미지 등의 형태로 클라이언트에게 전송된다. 바디는 선택적으로 포함될 수 있으며, 요청에 따라 다양한 형식으로 응답될 수 있다.

 

HTTP 프로토콜

https://velog.io/@jennyfromdeblock/Http-%EC%9D%91%EB%8B%B5%EC%BD%94%EB%93%9C-%EC%A0%95%EB%A6%AC%ED%95%98%EA%B8%B0

  • HTTP(Hypertext Transfer Protocol)는 웹에서 데이터를 주고받기 위해 사용되는 통신 프로토콜이다. HTTP 요청과 응답은 클라이언트와 서버 간의 상호작용을 정의하며, 웹 개발에서 핵심적인 개념이다.

HTTP 요청(Request)

  • HTTP 요청은 클라이언트가 서버에게 특정 동작을 요청하거나 데이터를 보내기 위해 보내는 메시지다. 일반적으로 다음과 같은 구성 요소로 이루어진다:
    • HTTP 메소드: 요청의 목적을 나타내는 동사 형태의 메소드다. 가장 흔히 사용되는 메소드는 다음과 같으며, 이 외에도 PATCH, HEAD, OPTIONS 등 다양한 메소드가 있다:
      • GET: 리소스의 조회를 요청한다. 주로 웹 페이지의 데이터를 가져오는 데 사용된다.
      • POST: 서버에 데이터를 전송하여 새로운 리소스를 생성하거나 처리를 요청한다.
      • PUT: 서버에 데이터를 전송하여 리소스를 업데이트한다.
      • DELETE: 서버에서 특정 리소스를 삭제하도록 요청한다.
    • URL(Uniform Resource Locator): 요청할 리소스의 위치를 나타내는 주소다. 프로토콜(http:// 또는 https://), 도메인명 및 경로로 구성된다.
    • 헤더(Headers): 요청과 관련된 추가 정보를 포함하는 헤더 필드다. 헤더는 클라이언트와 서버 간에 전송되는 데이터의 형식, 언어, 인증 정보 등을 포함할 수 있다.
    • 바디(Body): 일부 요청은 바디에 데이터를 포함하여 서버로 전송한다. 주로 POST, PUT 메소드에서 사용되며, 서버가 이 데이터를 처리하거나 업데이트할 때 사용된다.

HTTP 응답(Response)

  • HTTP 응답은 서버가 클라이언트의 요청에 대해 생성하여 반환하는 메시지다. 일반적으로 다음과 같은 구성 요소로 이루어진다:
    • 상태 코드(Status Code): 요청의 처리 상태를 나타내는 세 자리 숫자다.
      • 2xx: 성공적인 요청을 (예: 200 OK)
      • 3xx: 리다이렉션 (예: 301 Moved Permanently)
      • 4xx: 클라이언트 오류 (예: 404 Not Found)
      • 5xx: 서버 오류 (예: 500 Internal Server Error)
    • 헤더(Headers): 응답과 관련된 추가 정보를 포함하는 헤더 필드다. 헤더는 응답의 메타데이터, 데이터의 형식, 캐싱 지시 등을 포함할 수 있다.
    • 바디(Body): 응답에 포함되는 실제 데이터다. 주로 HTML, JSON, 이미지 등의 형태로 클라이언트에게 전송된다. 바디는 선택적으로 포함될 수 있으며, 요청에 따라 다양한 형식으로 응답될 수 있다.

 

반응형