티스토리 툴바

검색창 열기

Learning the Yii Framework 1 / 8

이 문서의 원본은 http://www.larryullman.com/2009/06/18/introduction-to-the-yii-framework/ 입니다. Yii 프레임워크를 초심자가 차근차근 따라가기에 좋은 시리즈인 것 같아 번역하게 되었습니다. - LazyGyu


Yii Framework 소개

이 문서는 Yii 프레임워크 배우기 시리즈의 8 편 중 첫번째 문서입니다.

2009년, 저(저자인 Larry Ullman을 말함 - 역자 주)는 세 개의 꽤 규모있는 사이트를 개발했습니다. 그래서 저는 처음부터 모든 걸 개발하는 것 대신에 PHP 프레임워크를 사용해야겠다고 생각했습니다. 이전까지 루비 온 레일즈를 웹 개발에 사용했었기 때문에 프레임워크나 MVC 구조에는 익숙한 상태였지만 PHP 프레임워크를 배워보고 싶었습니다. 몇 개의 프레임워크를 연구해보고, Zend 프레임워크를 사용하려 시도했다가 실망한 후에, 결국 저는 Yii 프레임워크에 도달하게 되었습니다. 그 당시에 Yii 프레임워크는 아직 새로운 물건이었고, 여전히 고쳐져야 할 버그들이 있었습니다(나중에 좀 더 전문적인 글에서 다루겠습니다). 하지만 Yii 는 사용하기 쉬운데다가 동작도 잘 되었습니다. 이 글에서는 일단 Yii 를 설치하고 테스트하는 방법에 대해서만 논의하도록 하겠습니다.

(2010년 10월, 저는 이 글이 씌어진 이후 Yii 의 업데이트를 반영하고 코멘트를 통해 제공된 피드백을 고려하여 문서를 수정하였습니다. 더이상 맞지 않는 내용들은 수정되었지만, 시리즈가 2009년 6월에 시작된 이후 어떻게 변화했는지를 알 수 있도록 남겨두었습니다.)

(Note: In October 2010, I’ve updated this entire series to reflect changes in Yii since this series was written, and to take into account feedback provided through the comments. Some outdated material will be crossed out, but left in to reflect how things have changed since the series was begun in June 2009.)

Yii 프레임워크를 사용하기 위해 가장 먼저 해야 할 일은 물론 PHP 가 설치된 웹 서버에 접근하는 것입니다. 하지만 이 글을 읽고 있는 사람이라면 일단 PHP 가 활성화된 서버에 이미 접근할 수 있는 사람이라고 가정하겠습니다. 참고로 Yii 프레임워크는 PHP 5.1 이나 그 이상의 버전을 필요로 합니다. 다행히 Yii 는 서버의 설정을 테스트해줍니다. Yii 의 최신 안정화 버전을 다운로드 합시다. 이 글을 쓰는 시점에서 최신 버전은 1.0.6 1.1.4 입니다. 다운로드 한 파일의 이름은 아마 yii-버전.release.ext 와 같은 형태일 겁니다. 용량은 2MB 정도일거구요. 다운받은 파일의 압축을 풀면 다음과 같은 것들이 들어 있습니다.

  • CHANGELOGLICENSEREADMEUPGRADE 문서들
  • demos 폴더
  • framework 폴더
  • requirements 폴더

물론 README 와 LICENSE 를 읽어야하지만, 일단 여기서는 폴더들이 더 중요합니다. demos 폴더는 Yii 를 사용해 만들어진 네 개의 웹 어플리케이션을 담고 있습니다. 블로그, 행맨 게임, 기본적인 "Hello, World!", 전화번호부 등입니다. 데모들은 코드가 어떻게 이루어져있는지, 그리고 어떻게 코드를 작성해야 하는지를 잘 보여줍니다. framework 폴더는 Yii 를 사용하는 웹 사이트에 필수적으로 필요한 폴더입니다. requirements 폴더는 뭔가 단순하고 빛나는 것들이...

마찬가지로 이 글을 보는 사람이라면 자신의 컴퓨터, 혹은 서버의 웹 루트가 어디인지 알고 있을거라 가정하겠습니다. 웹 루트란 URL 이 가리키는 곳을 나타내는 폴더입니다. 다시말해, http://localhost 나 http://www.example.com 등을 브라우저로 열었을 때 브라우저는 웹 루트 폴더에 있는 문서를 보여줍니다. Yii 의 정책에 따라 이 폴더를 웹루트라 부르도록 하겠습니다. 웹루트에 yii 폴더를 만들고 framework 와 requirements 폴더를 거기에 복사합시다. 그리고 나서 yourURL/yii/requirements 를 웹 브라우저로 열어봅시다. (예 : http://localhost/yii/requirements) 그러면 최소 요구사항에 적합한지 아닌지를 나타내는 보고서를 볼 수 있습니다.

Yii Requirements Check

모든 요구사항이 충족되었다면 사용할 준비가 된 것입니다. 참고로 모든 확장이 반드시 필요한 것은 아닙니다. 단순히 Yii 프레임워크 요구사항, PDO, 사용하는 데이터베이스에 맞는 PDO 확장만 있으면 됩니다. (잘 모르시는 분을 위해 말씀드리자면, PDO 는 데이터베이스 추상화 계층입니다. 웹사이트를 데이터베이스와 분리할 수 있도록 해줍니다.)

다음 게시물에서는 Yii 명령줄 도구를 사용해서 어떻게 첫 웹 어플리케이션을 만드는 지 보여드리겠습니다. 굉장히 쉽고 제가 본 것들 중에 루비 온 레일즈와 가장 비슷합니다. 후속 게시물들은 Yii 기반 어플리케이션을 개발하는 방법을 다루고 있습니다. 최 상단이나 하단의 링크를 사용해서 시리즈를 탐색할 수 있습니다.(여긴 없어요 - 역자 주). 혹시 관심이 있으시다면 MVC 구조에 관한 저의 포스트도 읽어보세요.

저작자 표시 비영리 동일 조건 변경 허락

이 글의 트랙백 주소 : http://lazygyu.tistory.com/trackback/90 관련글 쓰기

Comments

::

NowJS 시작하기


아래는 node.js 의 모듈 중 하나인 nowjs 의 초보자 가이드를 번역한 내용입니다. 원문은 http://nowjs.com/guide 에서 보실 수 있습니다. node.js 는 갈수록 하나의 완성된 체계를 구축해가는 것 같아요. 아직은 입지가 크지 않지만 향후가 점점 기대되는 플랫폼입니다. 다들 즐겁게 코딩하세요! -Lazygyu


NowJS 를 시작하는 것은 정말 쉽습니다. 여기서 우리는 간단한 채팅 서버를 약간의 코드만으로 만들어보겠습니다. 당신의 컴퓨터에서 따라해보려면 두 소스 파일을 다운로드 할 수 있습니다.
여기를 클릭하세요.


술 주머니

NowJS 의 비밀은 두 개의 마술 주머니에서 비롯됩니다. 바로 now 와 everyone.now 입니다. now 객체는 클라이언트와 서버 사이에서 공유되는 마술 주머니입니다. 클라이언트는 now 객체에 변수와 함수들을 자유롭게 넣을 수 있고, 서버 또한 자유롭게 그것들에 접근할 수 있습니다. 물론 반대로도 가능합니다.

서버는 한 번에 수많은 클라이언트 연결을 가질 수 있습니다. 이는  바꿔 말하면 한 번에 수많은 마술주머니를 관리해야 한다는 뜻입니다. 그것이 바로 everyone.now 라는 또다른 마술 주머니를 서버가 가지고 있는 이유입니다. 서버가 everyone.now 에 어떤 변수를 추가하거나 변경하게 되면 모든 클라이언트 각각의 now 가 함께 변경됩니다.


채팅 서버 구축
 
TL;DR



이 게시물은 아마 좀 긴 글이 될 겁니다. 하지만 채팅 서버를 구축하는 과정 자체는 아주 간단합니다. 클라이언트는 서버의 distributeMessage 함수를 보내고 싶은 메시지와 함께 호출합니다. distributeMessage 함수는 모든 클라이언트의 recieveMessage 함수를 호출합니다. recieveMessage 함수는 메시지를 받아 화면에 뿌려주는 함수입니다.

서버에서
 
우리가 만들 채팅 프로그램에서, 클라이언트는 서버를 통해 모든 클라이언트로 메시지를 전달할 수 있어야 합니다. 우리는 이 함수를 distributeMessage 라고 명명하겠습니다. 이 함수는 서버에서 실행되어야 하므로, 서버의 .js 파일에 넣도록 하겠습니다.

everyone.now.distributeMessage = function(message){
everyone.now.recieveMessage(this.now.name, message);


함수 내부에서 어떤 일이 일어나는지는 신경쓰지 마세요. 중요한것은 우리가 저 함수를 everyone.now 에 추가했다는 겁니다. 이것은 모든 연결된 클라이언트와, 앞으로 연결될 클라이언트가 각자의 now 를 통해 distributeMessage 함수를 사용할 수 있다는 것을 의미합니다.

위의 코드를 넣고나면, 클라이언트는 now.distributeMessage 함수를 호출할 수 있고, 그러면 서버는 위의 코드를 실행하게 됩니다.

클라이언트에서

잠시 클라이언트측 코드를 봅시다. 일단 각 사용자들이 자신의 이름을 설정할 수 있게 해야 합니다. 아래에 이름을 설정하게 하는 짧은 코드가 있습니다.

now.name = prompt("이름이 뭥미?", "");

now 객체에 name 이라는 변수를 추가해서 여기에 이름을 보관했다는 것을 잘 보십시오. 이것은 이 클라이언트가 서버에 메시지를 보낼 때, 서버측에서 이 클라이언트의 name 을 읽고 사용할 수 있다는 것을 의미합니다.

멋지긴 한데, 그럼 어떻게 메시지를 보낼까요? 여기 방법이 있습니다.

$("#send-button").click(function(){
now.distributeMessage($("#text-input").val());
$("#text-input").val("");
});

 
서버에서 distributeMessage 함수를 모든 클라이언트의 now 에 넣었다는 것을 기억하시겠죠? 사용자가 전송 버튼을 클릭하게 되면, distributeMessage 함수에 메시지를 매개변수로 호출하게 됩니다. 서버는 호출을 받고, 함수를 실행하고, 모든 사용자는 방금 보낸 메시지를 받게 되겠죠. 어떻게 이렇게 되는지 살펴봅시다.

다시 서버로

 자, 클라이언트는 그저 distributeMessage 를 호출했습니다. 서버는 각각의 클라이언트의 "문맥(Context)"에 맞추어 이 함수를 실행하죠. 이것은 서버의 함수 내용이 클라이언트측 now 의 모든 것에 접근할 수 있다는 의미입니다. 우리는 this.now 를 통해 클라이언트의 now 객체의 모든 속성에 접근할 수 있습니다.

 이 경우에, 우리는 다른 모든 클라이언트들이 지금 메시지를 보낸 사용자의 이름을 알게 하고 싶습니다. 함수를 호출한 클라이언트의 이름은 this.now.name 을 참조하면 알 수가 있죠. 혹시 잊지 않았을까 해서 다시 한 번 코드를 보여드립니다.

 
everyone.now.distributeMessage = function(message){
everyone.now.recieveMessage(this.now.name, message);


모든 클라이언트의 recieveMessage 함수에 메시지 내용과 함께 사용자 이름을 보내고 있군요. 잠깐, reciveMessage? 이건 어디서 온 걸까요? 이제 보여드리겠습니다.

다시 클라이언트로(진짜 마지막이에요)

recieveMessage 함수는 클라이언트 코드에 있습니다. 아래 코드를 참조하세요.

now.recieveMessage = function(name, message){
$("#messages").append("<br>" + name + ": " + message);


클라이언트는 recieveMessage 함수를 now 내에 넣었습니다. 따라서 서버는 새로운 메시지가 있을 때 해당 함수를 호출할 수 있죠. 해당 함수가 하는 일은 그저 새로운 메시지를 페이지에 추가하는 것 뿐입니다.

클라이언트측에서 recieveMessage 함수를 now 에 넣었기 때문에, 서버의 everyone.now 에서도 마찬가지로 추가되었습니다. 이렇게 하면 서버에서는 쉽게 모든 클라이언트의 recieveMessage 함수를 한 번에 호출할 수 있습니다. 그리고 이게 바로 서버가 distributeMessage 함수 내에서 하는 일이죠.

마무리

NowJS 를 통해 무언가를 만드는 데 필요한 것은 이게 전부입니다. 당신은 이 지식을 통해 어떠한 실시간 어플리케이션도 쉽고  빠르게 구축할 수 있습니다. 즐거운 코딩 되세요!

 더 읽어보기

이제 당신은 초보자 안내서를 읽었습니다. 이제 NowJS 의 사용자 설명서와  좋은 사례 모음을 읽어보세요.

궁금한 점이 있나요?  Freenode 에서 #nowjs 를 찾으세요.
저작자 표시 비영리 동일 조건 변경 허락

이 글의 트랙백 주소 : http://lazygyu.tistory.com/trackback/89 관련글 쓰기

Comments

::

요즘 틈틈히 개발중인 안드로이드용 게임 동영상



온라인 대전 기능이 있는 사천성이라능

근데 블로그 할 시간이 너무 없다 ㅠㅠ 
저작자 표시 비영리 동일 조건 변경 허락

이 글의 트랙백 주소 : http://lazygyu.tistory.com/trackback/88 관련글 쓰기

Comments

::