맨위로가기

Server Side Includes

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

Server Side Includes (SSI)는 텍스트 기반의 간단한 프로그래밍 언어이다. HTML 주석 안에 지시어를 배치하여 웹 페이지에 동적 콘텐츠를 포함할 수 있으며, 파일, 프로그램 출력, 시스템 변수 등을 포함하는 데 사용된다. SSI는 `` 형태의 구문을 사용하며, include, exec, echo, config, flastmod, fsize 등의 지시어를 제공한다. 제어 흐름을 위한 if-elif-else-endif, 변수 설정을 위한 set, 환경 변수를 출력하는 printenv 등의 지시어도 지원한다.

더 읽어볼만한 페이지

  • 웹 기술 - 공용 게이트웨이 인터페이스
    공용 게이트웨이 인터페이스(CGI)는 웹 서버가 외부 프로그램을 실행하기 위한 표준 인터페이스이며, 웹 서버가 클라이언트 요청에 응답하여 프로그램을 실행하고 그 결과를 클라이언트에 전송하는 방식으로 동작한다.
  • 웹 기술 - FastCGI
    FastCGI는 웹 서버와 외부 애플리케이션 간 효율적인 통신을 위한 프로토콜로, CGI의 단점을 보완하여 지속적인 프로세스를 통해 웹 애플리케이션의 성능과 안정성을 향상시킨다.
  • 웹 1.0 - 전화 접속
    전화 접속은 공중 교환 전화망을 통해 모뎀과 전화선으로 인터넷에 연결하는 방식으로, 1980년대부터 사용되었으나 광대역 인터넷의 등장으로 2000년대 이후 사용이 줄어 현재는 제한적으로 사용되며 사라지는 추세이다.
  • 웹 1.0 - 자바 애플릿
    자바 애플릿은 웹 페이지에서 실행되는 자바 기반 프로그램으로, 웹 상호작용성을 높였으나 기술적 문제와 웹 표준 기술 발전에 따라 쇠퇴하여 사용이 중단되었다.
  • 스크립트 언어 - Tcl
    Tcl은 존 오스터하우트가 개발한 명령어 기반의 프로그래밍 언어로, Tk 툴킷과 결합하여 GUI 스크립팅 환경으로 발전했으며, 다양한 운영체제에서 사용 가능하고 C, C++, Java 등 다른 언어와의 인터페이스를 지원한다.
  • 스크립트 언어 - PHP
    PHP는 라스무스 러도프가 개발한 범용 스크립팅 언어로, 웹 개발에 널리 사용되며 LAMP 아키텍처의 핵심 요소이다.
Server Side Includes
개요
종류서버 측 스크립트 언어
개발자로버트 R. 프리먼 (Robert R. Freeman)
첫 공개1995년
특징
용도기존 HTML 페이지에 동적 콘텐츠 추가
웹 서버에서 실행
실행 방식웹 서버가 HTML 페이지를 제공하기 전에 서버에서 처리
장점간단한 동적 콘텐츠 구현 용이
서버 부하 감소 (클라이언트 측 스크립트보다)
단점보안 취약점 가능성 존재
서버 설정 필요
주요 명령어`#echo`: 변수 출력
`#include`: 파일 포함
`#exec`: 셸 명령어 실행
`#flastmod`: 파일 최종 수정일 출력
`#fsize`: 파일 크기 출력
`#config`: SSI 설정 변경
`#if`: 조건문
`#loop`: 반복문
`#goto`: 지정된 위치로 이동
`#break`: 루프 종료
`#return`: 함수 종료
활용 예시
공통 헤더/푸터모든 페이지에 동일한 헤더/푸터를 쉽게 포함
현재 시간 표시페이지에 현재 시간을 동적으로 표시
파일 정보 표시파일 크기나 최종 수정 날짜 등을 표시
보안 고려 사항
명령어 실행 제한`#exec` 명령어 사용을 신중하게 고려하고 필요한 경우 비활성화
입력값 검증사용자 입력값을 검증하여 보안 취약점 방지
디렉터리 접근 제한SSI가 접근할 수 있는 디렉터리를 제한
설정
아파치 웹 서버 설정`.htaccess` 파일 또는 서버 설정 파일에서 SSI 활성화
파일 확장자`.shtml`, `.shtm`, `.html` 등 다양한 확장자 사용 가능

2. 설계

SSI는 단순한 프로그래밍 언어로, 단 하나의 자료형인 텍스트만 지원한다. 제어 흐름은 상당히 단순하며, 선택을 지원하지만, 루프는 기본적으로 지원되지 않으며, include를 사용하거나 HTTP 리디렉션을 사용하여 재귀적으로만 수행할 수 있다.[3] 언어의 단순한 설계는 대부분의 서버 측 스크립트 언어보다 배우고 사용하기 쉽게 만들며, 복잡한 서버 측 처리는 종종 더 많은 기능을 갖춘 프로그래밍 언어 중 하나로 수행된다. SSI는 튜링 완전하다.[3]

SSI는 다음과 같은 간단한 구문을 가진다: ``. 지시어는 HTML 주석 안에 배치되어 SSI가 활성화되지 않은 경우 사용자가 페이지에서 SSI 지시어를 볼 수 없도록 한다(소스 코드를 보지 않는 한). 구문은 선행 "<!--"와 지시어 사이에 공백을 허용하지 않는다.[4]

3. 사용 예시

매일 바뀌는 인용구를 포함하는 웹 페이지는 웹 페이지 파일에 다음 코드를 배치하여 인용구를 포함할 수 있다.[1]

quote.txt영어 파일을 한 번만 변경하면 해당 파일을 포함하는 모든 페이지에 최신 일일 인용구가 표시된다.[1] 포함은 파일로 제한되지 않으며, 프로그램의 텍스트 출력 또는 현재 시간과 같은 시스템 변수 값일 수도 있다.[1]

4. 지시어

SSI(Server Side Includes) 지시어는 웹 페이지에 특정 내용을 삽입하는 데 사용된다. 주요 기능은 다음과 같다:


  • 설정: 시점, 크기, 오류 메시지 형식을 설정한다.
  • 변수 삽입: SSI 변수 값을 웹 페이지에 삽입한다.
  • 명령 실행: 시스템 명령어나 CGI 프로그램을 실행하고, 그 출력 결과를 웹 페이지에 삽입한다.
  • 파일 관련 정보: 지정된 파일의 크기나 최종 수정 날짜를 웹 페이지에 삽입한다.
  • 다른 파일 포함: 동일한 웹 서버에 있는 다른 파일의 내용을 가져와 웹 페이지에 삽입한다. 클라이언트 측에서는 이미 포함된 상태이므로, 브라우저에서 소스를 봐도 include 지정이 대체되어 있어 구별할 수 없다.[1]

4. 1. 일반 지시어

다음은 NCSA HTTPd(1990년대) 시대의 SSI 지시어이다.[5] 일부 구현에서는 이들 중 일부를 지원하지 않는다.[6]

NCSA HTTPd SSI 지시어
지시어매개변수설명
includefile 또는 virtual가장 많이 사용되는 SSI 지시어이다. 이를 통해 한 문서의 내용을 다른 문서에 포함할 수 있다. 포함된 문서는 다른 SSI 지원 파일일 수도 있다. `file` 또는 `virtual` 매개변수는 포함할 파일(HTML 페이지, 텍스트 파일, 스크립트 등)을 지정한다. NCSA HTTPd는 `include`를 통한 CGI를 지원하지 않았지만,[5] 이후 Apache HTTPd는 지원한다.[7] 프로세스가 파일을 읽거나 스크립트를 실행할 수 있는 권한이 없으면 include는 실패한다. "`virtual`" 매개변수는 모든 디렉토리 경로를 URL의 일부로 처리하는 반면, "`file`"은 기본 파일 시스템의 모든 디렉토리 경로를 처리한다. "`file`"을 사용할 때는 절대 경로 또는 상위 디렉토리에 접근하기 위한 `../`의 참조가 금지된다. Apache 설명서는 "`file`"보다 "`virtual`"을 사용하는 것을 권장한다.[7]
execcgi 또는 cmd이 지시어는 서버에서 프로그램, 스크립트 또는 셸 명령을 실행한다. `cmd` 매개변수는 서버 측 명령을 지정하고, `cgi` 매개변수는 CGI 스크립트의 경로를 지정한다.
echovar이 지시어는 지정된 HTTP 환경 변수의 내용을 표시한다.
configtimefmt, sizefmt, 또는 errmsg이 지시어는 날짜, 시간, 파일 크기 및 오류 메시지(SSI 명령이 실패했을 때 반환됨)에 대한 표시 형식을 구성한다.
flastmodfsizefile 또는 virtual이 지시어는 지정된 문서가 마지막으로 수정된 날짜 또는 지정된 문서의 크기를 표시한다. `file` 또는 `virtual` 매개변수는 사용할 문서를 지정한다. `file` 매개변수는 문서를 문서 경로에 상대적으로 정의하고, `virtual` 매개변수는 문서를 문서 루트에 상대적으로 정의한다.


4. 2. 제어 지시어

제어 지시어는 나중에 SSI에 추가되었다. 여기에는 널리 사용되는 if-elif-else-endif 흐름 제어와 변수 쓰기, 그리고 일부 구현에서만 발견되는 루프와 같은 더 이국적인 기능이 포함된다.

지시어매개변수설명예시다음에서 발견됨
if영어, elif영어, else영어, endif영어exprif문. 단일 물리적 페이지에서 여러 논리적 페이지를 결정하고 생성할 수 있는 조건 테스트에 사용된다. elif는 중첩된 else-if의 축약형이다. elseendif는 매개변수를 허용하지 않는다.널리 사용됨.
set영어var, valueSSI 변수의 값을 설정한다. 아파치는 인코딩에 대한 추가 매개변수를 제공한다.[8]아파치,[8] Nginx[9]
printenv이 지시어는 환경 변수 및 사용자 정의 변수를 포함하여 모든 SSI 변수와 해당 값을 출력한다. 속성이 없다.아파치[8]


4. 3. 실행 가능한 명령 (일본어 문서)

SSI 변수 값을 웹 페이지에 삽입한다.[1] 시스템 명령어나 CGI 프로그램을 실행하고, 그 출력 결과를 웹 페이지에 삽입한다.[1] 지정된 파일의 크기를 웹 페이지에 삽입한다.[1] 웹 페이지 내에 파일의 최종 수정 날짜를 삽입한다.[1] 동일한 웹 서버에 있는 다른 파일의 내용을 가져와 웹 페이지 내에 삽입한다. 클라이언트 측에서는 이미 포함된 상태이므로, 브라우저 등에서 소스를 봐도 include 지정이 대체되어 있어 구별할 수 없다.[1]

참조

[1] 웹사이트 SSI Commands https://www.w3.org/J[...] 2019-03-24
[2] 웹사이트 Configuring your server to permit SSI http://httpd.apache.[...] The Apache Software Foundation 2015-06-24
[3] 웹사이트 Server Side Includes Turing machine, Jan Schejbal. http://www.janschejb[...] Janschejbal.de 2012-12-06
[4] 웹사이트 Basic SSI Directives and Syntax http://httpd.apache.[...] 2018-02-09
[5] 웹사이트 Server Side Includes (SSI) http://hoohoo.ncsa.u[...] 2019-03-24
[6] 웹사이트 Module ngx_http_ssi_module http://nginx.org/en/[...] 2021-11-16
[7] 웹사이트 Apache Module mod_include http://httpd.apache.[...] Apache Software Foundation 2021-09-07
[8] 웹사이트 mod_include https://httpd.apache[...] 2019-03-25
[9] 웹사이트 ngx_http_ssi_module https://nginx.org/en[...] 2019-03-25



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com