MySQL


MySQL의 (공식적으로 발음 /의 m aɪ ˌ ɛ S K JU ɛ L / "내 SQL", [6] )가있다 오픈 소스 관계형 데이터베이스 관리 시스템 (RDBMS)에. [7] 그 이름은 "My", 공동 설립자 Michael Widenius 의 딸 이름 [8] 과 " Structured Query Language "의 약어 인 " SQL "의 조합 입니다. MySQL의 개발 프로젝트는 만든 소스 코드 의 조건에 따라 사용할 수 GNU 일반 공중 사용 허가서뿐만 아니라 다양한 독점 계약을 맺고 있습니다. MySQL은 소유하고 단일 후원 한 비영리 기업의 스웨덴어 기업 의 MySQL AB 지금 소유, 오라클 . [9] 독점 사용을 위해, 여러 지불 버전을 사용할 수 있습니다 및 추가 기능을 제공합니다.


MySQL은 LAMP 오픈 소스 웹 애플리케이션 소프트웨어 스택 (및 다른 " AMP "스택) 의 핵심 구성 요소입니다 . LAMP는 " Linux , Apache , MySQL, Perl / PHP / Python " 의 머리 글자입니다 . MySQL 데이터베이스를 사용하는 응용 프로그램에는 TYPO3 , MODx , Joomla , WordPress , phpBB , MyBB 및 Drupal이 있습니다. MySQL은 Google [10] [11] (검색은 아닐지라도)을 포함하여 많은 유명하고 대규모 인 웹 사이트 에서도 사용됩니다 .페이스 북 , [12] [13] [14] 트위터 , [15] 플리커 , [16] 그리고 유튜브 . [17]


개요


MySQL은 C 및 C ++로 작성되었습니다 . SQL 구문 분석기는 yacc 로 작성 되었지만 자체 추출 된 어휘 분석기를 사용 합니다. [18] MySQL은 많은 작동 시스템 플랫폼 을 포함하여, AIX , BSDi의 , FreeBSD의 , HP-UX , eComStation , I5 / OS , IRIX , 리눅스 , 맥 OS , 마이크로 소프트 윈도우 , NetBSD의 , 노벨 넷웨어 , 오픈 BSD , 오픈 솔라리스 , OS / 2Warp, QNX , Oracle Solaris , Symbian , SunOS , SCO OpenServer , SCO UnixWare , Sanos 및 Tru64 등이 있습니다. OpenVMS에 대한 MySQL 포트 도 존재합니다. [19]


MySQL 서버 소프트웨어 자체와 클라이언트 라이브러리는 이중 라이센스 배포를 사용합니다. 그들은 GPL 버전 2에서 제공되는 [20] 2000년 6월 28 일부터 시작 [21] (2009 년에 확장 된 FLOSS의 라이센스 예외) [22] 또는 독점 라이센스를 사용합니다. [23]


지원은 공식 매뉴얼에서 얻을 수 있습니다. [24] 무료 IRC 채널과 포럼에서 추가 지원이 가능합니다. 오라클은 MySQL Enterprise 제품을 통해 유료 지원을 제공합니다. 그들은 서비스의 범위와 가격면에서 다릅니다. 또한 MariaDB 및 Percona를 비롯한 여러 가지 타사 조직이 지원 및 서비스를 제공합니다 .


MySQL은 긍정적 인 리뷰를 받았으며 리뷰어는 "평균적인 경우에 매우 잘 수행됩니다."그리고 "개발자 인터페이스가 있으며 문서 (웹 사이트 등을 통해 실제 세계에서의 피드백은 물론) 아주 좋아. " [25] 또한 "빠르고 안정적이고 진정한 다중 사용자, 다중 스레드 SQL 데이터베이스 서버"로 테스트되었습니다. [26]


역사


MySQL은 David Axmark , Allan Larsson 및 Michael "Monty"Widenius가 설립 한 스웨덴 회사 인 MySQL AB 가 만들었습니다 . Widenius와 Axmark에 의한 MySQL의 원래 개발은 1994 년에 시작되었다. [27] MySQL의 첫 번째 버전은 1995 년 5 월 23 일에 등장했다. 처음에는 저급 언어 ISAM을 기반으로 mSQL 에서 개인용으로 제작되었는데, 유연하지 못합니다. 그들은 mSQL 과 동일한 API 를 유지하면서 새로운 SQL 인터페이스를 만들었습니다 . API를 mSQL 시스템과 일관되게 유지함으로써 많은 개발자는 (전적으로 라이센스가 부여 된) mSQL 전례 대신에 MySQL을 사용할 수있었습니다. [[ 표창장은 필요로했다 ][ 반신 반의 - 토론 ]


이정표

MySQL 개발의 추가 이정표 :


1995 년 5 월 23 일 최초의 내부 릴리즈

버전 3.19 : 1996 년 말, www.tcx.se에서

버전 3.20 : 1997 년 1 월

Windows 버전은 Windows 95 및 NT 용으로 1998 년 1 월 8 일에 릴리스되었습니다.

버전 3.21 : www.mysql.com의 프로덕션 릴리스 1998

버전 3.22 : 1998 년부터의 알파, 베타

버전 3.23 : 2000 년 6 월 베타, 2001 년 1 월 22 일 프로덕션 릴리스 [28]

버전 4.0 : 베타 2002 년 8 월, 2003 년 3 월 생산 릴리스 ( 노동 조합 ).

버전 4.01 : 베타 2003 년 8 월부터, 죠티는 [ 명확한 설명이 필요 ] [ 표창장은 필요가 ] 데이터베이스 추적을 위해 MySQL을 채택

버전 4.1 : 2004 년 6 월 베타 버전, 2004 년 10 월 릴리즈 ( R-trees 및 B-tree , 하위 쿼리, prepared statements).

버전 5.0 : 2005 년 3 월의 베타, 2005 년 10 월 프로덕션 릴리스 (커서, 저장 프로 시저, 트리거, 뷰, XA 트랜잭션 )

Federated Storage Engine의 개발자는 "Federated Storage Engine은 개념 증명 (proof-of-concept) 스토리지 엔진입니다." [29] 그러나 MySQL 버전 5.0의 주요 배포판에는 기본 저장소가 포함되어 있습니다. 단점에 대한 문서는 "MySQL 페더 레이 티드 테이블 : 누락 매뉴얼"에 나와 있습니다. [30]

Sun Microsystems 는 2008 년에 MySQL AB를 인수했습니다 .

버전 5.1 : 프로덕션 릴리스 2008 년 11 월 27 일 (이벤트 스케줄러, 분할 , 플러그인 API, 행 기반 복제, 서버 로그 테이블)

버전 5.1에는 버전 5.0에있는 35 개에 추가 된 20 개의 알려진 크래시 및 잘못된 결과 버그 (거의 모든 것이 릴리스 5.1.51에서 수정 됨)가 포함되어 있습니다. [32]

MySQL 5.1 및 6.0-alpha는  단일 쿼리 처리를 위해 여러 CPU 코어를 사용할 수 없기 때문에 데이터웨어 하우징에 사용할 때 성능이 좋지 않았습니다 . [33]

오라클은 2010 년 1 월 27 일 Sun Microsystems를 인수했습니다. [34] [35] [36]

오라클은 썬 인수를 발표 한 마이클 "Monty"Widenius가 MySQL을 포크 에 넣고 MariaDB를 출시 하고 MySQL 개발자들과 함께했습니다. [37]

MySQL Server 5.5는 일반적으로 사용 가능했습니다 (2010 년 12 월 현재 ). 향상된 기능 및 기능은 다음과 같습니다.

디폴트의 ​​스토리지 엔진은 트랜잭션과 참조 무결성 제약 조건을 지원하는 InnoDB이다.

개선 된 InnoDB I / O 서브 시스템 [38]

개선 된 SMP 지원 [39]

반자동 복제.

SQL 표준을 준수하는 SIGNAL 및 RESIGNAL 문

보완 유니 코드 문자 세트 utf16, utf32 및 utf8mb4 지원.

사용자 정의 파티셔닝을위한 새로운 옵션.

MySQL Server 6.0.11-alpha는 2009 년 5 월 22 일에 6.0 라인의 마지막 릴리스 로 발표되었습니다 [40] . 미래의 MySQL 서버 개발은 새로운 릴리스 모델을 사용합니다. 6.0 용으로 개발 된 기능은 향후 릴리스에 통합됩니다.

MySQL 5.6의 일반적인 가용성은 2013 년 2 월에 발표되었습니다. 새로운 기능으로는 쿼리 최적화 프로그램의 성능 향상 , InnoDB의 높은 트랜잭션 처리량, 새로운 NoSQL 스타일의 memcached API, 초대형 테이블 쿼리 및 관리를위한 파티셔닝 개선, TIMESTAMP 컬럼 유형 PERFORMANCE_SCHEMA를 통해 사용 가능한 데이터를 확장하여 밀리 초, 복제 개선 및 성능 모니터링을 올바르게 저장합니다 . [41] InnoDB 스토리지 엔진은 또한 전체 텍스트 검색과 그룹 커밋 성능 향상을 지원합니다.

MySQL 5.7의 일반적인 가용성은 2015 년 10 월에 발표되었습니다 .

MySQL Server 8.0.0-dmr (Milestone Release)는 2016 년 9 월 12 일에 발표되었습니다. [43]


출시 이력 

해제일반 가용성최신 부 버전최신 릴리스
5.12008-11-14 [44]5.1.73 [45]2013-12-03
5.52010-12-03 [46]5.5.562017-05-02
5.62013-02-05 [47]5.6.362017-04-10
5.72015-10-21 [48]5.7.192017-07-17
8.0N / A8.0.1 [49]2017-04-10
전설:
구 버전
여전히 지원되는 이전 버전
최신 버전
최신 미리보기 버전


법적 분쟁 및 인수

2001 년 6 월 15 일, NuSphere 는 MySQL AB, TcX DataKonsult AB 및 원래 저자 인 Michael ( "Monty") Widenius와 David Axmark를 "계약 위반, 제 3 자 계약 및 관계 및 불공정 경쟁에 대한 불법적 인 간섭 ". [50 ]


2002 년 MySQL AB는 Progress NuSphere를 미국 지방 법원 에서 저작권 및 상표권 침해 로 소송했습니다 . NuSphere는 라이선스의 준수없이 MySQL의 GPL 코드와 NuSphere Gemini 테이블을 연결하여 MySQL의 저작권을 침해 한 것으로 추정됩니다. [52] 2002 년 2 월 27 일 Patti Saris 판사 의 예비 심리 후에 당사자들은 합의 회담에 들어가 결국 합의했다. [53] 청문회 후, FSF는 "판사 사리 그녀가 GNU GPL은 집행과 결합 라이센스로 보는 것이 분명했다."논평 [54]


2005 년 10 월, 오라클 은 트랜잭션 및 외래 키 와 같은 기능을 MySQL이 제공 할 수있게 해주는 타사 InnoDB 스토리지 엔진을 개발 한 Finnish 회사 인 Innobase OY를 인수했습니다 . 인수 후 Oracle의 보도 자료에 따르면 MySQL AB 가 사용할 수있는 소프트웨어를 제공하는 계약 은 2006 년에 갱신 (및 재협상) 될 예정입니다. [55] 2006 년 4 월 MySQL 사용자 회의에서 MySQL은 MySQL과 Innobase OY가 라이선스 계약의 "다년간"연장에 동의했음을 확인한 보도 자료. [56]


2006 년 2 월, 오라클은 인수 슬리피 캣 소프트웨어 , [57] 의 업체 버클리 DB , 다른 MySQL의 스토리지 엔진의 기초를 제공하는 데이터베이스 엔진. 버클리 DB는 널리 사용되지 않았기 때문에 거의 영향을 미치지 않았고 2006 년 10 월에 출시 된 MySQL 5.1의 GA 이전 릴리스 인 MySQL 5.1.12에서 삭제되었습니다 (사용 부족으로 인해) .


2008 년 1 월, Sun Microsystems는 MySQL을 10 억 달러에 구입했습니다. [59]


2009 년 4 월, 오라클은 썬 마이크로 시스템즈에 대한 매입 계약을 체결 [60] 다음 MySQL의 저작권 및 상표의 소유자. 썬의 이사회는 만장일치로이 거래를 승인했다. 2009 년 8 월 20 일, 썬의 주주 및 미국 정부의 승인을 받았습니다. [61] 2009 년 12 월 14 일에 오라클 은 지난 4 년 동안했던 것처럼 MySQL [62] 을 계속 개선하겠다고 약속 했습니다.


MySQL은 오라클의 인수에 대해 이동, "MySQL의 저장"하기 [63] 오라클은 MySQL의 설립자 중 하나에 의해 시작되었다 몬티 Widenius에 . 50,000 명 이상의 개발자와 사용자의 청원은 유럽 집행위원회에 인수 승인을 요청했습니다. 동시에, 여러 자유 소프트웨어 오피니언 리더 (포함 에벤 모글렌 , 파멜라 존스 의 그록로 (Groklaw) , 얀 와일데보어 와 카를로 피아 또한 합병 규제 절차의 공동 변호인으로 행동) 합병의 조건없는 승인을 옹호했다. [ 표창장은 필요로했다 ]유럽위원회와의 협상의 일환으로 오라클은 독점 및 GPL 버전을 사용할 수있는 MySQL AB에서 오래 동안 사용하던 이중 라이센스 전략을 사용하기 위해 적어도 2015 년까지 MySQL 서버를 계속 사용할 것이라고 약속했습니다. 유럽 ​​연합 (EU)의 독점 금지법은 "합병 승인을위한 조건으로 MySQL을 포기하도록 압력을 가했다"고 전했다. 그러나 위키 리크 스 (WikiLeaks )에 의해 밝혀진 바와 같이 미 법무부는 오라클의 요청에 따라 EU에 무조건 합병을 승인하도록 압력을 가했다. [64] 유럽 ​​집행위원회는 결국 2010 년 1 월 21 일 오라클의 MySQL 인수를 무조건적으로 승인했다 .


2009 년 1 월 오라클이 MySQL을 인수하기 전에 Monty Widenius는 GPL 전용 포크 인 MariaDB를 시작했습니다 . MariaDB는 MySQL 서버 5.5와 동일한 코드 기반을 기반으로하며 Oracle 제공 버전과의 호환성을 유지하는 것을 목표로합니다. [66]


특징


MySQL은 오픈 소스 MySQL Community Server와 독점 Enterprise Server의 두 가지 버전으로 제공됩니다 . [67] 의 MySQL Enterprise Server는 서버 플러그인으로 설치 독점 확장하는 일련의 구별하지만, 그 버전 번호 체계를 공유하고 동일한 코드베이스에서 내장되어있다.


MySQL 5.6에서 사용 가능한 주요 기능 :


확장 기능뿐 아니라 ANSI SQL 99 의 광범위한 하위 집합

플랫폼 간 지원

SQL / PSM 과 밀접하게 부합하는 절차 언어를 사용하는 저장 프로 시저 [68]

방아쇠

커서

업데이트 가능한 보기

InnoDB 스토리지 엔진을 사용할 때의 온라인 DDL .

정보 스키마

모니터링 목적으로 서버 실행 및 쿼리 성능에 대한 통계를 수집하고 집계하는 성능 스키마입니다. [69]

SQL 표준을보다 잘 준수하기위한 엄격 모드를 포함하여 런타임 동작을 제어하는 ​​SQL 모드 옵션 세트입니다.

X / Open XA 분산 트랜잭션 처리 (DTP) 지원; 디폴트의 InnoDB 스토리지 엔진을 사용하여 2 단계 커밋

기본 InnoDB 스토리지 엔진을 사용할 때 세이브 포인트 와의 트랜잭션 . NDB Cluster Storage Engine은 또한 트랜잭션을 지원합니다.

InnoDB 및 NDB Cluster 스토리지 엔진을 사용할 때의 ACID 준수 [70]

SSL 지원

쿼리 캐싱

하위 SELECT (즉, 중첩 된 SELECT)

마스터 당 하나의 마스터, 마스터 당 많은 슬레이브를 갖춘 내장 된 복제 지원 (마스터 마스터 복제 및 마스터 - 슬레이브 복제). [71] 다중 마스터 복제가 제공된다 MySQL 클러스터 , [72] 및 다중 마스터 지원 갈레 클러스터를 사용하여 클러스터링 구성에 추가 될 수있다. [73]

전체 텍스트 인덱싱 및 검색 [a]

내장 데이터베이스 라이브러리

유니 코드 지원 [b]

최적화 프로그램에 파티션 정리 기능이있는 분할 된 테이블

MySQL 클러스터를 통한 비공유 클러스터링

여러 스토리지 엔진을 통해 애플리케이션의 각 테이블에 대해 가장 효과적인 것을 선택할 수 있습니다. [기음]

네이티브 스토리지 엔진 InnoDB , MyISAM , Merge, Memory (heap), Federated , Archive, CSV , Blackhole, NDB Cluster.

그룹화를 커밋하고 여러 연결에서 여러 트랜잭션을 수집하여 초당 커밋 수를 늘립니다.

개발자는 약 2 개월마다 MySQL 서버의 마이너 업데이트를 릴리스합니다. 소스는 MySQL의 웹 사이트 또는 MySQL의 GitHub 저장소에서 GPL 라이센스에 따라 얻을 수 있습니다 .


제한 

이노의 기본 이외의 스토리지 엔진을 사용하는 경우, MySQL은 전체 준수하지 않는 SQL의 외래 키 참조를 포함하여 구현 된 기능 중 일부에 대한 표준, [74] , 체크 제약. [75]


MySQL 5.7까지, 트리거는 액션 / 타이밍 당 하나씩으로 제한됩니다. 즉, 최대 하나의 트리거를 INSERT 작업 후에 실행하도록 정의 할 수 있으며 동일한 테이블에서 INSERT 이전에 트리거를 정의 할 수 있습니다 . [76] 뷰에는 트리거를 정의 할 수 없습니다. [76]


UNIX_TIMESTAMP 같은 MySQL 데이터베이스의 붙박이 기능 () 03:14:07 후 0을 반환 UTC 에 2038년 1월 19일 . [77]


배포 


LAMP 소프트웨어 번들, 여기 오징어 와 함께 표시됩니다 .

MySQL은 소스 코드에서 수동으로 빌드하고 설치할 수 있지만 특별한 사용자 정의가 필요하지 않으면 바이너리 패키지에서 설치하는 것이 더 일반적입니다. 대부분의 Linux 배포판 에서 패키지 관리 시스템 은 최소한의 노력으로 MySQL을 다운로드하고 설치할 수 있지만 보안 및 최적화 설정을 조정할 때 종종 추가 구성이 필요합니다.


MySQL은보다 독점적 인 데이터베이스에 대한 저가형 대안으로 시작되었지만 점차적으로 더 큰 규모의 요구 사항을 지원하기 위해 발전해 왔습니다. LAMP 기반 웹 응용 프로그램 의 구성 요소 또는 독립 실행 형 데이터베이스 서버 로 중소 규모 단일 서버 배포에서 가장 일반적으로 사용됩니다 . MySQL의 매력 중 상당 부분은 phpMyAdmin 과 같은 오픈 소스 도구의 생태계에 의해 가능해진 비교적 단순하고 사용 용이성에서 기인 합니다. 중간 범위의 경우, MySQL은 기가 바이트의 메모리가있는 멀티 프로세서 서버와 같이 더 강력한 하드웨어에 배포하여 확장 할 수 있습니다.


그러나 단일 서버에서 성능을 확장 할 수있는 한계가 있기 때문에 규모가 커질수록 향상된 성능과 신뢰성을 제공하기 위해 다중 서버 MySQL ( '스케일 아웃') 배포가 필요합니다. 일반적인 하이 엔드 구성에는 데이터 쓰기 작업 을 처리하고 모든 읽기 작업을 처리하는 여러 슬레이브에 복제 되는 강력한 마스터 데이터베이스가 포함될 수 있습니다 . [78] 마스터 서버는 계속해서 오류시 슬레이브 중단 시간을 최소화하는 새로운 마스터가 촉진 될 수 있도록 연결된 슬레이브 바이너리 로그 이벤트를 민다. 성능 향상은 memcached를 사용하여 메모리에서 데이터베이스 쿼리의 결과를 캐싱 하거나 데이터베이스를 작은 청크로 분해 하여 성능을 향상시킬 수 있습니다.파편 분산 서버 클러스터의 수에 분산 될 수있다. [79]


백업 소프트웨어

mysqldump 는 MySQL의 커뮤니티 에디션과 엔터프라이즈 에디션에 포함 된 논리적 인 백업 툴이다. 모든 스토리지 엔진에서 백업을 지원합니다. MySQL Enterprise Backup은 오라클의 MySQL Enterprise 구독의 일부로 포함 된 핫 백업 유틸리티로, 다른 스토리지 엔진을위한 백업뿐만 아니라 원시 InnoDB 핫 백업을 제공합니다.


XtraBackup 은 오픈 소스 MySQL 핫 백업 소프트웨어 프로그램입니다. 기능으로는 InnoDB 스토리지를위한 핫 (hot), 비 록 (non-locking) 백업, 증분 백업, 스트리밍, 병렬 압축 백업, 초당 입출력 작업 수를 기반으로 한 스로틀 링 등이 있습니다 .


고 가용성 소프트웨어

MySQL Fabric은 MySQL 서버 모음을 관리하기위한 통합 시스템 이며 고 가용성 및 데이터베이스 샤딩이 구축 된 프레임 워크 입니다. MySQL Fabric은 오픈 소스이며, 장애 발생시 프로 시저 실행을 지원하며, 일반적으로 복원 실행 이라고하는 실행 모델을 제공합니다 . MySQL 클라이언트 라이브러리는 확장되어 서버 오류시에도 장애 조치 를 처리하는 복잡성을 숨길 뿐만 아니라 트랜잭션을 샤드에 올바르게 디스패치합니다. [81]


클라우드 배치

주요 기사 : 구름 데이타베이스

MySQL은 Amazon EC2 와 같은 클라우드 컴퓨팅 플랫폼 에서도 실행할 수 있습니다 . 클라우드에있는 MySQL의 일반적인 배포 모델은 다음과 같습니다.


가상 시스템 이미지

이 구현에서는 클라우드 사용자가 MySQL을 설치 한 상태에서 자신의 머신 이미지를 업로드하거나 Amazon EC2에서 제공하는 것과 같이 MySQL의 최적화 된 설치로 기성품 이미지를 사용할 수 있습니다. [82]

서비스로서의 MySQL

일부 클라우드 플랫폼은 MySQL을 "서비스"로 제공합니다. 이 구성에서 응용 프로그램 소유자는 MySQL 데이터베이스를 자체적으로 설치하고 유지 관리 할 필요가 없습니다. 대신 데이터베이스 서비스 공급자가 데이터베이스 설치 및 유지 관리 책임을 맡고 응용 프로그램 소유자는 사용법에 따라 비용을 지불합니다. [83] 주목할만한 클라우드 기반의 MySQL 서비스가 있습니다 아마존 관계형 데이터베이스 서비스 ; 랙 스페이스 ; HP 수렴형 클라우드 ; Heroku 와 Jelastic .


사용자 인터페이스


그래픽 사용자 인터페이스

그래픽 사용자 인터페이스 (GUI)는 텍스트 기반 인터페이스가 아닌 명령 라벨 또는 텍스트 탐색을 입력으로서 사용자가 전자 장치 또는 그래픽 아이콘 및 보조 악보 시각적 표시기를 통해 프로그램과 상호 작용할 수 있도록 인터페이스의 일종이다. GUI는 키보드에서 명령을 입력해야하는 명령 행 인터페이스 (CLI)보다 배우기가 쉽습니다.


MySQL과 통합되고 사용자가 데이터베이스 구조 및 데이터를 시각적으로 작업 할 수있게 해주는 타사 독점 및 무료 그래픽 관리 응용 프로그램 (또는 "프런트 엔드")을 사용할 수 있습니다. 몇 가지 잘 알려진 프런트 엔드는 다음과 같습니다.



MacOS에서 실행되는 MySQL Workbench

MySQL 워크 벤치

MySQL Workbench 는 MySQL을 위한 공식 통합 환경입니다. 이것은 MySQL AB가 개발했으며, 사용자는 그래픽으로 MySQL 데이터베이스를 관리하고 데이터베이스 구조를 시각적으로 디자인 할 수 있습니다. MySQL Workbench는 이전의 소프트웨어 패키지 인 MySQL GUI Tools를 대체합니다 . MySQL Workbench는 다른 써드 파티 패키지와 마찬가지로 여전히 권위있는 MySQL 프론트 엔드로 간주되며, 데이터베이스 디자인 및 모델링, SQL 개발 (MySQL 쿼리 브라우저 대체) 및 데이터베이스 관리 (MySQL 관리자 대체)를 관리 할 수 ​​있습니다.

MySQL Workbench 에는 MySQL 웹 사이트에서 다운로드 할 수 있는 일반 무료 및 오픈 소스 커뮤니티 에디션 과 커뮤니티 에디션 의 기능 세트를 확장하고 개선하는 독점 표준 에디션 두 가지 가 있습니다 .

관리자

관리자 (이전의 phpMinAdmin)는 MySQL 데이터베이스의 내용을 관리하기위한 무료 MySQL 프론트 엔드입니다 (버전 2 이후로 PostgreSQL, MS SQL, SQLite 및 Oracle SQL 데이터베이스에서도 작동합니다). 관리자는 Apache 라이센스 (또는 GPL v2)로 단일 PHP 파일 (약 300KB 크기) 형태로 배포되며 여러 CSS를 사용할 수있는 여러 데이터베이스를 관리 할 수 ​​있습니다. 필자는 Jakub Vrána가 2007 년 7 월 phpMyAdmin의 경량 대체품으로이 도구를 개발하기 시작했습니다.

데이터베이스 워크 벤치

Database Workbench 는 UPscene Productions에서 개발 한 여러 데이터베이스 시스템 간의 상호 운용성을 통해 SQL을 사용하여 여러 관계형 데이터베이스를 개발하고 관리하는 소프트웨어 응용 프로그램입니다.

Databases Workbench는 다중 데이터베이스 시스템을 지원하기 때문에 소프트웨어 개발자에게 다른 데이터베이스 시스템과 동일한 인터페이스 및 개발 환경을 제공 할 수 있으며 크로스 데이터베이스 도구도 포함 할 수 있습니다.

Database Workbench는 Oracle Database, Microsoft SQL Server, SQL Anywhere, Firebird, NexusDB, InterBase, MySQL 및 MariaDB와 같은 관계형 데이터베이스를 지원합니다. Database Workbench 5는 32 비트 또는 64 비트 Windows 플랫폼에서 실행됩니다. Linux에서 FreeBSD 또는 macOS Database Workbench는 Wine을 사용하여 작동 할 수 있습니다.

DBEdit

DBEdit 는 Oracle, DB2, MySQL 및 JDBC 드라이버를 제공하는 모든 데이터베이스에 연결할 수있는 데이터베이스 편집기입니다. Windows, Linux 및 Solaris에서 실행됩니다. DBEdit은 무료이며 오픈 소스 소프트웨어이며 GNU General Public License하에 배포됩니다. 소스 코드는 SourceForge에서 호스팅됩니다.

HeidiSQL

이전에 MySQL-Front로 알려진 HeidiSQL 은 무료 오픈 소스 클라이언트 또는 MySQL (그리고 MariaDB 및 Percona Server와 같은 포크), Microsoft SQL Server 및 PostgreSQL의 프론트 엔드입니다. HeidiSQL은 독일 프로그래머 Ansgar Becker와 Delphi의 다른 기고가들에 의해 개발되었습니다. HeidiSQL을 사용하여 데이터베이스를 관리하려면 사용자는 허용 가능한 자격 증명을 사용하여 로컬 또는 원격 MySQL 서버에 로그인하여 세션을 만들어야합니다. 이 세션 내에서 사용자는 연결된 MySQL 서버 내에서 MySQL 데이터베이스를 관리하고 완료되면 서버와의 연결을 끊을 수 있습니다. 이 기능 세트는 대부분의 일반적이고 고급 데이터베이스, 테이블 및 데이터 레코드 작업에는 충분하지만 MySQL Frontend에서 예상되는 모든 기능을 사용하기 위해 적극적인 개발을 계속하고 있습니다.

오픈 오피스 자료

LibreOffice Base는 최종 사용자가 데이터에 쉽게 액세스 할 수 있도록 데이터베이스 작성, 양식 및 보고서 준비를 가능하게합니다. Microsoft Access 와 마찬가지로 Access 데이터베이스 (JET), ODBC 데이터 소스 및 MySQL 또는 PostgreSQL [84]을 비롯한 다양한 데이터베이스 시스템의 프런트 엔드로 사용할 수 있습니다 .

Navicat

Navicat 은 MySQL, MariaDB, Oracle, SQLite, PostgreSQL 및 Microsoft SQL Server 용으로 PremiumSoft CyberTech Ltd.에서 만든 일련의 그래픽 데이터베이스 관리 및 개발 소프트웨어입니다. 탐색기와 같은 그래픽 사용자 인터페이스가 있으며 로컬 및 원격 데이터베이스에 대한 다중 데이터베이스 연결을 지원합니다. 이 디자인은 데이터베이스 관리자 및 프로그래머부터 고객에게 서비스를 제공하고 파트너와 정보를 공유하는 다양한 비즈니스 / 회사에 이르기까지 다양한 고객의 요구를 충족시키기 위해 만들어졌습니다.

Navicat은 크로스 플랫폼 도구이며 Microsoft Windows, OS X 및 Linux 플랫폼에서 작동합니다. 구매시 사용자는 영어, 프랑스어, 독일어, 스페인어, 일본어, 폴란드어, 중국어 (간체 및 번체)의 8 가지 언어에서 소프트웨어 언어를 선택할 수 있습니다.

OpenOffice.org

OpenOffice.org Base 는 무료로 사용할 수 있으며 전체 제품군이 설치된 경우 MySQL 데이터베이스를 관리 할 수 ​​있습니다.

phpMyAdmin

phpMyAdmin 은 웹 브라우저를 사용하여 MySQL 관리를 처리하기위한 PHP로 작성된 무료 오픈 소스 도구입니다. 데이터베이스, 테이블, 필드 또는 행 작성, 수정 또는 삭제와 같은 다양한 작업을 수행 할 수 있습니다. SQL 문 실행. 또는 사용자 및 권한 관리 78 개 언어로 제공되는이 소프트웨어는 [ phpMyAdmin Project ] 에서 관리합니다 [85] . [86]

CSV 및 SQL에서 데이터를 가져올 수 있으며 이미지 또는 다운로드 링크로 BLOB 데이터를 표시하는 것과 같이 사전 정의 된 기능 세트를 사용하여 저장된 데이터를 모든 형식으로 변환 할 수 있습니다.

SQLBuddy

SQLBuddy 는 웹 브라우저를 사용하여 MySQL 및 SQLite 관리를 처리하기위한 PHP로 작성된 오픈 소스 웹 기반 응용 프로그램입니다. 이 프로젝트는 설치가 쉽고 간단한 사용자 인터페이스에 중점을 둡니다.

SQLyog

SQLyog 는 유료 버전뿐만 아니라 무료로 사용할 수있는 GUI 도구입니다. 데이터 조작 (예 : 삽입, 업데이트 및 삭제)은 스프레드 시트와 같은 인터페이스에서 수행 할 수 있습니다. 편집기의 구문 강조 기능 과 다양한 자동 서식 옵션이 있습니다. 원시 테이블 데이터와 쿼리의 결과 집합을 모두 조작 할 수 있습니다. 데이터 검색 기능은 Google과 유사한 검색 구문을 사용하며 사용자에게 투명하게 SQL로 변환됩니다. 무인 백업을 수행하기위한 백업 도구가 있습니다. 백업은 압축되어 선택적으로 테이블 당 파일로 저장 될 수 있으며 타임 스탬프로 식별됩니다.

Toad for MySQL

Toad for MySQL 은 Dell 소프트웨어의 소프트웨어 응용 프로그램으로, 데이터베이스 개발자, 데이터베이스 관리자 및 데이터 분석가가 SQL을 사용하여 관계형 및 비 관계형 데이터베이스를 모두 관리하는 데 사용됩니다. Toad는 많은 데이터베이스와 환경을 지원합니다. Microsoft Windows Server, Windows XP, Windows Vista, Windows 7 및 8 (32 비트 또는 64 비트)을 포함하여 모든 32 비트 / 64 비트 Windows 플랫폼에서 실행됩니다. Dell 소프트웨어는 Toad Mac Edition도 출시했습니다. Dell은 상용 및 시험판 / 프리웨어 버전으로 Toad를 제공합니다. 프리웨어 버전은 ToadWorld.com 커뮤니티에서 구할 수 있습니다.

Webmin

Webmin 은 Unix 계열 시스템 용 웹 기반 시스템 구성 도구입니다. 최신 버전도 Windows에 설치하여 실행할 수 있습니다. 이를 통해 사용자, 디스크 할당량, 서비스 또는 구성 파일과 같은 운영 체제 내부 구성을 비롯하여 Apache HTTP Server, PHP 또는 MySQL과 같은 오픈 소스 응용 프로그램을 수정하고 제어 할 수 있습니다.

Webmin은 주로 자체 프로세스 및 웹 서버로 실행되는 Perl을 기반으로합니다. 통신을 위해 기본적으로 TCP 포트 10000으로 설정되며, OpenSSL에 추가로 필요한 Perl 모듈이 설치된 경우 SSL을 사용하도록 구성 할 수 있습니다.

구성 파일과 Webmin 서버에 대한 인터페이스가있는 모듈을 중심으로 구성됩니다. 따라서 새로운 기능을 쉽게 추가 할 수 있습니다. Webmin의 모듈 식 설계로 인해 관심있는 모든 사람들이 데스크탑 구성을위한 플러그인을 작성할 수 있습니다.

또한 Webmin은 단일 인터페이스 또는 동일한 서브넷이나 LAN상의 다른 Webmin 호스트에 대한 완벽한 로그인을 통해 많은 시스템을 제어 할 수 있습니다.

명령 행 인터페이스

명령 라인 인터페이스는 사용자가 문제가 텍스트의 연속적인 라인들 (커맨드 라인)를 입력하여, 프로그램에 명령하는 컴퓨터 프로그램과 상호 작용하는 수단이다. MySQL에는 많은 명령 줄 도구가 제공되며,이 도구의 기본 인터페이스는 mysql 클라이언트입니다. [87 ]


MySQL 유틸리티는 공통 유지 보수 및 관리 작업을 수행하도록 설계된 유틸리티 세트입니다. 원래 MySQL Workbench의 일부로 포함 된 유틸리티는 Oracle에서 제공하는 독립 실행 형 다운로드입니다.


Percona Toolkit은 Perl로 개발 된 MySQL을위한 크로스 플랫폼 툴킷입니다 . [89] Percona 툴킷은 복제가 제대로 작동 증명 손상된 데이터를 수정, 반복적 인 작업을 자동화하고, 서버의 속도를하는 데 사용할 수 있습니다. Percona Toolkit은 CentOS 및 Debian 과 같은 여러 Linux 배포판에 포함되어 있으며 패키지는 Fedora 및 Ubuntu 에서도 사용할 수 있습니다. Percona Toolkit은 원래 Maatkit으로 개발되었지만 2011 년 말부터 Maatkit은 더 이상 개발되지 않았습니다.


응용 프로그래밍 인터페이스 


언어 별 API가 있는 많은 프로그래밍 언어 에는 MySQL 데이터베이스에 액세스하기위한 라이브러리 가 포함되어 있습니다. 여기에는 Microsoft의 Visual Studio ( C # 및 VB 와 같은 언어 가 가장 일반적으로 사용되는 언어) 및 Java 용 JDBC 드라이버와의 통합을위한 MySQL Connector / Net가 포함됩니다 . 또한, ODBC의 호출 인터페이스를 MySQL의 커넥터 / ODBC는 같은 MySQL 데이터베이스와 통신 할 ODBC 인터페이스 지원 추가 프로그래밍 언어 수 있습니다 ASP 또는 ColdFusion은 . HTSQL  - URL기반 쿼리 메소드는 MySQL 어댑터와 함께 제공되므로 구조화 된 URL을 통해 MySQL 데이터베이스와 모든 웹 클라이언트간에 직접 상호 작용할 수 있습니다.


프로젝트 포크 


에서 소프트웨어 공학 개발자의 사본을 찍을 때, 프로젝트 포크가 발생 소스 코드를 하나 개 의 소프트웨어 패키지 소프트웨어의 독특하고 별도의 조각을 만들고, 거기에 독립적 인 개발을 시작 - 새로운 (제 3 자) 버전. 이 용어는 개발 지점을 만드는 것 뿐만 아니라 개발자 커뮤니티에서 분열 하는 것을 의미합니다 ( 분열의 한 형태 ). [90] MySQL 포크에는 다음이 포함됩니다 :


현재

MariaDB

MariaDB 는 지역 사회에서 개발 한 MySQL 관계형 데이터베이스 관리 시스템으로, GNU GPL 하에서 무료로 사용할 수 있습니다. 선도적 인 오픈 소스 소프트웨어 시스템을 기반으로하는 오라클의 인수에 대한 우려로 MySQL을 처음으로 개발 한 개발자가이 소프트웨어를 개발 한 것은 주목할만한 특징입니다. [37] 참여자는 자신의 저작권을 MariaDB Foundation과 공유해야합니다. [91] MariaDB는 MySQL과 높은 호환성을 유지하면서 라이브러리 바이너리 동등성 및 MySQL API 및 명령 과의 정확히 일치하는 "드롭 인 (drop-in)"대체 기능을 보장 합니다. [92] MySQL과 MariaDB의 버전 간에는 문서화 된 차이점과 비 호환성이 있습니다. [92]그러나 MySQL Workbench 와 같이 MySQL과 상호 작용하는 일부 도구는 MariaDB와 완벽하게 호환되지 않습니다. [93] 그것은 포함 XtraDB의 교체 스토리지 엔진 이노를 , [94] 뿐만 아니라 새로운 스토리지 엔진 등 아리아 심지어 MySQL의 이후 버전에 포함 된 트랜잭션이 아닌 트랜잭션 엔진 모두가 될 예정. [95]

Percona Server

Percona Server 는 Percona 가 공식 MySQL 릴리스와의 긴밀한 호환성을 유지하면서 서버 운영에 대한 성능과 가시성을 중시하는 것을 목표로 삼고 있습니다. [96] 또한 Percona Server에는 Percona의 InnoDB 스토리지 엔진 포크 인 XtraDB 가 포함되어 있습니다. Percona는 MySQL의 상업용 Enterprise 에디션에서만 사용 가능한 많은 확장 성, 가용성, 보안 및 백업 기능을 자유롭게 포함합니다. [97]

버림받은

이슬비

Drizzle 은 MySQL DBMS의 현재 개발되지 않은 6.0 개발 지점에서 파생 된 무료 소프트웨어 / 오픈 소스 관계형 데이터베이스 관리 시스템 (DBMS)이었습니다. [98] Drizzle은 MySQL과 마찬가지로 클라이언트 / 서버 아키텍처를 사용하고 SQL 을 기본 명령어 언어로 사용 합니다. Drizzle은 GNU General Public License (GPL) 의 버전 2와 3에 BSD 라이센스에 따라 프로토콜 드라이버와 복제 메시징을 포함하여 배포되었습니다.

WebScaleSQL

WebScaleSQL 은 MySQL 5.6의 소프트웨어 계열 이었으며, 2014 년 3 월 27 일 Facebook, Google, LinkedIn 및 Twitter에 의해 발표되었습니다. 이는 대규모 배포와 관련된 새로운 기능으로 MySQL을 확장하기위한 중앙 집중식 개발 구조를 제공하기위한 공동 노력입니다. 서버 팜에서 실행되는 대규모 복제 데이터베이스 구축 따라서 WebScaleSQL은 각 회사가 자체 MySQL 분기를 유지하고 더 많은 개발자를 끌어 들이기 위해 노력한 노력을 중복 제거하는 방향으로 나아갔습니다. 이러한 기업의 노력을 결합하고 다양한 변경 사항과 새로운 기능을 MySQL에 통합함으로써 WebScaleSQL은 대규모 환경에서 MySQL 배포를 지원하는 것을 목표로 삼았습니다. [99 ]이 프로젝트의 소스 코드는 GNU General Public License 버전 2에 따라 사용이 허가되며 GitHub에서 호스팅됩니다 . [101 ]


출처 위키백과

'MySQL' 카테고리의 다른 글

Windows MySQL 버전 확인  (0) 2017.08.31

PHP


PHP 는 주로 웹 개발 용으로 설계된 서버 측 스크립팅 언어 이지만 범용 프로그래밍 언어 로도 사용 됩니다 . 원래 1994 년 에 Rasmus Lerdorf 에 의해 만들어졌으며  PHP 레퍼런스 구현 은 PHP 개발팀에 의해 만들어졌습니다. [5] PHP는 원래 위해 서 개인 홈 페이지 , 하지만 지금의 약자 재귀 적 약어의 하이퍼 텍스트 전 처리기 : PHP . 


PHP 코드는 HTML 또는 HTML5 마크 업 에 포함되거나 다양한 웹 템플리트 시스템 , 웹 컨텐트 관리 시스템 및 웹 프레임 워크 와 함께 사용될 수 있습니다 . PHP 코드는 일반적으로 웹 서버 의 모듈 또는 CGI ( Common Gateway Interface ) 실행 파일 로 구현 된 PHP 인터프리터에 의해 처리됩니다 . 웹 서버 소프트웨어로 생성 된 이미지를 포함하는 데이터의 임의의 타입 일 수있는 해석되고 실행될 PHP 코드의 조합 결과 웹 페이지 . PHP 코드는 명령 행 인터페이스 로 실행될 수도 있습니다.(CLI)이며 독립형 그래픽 응용 프로그램 을 구현하는 데 사용할 수 있습니다 . 


에 의해 구동 표준 PHP 인터프리터, 젠드 엔진 이며, 무료 소프트웨어 언더 발표 PHP 라이센스 . PHP는 널리 포팅되어 거의 모든 운영체제 와 플랫폼 에서 대부분의 웹 서버에 무료 로 배포 할 수 있습니다 . 


PHP 언어 는 정식 PHP 인터프리터를 사실상의 표준 으로 남겨둔 채 2014 년까지 공식 표준 이나 표준 없이 작성 되었습니다 . 2014 년 이래로 공식 PHP 사양을 작성했습니다.


역사


초기의 역사




PHP 3을 구성한 파서 를 다시 작성한 Andi Gutmans ( 중간)와 Zeev Suraski (오른쪽) 와 함께 원래의 Common Gateway Interface (CGI) 구성 요소 를 작성한 Rasmus Lerdorf (왼쪽) .

때 PHP 개발은 1995 년에 시작 라스무스 레르도프 여러 썼다 공용 게이트웨이 인터페이스 C에서 (CGI) 프로그램을, [10] [11] [12] 그의 유지하는 데 사용 개인 홈페이지 . 웹 폼 작업 및 데이터베이스 와의 통신 을 위해 이들을 확장 하고이 구현을 "Personal Home Page / Forms Interpreter"또는 PHP / FI라고했습니다.


PHP / FI는 간단하고 동적 인 웹 애플리케이션 을 구축하는 데 도움이 될 수 있습니다. 버그 보고 를 가속화 하고 코드를 개선하기 위해 Lerdorf는 처음에 유즈넷 토론 그룹 comp.infosystems.www.authoring.cgi 에서 "개인 홈 페이지 도구 (PHP 도구) 버전 1.0"으로 PHP / FI의 릴리스 를 2008 년 6 월 8 일에 발표했습니다. 1995. [13] [14] 이 릴리스에는 PHP가 2013 년에 이미 가지고있는 기본 기능이 있습니다. 여기에는 Perl과 유사한 변수 , 양식 처리 및 HTML을 포함 할 수있는 기능이 포함되었습니다. 구문은 펄의 닮은하지만, 간단하게 더 제한하고 덜 일치했다. [5]


Lerdorf는 초기 PHP가 새로운 프로그래밍 언어가 될 의도는 없었지만, Lerdorf가 회고 적으로 다음과 같이 지적하면서 유기적으로 성장했습니다. "어떻게 멈추는 지 모르지만 프로그래밍 언어를 작성하려는 의도는 전혀 없었습니다. [...] I 프로그래밍 언어를 작성하는 방법을 전혀 모르는 채로, 나는 그 길에 다음 논리적 인 단계를 계속 추가했다. " [15] 개발 팀이 형성되기 시작했으며 , 1997 년 11 월 PHP와 FI 2 공식 발표 와 베타 테스트를 거쳤습니다.


PHP가 원래의 전체적인 디자인이 없었지만 대신 유기적으로 개발됨에 따라 함수의 이름이 일관되지 않고 매개 변수의 순서가 일관되지 않게되었습니다. [16] 어떤 경우에는 함수 이름이 PHP가 "wrapping"하는 하위 라이브러리와 일치하도록 선택 되었지만 [17] PHP의 초기 버전에서는 함수 이름의 길이가 내부적으로 해시 함수 로 사용되었습니다 그래서 해시 값의 분포를 향상시키기 위해 이름이 선택되었습니다. [18]


PHP 3과 4

Zeev Suraski 와 Andi Gutmans 는 1997 년 파서 를 다시 작성하여 PHP 3의 기본을 구성하여 언어 이름을 재귀 적 약어 인 PHP : Hypertext Preprocessor로 변경했습니다 . [5] [19] 이후, PHP 3의 공개 테스트를 시작하고, 수라 스키와 거트 먼스는 다음 새로운 시작 1998 년 공식 출시 6 월에 와서 재 작성 생산, PHP의 코어를 젠드 엔진을 1999 년에 [20] 그들은 또한 설립 젠드 기술 의 라 마트 간 , 이스라엘. [5]


2000 년 5 월 22 일 Zend Engine 1.0에 의해 구동되는 PHP 4가 릴리스되었습니다. [5] 2008 년 8 월 현재이 지점은 버전 4.4.9에 도달했습니다. PHP 4는 더 이상 개발 중이 아니며 보안 업데이트가 릴리스되지 않습니다. [21] [22]


PHP 5

2004 년 7 월 13 일, 새로운 Zend Engine II가 제공하는 PHP 5가 릴리스되었습니다. [5] PHP 5는 향상된 지원과 같은 새로운 기능을 포함 객체 지향 프로그래밍 (데이터베이스에 액세스하기위한 경량의 일관된 인터페이스를 정의)에 PHP 데이터 객체 (PDO) 확장 및 다양한 성능 향상. [23] 2008 년 PHP 5가 개발중인 유일한 안정 버전이되었습니다. PHP에서 후기 정적 바인딩 이 누락되어 버전 5.3에 추가되었습니다. [24] [25]


많은 오픈 소스 프로젝트에 때문에 GoPHP5 이니셔티브의 월 (5), 2008 년 새로운 코드에서 PHP 4를 지원하기 위해 정지, [26] PHP 5로 PHP 4의 전환을 촉진 PHP 개발자의 컨소시엄에 의해 제공 [ 27] [28]


시간이 지남에 따라 PHP 인터프리터는 PHP 소스 코드에서 빌드하거나 미리 빌드 된 바이너리를 사용하여 대부분의 기존 32 비트 및 64 비트 운영 체제에서 사용할 수있게되었습니다. [29] 는 PHP 버전 5.3 및 5.4의 경우, 사용할 수있는 유일한 마이크로 소프트 윈도우 바이너리 배포판했다 32 비트 의 x86이 빌드 [30] [31] 사용하는 동안 Windows 32 비트 호환 모드를 요구하는 인터넷 정보 서비스 64-에 (IIS)를 bit Windows 플랫폼. PHP 버전 5.5는 Microsoft Windows 에서 64 비트 x86-64 빌드를 사용할 수있게했습니다. [32]


PHP 6 및 유니 코드

PHP는 핵심 언어 수준의 유니 코드 지원 이 부족 하여 바이트 문자열 만 지원 하기 때문에 비판을 받았습니다 . 2005 년 Andrei Zmievski가 이끄는 프로젝트는 ICU ( International Components for Unicode ) 라이브러리를 내장하고 텍스트 문자열을 UTF-16으로 내부적 으로 표현 함으로써 PHP 전체에 유니 코드 지원을 제공하기 시작했습니다 . [33] 이 사용자 코드 언어의 내부와에 모두 큰 변화를 일으킬 것입니다 때문에, 다음 개발에 주요 기능과 함께 언어의 버전 6.0로이를 출시 할 계획되었다. [34]


그러나 웹 컨텍스트에서 거의 사용되지 않는 UTF-16과의 변환으로 인해 필요한 변경 사항과 성능 문제를 이해하는 개발자 부족으로 인해 프로젝트가 지연되었습니다. [35] 결과적으로, PHP 5.3 릴리즈가 2009 년에 만들어졌으며 많은 비 유니 코드 기능이 PHP 6, 특히 네임 스페이스에서 백 포트되었습니다. 2010 년 3 월에는 현재의 형태로 진행된 프로젝트가 공식적으로 포기되었으며, PHP 5.4의 특징 중 PHP 6의 나머지 유니 코드가 아닌 기능 (예 : 형질 및 클로저 재 바인딩)이 포함되어 준비되었습니다. [36] 초기 희망은 새로운 계획이 유니 코드 통합을 위해 형성 될 것이지만, 2014 년까지 채택 된 계획은 없었습니다.


PHP 7

2014 년과 2015 년 동안 새로운 주요 PHP 버전이 개발되었으며 PHP 7로 번호가 매겨졌습니다.이 버전의 번호 매기기에는 몇 가지 논쟁이있었습니다. [37] PHP 6 유니 코드 실험은 한번도 공개되지 않았지만 몇 가지 기사와 서적 제목이 PHP 6 이름을 참조했습니다. 새 릴리스에서 이름을 다시 사용하게되면 혼란을 야기 할 수 있습니다. [38] 투표 후에 PHP 7이라는 이름이 선택되었습니다. [39]


PHP 7의 기초 는 원래 PHP 차세대 ( phpng ) 라고 불리는 PHP 지사 입니다 . Dmitry Stogov, Xinchen Hui 및 Nikita Popov [40] 가 작성했으며 Zend Engine을 리팩터링하여 PHP 성능을 최적화하여 거의 완벽한 언어 호환성을 유지하면서 캐시 지역 이 개선 된 보다 소형 데이터 구조 를 사용하도록했습니다 . [41] 2014 년 7 월 14로서 , 워드phpng 프로젝트의 주요 벤치 마크 슈트였던 기반 벤치 마크는 거의 100 % 성능 향상을 보였습니다. phpng의 변경 사항은 JIT (Just -In- Time) 컴파일러 로의 성공적인 마이그레이션에 더 적합한보다 소형 데이터 구조 및 기타 변경 사항이 나타나기 때문에 향후 성능을 향상시키는 것이 더 쉬워 질 것으로 예상됩니다 . [42] 중대한 변화 때문에 재 작업 된 Zend Engine은 PHP 5에서 사용 된 Zend Engine 2를 이어 받은 Zend Engine 3 이라고합니다 .


phpng의 내부적 인 주요 변경으로 인해, PHP의 릴리스 프로세스에 따르면, PHP 5의 마이너 버전 보다는 새로운 주요 버전 의 PHP를 받아야합니다 . [44] PHP의 메이저 버전의 넓은 사용을 포함하는 후방 호환성을 바꿈 필요 phpng 이후 다른 개선의 기회를 제공 PHP 7 때문에 코드의 역방향 호환성을 나눌 수있는 예외를 , [45] [46] 변수 구문을 재가공 보다 일관되고 완벽 해지며, [47] 다양한 레거시 기능의 사용이 중단되거나 제거됩니다. [48] [49]


PHP 7도 기능에 대한 반환 유형 선언을 포함하여, 새로운 언어 기능을 도입, [50] 매개 변수의 스칼라 유형 (정수, 부동 소수점, 문자열 및 부울)에 대한 기존 매개 변수 유형 선언 및 지원을 보완하고 유형 선언을 반환한다. [51]


출시 이력 


색깔의미개발
빨간이전 버전개발 없음
노랑안정적 출시보안 수정
녹색안정적 출시버그 및 보안 픽스
푸른미래 출시새로운 기능
번역출시일~까지 지원 [52]노트
1.01995 년 6 월 8 일공식적으로 "개인 홈 페이지 도구 (PHP 도구)"라고합니다. 이것은 "PHP"라는 이름의 첫 번째 사용입니다. [5]
2.01997 년 11 월 1 일공식적으로 "PHP / FI 2.0"이라고합니다. 이것은 실제로 PHP로 특성화 될 수있는 첫 번째 릴리스이며, 현재까지 견디는 많은 기능을 갖춘 독립형 언어입니다.
3.01998 년 6 월 6 일2000 년 10 월 20 일 [52]개발은 한 사람에서 여러 개발자로 이동합니다. Zeev Suraski와 Andi Gutmans가이 버전의 기본을 다시 작성합니다. [5]
4.02000 년 5 월 22 일2001 년 6 월 23 일 [52]Zend 엔진이라고하는 고급 2 단계 구문 분석 / 실행 태그 구문 분석 시스템이 추가되었습니다. [53]
4.12001 년 12 월 10 일2002 년 3 월 12 일 [52]도입 된 "슈퍼 전역"( $_GET$_POST$_SESSION등) [53]
4.22002 년 4 월 22 일2002 년 9 월 6 일 [52]register_globals기본적으로 비활성화 되어 있습니다. 네트워크를 통해받은 데이터는 더 이상 전역 네임 스페이스에 직접 삽입되지 않으므로 응용 프로그램의 보안 허점을 막을 수 있습니다. [53]
4.32002 년 12 월 27 일2005 년 3 월 31 일 [52]CGI를 보완하기 위해 CLI (Command -Line Interface)를 도입했습니다 . [53 ]
4.42005 년 7 월 11 일2008 년 8 월 7 일 [52]PHP 버전 4.3.x에 대해 컴파일 된 확장 기능과의 이진 호환성을 깨뜨리는 메모리 손상 버그가 수정되었습니다. [55]
5.02004 년 7 월 13 일2005 년 9 월 5 일 [52]Zend Engine II에 새로운 객체 모델이 추가되었습니다. [56]
5.12005 년 11 월 24 일2006 년 8 월 24 일 [52]재 설계된 PHP 엔진에서 컴파일러 변수를 도입하여 성능이 향상되었습니다. [56] PHP 데이터 객체 (PDO)를 데이터베이스에 액세스하기위한 일관된 인터페이스로 추가했습니다. [57]
5.22006 년 11 월 2 일2011 년 1 월 6 일 [52]기본적으로 필터 확장을 사용합니다. 기본 JSON 지원. [56]
5.32009 년 6 월 30 일2014 년 8 월 14 일 [52]네임 스페이스 지원; 늦게 정적 바인딩 , 라벨 (제한 점프 고토 ), 폐쇄 , PHP 아카이브 (의 Phar) , 가비지 컬렉션을 순환 참조에 대한 개선 윈도우 작업 확장을위한 기본 라이브러리로 libmysql을 대체 등의 지원, sqlite3를, mysqlnd MySQL을 로에서는 FileInfo를, 향상된 MIME 지원, 국제화 확장 및 ereg 확장의 사용 중단을 위해 mime_magic을 대체했습니다 .
5.42012 년 3 월 1 일2015 년 9 월 3 일 [52]특성 지원, 짧은 배열 구문 지원. 삭제 된 항목 : register_globalssafe_modeallow_call_time_pass_reference, , 와 . 내장 웹 서버. [58] 기존 기능, 성능 및 메모리 요구 사항 감소에 대한 몇 가지 개선 사항.session_register()session_unregister()session_is_registered()
5.52013 년 6 월 20 일2016 년 7 월 21 일 [52]예외 처리를 위한 생성기 , finally블록, 공식 배포판에 번들 된 OpCache (Zend Optimizer + 기반) 지원. [59]
5.62014 년 8 월 28 일2018 년 12 월 31 일 [60]상수 스칼라 표현식, variadic 함수 , 인수 unpacking, 새로운 지수 연산자, 함수 및 상수에 대한 use 문의 확장 , SAPI 모듈로서의 새로운 phpdbg 디버거 및 기타 작은 개선. [61]
6.x공개되지 않음N / A네이티브 유니 코드 지원을 포함 할 예정인 버려진 PHP 버전. [62 ]
7.02015 년 12 월 3 일 [2]2018 년 12 월 3 일 [60]젠드 엔진 3 (성능 향상 [42] 및 Windows 64 비트 정수 지원 [64] ), 균일 변수 구문 [47] AST 기반 편집 방법은, [65]를 첨가하여 , [66] 비트 플랫폼 일관성 시프트 [ 67] ( null coalesce ) 연산자, [68] 유니 코드 코드 포인트 이스케이프 시퀀스 , 69 반환 유형 선언, 50 스칼라 유형 (정수, 부동, 문자열 및 부울) 선언, [51] "우주선" 3 방향 비교 연산자 , [70] 발전기Closure::call() ??<=> 대표단 [71] 익명 클래스 , [72] 간단하고 지속적으로 사용할 수 CSPRNG의 API, [73] 더 현대적인 많은 나머지 내부 PHP "오류"대체 예외 , [45] 네임 스페이스에서 여러 항목을 가져 오기 및 약식 구문 . [74]
7.12016 년 12 월 1 일 [75] [76]2019 년 12 월 1 일 [60]무효 반환 유형 , [77] 클래스 상수 가시성 수정 자 , [78] Nullable 유형 , [79] iterable 의사 유형, [80] 여러 예외 유형 catch. [81]
7.22017 년 11 월 30 일 [82]2020 년 11 월 30 일 [60]


2011 년 6 월 28 일부터 PHP 그룹은 PHP의 새 버전 출시 일정을 수립했습니다. [44] 이 시스템 하에서 매달 최소한 하나의 석방이 이루어져야한다. 1 년에 한 번, 새로운 기능이 포함될 수있는 사소한 릴리스가 발생해야합니다. 모든 마이너 릴리스는 최소한 보안 및 버그 수정을 포함하여 2 년 동안 지원되어야하며, 적어도 1 년의 보안 수정만으로 모든 마이너 릴리스에 대해 총 3 년의 릴리스 프로세스가 이루어져야합니다. 작고 독립적 인 기능을 제외하고는 새로운 기능을 3 년 동안 출시 할 때 사소한 내용으로 소개하지 않습니다.


구문


다음 "Hello, World!" 프로그램 은 HTML 문서에 삽입 된 PHP 코드로 작성됩니다 .


<! DOCTYPE HTML> 
< HTML > 
    < 머리 > 
        < 제목 > PHP 테스트 </ 제목 > 
    </ 머리 > 
    < > 
<? PHP는 에코 '<p> 안녕하세요 </ P>' ; ?> </ body > </ html >           
    
그러나 PHP 코드가 HTML에 포함될 필요가 없으므로 Hello, World! 의 가장 간단한 버전입니다 . 순수한 PHP 코드 [85]가 들어있는 파일에서 닫는 태그를 생략 한 상태에서 이와 같이 작성할 수 있습니다 .

<? = "Hello, world" ;

PHP 인터프리터는 구분 기호 내에서만 PHP 코드를 실행 합니다. PHP 코드 가 아닌 텍스트는 여전히 PHP 코드에서 설명 하는 제어 구조의 대상이되지만 구분 기호를 벗어난 항목은 PHP에서 처리하지 않습니다 . 가장 일반적인 구분 기호는 <? php open and ?> PHP 섹션을 닫는 것입니다. 단축 된 형식 <? 또한 존재합니다. 이 짧은 구분자 (delimiter)는 스크립트 파일을 로컬 PHP 구성에서 비활성화 할 수 있으므로 스크립트 파일의 이식성을 떨어 뜨리기 때문에 사용하지 않는 것이 좋습니다. [86] [87] 그러나, 에코 짧은 태그 <? = 의 사용에 대한 추천은 없습니다 . [5.4] PHP 5.4.0 이전 버전에서는echo () 는 short_open_tag 구성 설정을 사용 하는 경우에만 작동하며 PHP 5.4.0 이상에서는 항상 사용할 수 있습니다. [86] [89] [90] 모든 분리의 목적은 비 PHP 콘텐츠로부터 PHP 코드 분리하는 자바 스크립트 코드 또는 HTML 마크 업. [91]


XHTML 및 기타 XML 문서 에서 구분 기호의 첫 번째 형식 인 <? php 및 ?> 은 올바르게 구성된 XML 처리 명령을 작성합니다. [92] 이것은 결과적으로 PHP 코드와 서버 측 파일에있는 다른 마크 업의 혼합이 그 자체로 잘 구성된 XML임을 의미합니다.


변수는 앞에 붙 달러 기호 및 유형은 사전에 지정할 필요가 없습니다. PHP 5 에서는 함수가 매개 변수를 특정 클래스, 배열, 인터페이스 또는 콜백 함수의 객체로 만들 수있는 유형 힌팅 을 도입했습니다 . 그러나 PHP 7.0 이전에는 정수 또는 문자열과 같은 스칼라 유형과 함께 유형 힌트를 사용할 수 없었습니다. [51]


함수 및 클래스 이름과 달리 변수 이름은 대소 문자를 구분합니다. 큰 따옴표 ( "")와 heredoc 문자열은 변수의 값을 문자열에 보간하는 기능을 제공합니다. [93] PHP가 취급 개행 으로 공백 (A)의 방법으로 자유 형식 언어 및 문장들은 세미콜론으로 종료된다. [94] PHP에는 세 가지 유형의 주석 구문이 있습니다 : /* */마크 블록과 인라인 주석; //뿐만 아니라 #한 줄 주석으로 사용됩니다. [95]echo 문은 PHP가 출력 텍스트로 제공하는 여러 시설 중 하나입니다 예를 들어, 웹 브라우저,.


키워드와 언어 구문의 관점에서 PHP는 C 스타일 구문과 유사합니다. 경우 조건 에 대한 그리고 동안 루프, 함수 반환은 C, C ++, C #을, Java 및 Perl과 같은 언어에 대한 구문과 유사하다.


다음은 PHP for 루프의 예입니다.


<? php  
for  ( $ x  =  0 ;  $ x  <=  100 ;  $ x ++ )  { 
    echo  "숫자는 $ x <br>" ; 
}  
?>


데이터 유형 


PHP는 정수를 C 언어 long 타입 과 동일한 64 비트 또는 32 비트 부호있는 정수 로 플랫폼 종속 범위에 저장 합니다 . 특정 상황에서는 부호없는 정수가 부호있는 값으로 변환됩니다. 이 동작은 다른 프로그래밍 언어의 동작과 다릅니다. [96] 정수 변수는 10 진수 (양수 및 음수), 8 진수 , 16 진수 및 2 진수 표기법을 사용하여 할당 할 수 있습니다 .

부동 소수점 숫자는 플랫폼 별 범위에도 저장됩니다. 부동 소수점 표기법이나 두 가지 형식의 과학 표기법을 사용하여 지정할 수 있습니다 . [97] PHP 네이티브 갖는 부울 네이티브 부울 타입과 유사한 유형 자바 및 C ++를 . 부울 유형 변환 규칙을 사용하면 Perl 및 C ++ 에서 와 같이 0이 아닌 값은 true로 해석되고 0은 false로 해석됩니다 . [97]

null 데이터 유형은 값이없는 변수를 나타냅니다. NULL이 데이터 형식에 대해 유일하게 허용되는 값입니다. [97]

"자원"유형의 변수는 외부 소스의 자원에 대한 참조를 나타냅니다. 이들은 일반적으로 특정 확장 기능의 함수에 의해 생성되며 동일한 확장자의 함수로만 처리 할 수 ​​있습니다. 예에는 파일, 이미지 및 데이터베이스 자원이 포함됩니다. [97]

배열은 PHP가 처리 할 수있는 모든 유형의 요소 (예 : 자원, 객체 및 기타 배열)를 포함 할 수 있습니다. 순서는 값 목록과 키와 값 모두가 있는 해시에 보존되며 두 항목은 혼합 될 수 있습니다. [97] PHP도 지원 문자열 따옴표 따옴표, nowdoc 또는 함께 사용할 수 히어 닥 구. [98]

표준 PHP 라이브러리 (SPL)는 표준 문제를 해결하려고 시도하고 효율적인 데이터 액세스 인터페이스와 클래스를 구현합니다. [99]

함수
PHP는 핵심 언어로 많은 함수를 정의하고 있으며 많은 함수가 다양한 확장 기능으로 제공됩니다. 이 함수들은 온라인 PHP 문서에 잘 설명되어 있습니다. [100] 에서 설명하지만, 내장 된 라이브러리는, 명명 규칙과 연관된 불일치 다양한 갖는다 이력 상술.

사용자 정의 함수는 개발자가 정의 할 수 있습니다 (예 :

function  myAge ( $ birthYear )  {                                   // 함수를 정의합니다.이 이름은 "myAge"입니다. 
    $ yearsOld  =  date ( 'Y' )  -  $ birthYear ;                        // 연령 
    반환  $ yearsOld를  계산합니다 .  '년'  .  ( $ yearsOld  ! =  1  ?  ''  :  '' );  // 설명적인 형식으로 나이를 반환합니다. 
}

에코  '나는 현재'  입니다.  myAge ( 1981 )  .  ' 늙은.' ;                // 
                                                              myAge ()의 반환 값으로 
연결된 텍스트를 // 출력합니다. // 이 구문의 결과로 myAge ()가 호출됩니다.

2017 년에 위의 샘플 프로그램의 결과물은 '저는 현재 36 세입니다.'


함수 포인터 대신 PHP의 함수는 이름이 들어있는 문자열로 참조 할 수 있습니다. 이런 식으로 일반적인 PHP 함수를 콜백 이나 함수 테이블 과 같이 사용할 수 있습니다 . [101] 사용자 정의 함수는 프로토 타이핑을 하지 않고 언제든지 만들 수 있습니다 . [100] [101] 함수는 허가 코드 블록 내에 정의 할 수 런타임 결정 함수가 정의되어야하는지 여부에있다. 가 function_exists소정의 이름을 가진 함수는 이미 정의되어 있는지 여부를 판단 기능. 함수 호출은 인자가없는 클래스 생성자를 제외하고 괄호를 사용해야합니다.PHP 연산자 new로 호출되는 함수 .이 경우 괄호는 선택 사항입니다.


PHP 5.3까지 익명 함수 및 클로저에 대한 지원 은 PHP에 존재하지 않았습니다. create_function()PHP 4.0.1부터 존재 하지만 , eval()프로그램 실행 중에 일반적인 PHP 함수를 만들 수 있는 단순한 랩퍼 일뿐 입니다. [102] PHP 5.3 익명 함수 또는 "폐쇄"를 정의하는 신택스를 추가 [103] 주변 영역의 변수를 캡처 할 수 :

함수  getAdder ( $ x )  { 
    return  함수 ( $ y )  사용  ( $ x )  { 
        return  $ x  +  $ y ; 
    }; 
}

$ adder  =  getAdder ( 8 ); 
echo  $ adder ( 2 );  // "10"을 인쇄합니다.

위의 예제에서 getAdder()함수는 전달 된 인수 $x(키워드 use가 어휘 컨텍스트에서 변수를 가져옴) $y를 사용하여 클로저를 작성합니다.이 인수는 추가 인수 를 사용하여 작성된 클로저를 호출자에게 리턴합니다. 이러한 함수는 first-class 객체로서, 변수에 저장되거나 다른 함수에 매개 변수로 전달 될 수 있습니다 .


동적으로 타입이 지정되는 언어의 경우, PHP는 런타임에 적용되는 함수 매개 변수에 대한 유형 선언을 지원합니다. 이것은 PHP 5.0 이후부터, PHP 5.4 이후의 "callables" , PHP 7.0 이후의 스칼라 (정수, 부동, 문자열 및 부울) 유형에 대한 PHP 5.1 이후의 클래스 및 인터페이스에 대해 지원되었습니다 . [51] PHP 7.0은 또한 매개 변수 목록 다음에 콜론이 오는 유형 이름을 삽입하여 표현 된 함수 리턴 유형에 대한 유형 선언을 가지고 있습니다. [50] 예를 들어, getAdder이전의 예에서 함수이므로 PHP 7과 같은 종류로 주석 될 수있다 :


함수  getAdder ( int  $ x ) :  \ Closure  { 
    return  function ( int  $ y )  use  ( $ x )  :  int  { 
        return  $ x  +  $ y ; 
    }; 
}

$ adder  =  getAdder ( 8 ); 
echo  $ adder ( 2 );         // "10"을 
출력합니다. echo  $ adder ( null );      잘못된 유형이 전달 되었기 때문에 예외를 throw합니다. 
$ adder  =  getAdder ([]);  // 또한 예외를 throw합니다.

기본적으로 스칼라 유형 선언은 약한 타이핑 원칙을 따릅니다. 예를 들어, 매개 변수의 유형이 intPHP 인 경우 정수뿐만 아니라 변환 가능한 숫자 문자열, 부동 소수점 또는 부울을 해당 함수에 전달할 수 있으며 변환 할 수 있습니다. [51] 그러나 PHP 7은 "strict typing"모드를 사용합니다.이 모드는 함수 호출시 이러한 변환을 허용하지 않고 파일 내에서 반환합니다. [51]


객체 지향 프로그래밍

기본 객체 지향 프로그래밍 기능은 PHP 3에서 추가되었으며 PHP 4에서 향상되었습니다. [5] 이것은 PHP가 언어를 사용하는 프로그래머가 창의적인 작업을 쉽게 수행 할 수 있도록 더 많은 추상화를 가능하게합니다. PHP 5에서는 객체 처리가 완전히 다시 작성되어 기능 집합이 확장되고 성능이 향상되었습니다. [105] PHP 이전 버전은 오브젝트가 같이 처리 한 치형 . [105] 이 방법의 단점은 코드가 PHP의 복사본을 만드는 것이 아니라 전달 된 객체를 수정하려는 경우 PHP의 "참조"변수를 많이 사용해야한다는 것입니다. 새로운 접근법에서 객체는 값이 아닌 핸들 에 의해 참조됩니다 .


PHP 5는 추상 클래스 , 최종 클래스 , 추상 메소드 및 최종 메소드 와 함께 private 및 protected 멤버 변수 및 메소드를 도입했습니다 . 또한 C ++ 와 같은 다른 객체 지향 언어 및 표준 예외 처리 모델 과 유사한 생성자 및 소멸자 를 선언하는 표준 방법을 소개했습니다 . 또한 PHP 5는 인터페이스를 추가 하고 여러 인터페이스를 구현할 수있었습니다. 객체가 런타임 시스템과 상호 작용할 수있게 해주는 특별한 인터페이스가 있습니다. ArrayAccess를 구현하는 객체 는 다음과 함께 사용할 수 있습니다.Iterator 또는 IteratorAggregate를 구현하는 배열 구문 및 객체를 foreach 언어 구문 과 함께 사용할 수 있습니다 . 아무 없다 가상 테이블 엔진의 특징은, 그래서 정적 변수는 이름 대신 컴파일시에 참조 바인딩됩니다. [106]


개발자가 예약어를 사용하여 객체의 사본을 생성 clone하면 Zend 엔진은 __clone()메소드가 정의 되었는지 여부를 확인합니다 . 그렇지 않은 경우 __clone()객체의 속성을 복사 하는 기본값 을 호출 합니다. __clone()메소드가 정의 된 경우 , 작성된 오브젝트에서 필요한 특성을 설정하는 책임이 있습니다. 편의상 엔진은 소스 객체의 속성을 가져 오는 함수를 제공하므로 프로그래머는 원본 객체의 값순 복제본 으로 시작하고 변경할 필요가있는 속성 만 재정의 할 수 있습니다. [107]


다음은 PHP에서 의 객체 지향 프로그래밍 의 기본 예제입니다 .


class  Person 
{ 
    public  $ firstName ; 
    public  $ lastName ;

    공용  함수  __construct ( $ firstName ,  $ lastName  =  '' )  {  // 선택적인 두 번째 인수 
        $ this -> firstName  =  $ firstName ; 
        $ this- > lastName   =  $ lastName ; 
    }

    public  function  greet ()  { 
        return  '안녕하세요, 제 이름은'  입니다.  $ this -> firstName  . 
               (( $ this- > lastName  ! =  '' )  ?  ( ''  .  $ this- > lastName )  :  '' )  .  '.' ; 
    }

    public  static  function  staticGreet ( $ firstName ,  $ lastName )  { 
        return  '안녕하세요, 제 이름은'  입니다.  $ firstName  .  ''  .  $ lastName  .  '.' ; 
    } 
}

$ he     =  새로운  사람 ( 'John' ,  'Smith' ); 
$ she    =  new  Person ( '샐리' ,  '데이비스' ); 
$ other  =  new  Person ( 'iAmine' );

echo  $ he -> greet ();  // "여보세요, 제 이름은 존 스미스입니다." 
echo  '<br />' ;

echo  $ she -> greet ();  // "여보세요, 제 이름은 샐리 데이비스입니다." 
echo  '<br />' ;

echo  $ other -> greet ();  // "Hello, my name is iAmine"을 출력합니다. 
echo  '<br />' ;

echo  Person :: staticGreet ( 'Jane' ,  'Doe' );  // "여보세요, 제 이름은 Jane Doe입니다."


가시성 PHP의 속성 및 메서드는 사용하여 정의 키워드를 public , private하고 protected. var 만 사용되는 경우 기본값은 public 입니다. var에 대한 동의어입니다 public. 선언 된 항목은 public어디에서나 액세스 할 수 있습니다. 상속 된 클래스 (및 항목을 정의하는 클래스)에 protected대한 액세스를 제한합니다 . 항목을 정의하는 클래스에만 가시성을 제한합니다. [108] 동일한 유형의 객체가 같은 인스턴스가 아닌 경우에도 서로의 개인 보호 멤버에 액세스 할 수 있습니다. PHP의 멤버 가시성 기능은 "매우 유용합니다."라고 때때로 기술되었습니다. [109]private그러나 때로는 "부적절하고 최악의 경우에는 긍정적 인 해로움"이라고 묘사되기도합니다. [110]


구현


독창적이고 완벽하고 광범위하게 사용되는 PHP 구현은 젠드 엔진에 의해 구동되며 단순히 PHP로만 알려져 있습니다. 다른 구현체와의 모순을 없애기 위해 비공식적으로 "Zend PHP"라고합니다. Zend Engine은 PHP 소스 코드 를 실행 가능한 내부 형식으로 컴파일 하므로 인터프리터 로 작동합니다 . [111] [112] 이것은 PHP의 "레퍼런스 구현"이기도합니다. PHP는 정식 명세가 없기 때문에 젠드 PHP의 의미는 PHP 자체의 의미를 정의합니다. 젠드 (Zend)의 작동 방식에 의해 정의 된 PHP의 복잡하고 미묘한 의미론 때문에, 경쟁하는 구현체가 완전한 호환성을 제공하기가 어렵습니다.


PHP의 스크립트 당 단일 요청 실행 모델과 Zend Engine이 인터프리터라는 사실은 비효율적입니다. 결과적으로 PHP 성능을 향상시키는 데 도움이되는 다양한 제품이 개발되었습니다. 사용하여 PHP 소스 코드를 웹 페이지, PHP 스크립트는 또한 PHP 엔진의 내부 형식으로 배포 할 수 있습니다 액세스 할 때마다 컴파일해야 실행 시간을 단축하지하기 위해 연산 코드 에 의해 작동 캐시, 캐시 의 컴파일 된 양식을 스크립트가 실행될 때마다 코드 를 파싱 하고 컴파일 하는 오버 헤드를 피하기 위해 공유 메모리 에 있는 PHP 스크립트 (opcode) . Opcode 캐시 Zend Opcache 는 버전 5.5부터 PHP에 내장되어 있습니다. [113]널리 사용되는 opcode 캐시의 또 다른 예 는 PECL 확장으로 사용할 수 있는 대체 PHP 캐시 (APC) 입니다. [114]


Zend PHP가 여전히 가장 보편적 인 구현이지만 다른 여러 구현이 개발되었습니다. 이들 중 일부는 컴파일러 이거나 JIT 컴파일을 지원 하므로 완전한 PHP 호환성이 없더라도 Zend PHP보다 성능 이점을 제공합니다. 대체 구현에는 다음이 포함됩니다.


힙합 가상 머신 (HHVM) - 페이스 북에서 개발되고 오픈 소스로 사용 가능하며, PHP 코드를 상위 바이트 코드 (일반적으로 중간 언어로 알려져 있음 )로 변환 한 다음 런타임시 동적으로 x86-64 기계 코드로 변환합니다. JIT ( just-in-time ) 컴파일러를 사용하여 최대 6 배의 성능 개선 효과를 얻을 수 있습니다. [115]

Parrot  - 동적 언어를 효율적으로 실행하도록 설계된 가상 시스템입니다. Pipp은 PHP 소스 코드를 Parrot 중간 표현으로 변환 한 다음 Parrot의 바이트 코드로 변환하고 가상 시스템에서 실행합니다.

Phalanger  - PHP를 CIL ( Common Intermediate Language ) 바이트 코드로 컴파일

HipHop  - Facebook에서 개발되고 오픈 소스로 사용 가능하며, PHP 스크립트를 C ++ 코드 로 변환 한 다음 결과 코드를 컴파일하여 서버로드를 최대 50 %까지 줄입니다. 2013 년 초, Facebook은 배포의 어려움과 create_function () 및 eval () 구문을 비롯한 전체 PHP 언어에 대한 지원 부족을 비롯하여 여러 가지 이유로 인해 HHVM을 선호했습니다 . [116]


라이센스 


PHP는 다음과 같은 PHP 라이센스에 따라 배포되는 자유 소프트웨어 입니다. [117]


이 소프트웨어에서 파생 된 제품은 group@php.net의 사전 서면 승인 없이는 "PHP"라고 할 수 없으며 이름에 "PHP"를 사용할 수 없습니다. 귀하의 소프트웨어가 "PHP Foo"또는 "phpfoo"가 아닌 " Foo for PHP" 라고 말하면 PHP와 연계하여 작동 함을 나타낼 수 있습니다 .


"PHP"사용에 대한이 제한은 PHP 라이센스를 GPL ( General Public License) 과 호환하지 못하게 만드는 반면, 젠드 라이센스는 원본 BSD 라이센스 와 유사한 광고 조항으로 인해 호환되지 않습니다 . [118]


개발과 커뮤니티 


PHP는 소스 배포판에 다양한 무료 및 오픈 소스 라이브러리 를 포함하거나 PHP 바이너리 빌드 결과로 사용합니다. PHP는 근본적으로 FTP ( File Transfer Protocol ) 서버와 PostgreSQL , MySQL , Microsoft SQL Server 및 SQLite (임베디드 데이터베이스), LDAP 서버 등을 비롯한 많은 데이터베이스 서버 에 액세스하기위한 모듈이 내장 된 인터넷 기반 시스템입니다. . stdio 계열 과 같은 C 프로그래머에게 익숙한 수많은 함수 는 표준 PHP 빌드에서 사용할 수 있습니다. [119]


PHP는 개발자가 쓸 수있는 확장 에서 C를 PHP 언어에 기능을 추가 할 수 있습니다. PHP 확장은 PHP로 정적으로 컴파일되거나 런타임에 동적으로로드 될 수 있습니다. Windows API , Unix 계열 운영 체제의 프로세스 관리 , 멀티 바이트 문자열 ( Unicode ), cURL 및 여러 가지 널리 사용되는 압축 형식에 대한 지원을 추가하기 위해 수많은 확장이 작성되었습니다 . 확장을 통해 제공되는 다른 PHP 기능으로는 IRC 와의 통합 , 이미지 및 Adobe Flash 컨텐츠 의 동적 생성 , PHP Data Objects데이터베이스에 액세스하기 위해 사용되는 추상 계층 (PDO), [120] [121] [122] [123] [124] [125] [126] , 심지어 음성 합성 . 문자열과 배열을 다루는 것과 같은 언어의 핵심 기능 중 일부는 확장 기능으로도 구현됩니다. [127] PHP 확장 커뮤니티 도서관 (PECL) 프로젝트는 PHP 언어의 확장을위한 저장소입니다. [128]


제퍼 (Zephir )와 같은 일부 프로젝트 는 PHP 확장을 고급 언어로 작성하고 기본 PHP 확장으로 컴파일 할 수있는 기능을 제공합니다. C에서 PHP 확장을 직접 작성하는 대신 이러한 접근 방식은 확장 개발을 단순화하고 프로그래밍 및 테스트에 필요한 시간을 단축합니다. [129]


PHP의 그룹 (2015 십명 구성 :) 티에스 C 안츤 , 스티그 바켄 , 셰인 카라베오 , 앤디 굿먼스 , 라스무스 러 도프 , 샘 루비 , 사스카 슈만 , 지브 수라스키 , 짐 윈스테드 , 안드레이 즈미에비스키 . [130]


Zend Technologies 는 프로그래머가 공인 PHP 개발자가 될 수 있도록 PHP 5.5 [131] 시험을 기반으로 PHP 인증을 제공합니다 .


설치 및 구성


PHP에 대한 지원을 웹 서버에 추가하는 데는 네이티브 웹 서버 모듈 또는 CGI 실행 파일의 두 가지 주요 방법이 있습니다. PHP에는 Apache HTTP Server , Microsoft IIS , Netscape (현재 제공되지 않음) 및 iPlanet을 포함한 많은 웹 서버에서 지원되는 SAPI ( Server Application Programming Interface) 라는 직접 모듈 인터페이스 가 있습니다. OmniHTTPd와 같은 일부 다른 웹 서버 는 Microsoft 의 웹 서버 모듈 인터페이스 인 ISAPI ( Internet Server Application Programming Interface)를 지원합니다 . PHP에 웹 서버에 대한 모듈 지원이 없다면, CGI ( Common Gateway Interface ) 또는 FastCGI프로세서; 이 경우 웹 서버는 PHP의 CGI 실행 파일을 사용하여 PHP 파일에 대한 모든 요청을 처리하도록 구성됩니다. [132]


PHP-FPM (FastCGI 프로세스 관리자)은 5.3.3 버전 이후 공식 PHP 배포판에 번들로 제공되는 PHP 용 대안 FastCGI 구현입니다. [133] 이전 FastCGI 구현과 비교할 때, 여기에는 몇 가지 추가 기능이 포함되어 있으며 대부분로드가 많은 웹 서버에 유용합니다. [134]


명령 줄 스크립팅을 위해 PHP를 사용하는 경우 PHP 명령 줄 인터페이스 (CLI) 실행 파일이 필요합니다. PHP는 PHP 4.3.0부터 CLI SAPI를 지원합니다. [135] 이 SAPI의 주요 초점은 PHP를 사용하여 셸 응용 프로그램을 개발 하는 것입니다. CLI SAPI와 다른 SAPI 간에는 많은 차이점이 있지만 동일한 동작을 많이 공유합니다. [136]


PHP는 다른 웹 서버에 SAPI라는 직접 모듈 인터페이스를 가지고 있습니다. [137] 윈도우에 PHP 5 아파치 2.0의 경우에는,이 (A)의 형태로 제공되어 DLL을 호출 파일 php5apache2.dll , [138] , 다른 기능 중에서, PHP와 웹 서버 사이의 인터페이스를 제공하는 모듈이다 서버가 이해할 수있는 형태로 구현됩니다. 이 양식은 SAPI로 알려져 있습니다.


다양한 웹 서버 확장을위한 다양한 종류의 SAPI가 있습니다. 예를 들어 위에 나열된 것 외에도 PHP 언어에 대한 기타 SAPI에는 CGI ( Common Gateway Interface ) 및 CLI (Command -Line Interface )가 포함됩니다. [ 139]


PHP는 또한 PHP-GTK 확장 을 사용하여 데스크탑 그래픽 사용자 인터페이스 (GUI) 응용 프로그램 을 작성하는 데 사용할 수 있습니다 . PHP-GTK는 공식 PHP 배포판에 포함되어 있지 않으며 [132] , 확장 버전으로 PHP 버전 5.1.0 이상에서만 사용할 수 있습니다. PHP-GTK를 설치하는 가장 일반적인 방법은 소스 코드에서 컴파일하는 것입니다. [140]


PHP가 클라우드 환경 에 설치되고 사용될 때 클라우드 관련 기능을 사용하기위한 소프트웨어 개발 키트 (SDK)가 제공됩니다. 예 :


Amazon Web Services 는 PHP 용 AWS SDK [141] 를 제공합니다 .

Windows Azure 는 Windows Azure SDK for PHP와 함께 사용할 수 있습니다. 또한,

수많은 PHP 구성 요소와 확장 기능에 영향을 미치는 수많은 구성 옵션이 지원됩니다. [144] [144]php.ini PHP가 사용되는 방식에 따라 설정 파일 이 다른 위치에서 검색됩니다. [145] 구성 파일이 여러 부분들로 분할된다 [146] 의 구성 옵션 중 일부는 웹 서버 구성에서 설정 될 수있다. [147]


사용


PHP는 서버 측 웹 개발에 특히 적합한 범용 스크립팅 언어입니다.이 경우 PHP는 일반적으로 웹 서버 에서 실행됩니다 . 요청 된 파일의 모든 PHP 코드 는 PHP 런타임에 의해 실행 되며 일반적으로 웹 사이트 또는 다른 곳에서 사용되는 동적 웹 페이지 컨텐츠 또는 동적 이미지 를 작성 합니다. [148] 또한 명령 행 스크립팅 및 클라이언트 측 그래픽 사용자 인터페이스 (GUI) 응용 프로그램에도 사용할 수 있습니다. PHP는 대부분의 웹 서버, 많은 운영 체제 및 플랫폼 에 배포 할 수 있으며 많은 관계형 데이터베이스 관리 시스템 과 함께 사용할 수 있습니다(RDBMS). 대부분의 웹 호스팅 제공 업체는 고객이 PHP를 사용할 수 있도록 지원합니다. PHP 그룹은 무료로 사용할 수 있으며 PHP 그룹은 사용자가 자신 만의 용도로 빌드, 사용자 정의 및 확장 할 수있는 완전한 소스 코드를 제공합니다. [8]



동적 웹 페이지 : 서버 측 스크립팅 예제 (PHP 및 MySQL).

PHP가 주로 역할 필터 , [149] 파일 또는 스트림에 포함 된 텍스트 및 / 또는 PHP 지시 입력을 취하고 다른 데이터 스트림을 출력한다. JSON , XML 또는 이미지 또는 오디오 형식과 같은 이진 데이터 가 될 수 있지만 일반적으로 출력은 HTML 입니다. PHP 4 이후, PHP 파서는 입력을 컴파일 하여 젠드 엔진에 의한 처리 를 위해 바이트 코드 를 생성하여 이전 인터프리터에 비해 향상된 성능을 제공 합니다. [150]


원래 동적 생성하기위한 웹 페이지를 , PHP는 지금에 주로 초점을 맞추고 서버 측 스크립트 , [151] 그리고 그것은에 웹 서버에서 동적 콘텐츠를 제공하는 다른 서버 측 스크립트 언어와 유사하다 클라이언트 와 같은, 마이크로 소프트 의 클래식 ASP, 썬 마이크로 ' 자바 서버 페이지 , [152] 및 mod_perl이 . PHP는 많은 개발 끌고있다 소프트웨어 프레임 워크 빌딩 블록 및 홍보 할 수있는 설계 구조를 제공 신속한 응용 프로그램 개발 (RAD)를. 이들 중 일부는 PRADO , CakePHP, Symfony , CodeIgniter , Laravel , Yii Framework , Phalcon 및 Zend Framework 등이 있으며 다른 웹 프레임 워크 와 비슷한 기능을 제공합니다 .


LAMP 아키텍처는 웹 응용 프로그램을 배포하는 방법으로 웹 업계에서 인기를 끌고있다. [153] PHP는 리눅스 , 아파치 및 MySQL 과 함께이 번들 에서 P 로 일반적으로 사용 되지만, P 는 파이썬 , 펄 또는 그 중 일부를 참조 할 수도 있습니다 . 비슷한 패키지 인 WAMP 와 MAMP 도 Windows 와 macOS에서 사용할 수 있습니다.첫 번째 문자는 해당 운영 체제를 나타냅니다. PHP와 Apache 모두 macOS 기본 설치의 일부로 제공되지만이 패키지를 사용하는 사용자는보다 쉽게 ​​최신 설치를 유지할 수있는 간단한 설치 메커니즘을 찾습니다.


2007 년 4 월 현재 2 천만 개가 넘는 인터넷 도메인에 PHP가 설치된 서버에서 웹 서비스가 호스팅되고 mod_php 가 가장 많이 사용되는 Apache HTTP Server 모듈 로 기록되었습니다 . [154] 2017 년 5 월 현재 PHP는 가장 인기있는 1,000 만 개 웹 사이트의 83 %에서 서버 측 프로그래밍 언어로 사용되었습니다. [155] 웹 콘텐츠 관리 시스템 PHP 작성된 포함 위키 , [156] 줌라 , [157] 레즈 게시 , 레즈 플랫폼 , SilverStripe , [158] 워드 , [159] 드루팔 , [160]및 무들 . [161] 에서, PHP 작성된 웹 사이트 백 - 엔드 및 / 또는 사용자 실부는, 한국어 , [162] 디그 , [163] 텀블러 , [164] 데일리 모션 , [165] 및 여유를 . [166]


특정 및 고급 사용 시나리오를 위해 PHP는 C 또는 C ++ 에서 사용자 정의 확장을 작성하기위한 잘 정의되고 문서화 된 방법을 제공합니다 . [167] [168] [169] [170] [171] [172] [173] 의 추가의 형태 언어 자체를 확장 게다가 라이브러리 , 확장이 중요하며 실내가있는 곳에 실행 속도를 향상시키기위한 방법을 제공하는 진정한 컴파일 언어 를 사용하여 개선되었습니다 . [175] [175 ] [175] PHP는 또한 다른 소프트웨어 프로젝트에 자신을 포함시키기위한 잘 정의 된 방법을 제공합니다. 그렇게하면 PHP를 내부 스크립팅 언어 로 쉽게 사용할 수 있습니다.다른 프로젝트의 경우 프로젝트의 특정 내부 데이터 구조 와 긴밀한 인터페이스를 제공 합니다. [176]


PHP 는 "pthreads" PECL 확장을 통해 스레드를 사용할 수 있지만 핵심 언어 수준에서 멀티 스레딩 에 대한 지원이 부족하기 때문에 혼합 검토를 받았습니다 [177] . [178 ]


2013 년 1 월 현재 PHP는 2 억 4 천만 개 이상의 웹 사이트 (샘플링 된 웹 사이트 중 39 %) 에서 사용되고 210 만 개의 웹 서버 에 설치되었습니다 .


보안


2013 년에는 National Vulnerability Database에 나열된 모든 취약점 중 9 % 가 PHP와 연결되었습니다. [181] 역사적으로,이 데이터베이스의 1996 년 이후 나열된 모든 취약점의 약 30 %가 PHP에 연결된다. 언어 자체 또는 핵심 라이브러리의 기술적 보안 결함은 빈번하지 않습니다 (PHP는 나열된 프로그램의 약 20 %에 적용되지만 2009 년에는 22 건으로 전체의 약 1 %였습니다). [182] 프로그래머가 일부 언어에는 많은 문제를 유발하는 입력 유효성 검사 의 부족을 자동으로 감지하기위한 오염 검사 가 포함됩니다 . 이러한 기능은 PHP 용으로 개발되고 있습니다. [183]그러나 석방으로의 그것의 포함은 과거에 여러 번 거절되었다. [ 185]


Suhosin 및 Hardening -Patch 와 같은 고급 보호 패치가 있는데 , 이는 웹 호스팅 환경을 위해 특별히 고안되었습니다. [186] 주로 이러한 환경이 부주의하게 작성된 코드가 실행될 수있는 곳으로 간주되기 때문입니다.


PHP 응용 프로그램을 보안 문제로 만드는 특정 언어 기능과 구성 매개 변수 (주로 이러한 런타임 설정의 기본값)가 있습니다. 이 중 magic_quotes_gpc 및 register_globals [187] 구성 지시문이 가장 잘 알려져 있습니다. 후자는 URL 매개 변수를 PHP 변수로 만들어 공격자가 초기화되지 않은 전역 변수의 값을 설정하고 PHP 스크립트의 실행을 방해하도록하여 심각한 보안 취약성을위한 경로를 열었습니다. " magic quotes "및 "register globals"에 대한 지원은 PHP 5.3.0부터 사용되지 않으며 PHP 5.4.0부터 제거되었습니다. [188]


런타임 설정 취약점의 또 다른 예는 업로드 된 이미지가 저장된 디렉토리에 대해 PHP 실행을 비활성화하지 못하게하는 것 ( 엔진 구성 지시어 를 통해 ) [189] ; 기본 설정을 그대로두면 업로드 된 이미지에 악의적 인 PHP 코드가 포함될 수 있습니다. [190] [191] [192] 또한 공유 웹 호스팅 환경 에서 PHP 확장 기능의 동적로드 ( enable_dl 구성 지시문을 통한 ) [193] 를 사용하면 보안 문제가 발생할 수 있습니다. [194] [195]


또한 호환되지 않는 값을 가져 오는 묵시적인 형식 변환 은 프로그래머의 의도와 동일하게 취급되므로 보안 문제가 발생할 수 있습니다. 예를 들어 첫 번째로 비교 된 값이 ( 0 × 10 1234 ) 즉 0 인 과학 표기법으로 처리되므로 비교 "0e1234"== "0" 비교의 결과가 참 입니다. 이 기능에 인증 결과 취약점 간단한 기계 포럼 , [196] TYPO3 [197] 과 의 phpBB [198] 때 MD5의 암호 해시 비교했다. 대신 strcmp 함수 또는 ID 연산자 ( === )를 사용해야합니다. "0e1234"=== "0" 은 거짓으로 나타납니다 . 또한,


Zone-H 에서 게시 한 170,000 개가 넘는 웹 사이트 오류에 대한 2013 년 분석 에서 가장 많이 사용 된 기술 (53 %)은 파일 포함 취약점의 악용이었으며 대부분 include , require 및 allow_url_fopen PHP 기능의 안전하지 않은 사용과 관련이 있었습니다. [200 ]



출처 위키백과

스프링 프레임워크


스프링 프레임워크(Spring Framework)는 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로서 간단히 스프링(Spring)이라고도 불린다. 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있다. 대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준프레임워크의 기반 기술로서 쓰이고 있다.


역사


로드 존슨이 2002년에 출판한 자신의 저서인 Expert One-on-One J2EE Design and Developement 에 선보인 코드를 기반으로 시작하여 점점 발전하게 되었다. [1] 이 프레임워크는 2003년 6월에 최초로 아파치 2.0 라이선스로 공개되었으며 주요 버전 이력은 다음과 같다.


1.0 : 2004년 3월

2.0 : 2006년 10월

2.5 : 2007년 11월

3.0 : 2009년 12월

3.1 : 2011년 12월

4.0 : 2013년 12월

2006년에 1.2.6 버전으로 Jolt Productive Award 와 Jax Innovation Award 를 수상하였다.


특징


스프링은 다른 프레임워크에 비해 다음과 같은 특징을 가진다.

경량 컨테이너로서 자바 객체를 직접 관리한다. 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있다.
스프링은 POJO(Plain Old Java Object) 방식의 프레임워크이다. 일반적인 J2EE 프레임워크에 비해 구현을 위해 특정한 인터페이스를 구현하거나 상속을 받을 필요가 없어 기존에 존재하는 라이브러리 등을 지원하기에 용이하고 객체가 가볍다.
스프링은 제어 반전(IoC : Inversion of Control)을 지원한다. 컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출한다.
스프링은 의존성 주입(DI : Dependency Injection)을 지원한다. 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.
스프링은 관점 지향 프로그래밍(AOP : Aspect-Oriented Programming)을 지원한다. 따라서 트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있다.
스프링은 영속성과 관련된 다양한 서비스를 지원한다. iBATIS나 Hibernate 등 이미 완성도가 높은 데이터베이스 처리 라이브러리와 연결할 수 있는 인터페이스를 제공한다.
스프링은 확장성이 높다. 스프링 프레임워크에 통합하기 위해 간단하게 기존 라이브러리를 감싸는 정도로 스프링에서 사용이 가능하기 때문에 수많은 라이브러리가 이미 스프링에서 지원되고 있고 스프링에서 사용되는 라이브러리를 별도로 분리하기도 용이하다.

주요 모듈


스프링에서 사용되는 주요 모듈은 다음과 같다.


제어 반전 컨테이너[편집]

제어 반전(IoC: Inversion of Control) 컨테이너는 스프링의 가장 중요하고 핵심적인 기능으로서 자바의 반영(reflection)을 이용해서 객체의 생명주기를 관리하고 의존성 주입(Dependency Injection)을 통해 각 계층이나 서비스들간의 의존성을 맞춰준다. 이러한 기능들은 주로 환경설정을 담당하는 XML 파일에 의해 설정되고 수행된다.


관점 지향 프로그래밍 프레임워크[편집]

스프링은 로깅이나 보안, 트랜잭션 등 핵심적인 비즈니스 로직과 관련이 없으나 여러 곳에서 공통적으로 쓰이는 기능들을 분리하여 개발하고 실행 시에 서로 조합할 수 있는 관점 지향 프로그래밍(AOP)을 지원한다. 기존에 널리 사용되고 있는 강력한 관점 지향 프로그래밍 프레임워크인 AspectJ도 내부적으로 사용할 수 있으며, 스프링 자체적으로 지원하는 실행시(Runtime)에 조합하는 방식도 지원한다.


데이터 액세스 프레임워크[편집]

스프링은 데이터베이스에 접속하고 자료를 저장 및 읽어오기 위한 여러 가지 유명한 라이브러리, 즉 JDBC, iBATIS(MyBatis), Hibernate 등에 대한 지원 기능을 제공하여 데이터베이스 프로그래밍을 쉽게 사용할 수 있다.


트랜잭션 관리 프레임워크[편집]

스프링은 추상화된 트랜잭션 관리를 지원하며 XML 설정파일 등을 이용한 선언적인 방식 및 프로그래밍을 통한 방식을 모두 지원한다.


모델-뷰-컨트롤러 패턴[편집]

스프링은 웹 프로그램밍 개발 시 거의 표준적인 방식인 Spring MVC라 불리는 모델-뷰-컨트롤러(MVC) 패턴을 사용한다. DispatcherServlet이 Contoller 역할을 담당하여 각종 요청을 적절한 서비스에 분산시켜주며 이를 각 서비스들이 처리를 하여 결과를 생성하고 그 결과는 다양한 형식의 View 서비스들로 화면에 표시될 수 있다.


배치 프레임워크[편집]

스프링은 특정 시간대에 실행하거나 대용량의 자료를 처리하는데 쓰이는 일괄 처리(Batch Processing)을 지원하는 배치 프레임워크를 제공한다. 기본적으로 스프링 배치는 Quartz 기반으로 동작한다.


출처 위키백과

'Java > Spring' 카테고리의 다른 글

Java Spring에서 크로스 도메인(Cross Domain) 허용 설정  (2) 2017.08.31

+ Recent posts