[Open Source Software] - 웹 (HTML, XML, CGI, PHP + 스레드와 프로세스)

서현이의 개발 기록장·2022년 10월 27일
1

Open Source Programming

목록 보기
3/5
post-thumbnail
post-custom-banner

1. 웹 (www)

www (World Wide Web)

인터넷에 연결된 컴퓨터를 통해 사람들이 정보를 공유할 수 있는 전 세계적인 정보 공간을 말한다.

하이퍼 텍스트 (HT)

기존의 책과 같은 선형적인 텍스트가 아니라, 월드 와이드 웹에서 사용되는 하이퍼링크와 하이퍼텍스트를 통해서 이어지는 비선형적인 텍스트가 신개념이라는 의미에서 만들어진 용어이다.
HTML의 HT가 HyperText의 줄임말이다.


웹 표준 기구

W3C (World Wide Web Consortium)

월드 와이드 웹을 위한 표준을 개발하고 장려하는 조직

W3C 표준

종류

  • CGI
  • DOM
  • HTML
  • CSS
  • RDF
  • SVG
  • XML
  • XPath
  • XQuery

HTML과 XML의 차이?

HTML (Hyper Text Markup Language)

- 웹 페이지 및 웹 응용 프로그램의 구조를 만들기 위한 표준 마크업 언어

XML (eXtensible Markup Language)

- 사람과 기계가 읽을 수 있는 형식으로 문서를 인코딩하기 위한 규칙 집합을 정의하는 마크업 언어

< 대소문자 구분 >

  • HTML 대소문자 구분 X
  • XML 대소문자 구분 O

< 태그 >

  • HTML 미리 정의된 태그 존재
  • XML 프로그래머가 자신만의 태그 집합 정의

< 태그 닫기 >

  • HTML 일부 태그에는 닫는 태그 없음
  • XML 사용된 각 태그를 닫아야 함

< 주요 초점 >

  • HTML 데이터 표시에 중점
  • XML 정보 전달에 초점

< 용법 >

  • HTML 웹 페이지 구조를 개발하는데 사용
  • XML 다양한 플랫폼 간에 데이터 교환에 사용

결론

HTML, XML 둘 다 마크업 언어 (계산을 사용하지 않으므로 프로그래밍 언어는 아님!)
마크업 언어는 태그를 사용하여 문서 내의 요소를 정의하는 컴퓨터 언어
HTML은 웹 페이지의 구조를 개발하는데 사용되는 하이퍼 텍스트 마크업 언어
XML은 플랫폼 간 데이터를 교환하는데 사용되는 확장 가능한 마크업 언어


웹 외부 연동 기술

CGI (Common Gateway Interface)

웹 서버가 보통 CGI 프로그램 혹은 CGI 스크립트라고 부르는, (웹 페이지 내용을 만드는) 외부 프로그램과 통신하는 방법을 정의

  • 웹 사이트에서 동적인 페이지를 만드는 가장 흔하고 간단한 방법

PHP (Personal Home Page Tools -> Hypertext Preprocessor)

프로그래밍 언어의 일종으로 동적 페이지를 만들기 위해 설계됨

  • PHP로 작성된 코드를 HTML 소스 문서 안에 넣으면,
    PHP 처리 기능이 있는 웹 서버에서 해당 코드를 인식하여 작성자가 원하는 웹 페이지를 생성한다.

PHP vs CGI, +(JSP, ASP) 차이

CGI는 호출될 때마다 Process를 생성한다.

  • Web Page 호출이 100건 들어오면 100개의 Process가 생성되었다가 소멸된다. 그러나 PHP는 한 개의 Process로 운영된다. Web Page 호출이 100 건이 들어오더라도 하나의 PHP Process가 그 안에서 접속을 처리한다.
  • 접속자 수가 많아지면 CGI는 System resource를 많이 사용하게 되는 반면, PHP는 system resource를 적게 사용한다.
  • CGI의 리소스 문제를 해결하기 위해 나온 기술이 PHP, ASP, JSP
  • PHP는 CGI보다 안정적이고, 속도와 최적화에 큰 장점이 있는 언어이기 때문에 JSP, ASP보다 속도 면에서 더욱 뛰어나다.
  • PHP는 JSP, ASP보다 사용자가 많을 때 불안정 하지만 속도가 빠르기 때문에 개인 홈페이지에서 많이 사용된다.

  • CGI: Process 방식 / PHP: Thread 방식

스레드와 프로세스(Thread, Process)

프로그램 vs 프로세스 vs 스레드

1. 프로그램 (Program)

  • 작업을 수행할 수 있는 파일

2. 프로세스 (Process)

메모리에 적재되어 실행되고 있는 프로그램의 인스턴스 (독립적인 개체)

  • 연속적으로 실행되고 있는 컴퓨터 프로그램
  • 운영체제에서 자원을 할당 받는 작업의 단위
  • 동적인 개념으로 실행된 프로그램을 의미
  • 프로세스는 최소 1개의 스레드(메인 스레드)를 가진다.
  • 할당 받는 시스템 자원
    예) CPU, 주소 공간, (code, data, heap, stack)으로 구성되는 메모리 영역

  • 각 프로세스는 서로 별도의 주소 공간에서 실행되며,
    다른 프로세스의 변수나 자료구조에 접근하기 위해서는 프로세스 간 통신 (IPC)을 이용한다.

3. 스레드 (Thread)

프로세스 내에서 실행되는 흐름의 단위로 할당받은 자원을 공유

  • 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다.
  • 반면에 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없다.
  • 각각의 스레드는 별도의 레지스터와 스택을 갖고 있지만, 힙 메모리는 서로 읽고 쓸 수 있다.
  • 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드도 그 변경 결과를 즉시 볼 수 있다.


멀티 프로세스 vs 멀티 스레드

1. 멀티 프로세싱

하나의 응용프로그램을 여러개의 프로세스로 구성하여 각 프로세스가 하나의 작업(Task)을 처리

< 멀티 프로세싱 장점 >

  • 여러개의 자식 프로세스 중 하나만 문제가 발생하면,
    그 자식 프로세스만 죽는 것 이상으로 다른 영향이 확산되지 않는다.

< 멀티 프로세싱 단점 >

  • Context Switching 과정에서 캐시 메모리 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되는 등 오버헤드가 발생하게 된다.
  • 프로세스는 각각의 독립된 메모리 영역을 할당 받기 때문에 프로세스 사이에서 공유하는 메모리가 없어, Context Switching가 발생하면 캐시에 있는 모든 데이터를 모두 리셋하고 다시 캐시 정보를 불러와야 함
  • 프로세스 사이의 어렵고 복잡한 통신기법 (IPC)
    프로세스는 각각의 독립된 메모리 영역을 할당받았기 때문에, 하나의 프로그램에 속하는 다른 프로세스들 사이의 변수를 공유할 수 없다.

+ 참고) Context Switching이란?
-> CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는데, 이 과정을 Context Switching이라 한다.

구체적으로,
1. 동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(Context)를 보관하고,
2. 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업

2. 멀티 스레딩

하나의 응용프로그램을 여러 개의 스레드로 구성하고, 각 스레드로 부터 하나의 작업을 처리하도록 하는 것

  • 윈도우, 리눅스 등 많은 운영체제들이 멀티 프로세싱을 지원하고 있지만, 멀티 스레딩을 기본으로 함
  • 웹 서버는 대표적인 멀티 스레드 응용프로그램

< 멀티 스레딩 장점 >

  • 시스템 자원 소모 감소 (자원의 효율성 증대)
  • 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어, 자원을 효율적으로 관리 가능
  • 스레드 간 데이터를 주고 받는 것이 간단해지고 시스템 자원 소모가 줄어듬
  • 스레드 사이의 작업량이 작아 Context Switching이 빠름
  • 간단한 통신 방법으로 인한 프로그램 응답 시간 단축
    스레드는 프로세스 내의 Stack 영역을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적음

< 멀티 스레딩 단점 >

  • 주의 깊은 설계가 필요
  • 디버깅이 까다로움
  • 단일 프로세스 시스템의 경우에 효과를 기대하기 어려움
  • 다른 프로세스에서 스레드를 제어할 수 없음 (= 프로세스 밖에서 스레드 각각을 제어 할 수 없음)
  • 자원 공유릐 문제 발생 (동기화 문제)
  • 하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받음

웹 프로그래밍 언어

JavaScript

객체 기반의 스크립트 프로그래밍 언어

  • 웹 브라우저 내에서 주로 사용
  • 다른 응용 프로그램의 내장 객체에도 접근 가능
  • 사용자 언터렉트 동작 기능을 구현할 때 주로 사용
  • 탈 웹화의 가속화 (다른 분야에서도 사용, V8 엔진 공개)


2. 웹 관련 오픈소스

웹 서버

NCSA HTTPd

Apache HTTP Sever

Nginx

Nginx vs Apache

Nginx, Apache 비교 사이트 바로가기

스크립트 언어

JavaScript

Python

profile
HanYang ERICA Univ. Department of Artificial Intelligence
post-custom-banner

0개의 댓글