420 likes | 944 Views
프로그래밍언어론 담당교수 : 박 양 하. 2 주 : 프로그래밍 언어의 기초. 프로그래밍 언어의 개념 학습이유. 생각을 표현할 수 있는 능력이 향상된다 . 프로그래밍 언어의 특징에 대해 폭넓고 다양하게 알고 있으면 소프트웨어 개발에 있어서 제어구조 , 데이터구조 , 추상화의 종류에 대한 제약을 줄 일 수 있음 따라서 프로그래머는 새로운 언어 구조를 배워서 소프트웨어 개발에 대한 사고를 향상 시킬 수 있음 프로그래밍 언어의 개념을 배움으로써 프로그래머는 언어의 좋은 특징들을 잘 이해하고 사용할 수 있음
E N D
프로그래밍언어론 담당교수 : 박 양 하 2주 : 프로그래밍 언어의 기초
프로그래밍 언어의 개념 학습이유 • 생각을 표현할 수 있는 능력이 향상된다. • 프로그래밍 언어의 특징에 대해 폭넓고 다양하게 알고 있으면 소프트웨어 개발에 있어서 제어구조, 데이터구조, 추상화의 종류에 대한 제약을 줄 일 수 있음 • 따라서 프로그래머는 새로운 언어 구조를 배워서 소프트웨어 개발에 대한 사고를 향상 시킬 수 있음 • 프로그래밍 언어의 개념을 배움으로써 프로그래머는 언어의 좋은 특징들을 잘 이해하고 사용할 수 있음 • 다른 언어로 모의 실험을 하여 가장 좋은 특징들을 포함하는 새로운 언어를 설계할 수 있음
프로그래밍 언어의 개념 학습이유(Cont’d) • 적합한 언어를 선택할 수 있는 배경이 향상된다 • 많은 프로그래머들이 새로운 프로젝트에 사용될 언어를 선택하게 될 경우에 자신이 가장 잘 알고 있는 언어가 그 프로젝트에 적합하지 않을지라도 그 언어를 계속 선택하려고 함 • 다양한 언어의 특별한 특징을 잘 알고 있다면 언어를 선택하는데 있어서 더 나은 배경을 갖게 됨 • 새로운 언어를 배울 수 있는 능력이 향상된다. • 컴퓨터 프로그래밍은 매우 성장하고 있는 분야로 설계 방법론, 소프트웨어 개발도구, 프로그래밍 언어 등은 계속 발전 중 • 언어의 기본적인 개념을 이해하고 나면 배우고 있는 언어의 설계에 개념들이 어떻게 수용되어 있는지 쉽게 알 수 있음
프로그래밍 언어의 개념 학습이유(Cont’d) • 구현의 중요성에 대해 보다 많이 이해한다. • 구현상의 고려 사항을 이해함으로 해당 언어가 왜 이렇게 설계되었는지를 이해하고 보다 지능적으로 그 언어를 사용할 수 있는 능력을 갖추게 됨 • 컴퓨터가 다양한 언어구조를 어떻게 실행시키는지 이해하여 선택할 수 있는 다른 구조와의 상대적인 효율성을 잘 이해할 수 있음 • 전반적으로 전자계산 분야의 이해가 향상된다. • 정보조직, 검색 및 이용자중심 디지털도서관 서비스(예 : CWA기반 디지털도서관) 기획에 도움이 된다.
프로그래밍 영역 • 과학응용분야 • 1940년대 발표된 첫 디지털 컴퓨터가 사용 • 전형적으로 간단한 데이터 구조를 가지나 상당한 양의 부동소수점에 대한 산술 연산을 필요 • 가장 일반적인 데이터 구조는 배열과 행렬, 제어구조는 계수 루프 선택문 • 첫 번째 사용 언어는 Fortran • 사무응용분야 • 1950년대부터 사용 • 상세한 보고서를 생성할 수 있는 특징, 십진수와 문자 데이터를 세밀하게 표현하고 저장할 수 있는 방법, 십진수의 산술 연산을 표현할 수 있는 능력 포함 • 스프레드 시스템, 데이터베이스 시스템 • 첫 번째 사용언어 COBOL(아직도 많이 사용)
프로그래밍 영역(cont’d) • 인공지능(Artificial Intelligence) 분야 • 수치 계산보다 기호의 계산(이름으로 구성된 기호 조작)으로 사용으로 특징 • 다른 분야보다 더 많은 융통성 요구 • 첫 번째 사용언어 LISP(이후 Prolog, Scheme) • 문헌정보학 분야 • 정보조직 • 색인, 시소러스 처리 등을 할 때는 사무 응용분야의 기술 필요 • 자동분류 등을 처리할 때는 인공지능 분야의 기호 계산 방식 필요 • 정보검색 • 가중치, 결합법칙 등을 적용하기 위해서는 과학응용분야의 산술연산 방식 필요
프로그래밍 영역(cont’d) • 시스템 프로그래밍 • 시스템소프트웨어 : 운영체제와 컴퓨터 시스템에 속한 모든 프로그래밍 지원 도구 총괄 • 계속적으로 사용되는 실행 효율성 필요 • 외부장치와의 소프트웨어 인터페이스를 작성할 수 있는 저급 수준의 특징 제공 • UNIX 운영체제는 거의 C로 작성(실행효율적)
프로그래밍 영역(cont’d) • 스크립트 언어 • 초기 스크립트 언어는 명령들의 리스트를 한 개의 실행될 파일로 작성함으로 사용 • 첫번째 스크립트 언어는 sh(shell) : 파일 관리나 간단한 파일 필터링같은 부프로그램의 호출로 해석되는 명령들의 작은 집합으로 시작 • 이 후 변수, 제어문, 함수, 다양한 다른 특징들을 추가하여 하나의 완벽한 프로그래밍 언어가 됨 • www의 사용으로 CGI(Common Gateway Interface) 프로그래밍에 거의 이상적인 언어로 Perl의 사용이 급격하게 상승 • JavaScript : 웹 서버와 브라우저에 사용하기 위해 Netscape사에서 개발(대부분 클라이언트 측 스크립트 언어로 사용), HTML문서에 포함
프로그래밍 영역(cont’d) • PHP(Hypertext Preprocessor) • 웹 서버 시스템에서 사용목적으로 설계 • HTML 문서에 포함 • 문서가 요청한 브라우저에 전달되기 전에 서버상에서 해석 • 특정 목적 언어 • RPG : 사무보고서를 생성하는 데 사용 • APT : 프로그래밍 가능한 기계 도구에 명령어를 입력하는데 사용 • GPSS : 시스템 시뮬레이션을 위해 사용 • 특정 목적 언어는 적용 범위가 좁고 다른 언어와 비교하기 어려움
언어 평가 기준 • 판독성 • 프로그램을 얼마나 쉽게 읽고 이해할 수 있는가? • 효율성과 기계 판독성(컴퓨터 관점)-유지보수의 용이성을 위한 인간 중심의 판독성으로 전환 • 판독성에 기여하는 특성 • 전반적 단순성(overall simplicity) : • 작성자와 독자의 언어 요소의 불일치, • 다중성(특정 연산을 한 가지 이상의 방법으로 수행), 중복(한 연산자 기호가 하나 이상의 의미를 가질때)에 의해 복잡성의 문제 대두 • 직교성(orthogonality) : • 언어의 기본 요소간 관계의 대칭성으로 정의, • 직교성이 결여되면 언어 규칙에 예외 사항을 초래, • 단순성과 관련, 언어 설계가 직교적일수록 언어의 규칙은 더 적은 예외사항을 요구하며, 언어를 배우고 읽고 이해하기 쉽게 함
언어 평가 기준(Cont’d) • 데이터 타입과 구조 : 언어가 데이터 타입과 데이터 구조를 정의할 수 있는 충분한 장치를 제공하면 판독성에 상당히 도움이 됨 • 구문고려사항 : 식별자 형태, 특수어, 형태와 의미 등을 표시하면 판독성을 높일 수 있음 • 작성력 • 선택한 문제 영역에 대해서 프로그램을 생성하기 위해 언어가 얼마나 쉽게 사용될 수 있는가? • 판독성과 밀접한 관계 • 작성력에 영향을 미치는 요소 • 단순성과 직교성 : • 알고 있지 않은 요소를 우연히 사용하여 이상한 결과를 초래, 적은 수의 기본 구조와 이들을 조합하기 위한 일관된 규칙(직교성)을 갖는 것이 좋음 • 지나친 직교성은 작성력에 해가 되기도 함 : 오류 탐지의 어려움으로 불합리성 초래 가능성
언어 평가 기준(Cont’d) • 추상화(abstraction)의 지원 : • 복잡한 데이터 구조나 연산을 정의하고 사용할 수 있는 능력 • 오늘날 프로그래밍 언어 설계방법론에서 중요한 개념 • 프로세스 추상화, 데이터 추상화 • 프로세스 추상화 : 부프로그램 사용(여러 번 사용되는 정렬 알고리즘을 구현) • 데이터 추상화 : 정수 데이터를 포함하는 간단한 클래스 형태 구현 • 표현력(expressivity) : • 계산 표현을 위해 편리한 방법을 가지고 있음 • 예 : count++ vs count=count+1
언어 평가 기준(Cont’d) • 신뢰성 • 모든 조건 하에서 주어진 명세 수행의 척도 • 신뢰성에 영향을 미치는 요소 • 타입 검사(type checking) • 컴파일러나 프로그램 실행 중에 주어진 프로그램에 대해서 타입 오류를 검사하는 것(컴파일러 검사가 저비용) • 초기에 오류를 탐지할수록, 수정에 소요되는 비용과 시간이 적음 • 예 : float 타입을 예상하는 함수의 호출에서 int 타입 변수가 실매개변수로 사용될 수 있음 • 예외처리(exception handling) • 실행 시간 오류를 가로채서 올바르게 수정, 계속 실행할 수 있는 능력 • C++, Java는 예외 처리에 뛰어남
언어 평가 기준(Cont’d) • 별칭(aliasing) • 동일 기억장소에 대해 두 개 또는 그 시앙의 다른 참조방법(혹은 이름)을 갖는 것 • 언어에서 결여된 데이터 추상화 특징을 지원 • 그러나 프로그래밍 언어에서의 위험한 특징, 신뢰성 향상을 위해 제약시킴 • 판독력과 작성력 • 프로그램이 쉽게 작성될수록, 그 프로그램이 올바를 가능성이 높음 • 판독성은 소프트웨어 생명주기에서 코딩과 유지보수의 두 단계에서 신뢰성에 영향을 줌 • 읽기 어려운 프로그램은 작성하거나 수정하기가 어려워짐
언어 평가 기준(Cont’d) • 비용 • 최종적 비용 합계에 영향을 미치는 특성 • 프로그래머를 교육시키는 비용(언어의 단순성, 직교성, 프로그래머의 경험에 의해 결정) • 프로그램 개발 비용 : 작성력에 의해 결정, 그 언어가 특정 응용분야에 얼마나 적합한가에 의존 • 프로그램을 컴파일하는 비용 • 프로그램 실행비용 : 언어 설계에 영향 받음, • 최적화는 컴파일러가 생성하는 코드의 크기를 줄이고 실행 속도를 향상시키기 위해 사용되는 기법들의 집합 • 언어 구현 시스템을 위한 비용 • 신뢰성 부족에 다른 비용 • 프로그램 유지보수 비용 : 판독성에 영향받음 • 기타기준 • 이식성, 일반성, 분명성
언어 설계에 미친 영향 설계의가장 중요한 요소는컴퓨터 구조와프로그램 설계 방법론 • 컴퓨터 구조 • 명령형(imperative) 언어와함수형언어 • 명령형언어 : • 데이터와 프로그램 모두 동일한 기억장소에 저장, 실제 명령어 실행을 담당하는 중앙처리장치(CPU)는 기억장소로부터 분리 명령어와 데이터는 기억장소로부터 CPU에 파이프(전달)되어야 하고 CPU 연산결과는 다시 기억 장소에 전달 • 명령형 언어의 중심 특징은 변수, 배정문, 반복문 • 변수 : 기억장소 셀을 모델 • 배정문 : CPU와 기억장소간에 데이터 이동 연산 기반 • 반복문 : 구조상 반복연산 표현에 재귀 함수보다 효과적 • 함수형언어 : 모든 계산을 함수 인자에 적용함으로 이뤄짐, 배경문, 변수가 필요 없음, 반복을 재귀 호출로 표현하여 루프가 필요하지 않음
언어 설계에 미친 영향 • 논리 프로그래밍과 객체 지향 프로그래밍 • 논리 프로그래밍 • 계산 프로세스를 컴퓨터에 전달하기 위해 형식적인 논리표기 사용 • 술어 해석학(predicate calculus)는 논리 프로그래밍에서 사용되는 표기 • 비절차적 프로그래밍으로 결과의 형태를 서술 • 논리 프로그래밍이 널리 사용되지 않는 이유 • 비효율적, 매우 제한된 분야(특정 DBMS나 AI의 일부영역)에서 효과적 • 객체지향 프로그래밍 • 세가지 기본적 개념 : 데이터 타입, 상속, 동적 바인딩 • 실세계 객채들과 객체에 필요한 프로세스를 식별후 객체, 프로세스, 객체들 간 통신에 대한 실험을 생성함으로 문제를 해결
언어 설계에 미친 영향(Cont’d) • 명령형 프로그래밍 언어 구조는 보다 기계 구조 관점에서 모델링 되었지만 함수언어 보다 더 많이 사용되고 있는 것이 현실임 • 설계 방법론 • 1970년대 초기 • S/W 개발 과정과 프로그래밍 언어 설계에 대해 분석이 이뤄졌음 • H/W 비용 대비 프로그래머 비용 증가에 대한 문제에서 비롯 • 결과 : 하향식 설계와 단계적 세분화(타입 검사의 불완전성과 제어문의 불충분을 야기 : goto문 남발) • 1970년대 후반 • 프로세스 지향 프로그램 설계에서 데이터 지향 프로그램 설계 방법론으로 이동 • 데이터 추상화과 시스템 설계에 효과적(시스템에 사용된 언어에 의해 지원)
언어 설계에 미친 영향(Cont’d) • 1980년대 초반 • 객체지향 설계 방법론 : 데이터 추상화로 시작 • 연산과 데이터 객체를 캡슐화(encapsulation)하고 데이터에 대한 접근을 은폐 시키고 상속(inheritance : 기존 소프트웨어의 가능한 재사용 향상 가능성)과 동적 타입 바인딩(dynamic type binding : 유연한 상속 사용 허용)을 추가 • 최근 • 동시성(concurrency)분야에서 프로세스지향 프로그래밍에 대한 연구가 이어지고 있음 • 동시에 수행되는 프로그램 단위를 생성하고 제어하기 위한 언어 특징의 필요성 제기
언어 설계 절충 Hoare : “중요하지만 상충되는 평가 기준들이 있으므로 상당히 많은 이들을 타협하고 만족시키는 것은 중요한 공학적 작업” • 신뢰성과 실행비용의 상충 • 예 : 의미적으로 동등한 Java와 C • Java 언어 정의는 배열 원소에 대한 모든 참조에 대해 검사를 요구하지만 이는 실행 비용을 크게 증가시킴, C보다 신뢰성이 높음 • C는 첨자범위 검사를 요구하지 않아 Java보다 빠른 실행을 제공 • 작성력과 판독성의 상충 • 예 : APL은 배열 피연산자를 위한 강력한 연산자 집합을 포함하고 있어서 표현력이 높아 작성력이 좋음, 그러나 함축되고 간결하고 명확한 식은 작성한 사람 외에 알아보기 어려워 판독력이 떨어진다고 할 수 있음
언어 설계 절충(Cont’d) • 유연성과 안정성의 상충 • 예 : Pascal의 가변 레코드(한 메모리 셀이 다른 시간에 다른 타입의 값을 포함하는 것을 허용함으로 유연성이 강조되나 타입검사에서 프로그램에게 포인터의 산술연산을 허용하는 허점(loophole)을 제공) • 타협과 절충(trade-off) • 많은상충의 예들이 있음 • 상충의 정도가 어떤 것은 미세하고 어떤 것은 명확함 • 따라서 프로그래밍 언어를 설계할 때 언어 구조와 특징을 선택하는 작업에 타협과 절충이 필요
프로그램언어의 구현방법 • 컴파일 • 가장 극단적인 방법으로 프로그램은 컴퓨터에서 직접 실행될 수 있는 기계 언어로 번역 • 장점 : 일단 번역과정이 완료되면 매우 빠르게 프로그램을 실행시킬 수 있음(C, COBOL, Ada)
프로그램언어의 구현방법(cont’d) • 순수해석 • 순수해석(pure interpretation) 은 구현방법에서 컴파일과 정 반대, 번역 없이 인터프리터라 는 다른 프로그램에 의해 해석 • 장점 : 많은 원시 프로그램 수준의 디버깅 연산을 쉽게 구현 (오류발견용이), JavaScript, PHP와 같은 웹 스크립트 언어에 의해 다시 사용 • 단점 : 실행 속도 저하, 많은 기억공간 요구 원시프로그램 입력데이터 인터프리터 결과
프로그램언어의 구현방법(cont’d) • 혼합형 구현 시스템 • 혼합형 구현 시스템(hybrid implementation system)컴파일러와 인터프리터의 절충형, 고급 언어 프로그램을 쉽게 해석하기 위해 설계된 중간언어로 번역 • 원시 언어 문장이 한번만 해석
프로그래밍 언어의 발전사 • 의사코드 : 최초의 하드웨어 프로그래밍 • 1940년대 후반~1950년대 초반 컴퓨터 성능이 높지 못한 시절 기계 언어가 가지는 단점인 잦은 오류와 판독력을 높이기 위해 고안 • 특정 프로그래밍 언어의 문법을 따라 씌여진 것이 아니라, 일반적인 언어로 코드를 흉내내어 알고리즘을 써놓은 코드. 의사(疑似)코드는 말그대로 흉내만 내는 코드이기 때문에, 실제적인 프로그래밍 언어로 작성된 코드처럼 컴퓨터에서 실행할 수 없으며, 특정 언어로 프로그램을 작성하기 전에 알고리즘의 모델을 대략적으로 모델링하는 데에 사용 • 일종의 인덱스 기법을 요구하여 사용되었으나 활성화 되지 못하고 보다 높은 수준의 언어 개발을 초래
프로그래밍 언어의 발전사(cont’d) • Fortran • 일반적으로 첫 컴파일 된 고급 언어로 인정 • 여전히 처리능력은 작고, 느리고, 상대적으로 신뢰성이 없음 • 컴퓨터는 주로 과학 계산 분야에서 이뤄짐 • 프로그래머의 비용보다 컴퓨터 비용이 높아서 생성된 목적 코드의 속도가 포트란 컴파일러의 주 목적 • 평가 : 많은 부족함에도 불구하고 컴퓨터가 사용되는 방식을 영원히 극적으로 변화시킨 언어 • LISP • 첫 번째 함수 프로그래밍 언어로 리스트 처리를 위한 언어 특징 제공 • 인공지능 분야의 첫 번째 응용 프로그램 • 관련언어 : Scheme, ML(메타언어), Miranda, Haskell 등
프로그래밍 언어의 발전사(cont’d) • ALGOL 60 • 정교화를 향한 첫 단계, 범용 언어 설계 노력의 결과 • 국제적인 프로그래밍 설계 그룹이 결성되는 등 알고리즘을 기술하는 유일한 언어로 남았으나 자체적으로는 크게 성공하지 못함 • 계보 : Fortran I(1957), ALGOL 58(1958), ALGOL 60(1960) • 직간접적 후손 : PL/I, SIMULA 67, ALGOL 68, C, Pascal, Ada, C++, Java 등 • COBOL • 사무 기록의 전산화를 위한 시스템 • 매크로를 위해 처음으로 사용된 고급 언어 구조, 계층적 데이터 구조가 COBOL에서 처음 구현(모든 명령형 언어에 사용) • 데이터 영역에 강하고 프로시저 영역이 상대적으로 약함 • 회계분야의 전산화를 가져오게 됨 • 계보 : FLOW_MATIC(1957), COBOL(1960)
프로그래밍 언어의 발전사(cont’d) • BASIC • 시분할의 발단을 가져옴 • 원격 컴퓨터에 연결된 터미널을 통해 사용된 최초 언어 • 개발 목적 : 쉽게 배울 수 있으며 소형 컴퓨터에서 쉽게 구현 • 비 과학 전공학생들이 배우고 사용하기 쉬워야 함 • 사용자에게 즐거움을 주고 친숙해야 함 • 숙제를 원활히 할 수 있도록 빠른 작업 처리 시간 제공 • 자유롭고 개인적인 접근 허용 • 사용자 시간을 컴퓨터 시간보다 더 중요하게 생각 • 발달과정 • 1970년대 후반~1980년대 초반 널리 사용 • 1990년대 Visual BASIC(1991)의등장으로 사용 증가 • 계보 : ALGOL 60(1960) & Fortran IV(1962), BASIC(1964), QuickBASIC(1988), Visual BASIC(1990), Visual BASIC.NET(2002)
프로그래밍 언어의 발전사(cont’d) • PL/I • 광범위한응용 분야에 사용될 수 있는 언어를 설계하려는 첫 번째 대규모 시도 • 이전, 이후 대부분의 언어는 과학, 인공지능, 사무분야 등 특정 한가지 응용 분야에 초점을 둠 • 계보 : COBOL(1960) & ALGOL(1960) & Fortran IV(1962), PL/I(1965) • APL과 SNOBOL • 초기동적 언어 • 동적 타입과 동적 기억장소 할당 • 다른 기존 언어에 기반 주지 않고 다른 언어에도 많은 영향을 미치지 못함
프로그래밍 언어의 발전사(cont’d) • SIMULA 67 • 데이터추상화의 발단 • 클래스 구조 개발 : 데이터 구조와 데이터 구조를 조작하는 루틴들을 함께 묶는 것 • 계보 : ALGOL(1960), SIMULA I(1964), SIMULA 67(1967) • ALGOL 68 • 최초의직교적 설계 • 사용자-정의 데이터 타입의 포함(몇 개의 기본적인 타입과 구조체를 제공하고 사용자가 이러한 구조 타입들을 다양하고 많은 구조체로 결합하는 것을 허용) • ALGOL의 후손들 • Pascal(1971) : 설계의단순성 • 프로그래밍 교육 목적으로 가장 널리 사용된 언어 • 1990년대 중반 이후로 인기가 감소 추세
프로그래밍 언어의 발전사(cont’d) • C(1971) : 이식성 • 폭 넓고 다양한 응용 분야에 매우 적합 • 충분한 제어문과 데이터 구조할 수 있는 특징 제공, 높은 표현력 허용을 위한 연산자 제공(그러나 완벽한 타입 검사를 제공하지 않음) • 계보 : CPL(1963), ALGOL(1968), BCLP(1969), B(1970), C(1971), C++(1985) & ANSI C(1989), C99 • Prolog • 논리기반 프로그램 • 계산 프로세스를 컴퓨터에 전달하기 위해 형식적인 논리 표기인 술어 해석학(Predicate calculus)을 사용 • 프로그래밍은 비절차적, 결과의 형태를 서술 • 간결하고 명확함
프로그래밍 언어의 발전사(cont’d) • Ada • 가장 광범위하고 가장 많은 비용이 투여된 언어 • 규모가 크고 복잡한 반면 신뢰성이 필요한 응용분야를 위해 설계 • 계보 : Pascal(1971), Ada 83(1983), Ada 95(1995) • Smalltalk • 객체지향프로그래밍 • 단순한 언어가 아니라 완벽한 소프트웨어 개발환경 • 인터페이스의 사용에 있어서 상당히 그래픽적임 • C++ • 명령형 특징과 객체지향 특징의 결합 • Smalltalk의 것을 지원하기 위해 C에 특징을 추가
프로그래밍 언어의 발전사(cont’d) • Java • 명령형 + 객체지향 언어 • C++의강력함과 유연성을 제공하면서 규모는 작아지고 더욱 단순하고 더욱 안전한 언어로 설계(1994) • 웹을 위한 스크립트 언어 • 1990년대 중반 이 후 웹 사용이 폭발적으로 증가, HTML과 관련된 계산에 대한 필요성이 급격하게 요구 • 서버 측 스크립트 언어와 클라이언트 측 스크립트 언어의 등장이 요구 됨 • 클라이언트 측 언어 : 클라이언트측에서 직접 처리하는 언어이며 때문에 서버에 부하를 주지 않음, JavaScript 등 • 서버 측 언어 : 서버는 웹서비스를 하면서 웹브라우저를 통해 정보를 뿌려주게 되어 있음, 웹브라우저가 인식할 수 있는 HTML코드로 변환, PHP, ASP, JSP 등
웹프로그래밍 언어 • 웹프로그램은 정적인 것과 동적인 것이 존재 • 정적 : HTML처럼 변하지 않고 프로그래머가 짜놓은 그대로 화면에 나타내어 지는 것 • 동적 :ASP,PHP,JSP,PERL(CGI)처럼 프로그램을 해 놓은 상태에서 각 웹사이트를 돌아 다니시다 보면 화면이 매번 바뀌는 것을 볼 수 있을겁니다. • 웹프로그램은 그 어느 것을 말하는 것이 아닌 HTML과 ASP,PHP,JSP,PERL(CGI)등이 같이 쓰여져 웹페이지에서 글도 쓰고 회원가입도 하는 인터넷으로 할수 있는 모든 서비스 • HTML은 화면에 보여지는 자체가 HTML이고 ASP,PHP,JSP,PERL(CGI)등은 HTML에 생명을 불어 넣는 프로그램 ASP,PHP,JSP,PERL(CGI)는 HTML이 없이는 화면에 보여질 수 없음
웹프로그래밍 언어 • ASP(Active Server Page) • MicroSoft의 IIS(Internet Information Server)에서 사용 • Visual Basic의 스크립트 버전인 Visual Basic Script 사용 • Windows 서버의 여러 기능 활용을 통한 높은 생산성, 강력한 기능의 쉬운 구현 • WINDOW NT계열, IIS서버, MSSQL데이타베이스, 중소형쇼핑몰 • PHP(Hypertext Preprocessor) • 1994년 rasmus lerdorf라는 사람에 의해 처음으로 고안이 되었으며 자신의 개인홈페이지를 만들기 위해 사용 • 웹서버인 아파치웹서버에 모듈형태로 장착되어 쓰임, 유닉스뿐만 아니라 윈도우에서도 사용이 가능 • ASP의 ODBC나 JSP의 JDBC와 같이 보조적인 메커니즘이 필요하지 않고 바로 함수를 통한 처리방식을 채택, 즉 데이터베이스에 대한 공통 인터페이스를 가지고 있지 않고 모든 DB에 대해 자체 라이브러리를 지원
웹프로그래밍 언어(cont’d) • php의 최대 장점은 사이트에서 다운받아 무료로 사용 • 대부분의 운영체제를 지원하며 데이타베이스를 다양하게 지원 • 함수가 많아 작업이 편리 • 리눅스계열, APACHE서버, MYSQL데이타베이스, 개인 혹은 중소형소핑몰사용 • JSP(Java Server Page) • JAVA를 기반으로 하는 SUN사에서 개발한 언어 • 주로 은행이나 중요회사에 많이 쓰이며 보완성이 뛰어남 • 하지만 코딩이 어렵고 ASP에 비해 코드량이 1.5배 가량 됨 • 동작 가능한 곳은 리눅스와 윈도우즈 모두 가능하며 데이타베이스도 다양하게 지원 • JVM(Java Visual Machine)이라는 프로그램이 운영체제 위에 설치되면 기종을 가리지 않고 사용할 수 있기 때문에 코딩이 어려워도 요즘 많이 쓰이는 추세 • WINDOW혹은 리눅스 계열, TOMCAT혹은 RESIN서버, ORACLE데이타베이스, 은행 및 보안중요성회사, 대형쇼핑몰에 사용