고도몰은 FQN을 이용하여 Class 파일을 자동으로 인클루드하는 Autoload 시스템을 사용합니다.
FQN(Fully Qualified Name)은 네임스페이스의 완전한 이름을 의미합니다. 반드시 네임스페이스와 물리적인 디렉토리 경로가 동일해야 Classloader가 정상 실행됩니다.
Classloader는 system/autoload.php 파일에서 기본 선언되고, user/route.php 에서 사용정의 Class를 사용할 수 있도록 해당 경로를 추가해줍니다. PHP에서는 Classloader를 Loader Stack에 여러 개 등록할 수 있고, Stack의 순서대로 Classloader가 동작하여 Class를 찾습니다. 하지만 고도몰에서는 하나의 Classloader를 사용하며, 내부에서 여러 개의 ClassPathResolver를 등록하여 Loader Stack을 구현하고 있습니다.
고도몰은 요청한 URI에 물리적으로 php 파일을 가지고 있지 않습니다. Application 객체에서 적절한 Controller를 찾아서 실행한 결과를 되돌려 주는 형태로 동작합니다. 이를 위해 Application 객체에서는 사용자의 Request를 근거로, 실행해야할 Controller를 찾기 위해 ControllerNameResolver를 구동되도록 구성되어 있습니다. 일부 확장자를 제외한 어떤 Request 주소가 와도 route.php가 실행됩니다
controller는 framework의 구동을 제외한 솔루션의 기본 공통 작업부터 화면 출력까지의 업무를 관장합니다.
controller의 index() 실행 후, interceptor 후처리를 통해 DataHandler interceptor가 실행되면서 uri에 대응되는 위치에 있는 파일을 실행 처리해줍니다. 파일 안에서는 $data 변수를 통해 data를 가공할 수 있습니다.
예전에는 '웹 서버'와 '웹 브라우저' 이 두 가지 개념만 존재했습니다. 웹 프로그래밍이 매우 단순한 구조였습니다.
사용자에게 보여줄 정보가 담겨있는 것이 HTML 문서이고, HTTP는 이 HTML 문서를 서버와 클라이언트가 서로 주고 받기 위해서 정해놓은 통신규약을 의미합니다.
특정 URI 또는 URL을 웹 브라우저 주소창에 찍으면, 그에 해당하는 HTML 문서를 찾아서 보여주는 것입니다.
인터넷이 발전하고 수많은 사람들이 웹 사이트를 이용하게 되면서, 웹 서버만으로는 많은 수요를 대응할 수 없었습니다. 따라서 CGI를 고안했습니다.
'서버사이드 스크립트' 언어들(php, java, python, perl 등)이 웹 서버와 연결되어, 데이터를 주고 받을 수 있도록 하였습니다. 이때 만든 통신 규약을 CGI라고 합니다.
사용자의 요청을 웹 서버 대신 위임된 서버사이드 스크립트 언어가 대신 처리하고 필요한 데이터를 웹 서버에게 전달해줍니다. DB에 저장된 데이터를 찾고 그 내용을 HTML 문서로 만들어줍니다. 그러면 웹 서버가 그 데이터를 기존 HTML과 똑같이 웹 브라우저에 전달하기만 하면 되기 때문에, 브라우저도 똑같이 해석만 하면 되죠.
이를 통해 개발자는 하나의 파일을 만들고 수정함에 따라 수많은 페이지들을 동일하게 변경하고 관리할 수 있다는 장점이 있습니다.
FTP는 File Transfer Protocol로 서버와 클라이언트 사이에서 TCP/IP(Transmission Control Protocol / Internet Protocol)를 통해 파일을 송수신하기 위해 고안된 프로토콜입니다.
인터넷을 서칭할 때 우리는 http라는 프로토콜을 사용하는데, 파일을 이동할 때는 ftp 라는 프로토콜을 사용합니다. 이 FTP로 파일을 주고 받기 위해서는 FTP 서버와 클라이언트가 필요합니다.
FTP는 주로 대량의 파일을 처리할 필요가 있는 웹 개발 시 유용하게 사용됩니다. 웹 사이트를 수정할 때 FTP 세션을 통해 파일 전송을 관리하면 특정한 파일 업로드, 이미지 파일 추가, 웹 템플릿 이동 등의 작업을 수월하게 처리할 수 있습니다. 그리고 보안에 취약하다는 단점을 보완하기 위해 나온 것이 secure FTP인 SFTP입니다.
echo, print, print_r에 string 변수를 전달하면 동일하게 출력이 됩니다. 이들의 목적은 변수 출력입니다. 그러나 배열을 전달하면, echo와 print는 변수 객체 자체로 출력되지만 print_r은 각 index 위치에 어떤 값을 갖고 있는지 설명해주는 표현이 출력됩니다.
모델, 뷰, 컨트롤러 3가지 구조로 구성되어 있는 소프트웨어 디자인 패턴입니다. 소프트웨어의 비즈니스 로직과 화면을 구분하기 위한 목적에 중점을 두고 있습니다.
모델은 앱이 포함해야할 데이터를 무엇인지를 정의합니다. 데이터 상태가 변경되면 화면을 변경하기 위해서, 뷰에게 알리기도 합니다. 또한 업데이트된 뷰를 제거하기 위해서 다른 로직이 필요한 경우엔 컨트롤러에게 알리기도 합니다.
뷰는 사용자에게 앱의 데이터를 보여주는 방식을 정의합니다. 표시할 데이터는 모델로부터 받습니다.
컨트롤러는 사용자의 입력에 대한 응답으로 모델 또는 뷰를 업데이트하는 로직을 포함합니다. 사용자가 화면에서 입력폼에 입력하고 버튼을 눌러 데이터를 제출했다면, 이는 컨트롤러에게 전송되고 컨트롤러가 모델을 업데이트하도록 처리합니다. 그리고 업데이트된 데이터를 뷰로 전송합니다. 또는 정렬 처리 같이 데이터의 출력 형태만 바꾸고 싶을 수 있습니다. 이런 경우에는 컨트롤러가 모델의 업데이트없이 바로 처리할 수도 있습니다.