2011년 1월 7일 금요일

Twitter! OAuth를 이용한 어플리케이션 만들기 #1

트위터 어플리케이션 만들기 준비작업을 지난 시간에 마무리 했습니다.

이제 PHP 코드를 작성하면 되는데요.

보통 제 블로그 오시는 분들은 대부분 플래시를 하시는 분이고 서버사이드 언어를 잘 모르는 분들이 많을 거라고 생각합니다.

사실 저도 미대를 졸업하고 개발자가 된거라 PHP나 C#이나 JAVA나 이런거 실무나와서 책보고 공부한게 전부라 덜덜덜 하면서 보곤 했는데 막상 다루고 나면 별것 없고 특히나 트위터 연동같은건 너무 많은 사람들이 글을 써 올려주시는 바람에 소스만 읽고 분석할 줄 아는 능력만 있다면 너무 걱정하지 마세요.

(그런 능력이 없으신 분들은 어떻게 하냐고 물으실까봐 하는 말입니다만 그렇다 해도 너무 걱정하지 마세요)

 

너무 걱정할 필요가 없는 이유 하나는 지난 시간 다운로드 받았던 코드 있지요? 거기에 다 있습니다.

github.com에서 받아온 소스 있잖아요. 인증하는 샘플소스.

그걸 풀어놨던 곳도 기억하시나요? 일단 그 위치로 가보시죠.

 

거기가 보시면 config.php 파일 있습니다.

 

그 파일을 열어보도록 하지요.

 

[code php]
<?php
/**
 * @file
 * A single location to store configuration.
 */
define('CONSUMER_KEY', 'xxxxxxxxxxxxxxxxxxxxxx');
define('CONSUMER_SECRET', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
define('OAUTH_CALLBACK', 'http://127.0.0.1/twitterOauth/callback.php');
[/code]
뭐 이런식으로 되어있을겁니다. CONSUMER_KEY가 뭔가요? CONSUMER_SECRET이 뭔가요? OAUTH_CALLBACK은 또 뭐죠? 하실거에요. 물론 잘 알고 계시는 분들도 계시겠지만 모르는 분 위주로 설명할게요.

 

consumer key라는것은 간단하게 이야기 하면 어플리케이션 키입니다. 어플을 트위터에서 발급해주는 인증키를 기준으로 찾아갈 수 있게 해 놓은거죠. secret은 같은 맥락으로 인증된 키만 갖고는 사용자 정보를 전달하기엔 보안상 문제가 될 수 있으니 secret 키를 둬서 매칭되는지 확인한 후에 접근 가능하도록 해놓습니다. 거기에 하나 더 필요한 것은 callback URL인데요. 어플리케이션을 등록할 당시에 지정한 callBack URL과 리다이렉션 URL이 다르면 인증 절차가 invalid되서 진행할 수 없도록 막아놓고 있습니다.

결국 관리자 외에는 어플리케이션을 컨트롤 할 수 없도록 보안장치를 만들어놓았다는 거죠.

 

자신의 cunsumer key와 secret키를 보고 싶다면 지난시간에 어플리케이션을 등록하고 나면 http://dev.twitter.com/apps 에 가보면 자신이 등록한 어플리케이션을 확인할 수 있다고 이야기 했는데요. 여기서 consumer key와 secret을 확인할 수 있습니다.

 

그럼 config.php에 적절하게 입력해줍니다. 그런데 OAUTH_CALLBACK에 뭘 넣어야 할지 모르겠다는 분들 계실텐데요. 아까전에도 말씀 드렸다시피 어플리케이션 등록할 당시에 입력했던 Callback URL을 입력해 줘야합니다. 틀리면 인증절차가 무효되서 User Token을 얻어올 수 없어요.

지난 시간 말씀드렸듯 저는 http://127.0.0.1/twitterOauth/callback.php 이라고 넣어놨습니다.

물론 저 주소를 넣었을때 확인할 수 있는 페이지도 있어야겠지요?

 

config.php파일을 수정했으면 아파치를 기동하고 http://127.0.0.1/twitterOauth 에 접속합니다.

 

그런데 좀 어이없는게 왜 index.php파일이 열리는게 아니라 connect.php 파일이 열리는 건지 당최이해할 수가 없군요.. 라고 말하기 전에 일단 index.php 파일을 열어서 확인해보도록 합니다.

 

[code php]
<?php
/**
 * @file
 * User has successfully authenticated with Twitter. Access tokens saved to session and DB.
 */
/* Load required lib files. */
session_start();

require_once('twitteroauth/twitteroauth.php');
require_once('config.php');

/* If access tokens are not available redirect to connect page. */
if (empty($_SESSION['access_token']) ||
    empty($_SESSION['access_token']['oauth_token']) ||
    empty($_SESSION['access_token']['oauth_token_secret']))
{
    header('Location: ./clearsessions.php');
}
[/code]
이라고 코드가 짜여져 있을건데요. $_SESSION내에 access_token, access_token 내의 oauth_token, oauth_token_secret 값이 있는지 확인해보고 없으면 clearsessions.php로 이동시킵니다.

 

clearsessions.php는 걸려있는 세션을 지우고 connect.php로 이동시키게 되지요.

[code php]
<?php
/**
 * @file
 * Clears PHP sessions and redirects to the connect page.
 */

/* Load and clear sessions */
session_start();
session_destroy();

/* Redirect to page with the connect to Twitter option. */
header('Location: ./connect.php');
[/code]

 

이런 이유로 connect.php가 화면에 보여지게 됩니다.

그렇다면 access_token은 어디서 얻을 수 있을까요?

일단 사용자 로그인을 해야합니다. 화면에 있는 "Sign in with Twitter" 버튼을 클릭합니다.

 

"Sign in with Twitter" 버튼을 클릭하게 되면 내부적으로 redirect.php 파일에 접근해서 해당 어플리케이션이 접근을 해도 괜찮은 인증된 어플리케이션인지 확인을 하게 됩니다. 인증된 어플리케이션임을 확인하게 되면 Twitter에서는 사용자에게 로그인 창을 띄우고 만약 로그인을 하고 있었다면 해당 어플리케이션과 자신의 계정을 연결할 것인지 묻는 창이 나오게 됩니다.(물론 로그인 창에서 로그인을 하면 자동으로 이 페이지가 나옵니다.)

이때 "Allow"를 선택하게 되면 리다이렉트 주소를 호출하여 접근하는데 그 주소는 이 어플리케이션을 생성할 당시에 http://127.0.0.1/twitterOauth/callback.php 이라고 등록했었지요. 그 페이지로 이동하게 됩니다.

 

그리고 아래와 같은 화면이 등장하면 이제 글쓰기 준비는 완료 되었습니다.

 

오늘은 여기까지 하고 다음시간에 위와같은 절차로 가져온 사용자 토큰을 갖고 글쓰기를 만들어 보도록 하겠습니다.

 

p.s 제가 보기엔 xml 형식으로 받아오는 것도 좋긴 합니다만 jason 으로 받는게 더 편한거 같더라구요.

xml 방식으로 받아오고 싶기도 한데... 어떤 주소를 호출해야할지 못찾겠어요; 누군가 도와주세요.

 

2011년 1월 4일 화요일

Twitter! OAuth를 이용한 어플리케이션 만들기 #0

오랜만에 블로그를 하는군요.

요즘에 이것저것 갑자기 일들이 몰려와서 정신없이 바쁘다가

대충 정리가 되어 이렇게 포스팅을 할 수 있게 되었습니다.

 

뭐 오늘은 Twitter의 API를 이용해서 간단하게 내 계정의 글을 다른 어플리케이션에서 갖고 오거나

글을 쓰거나 정보를 갖고 오거나 하는 방법에 대해서 쭉 설명해보려고 합니다.

한 3편정도 되려나요.. 쓰다보면 알게되겠지요.

 

아, 전에 쓰기로한 Sound 컨트롤은 요 담에 쓸게요.

왠지 계속 손에 안잡혀서;;

 

Twitter에서는 다른 어플리케이션에서 이용하기 쉽게 하기 위해서 API를 제공 하고 있지요.

http://dev.twitter.com/

 

게다가 이 곳에선 자신의 어플리케이션을 등록할 수 있기도 하고 Twitter에서 제공하는 API 메서드 명령들도 실행해 볼 수 있도록 서비스 해주고 있습니다.

 

API Console이라는 기능이죠. 멋진 기능이에요.

그리고 가이드 문서도 제공하고 있습니다. http://dev.twitter.com/doc

 

뭐.. 서론은 이만 각설하고 일단 이 블로깅의 목적을 정리하고 가지요.

 

  1. Twitter에 내 App 등록하기

  2. PHP 코드를 이용해서 Twitter의 내 계정에 접근할 수 있는 토큰값 가져오기

  3. 토큰값을 이용해서 내 Twitter계정에 글 쓰기

이정도로 정리하겠습니다.

 

일단 테스트 환경부터 만들텐데 아파치와 PHP와 MySQL을 설치해보신적 없으신분 계신다면

여기로 가주세요. -> http://www.apmsetup.com/

근사모 홈페이지 인데 여기가서 APMSetup을 설치하도록 합니다.

APMSetup은 버젼이 지금 현재 7까지 나왔고 APMSetup7에는 Apache 2.2.14, PHP 5.2.12, Zend Optimizer v3.3.3, MySQL 5.1.39, phpMyAdmin 3.2.3가 들어있고( CUBRID , JRE도 들어있어요) 클릭 한방에 서버셋팅까지 다해주니 급하게 테스트 환경만들기엔 안성맞춤.

 

APMSetup이든 직접손수 작업했든 일단 다 준비하고 나면 php.ini 파일을 열어서

 

"extension=php_curl.dll" 이 부분을 찾아 주석을 풀어주세요.

물론 이 php.ini를 수정하였으면 아파치를 재기동시켜야 합니다.

php_curl.dll의 주석을 제거하는 이유는 OAuth 라이브러리에서 사용하기 때문인데요.. 조금 있다가 다운로드할 파일중 "twitteroauth.php"라는 파일이 있습니다. 요녀석이 이번에 하고자하는 핵심파일이죠.

저 안에 보면 이런 코드가 있습니다. 199번째 라인에 보면

 

[code php]
$ci = curl_init();
    /* Curl settings */
    curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent);
    curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);
    curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);
    curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:'));
    curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);
    curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader'));
    curl_setopt($ci, CURLOPT_HEADER, FALSE);
[/code]

이런 부분이 있습니다. 이 부분때문에 php_curl.dll 의 주석을 풀어주는 거에요.

만약에 이것을 깜빡하고 넘어가셨다면 이런 오류 메시지를 받아보실 수 있을겁니다.

 

Fatal error: Call to undefined function curl_init()

 이를 미연에 막고자하는 작업입니다.

 

그런다음 아래의 링크를 따라가 주세요.

https://github.com/abraham/twitteroauth

 

여기 보시면 OAuth를 이용한 Twitter 계정받아오기 샘플 소스가 있습니다. 다운로드 버튼을 클릭해서 저장합니다.

 

 

압축을 풀고 아파치 컨텍스트 루트... 에.. 그러니까.. "htdocs"라고 써있는 디렉토리에 압축을 풀어주세요.

APMSetup 을 기준으로 말씀드리면 설치디렉토리 가보시면 아래의 이미지처럼 있을 텐데

빨간 테두리되어있는 디렉토리에 압축을 풀어주시면 됩니다.

 

일단 이것으로 준비는 됐고.. Twitter에 어플리케이션 등록을 합시다.

등록을 해야하는 이유는 Consumer Key, ConsumerSecret을 받고 callBack URL을 입력하기 위해서 입니다.

이렇게 해야 사용자 계정에 대응하는 토큰값을 가져와서 제어할 수 있습니다.

 

어플리케이션 등록은 여기서 하면 됩니다. http://dev.twitter.com/apps/new

 

위와 같은 창에서 어플리케이션 이름, 설명, 어플리케이션 웹사이트 등등을 입력하는데

가장 중요한건 Application Type을 Browser로 하고 Callback URL에 적절한 주소를 저장하는데 있습니다.

물론 다른데도 잘 입력해야 등록이 되겠지만 저 두개의 값때문에 삽질을 얼마나 했던지;;;

저의 경우엔 http://127.0.0.1/twitterOauth/callback.php 이라고 넣었습니다.

 

모든 필드에 입력을 마치고 Save 버튼을 클릭하시면 Consumer Key, ConsumerSecret 값들과 뭐 다른 URL 주소들이 나오는데 지금 가장 중요한건 저 두개의 Consumer Key, ConsumerSecret 값들입니다.

 

아, 물론 http://dev.twitter.com/apps 에 들어가서 보시면 자신의 등록된 어플리케이션을 확인할 수 있습니다.

 

 

물론 정보를 수정할 수도 있고 Consumer Key, ConsumerSecret 이 값들도 새로 받을 수 있습니다.

 

오늘은 여기까지 하고 내일은 php소스 코드를 이용해서 토큰값을 받아오는 것을 구현해 보겠습니다.

2010년 11월 9일 화요일

사운드. 도데체 어찌 사용해야하나요 - #0 프롤로그

돌아온 김에 글하나를 써보려고 합니다. ㅎ

 

사운드 제어에 관련된 내용을 써보려구요.

사실 사운드 제어는 어떻게 보면 참 간단합니다.

 

"그냥 로드해서 Play 메서드 호출하면 되잖아!"

라고 하실 수도 있습니다만 제가 하려는건 그런게 아니라 사운드를 어떻게 가져다 쓸 것인지

여러 상황들에 대해 한번 정리하는 시간을 가져보려고 합니다.

어떤 상황들이냐 하면

 

1. 그냥 mp3파일을 SWF안에 Embed 할지

2. 스트림으로 로드를 할 것인지

3. 아니면 다른 SWF 파일을 Embed해서 그 안에 정의되어 있는 사운드 객체를 가져다 쓸 것인지

 

입니다.

 

오늘은 간단히 사운드 객체를 재생하면서 사운드 객체 모형에 대해 고민해 보도록 합시다.

 

 

사운드를 재생하기 위해서 어찌합니까 라는 질문을 하기전에

ActionScript Language Reference(API라고도 하죠) 를 확인해 보도록 합니다.

여기를 클릭해 보시면 ActionScript Language Reference에 있는 Sound 클래스 페이지 입니다.

ActionScript 3.0 Reference for the Adobe Flash Platform

 

일단 Sound객체는 외부에서 사운드를 스트림으로 불러오던지

혹은 Embed된 Sound객체를 재생하거나 할 수 있습니다.

내부에서 어떻게 돌아가는지 정확히 잘 모르겠지만 "소리를 내는 역할을 하는" 객체 임에는

틀림없는 듯 합니다.

 

그런데 Sound 객체를 처음 접하시는 분들은 이런 말씀을 하실 수도 있습니다.

"어라? SoundChannel은 뭐에 쓰는거야?" 라고 하실 수 있습니다.

Example 쪽을 보시면 이런 코드가 있거든요.

 

[code as3]
private var url:String = "MySound.mp3";
private var song:SoundChannel;

public function SoundExample()
{
    var request:URLRequest = new URLRequest(url);
    var soundFactory:Sound = new Sound();

    soundFactory.addEventListener(Event.COMPLETE, completeHandler);
    soundFactory.addEventListener(Event.ID3, id3Handler);
    soundFactory.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
    soundFactory.addEventListener(ProgressEvent.PROGRESS, progressHandler);
    soundFactory.load(request);
    song = soundFactory.play();
}
[/code]

 

"SoundChannel가 뭐길래 Sound.play(); 메서드를 호출할때 SoundChannel을 반환하나요?"

 

 

라고 하시는 분도 종종 계시지요.

일단 Sound객체를 알아가기 위해서는 SoundChannel도 알아야하므로 SoundChannel을 어떻게 설명해 놓았는지 API를 읽어보도록 합시다.

 

사운드 채널 클래스는 Flash 어플리케이션 내에 있는 사운드 객체를 제어 한다고 하는데 어떤 내용들을 제어 할 수 있냐면 일단 가장 중요한 기능으로 stop() 메서드가 있고 사운드의 볼륨을 모니터링할 수 있는 속성들을 제공합니다. 그리고 SoundTransform 객체를 위한 속성도 제공 하지요. 볼륨을 제어할때 SoundChannel의 SoundTransform 을 이용해 제어합니다.

 

SoundTransform은 볼륨이나 좌우 Pan 값을 제어하는데 사용되는 클래스 입니다.

 

뭔가 상당히 복잡하지 않나요?

그냥 사운드에서 죄다 제어하면 될걸 왜 다 분리해놓고

Sound를 로드한 담에 재생 할 적에 SoundChannel이랑 연결해 놓더니 거기서 stop()이니 position이니 하는 메서드나 속성을 확인하거나 실행하더니 또 볼륨을 제어하려니까 거기서 SoundChannel에 있는 SoundTransform 을 가져다가 볼륨을 제어하고 Pan 값을 제어하게 두다니!

(게다가 재생이 완료되면 거기에 대한 이벤트는 SoundChannel에서 발생합니다. Sound는 뭐하는 애니??)

 

이거 Sound를 쓰라는거야 말라는거야 하시는 분들 계실 겁니다.

 

ActionScript에서 사용되는 Sound관련된 클래스들은 Sound 그 자체와 그것을 제어하는 것을 철저히 분리하여 설계되었습니다.

Sound는 말 그대로 소리에 대한 역할만 수행할뿐 나머지 제어는 다른 클래스로 분업화 하였습니다.

그래서 사용하기가 조금 어려워 지긴 했지만 뭐.. 이해만하면 그리 어렵지는 않아요.

이렇게 분리해 놓으면 그것대로 장점도 있으니까요.

 

오늘은 대충 Sound와 그의 친구인 SoundChannel객체에 대해 맛만 보고 이정도로 정리하고

다음 시간을 기대하세요

2010년 11월 - Came Back

아... 안녕하세요.

"야훔의 저렴한 개발" 시리즈를 쓰다가 돌연 잠적하더니 다시 돌아왔습니다.

 

여러가지 시리즈로 매일매일 글을 쓰다가 올 4월 말에 2박 3일 예비군 훈련을 마치고

회사로 돌아가니 팀이 해체되어 공중분해 되는 사태가 있었지요.

이유야 여러가지였지만 어쨋든 그 덕에 회사를 나오고 프리랜서로 한 4~5개월정도 보내다가

새로이 자리를 잡고 앉게 되어 다시 글을 쓸 수 있게 되었습니다.

 

그동안 많은 일들이 있었지만

UI 개발자 같지 않게 "인도네시아"까지 개발 출장도 다녀오고

알바를 받았는데 드롭도 시켜보고

돈 때문에 좌절도 해보고 이것저것 방황 하다가 간신히

새 보금자리에서 새로운 사람들과 호흡을 맞출 수 있게 되었네요.

 

이제 다시 시작합니다.

 

"야훔의 저렴한 개발"

2010년 4월 5일 월요일

저렴한 개발 SVN

http://dev.naver.com/projects/cheapas3/

 

네이버 개발자 센터에 있는 SVN 저장소를 이용하기로 했습니다.

여태 소개했던 예제파일들을 서로 공유하는 장소가 있으면 좋겠다.. 하고 생각했는데

저 혼자서 블로깅하고 예제파일들을 만드는 것이 아니라 여러사람들과 소통하고 코드를 만들어가는게

더 "즐겁지 않을까"하고 생각했습니다.

 

그래서 네이버 개발자 센터와 Google 개발자 센터중 어디를 택할지 고민하다

네이버 개발자 센터를 이용해보는 것도 괜찮을것 같아 네이버에 둥지를 틀었습니다.

 

다만 다운로드는 익명으로도 할 수 있게 해놨는데.. 잘 될지는 모르겠습니다.

안되시는 분들은 댓글달아주세요.

 

참. SVN 사용법을 모르시는 분들을 위해 오늘 저녁에 설명서를 올려드리도록 하겠습니다.

 

일단 SVN 다운로드 페이지는 먼저 소개해 놓을께요.

 

SVN 홈페이지 : http://subversion.tigris.org/

SVN 다운로드 : http://tortoisesvn.net/downloads

SVN subclipse 버젼 다운로드(이클립스 혹은 빌더 사용) : http://subclipse.tigris.org/servlets/ProjectProcess?pageID=p4wYuA

 

p.s 저렴한 개발이므로 이클립스나 빌더로 개발하지 않아요. 그래서 SVN을 이용해 "빌더"에서 다운로드 하셨을 경우 정식 프로젝트로 적용되지 않으니 이점 기억해주세요.

2010년 3월 30일 화요일

저렴하게 빌더없이 개발하기 - EditPlus 편

플래시 액션스크립트 카페에서 테크트리님께서 한 말씀 하셨더랬죠...

 

 

네.. 그래서 EditPlus로 개발하는 방법을 알려드리는 시간을 갖도록 하겠습니다.

아주 간단한 설정으로 Flex SDK를 이용한 개발방법이지요.

 

일단 EditPlus를 엽니다.

 

여기서 일단 "도구 > 기본설정"을 클릭합니다.

 

 

클릭을 하면 위와 같은 화면이나옵니다. 좌측 트리메뉴에서 "파일"을 클릭하여 "새 파일형식"과 "기본 인코딩"부분을 아래와 같이 수정합니다.

 

 

보통은 UTF-8이 아니라 ANSI 로 되어있는데 영문만 사용하시는 거라면 문제가 없겠지만 한글이라던가 제3국언어를 사용하시게 되면 문자 인코딩이 깨져서 컴파일 되게 됩니다.

 

그 다음 좌측 트리메뉴에서 "설정 및 구문강조"를 선택하고 "추가"를 클릭합니다.

 

 

 

"파일 종류 설명 입력"이라고 뭔가를 입력하라는데 그냥 알기쉬운 이름 지어준다 생각하고 적어주시면 됩니다. 저는 귀찮아서 그냥 "as"라고 적었습니다. "확인"을 클릭하면 "파일 종류"리스트에 "as라는 항목이 추가 되면 아래와 같이 설정을 맞춰주시면 됩니다.

 

 

파일확장자는 as와 mxml만 설정했습니다. 문제는 구문파일이나 자동완성 파일인데.. 저 파일을 어디서 구할수 있느냐... 하면 EditPlus 홈페이지에서 구할 수 있지요.

 

 

저 파일을 다운받고 싶으시다면 클릭 고고.

다운로드 받은 뒤에 압축을 풀면 몇몇개 파일이 있습니다. 그 파일들을 적당한 장소에 옮기신 후에 EditPlus로 돌아와 "..." 버튼을 눌러 적용하시면 됩니다.

 

 

설정하시고 나면 일단 기본적인 코드 읽기가 가능해집니다.

저는 구문강조 색상을 설정해 제 취향에 맞춰서 만들었습니다.

 

적절하게 읽기도 좋아지고 보기도 좋아진것 같습니다. 이제 컴파일 옵션을 맞춰줄 시기가 왔군요.

일단 컴파일은 간단하게 "mxmlc file경로 file명을 제외한 디렉토리\파일명.swf" 명령어로 처리됩니다.

 

"도구 > 사용자 도구 구성"으로 가볼까요?

위와같이 아무것도 없는 창이 뜨게 될텐데 일단 그룹이름을 세련되게 지어주도록 하지요.

오른쪽에 있는 "그룹 이름..." 이라는 버튼을 클릭해 이름을 지어줍니다.

 

저는 이번에도 귀찮아서 "as" 라고 지어줬습니다.

그 다음 "그룹 이름..." 밑에 있는 "추가(D)>>"라고 클릭해주세요.

 

 

추가를 클릭하게 되면 하위 메뉴가 나오는데 그때 "프로그램(P)"를 클릭하면 됩니다.

 

그럼 위와 같이 리스트에 하나가 추가 되는데요. 메뉴 제목에 적절한 이름을 지어줍니다.

저는 이번에도 귀찮아서 as Compile이라고 지어줬지요.

사실 이름짓는게 가장 귀찮은 작업이라고 생각해요. 그냥 나중에 알아보기에 편하기만 하면 됩니다.

 

그 다음 명령 입력필드 오른쪽에 있는 "..." 버튼을 클릭하고 "SDK 디렉토리\bin" 으로 이동합니다.

저의 경우엔 "D:\Dev\02.Util\sdks\flex_sdk_3.5\bin"가 되겠네요.

이동하게 되면 아래와 같은 화면이 나옵니다.

 

 

컴파일을 하기 위해선 mxmlc.exe가 필요하니 mxmlc.exe 파일을 선택하고 "열기"를 클릭합니다.

 

그리고 "인수(O)" 입력필드 오른쪽에 있는 ▼ 버튼을 클릭합니다.

 

자.. 이제 아래와 같은 설정이 되었는지 확인해 봅니다.

 

위와 같은 화면이 되었다면 일단 컴파일 셋팅은 끝났습니다.

컴파일을 해볼까요?

 

"도구" 메뉴를 보시면 as Compile이라는 메뉴가 생긴걸 볼 수 있지요.

저 메뉴를 클릭하셔도 되고 "Ctrl + 1"을 누르셔도 괜찮습니다. 바쁜 스케쥴때문에 마우스에 손을 대기 귀찮군요. 저는 Ctrl + 1을 누르겠습니다.(아, 경로 중간에 띄어쓰기가 있으면 안됩니다.)

 

 

예전에 작업했던 Point 예제를 컴파일 했습니다.

 

그럼 컴파일이 되었습죠. 컴파일한 as 파일과 같은 경로에 말입니다. 에러가 나올땐 이렇게 나옵니다.

 

참고로 저기 괄호안에 (27) 이라고 나온것이 몇번째 라인에서 에러가 나온 것인지 알려주는 거에요.

 

자.. 컴파일도 했으니 실행을 시켜봐야할텐데.. 사실 빌더에서처럼 자동으로 HTML도 만들어주고 익스플로러도 실행하고 그럼 좋겠으나 EditPlus잖아요. 현실을 받아들입시다.(Ant라던가 뭐.. 다른 방법으로도 할 수 있는 방법이 있겠으나 그걸 다 썼다간 저 오늘 집에 못갈지도 몰라요.)

 

간단하게 Flash Player로 실행하는 것으로 타협하고 셋팅해 볼께요.

아까 "as Compile" 했던 "도구 > 사용자 도구 구성"메뉴로 들어갑니다. 그 담은 뭐 일사천리에요.

프로그램 추가하시고 이름은 "flash player" 라고 지었습니다.

 

 

자.. 이제부터 중요한 "명령"부분. 그냥 Flash Player를 설정해주면 되지 않냐. 라고 하시는데요.. 사실 다들 브라우져에서 보는 플러그인 방식의 Flash Player만 있지 로컬에서 Stand Alone으로 swf를 실행하는 거라곤 "곰 플레이어"밖에 없으신 분들 많으실 겁니다. 아시는 분은 아실지 모르겠습니다만 Adobe에서는 SDK를 배포할때 Flash Player를 같이 배포하고 있지요. "SDK 경로\runtimes\player\10\win" 위치로 가보시면 아래와 같이 Flash Player를 확인하실 수 있습니다.

 

저의 경우엔 "D:\Dev\02.Util\sdks\flex_sdk_3.5\runtimes\player\10\win"경로지요.

아무튼 파일을 선택하시고 "열기"합니다.

 

그 담에 "인수"가 중요한데요. 좀 복잡합니다.

명령이 "FlashPlayer.exe 파일디렉토리\확장자를 뺀 파일이름.swf" 이렇게 나와야 하기 때문이에요.

왜냐하면!!! 그냥 "파일경로"를 넣어버리면 지금 보고있는 as 파일을 재생하기 때문이지요. 그럼 그저 하얀 화면만 보게 됩니다. 그래서 "파일 경로"를 넣는 것이 아니라 "디렉토리\확장자를 뺀 파일이름.swf"라고 인수를 넘겨주는 것이지요.

 

아래와 같이 셋팅합니다.

위와 같이 셋팅이 되셨으면 됩니다. 아, 마지막으로 "출력 내용 캡쳐"를 선택해 주세요. 저걸 선택하게 되면 trace로 나오는 메시지를 캡쳐해 화면에 보여주게 됩니다.

 

자.. 이제 실행해 볼까요?

새로 메뉴도 생겼고.. 저는 이번에도 Ctrl + 2 로 실행했습니다.

 

아주 잘 실행됩니다. trace도 확인할 수 있어요.

이렇게요.

 

간단한가요? 저는 사실 실무 들어와서 약 1년 6개월간을 Edit Plus로 프로젝트를 진행해서  이런 셋팅에 이골이 날 지경이지만 처음 하시는 분들은 조금 어려울지도 모르겠네요. 라이브러리 셋팅이라던가 보다 세부적인 컴파일러 설정을 하려면 좀더 어렵겠지만 (아예 따로 컴파일러를 셋팅하는 경우도.... 덜덜) 간단한 예제같은 것은 이런 설정만으로도 만들 수 있으니까요. 한번 해보시는 것도 괜찮을 듯 합니다.

 

p.s :

결코 EditPlus를 권장하지 않습니다. 단지 이렇게도 작업할 수 있다는 것만 알아두시는 것이 좋을듯.

사실 Builder라는 좋은 툴을 두고 EditPlus로 개발하는 짓은 좀 웃기는 일이지요.

저는 단지 Builder라는 툴을 사용하지 못할 경우라던가 돈이 없어 Builder를 사용하지 못하는 분들을 위해 방법을 소개함을 다시한번 말씀드립니다.

2010년 3월 26일 금요일

목표가 생기면


목표가 생기면 무작정 달려들어야지
실패를 두려워할 여유같은건 없을 때니까.