1. 웹 프로그래밍이란?
- 간단히 설명하자면, HTTP 프로토콜로 통신하는 클라이언트와 서버를 개발하는 것이다.
- 웹 클라이언트와 서버를 같이 개발할 수도 있고, 웹 클라이언트 또는 서버 하나만 개발할 수도 있다.
- 보통은 웹 서버를 개발하는 경우가 많아서 파이썬에서는 웹 프레임워크인 '장고'를 자주 사용한다.
- 웹 클라이언트 : 보통은 웹 브라우저가 사용되나, 개발자가 직접 개발 가능하다.
EX) 웹 브라우저를 사용하여 요청(네이버 등)
리눅스 curl 명령을 사용하여 요청
Telnet을 사용하여 요청
직접 만든 클라이언트로 요청
- 웹 서버 : 주로 웹 프레임워크를 활용하여 웹 서버를 개발한다.
EX) 파이썬 - Django, Flask 등
- HTTP 프로토콜 : 클라이언트와 서버 사이에서 서로의 요청과 응답을 주는 역할을 한다.
2. HTTP 프로토콜
- HTTP는 웹 서버와 웹 클라이언트 사이에서 데이터를 주고받기 위해 사용하는 통신 방식으로,
TCP/IP 프로토콜 위에서 작동한다.
즉 우리가 웹을 사용하려면 웹 서버와 웹 클라이언트는 각각 TCP/IP 동작에 필수적인 IP 주소를 가져야 한다.
- HTTP는 하이퍼텍스트 전송용 프로토콜이지만, 실제로는 HTML이나 XML과 같은 하이퍼텍스트뿐만 아니라,
이미지, 음성, 동영상, 자바스크립트, PDF와 각종 오피스 도큐먼트 파일 등을 데이터로 전송할 수 있다.
(아래 사진은 HTTP 메시지의 구조이다.)
EX)요청 메시지
GET /book/shakespeare HTTP/1.1 #요청방식, 요청URI, 프로토콜 버전
Host: example.com:8080 #이름 : 값
또는
GET http://example.com:8080/book/shakespeare HTTP/1.1 #HOST 헤더 생략
EX)응답 메시지
HTTP/1.1 200 OK #프로토콜 버전, 상태 코드, 상태 텍스트
Content-Type : application/xhtml+xml; charset=utf-8
<html>
.....
</html>
3. HTTP 처리 방식
메소드명 | 의미 | CRUD와 매핑되는 역할 |
GET | 리소스 취득 | Read(조회) |
POST | 리소스 생성, 리소스 데이터 추가 | Create(생성) |
PUT | 리소스 변경 | Update(변경) |
DELETE | 리소스 삭제 | Delete(삭제) |
HEAD | 리소스의 헤더(메타데이터) 취득 | |
OPTIONS | 리소스가 서포트하는 메소드 취득 | |
TRACE | 루프백 시험에 사용 | |
CONNECT | 프록시 동작의 터널 접속으로 변경 |
- GET : 지정한 URI의 정보를 가져오는 메소드로, 웹 페이지, 이미지, 도영상 등을 가져온다고 할 때 요청한다.
- POST : 대표적인 기능은 리소스를 생성하는 것으로, 블로그에 글을 등록하는 경우가 이에 해당된다.
- PUT : 리소스를 변경하는데 사용된다. 예시로 블로그에서 글을 업로드한 작성자를 변경한 경우가 이에 해당된다.
- DELETE : 리소스를 삭제하는 메소드로 요청에 대한 응답은 바디가 없다.
+ GET과 POST 메소드
1. GET : 예시처럼 URI 부분의 ? 뒤에 키=값 쌍으로 이어붙여 보낸다.
EX) GET http://www.example.com/search/?q=forms&release=1 HTTP/1.1
2. POST : GET에서 URI에 포함시켰던 파라미터들을 바디에 넣는다.
EX) POST http://www.example.com/search/ HTTP/1.1
Content-Type: application/x-www-form-urlencoded
q=forms&release=1
- 이러한 차이로 GET에는 URI의 길이 제한으로 많은 데이터를 보내지 못하고, 보안 측면에서도 불리하다.
4. HTTP 상태 코드
5. URL 설계
- 웹 애플리케이션을 개발할 때, 디자인 측면에서는 화면 UI를 설계하고, 프로그램 로직 측면에선 URL을 설계한다.
즉 URL 설계는 웹 서버 로직 설계의 첫걸음이고, 사용자 또는 웹 클라이언트에게 웹 서버가 가진 기능을 명시해준다.
http://www.example.com:80/services?category=2&kid=patents#n10
URL스킴 호스트명 포트번호 경로 쿼리스트링 프리그먼트
- URL스킴 : URL에 사용된 프로토콜을 의미한다.
- 호스트명 : 웹 서버의 호스트명으로, 도메인명 또는 IP 주소로 표현한다.
- 포트번호 : 웹 서버 내의 서비스 포트번호이다. 생략 시에는 디폴트 포트번호로, http는 80, https는 443을 사용한다.
- 경로 : 파일이나 애플리케이션 경로를 의미한다.
- 쿼리스트링 : 질의 문자열로, 앰퍼샌드(&)로 구분된 키=값 쌍 형식으로 표현한다.
- 프리그먼트 : 문서 내의 앵커 등 조각을 지정한다.
6. URL을 바라보는 측면
- URL은 웹 클라이언트에서 호출한다는 시점에서 보면, 웹 서버에 존재하는 애플리케이션에 대한 API라고 할 수 있다.
이러한 API의 명명 규칙을 정하는 방법을 RPC, REST 두 방식으로 분류할 수 있다.
- RPC : 클라이언트가 네트워크상에서 원격에 있는 서버가 제공하는 API 함수를 호출하는 방식이다.
EX) http://blog.example.com/search?q=test&debug=true
- REST : 웹 서버에 존재하는 요소들을 모두 리소스라고 정의하고, URL을 통해 웹 서버의 특정 리소스를 표현하는 것이다.
EX) http://blog.example.com/search/test
- 요즘에는 더 간편한 REST 방식을 자주 사용한다. 이런 식으로 간편하게 URL을 정의하기 위해 정규표현식도 사용한다.
(정규표현식 내용은 아래 링크를 참조)
7. 웹 애플리케이션 서버
- 웹 클라이언트(보통 웹 브라우저)의 요청을 받아서 처리하는 서버를 통칭하여 웹 서버라고 부르지만,
좀 더 세분화하면 웹 서버와 웹 애플리케이션 서버로 분류할 수 있다.
구분 | 역할 | 프로그램명 |
웹 서버 | 웹 클라이언트의 요청을 받아서 요청을 처리하고, 그 결과를 웹 클라이언트에게 응답한다. 주로 정적 페이지인 HTML, 이미지, CSS, JS 파일을 웹 클라이언트에 제공할 때 웹 서버를 사용한다. 만약 동적 페이지 처리가 필요하면 웹 애플리케이션 서버에 처리를 넘긴다. |
Apache httpd, Nginx, lighttpd, IIS 등 |
웹 애플리케이션 서버 | 웹 서버로부터 동적 페이지 요청을 받아서 요청을 처리하고, 그 결과를 웹 서버로 반환한다. 주로 동적 페이지 생성을 위한 프로그램 실행과 데이터베이스 연동 기능을 처리한다. |
Apache Tomcat, JBoss, WebLogic, WebSphere, Jetty, Jeus 등 |
8. 정적 페이지 vs 동적 페이지
- 정적 페이지란 누가 언제 요구하더라도 항상 같은 내용을 표시하는 웹 페이지를 말한다.
해당 웹 서비스의 제공자가 사전에 준비하여 서버 측에 배치한 것으로, 동일한 리소스의 요청에 대해서는
항상 동일한 내용의 페이지를 반환한다.
- 동적 페이지란 동일한 리소스의 요청이라도 누가 언제 어떻게 요구했는지에 따라 각각 다른 내용이 반환되는 페이지다.
예시로 현재 시각을 보여주는 페이지나 온라인 쇼핑 사이트에서 사용자마다 다른 카드 내용을 보여주는 페이지이다.
즉 동적 페이지는 프로그래밍 코드가 포함되어 있어서 페이지 요청 시점에 HTML 문장을 만들어내는 것이다.
이러한 별도의 프로그램과 웹 서버 사이에 정보를 주고받는 규칙을 정의한 것이 바로 CGI 규격이다.
9. CGI 방식
- CGI 자체는 정식 프로그래밍 언어나 스크립트가 아니라, 웹 서버와 독립적인 프로그램 사이에 정보를
주고받는 규격을 의미하며, 이 규격을 준수하면 어떤 언어를 사용해도 CGI 프로그램을 개발할 수 있다.
- CGI 방식의 근본적인 문제는 각각의 클라이언트 요청에 대하여 독립적인 별도의 프로세스가 생성되는 것이다.
즉 메모리 요구량도 커져서 시스템에 많은 부하를 주는 요인이 된다.
- 대안 기술 중 하나는 별도의 애플리케이션을 Perl, PHP 등의 스크립트 언어로 작성하고, 스크립트를 처리하는
스크립트 엔진을 웹 서버에 내장시켜서 CGI 방식의 단점이었던 오버헤드를 줄이는 방식이다.
- 또 다른 방식은 애플리케이션을 처리하는 프로세스를 따라 미리 데몬으로 기동시켜 놓은 후, 웹 서버의 요청을
데몬에서 처리하는 것이다.(JSP, ASP -> 애플리케이션 서버 방식을 사용)
10. 애플리케이션 서버 방식
- 애플리케이션 서버 방식은 웹 서버가 직접 프로그램을 호출하기보다는 웹 애플리케이션 서버를 통해서
간접적으로 웹 애플리케이션 프로그램을 실행한다.
- 이러듯 웹 서버와 애플리케이션 서버가 분리됨에 따라, 서로의 역할도 구분하여 사용하는 것이 좋다.
정적 페이지와 동적 페이지를 처리하는 경우 서로 메모리 소비가 다르기에 역할을 분담하는 것이
더욱 효율적으로 처리하여 더 많은 요청을 처리할 수 있다.
- 이 두 개의 서버를 동일한 하드웨어 박스에서 기동시키는 것도 충분히 가능하다.
서비스 운용 관리 측면에서 하나의 하드웨어 박스에 구성하는 것이 좀 더 간편한 방식이다.
- 물론 하드웨어 박스를 분리하여 구성하면 메모리 효율을 더 높일 수 있다는 장점이 있다.
이를 위해서는 해당 웹 사이트의 트래픽 중 정적 페이지와 동적 페이지 요청 건수 비율을 분석해야 한다.
- 대형 웹 사이트에서는 하드웨어 증설에 의해 웹 처리 용량을 높이는 작업이 용이하도록,
웹 서버를 탑재하는 하드웨어 박스와 웹 애플리케이션 서버를 탑재하는 하드웨어 박스를 분리하여
구성하는 것이 보통이다.
'IT지식 > 나머지' 카테고리의 다른 글
ADsP 36회 시험 후기 및 준비 과정 (데이터분석 준전문가) (4) | 2023.02.27 |
---|---|
[정보] 위키독스 - 무료 e-book 사이트 (with 프로그래밍 독학) (0) | 2022.12.09 |
[IT지식] 자료구조와 알고리즘 공부를 해야하는 이유? (6) | 2022.10.24 |
알고리즘 공부 게임처럼 하기 (Feat 백준, solved.ac) (7) | 2022.10.16 |
[IT지식] 알고리즘 문제를 풀어야 하는 이유 (6) | 2022.10.14 |