요즘 XML 설정이 복잡한 메이븐Maven(http://maven.apache.org/) 대신 그레들Gradle(http://www.gradle.org/)이 사람들의 많은 관심을 받고 있다. 그루비Groovy를 바탕으로 하는 자동화 배포툴이라고 할 수 있으려나? 설정이 간략화되는 것에 대해서 높은 점수를 받고 있는 것으로 보인다. 그루비를 배워야 하나? ㅡ0-)?

안드로이드 배포툴도 그레들로 나오기 시작하던데...


우분투에서 Gradle 설치를 위한 명령어는 간단하다.

    $ sudo apt-get install gradle

honeymon@honeymon-ubuntu:~$ sudo apt-get install gradle

[sudo] password for honeymon: 

패키지 목록을 읽는 중입니다... 완료

의존성 트리를 만드는 중입니다       

상태 정보를 읽는 중입니다... 완료

다음 패키지를 더 설치할 것입니다:

  ant ant-optional antlr aspectj binfmt-support bnd bsh bsh-gcj checkstyle

  default-jdk default-jre default-jre-headless eclipse-jdt eclipse-pde

  eclipse-platform eclipse-platform-data eclipse-rcp fastjar fop gcj-4.6-base

  gcj-4.6-jre-lib groovy ivy jarwrapper junit junit4 libantlr-java

  libapache-pom-java libapr1 libaprutil1 libasm3-java libaspectj-java

  libavalon-framework-java libbatik-java libbindex-java libbonoboui2-0

  libbonoboui2-common libbsf-java libclassworlds-java libcodenarc-groovy-java

  libcommons-beanutils-java libcommons-cli-java libcommons-collections3-java

  libcommons-compress-java libcommons-configuration-java libcommons-dbcp-java

  libcommons-digester-java libcommons-el-java libcommons-httpclient-java

  libcommons-io-java libcommons-jexl-java libcommons-jxpath-java

  libcommons-lang-java libcommons-logging-java libcommons-net2-java

  libcommons-parent-java libcommons-pool-java libcommons-vfs-java libdb-java

  libdb-je-java libdb4.8 libdb5.1-java libdb5.1-java-gcj libdoxia-java

  libeasymock-java libecj-java libequinox-osgi-java libfop-java

  libganymed-ssh2-java libgcj-bc libgcj-common libgcj12

  libgeronimo-jpa-2.0-spec-java libgeronimo-jta-1.1-spec-java

  libgeronimo-osgi-support-java libglade2-0 libgmetrics-groovy-java

  libgnomecanvas2-0 libgnomecanvas2-common libgnomeui-0 libgnomeui-common

  libgnuinet-java libgnujaf-java libgnumail-java libgoogle-collections-java

  libgradle-announce-java libgradle-antlr-java libgradle-code-quality-java

  libgradle-core-java libgradle-ide-java libgradle-jetty-java

  libgradle-maven-java libgradle-osgi-java libgradle-plugins-java

  libgradle-scala-java libgradle-wrapper-java libhamcrest-java

  libhawtjni-runtime-java libhttpclient-java libhttpcore-java

  libicu4j-4.4-java libicu4j-java libitext1-java libjansi-java

  libjansi-native-java libjasper-java libjetty-extra libjetty-extra-java

  libjetty-java libjline-java libjna-java libjna-posix-java libjoptsimple-java

  libjsch-java libjsoup-java libjsr305-java libjtidy-java libjzlib-java

  liblogback-java liblucene2-java libmaven-ant-tasks-java libmaven-scm-java

  libmaven2-core-java libmockobjects-java libmodello-java libmx4j-java

  libnetbeans-cvsclient-java libosgi-compendium-java libosgi-core-java

  libosgi-foundation-ee-java libplexus-ant-factory-java

  libplexus-archiver-java libplexus-bsh-factory-java libplexus-build-api-java

  libplexus-cipher-java libplexus-classworlds-java

  libplexus-component-api-java libplexus-container-default-java

  libplexus-containers-java libplexus-i18n-java

  libplexus-interactivity-api-java libplexus-interpolation-java

  libplexus-io-java libplexus-sec-dispatcher-java libplexus-utils-java

  libregexp-java librhino-java libsaxon-java libservlet2.4-java libslf4j-java

  libsvn-java libsvn1 libsvnkit-java libswt-cairo-gtk-3-jni

  libswt-glx-gtk-3-jni libswt-gnome-gtk-3-jni libswt-gtk-3-java

  libswt-gtk-3-jni libswt-webkit-gtk-3-jni libtomcat6-java

  libtrilead-ssh2-java libwagon-java libxbean-java libxmlgraphics-commons-java

  libxstream-java openjdk-6-jdk rhino sat4j testng

제안하는 패키지:

  ant-gcj ant-doc liboro-java jython libjdepend-java libcommons-net-java

  javacc ant-optional-gcj bsh-doc eclipse fop-doc groovy-doc libbcprov-java

  libbcpg-java ivy-doc junit-doc libavalon-framework-java-doc

  libclassworlds-java-doc libcodenarc-groovy-java-doc

  libcommons-beanutils-java-doc libcommons-collections3-java-doc

  libgeronimo-jta-1.0.1b-spec-java libcommons-digester-java-doc

  libcommons-httpclient-java-doc libcommons-io-java-doc

  libcommons-jxpath-java-doc libcommons-logging-java-doc

  libexcalibur-logkit-java libcommons-net2-java-doc libcommons-vfs-java-doc

  libdoxia-java-doc libeasymock-java-doc ecj libecj-java-gcj libgcj12-dbg

  libgcj12-awt libgeronimo-jpa-2.0-spec-java-doc libgeronimo-jta-java-doc

  libgeronimo-osgi-support-java-doc libgmetrics-groovy-java-doc

  libgnumail-java-doc gradle-doc maven2 scala jetty libjetty-java-doc

  libjline-java-doc libjna-java-doc libjsoup-java-doc libjsr305-java-doc

  libjtidy-java-doc glassfish-javaee janino libmaven-scm-java-doc

  libmodello-java-doc libhessian-java libosgi-compendium-java-doc

  libosgi-core-java-doc libosgi-foundation-ee-java-doc

  libplexus-build-api-java-doc libplexus-cipher-java-doc

  libplexus-classworlds-java-doc libplexus-component-api-java-doc

  libplexus-container-default-java-doc libplexus-i18n-java-doc

  libplexus-interactivity-api-java-doc libplexus-interpolation-java-doc

  libplexus-sec-dispatcher-java-doc libplexus-utils-java-doc libsaxon-java-doc

  libswt-gtk-3-java-gcj tomcat6 libwagon-java-doc libspring-core-java

  libspring-beans-java libspring-context-java libspring-web-java

  libjoda-time-java libstax-java libcglib2.1-java libjettison-java

  openjdk-6-demo openjdk-6-source visualvm librhino-java-doc testng-doc

다음 새 패키지를 설치할 것입니다:

  ant ant-optional antlr aspectj binfmt-support bnd bsh bsh-gcj checkstyle

  default-jdk default-jre default-jre-headless eclipse-jdt eclipse-pde

  eclipse-platform eclipse-platform-data eclipse-rcp fastjar fop gcj-4.6-base

  gcj-4.6-jre-lib gradle groovy ivy jarwrapper junit junit4 libantlr-java

  libapache-pom-java libapr1 libaprutil1 libasm3-java libaspectj-java

  libavalon-framework-java libbatik-java libbindex-java libbonoboui2-0

  libbonoboui2-common libbsf-java libclassworlds-java libcodenarc-groovy-java

  libcommons-beanutils-java libcommons-cli-java libcommons-collections3-java

  libcommons-compress-java libcommons-configuration-java libcommons-dbcp-java

  libcommons-digester-java libcommons-el-java libcommons-httpclient-java

  libcommons-io-java libcommons-jexl-java libcommons-jxpath-java

  libcommons-lang-java libcommons-logging-java libcommons-net2-java

  libcommons-parent-java libcommons-pool-java libcommons-vfs-java libdb-java

  libdb-je-java libdb4.8 libdb5.1-java libdb5.1-java-gcj libdoxia-java

  libeasymock-java libecj-java libequinox-osgi-java libfop-java

  libganymed-ssh2-java libgcj-bc libgcj-common libgcj12

  libgeronimo-jpa-2.0-spec-java libgeronimo-jta-1.1-spec-java

  libgeronimo-osgi-support-java libglade2-0 libgmetrics-groovy-java

  libgnomecanvas2-0 libgnomecanvas2-common libgnomeui-0 libgnomeui-common

  libgnuinet-java libgnujaf-java libgnumail-java libgoogle-collections-java

  libgradle-announce-java libgradle-antlr-java libgradle-code-quality-java

  libgradle-core-java libgradle-ide-java libgradle-jetty-java

  libgradle-maven-java libgradle-osgi-java libgradle-plugins-java

  libgradle-scala-java libgradle-wrapper-java libhamcrest-java

  libhawtjni-runtime-java libhttpclient-java libhttpcore-java

  libicu4j-4.4-java libicu4j-java libitext1-java libjansi-java

  libjansi-native-java libjasper-java libjetty-extra libjetty-extra-java

  libjetty-java libjline-java libjna-java libjna-posix-java libjoptsimple-java

  libjsch-java libjsoup-java libjsr305-java libjtidy-java libjzlib-java

  liblogback-java liblucene2-java libmaven-ant-tasks-java libmaven-scm-java

  libmaven2-core-java libmockobjects-java libmodello-java libmx4j-java

  libnetbeans-cvsclient-java libosgi-compendium-java libosgi-core-java

  libosgi-foundation-ee-java libplexus-ant-factory-java

  libplexus-archiver-java libplexus-bsh-factory-java libplexus-build-api-java

  libplexus-cipher-java libplexus-classworlds-java

  libplexus-component-api-java libplexus-container-default-java

  libplexus-containers-java libplexus-i18n-java

  libplexus-interactivity-api-java libplexus-interpolation-java

  libplexus-io-java libplexus-sec-dispatcher-java libplexus-utils-java

  libregexp-java librhino-java libsaxon-java libservlet2.4-java libslf4j-java

  libsvn-java libsvn1 libsvnkit-java libswt-cairo-gtk-3-jni

  libswt-glx-gtk-3-jni libswt-gnome-gtk-3-jni libswt-gtk-3-java

  libswt-gtk-3-jni libswt-webkit-gtk-3-jni libtomcat6-java

  libtrilead-ssh2-java libwagon-java libxbean-java libxmlgraphics-commons-java

  libxstream-java openjdk-6-jdk rhino sat4j testng

0개 업그레이드, 170개 새로 설치, 0개 제거 및 5개 업그레이드 안 함.

279 M바이트 아카이브를 받아야 합니다.

이 작업 후 407 M바이트의 디스크 공간을 더 사용하게 됩니다.

계속 하시겠습니까 [Y/n]?


관련해서 설치해야하는 gradle이 억수로 많네~ ㅡ0-)>


   설치 확인!  
 

honeymon@honeymon-ubuntu:~$ gradle

:help

Welcome to Gradle 1.0-milestone-3.

To run a build, run gradle <task> ...

To see a list of available tasks, run gradle tasks

To see a list of command-line options, run gradle --help

BUILD SUCCESSFUL

Total time: 1.615 secs

honeymon@honeymon-ubuntu:~$


 

그레들 버전 확인

 

$ gradle -v

honeymon@honeymon-ubuntu:~$ gradle -v

------------------------------------------------------------

Gradle 1.0-milestone-3

------------------------------------------------------------

Gradle build time: Thursday, September 8, 2011 4:06:52 PM UTC

Groovy: 1.8.6

Ant: Apache Ant(TM) version 1.8.2 compiled on December 3 2011

Ivy: non official version

JVM: 1.6.0_27 (Sun Microsystems Inc. 20.0-b12)

OS: Linux 3.5.0-25-generic amd64

honeymon@honeymon-ubuntu:~$ 


 

 그레들 설치 위치  

 

/usr/share/gradle


 

 참고사이트

 

* 손권남님의 위키 : http://wiki.kwonnam.pe.kr/gradle

* Gradle/lean :http://www.gradle.org/learn



인텔리제이 아이디어 IntelliJ IDEA 12를 구매하고 사용하지 않다가, 문득 생각이 나서 설치를 했다. 그런데 프로젝트 타이틀의 글씨들이 깨지는(안티앨리어싱이 적용되지 않아 글씨가 단계지어 나타나는) 현상이 보여서 이를 해결하려고 찾아봤다.

File - Setting - Editor - Appearance 에서 'Use anti-aliased font' 를 체크하면 된다고 하기에 해봤는데 안된다. 

그래서 혹시나 하고 찾아보니, 별도의 idea.vmoptions 라는 파일을 손봐야 한다는 글을 발견했다.


* 참고문헌 : 

    * http://helols.tistory.com/304

    * http://devnet.jetbrains.com/message/5277587?tstart=0

    * http://stackoverflow.com/questions/8691088/change-font-into-intellij-10-11    <-- 요놈 보고 정리


* 사용 운영체제 : Ubuntu 12.04 64bit

* IntelliIDEA 설치위치 : /develop/intelli-idea-12

* 안티앨리어싱 관련 설정파일 위치 : /develop/intelli-idea-12/bin

    * 32bit 설정파일 : idea.vmoptions 

    * 64bit 설정파일 : idea64.vmoptions

* 추가할 항목 : 

-Dawt.useSystemAAFontSettings=on


  IntelliJ IDEA가 Java AWT의 환경설정을 따르면서 나타나는 현상으로, VM 실행옵션으로 -Dawt.useSystemAAFontSettings을 주어서 UI단에서 안티앨리어싱(높은 해상도의 폰트를 화면에 불러올 때 나타나는 깨진 패턴을 완화시키기 위해 사용)을 동작시키는 시스템 프로퍼티값을 주었다. 다양한 옵션이 있는데, 간단하게 'on'으로만 처리했다.


* awt.useSystemAAFontSettings 관련 설명

    * http://docs.oracle.com/javase/6/docs/technotes/guides/2d/flags.html#aaFonts

지난 토요일(2013. 02. 23.) 코엑스에서 [Follower 에서 Creator로!] 라는 주제로 JCO가 주최한 제 13회 한국자바개발자 컨퍼런스 대회(http://jco.zdnet.co.kr/)가 열렸다. 


국내에서 열리는 자바관련 컨퍼런스로는 가장 큰 행사다(이제는 Deview, Devon, H3 등의 규모도 굉장히 커졌다). 개발관련 큰 컨퍼런스들이 열리는 것은 개발자들에게 굉장히 좋은 여건을 마련해준다.


 

 컨퍼런스 청취 세션 정리  

 

2013/02/24 - [Java/Java] - 제13회 JCO 첫번째 발표, 우리들이 말하는 분산환경(Itembay mobile Service)

2013/02/24 - [Java/Java] - 제 13회 JCO 두번째 발표, 파이썬3 기반의 웹 프레임워크 : 파이라떼PyLatte

2013/02/24 - [Java/Java] - 제13회 JCO 세번째 발표, Server side software development

2013/02/24 - [Java/Java] - 제 13회 JCO 네번째 발표, MongoDB, DB설계 패턴 및 성능 튜닝 솔루션

2013/02/24 - [Java/Java] - 제13회 JCO 다섯번째 발표, OAuth 기반 오픈 API활용 실전


 

 컨퍼런스 시작 전 우려에 대한 이야기

 

2013/02/10 - [Java/Java] - 제 13회 JCO에 대한 한소리


 

 블로그 홍보왕, 2관왕

 

많은 사람들기 기다리고 기다리는 경품추첨의 시간!

운이 좋게도 JCO 블로그 홍보왕에 올해도 당선이 되었네요. 그저 블로그에 관련 이미지를 복사해서 올렸을 뿐인데...

2013/01/21 - [Java/Java] - [제 13회 한국 자바개발자 컨퍼런스]가 열립니다.

작년에는 SSD 128GB, 올해는 SSD 256GB를 받았습니다. 집에 오자마자, 데스크탑에 꽂힌 HDD를 뽑아내고 SSD로 꽂고 윈도우와 우분투 리눅스를 깔고 돌려보니 감동의 눈물... ㅠㅅ-)!!


 

  JCO 풍경

 

012345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182


 

 한국자바개발자 컨퍼런스 참관, 그 후 이야기

 

Follower에서 Creator로!

  컨퍼런스 참관후기에는 '이 주제에 대한 답을 얻었는가?'에 대한 이야기를 중점적으로 다루는 것이 적절하겠다. 내가 그런 이야기를 할 수 있는 위치나 경험은 미천하지만...

  기술적인 트렌드가 많이 변했다. 과거 벤더(Vendor, Oracle과 IBM 같은) 중심이었던 데에 반해서, 이제는 오픈소스 중심의 시대가 되었다. 서비스를 제공하는 대부분의 기술들이 오픈소스를 기반으로 하고 있다. 빅데이터와 클라우드라는 용어가 흔하게 쓰이고 있는 기술적 트렌드의 중심에는 오픈소스들이 있다. 빅데이터의 중심에 있는 NoSQL 기반의 데이터베이스, 대용량 데이터 분산처리 및 클라우드 컴퓨팅의 근간이 되는 하둡, 기술들의 중심에는 오픈소스가 자리잡고 있다.
  오픈소스 기술을 사용할 때 중요한 것은, '소통'과 '기술의 내재화'라고 생각한다. 오픈소스 기술을 사용하면서 생길 수 있는 '내부적인 결함'과 '시행착오'를 개발자들이 해결해야한다. 해결하기 위해서는 '오픈소스 관련 개발자들과의 협력' 및 '내부 개발자들의 학습과 그 과정에서 생기는 경험의 축적'이 중요해진다.
  우리나라는 대기업 중심의 기술선도 문화가 깊게 자리잡고 있다. 대기업들은 풍부한 자본과 인력을 바탕으로 독점적으로 정보를 공유해왔었다. 그런  이들을 중심으로 최신 기술들을 도입을 시도하고 그 과정에서 시행착오들의 경험들이 은은히 퍼져나가게 된다. NHN, Daum, KTH, SKPlanet 등의 기업에서 큰 컨퍼런스를 주최하기 시작한 이유는... 뭘까요? +_+)~ ㅎㅎ
  그래도 요즘은 그 기업들의 노하우 공유의 장이 많이 열리기 시작해서 기술적인 유행에서 조금 멀리 있는 개발자들에게도 유행의 맛을 볼 수 있는 기회를 제공하고 있다. 수도권을 중심으로 열리는지라 지방에 계신 분들은 접하기가 어렵기는 하겠다. 그래도 전에 비하면 훨씬 나아졌지만... 
역시 개발자는 서울로 와야한다! 응?

참관 평가의 기준이 되는 'Follwer에서 Creator로!'에 대한 이야기 시작해보겠다.
이번에 참관했던 내용들을 가지고 내가 Creator가 될 수 있을까?
.... 좋게 대답하기 어렵다. 
  몇몇 발표들은 마음에 들었다. 그런데 몇몇 발표들은 '왜 들었을까...?'하는 생각이 들기도 했다. 자바와의 연관성을 찾아볼 수 없는 발표도 있었다. 다른 개발 컨퍼런스에서라면 '자바와의 연관성'에 대해서 크게 신경쓰지는 않았을 것이다. 하지만 JCO다. '한국자바개발자 컨퍼런스'라는 이름을 걸고 하는 컨퍼런스에서 '자바'와의 관계성이 적은 주제의 발표들이 섞여있는 것이 참 아쉬움이 많다. 다른 언어에 대한 소개나 사례를 발표한다면, 발표주제는 '자바언어를 사용하는 개발자가 효과적으로 접근할 수 있는 포인트와 자바와의 차이점'에 대해서 알려주는 것이 맞지 않을까?
개인적으로는 '자바'를 바탕으로 '스타트업Start-up'에서도 사용할 수 있을만큼 빠르고 안정적으로 생산성을 높이고 결과물을 도출할 수 있는 방법에 대해서도 이야기가 나올 수 있으면 참 좋겠는데, 이런 이야기가 '자바Java'라는 언어를 가지고는 할 수 없는건지 아쉬움이 많다. 

  해가 갈수록... 아쉬움이 많아지는 JCO 컨퍼런스다. 
올해 출시되는 오라클에서 처음으로 내놓는 JDK 8에 대한 소개를 하는 코너도 없는게 참 거시기 했다. 비록 우리나라에서 JDK 1.6이 사용되기 시작한 상황이기는 하지만, 아쉬움이 많이 남는다. 올해는 Lamda식 표현(JSR 335, http://openjdk.java.net/projects/lambda)을 익혀볼까 하고 있다.

어디선가 JCO 발표 주제와 발표 내용에 대한 글이 올라온 것을 보기는 했는데, 무심코 지나친 결과치고는 '참혹했다'는 생각이든다. 쩝.
나와 비슷하게, 상당히 많은 사람들이 발표제목과 발표자만 보고 세션을 선택해서 듣는 이들이 많을텐데(당일, 발표장소에서 발표내용에 대해서 확인할 수 있는 정보를 제공하는 그 어떤 것도 없었다. ㅡ_-)> 요즘 유행하는 긴 디스플레이로, 각 발표회장별 발표제목과 발표자, 발표내용을 보여줘도 되었을텐데...) 적잖게 실망했다는 이야기들을 들을 수 있었다. 처음 참관한 동생은 '우와, 이런 게 있는지 몰랐어요.'라며 신기해하기도 했다.

'무료'로 보는 컨퍼런스면, '그런대로 들을만 했어.' 라고 넘어갈 수 있다.
그러나 '유료(아마, 조금씩 관람료는 오를 것이다. JCO 컨퍼런스를 해외 개발 컨퍼런스처럼 고급화하겠다는 이야기를 들었을 때, '관람료가 오르겠군.' 이라는 생각을 했으니까.)'로 보는 컨퍼런스로서는, '쩝...'하는 생각이 든다. 조금도 양질의 컨퍼런스로 만들고자 한다면 신경써야할 부분들이 많다는 생각을 하고 있다. 발표자를 모집하는 게 아니라 요청하면 어떨까? ㅡ_-)?
특정한 주제를 가지고 컨퍼런스를 진행하려고 했다면, '주제'에 맞게 '분야'선정하고 그 '분야'별 '기술적 흐름이나 유행'을 파악하여 '발표거리'를 선정하고, 각 '발표거리'에 적합한 '전문가'를 선정하여 그들에게 발표를 요청하는 것이 적합하지 않을까?
'유료'에 대해서는 불만이 없다. '정보'를 얻기 위해서는 그만한 댓가를 지불해야한다고 생각한다. 그러나 '유료화'가 되면 돈을 내고 들을 만한 값어치가 있어야 한다고 생각한다. 이에 대해서 조금 더 고민해주었으면 좋겠다.

컨퍼런스가 끝나고 쥐뿔(Google+)에서, 이번 JCO는 어디에서(소셜미디어, SNS라는 단어보다 맘에 드는 소셜미디어, 대부분의 공개되어 있는 네트워크 서비스들은 정보전달매체로서 활용된다는 점에서보면 소셜미디어라고 퉁쳐도 되지 않을까?)도 관련한 소식을 들을 수가 없다는 것이었다. 그 흔한 트위터 해시태그 #JCO 로 나온 이야기가 없다는 것도 아쉽기는 하다. 우리나라 개발자들이 생각보다 소셜미디어를 활용하는 사람이 없다는 점도 나로서는 신기하기도 하다. ㅡ_-)> 블로그를 운영하고 있다고 하면 그걸 신기해하는 사람들도 상당히 많고...
세미나나 컨퍼런스에 가면 알고있는 개발자들을 만나서 이런저런 이야기를 나누는 재미가 있다. 소셜미디어를 통해서만 알고 지내던 사람들을 만나는 재미도 있다. 실제로 얼굴을 대면하면서 만나기는 어렵지만, 스마트폰을 놓지 못하고 사는 개발자들이 소셜미디어를 통해서 서로의 생각을 나누고 친해질 수 있다면 좋지 않을까? 

사진출처 : 한국자바개발자협의회(JCO) https://www.facebook.com/groups/jco.or.kr/



 

 기타  

 

* 해쉬태그 활용하기 : http://twitteran.com/26

* 한국자바개발자협의회(페이스북 그룹) : https://www.facebook.com/groups/jco.or.kr/

* 한국자바개발자협의회(티스토리 블로그) : http://jcoorkr.tistory.com/32

* JCO 컨퍼런스 페이지 : https://www.facebook.com/jcoconf

* JCO 컨퍼런스 접수페이지 : http://jco.zdnet.co.kr/

JCO 관련 사이트는 찾을수록 여기저기 흩어져서 나오네. ㅡ0-);;


* 발표자 : 옥상훈, http://okgosu.net

* 관련자료

    * OAuth Core 1.0 Revision A : http://oauth.net/core/1.0a/

    * OAuth 2.0 : http://oauth.net/2/

* 인증이란?

* ID/PW 방식 인증의 위험성

* OAuth

* 사용자 입증에서 ID/PW 를 서드파티앱에 노출하지 않고 회원 인증할 수 있어야 함

* 서비스 제공자 입장에서는 인증한 API에 대해 권한을 부여하고 이에 따라 API를 제공할 수 있어야 함

* OAuth 버전

* 1.0 -> 1.0a -> 2.0 draft

* OAuth 적용기업

* Facebook

* Foursquare

* Daum

* NHN

* 국내는 아직 1.0a, 해외는 2.0

* OAuth 1.0a 작동방식

* 3-legged model

- User

- Consumer

- 서비스 제공자에게 컨슈머 정보를 등록해 컨슈머키(id)와 시크릿값을 발급 받아야 함

- Service Provider

* OAuth 인증 프로세스

- 써드파티앱은 회원을 서비스 제공자 화면으로 이동시켜 회원인증을 하면서 서비스 제공자로부터 접근토큰을 전달받음

- 서비스 제공자의 API를 호출할 때 접근토큰을 함께 넘겨야 사용가능

* OAuth 1.0a 개발은 서비스 제공자로부터 '접근토큰'을 발급 받기 위함

- 1단계 : 서비스 제공자에게 요청토큰을 요청함

- 2단계 : 화면을 서비스 제공자의 로그인 페이지로 이동시킴

- 3단계 : 서비스 제공자에게 접근토큰을 요청함

* OAuth 1.0a 전체 절차

* OAuth 2.0의 등장

* OAuth 1.0 의 불편한 점을 개선하기 위해 스펙논의

- 암호화, 다양한 앱 지원 등 애플리케이션에 대한 지원 강화

* OAuth 1.0 vs OAuth 2.0 비교

* OAuth 2.0 인증방식


- 3-legged

- 2-legged

* OAuth 1.0a 인증예제

* 네이버 카페 API 활용

* Consumer key, Consumer Secret 은 정확하게!

* 필수 라이브러리

- 인증 로그인화면을 띄우기 위해 WebView invisible 로 선언

* OAuth 2.0a 인증 예제

* 구글 Task API 활용

1. 인증시작

2. 회원로그인

3. 접근토큰 획득

4. API 호출

* 클라이언트 API KEY 생성

* HTTPS를 사용

* 인증서비스를 만들 때 고려사항은?

* 정리

012


    플랫폼을 지향하는 서비스들이 대거 출현하고, 이 서비스들에서 OPEN API를 제공하면서 많은 매시업Mashup 서비스들이 출현한다. 이 과정에서 사용자의 인증 절차를 제대로 파악하는 것이 중요하다.

    플랫폼 서비스를 고려하는 이들이 OAuth 인증절차에 대한 좋은 이해의 장이 되었을 것이라 생각한다.


* 발표자 : 주종면

* MongoDB 공식 한국 사용자 그룹 운영자

- 사이트 : http://mongodb-korea.org


* NoSQL 개념

* IT 기술전망 : 클라우드, 빅데이터에서 많은 이야기가 거론됨

* Bic Data 솔루션

- 빅데이터의 수집과 저장기술 오늘의 소개 주제

- NoSQL, MongoDB, Casandra, Hbase

- 빅데이터의 추출과 분산기술

- Hadoop, Storm, Spark, Kafka

- 빅데이터의 분석 및 통계기술

- R, SAS, SPSS

* DBMS for NoSQL : 150여개

- NoSQL 제품군 : 유용성Availability, 일관성Consistency, 파티셔닝Partioning

- Key-Value Database

- Big Table Database

- Document Database

- Graph Database

* NoSQL 제품별 평가결과

- MongoDB : 평가기준에서 전체적으로 좋은 성능의 제품이 나타남

- Community Support 지원

* Data Modeling & 설계 패턴

* MongoDB주요 특징

- Humongos라는 회사의 제품명 

- JSON 타입의 데이터 저장구조를 제공

- CRUD 위주의 다중 트랜잭션 처리가 가능하고 인덱스를 통한 빠른 데이터 검색이 가능

- 분산/병렬처리MapReduce 기능을 제공

- 분산Sharding/복제Replica 기능을 제공

- RDBMS 에서는 대용량의 데이터 처리가 어려워질 수 있다

- Memory Mapping 기술을 기반으로 Big Data 처리에 탁월한 성능 제공

* Collection 생성 : 데이터 저장 가능공간 생성

- 비정형화된 데이터

- db.createCollection("emp", {capped:false, size:8192}); 8k -> 이 공간을 넘어서면 새로운 확장을 하기 위해서 대기상태가 자주 발생하게 된다. 

- db.emp.validate(); Collection의 현재 상태 및 정보분석

* 성능을 개선하기 위해서는 구조에 대한 이해가 필요하다.

* 논리적 구조

- 입력과정에서 생기는 extent의 사이즈에 대한 고려가 필요하군.

* MongoDB 설계 주요 특징

1. MongoDB는 데이터의 중복을 허용하며 비정형화된 설계를 지향한다.

2. MongoDB는 중첩 데이터 구조를 설계할 수 있기 때문에 불필요한 JOIN을 최소화시킬 수 있다.

3. MongoDB는 N:M 관계 구조를 설계할 수 있고 구축할 수 있다.

4. MongoDB는 Schema 중심으로 설계하지 않는다.

* OODBMS vs RDBMS

- Embedded Document

- Extend Document : 먼저 Root Document를 넣고, Root Document에다가 Document 추가

- Linking Document

* 설계패턴

* MongoDB 데이터 저장 구조(Embedded)

- 장점

1. Query가 단순해지고 Join 문을 실행할 필요가 없기 때문에 Document 단위의 데이터 저장에 효과적이며 빠른 성능이 보장된다.

2. 데이터 보안에 효과적이다.

- 단점

1. Embedded 되는 Document의 크기는 최대 10MB  내외

* Manual Linking

- RDBMS : relationship을 통해 제한

- OODBMS : 

- 장점

1. 별도의 논리적 구조로 저장되기 때문에 Document 크기에 제한받지 않는다.

2. 비즈니스룰 상 별도로 처리되는 데이터 구조에 적합하다.

- 단점

1. 매번 논리적 구조간에 Linking해야 하기 때문에 Embedded보다 성능이 늦다.

2. Collection 갯수가 증가하며 관리비용이 많이 든다.

* 만들고자 하는 데이터의 패턴을 고려하여 적합한 설계패턴을 고려해야한다.

- 설계에는 답이 없다.

* Self reference join

* 계층형 데이터 구조

- ANCESTOR, PARENT 를 이용하여 계층혀 데이터 구조 설계 가능

* Inheritence(OODBMS) : 상속 

- 데이터가 저장되는 시점에서 필드와 크기가 저장되기 때문에, 별도로 표현할 필요가 없다.

* MongoDB 성능 튜닝 솔루션

* 적절한 분석을 통해 최적의 컬렉션 구조를 설계하라.

* 빅 데이터의 빠른 검색을 위해 인덱스를 적절히 활용하라.

- 다양한 인덱스 종류

- TTL index : 2.0 에서 추가됨 

- GeoSpatial Index : 좌표정보(위도, 경도, 온도)

* MongoDB의 분산Sharding/복제Replica를 적절히 활용

* Database profiler

- 성능 저하 요소를 찾아 튜닝

* Hint 절과 실행계획

- DB에서 말하는 Hint는 뭐지? +_+)?

* 빅데이터 추출 및 분석

- MongoDB의 Map/Reduce 기능을 이용한 빅데이터 추출

- Javascript function으로 구현

- Aggregation Framework 를 이용해서 기본적인 추출 가능

- MongoDB 와 Hadoop을 연동한 데이터 처리

- Map/Reduce in Python

* Sharding

* MongoDB Architecture

- 좋은 시스템보다는 충분한 메모리 용량이 있을 때 성능만족!


* 정리

01234567


    딱, 'DB 전문가'의 느낌이 나는 발표였다. ^^; 몽고DB를 사용할 때 주의해야할 요소요소들을 콕콕 찝어주었다. NoSQL 관련 DB 중에서 가장 높은 선호도와 기술안정성을 가지고 있는 것이 MongoDB기에 많은 사람들이 NoSQL 관련 DB를 고려할 때 우선적으로 떠올리는 DB이기도 하다. 몽고DB 도입시 고려사항들에 대해서 상세히 잘 이야기해주셨다.

    내가 'MongoDB'를 사용하고 경험할 수 있을 때가 언제 오려나~?

+ Recent posts