TwitterAPI2009. 11. 19. 10:02
Twitter4J를 이용하여 간단한 예제를 작성해보도록 하자.

오늘 살펴볼 예제는 
에 있는 첫번째 예제인
id, password 를 이용해 Twitter 인스턴스를 생성하고
updateStatus 메소드를 이용해서 입력한 스트링을 보내는 코드이다.

1. Updating status

You can update "What are you doing?" via Twitter.updateStatus() method.
See also twitter4j.examples.Update.java for detail. 


Twitter twitter = new Twitter(twitterID,twitterPassword);
Status status = twitter.updateStatus(latestStatus);
System.out.println("Successfully updated the status to [" + status.getText() + "].");


위의 예제를 간단한 Android application으로 만들어 보자.
결과 화면은 아래와 같다.


먼저 사용할 Twitter4J class를 import해준다.
import twitter4j.Twitter;
import twitter4j.Status;
import twitter4j.TwitterException;


3개의 EditText와 하나의 Button을 이용하여 위와 같은 화면을 구성할 수있다.
final EditText input_id = (EditText)findViewById(R.id.user_id);
final EditText input_pw = (EditText)findViewById(R.id.password);
final EditText input_text = (EditText)findViewById(R.id.input_text);
Button signin = (Button)findViewById(R.id.sign_in_button);

이후 Update Button에 OnClickListener를 붙여서 onClick 발생시 
signin.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v){
      //TODO : Below code will be inserted here
    }
});


user_id EditText와 password EditText에 입력된 값으로 Twitter 객체를 생성하도록 해준다.
그 후 updateStatus 메소드를 이용하여 글을 올리고 결과를 Toast를 이용해 출력 한다.
Twitter twitter = new Twitter(username, password);
Status status;
try {
  status = twitter.updateStatus(update_text);
  Toast.makeText(getApplicationContext(), "Successfully updated the status to [" + status.getText() + "].",   Toast.LENGTH_LONG).show();
  } catch (TwitterException e) {
    Toast.makeText(getApplicationContext(), "Fail to update text [" + e + "].", Toast.LENGTH_LONG).show();
  }

위와 같은 간단한 코드 만으로 Twitter에 로그인 하고 글을 올리는 것이 가능한 application을 만들 수 있다.

프로젝트 파일을 압축해서 첨부하였으니 참고.
다음에는 자신의 timeline을 얻어와 list로 출력 하는 예제를 살펴볼 예정이다.

'TwitterAPI' 카테고리의 다른 글

[Twitter4J] OAuth support  (0) 2011.02.10
Twitter4J TwitterException -1 발생  (1) 2010.02.05
Twitter4J를 사용하기 위한 JAVA CLASSPATH 설정  (0) 2009.10.22
Posted by ekwang
Android/Application2009. 11. 5. 18:18

SNS서비스의 이용이 많아지면서 당연 Twitter에도 많은 사람들이 관심을 가지게 되었다.
S/W 개발자라면 TweetAPI를 이용해서 Twitter Client Application을 개발하는데 관심을 가져볼만하다.

간단한 방법만 소개해보겠다.
우선 Twitter는 TwitterAPI라고 하여 Twitter server에 있는 여러 data들을 자유롭게 접근하여 사용할 수 있도록
API를 오픈하고 있다.
물론 완전히 자유롭게는 아니고 약간의 제약이 있긴하다. (이러한 내용은 Twitter API wiki를 통해 확인하도록 하자.)

아무튼 Twitter API는 html base이다.
C, JAVA등에 익숙한 나같은 사람은 html로 application을 개발 할 능력이 없다.(사실 JAVA에도 무뇌한이지만..)
그래서 TwitterAPI를 다양한 언어로 wrapping해놓은 다양한 라이브러리등이 존재한다.

그중 JAVA를 써서 개발한 Twitter4J를 사용한다면 개발이 한결 쉬울 것이다.
사이트로 가서 압축된 파일을 받기만 하면 준비는 끝이다.
그리고 간단한 sample code를 몇개만 보게된다면 당신은 twitter client 프로그램을 손쉽게 개발 할 수 있을것이다!!!

개발과정을 잠깐보고 간단한 예제코드를 Android에 적용해보자.

1. Twitter4J library Add
아래사진과 같이 Package Explore에서 해당 package를 선택 후 Alt+Enter를 누르면 Properties 화면이 뜬다.
여기서 Java Builder Path 메뉴의 Libraries로 이동, Add External JARs를 눌러서
Twitter4J\twitter4j-2.0.10\twitter4j-2.0.10.jar 를 추가하면 준비는 끝이다.

2. 필요한 class를 import.
이런 식으로 import해 주고 Twitter4J의 class, method들을 호출하여 app개발을 하면 된다.
import twitter4j.Twitter;
import twitter4j.Status;
import twitter4j.TwitterException;
import twitter4j.User;


Twitter4J를 이용한 Twitter 로그인, Tweet 보내기 예제는 다음번에 꼭 포스팅하도록 하겠다.
Posted by ekwang
카테고리 없음2009. 11. 5. 14:06

안녕하세요. 블로그 운영자 입니다.
제 블로그로의 유입 검색어를 보면 안드로이드 관련된 여러 문제점을 해결하기 위한 분들이 많습니다.
그래서 안드로이드와 관련된 여러 질문들을 올려 주시면
그에 맞는 내용으로 포스팅을 하고자 합니다.

주저없이 질문을 달아주시면 모르는 내용은 찾아서라도 알려드릴께요.
해결책을 찾는과정에서 제가 얻는 것들이 많기 때문에 윈윈입니다. ^^

어플리케이션 개발과 관련된 내용에는 아직 익숙하지 않지만 원하는 내용을 검색해서
답을 찾는 노하우는 많이 가지고 있다 생각합니다.

그럼 즐거운 개발활동하세요!
Posted by ekwang
사용기2009. 11. 5. 11:48

PC를 자주 사용하는 사람이라면 누구나 한번쯤 고민해 봤을 것이다.
folder를 삭제하려고 하는데 아래와 같은 경고 창이 뜬다.

파일 또는 폴더 삭제 오류
xxxxx 항목을 삭제할 수 없습니다. 다른 사람이나 다른 프로그램에서 사용하고 있습니다.
사용 중인 파일을 닫고 다시 시도하십시오.


(위의 경고창을 보고 본인의 PC에서 뜬것으로 알고 놀라지 않았으면 한다.
그런데 왜 위와 같은 Window 경고창에서 어떤 프로세스가 사용중이라는 상세 정보를 제공하지 않을까? (가능하면서)
요즘의 똑똑한 사용자들은 점점 더 많은 정보를 필요로 하고 있다.)

이럴땐 보통 "Windows 작업 관리자" (Ctrl+Shift+Esc)를 띄워서 감으로 몇몇 process들을 죽인 후 다시
삭제를 시도해보곤 했다.
하지만 정말 거의 모든 process를 죽였는데도 동일한 에러가 발생하면 정말이지.. 리붓을 할 수 밖에.

이때 사용하면 유용한 MS에서 제공하는 툴이 있다. Process Explorer
http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

다운받아서 실행한 화면, 설치할 필요 없이 바로 실행 가능함.

보다시피 상당히 많은 정보를 제공하고 있다.
process를 더블클릭하면 더 상세한 정보들을 볼수 있어서 여러 방면으로 활용이 가능할 것이다.

그럼 어떤 프로세서가 어떤 폴더를 사용중인지 찾는 방법을 알아보자.
간단하다.
Ctrl+F를 눌러서 Search창이 뜨면
찾고자 하는 폴더 명을 입력하면 된다.

아래는 결과 화면이다.

D:\Temp\temp 폴더를 삭제하려고 시도하였으나,
explore.exe와 <Non-existent Process> 에서 temp폴더를 사용중이어 실패 했음을 알 수 있다.

원하는 프로세스를 찾았으니 Delete키를 눌러 Kill Process를 하면 된다.
Posted by ekwang
Android/Application2009. 11. 5. 10:03
뒤늦은 감이 있지만 1.6에서 View.OnClickListener를 쉽게 사용하는 방법에 대해서
안드로이드 블로그에 글이 있는 것을 확인했다.
http://android-developers.blogspot.com/?hl=en


UI framework changes in Android 1.6
Easier click Listener
기존에 OnClick을 처리 하기 위해서 OnClickListener를 생성하고 등록하는 코드

View.OnClickListener handler = View.OnClickListener() {
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.myButton: // doStuff
                break;
            case R.id.myOtherButton: // doStuff
                break;
        }
    }
}

findViewById(R.id.myButton).setOnClickListener(handler);
findViewById(R.id.myOtherButton).setOnClickListener(handler);


아래는 1.6에서 추가된 방식
1. view에 대해서 OnClick이 발생하였을 경우 호출할 method를 생성한다.
class MyActivity extends Activity {
    public void myClickHandler(View target) {
        switch (v.getId()) {
            // doStuff
    }
}

2. layout xml파일의 View에 android:onClick 을 추가하고 위에서 생성한 method를 등록해준다.
<Button android:onClick="myClickHandler"
... />

이렇게 하면 상기 Button이 Click 되면 myClickHandler를 호출하게 된다.

안드로이팀은 개발자들이 어플리케이션을 쉽고 효과적으로 만들수 있도록 최선을 다 할것이라고 한다. :)
Posted by ekwang
Android/Tools2009. 10. 28. 09:34

Android 1.6이 릴리즈 된지 불과 한달 보름정도가 지났는데 벌써 2.0 이 릴리즈 되었다.
http://developer.android.com/sdk/android-2.0.html

Android SDK 2.0 는 설치 방법이 기존과 좀 달라졌는데,
android-sdk_r3-windows.zip 를 다운로드 받아서 압축을 풀어보면
tools 폴더의 파일들만 존재하고 그외 add-ons, docs, platforms, usb-driver의 폴더는 파일들은 비어 있는 상태이다.
SDK 2.0에 포함된 tools 외 파일들에 대한 변경 및 배포에 용이 하도록 방식을 수정한 듯 하다.
이후로는 SDK Manager라고 하는 SDK Setup.exe를 이용하여 Eclipse에서의 ADT plugin upgrage와 같이 SDK도 upgrade 받는 방식이 될 것 같다.

SDK Readme.txt 파일을 읽어보시고
SDK Setup.exe파일을 실행하면 그 외의 필요한 파일들을 다운로드 받을 수 있다.

Failed to fetch URL https://dl-ssl.google.com/android/repository/repository.xml
와 같이 연결 에러가 발생할 경우
아래와 같이 Force https:// ... 에 체크를 하고 
Save & Apply를 한 후 종료한다
그리고 다시 SDK Setup.exe 또는 tools/android 를 실행 하여 
Available Packages에서 주소를 다시 refresh 하면 된다.


ADT 버젼도 0.9.3에서 0.9.4로 upgrade되었으니 eclipse 사용자는 plugin을 update하도록 하자.
DDMS와 ADT tools 모두 upgrade되었는지 확인하도록 하자.
아쉽게도 이번 버젼에서도 AVD생성 경로에 한글이 포함되어 있을 경우 아래와 같은 에러가 발생하게 된다.
해결 방법 링크
emulator: ERROR: bad config: virtual device directory lacks config.ini
emulator: could not find virtual device named 'avd_2_0'


참고로 Android 2.0의 Platform 소스는 이번에도 같이 릴리즈 되진 않았다.
Posted by ekwang
사용기2009. 10. 26. 15:01
스프링노트 : http://www.springnote.com/ko

개인적인 프로젝트 진행을 위해서 정보,글 관리를 어떻게 할지 고민하던 중, 눈여겨 보던 "수원안드로이드스터디"에서 사용중인 스프링노트를 사용하게 되었다.

가입을 위해서는 Springnote의 신규 계정을 생성하거나 기존의 gmail, yahoo, openID 계정을 이용할 수 있다.

계정을 등록 한 후에는 개인노트와 그룹노트로 구분하여 노트를 만들 수 있는데, 개인노트의 글들은 본인만이 노트에 있는 글들을 편집할 수 있고 작성된 글들은 공개, 공유를 통하여 다른 이들과 함께 볼 수 있다.

이에 반해 그룹노트의 경우는 해당 노트에 관심이 있는 이들의 가입을 받을 수 있다. 물론 초대를 통한 가입도 가능하다. 이런식으로 가입된 사람들은 그룹노트의 모든 글들에 대해서 편집의 권한을 가지게 되어 하나의 노트를 완성해 나가는 방식이다.

장단점을 살펴보자.

단점 :
1. 그룹노트의 운영방식에 대한 의도는 좋으나 작성되어 있던 노트를 누군가 수정하게 될 경우 어떤 부분을 누가 수정을 했는지는 자동으로 표시가 되지 않기 때문에 불편한 점이 있을것으로 보인다.

2. PC로 글을 작성할 때 있어서 가장 중요한 것은 에디터 툴이 얼마나 사용하기 편한가라고 생각한다.
안타깝게 Springnote의 텍스트 에디터는 100점 만점에 30점 정도만 주고 싶다.
대략 10분 정도 글을 작성해보면 기본 기능들을 능숙하게 사용할 수 있을 정도로 아주 필요한 기능들만 제공하고 있다.

점수를 짜게준 이유는 자동 리스트 기능이 똑똑하게 동작 하지 않는 것(라인 변경시 자동으로 숫자나 특수 기호등을 라인앞에 붙여주는 기능)과 깔끔하지 못한 글상자들 그리고 예상대로 동작하지 않는 들여쓰기 내어쓰기 기능이다.
특히 자동 리스트 기능은 정말이 화가나서 글을 못쓸 지경에도 이를 정도이다. 본인이 사용에 능숙하지 못해서 일 수도 있지만 리스트 기능의 룰에 도저히 적응을 할 수가 없었다.

장점 :
1. SprintNote를 선택하게된 유용한 기능중의 하나는 Tistory와 연동하여 양방향으로 글을 가져오기, 내보내기를 할 수 있는 것이다. SpringNote에서의 설정후 SpringNote가 주체가 되어 자신의 Tistory Blog로부터 글을 가져 오거나 내보낼 수 있다.
하지만 SpringNote에서 보여지는 그대로 내보내기가 되지는 않았고 첨부된 파일들도 정상적으로 옮겨지지 않았다. 반정도만 완성된 기능이다.
Tistory로 가져온 글은 어느 정도의 편집을 거쳐야 보기 좋은 모습을 갖추었다.

2. 작성된 혹은 작성중인 노트를 보면 쉽게 눈에 들어온다. 작성시에는 블로그 글과 달리 실제 노트모습과 같이 가로로 줄이 있고, 읽기 모드로 글을 봐도 줄간격이 넓어서 그런지 글들이 눈에 잘 들어오는 느낌이다.


Posted by ekwang
TwitterAPI2009. 10. 22. 20:32

Window에서 Twitter4J API 사용을 위해서는
twitter4j-2.0.10 이하에 존재하는 jar 파일의 위치를 CLASSPATH 환경 변수 값에 등록을 해주어야 한다.
그래야 Twitter4j class 들을 import한 java파일을 javac를 이용하여 정상적으로 빌드 할 수 있다. 

즉, 아래의 jar파일들이 CLASSPATH 환경 변수에 포함되어야만
어떤 경로에서든 Twitter4j 를 import한 java파일이 빌드가 되는 것이다.
Twitter4J 의 jar파일이 아니더라도 빌드하고자 하는 파일의 import 에 새로운 class가 추가될 경우에는
필요한 jar파일들이 있는 경로를 CLASSPATH로 추가해 주어야 한다.

twitter4j-2.0.10\twitter4j-2.0.10.jar
twitter4j-2.0.10\twitter4j-2.0.10-javadoc.jar
twitter4j-2.0.10\twitter4j-2.0.10-sources.jar
twitter4j-2.0.10\lib\jdom.jar
twitter4j-2.0.10\lib\junit.jar
twitter4j-2.0.10\lib\logback-classic-0.9.6.jar
twitter4j-2.0.10\lib\logback-core-0.9.6.jar
twitter4j-2.0.10\lib\rome-0.9.jar
twitter4j-2.0.10\lib\slf4j-api-1.5.0.jar


아래와 같이 배치파일을 생성하여 CLASSPATH에 추가를 쉽게 한다.
setEvn.cmd 라는 파일을 생성하여 아래와 같이 코드를 넣자.(Window 환경용 임)

set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_03
for %%i in (D:\SFF\Twitter\Twitter4J\twitter4j-2.0.10\lib\*.jar) do set CLASSPATH=!CLASSPATH!;%%i
for %%i in (D:\SFF\Twitter\Twitter4J\twitter4j-2.0.10\*.jar) do set CLASSPATH=!CLASSPATH!;%%i
set CLASSPATH=%CLASSPATH%;.
set MEM_ARGS=-Xms10m -Xmx10m


위의 JAVA_HOME의 값과 같이 강조처리한 경로명에 대해서는
본인의 경로에 맞도로 변경을 하도록 한다.
setEnv.cmd를 cmd창에서 실행하면 아래와 같이 CLASSPATH값이 변경되었음을 확인 할 수 있다.

CLASSPATH=!CLASSPATH!;D:\SFF\Twitter\Twitter4J\twitter4j-2.0.10\twitter4j-2.0.10.jar;.


그리고 CLASSPATH에 현재경로를 알려주는 . 을 등록하지 않게되면
아래와 같은 Error를 보게 된니 반드시 . 경로(현재폴더를 지정하는 것임)도 추가 하도록 한다( set CLASSPATH=%CLASSPATH%;.)

D:\SFF\Project\Java>java t4j_Update
Exception in thread "main" java.lang.NoClassDefFoundError: t4j_Update


CLASSPATH가 정상적으로 설정되었다면
아래와 같이 컴파일 및 실행을 해볼 수 있다.(setEnv.cmd 는 이미 실행한 상태임)

  

 이 글은 스프링노트에서 작성되었습니다.

'TwitterAPI' 카테고리의 다른 글

[Twitter4J] OAuth support  (0) 2011.02.10
Twitter4J TwitterException -1 발생  (1) 2010.02.05
Twitter4J를 이용한 Android Twitter Application 예제 1  (5) 2009.11.19
Posted by ekwang
Android/Tools2009. 10. 16. 15:24

window에서 어찌하다보니 JDK설치 후 다른 버젼의 JRE도 설치를 했었다.
정리를 하다가 버젼이 낮은 JRE를 삭제를 하였다.

그 이후 android sdk에 있는 tools에 있는 android, ddms와 같은 툴들을 실행하니 아래와 같은 에러가 발생하였다.

D:\SFF\Android\SDK\android-sdk-windows-1.6_r1\tools>android
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/android/archquery/Main (Unsupported major.minor version 49.0)
        at java.lang.ClassLoader.defineClass0(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$100(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Starting Android SDK Updater
SWT folder '' does not exist.
Please set ANDROID_SWT to point to the folder containing swt.jar for your platform.


문제의 해결 방법은 간단하다.
Window의 환경변수에, 설치 혹은 삭제 후 변경된 JRE의 bin폴더를 등록하면 된다.
ex) C:\Program Files\Java\jdk1.6.0_03\bin

시스템 등록 정보에서 환경변수 수정하였다면 로그오프후 다시 확인을 해봐야 한다.
그래야 변경한 환경 변수가 다시 설정됨.

혹은 cmd 창에서 아래와 같이 입력하면 환경 변수가 바로 변경되어 시스템에 등록된다.

>set PATH=%PATH%C:\Program Files\Java\jdk1.6.0_03\bin
>set PATH

PATH=C:\Program Files\Qualcomm\Brew MP 1.0 SDK Rev 4.3\tools\deprecated\BTIL\host\bin;C:\Tool\Cygwin\bin;C:\Tool\ARM\ADSv1_2\bin;C:\WINDOWS\system32;C
:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\RnD\Rational\ClearCase\bin;D:\SFF\Android\SDK\android-sdk-windows-1.6_r1\tools;C:\Program Files\Rn
D\Rational\common;C:\Program Files\Klocwork\Klocwork 8.0 User\bin;C:\Tool\MinGW\bin;C:\Program Files\Microsoft Visual Studio\Common\Tools\WinNT;C:\Pro
gram Files\Microsoft Visual Studio\Common\MSDev98\Bin;C:\Program Files\Microsoft Visual Studio\Common\Tools;C:\Program Files\Microsoft Visual Studio\V
C98\bin;C:\PlaysForSure\DeviceTestKit\Utils;C:\Program Files\Klocwork\Klocwork 8.0 User\bin;C:\Program Files\Java\jdk1.6.0_03\bin;
Posted by ekwang
Android/Platform2009. 10. 16. 14:25

공식적으로 Android Platform 개발 환경으로는 Linux(Ubuntu)와 MAC OS를 언급하고 있다.
http://source.android.com/download

M$의 Window를 사용하고 있는 상태라면
Vvirtual Box등을 통해 ubuntu를 설치하거나, Linux, Window 를 멀티 부팅하게 하여
Android Platform 소스를 받고 컴파일을 하는 방법이 있을 것이다.(상위 링크 참고)

Android Code의 Distribute와 Contribute는 repo와 git라는 툴을 사용해서 한다.
git은 CVS, TortoiseSVN, ClearCase등과 같은 code를 관리하는 툴이라 생각하면 된다.
repo는 git기반으로 작성되었고 git의 많은 저장소들을 쉽게 관리할 수 있도록 도와주는 툴(스크립트)이다.
http://source.android.com/download/using-repo

그렇다.
window에서 git을 사용할 수 있다면 android platform 소스를 다운 받을 수 있는 것이다.
하지만 컴파일은 안된다.

우선 아래 링크를 참고하여 window에서 사용가능한 msysgit을 download하고 설치한다. (cygwin도 설치 해야함)
설치 시 옵션들이 잘 이해가 되지 않는다면
default 값들을 유지하면 Next만 눌러도 된다.

msysgit -
Git on Windows 개발 사이트
http://code.google.com/p/msysgit/

msysgit Download List

http://code.google.com/p/msysgit/downloads/list

설치가 완료되었으면 Git BashGit GUI를 확인 할 수 있다.

그럼 설치된 Git Bash를 실행해보자. terminal이 뜬다.

git을 이용하여 repository에서 소스를 내려 받는 기본 명령은 다음과 같다.

$ git clone git://android.git.kernel.org/platform/manifest.git mydroid


하지만 위와 같이 입력을 하게 되면 mydroid라는 폴더밑에는 default.xml 파일만 다운로드를 받고 작업이 완료된다.
원래 Linux 환경에서는 repo sync 를 이용하면
default.xml 파일을 참고하여서 전체 platform source를 다운을 받게 되는 것이다.
(실제 msysgit에서 curl을 통해서 repo를 설치하고 repo sync를 실행하여 다운로드를 시도해 봤으니
여러가지 에러가 발생하였다.)

하지만 우린 repo를 사용하지 않을 것인데,
그렇다면 160여개가 넘는project 파일들을 어떻게 다 다운 받을 것인가?
아래와 같이 일일이 입력 해줘야 한다!!!

git clone git://android.git.kernel.org/kernel/lk.git
git clone git://android.git.kernel.org/kernel/omap.git
git clone git://android.git.kernel.org/kernel/experimental.git
git clone git://android.git.kernel.org/kernel/msm.git
git clone git://android.git.kernel.org/kernel/common.git
.....

다행히 이러한 작업을 간단히 스크립트로 만들어 둔 분이 계시다.
http://bradchow.wordpress.com/2009/01/20/get-android-source-code-in-m-windows/

Download File :


해당 사이트에서 가져온 스크립트 첨부파일을 다운 받은 다음
아래와 같이 git bash에서 실행을 하게 되면 android full source를 다운 받을 수 있다.

$ sh autogit.sh


총 5.5G 정도의 디스크 공간이 필요하다.
필요한 소스만 받고 싶다면
http://android.git.kernel.org/
사이트를 참고하여서 원하는 project만 다운로드를 받아도 된다.

Posted by ekwang