목표하는 웹 어플리케이션에 대한 자세한 설명
구현하려는 웹 어플리케이션의 기능들
간단하지만 실제 서비스 같은 어플리케이션입니다.
- 유저가 웹 브라우저로 우리가 구현한 웹 어플리케이션을 이용할 수 있어야 합니다.
- 사용자가 http://domain/start 를 요청하면 파일 업로드 폼이 들어있는 웰컴페이지를 볼 수 있어야 합니다.
- 업로드할 이미지 파일을 선택하여 폼으로 전송하면 해당 이미지는 http://domain/upload 로 업로드되어야 합니다.
- 업로드가 완료되면 업로드한 이미지를 표시해야 합니다.
위의 기능들은 구글링을 통해 코드를 좀 만지면 구현할 수 있지만 단순한 기능 구현을 넘어 좀더 우아하고 적절한 코드를 만들고자 합니다.
그래서 의도적으로 추상화된 부분을 추가하여 좀 더 복잡한 노드 어플리케이션을 만든다는 느낌이 들 수 있도록 해보겠습니다.
어플리케이션 스택
우리가 만들고자 하는 어플리케이션을 자세히 봅시다. 구현하려는 기능들을 위해 어떤 것들을 구현해야 할까요?
- 우리는 웹페이지를 제공해야 합니다. 따라서 HTTP 서버가 필요합니다.
- 서버는 어떤 URL 요청을 받았는지에 따라 다르게 응답해야 합니다. 따라서 요청과 요청을 처리할 핸들러를 연결하기 위한 라우터가 필요합니다.
- 서버로 도착한 요청과 라우팅 된 요청들을 처리하기 위해 실제적인 요청 핸들러가 필요합니다.
- 라우터는 들어오는 모든 POST 데이터를 다룰 수 있어야 합니다. 그리고 해당 데이터를 다루기 편하도록 변환하여 요청 핸들러에게 넘겨줘야 합니다. 따라서 요청 데이터 핸들링이 필요합니다.
- URL에 대한 요청을 다루는 것뿐만 아니라 URL이 요청되었을 때 내용을 표시해야 합니다. 따라서 요청 핸들러가 유저 브라우저로 콘텐츠를 보내기 위해 사용할 뷰 로직이 필요합니다.
- 가장 중요한 것은 유저가 이미지를 업로드 할 수 있도록 세부 사항을 다루는 업로드 핸들링이 필요합니다.
PHP를 이용해 위의 기능들을 구축하는 방법에 대해 생각해보면 mod_php5를 가진 아파치 HTTP 서버를 설치하는 방법을 생각해볼 수 있습니다. 이것은 “웹페이지를 제공하고 HTTP 요청을 받을 수 있어야 한다”는 요구를 PHP만으로는 이룰 수 없음을 의미합니다.
그런데 노드는 다릅니다. 노드로는 우리의 어플리케이션과 HTTP 서버를 통째로 구현할 수 있습니다. 사실 우리의 웹 어플리케이션과 웹 서버는 기본적으로 동일합니다. 해야할 일이 많아 보일 수 있지만 노드를 이용하면 그렇지 않음이 보일 것입니다.
이제부터 여러장에 걸쳐 위의 기능들을 구현해봅시다!
(2주 정도에 걸쳐 모든 포스팅이 완료될 예정입니다!)