본문 바로가기
Spec UP - Backend/Django로 배우는 쉽고 빠른 웹개발 파이썬 프로그래밍

chap 01. 웹프로그래밍의 이해

by TIS_Ha 2024. 2. 1.
반응형

Django로 배우는 쉽고 빠른 웹개발 파이썬 웹프로그래밍 기초편 책 내용입니다.

 

1.1 웹 프로그래밍이란?

웹프로그래밍 : HTTP(S) 프로토콜로 통신하는 클라이언트와 서버를 개발하는 일.

 

ex) 웹브라우저를 실행하여 네이버에 접속하는 경우

:웹 클라이언트(브라우저)가 요청하고 웹서버(네이버서버)가 응답하는 클라이언트-서버 프로그램이 동작함.

웹서버에 요청을 보내는 웹 클라이언트는 아래와 같은 형태로 만들 수 있다.

  • 웹 브라우저를 사용하여 요청
  • 리눅스 curl 명령을 사용하여 요청
  • 리눅스 telnet을 사용하여 요청
  • 직접 만든 클라이언트로 요청

1.4 HTTP 프로토콜(Hypertext Transfer Protocol)

HTTP : 웹 서버와 웹 클라이언트 사이에서 데이터를 주고받기 위해 사용하는 통신 방식으로 TCP/IP 프로토콜 위에서 동작한다.

* 웹을 이용하려면 웹 서버와 웹클라이언트는 각각 TCP/IP 동작에 필수적인 IP주소를 가져야한다.

예를 들어 웹 브라우저 주소창에 네이버URL을 입력하면, 웹 클라이언트와 웹서버 사이에 HTTP 연결이 맺어지고 웹 클라이언트는 웹서버에 HTTP 요청 메시지를 보낸다.

웹 서버는 요청에 따른 처리를 진행한 후에 그 결과를 웹 클라이언트에 HTTP 응답 메시지로 보낸다

이처럼 요청메시지와 응답메시지가 반복적으로 오가면서 웹을 사용할 수 있다.

 

1.4.1 HTTP 메시지의 구조

HTTP 메시지에는 클라이언트에서 서버로 보내는 요청메시지와 서버에서 클라이언트로 보내는 응답메시지가 있다.

  • 스타트라인은 요청메시지일때 요청라인(request line), 응답메시지일때 상태라인(status line)이라고 부른다.
  • 스타트 라인에 이어 헤더의 각 행 끝에는 줄바꿈 문자인 CRLF(Carriage Return Line Feed)이 있으며 헤더와 바디는 빈 줄로 구분한다.
  • 헤더와 바디는 생략할 수 있으며 바디에는 텍스트 뿐 아니라 2진수(binary)데이터도 들어갈 수 있다.

1.4.2 HTTP 처리방식

HTTP 메소드를 통해 클라이언트가 원하는 처리방식을 서버에 알려준다.

메소드명 의미 CRUD 매핑 역할
GET 리소스 취득 Read
POST 리소스 생성, 리소스 데이터 추가 Create
PUT 리소스 변경 Update
DELETE 리소스 삭제 Delete
HEAD 리소스의 헤더(메타데이터) 취득  
OPTIONS 리소스가 서포트하는 메소드 취득  
TRACE 루프백 시험에 사용  
CONNECT 프록시 동작의 터널 접속으로 변경  

 

1.4.3 GET 메소드와 POST 메소드

  • GET 은 URL 부분의 ? 뒤에 이름=값 쌍으로 이어 붙여 보낸다.
  • POST는 GET에서 URL에 포함시켰던 파라미터들을 요청메시지의 바디에 넣어 보낸다.

GET 방식을 사용하면 URL의 길이 제한이 있어 많은 양의 데이터를 보내기 어렵다.

또한 전달되는 사용자의 정보가 웹 브라우저의 주소창에 노출된다는 단점이 있어 보안 문제가 발생할 수 있다.

따라서 폼을 사용하거나 추가적인 파라미터를 서버로 보내는 경우에는 GET 보다 POST 방식을 많이 사용한다.

 

1.4.4 상태코드

서버에서의 처리결과는 응답메시지의 상태라인에 있는 상태코드(Status code)를 보고 파악할 수 있다.

상태코드 상태 텍스트 설명
1xx Informational 임시 응답으로 현재 클라이언트의ㅣ 요청까지는 처리되었으니 계속 진행하라는 의미.
2xx Success 클라이언트의 요청이 서버에서 성공적으로 처리되었다는 의미.
3xx Redirection 완전한 처리를 위해서 추가 동작이 필요한 경우.
주로 서버의 주소 또는 요청한 URI의 웹문서가 이동되어 다시 시도하라는 의미.
4xx Client Error 없는 페이지를 요청하는 등 클라이언트의 요청 메시지 내용이 잘못된 경우를 의미.
5xx Server Error 서버 사정으로 메시지 처리에 문제가 발생한 경우.
서버의 부하, DB처리과정 오류, 서버에서 익셉션이 발생한 경우를 의미.

 

1.5 URL 설계

  • URL 스킴 : URL에 사용된 프로토콜.
  • 호스트명 : 웹 서버의 호스팅명으로 도메인명 또는 IP 주소로 표현된다.
  • 포트번호 : 웹 서버 내의 서비스 포트 번호, 생략 시에는 디폴트 포트 번호로 http는 80을, https는 443을 사용한다.
  • 경로 : 파일이나 애플리케이션 경로.
  • 쿼리스트링 : 질의 문자열로 앰퍼샌드(&)로 구성된 이름=값 형식으로 표현한다.
  • 프라그먼트 : 문서내의 앵커 등 조각을 지정한다.

1.6 웹 애플리케이션 서버

웹 클라이언트의 요청을 받아 처리하는 서버를 통칭하여 웹 서버라고 부르기도 하지만, 아래와 같이 웹서버와 웹애플리케이션 서버로 세분화 할 수 있다.

상태코드 역할 프로그램명
웹 서버 웹 클라이언트의 요청을 받아서 요청을 처리하고 그 결과를 클라이언트에 응답한다.
주로 정적 페이지로 구성된 HTML, 이미지, CSS, Javascript 파일을 웹 클라이언트에 제공할 때 웹 서버를 사용한다.
만약 동적 페이지 처리가 필요하다면 웹 애플리케이션 서버로 처리를 넘겨야한다.
Apache httpd,
NGINX,
lighttpd,
IIS 등
웹 애플리케이션 서버 웹 서버로부터 동적 페이지 요청을 받아서 처리하고 그 결과를 웹서버로 반환한다.
주로 동적 페이지 생성을 위한 프로그램 실행과 데이터베이스 연동 기능을 처리한다.
Apache Tomcat,
JBoss,WebLogic,
WebSphere,
mod_wsgi,
uWSGI,
Gunicorn 등

 

1.6.1 정적페이지 vs 동적 페이지

정적 페이지(Static page) : 항상 같은 내용을 표시하는 웹페이지. 동일한 리소스(URL) 요청에 대해서는 항상 동일한 내용의 페이지를 반환.

동적 페이지(Dynamic page) : 누가 언제 어떻게 요구했는지에 따라 다른 내용이 반환되는 웹페이지.(ex.현재시각/장바구니)

 

1.6.4 애플리케이션 서버 방식

애플리케이션 서버 방식은 웹 서버가 직접 프로그램을 호출하기보다는, 웹 애플리케이션 서버를 통해 간접적으로 웹 애플리케이션 프로그램을 실행한다. 

웹 애플리케이션 서버는 실행 결과를 웹서버에 전달하며, 웹 서버는 전달받은 응답결과를 웹 클라이언트에 전송한다.

 

애플리케이션 서버 방식을 사용할 때 각 서버 간 구성도는 아래와 같다.

 

반응형

댓글