Caution: You are browsing the legacy symfony 1.x part of this website.

symfony advent calendar day one: starting up a project

과제

심포니 강림절 달력 (주 - 예수가 태어남을 기념하여 12월 달력을 advent calendar 라고 부름) 은 12월 1일부터 크리스마스 이전까지 24일동안 매일 발행될 24개의 튜토리얼 모음입니다. 각 튜토리얼에 적힌 내용을 따라하는데는 1시간이 안 걸릴 것이고, 튜토리얼을 따라하는 동안 웹 2.0 어플리케이션이 개발되는 과정을 처음부터 끝까지 보실 수 있을 것입니다. 크리스마스에는 개발된 결과물이 온라인상에서 사용이 가능할 것이며, 소스는 오픈소스형태가 될 것입니다. 이 어플리케이션은 유용하고 흥미롭고 재밌을 것입니다. 이 응용프로그램은 흥미롭고, 재밌고, 유용할 것입니다.

24 일동안 매일 하루에 한 시간보다 적은 시간을 쓴다면, 그것은 24 시간 이하입니다. 우리는 개발자 여러분이 심포니를 배우는데 걸리는 시간이 24 시간 이하라고 생각합니다. 매일매일 우리의 어플리케이션에는 새로운 기능이 추가가 될 것이며, 이를 통해 여러분에게 심포니의 기능을 어떻게 활용하면 되는지, 그리고 심포니를 활용한 웹 개발은 어떻게 진행되는지를 보여드릴 것입니다. 매일매일 여러분은 심포니를 활용한 웹 개발이 얼마나 빠르고 효율적인지 깨닫게 될 것이며, 아마 더 배우고 싶어질 것입니다.

이걸로는 부족할 것 같기도 하고, 저희가 개우르기 때문이기도 하지만, 21일째는 계획이 없습니다. 여기 모인 분들이 가장 원하는 기능이 그 날에 추가될 것입니다. 그 날까지는 아무런 준비도 하고 있지 않겠지만, 가능하리라 생각합니다. 아마도 그날은 "심포니 고수에게 듣다" 정도가 되지 않을까 싶네요.

프로젝트

처음에는 이번 프로젝트에 할일 목록이나 주소록, 또는 온라인 서점 같은 간단한 단순 프로그램을 만들 계획이었습니다. 하지만 저희는 심포니를 좀 더 유용하고 창의적인 프로젝트에 사용해서 다양한 기능을 가지고 규모도 작지 않은, 그런 것을 만들고 싶어졌습니다. 이를 통해 심포니가 복잡한 상황에서도 전문적인 웹 어플리케이션을 힘 안 들이고도 멋지게 만들 수 있다는 것을 증명해 보이고 싶습니다.

또 많은 사람들이 실제로 응용프로그램을 사용하도록 하고 싶습니다. 이를 통해 심포니 웹사이트가 일정 수준이상의 부하를 감당할 수 있다는것을 보여 줄 수 있을 테니까요. 이것들이 왜 이 응용프로그램이 실제로 서비스를 하여야 하며, 기존의 욕구를 충족시켜야 하는지에 대한 이유입니다. 말하자면 일종의 부하 테스트인 셈입니다. 다시 말하면, 여러분의 도움이 필요합니다. 이 웹 프로젝트를 digg 에 등록하고, 북마크 하고, 블로그에도 쓰고, 주변에 이야기 해서 얼마나 많은 부하를 감당 가능한지 살펴보도록 도와주십시오.

프로젝트 내용은 아직은 비밀로 하겠습니다. 프로젝트 내용이 무엇일지 혼자서 상상해 보는 것도 재미있겠지요? 하지만 프로젝트에 대해 얘기를 해야 하니, 프로젝트 이름만은 알려 드리겠습니다. askeet (주 - ask it)

오늘 할 것들

오늘 할일들은 개발환경을 정리하고 웹 브라우저를 통해 프로그램 첫 화면을 보여주는 것입니다. 먼저 개발환경 정리를 위해 심포니 설치, 응용프로그램 생성, 웹 서버 설정, 그리고 버전 컨트롤 시스템 설정을 할 것입니다.

기존의 지침서들을 이미 따라해 보신 분들에게는 쉽겠지만 그렇지 않으신 분들에게는 어려울 수 있습니다. 혹시 어렵게 느껴지시더라도 새로운 것을 배울땐 늘상 그렇듯 이해해 주시기 바랍니다.

오늘 설명은 여러분이 *nix 환경에서 아파치와 MySQL, 그리고 PHP 5 가 설치되어 있다는 전제에서 이뤄질 것 입니다. 만약 여러분이 윈도우 환경을 사용하더라도 크게 걱정할 것은 없습니다. 몇가지 명령들을 cmd 프롬프트에서 입력하기만 하면 다른 것들은 문제가 없을 것입니다.

심포니 설치

심포니를 설치하는 가장 간단한 방법은 PEAR 을 사용하는 것입니다. 하지만 '채널' 기능을 사용해서 심포니의 채널에 접근해야하기 때문에 먼저 PEAR 를 1.4.0 또는 그 이상의 버전으로 업그레이드 해야 합니다. (PHP 5.1.0 을 사용하고 있다면 PEAR 1.4.5 가 포함되어 있기에 관계없습니다.)

$ pear upgrade PEAR

참고: PEAR 와 관련해서 문제가 있다면 설치 부분을 참고하세요.

이제 'symfony' 채널을 추가합니다.

$ pear channel-discover pear.symfony-project.com

이제 최신 버전의 심포니를 설치합니다.

$ pear install symfony/symfony

심포니 설치가 완료되었는지 다음 명령을 통해 확인할 수 있습니다.

$ symfony -V

symfony -T 명령을 통해서 이 커맨드 라인 툴이 어떤 기능을 가지고 있는지 확인 할 수 있습니다. 온라인 문서들 중 설치 부분에는 PEAR 를 통한 방법 외에도 tgz 압축파일이나 svn 접근을 통한 설치방법도 나와 있으니 관심이 있다면 참고하십시오. 심포니 위키 에 PEAR 없이 심포니를 설치하는 방법을 여러 분들이 상세히 적어주셨으니 이를 참고하는 것도 좋을 것입니다.

프로젝트 설정

심포니에서는 같은 데이터 모델을 갖는 어플리케이션들을 묶어서 프로젝트라고 부릅니다. 이번 'askeet' 프로젝트에는 frontend 와 backend, 두개의 어플리케이션이 사용될 것입니다. 프로젝트 공간은 어플리케이션들을 위해 사용되므로 가장 먼저 만들어집니다. 프로젝트를 생성하기 위해서는 프로젝트를 생성할 디렉토리에서 symfony init-project 라는 명령을 사용합니다.

$ mkdir /home/sfprojects/askeet
$ cd /home/sfprojects/askeet
$ symfony init-project askeet

이제 symfony init-app 명령을 사용하여 frontend 어플리케이션을 생성합니다.

$ symfony init-app frontend

쉽지요?

참고: 윈도우 사용자들은 프로젝트를 만들때 현재 디렉토리 혹은 상위 디렉토리들 중 하나가 Documents and Settings 처럼 스페이스를 포함하고 있지는 않은지 확인하십시오.

웹 서버 설정

웹 서버 설정

이제 새로운 어플리케이션을 사용할 수 있도록 아파치 설정을 바꿀 차례입니다. 어플리케이션들은 가상 호스트 방식으로 설정되는 것이 바람직하며, 여기서는 가상 호스트 방식만을 설명하도록 하겠습니다. 만약 alias 방식을 선호하신다면, 온라인 문서들 중에서 웹 서버 설정 부분을 참고하시기 바랍니다.

Apache/conf/ 디렉토리의 httpd.conf 파일을 열고 다음과 같이 추가하십시오.

<VirtualHost *:80>
  ServerName askeet
  DocumentRoot "/home/sfprojects/askeet/web"
  DirectoryIndex index.php
  Alias /sf /usr/local/lib/php/data/symfony/web/sf

  <Directory "/home/sfprojects/askeet/web">
   AllowOverride All
  </Directory>
</VirtualHost>

참고: /sf alias 는 PEAR 디렉토리중 data 디렉토리에 있는 symfony 디렉토리를 가르켜야 합니다. 심포니는 해당 디렉토리 아래에 있는 몇몇 이미지들과 자바스크립트들을 사용하며, 해당 디렉토리는 웹 디버그 툴바와 AJAX 헬퍼가 정상 동작하기 위해서도 필요합니다.

윈도우즈에서는 Alias 부분을 다음과 같이 수정하면 됩니다.

  Alias /sf "C:\php\pear\data\symfony\web\sf"

도메인 이름 설정

askeet 도메인 네임은 로컬 머신에 등록되어야 합니다.

만약 여러분이 리눅스 시스템을 사용중이라면, /etc/hosts 파일을 수정하면 됩니다. 만약 여러분이 Windows XP 를 사용중이라면 C:\WINDOWSsystem32\drivers\etc` 디렉토리에 수정할 파일이 있습니다.

파일에 다음을 추가하면 됩니다.

127.0.0.1         askeet

참고: 도메인 이름을 로컬 머신에 추가하기 위해서는 시스템 관리자 권한이 필요합니다.

만약 새로운 호스트를 추가하는 방식이 맘에 안 든다면 Listen 문장을 웹 서버 설정 파일에 추가하여 다른 포트를 사용하도록 할 수 있습니다.

설정 확인

아피치를 재시동 하고, 방금 생성한 어플리케이션에 접속이 가능한지 확인해 봅시다.

http://askeet/

축하합니다

참고: 심포니는 mod_rewrite 모듈을 사용해서 /index.php/ 부분을 URL 에서 제거합니다. 만약 이 기능을 사용하고 싶지 않거나 웹 서버가 이 기능을 지원하지 않는다면, web/ 디렉토리 아래의 .htaccess 파일을 제거하십시오. 만약 여러분이 사용중인 아파치가 mod_rewrite 와 함께 컴파일 되지 않았다면 mod_rewrite 동적 라이브러리가 (DSO) 가 설치 여부와 아래 내용이 httpd.conf 에 있는지 여부를 확인하십시오.

AddModule mod_rewrite.c
LoadModule rewrite_module modules/mod_rewrite.so

스마트 URL 과 관련해서는 온라인 문서들 중 라우팅 부분을 참조하세요.

개발 환경은 아래 주소로 접근 가능하니 접속해 보시기 바랍니다.

http://askeet/frontend_dev.php/

우측 상단에 있는 웹 디버그 툴바와 작은 아이콘 이미지들이 보이신다면 Alias sf/ 설정이 올바르게 된 것입니다.

웹 디버그 툴바

만약 IIS 서버를 사용중이라면 조금 다른 설정이 필요합니다. 관계된 다른 튜토리얼 을 참고하시기 바랍니다..

Subversion

저희들의 원칙중 하나는 기존 코드가 망가지는 것을 두려워하지 않는다는 것입니다. 우리는 빠르게 일하길 바라고, 새로운 코드가 맘에 들지 않는다면 뒤로 돌아가길 바라며, 여러 사람들이 함께 일하고, 여러분들이 매일매일의 새로운 버전의 어플리케이션을 다운로드 받을 수 있길 바랍니다. 이 모든 것을 위해서 우리는 소스 버전 관리 툴인 Subversion 을 도입할 것입니다. 여러분이 이미 subversion 서버를 가지고 있고 해당 서버에 접근할 수 있다고 가정하고 진행하겠습니다.

먼저 askeet 프로젝트를 위한 새로운 저장소를 만듭니다.

$ svnadmin create $SVNREP_DIR/askeet
$ svn mkdir -m "layout creation" file:///$SVNREP_DIR/askeet/trunk file:///$SVNREP_DIR/askeet/tags file:///$SVNREP_DIR/askeet/branches

다음으로는 소스코드를 저장소에 처음으로 저장합니다. cache/log/ 디렉토리는 제외합니다.

$ cd /home/sfprojects/askeet
$ rm -rf cache/*
$ rm -rf log/*
$ svn import -m "initial import" . file:///$SVNREP_DIR/askeet/trunk

기존 소스디렉토리는 이제 필요가 없으므로 제거하고 SVN 을 통해 소스를 다시 다운로드 받습니다.

$ cd /home/sfprojects
$ mv askeet askeet.origin
$ svn co file:///$SVNREP_DIR/askeet/trunk/ askeet/
$ ls askeet

$ rm -rf askeet.origin

한 가지 설정이 더 남았습니다. 만약 여러분이 프로젝트 메인 디렉토리에서 SVN 저장소로 저장을 하게 되면 여러분이 원하지 않는 cachelog 디렉토리까지 저장소에 저장될 것입니다. 따라서 이들 디렉토리는 저장하지 않도록 설정합니다.

$ cd /home/sfprojects/askeet
$ svn propedit svn:ignore cache

SVN 기본 텍스트 에디터가 실행될 것입니다. cache/ 디렉토리를 추가하여 SVN 이 해당 디렉토리를 무시하도록 합니다.

*

저장하고 종료합니다.

log/ 디렉토리에 대해서도 설정하도록 합니다.

$ svn propedit svn:ignore log

그리고 저장 후 종료합니다.

*

이제 cache 와 log 디렉토리에 웹 서버가 기록 할 수 있도록 해주십시오.

$ chmod 777 cache
$ chmod 777 log

참고: Windows 사용자들은 TortoiseSVN 를 사용하여 subversion 저장소를 관리할 수 있습니다.

소스 버전 컨트롤에 대해서 더 많이 알고 싶으시다면 project creation chapter 를 참조하시기 바랍니다..

참고: askeet SVN 저장소는 아래 주소로 접근 가능합니다.

  http://svn.askeet.com/

어서 가셔서 체크아웃 하세요.

오늘 작성된 코드들이 이미 저장소에 있습니다. release_day_1 태그로 체크아웃하시면 됩니다.:

  $ svn co http://svn.askeet.com/tags/release_day_1/ askeet/

내일 이시간에

자, 이제 벌써 1시간입니다. 많은 것을 이야기 했지만, 심포니에 관한 새로운 것들이 많지는 않았습니다. 내일 살펴볼것들에 대해서 잠깐 이야기 하자면 다음과 같습니다.

  • 어플리케이션이 하는일은 무엇인지
  • 데이터 모델을 만들고 객체-관게 연결 생성
  • 모듈 거푸집 (scaffolding) 만들기

최신 askeet news 는 메일링 리스트 또는 포럼 에서 접하실 수 있으니 관심이 있으시면 이용하시길 바랍니다.

내일 또 오시는 것 잊지 마세요!