2012년 2월 2일 목요일

워드프레스로 이전합니다.

http://jangnan.wordpress.com로 블로그 이전합니다.

구글 블로그가 가독성이 너무 떨어지네요.
새로나온 테마 적용하면 카테고리가 부실하고 워드프레스가 그나마 나은거 같아서 옮깁니다.

2012년 2월 3일 it 기술 동향

java


spring mvc restful
http://nurkiewicz.blogspot.com/2012/02/automatically-generating-wadl-in-spring.html

Neo4j 와 직관적인 그래프
http://maxdemarzi.com/2012/02/02/graph-visualization-and-neo4j-part-two/

각종 자바 서버와 애플리케이션의 메모리 사용율 비교
http://www.jvmhost.com/articles/memory-usage-comparison-of-java-application-servers-and-applications#.Tykao1hFKhc.hackernews

팩토리 메서드 패턴 적용하기
http://www.java-only.com/LoadTutorial.javaonly?id=20

복잡한 이클립스 플러그인 없이 톰캣 디버깅하기
http://andreas.haufler.info/2012/01/launching-and-debugging-tomcat-from.html

glassfish 다중 도메인에서 클러스터링 하기
http://alexandru-ersenie.com/2012/01/30/glassfish-vertical-clustering-with-multiple-domains/

하이버네이트 캐시 레벨 튜토리얼
http://www.javacodegeeks.com/2012/02/hibernate-cache-levels-tutorial.html

gwt를 이용한 mvp 패턴 만들기
http://joergviola.blogspot.com/2011/07/gwt-mvp-made-simple.html

android

안드로이드 로그캣 로그를 실시간으로 푸쉬해줌
https://github.com/koush/logpush

Cloud computing

bigdata 가이드
https://plus.google.com/114723964985237592593/posts/a1p5LiURPW8

모바일 클라우드 보안
http://www.ibm.com/developerworks/kr/cloud/library/cl-mobilecloudsecurity/index.html

dart

심플한 게임만들기
http://phylotic.blogspot.com/2012/02/reactive-dart-series-part-3-of-n.html

마술상자 만들기
http://dzenanr.github.com/2012/02/02/from-s02-to-s03.html

javascript

backbone.js 예제
http://www.javageneration.com/?p=839

예제를 만들어보며 배우는 backbone.js
http://coenraets.org/blog/2012/01/backbone-js-lessons-learned-and-improved-sample-app

json 소개
http://www.w3resource.com/JSON/introduction.php

jquery

jpg디코더 js
https://github.com/notmasteryet/jpgjs

사진 크기를 늘렸다가 줄엿다가 할수있는 플러그인
http://www.dimin.net/software/panojs/

방향키로 스크롤링을 하는데 슬라이드 넘기는 거 같음
http://johnpolacek.github.com/scrolldeck.js/

프롬프트 메뉴를 구현하기 좋음
http://natrixnatrix89.github.com/promptu-menu/

사이드 패널
http://codebomber.com/jquery/slidepanel/

홈페이지 전면의 플래쉬급 배너제작가능한 애니메이션 플러그인
http://visitmix.com/labs/glimmer/

트위터 위젯
http://tweet.seaofclouds.com/

페이스북 타임라인 모방하기(좀틀림)
http://demos.9lessons.info/timeline/index.html

linux

조냉 많이 쓰는 리눅스 명령어 50개
http://www.thegeekstuff.com/2010/11/50-linux-commands/


etc.

Restful 한 개발이란 무엇인가?
http://stackoverflow.com/questions/671118/what-exactly-is-restful-programming

이메일 서버 설정 시나리오들
http://cloudtech.biz/email-server-configuration-scenarios/

나만의 로고 만드는법
http://www.netmagazine.com/tutorials/create-custom-lettered-logo-illustrator


2012년 2월 1일 수요일

2012년 2월 2일 it 기술 동향

JAVA

vaadin과 jsf중에 어느것을 선택해야할까
http://www.hildeberto.com/2012/01/choosing-between-vaadin-and-jsf.html

http://www.softwaretestingmagazine.com/videos/cucumber-with-jvm-improvements/

varnish 를 이용한 속도개선
http://blog.mgm-tp.com/2012/01/varnish-web-cache/

oracle의 java 앞으로 2년간의 로드맵
http://www.infoworld.com/slideshow/28552/java-roadmap-oracles-two-year-plan-185238

jax-rs를 이용해서 만든 rest api를 이용해 spring android를 이용한 앱만들기
http://www.ibm.com/developerworks/kr/library/x-springandroid/index.html

java ee6 의 샘플들 구성
http://blogs.oracle.com/arungupta/entry/java_ee_6_samples_in

http://blog.eisele.net/2012/01/sneak-peak-at-java-ee-7-multitenant.html

웹소켓 을 통한 브라우저에게 CDI이벤트 보내기
http://wesleyhales.com/blog/2012/01/20/Sending-CDI-events-to-the-browser-with-websockets/

java 7 에서의 파일 복사와 이동
http://codingjunkie.net/java-7-copy-move/


python

파워풀한 테스트를 위한 mock 오브젝트의 주입
http://blueprintforge.com/blog/2012/01/08/python-injecting-mock-objects-for-powerful-testing/

android

rapmobile
http://rapmobile.eclipsesource.com/

html5

웹 메시징 소개
http://dev.opera.com/articles/view/window-postmessage-messagechannel/

Javascript

이미지를 쉽게 drawing하게 해주는 js
http://thinkpixellab.com/pxloader/#sample1

jsdev 메뉴얼
https://github.com/markandey/JSDev/wiki/User-Manual

Jquery

jquery 30일 완성 이메일로 받는 교육
http://learnjquery.tutsplus.com/

마우스 커서를 찍으면 물방울 번짐 이펙트 일어남
http://nejimaki-act.com/lab/pointer/

글씨가 상하로 페인드인아웃됨
http://medienfreunde.com/lab/innerfade/

Dart

Nio 라이브러리 추가
http://news.dartlang.org/2012/02/dart-io-libraries-for-files-and-network.html

dart에서 web audio api 활용하기
http://news.dartlang.org/2012/02/web-audio-api-and-dart.html


json 으로 이름만 넣으면 dom구조로 마크업으로 만들어줌
https://github.com/insin/DOMBuilder


Node.js

https://github.com/OptimalBits/navcodec

웹개발에 용의한 심플한 middleware
http://matthewmueller.github.com/thimble/

start-stop-daemon
https://github.com/jiem/start-stop-daemon

단순하게 node.js로 서버 구현하고 클라이언트 만들어서 이벤트 푸시
https://github.com/einaros/sse.js

tools

리눅에서 사용가능한 compare synchronize 툴
http://www.webupd8.org/2012/02/compare-and-synchronize-folders-with.html

etc.
Google Maps API plus Fusion Tables 를 이용해서 만든 엘더스크롤 스카이림 지도
http://www.tamrielma.ps/skyrim/


21세기 코드리뷰
http://dublintech.blogspot.com/2012/01/code-reviews-in-21st-century.html

2012년 1월 31일 화요일

2012년 2월 1일 it 기술 동향

java


spring 3,3.1에서의 비지니스 컴포넌트 아키텍쳐
http://blog.codecentric.de/en/2012/01/a-business-component-architecture-with-spring-3-03-1-part-1-structure/


java8 부터 unsinged integer 지원
http://lukaseder.wordpress.com/2012/01/21/java-8-will-have-some-support-for-unsigned-integers/


spring 에서 junit을 이용한 scope bean테스트하는거랑 jee bean에 aquillan이용해서 테스트
http://niklasschlimm.blogspot.com/2011/07/integration-testing-scoped-beans-in-cdi.html

jboss의 html5에 대한 전략
https://community.jboss.org/wiki/AeroGearServerSideResources
http://planet.jboss.org/post/the_aerogear_mobile_html5_project_is_alive


python


심플한 소켓 클라이언트 쓰레드 코드
http://eli.thegreenplace.net/2011/05/18/code-sample-socket-client-thread-in-python/


html5


web storage동영상
http://debugmode.net/2012/01/28/video-on-web-storage-in-html5/


javascript

stellar.js
http://markdalgleish.com/projects/stellar.js/


canvas를 쉽게 쓸수있게 해주는 EaselJS
https://github.com/gskinner/EaselJS


psd파일을 파싱해주는 psd.js
http://meltingice.github.com/psd.js/


dart 나선 꼬기
http://dzenanr.github.com/


http://blog.involver.com/2012/01/26/testing-backbone-js-best-practices-2/


jquery


흥미로운 플러그인 40개
http://www.admixweb.com/2012/01/30/40-handy-jquery-plugins-for-serious-web-developers/

비디오 플레이어 플러그인
http://www.jqueryrain.com/2012/01/40-best-jquery-players-tutorials-both-audio-player-and-video-player/


쓸만한 플러그인 3종세트
http://dailyjs.com/2012/01/31/jquery-roundup/


jquery 보일러플레이트
http://jqueryboilerplate.com/




cloud



구글앱엔진 1.6.2 업데이트
http://googleappengine.blogspot.com/2012/01/app-engine-162-released.html

map reduce

http://code.google.com/intl/ko-KR/appengine/docs/python/dataprocessing/overview.html


Prospective Search
http://code.google.com/appengine/docs/python/prospectivesearch/overview.html

big query
https://developers.google.com/bigquery/

etc.



웹브라우저 얼랭 콘솔 에뮬레이터
http://svahne.github.com/browserl/

2012년 1월 30일 월요일

2012년 1월 31일 it 기술 동향

Java

java에서의 foreach 루프의 이해
http://javabynataraj.blogspot.com/2012/01/understanding-foreach-loop-in-java.html

DI는 왜 써야되는가?
http://cspray.github.com/2012/01/24/why-you-should-use-DI.html
http://googledata.org/google-testing/clean-code-talks-dependency-injection/

클라우드 환경 속에서의 자바 어플리케이션의 보안
http://www.ibm.com/developerworks/java/library/j-javadev2-23/index.html?ca=drs-

osgi 모듈 소개
http://www.javacodegeeks.com/2012/01/introduction-to-osgi-modular-java.html

자바 웹호스팅에 선택에 따른 플로우 차트
http://www.streamhead.com/java-web-hosting-options-flowchart/

Python

csv모듈
http://slott-softwarearchitect.blogspot.com/2012/01/python-32-csv-module-very-very-nice.html

Javascript

dart와 기존과의 비교로 배워보는 문법
http://synonym.dartlang.org/


Jquery

횡스크롤 배너
http://www.gcmingati.net/wordpress/wp-content/lab/jquery/newsticker/jq-liscroll/scrollanimate.html

이미지를 잘라주는 js 블로그의 댓글 다는 것 방식도 재밌다.
http://www.useragentman.com/blog/2011/10/29/clipping-jpeg-images-into-non-rectangular-polygons-using-polyclip-js/

CSS3

네비게이터를 클릭하면 별도의 창같이 화면이 내려온다.
http://tympanus.net/codrops/2012/01/30/page-transitions-with-css3/

뷸렛 드롭다운 네비게이터 메뉴
http://azadcreative.com/2012/01/bulletproof-css3-dropdown-navigation-menu/

Node.js

node.js redis를 이용한 트위터 앱 만들기
https://github.com/mashery/iodocs

분산 처리 기반의 로드 밸런서
https://github.com/LearnBoost/up

tools.

클라우드 베이스 테스팅 툴들
http://www.toolsjournal.com/testing-lists/item/404-10-cloud-based-testing-tools

파폭 10,11 개발자 툴들
http://www.webdesignerdepot.com/2012/01/new-developer-tools-in-firefox-10-and-11/

chromium 코맨드 라인 명령어
http://peter.sh/experiments/chromium-command-line-switches/


etc.

jboss as에서 html5 개발하기
http://vimeo.com/33538130

foundry의 멀티 다 언어 멀티 프레임워크 지원
http://blog.cloudfoundry.com/post/13481010615/multi-language-multi-framework-what-about-multi-cloud

ssd에 db를 사용하면 빠를까?
http://www.cubrid.org/blog/dev-platform/will-the-use-of-ssd-increase-the-speed-of-dbms/

모질라 그룹의 새로운 프로젝트 팬케이크
http://mozillalabs.com/blog/2012/01/pancake-a-new-project-from-mozilla-labs/

제 12회 한국자바개발자 컨퍼런스


2012년 1월 29일 일요일

Apache 와 Tomcat Load Balancing


mod_jk tomcat Connector : 

mod_jk는 tomcat servlet container와 Apache같은 AJP프로토콜을 사용하는 웹서버를 연결해주는 connector 입니다.

웹서버는 client의 request로부터의 response를 관리합니다.
request 가 올때 웹서버는 다음과 같은 행동을 하게합니다.

- sevlet containner connector library를 로드하고 초기화합니다.
- connector에서 인증된 url 포함한 어떤 request를 sevlet에게 주게됩니다.

이렇게 Connector는 웹서버와 container의 중간 매개체 역활을 합니다.

아래의 준비물을 다운받습니다.

1. apache web server 2.2.21(http://httpd.apache.org/download.cgi.)

일단 톰캣을 인스톨합니다.

1. 압축을 풀고 임의의 위치(디렉토리)에 위치시키도록 합니다.
2. 일단 설치후 {tomcat_root}/bin 에서  ./startup.sh를 실행시켜서 tomcat을 구동시킵니다.
3. 웹브라우저를 열어서 http:localhost:8080 에 접속합니다.
4. 3번 bin으로 돌아가서 ./shutdown.sh로  tomcat을 끕니다.

로드 밸런싱을 할 예정이므로 두개의 서버를 띄워야합니다.

1. 첫번째 받은 tomcat을 디렉토리이름만 다르게 압축을 풉니다.
    여기서는 처음 녀석은 tomcat1, 두번째 녀석은 tomcat2라고 합니다.
2. tomcat2의 하위 디렉토리에 conf폴더로 접근해서 server.xml 을 열어 보도록합니다.
3. <Server port=”8005″ shutdown=”SHUTDOWN”>  를 <Server port=”7005″ shutdown=”SHUTDOWN”>로 변경합니다.
(앞서 포트는 tomcat1이 사용중이니)
4. Change <Connector port=”8080″ maxHttpHeaderSize=”8192″… 를 <Connector port=”7070″ maxHttpHeaderSize=”8192" 변경한다.(위와 같은이유)
5.  <Connector port=”8009″ enableLookups=”false” redirectPort=”8443″ protocol=”AJP/1.3″ /> 를  <Connector port=”7009″ enableLookups=”false” redirectPort=”8443″ protocol=”AJP/1.3″ />로 변경합니다.
6. tomcat2/bin으로 가서 ./statup.sh를 실행합니다.
7. http://localhost:7070/을 확인합니다.
8. bin으로 가서 ./shutdown.sh를 해서 끕니다.

다음은 apache서버를 세팅합니다.
(mac은 기본적으로 깔려있죠. 경로 : /usr/libexec/apache2)

1. 압축을 풀고 ./configure을 합니다.
2. make를 입력하여 설치를 진행합니다.
3. 웹브라우저를 열고  http://localhost/로 가서 80포트로 잘작동하는지 확인합니다.
4. stop 합니다.

이제 mod_jk 차례입니다.

1. 압축을 풀고 {apache_directory}/module에 mod_jk.so 파일을 copy & paste합니다.
2. {apache_directory}/conf 안에서 httpd.conf 파일을 수정할수 있게 열고 끝에 아래 문장을 추가합니다.
LoadModule jk_module modules/mod_jk.so 
3.{apache_directory}/conf 에 workers.properties라는 파일을 만든고 아래의 문장을 넣고 저장합니다.
  worker.list=worker1,worker2
                                worker.worker1.port=8009
                                worker.worker1.host=localhost
                                worker.worker1.type=ajp13
                                worker.worker2.port=7009
                                worker.worker2.host=localhost #you can also specify other machine address or name
                                worker.worker2.type=ajp13

-  wokrer1이 tomcat1, worker2가 tomcat2이다.

4.  httpd.conf 에  workers.properties를 정의해줘야한다. 
아래 내용을 넣어준다.

# Path to workers.properties
JkWorkersFile c:/apache2.2/conf/workers.properties
# Path to jk logs
JkLogFile c:/apache2.2/mod_jk.log
# Jk log level [debug/error/info] JkLogLevel info
# Jk log format
JkLogStampFormat “[%a %b %d %H:%M:%S %Y] “
# JkOptions for forwarding
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat set the request format
JkRequestLogFormat “%w %V %T”
JkMount /jsp-examples/* worker1
JkMount /tomcat-docs/* worker2

5. jsp-examples로  tomcat1이 worker1로 tomcat-docs에는 tomcat2가 worker2로 되어 있다.

6. tomcat 1,2의 server.xml 을 수정합니다.
tomcat1에는 <Engine name=”Catalina” defaultHost=”localhost” jvmRoute=”worker1″>
tomcat 2에는 <Engine name=”Catalina” defaultHost=”localhost” jvmRoute=”worker2″>를 추가합니다.
7. tomcat1,2를 statup하고 apache webserver도 start합니다.

여기서 브라우저는 http://localhost/jsp-examples/ 와 http://localhost/tomcat-docs.를 둘다 가리킵니다.
여기서 이것을 구분하기 쉬운방법은 두 톰캣의 index.jsp의 제목을 변경해서 확인하는것입니다.
결국 둘은 따로 각각 경로를 가리키고 있는것을 확인할수가 있습니다.
이 시점에서 아파치 의 서브로 톰캣 인스턴스의 경로에 요청을 넘길 준비가 된것입니다.
하지만 여기서 톰캣에 대한 로드밸런싱에 관한 설정을  해줘야합니다. 만약 톰캣 1이 크래싱이 발생시 아파치는 자동으로 tomcat2에 어플리케이션에 대한 접근을 넘겨야합니다.
로드밸런싱 설정은 단순합니다.
우선
workers.properties를 열어줍니다. 
아래의 굵은글씨를 수정,추가합니다.

#worker.list=worker1,worker2
 worker.list=balancer
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1
worker.worker2.port=7009
worker.worker2.host=localhost
worker.worker2.type=ajp13
worker.worker2.lbfactor=1
worker.balancer.type=lb
worker.balancer.balance_workers=worker1,worker2
worker.balancer.method=B
# specifies whether requests with SESSION ID’s should be routed back to the same #Tomcat worker.
worker.balancer. sticky_session =True


싱글 워커에  balance 를 call하고 worker type에 lb(load balance)를 정의했습니다.
이 워커(worker.balancer.balance_workers)들은 worker1과 worker2를 관리합니다.
그리고 method에 'B'를 정의했습니다.
마지막 sticky_session는 true로 해줘야합니다. 
Session ID를 기반으로 라우팅을 지원할지에 대한 설정입니다..

마지막으로 httpd.conf를 열고  JkMount 맨앞부분에

JkMount /tomcat-docs/* balancer
JkMount /jsp-examples/* balancer

이 부분을 추가합니다.
이제 확인작업으로 tomcats와 apache를 구동하고 http://localhost/jsp-examples에 접속합니다. tomcat1or tomcat2에 접속하게 될것입니다.  

tomcat1,2에 둘다 접속된다는것을 확인하기 위해 앞서 해당 index.jsp를 교체하였던걸 생각하고 새로고침을 하여 첫페이지의 제목이 바뀌는것을 확인합니다.