오픈소스 프로젝트를 이용하는데 있어 주의해야 하는 것 중 하나가 LISENCE를 잘 살펴보아야 하는 것인데, 이 프로젝트는 프로젝트를 사용함으로 인해 이 사용한 프로젝트에 법적인 제약이 걸리게 된다. 단적으로 GPL Lisence의 경우에는 이 소스를 사용한 프로젝트의 전체 소스를 공개해야 한다. 반면 MIT Lisence의 경우에는 이러한 제약이 거의 없고 상업적 이용되 허용된다.
CKEditor Pricing을 살펴보면, OpenSource Project와 상업적 용도가 구별되어있다는 것을 알 수 있다. CKEditor가 상당히 안정화됨에 따라 이와 같은 가격정책을 취한 것으로 생각되는데, 일반적으로 소스를 오픈하지 않는 프로젝트라면 SummerNote를 쓸 수 밖에 없는 상황이 아닌가 싶다.
CKEditor도 Lisence가 GPL, LGPL, MPL 이 세 가지로 나누어져 있는데 이 세 라이센스 중 한 가지를 따라야 하며, 법적(legal)하게 SourceCode를 public하게 만들어두어야만 한다. Standard Lisence의 경우에는 OpenSource용이고, 이 경우 Commercial하게 사용하지는 못한다. 즉, 오픈소스 프로젝트에 Support 가격이 들어간 것일 뿐인 것이다.
오픈소스는 어떻게 운영되는가
오픈소스 프로젝트는 기본적으로 개발자들의 열정으로 이루어진다. 사회 공헌적 성격도 있고, 자신이 만든 소스를 여러 사람들이 사용해 더 큰 생태계로 발전해 나가기를 희망하는 것도 있다. 기업이 공개하는 오픈소스의 경우에는 자사의 서비스와 연계되어있는 경우나 자사가 이용하는 라이브러리/프레임워크가 전 세계에서 널리 사용되어 보편화 되고 이로 인해 시장 점유율이라는 것과 이쪽 분야에 대한 전반적 발전을 이끌어 낼 수 있다는 점에서 의미가 있다. (단적인 예시로 구글의 TensorFlow가 공개된 이후 TensorFlow가 학계에서 무척 많이 이용되고 있으며 관련 연구의 진척이 폭발적으로 일어나고있다.)
오픈소스 프로젝트 개발팀은 어떻게 밥먹고 사는가
MySql와 같은 유명 오픈소스 프로젝트들은 크게 두가지 방법으로 서비스를 제공한다. 일반 사용자들을 위한 것, 그리고 기업 사용자들을 위한 것. 회사나 공공기관의 경우에는 솔루션 도입에 앞서 염두에 두는 것이 ‘가격’만이 아니라 ‘유지보수’, 즉 이용중에 접하는 버그 혹은 에러상황에 대해 내부에서 프로젝트 전체를 관리하지 않고서도 자사의 서비스를 안정적으로 유지할 수 있느냐, 그리고 이 솔루션 도입시 에러를 내지 않는다는 (혹은 에러를 빠르게 해결 가능하다는) 보증이 필요한 것이다.
따라서 개발팀은 프로젝트는 공개하되, 개발팀 차원에서 지원이 필요한 경우에 계약을 통해 돈을 받고 유지보수를 계속 하는 것이다.
여담
오픈소스 프로젝트는 사실 PullRequest에 의해 진행되는 면도 무시할 수 없다. 그러나, Core개발자들이 풀타임으로 일하지 않는다면 OpenSSL의 HeartBleed와 같은 문제가 언제든 발생할 수 있다.
OpenSSL는 대다수의 프로젝트에서 의존성으로 사용되는 어머어마하게 많이 사용되는 프로젝트임에도 풀타임 개발자가 한명뿐이었다는 점, 오픈소스 프로젝트가 갖게 되는 가장 심각한 문제를 명백하게 보여준다. 모두가 관리하는 것이 아니라 모두가 방치했을 수 있다는 점, 그리고 빠른 패치와 업그레이드가 오히려 문제를 가져올 수 있다는 점, 그리고 이 문제는 소수가 사용하는 내부 시스템이 아니라 전세계의 대다수의 서비스가 사용하는 의존성 패키지였다는 점. 공유지의 비극이 일어난 상황이라고 보아도 무방하지 않을까…
React Native의 Tutorial번역 시리즈입니다. 원문: getting-started 이번 번역은 현재(2016.11.15) 최신 Stable인 0.37버전의 문서를 번역하였습니다.
#01: 시작하기
React Native에 오신 것을 환영합니다! 이번 게시글에서는 React Native를 여러분의 시스템에 설치하고 곧바로 실행 할 수 있도록 안내합니다. 만약 여러분이 이미 React Native를 설치해두셨다면, 이번 게시글을 건너뛰고 튜토리얼로 가셔도 됩니다.
이번 게시글은 여러분이 어떤 시스템을 사용하는지에 따라 약간 내용이 다르고, iOS/Android중 어떤 것을 사용하느냐에 따라서도 내용이 다르답니다. iOS와 Android 모두 개발하는 것도 당연히 가능합니다! 여기서는 그냥 시작을 어떤 환경으로 할지 정하는 것 뿐입니다.
만약 Cannot find module 'npmlog'같은 에러를 만나셨다면, npm을 다음 명령어로 수동 설치해보세요.: curl -0 -L http://npmjs.org/install.sh | sudo sh.
Xcode 설치하기 (iOS개발환경)
Xcode를 설치하는 가장 쉬운 방법은 Mac App Store에서 받는 방법입니다. 앱스토어에서 Xcode를 설치하면 iOS시뮬레이터와 iOS App빌드를 위한 여러 툴들이 자동으로 함께 설치됩니다.
Android Studio 설치하기 (안드로이드 개발환경)
만약 여러분이 안드로이드를 개발하는 것이 처음이라면, 개발환경을 갖추는 것은 약간 까다로울 수 있습니다. 이미 안드로이드 개발을 하고있던 환경이라면, 설정을 거의 건드리지 않아도 React Native로 개발을 시작하실 수 있습니다. 둘 중 어떻든, 아래 과정을 확인해보세요.
Android Studio는 Java Development Kit (JDK) version 1.8 이상을 필요로 합니다. 터미널에서 javac -version 명령어로 몇 버전의 JDK가 깔려있는지 확인해보세요!
2. AVD, HAXM 설치하기
Android Studio 설치를 시작할 때 custom옵션으로 설치를 진행해 주세요. 다음 문항들이 다 체크되어있는지 꼭 확인해보세요:
Android SDK
Android SDK Platform
Performance (Intel ® HAXM)
Android Virtual Device
다 체크되어있다면, “Next”를 눌러 설치를 진행해 주세요.
(역자주) HAXM이 없어도 여전히 사용은 가능합니다. 그러나 안드로이드 가상머신의 성능이 저하될 수 있고, 이 옵션은 사용하시는 시스템에 따라 사용가능 유무가 달라지므로 크게 신경쓰지 않으셔도 됩니다.
만약 Android Studio를 이미 설치하셨더라도, Android Studio 재설치 없이 HAXM 설치를 하실 수 있습니다.
3. Android 6.0 (마시멜로) SDK 설치하기
안드로이드 스튜디오에서는 기본적으로 최신 버전의 Android SDK를 설치해줍니다. 하지만 React Native(0.37)에서는 안드로이드6.0(마시멜로) SDK(역자주)정확히는 v23.1를 사용합니다. 이 SDK는 “Welcome to Android Studio” 화면에서 SDK Manager를 실행하고, Configure탭에서 설치하실 수 있습니다.
또다른 방법으로는, 안드로이드 스튜디오의 “Preferences” 메뉴 아래 Appearance & Behavior → System Settings → Android SDK 으로 들어갈 수 있습니다.
SDK Manager에서 “SDK Platforms”을 누른 후, “Show Package Details”를 눌러보세요. Android 6.0 (Marshmallow)를 찾으신 후, 아래 목록들이 모두 체크되어있는지 확인해 보세요:
보통의 경우 안드로이드 스튜디오 설치 중 AVD도 설치되지만, 안드로이드 스튜디오 설치 중 AVD가 설치되지 않는 경우는 흔한 경우랍니다. 다음 가이드Android Studio User Guide를 따라서 새로운 AVD를 수동으로 만드실 수도 있습니다.
React Native 설치 테스트하기 (iOS VM으로 확인하기)
React Native command line interface를 이용해 새로운 React Native 프로젝트를 시작해볼게요. “AwesomeProject”라는 멋진 이름을 가진 프로젝트로요 :) 다음 명령어들을 따라치면 프로젝트가 생기고 가상 iOS머신에서 우리의 프로젝트가 곧장 실행될거에요!
1 2 3
react-native init AwesomeProject cd AwesomeProject react-native run-ios
조금만 기다리면 우리의 AwesomeProject가 실행된 모습을 보실 수 있을거에요.
react-native run-ios명령어는 우리의 앱을 실행하는 방법 중 하나일 뿐이랍니다. Xcode에서 실행하셔도 되고, Nuclide를 통해 실행하셔도 됩니다.
React Native 설치 테스트하기 (Android VM으로 확인하기)
만약 바로 위에있는 iOS로 테스트를 해본 상태라면, 마지막 줄의 react-native run-android만 입력하세요. React Native command line interface를 이용해 새로운 React Native 프로젝트를 시작해볼게요. “AwesomeProject”라는 멋진 이름을 가진 프로젝트로요 :) 다음 명령어들을 따라치면 프로젝트가 생기고 가상 안드로이드 머신에서 우리의 프로젝트가 곧장 실행될거에요!
1 2 3
react-native init AwesomeProject cd AwesomeProject react-native run-android
만약 모든 환경이 제대로 설정되었다면, 안드로이드 VM하나가 실행되고 우리 앱이 안드로이드에 뜰거랍니다. react-native run-android명령어는 우리 앱을 실행하는 방법 중 하나일 뿐이랍니다. Android Studio에서 실행하셔도 되고, Nuclide를 이용하셔도 됩니다.
앱 수정해보기
만약 위에서 성공적으로 앱이 실행되었다면, 약간 수정을 해봅시다!
iOS 앱 수정하기
index.ios.js 파일을 열고 몇몇 줄을 수정해 보세요.
Command⌘ + R을 눌러서 iOS Simulator를 다시 로딩해 어떤 변화가 있는지 확인해보세요.
Android 앱 수정하기
index.android.js 파일을 열고 몇몇 줄을 수정해 보세요.
R키를 두번 누르거나 Reload를 개발자메뉴에서 눌러 어떤 변화가 있는지 확인해보세요.
이게 끝이에요!
축하합니다! 여러분은 성공적으로 React Native앱을 실행하고 수정까지 해 보셨어요.
이젠 뭘해야할까요?
만약 이미 존재하는 앱에 React Native를 적용하고 싶으시다면, Integration guide 문서를 확인해보세요.
유의사항: 현재(11.14) celery가 4.0버전으로 stable 릴리즈가 되었습니다. 아래 문서는 3.1의 마지막 버전의 문서를 번역한 것입니다. 최신 문서는 곧 업데이트 될 예정입니다.
Celery는 공식적인 패키지로 django-celery를 제공합니다. 이 문서는 celery의 현재(2016.11)의 최신 버전인 3.1버전을 기준으로 하고 있습니다.
장고(Django)와 함께하는 Celery 첫걸음
원제: First steps with Django
장고와 함께 Celery사용하기
유의점: 이전 버전의 celery는 장고와 독립적인 패키지를 필요로 했지만, 3.1버전부터는 더이상 그렇지 않습니다. 이제 장고에서 공식적으로 celery를 바로 사용할 수 있도록 지원하며, 따라서 이 문서는 celery와 장고를 간단하게 연결하는 부분만을 다루고 있습니다. 즉, 장고와 함께 사용하지 않고 독립적으로 사용하는 celery와 완전히 같은 API를 사용하고 있기 때문에, 현재는 First Steps with Celery를 읽고나서 다시 이 문서로 오시는 것을 추천합니다. 이미 작동하고 있는 celery 앱을 갖고 계시다면, Next Steps 가이드를 참고하시기 바랍니다.
Celery를 장고 프로젝트에서 사용하시려면, 우선 Celery 라이브러리의 인스턴스를 정의해야 합니다. (이 인스턴스는 아래에서 ‘app’이라고 불립니다.)
만약 최신 장고프로젝트(django 1.10)의 형식을 따라 사용하고 계시다면, 장고 프로젝트는 아래와 같은 형태일 것입니다. (프로젝트 이름: ‘proj’)
# Django의 세팅 모듈을 Celery의 기본으로 사용하도록 등록합니다. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')
from django.conf import settings # noqa
app = Celery('proj')
# 문자열로 등록한 이유는 Celery Worker가 Windows를 사용할 경우 # 객체를 pickle로 묶을 필요가 없다는 것을 알려주기 위함입니다. app.config_from_object('django.conf:settings') app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
이 방법을 통해 개별적 모듈들을 CELERY_IMPORTS 세팅값에 등록해주지 않아도 됩니다. lambda를 통해 필요한 경우에만(재사용 가능한 앱이 있는 경우에만) 자동탐색이 동작하게 되기 때문에, Celery App을 import한다고 해서 장고 세팅 객체를 검사(evaluate)하지는 않습니다.
마지막으로, debug_task라는 예제는 request받은 정보를 단순하게 dump하는 작업만 합니다. 그리고, bind=True라는 Task옵션은 Celery 3.1에서 도입된 기능으로, 현재 작업 인스턴스를 좀 더 쉽게 refer하도록 도와줍니다.
@shared_task 데코레이터 이용하기
우리가 작성한(혹은 지금 보고있는 분이 작성한) task들은 재사용 가능한 앱들에 있을텐데, 이러한 재사용가능한 앱들은 Project자체에 의존하기는 어렵습니다. 그리고 app을 단독으로 직접적으로 import할 수도 없죠.
@shared_task 데코레이이터는 딱딱한(concrete) 앱 없이도 task를 만들 수 있도록 해 줍니다.
4-3. 만약 Celery를 Django settings에 직접 연결해 두었다면 app.conf.update부분 없이 바로 괄호 안의 문구를 settings.py안에 넣어두기만 하면 됩니다.
(유의점)상대적 import:__ __import를 하는 방법은 항상 일치해야 합니다. 만약, project.app 을 INSTALLED_APPS 에 import 해 주었다면 from project.app 와 같은 형식으로 import해주어야 합니다. 혹은 각각의 task들이 이름이 모두 다르게 하는 방법도 있습니다. __추가정보: Automatic naming and relative imports
워커 프로세스 실행해보기
실 배포 환경에서는 worker를 시스템 daemon으로 사용해야합니다. (Running the worker as a daemon 을 참고하세요.) 하지만, 테스트할 때에는 worker instance를 celery worker manage 커맨드를 통해 시작하는 것이 더 편리합니다. 장고의 runserver를 이용하는 것 처럼요 :)
1
$ celery -A proj worker -l info
위 코드로 간단하게 실행이 가능하고, command-line 옵션을 모두 보려면
1
$ celery help
라고 쳐 봅시다.
이제 어디로 가야할까요?
만약 좀 더 배우고 싶다면, Next Steps 튜토리얼을 보세요. 그 튜토리얼을 마친 이후에는 User Guide를 보고 공부할 수 있을거에요.