<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3457111550855581420</id><updated>2024-10-06T22:04:20.113-07:00</updated><category term="장난님이 주목한 일일 it기술들"/><category term="CLisp"/><category term="Node.js"/><title type='text'>Jangnan&#39;s Life</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jangnandev.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://jangnandev.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07131582180996221331</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>58</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3457111550855581420.post-889658838759343164</id><published>2012-02-02T23:52:00.000-08:00</published><updated>2012-02-02T23:52:32.820-08:00</updated><title type='text'>워드프레스로 이전합니다.</title><content type='html'>&lt;a href=&quot;http://jangnan.wordpress.com/&quot;&gt;http://jangnan.wordpress.com&lt;/a&gt;로 블로그 이전합니다.&lt;br /&gt;
&lt;br /&gt;
구글 블로그가 가독성이 너무 떨어지네요.&lt;br /&gt;
새로나온 테마 적용하면 카테고리가 부실하고 워드프레스가 그나마 나은거 같아서 옮깁니다.&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://jangnandev.blogspot.com/feeds/889658838759343164/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://jangnandev.blogspot.com/2012/02/blog-post.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/889658838759343164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/889658838759343164'/><link rel='alternate' type='text/html' href='http://jangnandev.blogspot.com/2012/02/blog-post.html' title='워드프레스로 이전합니다.'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07131582180996221331</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3457111550855581420.post-2081354640329313386</id><published>2012-02-02T17:30:00.000-08:00</published><updated>2012-02-02T18:12:41.926-08:00</updated><title type='text'>2012년 2월 3일 it 기술 동향</title><content type='html'>&lt;b&gt;java&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
spring mvc restful&lt;br /&gt;
&lt;a href=&quot;http://nurkiewicz.blogspot.com/2012/02/automatically-generating-wadl-in-spring.html&quot;&gt;http://nurkiewicz.blogspot.com/2012/02/automatically-generating-wadl-in-spring.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Neo4j 와 직관적인&amp;nbsp;그래프&lt;br /&gt;
&lt;a href=&quot;http://maxdemarzi.com/2012/02/02/graph-visualization-and-neo4j-part-two/&quot;&gt;http://maxdemarzi.com/2012/02/02/graph-visualization-and-neo4j-part-two/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
각종 자바 서버와 애플리케이션의 메모리 사용율 비교&lt;br /&gt;
&lt;a href=&quot;http://www.jvmhost.com/articles/memory-usage-comparison-of-java-application-servers-and-applications#.Tykao1hFKhc.hackernews&quot;&gt;http://www.jvmhost.com/articles/memory-usage-comparison-of-java-application-servers-and-applications#.Tykao1hFKhc.hackernews&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
팩토리 메서드 패턴 적용하기&lt;br /&gt;
&lt;a href=&quot;http://www.java-only.com/LoadTutorial.javaonly?id=20&quot;&gt;http://www.java-only.com/LoadTutorial.javaonly?id=20&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
복잡한 이클립스 플러그인 없이 톰캣 디버깅하기&lt;br /&gt;
&lt;a href=&quot;http://andreas.haufler.info/2012/01/launching-and-debugging-tomcat-from.html&quot;&gt;http://andreas.haufler.info/2012/01/launching-and-debugging-tomcat-from.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
glassfish 다중 도메인에서 클러스터링 하기&lt;br /&gt;
&lt;a href=&quot;http://alexandru-ersenie.com/2012/01/30/glassfish-vertical-clustering-with-multiple-domains/&quot;&gt;http://alexandru-ersenie.com/2012/01/30/glassfish-vertical-clustering-with-multiple-domains/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
하이버네이트 캐시 레벨 튜토리얼&lt;br /&gt;
&lt;a href=&quot;http://www.javacodegeeks.com/2012/02/hibernate-cache-levels-tutorial.html&quot;&gt;http://www.javacodegeeks.com/2012/02/hibernate-cache-levels-tutorial.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
gwt를 이용한 mvp 패턴 만들기&lt;br /&gt;
&lt;a href=&quot;http://joergviola.blogspot.com/2011/07/gwt-mvp-made-simple.html&quot;&gt;http://joergviola.blogspot.com/2011/07/gwt-mvp-made-simple.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;android&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
안드로이드 로그캣 로그를 실시간으로 푸쉬해줌&lt;br /&gt;
&lt;a href=&quot;https://github.com/koush/logpush&quot;&gt;https://github.com/koush/logpush&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Cloud computing&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
bigdata 가이드&lt;br /&gt;
&lt;a href=&quot;https://plus.google.com/114723964985237592593/posts/a1p5LiURPW8&quot;&gt;https://plus.google.com/114723964985237592593/posts/a1p5LiURPW8&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
모바일 클라우드 보안&lt;br /&gt;
&lt;a href=&quot;http://www.ibm.com/developerworks/kr/cloud/library/cl-mobilecloudsecurity/index.html&quot;&gt;http://www.ibm.com/developerworks/kr/cloud/library/cl-mobilecloudsecurity/index.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;dart&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
심플한 게임만들기&lt;br /&gt;
&lt;a href=&quot;http://phylotic.blogspot.com/2012/02/reactive-dart-series-part-3-of-n.html&quot;&gt;http://phylotic.blogspot.com/2012/02/reactive-dart-series-part-3-of-n.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
마술상자 만들기&lt;br /&gt;
&lt;a href=&quot;http://dzenanr.github.com/2012/02/02/from-s02-to-s03.html&quot;&gt;http://dzenanr.github.com/2012/02/02/from-s02-to-s03.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;javascript&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
backbone.js&amp;nbsp;예제&lt;br /&gt;
&lt;a href=&quot;http://www.javageneration.com/?p=839&quot;&gt;http://www.javageneration.com/?p=839&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
예제를 만들어보며 배우는 backbone.js&lt;br /&gt;
&lt;a href=&quot;http://coenraets.org/blog/2012/01/backbone-js-lessons-learned-and-improved-sample-app&quot;&gt;http://coenraets.org/blog/2012/01/backbone-js-lessons-learned-and-improved-sample-app&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
json 소개&lt;br /&gt;
http://www.w3resource.com/JSON/introduction.php&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;jquery&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
jpg디코더 js&lt;br /&gt;
https://github.com/notmasteryet/jpgjs&lt;br /&gt;
&lt;br /&gt;
사진 크기를 늘렸다가 줄엿다가 할수있는 플러그인&lt;br /&gt;
&lt;a href=&quot;http://www.dimin.net/software/panojs/&quot;&gt;http://www.dimin.net/software/panojs/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
방향키로 스크롤링을 하는데 슬라이드 넘기는 거 같음&lt;br /&gt;
&lt;a href=&quot;http://johnpolacek.github.com/scrolldeck.js/&quot;&gt;http://johnpolacek.github.com/scrolldeck.js/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
프롬프트 메뉴를 구현하기 좋음&lt;br /&gt;
&lt;a href=&quot;http://natrixnatrix89.github.com/promptu-menu/&quot;&gt;http://natrixnatrix89.github.com/promptu-menu/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
사이드 패널&lt;br /&gt;
&lt;a href=&quot;http://codebomber.com/jquery/slidepanel/&quot;&gt;http://codebomber.com/jquery/slidepanel/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
홈페이지 전면의 플래쉬급 배너제작가능한 애니메이션 플러그인&lt;br /&gt;
&lt;a href=&quot;http://visitmix.com/labs/glimmer/&quot;&gt;http://visitmix.com/labs/glimmer/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
트위터 위젯&lt;br /&gt;
&lt;a href=&quot;http://tweet.seaofclouds.com/&quot;&gt;http://tweet.seaofclouds.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
페이스북 타임라인 모방하기(좀틀림)&lt;br /&gt;
&lt;a href=&quot;http://demos.9lessons.info/timeline/index.html&quot;&gt;http://demos.9lessons.info/timeline/index.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;linux&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
조냉 많이 쓰는 리눅스 명령어 50개&lt;br /&gt;
&lt;a href=&quot;http://www.thegeekstuff.com/2010/11/50-linux-commands/&quot;&gt;http://www.thegeekstuff.com/2010/11/50-linux-commands/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;etc.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Restful 한 개발이란 무엇인가?&lt;br /&gt;
&lt;a href=&quot;http://stackoverflow.com/questions/671118/what-exactly-is-restful-programming&quot;&gt;http://stackoverflow.com/questions/671118/what-exactly-is-restful-programming&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
이메일 서버 설정 시나리오들&lt;br /&gt;
&lt;a href=&quot;http://cloudtech.biz/email-server-configuration-scenarios/&quot;&gt;http://cloudtech.biz/email-server-configuration-scenarios/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
나만의 로고 만드는법&lt;br /&gt;
&lt;a href=&quot;http://www.netmagazine.com/tutorials/create-custom-lettered-logo-illustrator&quot;&gt;http://www.netmagazine.com/tutorials/create-custom-lettered-logo-illustrator&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://jangnandev.blogspot.com/feeds/2081354640329313386/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://jangnandev.blogspot.com/2012/02/2012-2-3-it.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/2081354640329313386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/2081354640329313386'/><link rel='alternate' type='text/html' href='http://jangnandev.blogspot.com/2012/02/2012-2-3-it.html' title='2012년 2월 3일 it 기술 동향'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07131582180996221331</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3457111550855581420.post-5893533815806414000</id><published>2012-02-01T17:42:00.000-08:00</published><updated>2012-02-01T17:43:31.980-08:00</updated><title type='text'>2012년 2월 2일 it 기술 동향</title><content type='html'>&lt;b&gt;JAVA&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
vaadin과 jsf중에 어느것을 선택해야할까&lt;br /&gt;
&lt;a href=&quot;http://www.hildeberto.com/2012/01/choosing-between-vaadin-and-jsf.html&quot;&gt;http://www.hildeberto.com/2012/01/choosing-between-vaadin-and-jsf.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.softwaretestingmagazine.com/videos/cucumber-with-jvm-improvements/&quot;&gt;http://www.softwaretestingmagazine.com/videos/cucumber-with-jvm-improvements/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
varnish 를 이용한 속도개선&lt;br /&gt;
&lt;a href=&quot;http://blog.mgm-tp.com/2012/01/varnish-web-cache/&quot;&gt;http://blog.mgm-tp.com/2012/01/varnish-web-cache/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
oracle의 java 앞으로 2년간의 로드맵&lt;br /&gt;
&lt;a href=&quot;http://www.infoworld.com/slideshow/28552/java-roadmap-oracles-two-year-plan-185238&quot;&gt;http://www.infoworld.com/slideshow/28552/java-roadmap-oracles-two-year-plan-185238&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
jax-rs를 이용해서 만든 rest api를 이용해 spring android를 이용한 앱만들기&lt;br /&gt;
&lt;a href=&quot;http://www.ibm.com/developerworks/kr/library/x-springandroid/index.html&quot;&gt;http://www.ibm.com/developerworks/kr/library/x-springandroid/index.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
java ee6 의&amp;nbsp;샘플들&amp;nbsp;구성&lt;br /&gt;
&lt;a href=&quot;http://blogs.oracle.com/arungupta/entry/java_ee_6_samples_in&quot;&gt;http://blogs.oracle.com/arungupta/entry/java_ee_6_samples_in&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://blog.eisele.net/2012/01/sneak-peak-at-java-ee-7-multitenant.html&quot;&gt;http://blog.eisele.net/2012/01/sneak-peak-at-java-ee-7-multitenant.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
웹소켓 을 통한 브라우저에게 CDI이벤트 보내기&lt;br /&gt;
&lt;a href=&quot;http://wesleyhales.com/blog/2012/01/20/Sending-CDI-events-to-the-browser-with-websockets/&quot;&gt;http://wesleyhales.com/blog/2012/01/20/Sending-CDI-events-to-the-browser-with-websockets/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
java 7 에서의 파일 복사와 이동&lt;br /&gt;
&lt;a href=&quot;http://codingjunkie.net/java-7-copy-move/&quot;&gt;http://codingjunkie.net/java-7-copy-move/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;python&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
파워풀한 테스트를 위한 mock 오브젝트의 주입&lt;br /&gt;
&lt;a href=&quot;http://blueprintforge.com/blog/2012/01/08/python-injecting-mock-objects-for-powerful-testing/&quot;&gt;http://blueprintforge.com/blog/2012/01/08/python-injecting-mock-objects-for-powerful-testing/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;android&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
rapmobile&lt;br /&gt;
&lt;a href=&quot;http://rapmobile.eclipsesource.com/&quot;&gt;http://rapmobile.eclipsesource.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;html5&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
웹 메시징 소개&lt;br /&gt;
&lt;a href=&quot;http://dev.opera.com/articles/view/window-postmessage-messagechannel/&quot;&gt;http://dev.opera.com/articles/view/window-postmessage-messagechannel/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Javascript&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
이미지를 쉽게 drawing하게 해주는 js&lt;br /&gt;
&lt;a href=&quot;http://thinkpixellab.com/pxloader/#sample1&quot;&gt;http://thinkpixellab.com/pxloader/#sample1&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
jsdev 메뉴얼&lt;br /&gt;
&lt;a href=&quot;https://github.com/markandey/JSDev/wiki/User-Manual&quot;&gt;https://github.com/markandey/JSDev/wiki/User-Manual&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Jquery&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
jquery 30일 완성 이메일로 받는 교육&lt;br /&gt;
&lt;a href=&quot;http://learnjquery.tutsplus.com/&quot;&gt;http://learnjquery.tutsplus.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
마우스 커서를 찍으면 물방울 번짐 이펙트 일어남&lt;br /&gt;
&lt;a href=&quot;http://nejimaki-act.com/lab/pointer/&quot;&gt;http://nejimaki-act.com/lab/pointer/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
글씨가 상하로 페인드인아웃됨&lt;br /&gt;
&lt;a href=&quot;http://medienfreunde.com/lab/innerfade/&quot;&gt;http://medienfreunde.com/lab/innerfade/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Dart&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Nio 라이브러리 추가&lt;br /&gt;
&lt;a href=&quot;http://news.dartlang.org/2012/02/dart-io-libraries-for-files-and-network.html&quot;&gt;http://news.dartlang.org/2012/02/dart-io-libraries-for-files-and-network.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
dart에서 web audio api 활용하기&lt;br /&gt;
&lt;a href=&quot;http://news.dartlang.org/2012/02/web-audio-api-and-dart.html&quot;&gt;http://news.dartlang.org/2012/02/web-audio-api-and-dart.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
json 으로 이름만 넣으면 dom구조로 마크업으로 만들어줌&lt;br /&gt;
&lt;a href=&quot;https://github.com/insin/DOMBuilder&quot;&gt;https://github.com/insin/DOMBuilder&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;Node.js&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://github.com/OptimalBits/navcodec&quot;&gt;https://github.com/OptimalBits/navcodec&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
웹개발에 용의한 심플한 middleware&lt;br /&gt;
&lt;a href=&quot;http://matthewmueller.github.com/thimble/&quot;&gt;http://matthewmueller.github.com/thimble/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
start-stop-daemon&lt;br /&gt;
&lt;a href=&quot;https://github.com/jiem/start-stop-daemon&quot;&gt;https://github.com/jiem/start-stop-daemon&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
단순하게 node.js로 서버 구현하고 클라이언트 만들어서 이벤트 푸시&lt;br /&gt;
&lt;a href=&quot;https://github.com/einaros/sse.js&quot;&gt;https://github.com/einaros/sse.js&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;tools&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
리눅에서 사용가능한 compare synchronize 툴&lt;br /&gt;
&lt;a href=&quot;http://www.webupd8.org/2012/02/compare-and-synchronize-folders-with.html&quot;&gt;http://www.webupd8.org/2012/02/compare-and-synchronize-folders-with.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;etc.&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;Google Maps API plus Fusion Tables&amp;nbsp;&lt;/span&gt;를 이용해서 만든 엘더스크롤 스카이림 지도&lt;br /&gt;
&lt;a href=&quot;http://www.tamrielma.ps/skyrim/&quot;&gt;http://www.tamrielma.ps/skyrim/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
21세기 코드리뷰&lt;br /&gt;
&lt;a href=&quot;http://dublintech.blogspot.com/2012/01/code-reviews-in-21st-century.html&quot;&gt;http://dublintech.blogspot.com/2012/01/code-reviews-in-21st-century.html&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jangnandev.blogspot.com/feeds/5893533815806414000/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://jangnandev.blogspot.com/2012/02/2012-2-2-it.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/5893533815806414000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/5893533815806414000'/><link rel='alternate' type='text/html' href='http://jangnandev.blogspot.com/2012/02/2012-2-2-it.html' title='2012년 2월 2일 it 기술 동향'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07131582180996221331</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3457111550855581420.post-8279198238361841085</id><published>2012-01-31T18:32:00.000-08:00</published><updated>2012-01-31T22:07:17.144-08:00</updated><title type='text'>2012년 2월 1일 it 기술 동향</title><content type='html'>&lt;b&gt;java&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
spring 3,3.1에서의 비지니스 컴포넌트 아키텍쳐&lt;br /&gt;
&lt;a href=&quot;http://blog.codecentric.de/en/2012/01/a-business-component-architecture-with-spring-3-03-1-part-1-structure/&quot;&gt;http://blog.codecentric.de/en/2012/01/a-business-component-architecture-with-spring-3-03-1-part-1-structure/&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
java8 부터 unsinged integer 지원&lt;br /&gt;
&lt;a href=&quot;http://lukaseder.wordpress.com/2012/01/21/java-8-will-have-some-support-for-unsigned-integers/&quot;&gt;http://lukaseder.wordpress.com/2012/01/21/java-8-will-have-some-support-for-unsigned-integers/&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
spring 에서 junit을 이용한 scope bean테스트하는거랑 jee bean에 aquillan이용해서 테스트&lt;br /&gt;
&lt;a href=&quot;http://niklasschlimm.blogspot.com/2011/07/integration-testing-scoped-beans-in-cdi.html&quot;&gt;http://niklasschlimm.blogspot.com/2011/07/integration-testing-scoped-beans-in-cdi.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
jboss의 html5에 대한 전략&lt;br /&gt;
&lt;a href=&quot;https://community.jboss.org/wiki/AeroGearServerSideResources&quot;&gt;https://community.jboss.org/wiki/AeroGearServerSideResources&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://planet.jboss.org/post/the_aerogear_mobile_html5_project_is_alive&quot;&gt;http://planet.jboss.org/post/the_aerogear_mobile_html5_project_is_alive&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;python&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
심플한 소켓 클라이언트 쓰레드 코드&lt;br /&gt;
&lt;a href=&quot;http://eli.thegreenplace.net/2011/05/18/code-sample-socket-client-thread-in-python/&quot;&gt;http://eli.thegreenplace.net/2011/05/18/code-sample-socket-client-thread-in-python/&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;html5&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
web storage동영상&lt;br /&gt;
http://debugmode.net/2012/01/28/video-on-web-storage-in-html5/&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;javascript&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
stellar.js&lt;br /&gt;
&lt;a href=&quot;http://markdalgleish.com/projects/stellar.js/&quot;&gt;http://markdalgleish.com/projects/stellar.js/&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
canvas를 쉽게 쓸수있게 해주는 EaselJS&lt;br /&gt;
&lt;a href=&quot;https://github.com/gskinner/EaselJS&quot;&gt;https://github.com/gskinner/EaselJS&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
psd파일을 파싱해주는 psd.js&lt;br /&gt;
&lt;a href=&quot;http://meltingice.github.com/psd.js/&quot;&gt;http://meltingice.github.com/psd.js/&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
dart 나선 꼬기&lt;br /&gt;
&lt;a href=&quot;http://dzenanr.github.com/&quot;&gt;http://dzenanr.github.com/&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://blog.involver.com/2012/01/26/testing-backbone-js-best-practices-2/&quot;&gt;http://blog.involver.com/2012/01/26/testing-backbone-js-best-practices-2/&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;jquery&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
흥미로운 플러그인 40개&lt;br /&gt;
&lt;a href=&quot;http://www.admixweb.com/2012/01/30/40-handy-jquery-plugins-for-serious-web-developers/&quot;&gt;http://www.admixweb.com/2012/01/30/40-handy-jquery-plugins-for-serious-web-developers/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
비디오 플레이어 플러그인&lt;br /&gt;
&lt;a href=&quot;http://www.jqueryrain.com/2012/01/40-best-jquery-players-tutorials-both-audio-player-and-video-player/&quot;&gt;http://www.jqueryrain.com/2012/01/40-best-jquery-players-tutorials-both-audio-player-and-video-player/&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
쓸만한 플러그인 3종세트&lt;br /&gt;
&lt;a href=&quot;http://dailyjs.com/2012/01/31/jquery-roundup/&quot;&gt;http://dailyjs.com/2012/01/31/jquery-roundup/&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
jquery 보일러플레이트&lt;br /&gt;
&lt;a href=&quot;http://jqueryboilerplate.com/&quot;&gt;http://jqueryboilerplate.com/&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;cloud&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
구글앱엔진 1.6.2 업데이트&lt;br /&gt;
&lt;a href=&quot;http://googleappengine.blogspot.com/2012/01/app-engine-162-released.html&quot;&gt;http://googleappengine.blogspot.com/2012/01/app-engine-162-released.html&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
map reduce&lt;/div&gt;
&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/intl/ko-KR/appengine/docs/python/dataprocessing/overview.html&quot;&gt;http://code.google.com/intl/ko-KR/appengine/docs/python/dataprocessing/overview.html&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
Prospective Search&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/appengine/docs/python/prospectivesearch/overview.html&quot;&gt;http://code.google.com/appengine/docs/python/prospectivesearch/overview.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
big query&lt;br /&gt;
&lt;a href=&quot;https://developers.google.com/bigquery/&quot;&gt;https://developers.google.com/bigquery/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;etc.&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
웹브라우저 얼랭 콘솔 에뮬레이터&lt;br /&gt;
&lt;a href=&quot;http://svahne.github.com/browserl/&quot;&gt;http://svahne.github.com/browserl/&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://jangnandev.blogspot.com/feeds/8279198238361841085/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://jangnandev.blogspot.com/2012/01/2012-2-1-it.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/8279198238361841085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/8279198238361841085'/><link rel='alternate' type='text/html' href='http://jangnandev.blogspot.com/2012/01/2012-2-1-it.html' title='2012년 2월 1일 it 기술 동향'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07131582180996221331</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3457111550855581420.post-7986018988639303939</id><published>2012-01-30T17:15:00.000-08:00</published><updated>2012-01-30T17:15:48.639-08:00</updated><title type='text'>2012년 1월 31일 it 기술 동향</title><content type='html'>&lt;b&gt;Java&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
java에서의 foreach 루프의 이해&lt;br /&gt;
&lt;a href=&quot;http://javabynataraj.blogspot.com/2012/01/understanding-foreach-loop-in-java.html&quot;&gt;http://javabynataraj.blogspot.com/2012/01/understanding-foreach-loop-in-java.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
DI는 왜 써야되는가?&lt;br /&gt;
&lt;a href=&quot;http://cspray.github.com/2012/01/24/why-you-should-use-DI.html&quot;&gt;http://cspray.github.com/2012/01/24/why-you-should-use-DI.html&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://googledata.org/google-testing/clean-code-talks-dependency-injection/&quot;&gt;http://googledata.org/google-testing/clean-code-talks-dependency-injection/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
클라우드 환경 속에서의 자바 어플리케이션의 보안&lt;br /&gt;
&lt;a href=&quot;http://www.ibm.com/developerworks/java/library/j-javadev2-23/index.html?ca=drs-&quot;&gt;http://www.ibm.com/developerworks/java/library/j-javadev2-23/index.html?ca=drs-&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
osgi 모듈 소개&lt;br /&gt;
&lt;a href=&quot;http://www.javacodegeeks.com/2012/01/introduction-to-osgi-modular-java.html&quot;&gt;http://www.javacodegeeks.com/2012/01/introduction-to-osgi-modular-java.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
자바 웹호스팅에 선택에 따른 플로우 차트&lt;br /&gt;
&lt;a href=&quot;http://www.streamhead.com/java-web-hosting-options-flowchart/&quot;&gt;http://www.streamhead.com/java-web-hosting-options-flowchart/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Python&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
csv모듈&lt;br /&gt;
&lt;a href=&quot;http://slott-softwarearchitect.blogspot.com/2012/01/python-32-csv-module-very-very-nice.html&quot;&gt;http://slott-softwarearchitect.blogspot.com/2012/01/python-32-csv-module-very-very-nice.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Javascript&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
dart와 기존과의 비교로 배워보는 문법&lt;br /&gt;
&lt;a href=&quot;http://synonym.dartlang.org/&quot;&gt;http://synonym.dartlang.org/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Jquery&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
횡스크롤 배너&lt;br /&gt;
&lt;a href=&quot;http://www.gcmingati.net/wordpress/wp-content/lab/jquery/newsticker/jq-liscroll/scrollanimate.html&quot;&gt;http://www.gcmingati.net/wordpress/wp-content/lab/jquery/newsticker/jq-liscroll/scrollanimate.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
이미지를 잘라주는 js 블로그의 댓글 다는 것 방식도 재밌다.&lt;br /&gt;
&lt;a href=&quot;http://www.useragentman.com/blog/2011/10/29/clipping-jpeg-images-into-non-rectangular-polygons-using-polyclip-js/&quot;&gt;http://www.useragentman.com/blog/2011/10/29/clipping-jpeg-images-into-non-rectangular-polygons-using-polyclip-js/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;CSS3&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
네비게이터를 클릭하면 별도의 창같이 화면이 내려온다.&lt;br /&gt;
&lt;a href=&quot;http://tympanus.net/codrops/2012/01/30/page-transitions-with-css3/&quot;&gt;http://tympanus.net/codrops/2012/01/30/page-transitions-with-css3/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
뷸렛 드롭다운 네비게이터 메뉴&lt;br /&gt;
&lt;a href=&quot;http://azadcreative.com/2012/01/bulletproof-css3-dropdown-navigation-menu/&quot;&gt;http://azadcreative.com/2012/01/bulletproof-css3-dropdown-navigation-menu/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Node.js&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
node.js redis를 이용한 트위터 앱 만들기&lt;br /&gt;
&lt;a href=&quot;https://github.com/mashery/iodocs&quot;&gt;https://github.com/mashery/iodocs&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
분산 처리 기반의 로드 밸런서&lt;br /&gt;
&lt;a href=&quot;https://github.com/LearnBoost/up&quot;&gt;https://github.com/LearnBoost/up&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;tools.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
클라우드 베이스 테스팅 툴들&lt;br /&gt;
&lt;a href=&quot;http://www.toolsjournal.com/testing-lists/item/404-10-cloud-based-testing-tools&quot;&gt;http://www.toolsjournal.com/testing-lists/item/404-10-cloud-based-testing-tools&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
파폭 10,11 개발자 툴들&lt;br /&gt;
&lt;a href=&quot;http://www.webdesignerdepot.com/2012/01/new-developer-tools-in-firefox-10-and-11/&quot;&gt;http://www.webdesignerdepot.com/2012/01/new-developer-tools-in-firefox-10-and-11/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
chromium&amp;nbsp;코맨드 라인 명령어&lt;br /&gt;
&lt;a href=&quot;http://peter.sh/experiments/chromium-command-line-switches/&quot;&gt;http://peter.sh/experiments/chromium-command-line-switches/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;etc.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
jboss as에서 html5 개발하기&lt;br /&gt;
&lt;a href=&quot;http://vimeo.com/33538130&quot;&gt;http://vimeo.com/33538130&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
foundry의 멀티 다 언어 멀티 프레임워크 지원&lt;br /&gt;
&lt;a href=&quot;http://blog.cloudfoundry.com/post/13481010615/multi-language-multi-framework-what-about-multi-cloud&quot;&gt;http://blog.cloudfoundry.com/post/13481010615/multi-language-multi-framework-what-about-multi-cloud&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
ssd에 db를 사용하면 빠를까?&lt;br /&gt;
&lt;a href=&quot;http://www.cubrid.org/blog/dev-platform/will-the-use-of-ssd-increase-the-speed-of-dbms/&quot;&gt;http://www.cubrid.org/blog/dev-platform/will-the-use-of-ssd-increase-the-speed-of-dbms/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
모질라 그룹의 새로운 프로젝트 팬케이크&lt;br /&gt;
&lt;a href=&quot;http://mozillalabs.com/blog/2012/01/pancake-a-new-project-from-mozilla-labs/&quot;&gt;http://mozillalabs.com/blog/2012/01/pancake-a-new-project-from-mozilla-labs/&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://jangnandev.blogspot.com/feeds/7986018988639303939/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://jangnandev.blogspot.com/2012/01/2012-1-31-it.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/7986018988639303939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/7986018988639303939'/><link rel='alternate' type='text/html' href='http://jangnandev.blogspot.com/2012/01/2012-1-31-it.html' title='2012년 1월 31일 it 기술 동향'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07131582180996221331</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3457111550855581420.post-6577598510621410866</id><published>2012-01-30T07:57:00.000-08:00</published><updated>2012-01-30T07:57:25.785-08:00</updated><title type='text'>제 12회 한국자바개발자 컨퍼런스</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCpGLdarF89qmjt8IXUEDa3z4V5g33DZMjYMHfowkUorZmmteJPDBHO3HEVCVOfHMFYZPPirfCesMCJiv2IB3QetvOv3XWy9WTn24pv1Ht5JV-4VDHz3EdArFyNHIJ9h49oc5YTbiV4ohF/s1600/mail_top.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCpGLdarF89qmjt8IXUEDa3z4V5g33DZMjYMHfowkUorZmmteJPDBHO3HEVCVOfHMFYZPPirfCesMCJiv2IB3QetvOv3XWy9WTn24pv1Ht5JV-4VDHz3EdArFyNHIJ9h49oc5YTbiV4ohF/s1600/mail_top.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4qrJG6r7INKGNrySJcryfxtT4SJq9XQFR98ZyBHJGH_z5-UPxwppZwLu589m7QkGeER6XiH3hcm9qYaV8zwX-Cdc2FMbpWLNyIW-zhwDZUedFTaoNHhUA5OWqQIFXbXJIqQXkvAT3_ss8/s1600/edm_02.gif&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4qrJG6r7INKGNrySJcryfxtT4SJq9XQFR98ZyBHJGH_z5-UPxwppZwLu589m7QkGeER6XiH3hcm9qYaV8zwX-Cdc2FMbpWLNyIW-zhwDZUedFTaoNHhUA5OWqQIFXbXJIqQXkvAT3_ss8/s1600/edm_02.gif&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMrq_4oMgzc4GLyUzO-_pPORmhkmfsA_lSd4XukUkiQfYUE_TkwMafwhcC4IWle0onX4w9B2kZ7NfePjJ2kYxoeYc6EP09OIfB-ZxmFc5mGJELbGBPYWqOF-D0CMlSiJ-4Gno356VhYZXl/s1600/edm_event.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMrq_4oMgzc4GLyUzO-_pPORmhkmfsA_lSd4XukUkiQfYUE_TkwMafwhcC4IWle0onX4w9B2kZ7NfePjJ2kYxoeYc6EP09OIfB-ZxmFc5mGJELbGBPYWqOF-D0CMlSiJ-4Gno356VhYZXl/s1600/edm_event.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiH7Ewgc0xb2bhrN1xqOhQms-4jxsP5Pld1jCd5ktXApKa8KWqfyloezRhyvAM0ceZOjDL3pis14hfrT9OTIoakcVq2oEUghiP3625vJG-v0gC-q4qfvQz4DLGslC7gzCnrePBK58QRn8QU/s1600/edm_03.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiH7Ewgc0xb2bhrN1xqOhQms-4jxsP5Pld1jCd5ktXApKa8KWqfyloezRhyvAM0ceZOjDL3pis14hfrT9OTIoakcVq2oEUghiP3625vJG-v0gC-q4qfvQz4DLGslC7gzCnrePBK58QRn8QU/s1600/edm_03.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDMrExxt48o4QDHTYSltM0scGiYXmu4nAPwU61AH_5cZXCW8hq5TlUT8BjVvK5F0ujO_-ickGs0RBSuCY9ohq9Yfq5X8JWTTpHDlNfgDDGNDVGQKqIbHXC2reFQ1_97_S6C6MouT9NCy7Z/s1600/edm_05.gif&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDMrExxt48o4QDHTYSltM0scGiYXmu4nAPwU61AH_5cZXCW8hq5TlUT8BjVvK5F0ujO_-ickGs0RBSuCY9ohq9Yfq5X8JWTTpHDlNfgDDGNDVGQKqIbHXC2reFQ1_97_S6C6MouT9NCy7Z/s1600/edm_05.gif&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://jangnandev.blogspot.com/feeds/6577598510621410866/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://jangnandev.blogspot.com/2012/01/12.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/6577598510621410866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/6577598510621410866'/><link rel='alternate' type='text/html' href='http://jangnandev.blogspot.com/2012/01/12.html' title='제 12회 한국자바개발자 컨퍼런스'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07131582180996221331</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCpGLdarF89qmjt8IXUEDa3z4V5g33DZMjYMHfowkUorZmmteJPDBHO3HEVCVOfHMFYZPPirfCesMCJiv2IB3QetvOv3XWy9WTn24pv1Ht5JV-4VDHz3EdArFyNHIJ9h49oc5YTbiV4ohF/s72-c/mail_top.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3457111550855581420.post-5048859123993625648</id><published>2012-01-29T23:50:00.000-08:00</published><updated>2012-01-30T00:13:38.371-08:00</updated><title type='text'>Apache 와 Tomcat Load Balancing</title><content type='html'>&lt;br /&gt;
&lt;div class=&quot;p1&quot;&gt;
mod_jk tomcat Connector :&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
mod_jk는 tomcat servlet container와 Apache같은 AJP프로토콜을 사용하는 웹서버를 연결해주는 connector 입니다.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
웹서버는 client의 request로부터의 response를 관리합니다.&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
request 가 올때 웹서버는 다음과 같은 행동을 하게합니다.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
- sevlet containner connector library를 로드하고 초기화합니다.&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
- connector에서 인증된 url 포함한 어떤 request를&amp;nbsp;sevlet에게 주게됩니다.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
이렇게 Connector는 웹서버와&amp;nbsp;container의 중간 매개체 역활을 합니다.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
아래의 준비물을 다운받습니다.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;1. apache web server 2.2.21(&lt;a href=&quot;http://httpd.apache.org/download.cgi&quot;&gt;&lt;span class=&quot;s2&quot;&gt;http://httpd.apache.org/download.cgi&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;.)&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;2. tomcat 6.0.20(&lt;a href=&quot;http://tomcat.apache.org/download-60.cgi&quot;&gt;&lt;span class=&quot;s2&quot;&gt;http://tomcat.apache.org/download-60.cgi&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;.)&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;span class=&quot;s3&quot;&gt;3. mod_jk(&lt;a href=&quot;http://tomcat.apache.org/download-connectors.cgi&quot;&gt;&lt;span class=&quot;s4&quot;&gt;http://tomcat.apache.org/download-connectors.cgi&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s5&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p6&quot;&gt;
일단 톰캣을 인스톨합니다.&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p6&quot;&gt;
1. 압축을 풀고 임의의 위치(디렉토리)에 위치시키도록 합니다.&lt;/div&gt;
&lt;div class=&quot;p6&quot;&gt;
2. 일단 설치후 {tomcat_root}/bin 에서 &amp;nbsp;./startup.sh를 실행시켜서 tomcat을 구동시킵니다.&lt;/div&gt;
&lt;div class=&quot;p6&quot;&gt;
3. 웹브라우저를 열어서 http:localhost:8080 에 접속합니다.&lt;/div&gt;
&lt;div class=&quot;p6&quot;&gt;
4. 3번 bin으로 돌아가서 ./shutdown.sh로 &amp;nbsp;tomcat을 끕니다.&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p6&quot;&gt;
로드 밸런싱을 할 예정이므로 두개의 서버를 띄워야합니다.&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p6&quot;&gt;
1. 첫번째 받은 tomcat을 디렉토리이름만 다르게 압축을 풉니다.&lt;/div&gt;
&lt;div class=&quot;p6&quot;&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;여기서는 처음 녀석은 tomcat1, 두번째 녀석은 tomcat2라고 합니다.&lt;/div&gt;
&lt;div class=&quot;p6&quot;&gt;
2. tomcat2의 하위 디렉토리에 conf폴더로 접근해서 server.xml 을 열어 보도록합니다.&lt;/div&gt;
&lt;div class=&quot;p7&quot;&gt;
&lt;span class=&quot;s6&quot;&gt;3.&amp;nbsp;&lt;/span&gt;&amp;lt;Server port=”8005″ shutdown=”SHUTDOWN”&amp;gt;&amp;nbsp;&amp;nbsp;를&amp;nbsp;&amp;lt;Server port=”7005″ shutdown=”SHUTDOWN”&amp;gt;로 변경합니다.&lt;/div&gt;
&lt;div class=&quot;p7&quot;&gt;
(앞서 포트는 tomcat1이 사용중이니)&lt;/div&gt;
&lt;div class=&quot;p6&quot;&gt;
&lt;span class=&quot;s7&quot;&gt;4.&amp;nbsp;&lt;/span&gt;Change&amp;nbsp;&amp;lt;Connector port=”8080″ maxHttpHeaderSize=”8192″…&amp;nbsp;를&amp;nbsp;&amp;lt;Connector port=”7070″&amp;nbsp;maxHttpHeaderSize=”8192&quot; 변경한다.(위와 같은이유)&lt;/div&gt;
&lt;div class=&quot;p7&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;5. &amp;nbsp;&lt;/span&gt;&amp;lt;Connector port=”8009″ enableLookups=”false” redirectPort=”8443″ protocol=”AJP/1.3″ /&amp;gt;&amp;nbsp;를&amp;nbsp;&amp;nbsp;&amp;lt;Connector port=”7009″ enableLookups=”false” redirectPort=”8443″ protocol=”AJP/1.3″ /&amp;gt;로 변경합니다.&lt;/div&gt;
&lt;div class=&quot;p7&quot;&gt;
6. tomcat2/bin으로 가서 ./statup.sh를 실행합니다.&lt;/div&gt;
&lt;div class=&quot;p7&quot;&gt;
7. http://localhost:7070/을 확인합니다.&lt;/div&gt;
&lt;div class=&quot;p7&quot;&gt;
8. bin으로 가서 ./shutdown.sh를 해서 끕니다.&lt;/div&gt;
&lt;div class=&quot;p8&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p7&quot;&gt;
다음은 apache서버를 세팅합니다.&lt;br /&gt;
(mac은 기본적으로 깔려있죠. 경로 : /usr/libexec/apache2)&lt;/div&gt;
&lt;div class=&quot;p7&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p6&quot;&gt;
1. 압축을 풀고&amp;nbsp;&lt;span style=&quot;background-color: white;&quot;&gt;./configure을 합니다.&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p6&quot;&gt;
2.&amp;nbsp;&lt;span style=&quot;background-color: white;&quot;&gt;make를 입력하여 설치를 진행합니다.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p6&quot;&gt;
3. 웹브라우저를 열고 &amp;nbsp;http://localhost/로 가서 80포트로 잘작동하는지 확인합니다.&lt;/div&gt;
&lt;div class=&quot;p6&quot;&gt;
4. stop 합니다.&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p6&quot;&gt;
이제 mod_jk 차례입니다.&lt;/div&gt;
&lt;div class=&quot;p6&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p6&quot;&gt;
1. 압축을 풀고 {apache_directory}/module에 mod_jk.so 파일을 copy &amp;amp; paste합니다.&lt;/div&gt;
&lt;div class=&quot;p6&quot;&gt;
2.&amp;nbsp;{apache_directory}/conf 안에서 httpd.conf 파일을 수정할수 있게 열고 끝에 아래 문장을 추가합니다.&lt;/div&gt;
&lt;div class=&quot;p9&quot;&gt;
&lt;b&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p10&quot;&gt;
&lt;b&gt;LoadModule jk_module modules/mod_jk.so&amp;nbsp;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p9&quot;&gt;
&lt;b&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p6&quot;&gt;
3.{apache_directory}/conf&amp;nbsp;에 workers.properties라는 파일을 만든고 아래의 문장을 넣고 저장합니다.&lt;/div&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot; style=&quot;width: 767px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;p11&quot;&gt;
&amp;nbsp;&amp;nbsp;worker.list=worker1,worker2&lt;/div&gt;
&lt;div class=&quot;p11&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; worker.worker1.port=8009&lt;/div&gt;
&lt;div class=&quot;p11&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; worker.worker1.host=localhost&lt;/div&gt;
&lt;div class=&quot;p11&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; worker.worker1.type=ajp13&lt;/div&gt;
&lt;div class=&quot;p11&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; worker.worker2.port=7009&lt;/div&gt;
&lt;div class=&quot;p11&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; worker.worker2.host=localhost #you can also specify other machine address or name&lt;/div&gt;
&lt;div class=&quot;p12&quot;&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;worker.worker2.type=ajp13&lt;/div&gt;
&lt;div class=&quot;p12&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;p6&quot;&gt;
- &amp;nbsp;wokrer1이 tomcat1, worker2가 tomcat2이다.&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p7&quot;&gt;
&lt;span class=&quot;s6&quot;&gt;4.&amp;nbsp;&lt;/span&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;httpd.conf 에 &amp;nbsp;workers.properties를 정의해줘야한다.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p10&quot;&gt;
아래 내용을 넣어준다.&lt;/div&gt;
&lt;div class=&quot;p10&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot; style=&quot;width: 767px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;p11&quot;&gt;
# Path to workers.properties&lt;/div&gt;
&lt;div class=&quot;p11&quot;&gt;
JkWorkersFile c:/apache2.2/conf/workers.properties&lt;/div&gt;
&lt;div class=&quot;p11&quot;&gt;
# Path to jk logs&lt;/div&gt;
&lt;div class=&quot;p11&quot;&gt;
JkLogFile c:/apache2.2/mod_jk.log&lt;/div&gt;
&lt;div class=&quot;p11&quot;&gt;
# Jk log level [debug/error/info] JkLogLevel info&lt;/div&gt;
&lt;div class=&quot;p11&quot;&gt;
# Jk log format&lt;/div&gt;
&lt;div class=&quot;p11&quot;&gt;
JkLogStampFormat “[%a %b %d %H:%M:%S %Y] “&lt;/div&gt;
&lt;div class=&quot;p11&quot;&gt;
# JkOptions for forwarding&lt;/div&gt;
&lt;div class=&quot;p11&quot;&gt;
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories&lt;/div&gt;
&lt;div class=&quot;p11&quot;&gt;
# JkRequestLogFormat set the request format&lt;/div&gt;
&lt;div class=&quot;p11&quot;&gt;
JkRequestLogFormat “%w %V %T”&lt;/div&gt;
&lt;div class=&quot;p11&quot;&gt;
JkMount /jsp-examples/* worker1&lt;/div&gt;
&lt;div class=&quot;p12&quot;&gt;
JkMount /tomcat-docs/* worker2&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
5. jsp-examples로 &amp;nbsp;tomcat1이 worker1로 tomcat-docs에는 tomcat2가 worker2로 되어 있다.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
6. tomcat 1,2의 &lt;b&gt;server.xml&lt;/b&gt; 을 수정합니다.&lt;/div&gt;
&lt;div class=&quot;p13&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;tomcat1에는&amp;nbsp;&lt;/span&gt;&lt;b&gt;&amp;lt;Engine name=”Catalina” defaultHost=”localhost” jvmRoute=”worker1″&amp;gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p10&quot;&gt;
&lt;b&gt;tomcat 2에는&amp;nbsp;&amp;lt;Engine name=”Catalina” defaultHost=”localhost” jvmRoute=”worker2″&amp;gt;&lt;/b&gt;&lt;span class=&quot;s6&quot;&gt;를 추가합니다.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p14&quot;&gt;
&lt;b&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p12&quot;&gt;
7. tomcat1,2를 statup하고 apache webserver도 start합니다.&lt;/div&gt;
&lt;div class=&quot;p15&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p16&quot;&gt;
&lt;span class=&quot;s3&quot;&gt;여기서 브라우저는&amp;nbsp;&lt;a href=&quot;http://localhost/jsp-examples/&quot;&gt;&lt;span class=&quot;s8&quot;&gt;http://localhost/jsp-examples/&lt;/span&gt;&lt;/a&gt;&amp;nbsp;와&amp;nbsp;&lt;a href=&quot;http://localhost/tomcat-docs&quot;&gt;&lt;span class=&quot;s8&quot;&gt;http://localhost/tomcat-docs&lt;/span&gt;&lt;/a&gt;.를 둘다 가리킵니다.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p12&quot;&gt;
여기서 이것을 구분하기 쉬운방법은 두 톰캣의 index.jsp의 제목을 변경해서 확인하는것입니다.&lt;/div&gt;
&lt;div class=&quot;p12&quot;&gt;
결국 둘은 따로 각각 경로를 가리키고 있는것을 확인할수가 있습니다.&lt;/div&gt;
&lt;div class=&quot;p12&quot;&gt;
이 시점에서 아파치 의 서브로 톰캣 인스턴스의 경로에 요청을 넘길 준비가 된것입니다.&lt;/div&gt;
&lt;div class=&quot;p12&quot;&gt;
하지만 여기서 톰캣에 대한 로드밸런싱에 관한 설정을 &amp;nbsp;해줘야합니다. 만약 톰캣 1이 크래싱이 발생시 아파치는 자동으로 tomcat2에 어플리케이션에 대한 접근을 넘겨야합니다.&lt;/div&gt;
&lt;div class=&quot;p12&quot;&gt;
로드밸런싱 설정은 단순합니다.&lt;/div&gt;
&lt;div class=&quot;p12&quot;&gt;
우선&lt;/div&gt;
&lt;div class=&quot;p12&quot;&gt;
workers.properties를 열어줍니다.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p12&quot;&gt;
아래의 굵은글씨를 수정,추가합니다.&lt;/div&gt;
&lt;div class=&quot;p12&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot; style=&quot;width: 767px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;p11&quot;&gt;
#worker.list=worker1,worker2&lt;/div&gt;
&lt;div class=&quot;p11&quot;&gt;
&lt;b&gt;&amp;nbsp;worker.list=balancer&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p11&quot;&gt;
worker.worker1.port=8009&lt;/div&gt;
&lt;div class=&quot;p11&quot;&gt;
worker.worker1.host=localhost&lt;/div&gt;
&lt;div class=&quot;p11&quot;&gt;
worker.worker1.type=ajp13&lt;/div&gt;
&lt;div class=&quot;p11&quot;&gt;
&lt;b&gt;worker.worker1.lbfactor=1&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p11&quot;&gt;
worker.worker2.port=7009&lt;/div&gt;
&lt;div class=&quot;p11&quot;&gt;
worker.worker2.host=localhost&lt;/div&gt;
&lt;div class=&quot;p11&quot;&gt;
worker.worker2.type=ajp13&lt;/div&gt;
&lt;div class=&quot;p11&quot;&gt;
&lt;b&gt;worker.worker2.lbfactor=1&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p11&quot;&gt;
&lt;b&gt;worker.balancer.type=lb&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p11&quot;&gt;
&lt;b&gt;worker.balancer.balance_workers=worker1,worker2&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p11&quot;&gt;
&lt;b&gt;worker.balancer.method=B&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p11&quot;&gt;
# specifies whether requests with SESSION ID’s should be routed back to the same #Tomcat worker.&lt;/div&gt;
&lt;div class=&quot;p12&quot;&gt;
&lt;b&gt;worker.balancer. sticky_session =True&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;p12&quot;&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p12&quot;&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p12&quot;&gt;
싱글 워커에 &amp;nbsp;balance 를 call하고 worker type에 lb(load balance)를 정의했습니다.&lt;/div&gt;
&lt;div class=&quot;p12&quot;&gt;
이 워커(worker.balancer.balance_workers)들은 worker1과 worker2를 관리합니다.&lt;/div&gt;
&lt;div class=&quot;p12&quot;&gt;
그리고 method에 &#39;B&#39;를 정의했습니다.&lt;/div&gt;
&lt;div class=&quot;p12&quot;&gt;
마지막&amp;nbsp;sticky_session는 true로 해줘야합니다.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p12&quot;&gt;
Session ID를 기반으로 라우팅을 지원할지에 대한 설정입니다..&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p12&quot;&gt;
마지막으로 httpd.conf를 열고 &amp;nbsp;&lt;span class=&quot;s7&quot;&gt;JkMount 맨앞부분에&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p14&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p17&quot;&gt;
JkMount /tomcat-docs/* balancer&lt;/div&gt;
&lt;div class=&quot;p12&quot;&gt;
JkMount /jsp-examples/* balancer&lt;/div&gt;
&lt;div class=&quot;p12&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p12&quot;&gt;
이 부분을 추가합니다.&lt;/div&gt;
&lt;div class=&quot;p14&quot;&gt;
&lt;b&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p12&quot;&gt;
이제 확인작업으로 tomcats와 apache를 구동하고&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;a href=&quot;http://localhost/jsp-examples&quot;&gt;&lt;span class=&quot;s9&quot;&gt;http://localhost/jsp-examples&lt;/span&gt;&lt;/a&gt;에 접속합니다. tomcat1or tomcat2에 접속하게 될것입니다. &amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p12&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p12&quot;&gt;
tomcat1,2에 둘다 접속된다는것을 확인하기 위해&amp;nbsp;앞서 해당 index.jsp를 교체하였던걸 생각하고&amp;nbsp;새로고침을 하여 첫페이지의 제목이 바뀌는것을 확인합니다.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jangnandev.blogspot.com/feeds/5048859123993625648/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://jangnandev.blogspot.com/2012/01/apache-tomcat-load-balancing.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/5048859123993625648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/5048859123993625648'/><link rel='alternate' type='text/html' href='http://jangnandev.blogspot.com/2012/01/apache-tomcat-load-balancing.html' title='Apache 와 Tomcat Load Balancing'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07131582180996221331</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3457111550855581420.post-1703312203949283185</id><published>2012-01-29T22:16:00.000-08:00</published><updated>2012-01-30T07:05:00.927-08:00</updated><title type='text'>Java Garbage Collection에 대해서</title><content type='html'>&lt;br /&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;1. GC란?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;b&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
GC는 JVM에서 쓰지 않는 메모리를 자동으로 회수하는 녀석을 말한다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;2. GC의 동작 방법&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;b&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;JVM 메모리 영역 3가지&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
YOUNG/OLD/PERM&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
Perm은 Method Area라고도 한다. 객체나 억류된 문자열 정보를 저장하는 곳이다.&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
여기서 GC가 발생해도 Major GC 횟수에 포함된다.&lt;br /&gt;
Perm에서의 GC (http://tuning-java.com/455) String intern한 정보에 대해서 FullGC가 발생한다.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;GC 알고리즘&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;(1) Minor GC&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
Young은 Eden/Survior로 나뉘게 된다. 그런데 Survivor구역이 두개다 그래서 총 3개의 영역을 Young의 영역으로 보개된다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
YOUNG - EDEN&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- &amp;nbsp;SURVIVE1,2&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
OLD&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
EDEN : 처음 객체가 생성될시에 상주한다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
Minor Gc가 발생시 아래와 같이 위치를 이동한다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
&lt;b&gt;[MINOR GC 1차 발생시]&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
EDEN에서 ALIVE하면 SURVIVE1으로 이동한다.&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
EDEN CLEAR&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
&lt;b&gt;[MINOR GC 2차 발생시]&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
EDEN에서 [alive] - &amp;gt;&amp;nbsp;Survivor&amp;nbsp;2&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
Survivor &amp;nbsp;1 &amp;nbsp;[alive] - &amp;gt;&amp;nbsp;Survivor&amp;nbsp;2&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
Eden &amp;nbsp; &amp;nbsp;Clear&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
Survivor&amp;nbsp;2 Clear&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
&lt;b&gt;[MINOR GC 3차 발생시]&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
객체 생성시간이 오래지나면 Eden과 survivor영역에 있는 오래된 객체들을 Old 영역으로 이동&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
이런방식의 GC알고리즘을 Copy &amp;amp; Scavenge라고 한다. 이방법은 속도가 빠르며 작은 크기의 메모를 Collection하는데 매우 효과적이다. Minor Gc는 자주 일어나기 때문에 GC에 소요되는 시간이 짧은 알고리즘에 적합.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;(2) Full GC(Major GC)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;b&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
Old영역에서의 GC를 Full GC라고 부르며, Full Gc에 사용되는 알고리즘은 Mark &amp;amp; Compact라는 알고리즘을 사용한다.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
Mark는 전체 객체들의 레퍼런스를 쭉 따라가면서 레퍼런스가 연결되지 않은 객체들을 Mark한다. 이 작업이 끝나면 사용되지 않은 객체들이 Mark되고 Mark된 객체를 삭제한다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
Compact는 mark된 객체로 생기는 부분을 unmark된 사용하는 객체로 매꾸어 버리는 방법이다. 덮어쓰기?!&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
Full Gc는 속도가 매우 느리다. Full GC가 일어나면 순간적으로 Java app이 STW하기 때문에 FullGc가 일어나는 정도와 Full GC에 소요되는 시간은 App의 성능과 안정성에 큰영향을 준다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;3. GC가 중요한 이유&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;b&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
Minor Gc는 보통 0.5초로 빠르지만 Full GC의 경우 느리다. 5~10초 GC로 인해서 만약 app이 멈췄다가 풀리면 WAS의 경우 요청이 큐에 저장됬다가 한번에 엄청나게 봇물 터지듯이 받게 된다면 DDOS공격같은 효과로 부하가 발생해서 뻗어 버릴수가 있다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;4. 다양한 Old영역에 대한 GC 알고리즘&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;b&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
JDK7기준으로 5가지의 GC방식이 있다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
- Serial GC (&lt;b&gt;쓰지 말자 싱글쓰레드 방식의 GC&lt;/b&gt;)&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
- Parallel GC&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
- Parallel Old GC(Parallel Compaction GC)&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
- Concurrent Mark &amp;amp; Sweep GC (이하 CMS)&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
- G1(Gargage First) GC (&lt;b&gt;아직 시기상조 JDK7이라서 불안&lt;/b&gt;)&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;(1) Serial GC ( -XX:+UseSerialGC)&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
young 영역은 앞서 설명한 방식을 사용한다.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
Old영역에서 mark - sweep - compact방식을 사용한다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
- 순서 &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; 1. Old영역에서 살아있는 객체를 mark한다.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; 2. heap의 앞부분부터 확인하여 살아 있는것만 남긴다.(이게 sweep)&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; 3. 각 객체들이 연속되어 쌓이도록 힙의 가장 앞부분부터 채워서 객체가&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 존재하는 부분과 객체가 없는 부분으로 나눈다.(Compaction)&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
Serial은 싱글 cpu 고려 한 알고리즘이라 코어갯수가 적을때 적합하다.&lt;b&gt;(쓰지말자)&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;(2) Parallel GC( -XX:+UseParallelGC)&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
기본 알고리즘은 비슷하다.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
다만 싱글쓰레드로 처리하던 Serial GC에 비해서 &lt;b&gt;멀티쓰레드&lt;/b&gt;로 처리하기 때문에 Serial보다 빠르다.&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
Parallel GC는 메모리가 충분하고 코어 갯수가 많을수록 유리하다.&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
Parallel GC는 Throughtput GC 라고도 불린다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;(3) Parallel Old GC(-XX:+UseParallelOldGC)&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
Parallel Old Gc는 jdk5 update 6부터 제공하는 Gc 이다. 앞서 Parallel Gc와 비교시 Old영역 Gc알고리즘이 틀리다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
이 방식은 Mark - &lt;b&gt;Summary&lt;/b&gt; - Compaction 단계를 거친다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
&lt;b&gt;Summary&lt;/b&gt;단계는 앞서 GC를 수행한 영역에 대해서 별도로 살아 있는 객체를 식별한다는 점에서 Mark-Sweep-Compaction 알고리즘의 Sweep단계와 다르며,&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
약간더 복잡한 단계를 거친다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;(4) CMS GC(-XX:+UseConcMarkSweepGC)&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoRny40MvADJ9z3QvJw4wYeCCn8WMpWgM_Cv1jjKI6GclcQksHdpFgo6tROXajYjVbh7ppGXRa-Qzl8sFwT4Fco7y-_qxqc4EePfCJ06Bg2w-AV-D9RMnm1ua-W4Hgiu6GtVCZoKG4-EWl/s1600/122111_0936_JavaGarbage5.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;392&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoRny40MvADJ9z3QvJw4wYeCCn8WMpWgM_Cv1jjKI6GclcQksHdpFgo6tROXajYjVbh7ppGXRa-Qzl8sFwT4Fco7y-_qxqc4EePfCJ06Bg2w-AV-D9RMnm1ua-W4Hgiu6GtVCZoKG4-EWl/s640/122111_0936_JavaGarbage5.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
1. initial Mark단계에서는 클래스 로더에서 가장 가까운 객체중 살아 있는 객체만 찾는것으로 끝낸다.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
따라서 멈추는 시간이 매우 짧다.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
2. Concurrent Mark 단계에서는 방금 살아 있다고 확인한 객체에서 참조하고 있는 객체들만 따라가면서 확인한다.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
이단계의 특징은 다른 쓰레드가 실행중인 상태에서 동시에 진행된다는 것이다.&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
3. Remark 단계에서는 Concurrent Mark 단계에서 새로 추가되거나 참조가 끊긴 객체를 확인한다.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
4.Concurrent Sweep 단계에서는 쓰레기를 정리하는 작업을 실행한다.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
이 작업도 다른 쓰레드가 실행되는 상황에서 진행된다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
&lt;b&gt;장점 .&amp;nbsp;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
이러하기 때문에 표를 봐도 알수 있듯이 Stop the world 가 짧다.&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
모든 애플리케이션의 응답속도가 매우 중요할때 Cms GC 를 사용하며 Low latency GC 라고도 불린다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
&lt;b&gt;단점 .&amp;nbsp;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
다른 GC보다 cpu와 메모리를 많이 쓴다.(자원먹는 괴물)&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
Compaction단계가 기본적으로 제공되지 않는다. (기본적으로는 없다.)&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
그리고 조각 난 메모리가 많아 Compaction작업을 실행하면 다른 &amp;nbsp;GC 방식의 stw 보다 시간이 더 길기 때문에 Compaction작업이 얼마나 자주, 오랫동안 수행되는지 확인(테스트)해야한다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;(5) G1 GC&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEid8tlwJPSSgwhRtz8XbrmkLVTjSbUr4FF_tzeUlhfQ_jB-0nVpn25_wKTdYh335cZHd9A9zGO2eBKqfMJ6SyD4_42Jt0jAKXyDVMd3NlobZ98cNsFI9nNVKJ2IeJKwFh2jD9U2i5sFegeW/s1600/122111_0936_JavaGarbage6.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEid8tlwJPSSgwhRtz8XbrmkLVTjSbUr4FF_tzeUlhfQ_jB-0nVpn25_wKTdYh335cZHd9A9zGO2eBKqfMJ6SyD4_42Jt0jAKXyDVMd3NlobZ98cNsFI9nNVKJ2IeJKwFh2jD9U2i5sFegeW/s320/122111_0936_JavaGarbage6.png&quot; width=&quot;289&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
이 녀석은 young ,old 영역 구분이 없다.&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
바둑판으로 각 영역에 객체를 할당하고 GC 를 실행한다. 그러다가 해당영역이 꽉차면 다른 영역에 객체를 할당하고 GC를 실행한다.&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
즉, young의 세영역(eden,survivor1,2)영역에서 데이터가 old로 이동하던 단계가 없다.&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
G1 GC 는 장기적으로 말도 많고 탈도 많은 CMS GC를 대체하기 위해서 만들어 졌다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
G1 GC 의 장점은 성능이다.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
위의 녀석들중 최고다 하지만 나온지 얼마안되서 불안하다 시기상조이니 좀 시간이 흐른후 적용하도록하자.&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
- 출처 :&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
http://helloworld.naver.com/helloworld/1329&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
http://jikime.tistory.com/313&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
두글을 제가 보기좋게 짬뽕했습니다.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jangnandev.blogspot.com/feeds/1703312203949283185/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://jangnandev.blogspot.com/2012/01/java-garbage-collection.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/1703312203949283185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/1703312203949283185'/><link rel='alternate' type='text/html' href='http://jangnandev.blogspot.com/2012/01/java-garbage-collection.html' title='Java Garbage Collection에 대해서'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07131582180996221331</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoRny40MvADJ9z3QvJw4wYeCCn8WMpWgM_Cv1jjKI6GclcQksHdpFgo6tROXajYjVbh7ppGXRa-Qzl8sFwT4Fco7y-_qxqc4EePfCJ06Bg2w-AV-D9RMnm1ua-W4Hgiu6GtVCZoKG4-EWl/s72-c/122111_0936_JavaGarbage5.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3457111550855581420.post-2269606189540958573</id><published>2012-01-29T17:39:00.000-08:00</published><updated>2012-01-29T19:12:23.599-08:00</updated><title type='text'>2012년 01월 29일 it 기술 동향</title><content type='html'>&lt;b&gt;JAVA&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
tomcat 로드밸런싱&lt;br /&gt;
&lt;a href=&quot;http://nikunjp.wordpress.com/2012/01/28/load-balancing-with-tomcat/&quot;&gt;http://nikunjp.wordpress.com/2012/01/28/load-balancing-with-tomcat/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
jpa hibernate 프로파일링&lt;br /&gt;
&lt;a href=&quot;http://blog.ej-technologies.com/2012/01/profiling-jpahibernate.html&quot;&gt;http://blog.ej-technologies.com/2012/01/profiling-jpahibernate.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
GC 알아보기&lt;br /&gt;
&lt;a href=&quot;http://worldmodscode.wordpress.com/2011/12/26/practical-garbage-collection-part-1-introduction/&quot;&gt;http://worldmodscode.wordpress.com/2011/12/26/practical-garbage-collection-part-1-introduction/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;hadoop&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
hadoop use case&lt;br /&gt;
&lt;a href=&quot;http://www.slideshare.net/datasalt&quot;&gt;http://www.slideshare.net/datasalt&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;HTML5&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
26가지 유용한 html5 튜토리얼&lt;br /&gt;
&lt;a href=&quot;http://www.lava360.com/tutorials/roundup-of-26-truly-helpful-html-5-tutorials/&quot;&gt;http://www.lava360.com/tutorials/roundup-of-26-truly-helpful-html-5-tutorials/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
css3,html5 메뉴들&lt;br /&gt;
&lt;a href=&quot;http://designmodo.com/css3-html5-mega-menus/&quot;&gt;http://designmodo.com/css3-html5-mega-menus/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
분야별 html5 튜토리얼&lt;br /&gt;
&lt;a href=&quot;http://www.underworldmagazines.com/12-html5-tutorials-to-get-you-started/&quot;&gt;http://www.underworldmagazines.com/12-html5-tutorials-to-get-you-started/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://joeycadle.com/blog/article/1/2012/22/01/html5-canvas-and-processing-js&quot;&gt;http://joeycadle.com/blog/article/1/2012/22/01/html5-canvas-and-processing-js&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Javascript&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
어떻게 js 로부터 데이터를 다운로드 받을까?&lt;br /&gt;
&lt;a href=&quot;http://blogs.adobe.com/cantrell/archives/2012/01/how-to-download-data-as-a-file-from-javascript.html&quot;&gt;http://blogs.adobe.com/cantrell/archives/2012/01/how-to-download-data-as-a-file-from-javascript.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
실시간 소스 수정 페이지&lt;br /&gt;
&lt;a href=&quot;http://rocktronica.github.com/tmpltr/&quot;&gt;http://rocktronica.github.com/tmpltr/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
dart puzzlers&lt;br /&gt;
&lt;a href=&quot;http://www.dartlang.org/articles/puzzlers/chapter-1.html&quot;&gt;http://www.dartlang.org/articles/puzzlers/chapter-1.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
dart svg logo&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/p/dart/source/browse/#svn%2Fbranches%2Fbleeding_edge%2Fdart%2Fclient%2Fsamples%2Flogo&quot;&gt;http://code.google.com/p/dart/source/browse/#svn%2Fbranches%2Fbleeding_edge%2Fdart%2Fclient%2Fsamples%2Flogo&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;jquery&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
jquery html5 base placeholder plugin&lt;br /&gt;
&lt;a href=&quot;http://webcloud.se/code/jQuery-Placeholder/&quot;&gt;http://webcloud.se/code/jQuery-Placeholder/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
jquery-ui componet demo&lt;br /&gt;
&lt;a href=&quot;http://hanshillen.github.com/jqtest/#goto_slider&quot;&gt;http://hanshillen.github.com/jqtest/#goto_slider&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
차트 그리기 좋은 raphael&amp;nbsp;기반 js&lt;br /&gt;
&lt;a href=&quot;http://g.raphaeljs.com/&quot;&gt;http://g.raphaeljs.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
독특한 슬라이드를 보여주는 highslide.js&lt;br /&gt;
&lt;a href=&quot;http://highslide.com/&quot;&gt;http://highslide.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;CSS3&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
github리본 만들기&lt;br /&gt;
&lt;a href=&quot;http://www.terrenceryan.com/blog/post.cfm/github-ribbons-in-css&quot;&gt;http://www.terrenceryan.com/blog/post.cfm/github-ribbons-in-css&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.noupe.com/css/useful-css-snippets-for-your-coding-arsenal.html&quot;&gt;http://www.noupe.com/css/useful-css-snippets-for-your-coding-arsenal.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Node.js&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
node.js document&lt;br /&gt;
&lt;a href=&quot;http://yand.info/&quot;&gt;http://yand.info/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://sourcecodebean.com/archives/callbacks-are-polluting-your-code/1488&quot;&gt;http://sourcecodebean.com/archives/callbacks-are-polluting-your-code/1488&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;android&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
초간단 앱만들기&lt;br /&gt;
&lt;a href=&quot;http://android-meda.blogspot.com/2012/01/writing-your-first-android-app-body.html&quot;&gt;http://android-meda.blogspot.com/2012/01/writing-your-first-android-app-body.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
좋은 무료 안드로이드 gui&lt;br /&gt;
&lt;a href=&quot;http://www.bestfreewebresources.com/2012/01/15-fresh-and-free-download-gui-kits-for-android-developers.html&quot;&gt;http://www.bestfreewebresources.com/2012/01/15-fresh-and-free-download-gui-kits-for-android-developers.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;etc.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
html5 비디오 지원의 현재&lt;br /&gt;
&lt;a href=&quot;http://www.longtailvideo.com/html5/&quot;&gt;http://www.longtailvideo.com/html5/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
자바스크립트의 부흥에 따른 현상 혹은 사건&lt;br /&gt;
&lt;a href=&quot;http://www.2ality.com/2012/01/javascript-pervasiveness.html&quot;&gt;http://www.2ality.com/2012/01/javascript-pervasiveness.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
jquery moblie과 sencha touch 간단한 설명&lt;br /&gt;
&lt;a href=&quot;http://miamicoder.com/2011/sencha-touch-or-jquery-mobile-read-this-before-you-make-a-decision/&quot;&gt;http://miamicoder.com/2011/sencha-touch-or-jquery-mobile-read-this-before-you-make-a-decision/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
vaadin에 대한 요약 설명&lt;br /&gt;
&lt;a href=&quot;http://blog.porotype.com/post/16575655597/compressing-all-the-vaadin-things&quot;&gt;http://blog.porotype.com/post/16575655597/compressing-all-the-vaadin-things&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://jangnandev.blogspot.com/feeds/2269606189540958573/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://jangnandev.blogspot.com/2012/01/2012-01-29-it.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/2269606189540958573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/2269606189540958573'/><link rel='alternate' type='text/html' href='http://jangnandev.blogspot.com/2012/01/2012-01-29-it.html' title='2012년 01월 29일 it 기술 동향'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07131582180996221331</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3457111550855581420.post-1928323502562636675</id><published>2012-01-27T08:31:00.000-08:00</published><updated>2012-01-27T08:38:04.005-08:00</updated><title type='text'>Chromium Extension을 통한 Web Intents 맛보기</title><content type='html'>&lt;br /&gt;
&lt;div class=&quot;p1&quot;&gt;
1. 일단 기존의 chrome 브라우저가 아닌 chromium(&lt;a href=&quot;http://download-chromium.appspot.com/&quot;&gt;&lt;span class=&quot;s1&quot;&gt;http://download-chromium.appspot.com&lt;/span&gt;&lt;/a&gt;)을 다운받습니다.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
&lt;span class=&quot;s2&quot;&gt;2. 다운 받는 동안에 github에 가서 관련 extension(&lt;a href=&quot;https://github.com/PaulKinlan/WebIntents/tree/master/tools/chrome/extensions/share-services&quot;&gt;&lt;span class=&quot;s3&quot;&gt;https://github.com/PaulKinlan/WebIntents/tree/master/tools/chrome/extensions/share-services&lt;/span&gt;&lt;/a&gt;)&amp;nbsp;을 다운 받습니다.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuKLgnMzx1mg0RCTv7RZPfSrfkhPT-2gF6C4HtbCVh2BzpJhTD3dfT28t5kmHlNSUPltnjhAo75IJU91LhGGXt_SS4CJ4BN7eISWsY1xg7Z5My-uOFQgi0GRvFMmQ7QtjsSTXnpak9u8Ut/s1600/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA+2012-01-28+%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB+1.18.34.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;115&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuKLgnMzx1mg0RCTv7RZPfSrfkhPT-2gF6C4HtbCVh2BzpJhTD3dfT28t5kmHlNSUPltnjhAo75IJU91LhGGXt_SS4CJ4BN7eISWsY1xg7Z5My-uOFQgi0GRvFMmQ7QtjsSTXnpak9u8Ut/s400/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA+2012-01-28+%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB+1.18.34.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
다운 받아야 할 디렉토리 목록입니다.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
3. chromium을 구동합니다.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
4. url에&amp;nbsp;chrome://settings/extensions 입력합니다. 그러면 [환경설정 - 확장 프로그램] 으로 이동하게 됩니다. 여기서 우측의 [개발자 모드] 체크박스를 클릭하여 체크하시면 하단에 [압축해제된 확장 프로그램 로드...] 이라는 버튼이 보이게 됩니다.&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
클릭하여&amp;nbsp;앞서 github에서 다운 받은 extenstion중 원하는 폴더(gmail,twitter..)를 선택합니다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
그러면 extension이 등록이 됩니다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7TthEXawcv9rWPja5Fxb_KrmcGZbB7S2JwAIKvN9mnOyYLMwyaoSxG5BPfpeMsNrSESKV-gE0n76AHMiD9JyW4Qga_ymtb-WFd-lXJ97rbDAfrr008ATnkJhvDsp9Ycf71YEqP_sOdblK/s1600/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA+2012-01-28+%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB+1.23.33.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;205&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7TthEXawcv9rWPja5Fxb_KrmcGZbB7S2JwAIKvN9mnOyYLMwyaoSxG5BPfpeMsNrSESKV-gE0n76AHMiD9JyW4Qga_ymtb-WFd-lXJ97rbDAfrr008ATnkJhvDsp9Ycf71YEqP_sOdblK/s400/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA+2012-01-28+%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB+1.23.33.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
5. 이제&amp;nbsp;&lt;span class=&quot;s4&quot;&gt;&lt;a href=&quot;http://examples.webintents.org/intents/share/share.html&quot;&gt;http://examples.webintents.org/intents/share/share.html&lt;/a&gt;&lt;/span&gt;로 이동하고 하단의 예제로 준비된 share a link 와 share an image를 통해 각각의 share버튼을 클릭하면 chromium 브라우저 url 창 입력란 좌측의 지구본에서 설치한 확장 프로그램을 선택하는 메뉴가 나옵니다. 클릭하면 해당 페이지로 입력란으로 앞서 share한 내용 삽입이 된 상태로 열리는것을 발견할수 있습니다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwOgjtAspJo8Kj9otAhW3JPonTZRJQ3F2bTTy7_4i9veFo6qm8Ew8ckN2Sl-me_JGS2GhmhpRQHm7lE5JqV2gQiKXpG15UaeX1lirecsLaSVoJdBNs9aWoQZAE8HIqNwIwT_R3QSTkeDK2/s1600/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA+2012-01-28+%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB+1.27.19.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;202&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwOgjtAspJo8Kj9otAhW3JPonTZRJQ3F2bTTy7_4i9veFo6qm8Ew8ckN2Sl-me_JGS2GhmhpRQHm7lE5JqV2gQiKXpG15UaeX1lirecsLaSVoJdBNs9aWoQZAE8HIqNwIwT_R3QSTkeDK2/s400/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA+2012-01-28+%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB+1.27.19.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4w46FqxothSdYdkjdEvGUgVExShJc-WJg2YjnnVWGRr8Xse8CskvSUIFZNRWN4qrz40oFN-gJJzlxWBW7GfmQ4JGULPFFHehKHHgEy3uYBEZ0hBqFLY5YABfwkZG-O2Nb-W0fOkqw8KBk/s1600/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA+2012-01-28+%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB+1.27.56.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;167&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4w46FqxothSdYdkjdEvGUgVExShJc-WJg2YjnnVWGRr8Xse8CskvSUIFZNRWN4qrz40oFN-gJJzlxWBW7GfmQ4JGULPFFHehKHHgEy3uYBEZ0hBqFLY5YABfwkZG-O2Nb-W0fOkqw8KBk/s400/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA+2012-01-28+%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB+1.27.56.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jangnandev.blogspot.com/feeds/1928323502562636675/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://jangnandev.blogspot.com/2012/01/web-intent.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/1928323502562636675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/1928323502562636675'/><link rel='alternate' type='text/html' href='http://jangnandev.blogspot.com/2012/01/web-intent.html' title='Chromium Extension을 통한 Web Intents 맛보기'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07131582180996221331</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuKLgnMzx1mg0RCTv7RZPfSrfkhPT-2gF6C4HtbCVh2BzpJhTD3dfT28t5kmHlNSUPltnjhAo75IJU91LhGGXt_SS4CJ4BN7eISWsY1xg7Z5My-uOFQgi0GRvFMmQ7QtjsSTXnpak9u8Ut/s72-c/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA+2012-01-28+%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB+1.18.34.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3457111550855581420.post-2870940352825128060</id><published>2012-01-27T00:31:00.001-08:00</published><updated>2012-01-27T00:31:48.393-08:00</updated><title type='text'>JDK 5,7에서 파일속성을 hide로 바꿔보자.</title><content type='html'>&lt;br /&gt;
&lt;div class=&quot;p1&quot;&gt;
일단 JDK5와 JDK7버전을 두개를 놓고 구현해 보겠다.&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
JDK7에서 NIO2가 새롭게 등장하면서 파일에 대한 접근 방법이 많이 추가되었다.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
일단 JDK5에서는 파일을 숨기는 API 를 별도로 제공하지 않는다.&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
그러나 약간의 꼼수를 사용한다면 구현은 가능하다.&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
그리고 OS별로 환경변수 설정방법이 틀리듯이 디렉토리 의 구조적인 모습 또한 틀리다.&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
(Win,Unix,Linux별로 약간의 차이가 있다.)&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
Windows의 경우 Runtime.getRuntime.exec(&quot;command&quot;)를 이용하여 손쉽게 파일을 숨길수가 있다.&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
예를 들어 이렇게 말이다.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
다른 OS의 경우에도 이런식으로 명령어를 통한 파일에 대한 간섭을 하는것이 일반적이다.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot; style=&quot;width: 767px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
Runtime.getRuntime().exec(&quot;attrib +H HiddenFileExample.java&quot;);&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
좀더 구체적으로 살펴 보자면 이런식이다.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot; style=&quot;width: 767px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
void&amp;nbsp;setHiddenProperty(File file) throws InterruptedException, IOException {&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Process p = Runtime.getRuntime().exec(&quot;attrib +H &quot; + file.getPath());&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; p.waitFor();&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
여기에서 p.waitFor()는 필수적인것은 아니다. 하지만 이 해당 명령어가 실행이 완료될동안 안정성을 보장받기 위해서 는 이 부분을 명시해야한다.&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
(명령어를 실행하고 나서는 os쪽으로 통제가 떠나기 때문에 안정성이 보장되지 않는다.)&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&amp;nbsp;JDK7부터는 파일을 통제하기 쉽게 새로운 API들이 추가 되었다.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
Path에 접근하고 위치를 파악할수 있는 일종의 선택자 같은 기능을 가진 API를 제공하게 되었다.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
위의 내용을 JDK7의 새로운 API를 활용해서 바꿔보자.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot; style=&quot;width: 767px;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
Path&amp;nbsp;path =&amp;nbsp;FileSystems.getDefault().getPath(&quot;directory&quot;, &quot;hidden.txt&quot;);&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
Boolean hidden&amp;nbsp;= path.getAttribute(&quot;dos:hidden&quot;, LinkOption.NOFOLLOW_LINKS);&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
if (hidden != null &amp;amp;&amp;amp; !hidden) {&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; path.setAttribute(&quot;dos:hidden&quot;, Boolean.TRUE, LinkOption.NOFOLLOW_LINKS);&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
Runtime.exec()를 통한 기존의 방법이나 새로운 java.nio.file 패키지를 활용하거나 둘다 파일에 대한 컨트롤이 가능하다.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jangnandev.blogspot.com/feeds/2870940352825128060/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://jangnandev.blogspot.com/2012/01/jdk-57-hide.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/2870940352825128060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/2870940352825128060'/><link rel='alternate' type='text/html' href='http://jangnandev.blogspot.com/2012/01/jdk-57-hide.html' title='JDK 5,7에서 파일속성을 hide로 바꿔보자.'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07131582180996221331</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3457111550855581420.post-133656064962386120</id><published>2012-01-26T22:51:00.001-08:00</published><updated>2012-01-26T22:51:26.970-08:00</updated><title type='text'>JVM이란 무엇인가?</title><content type='html'>&lt;br /&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;b&gt;Java Virtual machine 에 들어가기 앞서 : -&lt;/b&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
이름에서도 알수있듯이 물리적인 기계와 소통을 할수있도록&amp;nbsp;자바프로세스를 실행시키는 가상 머신이다.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
JRE는 java 기반의 API 와 JVM를 포함하고 있다.&amp;nbsp;&lt;/div&gt;
&lt;ul class=&quot;ul1&quot;&gt;
&lt;li class=&quot;li4&quot;&gt;당신의 java code를 &amp;nbsp;java byte code로 컴파일하여 물리적인 기계가 이해할수 있게한다.&lt;/li&gt;
&lt;li class=&quot;li4&quot;&gt;오브젝트의 생성이나 가비지컬렉션같은&amp;nbsp;오브젝트 관리를&amp;nbsp;핸들링한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
JVM 의 각각 구성요소&lt;/div&gt;
&lt;ul class=&quot;ul1&quot;&gt;
&lt;li class=&quot;li4&quot;&gt;&lt;b&gt;Heap memory:-&lt;/b&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;힙 메모리는 JVM 머신 의 한 부분으로 오브젝트를&amp;nbsp;저장한다.&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;오브젝트의 종류로는 멤버(전역)변수, 생성자, 메소드들이다.&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;힙메모리의 기본크기는 64mb로 -Xmx(최대 힙사이즈), -Xms(초기 힙사이즈) 옵션을 이용하여 변경할수가 있다.&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;참조하는 객체의 생명주기는 개체가 참조가 해제 됬을경우로써,&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;가비지 컬렉션이 몇몇 알고리즘을 이용하여 오브젝트를 제거한다.&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;b&gt;Stack Memory:-&lt;/b&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;로컬(지역) 변수들이 상주해있다. 로컬변수의 생명주기는 메서드가 실행되는 일시적인 순간이다. 함수나 메서드가 종료되는순간 값이 제거된다.&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;이것은 후입선출의 방식을 사용한다.&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;b&gt;Method section:-&lt;/b&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;이 구역은 현재 실행중인 바이트 코드들이 존재한다.&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;바이트 코드가 실행된후, 포인트는 다음 바이트 코드를 가리킨다.&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;b&gt;registers:-&lt;/b&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;어떤 스택의 변수에 의해 활용된다.&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;p1&quot;&gt;
각기 벤더에 따라서 다양한 JRE가 제공된다.&lt;/div&gt;
&lt;ul class=&quot;ul1&quot;&gt;
&lt;li class=&quot;li4&quot;&gt;1.JRocket JVM &amp;nbsp;BEA Systems가 개발한 JVM이다. (현재 오라클)&lt;/li&gt;
&lt;li class=&quot;li4&quot;&gt;2. Java HotSpot VM Sun Microsystems가 개발한 JVM이다.(현재 오라클)&lt;/li&gt;
&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://jangnandev.blogspot.com/feeds/133656064962386120/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://jangnandev.blogspot.com/2012/01/jvm.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/133656064962386120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/133656064962386120'/><link rel='alternate' type='text/html' href='http://jangnandev.blogspot.com/2012/01/jvm.html' title='JVM이란 무엇인가?'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07131582180996221331</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3457111550855581420.post-528251349978661711</id><published>2012-01-26T22:12:00.001-08:00</published><updated>2012-01-26T22:12:57.171-08:00</updated><title type='text'>Java 8의 Project Lambda를 알아보자.</title><content type='html'>&lt;br /&gt;
&lt;div class=&quot;p1&quot;&gt;
Java 8 - Project Lambda&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
&lt;b&gt;project lambda란?:&amp;nbsp;&lt;/b&gt;Project lambda 는 lambda표현식을 &amp;nbsp;자바 문법에 맞춰서 사용가능하게 만드는 프로젝트입니다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
lambda 표현식은 Lisp같은 함수형 언어 문법을 사용하는것입니다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
대표적으로 Groovy는 closures로 대표되는 lambda표현식을 지원하게 해주는 java 계열의 언어입니다.&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
그렇다면 lambda 표현식이란 무엇인가?&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
그것은 코드 블록간에 &amp;nbsp;값을 할당하거나 메서드에 인수로 할당하거나 다른 lambda 표현식으로 전달할수 있게 해주는것입니다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
해당 코드는 필요할때마다 불러올수가 있습니다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
이것의 주 모티브는 JAVA에서 API사용자로 하여금 코드에 필요한 특정 API사용하여 보일러 플레이트 코드를 제거하는것입니다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
그러나 그건 단지 자바 구문 요구사항을 내부 클래스를 사용하여 종료하는것에 불과한것입니다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
이런 대부분의 일반적인 API는 자바 쓰레딩 API로써, 우리가 새로운 쓰레드를 실행할때 필요한 API를 말하는것입니다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
그러나 결국 Runnable이 implementing(구현) 되야합니다.&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
이 규격은 아직도 아직도 지속적으로 발전하고 있다.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
함수형 인터페이스 : 자바 스펙 개발자들은 JVM 스펙을 좀처럼 수정할려 하지 않습니다. 마찬가지로 이 경우에도 그렇습니다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
lambda의 경우 이러한 JVM 스펙에 수정없이 구현할수 있도록 정의하고 있습니다.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
그러므로 당신은 1.8 버전의 소스 클래스 코드를 목표하는 1.5버전에 쉽게 컴파일 할수 있습니다.&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;b&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
그래서 lambda 코드는 하나의 메소드를 가진 인터페이스를 implementing한 익명클래스에 보관됩니다.&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
물론 그 인터페이스는 &amp;nbsp;하나 이상의 메서드를 가질수는 있지만 그것은 하나의 메서드를 정의하는 클래스에 implementable 되야 합니다.&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
그러면 코드를 통해서 lambda에 대해서 살펴 보도록 합시다.&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p6&quot;&gt;
//단순한 경우로,&amp;nbsp;오직 하나의 메서드만을 가지고 있다.&lt;/div&gt;
&lt;div class=&quot;p6&quot;&gt;
//이것은 함수형 인터페이스이다.&lt;/div&gt;
&lt;div class=&quot;p7&quot;&gt;
public&lt;span class=&quot;s1&quot;&gt;&amp;nbsp;&lt;/span&gt;interface&lt;span class=&quot;s1&quot;&gt;&amp;nbsp;Test1&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p8&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s3&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;s3&quot;&gt;void&lt;/span&gt;&amp;nbsp;doSomething&lt;span class=&quot;s2&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;int&lt;/span&gt;&amp;nbsp;x&lt;span class=&quot;s2&quot;&gt;)&lt;/span&gt;;&lt;/div&gt;
&lt;div class=&quot;p9&quot;&gt;
}&lt;/div&gt;
&lt;div class=&quot;p10&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p6&quot;&gt;
//두개의 메서드를 가지고 있다 하지만 toString()의 경우는 기존에 있는것이다.&lt;/div&gt;
&lt;div class=&quot;p6&quot;&gt;
//어떤 오브젝트던지간에 java.lang.Object의 서브클래스이다.&lt;/div&gt;
&lt;div class=&quot;p6&quot;&gt;
//이것은 함수형 인터페이스이다.&lt;/div&gt;
&lt;div class=&quot;p7&quot;&gt;
public&lt;span class=&quot;s1&quot;&gt;&amp;nbsp;&lt;/span&gt;interface&lt;span class=&quot;s1&quot;&gt;&amp;nbsp;Test2&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p8&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s3&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;s3&quot;&gt;void&lt;/span&gt;&amp;nbsp;doSomething&lt;span class=&quot;s2&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;int&lt;/span&gt;&amp;nbsp;x&lt;span class=&quot;s2&quot;&gt;)&lt;/span&gt;;&lt;/div&gt;
&lt;div class=&quot;p8&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s3&quot;&gt;public&lt;/span&gt;&amp;nbsp;String toString&lt;span class=&quot;s2&quot;&gt;()&lt;/span&gt;;&lt;/div&gt;
&lt;div class=&quot;p9&quot;&gt;
}&lt;/div&gt;
&lt;div class=&quot;p10&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p6&quot;&gt;
//이 메서드는 Test1의 메서드를 Test3에 오버라이드 한것이다.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p6&quot;&gt;
//그래서 아직은 함수형 인터페이스이다.&lt;/div&gt;
&lt;div class=&quot;p7&quot;&gt;
public&lt;span class=&quot;s1&quot;&gt;&amp;nbsp;&lt;/span&gt;interface&lt;span class=&quot;s1&quot;&gt;&amp;nbsp;Test3&amp;nbsp;&lt;/span&gt;extends&lt;span class=&quot;s1&quot;&gt;&amp;nbsp;Test1&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p8&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s3&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;s3&quot;&gt;void&lt;/span&gt;&amp;nbsp;doSomething&lt;span class=&quot;s2&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;int&lt;/span&gt;&amp;nbsp;x&lt;span class=&quot;s2&quot;&gt;)&lt;/span&gt;;&lt;/div&gt;
&lt;div class=&quot;p9&quot;&gt;
}&lt;/div&gt;
&lt;div class=&quot;p10&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p6&quot;&gt;
//이것은 함수형 인터페이스가 아니다.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p6&quot;&gt;
//이 경우, 명시적으로 두가지 메서드를 구현해야한다.&lt;/div&gt;
&lt;div class=&quot;p7&quot;&gt;
public&lt;span class=&quot;s1&quot;&gt;&amp;nbsp;&lt;/span&gt;interface&lt;span class=&quot;s1&quot;&gt;&amp;nbsp;Test4&amp;nbsp;&lt;/span&gt;extends&lt;span class=&quot;s1&quot;&gt;&amp;nbsp;Test1&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p8&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s3&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;s3&quot;&gt;void&lt;/span&gt;&amp;nbsp;doSomething&lt;span class=&quot;s2&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;long&lt;/span&gt;&amp;nbsp;x&lt;span class=&quot;s2&quot;&gt;)&lt;/span&gt;;&lt;/div&gt;
&lt;div class=&quot;p9&quot;&gt;
}&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;b&gt;Lambda 표현식:&amp;nbsp;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
자바8에서 지원되는것으로 lambda표현식은 단지 함수형 인터페이스들을&amp;nbsp;익명 클래스에&amp;nbsp;implement하는 문법과 구현 방법이 다릅니다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
lambda 구문을 구현하는 방법을 보도록합시다.&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
argumentList -&amp;gt; body&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
저 argumentList는 단순히 자바 메서드 argument 리스트이다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
만약에 하나의 argument만 있다면 ()는 선택사항입니다. 또한 agument의 형에 대한 선언 부분도 선택사항입니다.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
이경우 형이 없습니다. 자동으로 추정합니다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
body의 경우 표현적 body와 코드 블락 body으로&amp;nbsp;두개의 타입이 있습니다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
표현적 body의 경우 단순히 자바 표현에 따라 값을 리턴해줍니다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
코드 블락 body의 경우 메서드 바디만을 포함하고 있습니다.&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
이 코드 블락 body는 필수적으로 중괄호 한쌍(]])을 포함해야 합니다.&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
하나 Thread에 lambda 구문을 구현한 예제를 봅시다.&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p6&quot;&gt;
//이 쓰레드는 Hello를 출력하게 됩니다.&lt;/div&gt;
&lt;div class=&quot;p8&quot;&gt;
&lt;span class=&quot;s3&quot;&gt;new&lt;/span&gt;&amp;nbsp;Thread&lt;span class=&quot;s2&quot;&gt;(()&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;s4&quot;&gt;-]]&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;s2&quot;&gt;{&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;s3&quot;&gt;while&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s5&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;){&lt;/span&gt;&amp;nbsp;System.out.println&lt;span class=&quot;s2&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s6&quot;&gt;&quot;Hello&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;)&lt;/span&gt;;&amp;nbsp;&lt;span class=&quot;s2&quot;&gt;}})&lt;/span&gt;.start&lt;span class=&quot;s2&quot;&gt;()&lt;/span&gt;;&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
위의 예제에 이어서 또 다른 예제를 보자면&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p7&quot;&gt;
public&lt;span class=&quot;s1&quot;&gt;&amp;nbsp;&lt;/span&gt;interface&lt;span class=&quot;s1&quot;&gt;&amp;nbsp;RandomLongs&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p8&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s3&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;s3&quot;&gt;long&lt;/span&gt;&amp;nbsp;randomLong&lt;span class=&quot;s2&quot;&gt;()&lt;/span&gt;;&lt;/div&gt;
&lt;div class=&quot;p9&quot;&gt;
}&lt;/div&gt;
&lt;div class=&quot;p10&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p8&quot;&gt;
RandomLongs randomLongs&amp;nbsp;&lt;span class=&quot;s4&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;()&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;s4&quot;&gt;-]]&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;s2&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;long&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;)(&lt;/span&gt;Math.random&lt;span class=&quot;s2&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;s4&quot;&gt;*&lt;/span&gt;Long.MAX_VALUE&lt;span class=&quot;s2&quot;&gt;))&lt;/span&gt;;&lt;/div&gt;
&lt;div class=&quot;p8&quot;&gt;
System.out.println&lt;span class=&quot;s2&quot;&gt;(&lt;/span&gt;randomLongs.randomLong&lt;span class=&quot;s2&quot;&gt;())&lt;/span&gt;;&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;b&gt;Generic 과 &amp;nbsp;lambda: &amp;nbsp;&lt;/b&gt;그러나 만약에 제네릭 메서드를 lambda에 implement한다면? 이에 표준 개발자들은&amp;nbsp;형 파라미터를 &amp;nbsp;타입 인자전에 정의할수 있도록&amp;nbsp;멋진 구현식을 제공했습니다.&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
예를 보자면 이렇습니다.&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p7&quot;&gt;
public&lt;span class=&quot;s1&quot;&gt;&amp;nbsp;&lt;/span&gt;interface&lt;span class=&quot;s1&quot;&gt;&amp;nbsp;NCopies&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p8&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s3&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;s4&quot;&gt;&amp;lt;&lt;/span&gt;T&amp;nbsp;&lt;span class=&quot;s3&quot;&gt;extends&lt;/span&gt;&amp;nbsp;Cloneable&lt;span class=&quot;s4&quot;&gt;]]&amp;gt;&lt;/span&gt;&amp;nbsp;List&lt;span class=&quot;s4&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;s4&quot;&gt;]]&amp;gt;&lt;/span&gt;&amp;nbsp;getCopies&lt;span class=&quot;s2&quot;&gt;(&lt;/span&gt;T seed&lt;span class=&quot;s2&quot;&gt;,&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;s3&quot;&gt;int&lt;/span&gt;&amp;nbsp;num&lt;span class=&quot;s2&quot;&gt;)&lt;/span&gt;;&lt;/div&gt;
&lt;div class=&quot;p9&quot;&gt;
}&lt;/div&gt;
&lt;div class=&quot;p10&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p6&quot;&gt;
//제네릭 메서드의 인자에 타입 유추기능을 제공한다.&lt;/div&gt;
&lt;div class=&quot;p8&quot;&gt;
NCopies nCopies&amp;nbsp;&lt;span class=&quot;s4&quot;&gt;=&amp;nbsp;&amp;lt;&lt;/span&gt;T&amp;nbsp;&lt;span class=&quot;s3&quot;&gt;extends&lt;/span&gt;&amp;nbsp;Cloneable&lt;span class=&quot;s4&quot;&gt;]]&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;s2&quot;&gt;(&lt;/span&gt;seed&lt;span class=&quot;s2&quot;&gt;,&lt;/span&gt;&amp;nbsp;num&lt;span class=&quot;s2&quot;&gt;)&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;s4&quot;&gt;-]]&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;s2&quot;&gt;{&lt;/span&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p8&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&lt;span class=&quot;s4&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;s4&quot;&gt;]]&amp;gt;&lt;/span&gt;&amp;nbsp;list&amp;nbsp;&lt;span class=&quot;s4&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;new&lt;/span&gt;&amp;nbsp;ArrayList&lt;span class=&quot;s4&quot;&gt;&amp;lt;]]&amp;gt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;()&lt;/span&gt;;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p8&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s3&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;int&lt;/span&gt;&amp;nbsp;i&lt;span class=&quot;s4&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s7&quot;&gt;0&lt;/span&gt;;&amp;nbsp;i&lt;span class=&quot;s4&quot;&gt;&amp;lt;&lt;/span&gt;num;&amp;nbsp;i&lt;span class=&quot;s4&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;)&lt;/span&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p8&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.add&lt;span class=&quot;s2&quot;&gt;(&lt;/span&gt;seed.clone&lt;span class=&quot;s2&quot;&gt;())&lt;/span&gt;;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p8&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s3&quot;&gt;return&lt;/span&gt;&amp;nbsp;list;&lt;/div&gt;
&lt;div class=&quot;p8&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s2&quot;&gt;}&lt;/span&gt;;&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;b&gt;요점 요약 :&amp;nbsp;&lt;/b&gt;람다 표현식에 의해 구현된 실제 인터페이스 및 방법은 그것이 사용되는 시점에 따라 달라집니다.&lt;/div&gt;
&lt;div class=&quot;p11&quot;&gt;
&lt;span class=&quot;s8&quot;&gt;컨텍스트&lt;/span&gt;도&amp;nbsp;할당&amp;nbsp;작업의 존재&amp;nbsp;또는&amp;nbsp;메서드&amp;nbsp;호출에서&amp;nbsp;매개 변수의&amp;nbsp;전달하여&amp;nbsp;설정하실 수 있습니다&lt;/div&gt;
&lt;div class=&quot;p11&quot;&gt;
컨텍스트 없이는 &amp;nbsp;lambda 표현식은 &amp;nbsp;의미가 없습니다. 단순히 lambda 표현식에 직접 하나의 메소드를 호출하는 목적이라면 맞지 않습니다.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p12&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p11&quot;&gt;
컴파일 에러를 내게되는&amp;nbsp;&lt;span class=&quot;s9&quot;&gt;예를 들어보자면&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p13&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p7&quot;&gt;
public&lt;span class=&quot;s1&quot;&gt;&amp;nbsp;&lt;/span&gt;interface&lt;span class=&quot;s1&quot;&gt;&amp;nbsp;NCopies&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p8&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s3&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;s4&quot;&gt;&amp;lt;&lt;/span&gt;T&amp;nbsp;&lt;span class=&quot;s3&quot;&gt;extends&lt;/span&gt;&amp;nbsp;Cloneable&lt;span class=&quot;s4&quot;&gt;]]&amp;gt;&lt;/span&gt;&amp;nbsp;List&lt;span class=&quot;s4&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;s4&quot;&gt;]]&amp;gt;&lt;/span&gt;&amp;nbsp;getCopies&lt;span class=&quot;s2&quot;&gt;(&lt;/span&gt;T seed&lt;span class=&quot;s2&quot;&gt;,&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;s3&quot;&gt;int&lt;/span&gt;&amp;nbsp;num&lt;span class=&quot;s2&quot;&gt;)&lt;/span&gt;;&lt;/div&gt;
&lt;div class=&quot;p9&quot;&gt;
}&lt;/div&gt;
&lt;div class=&quot;p10&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p6&quot;&gt;
//이 코드는 컴파일 에러를 냅니다.&lt;/div&gt;
&lt;div class=&quot;p6&quot;&gt;
//lambda에 context가 없어서 그 의미가 없기 때문입니다.&lt;/div&gt;
&lt;div class=&quot;p8&quot;&gt;
&lt;span class=&quot;s2&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s4&quot;&gt;&amp;lt;&lt;/span&gt;T&amp;nbsp;&lt;span class=&quot;s3&quot;&gt;extends&lt;/span&gt;&amp;nbsp;Cloneable&lt;span class=&quot;s4&quot;&gt;]]&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;s2&quot;&gt;(&lt;/span&gt;seed&lt;span class=&quot;s2&quot;&gt;,&lt;/span&gt;&amp;nbsp;num&lt;span class=&quot;s2&quot;&gt;)&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;s4&quot;&gt;-]]&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;s2&quot;&gt;{&lt;/span&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p8&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&lt;span class=&quot;s4&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;s4&quot;&gt;]]&amp;gt;&lt;/span&gt;&amp;nbsp;list&amp;nbsp;&lt;span class=&quot;s4&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;new&lt;/span&gt;&amp;nbsp;ArrayList&lt;span class=&quot;s4&quot;&gt;&amp;lt;]]&amp;gt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;()&lt;/span&gt;;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p8&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s3&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;int&lt;/span&gt;&amp;nbsp;i&lt;span class=&quot;s4&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s7&quot;&gt;0&lt;/span&gt;;&amp;nbsp;i&lt;span class=&quot;s4&quot;&gt;&amp;lt;&lt;/span&gt;num;&amp;nbsp;i&lt;span class=&quot;s4&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;)&lt;/span&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p8&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.add&lt;span class=&quot;s2&quot;&gt;(&lt;/span&gt;seed.clone&lt;span class=&quot;s2&quot;&gt;())&lt;/span&gt;;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p8&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s3&quot;&gt;return&lt;/span&gt;&amp;nbsp;list;&lt;/div&gt;
&lt;div class=&quot;p8&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s2&quot;&gt;})&lt;/span&gt;.getCopies&lt;span class=&quot;s2&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;new&lt;/span&gt;&amp;nbsp;CloneableClass&lt;span class=&quot;s2&quot;&gt;(),&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;s7&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;)&lt;/span&gt;;&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
그래서 옳게 쓰려면 아래와 같이 바꿔줘야합니다.&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p8&quot;&gt;
NCopies nCopies&amp;nbsp;&lt;span class=&quot;s4&quot;&gt;=&amp;nbsp;&amp;lt;&lt;/span&gt;T&amp;nbsp;&lt;span class=&quot;s3&quot;&gt;extends&lt;/span&gt;&amp;nbsp;Cloneable&lt;span class=&quot;s4&quot;&gt;]]&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;s2&quot;&gt;(&lt;/span&gt;seed&lt;span class=&quot;s2&quot;&gt;,&lt;/span&gt;&amp;nbsp;num&lt;span class=&quot;s2&quot;&gt;)&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;s4&quot;&gt;-]]&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;s2&quot;&gt;{&lt;/span&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p8&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&lt;span class=&quot;s4&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;s4&quot;&gt;]]&amp;gt;&lt;/span&gt;&amp;nbsp;list&amp;nbsp;&lt;span class=&quot;s4&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;new&lt;/span&gt;&amp;nbsp;ArrayList&lt;span class=&quot;s4&quot;&gt;&amp;lt;]]&amp;gt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;()&lt;/span&gt;;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p8&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s3&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;int&lt;/span&gt;&amp;nbsp;i&lt;span class=&quot;s4&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s7&quot;&gt;0&lt;/span&gt;;&amp;nbsp;i&lt;span class=&quot;s4&quot;&gt;&amp;lt;&lt;/span&gt;num;&amp;nbsp;i&lt;span class=&quot;s4&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;)&lt;/span&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p8&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.add&lt;span class=&quot;s2&quot;&gt;(&lt;/span&gt;seed.clone&lt;span class=&quot;s2&quot;&gt;())&lt;/span&gt;;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p8&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s3&quot;&gt;return&lt;/span&gt;&amp;nbsp;list;&lt;/div&gt;
&lt;div class=&quot;p8&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s2&quot;&gt;}&lt;/span&gt;;&lt;/div&gt;
&lt;div class=&quot;p8&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p8&quot;&gt;
nCopies.getCopies&lt;span class=&quot;s2&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;new&lt;/span&gt;&amp;nbsp;CloneableClass&lt;span class=&quot;s2&quot;&gt;(),&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;s7&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;)&lt;/span&gt;;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jangnandev.blogspot.com/feeds/528251349978661711/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://jangnandev.blogspot.com/2012/01/java-8-project-lambda.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/528251349978661711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/528251349978661711'/><link rel='alternate' type='text/html' href='http://jangnandev.blogspot.com/2012/01/java-8-project-lambda.html' title='Java 8의 Project Lambda를 알아보자.'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07131582180996221331</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3457111550855581420.post-6479380108601919637</id><published>2012-01-26T22:05:00.001-08:00</published><updated>2012-01-26T22:05:31.957-08:00</updated><title type='text'>JAVA의 기본적인 최적화 팁</title><content type='html'>&lt;br /&gt;
&lt;div class=&quot;p1&quot;&gt;
1. 불필요한 캐스팅을 피하자.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
신입 개발자의 경우 참조 데이터형을 변환하는 경우 캐스팅을 한다.&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
대부분의 캐스팅은 몇몇 기본 클래스 타입의 자식클래스로 모든 객체의 타입을 제네릭 형태의 프로그래밍을 할수있다.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
그러나 신입 개발자들의 경우 항상 그들이 잘못 캐스팅했다는것을 모르고 VM으로 하여금 불필요한 부하를 만든다.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
예를 들어 보자:&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
1&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td2&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;class&lt;/b&gt;&lt;/span&gt;&amp;nbsp;MyCastingClass {&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
2&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td3&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;public&lt;/b&gt;&lt;/span&gt;&amp;nbsp;Object myMethod() {&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
3&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td4&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String myString =&amp;nbsp;&lt;span class=&quot;s2&quot;&gt;&quot;Some data&quot;&lt;/span&gt;;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
4&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td5&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Object myObj = (Object) myString;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
5&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td6&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;return&lt;/b&gt;&lt;/span&gt;&amp;nbsp;myObj;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
6&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td7&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
7&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td8&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p5&quot;&gt;
&lt;span class=&quot;s3&quot;&gt;좋다.&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s4&quot;&gt;Object myObj = (Object) myString;&lt;/span&gt;&amp;nbsp;&amp;nbsp;구문을 보면 불필요한 캐스팅하고 있는것을알수있다. string 을 Object 형으로 변환하는것인데, String은 Object의 자식형으로 부모의 성향을 다 가지고 있는데 굳이 캐스팅을 할 필요는 없는것이다.&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
그리고 캐스팅은 자바 컴파일러의 안전검사를 무시하고 오류를 일으킬수도있다.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
개선해 보자:&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
1&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td2&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;class&lt;/b&gt;&lt;/span&gt;&amp;nbsp;MyCastingClass {&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
2&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td3&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;public&lt;/b&gt;&lt;/span&gt;&amp;nbsp;Object myMethod() {&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
3&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td9&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p6&quot;&gt;
&lt;span class=&quot;s5&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;return&lt;/b&gt;&lt;/span&gt;&lt;span class=&quot;s5&quot;&gt;&amp;nbsp;&lt;/span&gt;&quot;Some data&quot;&lt;span class=&quot;s5&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
4&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td7&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
5&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td8&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
자 이제 깔끔하게 수정이 되었다. 무엇보다 코드가 줄어서 가독성도 향상되었고 컴파일 규칙으로부터 안정적이고 메모리의 오버헤드 발생또한 없앴다. 아주 좋다.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
2. 일반적인 하위 표현식의 제거&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
이것은 일반적인 실수로 같은 하위표현식을 중복해서 사용하는경우가 있다.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
예를 들어보자 :&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
1&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td10&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt;&amp;nbsp;someNumber = (someValue * number1 / number2) + otherValue;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
2&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td11&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt;&amp;nbsp;someNumber2 = (someValue * number1 / number2) + otherValue2;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
이 경우 계산을 각각 객체마다 실행하기 때문에 부하가 두배로 들게된다. 그리고 이 경우는 그나마 두번 정의했기때문에 부하가 적을지 몰라도 만약에 점점 사용이 늘어 나게 된다면 더욱 더 부하 발생의 심각도 는 심해질것이다 그렇다면 이러한 것을 수정해 보자.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
1&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td11&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;final&lt;/b&gt;&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt;&amp;nbsp;constantCalculation = (someValue * number1 / number2);&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
2&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td12&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt;&amp;nbsp;someNumber = (constantCalculation) + otherValue;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
3&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td13&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt;&amp;nbsp;someNumber2 = (constantCalculation) + otherValue2;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
아주 좋다. 중복되는 부분을 하나의 변수로 따로 선언하고 final을 선언하여 상수화 했다. 이로써 심플한 최적화가 완료되었다.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
3. 상수가 아닌 string 대신에 StringBuffer나 StringBuilder를 이용하자.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
String 변수는&amp;nbsp;&lt;span class=&quot;s6&quot;&gt;immutable&lt;/span&gt;&amp;nbsp;변수이기 때문에 변화가 일어날시 오버헤드를 만들게 된다. 당신이 새로운 행동을 정의할때마다 컴파일러는 인터프리트에게 명령을 내려 변경을 해야하기 때문이다.&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
String 변수가 변경될때 변수 공간에 새로운 것을 만들어야한다. 그후에도 이러한 경우에도 마찬가지이다.&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
이 부하는 String 대신에 StringBuffer나 StringBuilder를 사용하여 해결할수 있다.&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
그럼 예를 들어보자:&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
1&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td6&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;class&lt;/b&gt;&lt;/span&gt;&amp;nbsp;MyStringClass {&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
2&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td14&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;public&lt;/b&gt;&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;void&lt;/b&gt;&lt;/span&gt;&amp;nbsp;myMethod() {&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
3&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td4&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String myString =&amp;nbsp;&lt;span class=&quot;s2&quot;&gt;&quot;Some data&quot;&lt;/span&gt;;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
4&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td8&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
5&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td4&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;for&lt;/b&gt;&lt;/span&gt;&amp;nbsp;(&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt;&amp;nbsp;i =&amp;nbsp;&lt;span class=&quot;s7&quot;&gt;0&lt;/span&gt;; i &amp;lt;&amp;nbsp;&lt;span class=&quot;s7&quot;&gt;20&lt;/span&gt;; i++) {&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
6&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td15&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myString += getMoreChars();&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
7&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td16&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
8&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td7&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
9&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td17&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
}&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
이것은 StringBuffer 클래스를 존재하여야 하는 이유이다.&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
StringBuffer는 가변적인 객체로써 잦은 길이의 변경이나 추가 들에 용의한 객체를 제공해주는 클래스이다.&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
StringBuffer와 StringBuilder의 차이는 StringBuffer는 동기화시에 항상 안전성을 보장합니다. 그에 반해 StringBuilder는 동기화서 안정성이 보장되지 않습니다.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
다만 장점으로 보자면 로컬 변수로 사용시 더 좋은 성능을 보여줍니다.&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
위의 예를 변경시켜보자:&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
01&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td2&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;class&lt;/b&gt;&lt;/span&gt;&amp;nbsp;MyCastingClass {&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
02&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td3&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;public&lt;/b&gt;&lt;/span&gt;&amp;nbsp;Object myMethod() {&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
03&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td4&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String myString =&amp;nbsp;&lt;span class=&quot;s2&quot;&gt;&quot;Some data&quot;&lt;/span&gt;;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
04&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td18&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;StringBuffer myBuffer =&amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;new&lt;/b&gt;&lt;/span&gt;&amp;nbsp;StringBuffer();&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
05&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td8&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
06&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td4&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;for&lt;/b&gt;&lt;/span&gt;&amp;nbsp;(&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt;&amp;nbsp;i =&amp;nbsp;&lt;span class=&quot;s7&quot;&gt;0&lt;/span&gt;; i &amp;lt;&amp;nbsp;&lt;span class=&quot;s7&quot;&gt;20&lt;/span&gt;; i++) {&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
07&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td19&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myBuffer.append(getMoreChars());&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
08&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td16&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
09&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td15&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myString = myBuffer.toString();&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
10&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td7&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
11&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td8&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
StringBuffer 사용하여 &amp;nbsp;컴파일러로 하여금 변동시마다 부하를 걸리게하는것을 해소 할수있게 되었다. 그후, toString()을 이용하여 String으로 변동하여 myString에 삽입함으로써 원래 소스코드의 목적을 훼손하지 않고 처리할수 있게 되었다.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
4. 단순한 Boolean 연산자를 사용하자.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
만약에 하나의 연산에 두가지 조건을 정의했을경우 단락회로 검사시 첫번째 조건이 참일시 컴파일러는 두번째 조건은 확인하지 않기 때문에 평가하는 시간을 줄일수가 있다.&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
예를 들어 ||에 의한 or를 사용시에는 첫번째 조건이 참이면 두번째 조건은 연산하지 않기 때문에 속도가 빨라집니다. 그러나 | 를 사용한 or시에는 두가지 조건을 다 연산하기 때문에 || 경우에 반해 속도가 느려집니다. 그와 같이 &amp;amp;&amp;amp; 경우도 앞의 문장이 false 인 경우 두번째 조건을 연산하지 않게 됩니다.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
그럼 소스코드를 통해서 확인 해 봅시다.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
1&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td9&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;class&lt;/b&gt;&lt;/span&gt;&amp;nbsp;MyShortCircuitClass {&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
2&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td14&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;public&lt;/b&gt;&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;void&lt;/b&gt;&lt;/span&gt;&amp;nbsp;myMethod() {&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
3&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td20&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;if&lt;/b&gt;&lt;/span&gt;&amp;nbsp;(someValue.equals(&lt;span class=&quot;s2&quot;&gt;&quot;true&quot;&lt;/span&gt;) | someValue.equals(&lt;span class=&quot;s2&quot;&gt;&quot;false&quot;&lt;/span&gt;)) {&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
4&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td21&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(&lt;span class=&quot;s2&quot;&gt;&quot;valid boolean&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
5&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td16&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
6&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td7&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
7&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td8&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
단순하게 참과 거짓을 통해 결과를 출력하는 것이지만, 이 경우에는 두가지 조건을 다 연산을 하게된다. 그렇다면 이것을 수정해보자.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
1&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td2&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;class&lt;/b&gt;&lt;/span&gt;&amp;nbsp;MyCastingClass {&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
2&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td14&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;public&lt;/b&gt;&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;void&lt;/b&gt;&lt;/span&gt;&amp;nbsp;myMethod() {&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
3&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td20&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;if&lt;/b&gt;&lt;/span&gt;&amp;nbsp;(&lt;span class=&quot;s2&quot;&gt;&quot;true&quot;&lt;/span&gt;.equals(someValue) ||&lt;span class=&quot;s2&quot;&gt;&quot;false&quot;&lt;/span&gt;.equals(someValue)) {&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
4&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td21&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(&lt;span class=&quot;s2&quot;&gt;&quot;valid boolean&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
5&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td16&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
6&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td7&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
7&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td8&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
| 를 || 로 변환함으로써 우리가 목표한 바를 달성했다.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t2&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td22&quot; valign=&quot;middle&quot;&gt;
&lt;div class=&quot;p7&quot;&gt;
&lt;b&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td23&quot; valign=&quot;middle&quot;&gt;
&lt;div class=&quot;p8&quot;&gt;
&lt;b&gt;의미&amp;nbsp;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td24&quot; valign=&quot;middle&quot;&gt;
&lt;div class=&quot;p8&quot;&gt;
&lt;b&gt;Short circuit?&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;td25&quot; valign=&quot;middle&quot;&gt;
&lt;div class=&quot;p9&quot;&gt;
&lt;b&gt;&amp;amp;&amp;amp;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td26&quot; valign=&quot;middle&quot;&gt;
&lt;div class=&quot;p9&quot;&gt;
&lt;b&gt;and&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td27&quot; valign=&quot;middle&quot;&gt;
&lt;div class=&quot;p9&quot;&gt;
&lt;b&gt;yes&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;td25&quot; valign=&quot;middle&quot;&gt;
&lt;div class=&quot;p9&quot;&gt;
&lt;b&gt;&amp;amp;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td26&quot; valign=&quot;middle&quot;&gt;
&lt;div class=&quot;p9&quot;&gt;
&lt;b&gt;and&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td27&quot; valign=&quot;middle&quot;&gt;
&lt;div class=&quot;p9&quot;&gt;
&lt;b&gt;no&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;td25&quot; valign=&quot;middle&quot;&gt;
&lt;div class=&quot;p9&quot;&gt;
&lt;b&gt;||&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td26&quot; valign=&quot;middle&quot;&gt;
&lt;div class=&quot;p9&quot;&gt;
&lt;b&gt;or&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td27&quot; valign=&quot;middle&quot;&gt;
&lt;div class=&quot;p9&quot;&gt;
&lt;b&gt;yes&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;td25&quot; valign=&quot;middle&quot;&gt;
&lt;div class=&quot;p9&quot;&gt;
&lt;b&gt;|&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td26&quot; valign=&quot;middle&quot;&gt;
&lt;div class=&quot;p9&quot;&gt;
&lt;b&gt;or&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td27&quot; valign=&quot;middle&quot;&gt;
&lt;div class=&quot;p9&quot;&gt;
&lt;b&gt;no&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;p1&quot;&gt;
표를 통해서 앞서의 경우와 유사한 경우를 판단해서 부하를 줄여보자.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
5. 단순한 empty확인시에는 equals() 대신에 length()를 사용하자.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
몇몇 개발자들은 String의 문자열의 유무를 equals()를 통해서 확인하곤 한다.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
이와같이 :&lt;/div&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
1&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td6&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;class&lt;/b&gt;&lt;/span&gt;&amp;nbsp;MyStringClass {&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
2&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td28&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;public&lt;/b&gt;&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;boolean&lt;/b&gt;&lt;/span&gt;&amp;nbsp;myTestMethod() {&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
3&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td28&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;return&lt;/b&gt;&lt;/span&gt;&amp;nbsp;myString.equals(&lt;span class=&quot;s2&quot;&gt;&quot;&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
4&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td7&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
5&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td8&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;p1&quot;&gt;
이것의 문제는 equals()를 사용시 높은 부하가 발생하게 된다.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
이 이슈는 equals()를 구현시 기본적으로 같은 객체 클래스를 두개의 객체가 참조하여 테스트를 하게 디자인 되있기 때문에 생기는 것이다.&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
결론적으로 length()또는 isEmpty()의 경우 단순히 같은 객체 타입으로 참조포인트를 놓고 테스트를 하게된다.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
이것은 단순히 빈값 테스트를 하기에는 효율적이다.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
자 위의 내용을 바꿔보자.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
1&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td2&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;class&lt;/b&gt;&lt;/span&gt;&amp;nbsp;MyCastingClass {&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
2&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td14&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;public&lt;/b&gt;&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;void&lt;/b&gt;&lt;/span&gt;&amp;nbsp;myMethod() {&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
3&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td15&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;public&lt;/b&gt;&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;boolean&lt;/b&gt;&lt;/span&gt;&amp;nbsp;myTestMethod() {&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
4&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td29&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p10&quot;&gt;
// which really does myString.length() == 0 behind the schenes&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
5&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td4&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;return&lt;/b&gt;&lt;/span&gt;&amp;nbsp;myString.isEmpty();&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
6&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td16&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
7&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td7&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;t1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;td1&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p3&quot;&gt;
8&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;td8&quot; valign=&quot;top&quot;&gt;
&lt;div class=&quot;p4&quot;&gt;
}&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
length()를 사용하여 컴파일러에게 객체 참조 부하를 주지 않고 string의 빈값을 테스트 할수 있는 효율적인 메서드를 제공하게 되었다.&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
기억해야한다. 코드의 최적화는 조잡한 트릭과 읽기 힘든 코드가 필요없는데서 발생한다.&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
종종 단순한 변화가 프로세싱 시간을 줄여주고 코드를 좋게 만들어준다.&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
위의 경우를 사용하여 코드의 최적화를 해보자.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jangnandev.blogspot.com/feeds/6479380108601919637/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://jangnandev.blogspot.com/2012/01/java.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/6479380108601919637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/6479380108601919637'/><link rel='alternate' type='text/html' href='http://jangnandev.blogspot.com/2012/01/java.html' title='JAVA의 기본적인 최적화 팁'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07131582180996221331</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3457111550855581420.post-2957333572888819441</id><published>2012-01-26T18:37:00.000-08:00</published><updated>2012-01-26T22:47:23.694-08:00</updated><title type='text'>2012년 1월 27일 it 기술 동향</title><content type='html'>&lt;br /&gt;
&lt;b&gt;JAVA&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
java sql date 변환 예제&lt;br /&gt;
&lt;a href=&quot;http://www.techlabs4u.com/2011/12/javasqldate-with-example-convert.html&quot;&gt;http://www.techlabs4u.com/2011/12/javasqldate-with-example-convert.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
쓸데 없이 모든 코드에 unit - equal 을 넣지 말아라!&lt;br /&gt;
&lt;a href=&quot;http://www.javacodegeeks.com/2012/01/effective-unit-testing-not-all-code-is.html&quot;&gt;http://www.javacodegeeks.com/2012/01/effective-unit-testing-not-all-code-is.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Cloud Computing&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
map reduce 성능에 관한 글&lt;br /&gt;
&lt;a href=&quot;http://blog.dynatrace.com/2012/01/25/about-the-performance-of-map-reduce-jobs/&quot;&gt;http://blog.dynatrace.com/2012/01/25/about-the-performance-of-map-reduce-jobs/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;python&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://kencochrane.net/blog/2011/11/developers-guide-for-running-django-apps-on-heroku/&quot;&gt;http://kencochrane.net/blog/2011/11/developers-guide-for-running-django-apps-on-heroku/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;android&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
안드로이드 UI 디자인 툴들&lt;br /&gt;
&lt;a href=&quot;http://www.androiduipatterns.com/2012/01/best-design-tools-for-android.html&quot;&gt;http://www.androiduipatterns.com/2012/01/best-design-tools-for-android.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;JAVASCRIPT&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
클라이언트 사이드의 mvc 프레임워크 backbone.js&lt;br /&gt;
&lt;a href=&quot;http://blog.carbonfive.com/2011/12/19/exploring-client-side-mvc-with-backbonejs/&quot;&gt;http://blog.carbonfive.com/2011/12/19/exploring-client-side-mvc-with-backbonejs/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
자바스크립트 모듈에 대해서&lt;br /&gt;
&lt;a href=&quot;http://blog.davidpadbury.com/2011/08/21/javascript-modules/&quot;&gt;http://blog.davidpadbury.com/2011/08/21/javascript-modules/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
일반 js -&amp;gt; coffeescript -&amp;gt; clojuresrci&lt;br /&gt;
&lt;a href=&quot;http://dosync.posterous.com/comparing-javascript-coffeescript-clojurescri&quot;&gt;http://dosync.posterous.com/comparing-javascript-coffeescript-clojurescri&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;jquery&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
아무글이나 클릭하면 editable한 input box로 변경되고 수정가능&lt;br /&gt;
&lt;a href=&quot;http://www.appelsiini.net/projects/jeditable/default.html&quot;&gt;http://www.appelsiini.net/projects/jeditable/default.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
boostrap기반의 이미지 갤러리&lt;br /&gt;
&lt;a href=&quot;http://blueimp.github.com/Bootstrap-Image-Gallery/&quot;&gt;http://blueimp.github.com/Bootstrap-Image-Gallery/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
우측 하단에 노티피케이션 박스가 뜬다.&lt;br /&gt;
&lt;a href=&quot;http://ghita.org/ux/kinotice/demo/demo.php?example=skin4&quot;&gt;http://ghita.org/ux/kinotice/demo/demo.php?example=skin4&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
인풋창으로 할수있는 많은 내용이 있음&lt;br /&gt;
&lt;a href=&quot;http://textextjs.com/manual/examples.html&quot;&gt;http://textextjs.com/manual/examples.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;HTML5&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
최근 html5 동향 따끈따끈한 근황 및 추가 기능들&lt;br /&gt;
&lt;a href=&quot;http://tokyo.bleedinghtml5.appspot.com/&quot;&gt;http://tokyo.bleedinghtml5.appspot.com/&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://html5-demos.appspot.com/static/html5-therealbleedingedge/template/index.html#1&quot;&gt;http://html5-demos.appspot.com/static/html5-therealbleedingedge/template/index.html#1&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.longtailvideo.com/html5/&quot;&gt;http://www.longtailvideo.com/html5/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;CSS3&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
반응형 웹사이트 개발하기 - 파트2. 네비게이션 그리고 본문&lt;br /&gt;
&lt;a href=&quot;http://www.developerdrive.com/2012/01/developing-a-responsive-website-part-2-navigation-and-content/&quot;&gt;http://www.developerdrive.com/2012/01/developing-a-responsive-website-part-2-navigation-and-content/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
css3를 이용한 마우스 오버시 이미지 확대&lt;br /&gt;
&lt;a href=&quot;http://www.script-tutorials.com/demos/225/index.html&quot;&gt;http://www.script-tutorials.com/demos/225/index.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Node.js&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://fennb.com/nodejs-a-giant-step-backwards&quot;&gt;http://fennb.com/nodejs-a-giant-step-backwards&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
node 모듈에서 유의할점&lt;br /&gt;
&lt;a href=&quot;http://dailyjs.com/2012/01/26/effective-node-modules/&quot;&gt;http://dailyjs.com/2012/01/26/effective-node-modules/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;DB&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
sql-developer툴을 이용하여 db2 sybase mysql 억세스하기&lt;br /&gt;
&lt;a href=&quot;http://www.thatjeffsmith.com/archive/2012/01/sql-developer-supports-db2-sybase-mysql-access-and-teradata/&quot;&gt;http://www.thatjeffsmith.com/archive/2012/01/sql-developer-supports-db2-sybase-mysql-access-and-teradata/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;tools&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
이클립스로 개발하는 html5 앱&lt;br /&gt;
&lt;a href=&quot;http://www.riaspace.com/2012/01/html5-for-app-developers-eclipse/&quot;&gt;http://www.riaspace.com/2012/01/html5-for-app-developers-eclipse/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
git 웹관리 툴&lt;br /&gt;
&lt;a href=&quot;http://gitblit.com/&quot;&gt;http://gitblit.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
정부 프레임워크 설치 가이드&lt;br /&gt;
&lt;a href=&quot;http://www.egovframe.go.kr/cop/bbs/selectBoardArticle.do?bbsId=BBSMSTR_000000000002&amp;amp;nttId=389&amp;amp;menu=2&amp;amp;submenu=1&quot;&gt;&amp;nbsp;http://www.egovframe.go.kr/cop/bbs/selectBoardArticle.do?bbsId=BBSMSTR_000000000002&amp;amp;nttId=389&amp;amp;menu=2&amp;amp;submenu=1&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;etc.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
내맘대로 제목 : 주목해야할 오픈소스 프로젝트 10&lt;br /&gt;
&lt;a href=&quot;http://www.cio.com/article/698485/10_New_Open_Source_Projects_You_May_Not_Know_About&quot;&gt;http://www.cio.com/article/698485/10_New_Open_Source_Projects_You_May_Not_Know_About&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
it 스타트업 비지니스 가이드&lt;br /&gt;
&lt;a href=&quot;http://bateru.com/news/2012/01/it-business-start-up-guide/&quot;&gt;http://bateru.com/news/2012/01/it-business-start-up-guide/&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://jangnandev.blogspot.com/feeds/2957333572888819441/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://jangnandev.blogspot.com/2012/01/2012-1-27-it.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/2957333572888819441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/2957333572888819441'/><link rel='alternate' type='text/html' href='http://jangnandev.blogspot.com/2012/01/2012-1-27-it.html' title='2012년 1월 27일 it 기술 동향'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07131582180996221331</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3457111550855581420.post-4538093606290270690</id><published>2012-01-25T17:51:00.000-08:00</published><updated>2012-01-25T17:51:08.597-08:00</updated><title type='text'>2012년 1월 26일 it 기술 동향</title><content type='html'>&lt;b&gt;JAVA&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
concurrent한 자바 프로그램 테스팅&lt;br /&gt;
&lt;a href=&quot;http://www.indicthreads.com/9209/testing-concurrent-java-programs/&quot;&gt;http://www.indicthreads.com/9209/testing-concurrent-java-programs/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
jvm이란 무엇인가?&lt;br /&gt;
&lt;a href=&quot;http://www.cloudhadoop.com/2011/12/what-is-java-virtual-machine.html&quot;&gt;http://www.cloudhadoop.com/2011/12/what-is-java-virtual-machine.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
spring에서 mongo db 사용하기 위한 준비단계&lt;br /&gt;
&lt;a href=&quot;http://aredko.blogspot.com/2011/07/mongodb-as-your-persistence-layer.html&quot;&gt;http://aredko.blogspot.com/2011/07/mongodb-as-your-persistence-layer.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
spring에서 mongo db 사용하기 구현단계&lt;br /&gt;
&lt;a href=&quot;http://aredko.blogspot.com/2011/08/exploiting-mongodb-together-with-spring.html&quot;&gt;http://aredko.blogspot.com/2011/08/exploiting-mongodb-together-with-spring.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
초 간단한 mybatis 셋팅&lt;br /&gt;
&lt;a href=&quot;http://www.raistudies.com/mybatis/configuring-mybatis-3/&quot;&gt;http://www.raistudies.com/mybatis/configuring-mybatis-3/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
tomcat에서의 멀티코어 시스템 구축&lt;br /&gt;
&lt;a href=&quot;http://www.tomcatexpert.com/ask-the-experts/tomcat-multi-core-system&quot;&gt;http://www.tomcatexpert.com/ask-the-experts/tomcat-multi-core-system&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Python&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
멀티 프로세싱을 활용한 병렬형 cpu bound tasks&lt;br /&gt;
&lt;a href=&quot;http://eli.thegreenplace.net/2012/01/16/python-parallelizing-cpu-bound-tasks-with-multiprocessing/&quot;&gt;http://eli.thegreenplace.net/2012/01/16/python-parallelizing-cpu-bound-tasks-with-multiprocessing/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;nosql&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
shading 아키텍쳐&lt;br /&gt;
&lt;a href=&quot;https://community.jboss.org/people/andy.song/blog/2012/01/21/several-things-you-may-need-know-about-sharding-system-architecture&quot;&gt;https://community.jboss.org/people/andy.song/blog/2012/01/21/several-things-you-may-need-know-about-sharding-system-architecture&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;hadoop&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.technology-mania.com/2011/03/hadoop-in-standalone-mode.html&quot;&gt;http://www.technology-mania.com/2011/03/hadoop-in-standalone-mode.html&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.technology-mania.com/2011/03/hadoop-in-pseudo-distributed-mode.html&quot;&gt;http://www.technology-mania.com/2011/03/hadoop-in-pseudo-distributed-mode.html&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.technology-mania.com/2011/03/hadoop-in-distributed-mode.html&quot;&gt;http://www.technology-mania.com/2011/03/hadoop-in-distributed-mode.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;html5&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
canvas slideshow&lt;br /&gt;
&lt;a href=&quot;http://www.script-tutorials.com/html5-canvas-slideshow/&quot;&gt;http://www.script-tutorials.com/html5-canvas-slideshow/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;javascript&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
n스크린 지원 ui 프레임워크 jo(데모 돌려보면 아직 느리다.)&lt;br /&gt;
&lt;a href=&quot;http://joapp.com/&quot;&gt;http://joapp.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
구글 캘린더 게스트 초대기능을 활용한 무료&amp;nbsp;노티피케이션 &amp;nbsp;SMS 보내는 js&lt;br /&gt;
&lt;a href=&quot;https://gist.github.com/1658408&quot;&gt;https://gist.github.com/1658408&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
coffee script기반의 여러 패턴을 적용가능한 js&lt;br /&gt;
&lt;a href=&quot;http://batmanjs.org/&quot;&gt;http://batmanjs.org/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
dart programming 시작해보자는 간단한 동영상&lt;br /&gt;
&lt;a href=&quot;http://www.youtube.com/watch?v=y32f8AD9MBI&quot;&gt;http://www.youtube.com/watch?v=y32f8AD9MBI&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
jsdev 활용하기&lt;br /&gt;
&lt;a href=&quot;http://www.youtube.com/watch?v=uO7JbYnZFjc&quot;&gt;http://www.youtube.com/watch?v=uO7JbYnZFjc&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/intl/ko-KR/speed/&quot;&gt;http://code.google.com/intl/ko-KR/speed/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;jquery&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
jquery mobile 10가지 기능&lt;br /&gt;
&lt;a href=&quot;http://www.jquery4u.com/mobile/10-jquery-mobile-features/&quot;&gt;http://www.jquery4u.com/mobile/10-jquery-mobile-features/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;android&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
간단한 carmera api 활용하기&lt;br /&gt;
&lt;a href=&quot;http://www.vogella.de/articles/AndroidCamera/article.html&quot;&gt;http://www.vogella.de/articles/AndroidCamera/article.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;etc.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
node.js로 모바일 서비스를 구축한 이유&lt;br /&gt;
&lt;a href=&quot;http://venturebeat.com/2012/01/24/why-walmart-is-using-node-js&quot;&gt;http://venturebeat.com/2012/01/24/why-walmart-is-using-node-js&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
우리나라 si의 막장현실에 대한 다이어그램&lt;br /&gt;
&lt;a href=&quot;http://www.okjsp.pe.kr/seq/182745&quot;&gt;http://www.okjsp.pe.kr/seq/182745&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
프로젝트 용어정리&lt;br /&gt;
&lt;a href=&quot;https://twitter.com/#!/jun0683/status/142527554056749056/photo/1&quot;&gt;https://twitter.com/#!/jun0683/status/142527554056749056/photo/1&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://jangnandev.blogspot.com/feeds/4538093606290270690/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://jangnandev.blogspot.com/2012/01/2012-1-26-it.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/4538093606290270690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/4538093606290270690'/><link rel='alternate' type='text/html' href='http://jangnandev.blogspot.com/2012/01/2012-1-26-it.html' title='2012년 1월 26일 it 기술 동향'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07131582180996221331</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3457111550855581420.post-6641099942274850957</id><published>2012-01-24T18:25:00.000-08:00</published><updated>2012-01-27T03:26:24.765-08:00</updated><title type='text'>2012년 1월 25일 it 기술 동향</title><content type='html'>&lt;b&gt;JAVA&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
java antipattern&lt;br /&gt;
&lt;a href=&quot;http://www.odi.ch/prog/design/newbies.php#43&quot;&gt;http://www.odi.ch/prog/design/newbies.php#43&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
guava eventbus에 쉬운 subscriber 경우들 살펴보기&lt;br /&gt;
&lt;a href=&quot;http://tomaszdziurko.pl/2012/01/google-guava-eventbus-easy-elegant-publisher-subscriber-cases/&quot;&gt;http://tomaszdziurko.pl/2012/01/google-guava-eventbus-easy-elegant-publisher-subscriber-cases/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
JPA 간단한 내용&lt;br /&gt;
&lt;a href=&quot;http://blog.codecentric.de/en/2012/01/spring-data-jpa/&quot;&gt;http://blog.codecentric.de/en/2012/01/spring-data-jpa/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Python&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;django의 소개 (자동 모니터링)&lt;br /&gt;
&lt;a href=&quot;http://python.dzone.com/articles/django-production-part-3&quot;&gt;http://python.dzone.com/articles/django-production-part-3&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;CSS&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
반응형 웹 사이트 예&lt;br /&gt;
&lt;a href=&quot;http://designmodo.com/minimal-responsive-web-designs/&quot;&gt;http://designmodo.com/minimal-responsive-web-designs/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;javascript&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
그래프&amp;nbsp;20개&lt;br /&gt;
&lt;a href=&quot;http://sixrevisions.com/javascript/20-fresh-javascript-data-visualization-libraries/&quot;&gt;http://sixrevisions.com/javascript/20-fresh-javascript-data-visualization-libraries/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
three.js로 만드는 동굴(터널)효과&lt;br /&gt;
&lt;a href=&quot;http://learningthreejs.com/blog/2012/01/11/tunnel-effect/&quot;&gt;http://learningthreejs.com/blog/2012/01/11/tunnel-effect/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Jquery&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
자동 가입방지 단어입력 용 플러그인&lt;br /&gt;
&lt;a href=&quot;https://github.com/josscrowcroft/MotionCAPTCHA&quot;&gt;https://github.com/josscrowcroft/MotionCAPTCHA&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
텍스트를 반구형 으로 배치하는 플러그인&lt;br /&gt;
&lt;a href=&quot;http://tympanus.net/codrops/2012/01/24/arctext-js-curving-text-with-css3-and-jquery/&quot;&gt;http://tympanus.net/codrops/2012/01/24/arctext-js-curving-text-with-css3-and-jquery/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;LINUX&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
ssh에서의 bash 자동완성&lt;br /&gt;
&lt;a href=&quot;http://b.sricola.com/post/16174981053/bash-autocomplete-for-ssh&quot;&gt;http://b.sricola.com/post/16174981053/bash-autocomplete-for-ssh&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://jangnandev.blogspot.com/feeds/6641099942274850957/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://jangnandev.blogspot.com/2012/01/2012-1-25-it.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/6641099942274850957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/6641099942274850957'/><link rel='alternate' type='text/html' href='http://jangnandev.blogspot.com/2012/01/2012-1-25-it.html' title='2012년 1월 25일 it 기술 동향'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07131582180996221331</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3457111550855581420.post-6271760860403902050</id><published>2012-01-24T06:18:00.000-08:00</published><updated>2012-01-24T18:00:13.576-08:00</updated><title type='text'>2012년 1월 24일 it 기술 동향</title><content type='html'>&lt;b&gt;JAVA&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
아웃오브메모리를 해결하는데 좋은 jdk툴들&lt;br /&gt;
&lt;a href=&quot;http://plumbr.eu/blog/solving-outofmemoryerror-jdk-tools&quot;&gt;http://plumbr.eu/blog/solving-outofmemoryerror-jdk-tools&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
qbe(query-by-example) 패턴&lt;br /&gt;
&lt;a href=&quot;http://gal-levinsky.blogspot.com/2012/01/advanced-qbe-pattern-common-using.htm&quot;&gt;http://gal-levinsky.blogspot.com/2012/01/advanced-qbe-pattern-common-using.htm&lt;/a&gt;l&lt;br /&gt;
&lt;br /&gt;
웹소켓을 통한 브라우저에게&amp;nbsp;CDI이벤트&amp;nbsp;보내기&lt;br /&gt;
&lt;a href=&quot;http://wesleyhales.com/blog/2012/01/20/Sending-CDI-events-to-the-browser-with-websockets/&quot;&gt;http://wesleyhales.com/blog/2012/01/20/Sending-CDI-events-to-the-browser-with-websockets/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
saxparser 이용하기&lt;br /&gt;
&lt;a href=&quot;http://www.javacodegeeks.com/2012/01/xml-parsing-using-saxparser-with.html&quot;&gt;http://www.javacodegeeks.com/2012/01/xml-parsing-using-saxparser-with.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
jquery로&amp;nbsp;spring mvc에서 json방식으로&amp;nbsp;ajax&amp;nbsp;통신하기&lt;br /&gt;
&lt;a href=&quot;http://www.raistudies.com/spring/spring-mvc/spring-mvc-json-jquery/&quot;&gt;http://www.raistudies.com/spring/spring-mvc/spring-mvc-json-jquery/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
익명 클래스와 인터페이스&lt;br /&gt;
&lt;a href=&quot;http://blog.josedacruz.com/2012/01/20/anonymous-java-classes-and-interfaces/&quot;&gt;http://blog.josedacruz.com/2012/01/20/anonymous-java-classes-and-interfaces/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;android&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
안드로이드에서 json파싱&lt;br /&gt;
&lt;a href=&quot;http://www.androidcompetencycenter.com/2009/10/json-parsing-in-android/&quot;&gt;http://www.androidcompetencycenter.com/2009/10/json-parsing-in-android/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
intent 알아보기&lt;br /&gt;
&lt;a href=&quot;http://www.vogella.de/articles/AndroidIntent/article.html&quot;&gt;http://www.vogella.de/articles/AndroidIntent/article.html&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Python&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
파이썬 퍼포먼스 향상을 위한 팁&lt;br /&gt;
&lt;a href=&quot;http://www-rohan.sdsu.edu/~gawron/aisem/course_core/python_intro/intro_lecture_files/fastpython.html&quot;&gt;http://www-rohan.sdsu.edu/~gawron/aisem/course_core/python_intro/intro_lecture_files/fastpython.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;HTML5&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
html5 캔바스를 이용한 이미지 효과주기 앱 만들기&lt;br /&gt;
&lt;a href=&quot;http://www.script-tutorials.com/html5-canvas-image-effects-app/&quot;&gt;http://www.script-tutorials.com/html5-canvas-image-effects-app/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
브라우저 캐시를 이용한 오프라인 웹사이트 제작&lt;br /&gt;
&lt;a href=&quot;http://usejquery.com/posts/create-a-self-caching-website-ready-for-offline-usage-with-html5-and-jquery&quot;&gt;http://usejquery.com/posts/create-a-self-caching-website-ready-for-offline-usage-with-html5-and-jquery&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
전략 시뮬레이션 게임 c&amp;amp;c 소스&lt;br /&gt;
&lt;a href=&quot;https://github.com/adityaravishankar/command-and-conquer&quot;&gt;https://github.com/adityaravishankar/command-and-conquer&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
html5 개발자의 워크플로우&lt;br /&gt;
&lt;a href=&quot;http://blog.elemdage.com/technology/one-mans-html5-developer-workflow&quot;&gt;http://blog.elemdage.com/technology/one-mans-html5-developer-workflow&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
웹사이트 웹표준 검사및 테스트 지원 사이트 7가지&lt;br /&gt;
&lt;a href=&quot;http://www.smashingapps.com/2012/01/18/7-highly-useful-online-tools-for-website-validation-and-testing.html&quot;&gt;http://www.smashingapps.com/2012/01/18/7-highly-useful-online-tools-for-website-validation-and-testing.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
다중 파일 업로드 지원 api&lt;br /&gt;
&lt;a href=&quot;https://github.com/23/resumable.js&quot;&gt;https://github.com/23/resumable.js&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
canvas&amp;nbsp;js를 &amp;nbsp;바로바로 &amp;nbsp;사용해서 그 걸 화면으로 볼수 있게 해주는 페이지&lt;br /&gt;
&lt;a href=&quot;http://dashingquill.web.officelive.com/Tools/Curvature.html&quot;&gt;http://dashingquill.web.officelive.com/Tools/Curvature.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;javascript&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
ie9 기반의 XmlHttpRequest 호출 방식&lt;br /&gt;
&lt;a href=&quot;http://cggallant.blogspot.com/2011/03/xmlhttprequest-calls-when-in-ie-9.html&quot;&gt;http://cggallant.blogspot.com/2011/03/xmlhttprequest-calls-when-in-ie-9.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
currency.io를 이용한 모바일 웹앱&lt;br /&gt;
&lt;a href=&quot;https://github.com/maccman/spine.mobile.currency&quot;&gt;https://github.com/maccman/spine.mobile.currency&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://spinejs.com/mobile/index&quot;&gt;http://spinejs.com/mobile/index&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
css 오토 리플래쉬 js&lt;br /&gt;
&lt;a href=&quot;http://cssrefresh.frebsite.nl/&quot;&gt;http://cssrefresh.frebsite.nl/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
페이지 로딩시 해상도 별로 css를 로딩한다.&lt;br /&gt;
&lt;a href=&quot;http://adapt.960.gs/&quot;&gt;http://adapt.960.gs/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
지정한 접근 가능한 웹페이지의 스크린샷을 찍어준다.&lt;br /&gt;
&lt;a href=&quot;https://github.com/niklasvh/html2canvas&quot;&gt;https://github.com/niklasvh/html2canvas&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;b&gt;CSS3&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://tympanus.net/codrops/2012/01/22/how-to-spice-up-your-menu-with-css3/&quot;&gt;http://tympanus.net/codrops/2012/01/22/how-to-spice-up-your-menu-with-css3/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
css3 드롭다운 메뉴&lt;br /&gt;
&lt;a href=&quot;http://www.red-team-design.com/css3-animated-dropdown-menu&quot;&gt;http://www.red-team-design.com/css3-animated-dropdown-menu&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
css3와 jquery 애니메이션 퍼포먼스 비교(css3 win)&lt;br /&gt;
&lt;a href=&quot;http://css3.bradshawenterprises.com/demos/speed.php&quot;&gt;http://css3.bradshawenterprises.com/demos/speed.php&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Jquery&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
jquery mobile 튜토리얼(예제)&lt;br /&gt;
&lt;a href=&quot;http://miamicoder.com/category/tutorials/jquery-mobile-tutorials/&quot;&gt;http://miamicoder.com/category/tutorials/jquery-mobile-tutorials/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
jquery-moblie로 만드는 rss reader app&lt;br /&gt;
&lt;a href=&quot;http://www.codeforest.net/jquery-mobile-advanced-tutorial-rss-reader-app&quot;&gt;http://www.codeforest.net/jquery-mobile-advanced-tutorial-rss-reader-app&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
트위터 따라하기&lt;br /&gt;
&lt;a href=&quot;http://tutorialpot.com/2011/08/creating-a-tweet-share-system/&quot;&gt;http://tutorialpot.com/2011/08/creating-a-tweet-share-system/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
이쁜정렬을 가능하게 해주는 플러그인 quicksand&lt;br /&gt;
&lt;a href=&quot;http://razorjack.net/quicksand/&quot;&gt;http://razorjack.net/quicksand/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
드래그앤 드랍을 쉽게 해주는 plugin&lt;br /&gt;
&lt;a href=&quot;http://www.jqueryrain.com/2012/01/easydrag-jquery-plugin/&quot;&gt;http://www.jqueryrain.com/2012/01/easydrag-jquery-plugin/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
에디트 가능한 그리드 플러그인&lt;br /&gt;
&lt;a href=&quot;http://www.webismymind.be/editablegrid/&quot;&gt;http://www.webismymind.be/editablegrid/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://demo.idered.pl/jQuery.cssParentSelector/&quot;&gt;http://demo.idered.pl/jQuery.cssParentSelector/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
그냥 텍스트 더블클릭하면 그곳의 텍스트를 수정가능&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/p/jquery-in-place-editor/&quot;&gt;http://code.google.com/p/jquery-in-place-editor/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
플리커 로딩 스타일 주는 플러그인&lt;br /&gt;
&lt;a href=&quot;http://superdit.com/2011/02/25/flickr-style-loading-animation-using-jquery/&quot;&gt;http://superdit.com/2011/02/25/flickr-style-loading-animation-using-jquery/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
반딧불 효과 만들어주는 플러그인&lt;br /&gt;
&lt;a href=&quot;http://www.backslash.gr/content/blog/webdevelopment/10-jquery-firefly-plugin&quot;&gt;http://www.backslash.gr/content/blog/webdevelopment/10-jquery-firefly-plugin&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
google plus 써클링 할 그룹 선정할때 UI&lt;br /&gt;
&lt;a href=&quot;http://textextjs.com/&quot;&gt;http://textextjs.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
이미지 사이즈를 정해놓고 그 이상 일시 마우스 커서에 따라 스크린이 이동&lt;br /&gt;
&lt;a href=&quot;http://manos.malihu.gr/jquery-image-panning&quot;&gt;http://manos.malihu.gr/jquery-image-panning&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
커서로 메뉴가 따라다님&lt;br /&gt;
&lt;a href=&quot;http://manos.malihu.gr/cursor-following-menu&quot;&gt;http://manos.malihu.gr/cursor-following-menu&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
맵이미지를 여러장 넣고 마우스 휠스크롤링에 따라서 이미지가 변환되면서 커지고 작아짐&lt;br /&gt;
&lt;a href=&quot;http://dannyvankooten.com/jquery-plugins/mapz/&quot;&gt;http://dannyvankooten.com/jquery-plugins/mapz/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Node.js&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
블로그 만들기?!&lt;br /&gt;
&lt;a href=&quot;http://blog.james-carr.org/2012/01/16/blog-rolling-with-mongodb-node-js-and-coffeescript/&quot;&gt;http://blog.james-carr.org/2012/01/16/blog-rolling-with-mongodb-node-js-and-coffeescript/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;LINUX&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
기본적인 리눅스 명령어 소개&lt;br /&gt;
&lt;a href=&quot;http://coding.smashingmagazine.com/2012/01/23/introduction-to-linux-commands/&quot;&gt;http://coding.smashingmagazine.com/2012/01/23/introduction-to-linux-commands/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;etc.&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
좋은 if else 코딩 방식&lt;br /&gt;
&lt;a href=&quot;http://lukaseder.wordpress.com/2012/01/18/if-else-coding-style-best-practices/&quot;&gt;http://lukaseder.wordpress.com/2012/01/18/if-else-coding-style-best-practices/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
구글 언어별 코딩스타일 정의&lt;br /&gt;
&lt;a href=&quot;http://google-styleguide.googlecode.com/&quot;&gt;http://google-styleguide.googlecode.com&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
데이터베이스 시장점유율&lt;br /&gt;
&lt;a href=&quot;http://blog.jelastic.com/2012/01/23/database-marketshare-january-2012/&quot;&gt;http://blog.jelastic.com/2012/01/23/database-marketshare-january-2012/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
amazon nosql dynamo db 런칭&lt;br /&gt;
&lt;a href=&quot;http://www.netmagazine.com/news/amazon-launches-nosql-service-dynamodb-121713&quot;&gt;http://www.netmagazine.com/news/amazon-launches-nosql-service-dynamodb-121713&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
현재 html5의 주요 기능들에 대한 진행도를 확인할수있다.(확정,진행중,미정 등)&lt;br /&gt;
&lt;a href=&quot;http://html5please.us/&quot;&gt;http://html5please.us/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
jpeg 압축 프로그램 jpegmini&lt;br /&gt;
&lt;a href=&quot;http://www.jpegmini.com/main/home&quot;&gt;http://www.jpegmini.com/main/home&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
브라우저 캐쉬상 이미지들만 따로 분류해서 원하는 폴더로 밀어넣어주는 프로그램&lt;br /&gt;
&lt;a href=&quot;http://lifehacker.com/5878254/cachecopy-pulls-images-from-your-browsers-cache&quot;&gt;http://lifehacker.com/5878254/cachecopy-pulls-images-from-your-browsers-cache&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
서버 벤치 마크툴&lt;br /&gt;
&lt;a href=&quot;http://www.cibengineering.com/blog/server-benchmark/&quot;&gt;http://www.cibengineering.com/blog/server-benchmark/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.99lime.com/&quot;&gt;http://www.99lime.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
웹개발자 및 디자이너가 쓰기 좋은 크롬 익스텐션&lt;br /&gt;
&lt;a href=&quot;http://smashinghub.com/best-chrome-extensions.htm&quot;&gt;http://smashinghub.com/best-chrome-extensions.htm&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://jangnandev.blogspot.com/feeds/6271760860403902050/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://jangnandev.blogspot.com/2012/01/2012-1-24-it.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/6271760860403902050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/6271760860403902050'/><link rel='alternate' type='text/html' href='http://jangnandev.blogspot.com/2012/01/2012-1-24-it.html' title='2012년 1월 24일 it 기술 동향'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07131582180996221331</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3457111550855581420.post-5673990679593278988</id><published>2012-01-19T17:03:00.000-08:00</published><updated>2012-01-19T17:10:12.179-08:00</updated><title type='text'>2012년 1월 20일 it 기술 동향</title><content type='html'>&lt;b&gt;JAVA&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
reflection 이용한 오브젝트에 생성자와 파라미터 삽입&lt;br /&gt;
&lt;a href=&quot;http://java.raistudies.com/creating-object-using-reflection-in-java/&quot;&gt;http://java.raistudies.com/creating-object-using-reflection-in-java/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
자바프로그램에서 프로시져 콜하는법&lt;br /&gt;
&lt;a href=&quot;http://extreme-java.com/call-stored-procedure-from-java-program/&quot;&gt;http://extreme-java.com/call-stored-procedure-from-java-program/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
심플하고 가벼운 REST lib&lt;br /&gt;
&lt;a href=&quot;http://beders.github.com/Resty/Resty/Overview.html&quot;&gt;http://beders.github.com/Resty/Resty/Overview.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;HTML5&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://github.com/PaulKinlan/HTML5Search/pull/1&quot;&gt;https://github.com/PaulKinlan/HTML5Search/pull/1&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;CSS3&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
css3 2d 트랜스폼 예제&lt;br /&gt;
&lt;a href=&quot;http://hyeonseok.com/docs/css/css3-2d-transform.php&quot;&gt;http://hyeonseok.com/docs/css/css3-2d-transform.php&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Javascript&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
파이어버그 튜토리얼&lt;br /&gt;
&lt;a href=&quot;http://ulancer.com/2012/01/firebug-tutorial-getting-started/#en&quot;&gt;http://ulancer.com/2012/01/firebug-tutorial-getting-started/#en&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
자바스크립트 패턴들&lt;br /&gt;
&lt;a href=&quot;http://shichuan.github.com/javascript-patterns/&quot;&gt;http://shichuan.github.com/javascript-patterns/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
hasOwnProperty.call&lt;br /&gt;
&lt;a href=&quot;http://www.devthought.com/2012/01/18/an-object-is-not-a-hash/&quot;&gt;http://www.devthought.com/2012/01/18/an-object-is-not-a-hash/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
backbone기반의 프레임워크&amp;nbsp;thorax&lt;br /&gt;
커맨드 라인에 명령어를 추가해서 스트럭쳐를 구축한다.&lt;br /&gt;
&lt;a href=&quot;http://walmartlabs.github.com/thorax/&quot;&gt;http://walmartlabs.github.com/thorax/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
유저프랜들리한 UI 박스들&lt;br /&gt;
&lt;a href=&quot;http://harvesthq.github.com/chosen/&quot;&gt;http://harvesthq.github.com/chosen/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;jquery&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
jquery와 순수한 js의 레퍼런스 비교&lt;br /&gt;
&lt;a href=&quot;http://net.tutsplus.com/tutorials/javascript-ajax/from-jquery-to-javascript-a-reference/&quot;&gt;http://net.tutsplus.com/tutorials/javascript-ajax/from-jquery-to-javascript-a-reference/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Nodejs&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
조이스틱 js&lt;br /&gt;
&lt;a href=&quot;https://github.com/bunzli/huevapi071211.git&quot;&gt;https://github.com/bunzli/huevapi071211.git&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;etc.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
20개 무료 온라인 데이터 스토리지&lt;br /&gt;
&lt;a href=&quot;http://blog.arunace.com/20-best-free-sites-online-data-storage-backup/&quot;&gt;http://blog.arunace.com/20-best-free-sites-online-data-storage-backup/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://jangnandev.blogspot.com/feeds/5673990679593278988/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://jangnandev.blogspot.com/2012/01/2012-1-20-it.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/5673990679593278988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/5673990679593278988'/><link rel='alternate' type='text/html' href='http://jangnandev.blogspot.com/2012/01/2012-1-20-it.html' title='2012년 1월 20일 it 기술 동향'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07131582180996221331</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3457111550855581420.post-8831915662409028302</id><published>2012-01-18T16:39:00.000-08:00</published><updated>2012-01-18T20:51:32.431-08:00</updated><title type='text'>2012년 1월 19일 it 기술 동향</title><content type='html'>&lt;b&gt;JAVA&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
JAVA에서의 DI&lt;br /&gt;
&lt;a href=&quot;http://www.vogella.de/articles/DependencyInjection/article.html&quot;&gt;http://www.vogella.de/articles/DependencyInjection/article.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
서블릿 3에 대한 소개(변화)&lt;br /&gt;
http://www.objectpartners.com/2012/01/16/introduction-to-servlet-3-0/&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;DART&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
dart에서의 string&lt;br /&gt;
&lt;a href=&quot;http://blog.sethladd.com/2012/01/strings-in-dart.html&quot;&gt;http://blog.sethladd.com/2012/01/strings-in-dart.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Jquery&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
jquery mobile 기본 예제&lt;br /&gt;
&lt;a href=&quot;http://spyrestudios.com/beginners-tutorial-coding-web-apps-with-jquery-mobile/&quot;&gt;http://spyrestudios.com/beginners-tutorial-coding-web-apps-with-jquery-mobile/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
spinner만들어주는 솔루션들&lt;br /&gt;
&lt;a href=&quot;http://designmodo.com/css3-jquery-loading-animations/&quot;&gt;http://designmodo.com/css3-jquery-loading-animations/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
jQuery UI Bootstrap 0.2 Released&lt;br /&gt;
&lt;a href=&quot;http://addyosmani.com/blog/jquery-ui-bootstrap-0-2-released/&quot;&gt;http://addyosmani.com/blog/jquery-ui-bootstrap-0-2-released/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;javascript&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
동기화에 탁월한 backbone.js&lt;br /&gt;
&lt;a href=&quot;http://alexsotob.blogspot.com/2012/01/sabado-na-balada-galera-comecou-dancar.html&quot;&gt;http://alexsotob.blogspot.com/2012/01/sabado-na-balada-galera-comecou-dancar.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;android&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
소스를 jquery같이 간단하게 만들어주는 aquery 라이브러리&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/p/android-query/&quot;&gt;http://code.google.com/p/android-query/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;etc.&lt;/b&gt;&lt;br /&gt;
5가지 오픈소스 웹빌드 플랫폼&lt;br /&gt;
&lt;a href=&quot;http://www.findbestopensource.com/tagged/continuous-integration&quot;&gt;http://www.findbestopensource.com/tagged/continuous-integration&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://jangnandev.blogspot.com/feeds/8831915662409028302/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://jangnandev.blogspot.com/2012/01/2012-1-19-it.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/8831915662409028302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/8831915662409028302'/><link rel='alternate' type='text/html' href='http://jangnandev.blogspot.com/2012/01/2012-1-19-it.html' title='2012년 1월 19일 it 기술 동향'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07131582180996221331</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3457111550855581420.post-7980540695345293617</id><published>2012-01-17T18:09:00.000-08:00</published><updated>2012-01-17T18:09:02.187-08:00</updated><title type='text'>2012년 1월 18일 it 기술 동향</title><content type='html'>&lt;b&gt;JAVA&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
java 제네릭을 이용한 심플한 db access&lt;br /&gt;
&lt;a href=&quot;http://java.dzone.com/articles/simplifying-data-access-layer&quot;&gt;http://java.dzone.com/articles/simplifying-data-access-layer&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
spring mvc와 annotation을 이용하여 파일업로드 페이지 만들기&lt;br /&gt;
&lt;a href=&quot;http://www.raistudies.com/spring/spring-mvc/file-upload-spring-mvc-annotation/&quot;&gt;http://www.raistudies.com/spring/spring-mvc/file-upload-spring-mvc-annotation/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
spring mvc와 annotation을 이용하여 파일업로드 페이지 만들기(+jquery 이용한 ajax)&lt;br /&gt;
&lt;a href=&quot;http://www.raistudies.com/spring/spring-mvc/ajax-spring-mvc-3-annonations-jquery/&quot;&gt;http://www.raistudies.com/spring/spring-mvc/ajax-spring-mvc-3-annonations-jquery/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
gwt2,spring3,jpa2,hibernate3.5 튜토리얼&lt;br /&gt;
&lt;a href=&quot;http://www.javacodegeeks.com/2010/05/gwt-2-spring-3-jpa-2-hibernate-35.html&quot;&gt;http://www.javacodegeeks.com/2010/05/gwt-2-spring-3-jpa-2-hibernate-35.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
gwt apps에 스프링 시큐리티 하여 보안&lt;br /&gt;
&lt;a href=&quot;http://www.javacodegeeks.com/2010/12/securing-gwt-apps-with-spring-security.html&quot;&gt;http://www.javacodegeeks.com/2010/12/securing-gwt-apps-with-spring-security.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
spring data neo4j를 이용한 도메인 모델링&lt;br /&gt;
&lt;a href=&quot;http://skydingo.com/blog/?p=64&quot;&gt;http://skydingo.com/blog/?p=64&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Python&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
멀티프로세싱을 이용한 카운터 공유&lt;br /&gt;
&lt;a href=&quot;http://eli.thegreenplace.net/2012/01/04/shared-counter-with-pythons-multiprocessing/&quot;&gt;http://eli.thegreenplace.net/2012/01/04/shared-counter-with-pythons-multiprocessing/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ruby&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
ruby web framework&lt;br /&gt;
&lt;a href=&quot;http://vesperapps.com/&quot;&gt;http://vesperapps.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;javascript&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
트위터 메트릭스&lt;br /&gt;
&lt;a href=&quot;https://github.com/kennethkufluk/Twitter-Matrix&quot;&gt;https://github.com/kennethkufluk/Twitter-Matrix&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
7가지 인포그래픽 만들기 좋은 css와 js들&lt;br /&gt;
&lt;a href=&quot;http://www.queness.com/post/10465/7-amazing-interactive-infographics-created-with-html-css-and-javascript&quot;&gt;http://www.queness.com/post/10465/7-amazing-interactive-infographics-created-with-html-css-and-javascript&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;HTML5&lt;/b&gt;&lt;br /&gt;
sql 컨트롤을 손쉽게 해주는 js&lt;br /&gt;
&lt;a href=&quot;http://html5sql.com/guide.html&quot;&gt;http://html5sql.com/guide.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;jquery&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
슬라이더 플러그인은 어떻게 만들까?&lt;br /&gt;
&lt;a href=&quot;http://www.admixweb.com/2012/01/16/how-to-create-a-slider-plugin-with-jquery/&quot;&gt;http://www.admixweb.com/2012/01/16/how-to-create-a-slider-plugin-with-jquery/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
jquery mobile을 활용한 웹사이트혹은 앱 만들기&lt;br /&gt;
&lt;a href=&quot;http://www.hongkiat.com/blog/build-websites-apps-jquery-mobile/&quot;&gt;http://www.hongkiat.com/blog/build-websites-apps-jquery-mobile/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
동적 모션이 있는 갤러리 플러그인&lt;br /&gt;
&lt;a href=&quot;http://www.minimit.com/works/minimit-gallery-plugin&quot;&gt;http://www.minimit.com/works/minimit-gallery-plugin&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://jangnandev.blogspot.com/feeds/7980540695345293617/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://jangnandev.blogspot.com/2012/01/2012-1-18-it.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/7980540695345293617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/7980540695345293617'/><link rel='alternate' type='text/html' href='http://jangnandev.blogspot.com/2012/01/2012-1-18-it.html' title='2012년 1월 18일 it 기술 동향'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07131582180996221331</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3457111550855581420.post-3722783729013094999</id><published>2012-01-16T17:48:00.000-08:00</published><updated>2012-01-17T04:06:35.122-08:00</updated><title type='text'>2012년 1월 17일 it 기술 동향</title><content type='html'>&lt;b&gt;JAVA&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
spring 3, hibernate scala 사용한 내용&lt;br /&gt;
&lt;a href=&quot;https://github.com/ykameshrao/scala-spring-hibernate-springmvc-maven-framework&quot;&gt;https://github.com/ykameshrao/scala-spring-hibernate-springmvc-maven-framework&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
spring 3 mvc에서 spring security 적용하기&lt;br /&gt;
&lt;a href=&quot;http://www.raistudies.com/spring-security-tutorial/spring-security-configuration-spring-mvc/&quot;&gt;http://www.raistudies.com/spring-security-tutorial/spring-security-configuration-spring-mvc/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
servlet 3에 대한 분석&lt;br /&gt;
&lt;a href=&quot;http://whiteship.me/?p=13428&quot;&gt;http://whiteship.me/?p=13428&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
spring 3&amp;nbsp;변경된점&lt;br /&gt;
&lt;a href=&quot;http://feedproxy.google.com/~r/rss_outsider_dev/~3/qWGzlUvTTu4/731&quot;&gt;http://feedproxy.google.com/~r/rss_outsider_dev/~3/qWGzlUvTTu4/731&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
spring 3.1변경된점&lt;br /&gt;
&lt;a href=&quot;http://feedproxy.google.com/~r/rss_outsider_dev/~3/12YXQdsVNKA/732&quot;&gt;http://feedproxy.google.com/~r/rss_outsider_dev/~3/12YXQdsVNKA/732&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
noe4j용 jdbc만들기&lt;br /&gt;
&lt;a href=&quot;http://rickardoberg.wordpress.com/2011/12/19/creating-a-jdbc-driver-for-neo4j/&quot;&gt;http://rickardoberg.wordpress.com/2011/12/19/creating-a-jdbc-driver-for-neo4j/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
캐쉬 사용시 고려점&lt;br /&gt;
&lt;a href=&quot;http://www.javacodegeeks.com/2012/01/write-through-cache.html&quot;&gt;http://www.javacodegeeks.com/2012/01/write-through-cache.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
배열에서 중복된 set을 이용한 제거&lt;br /&gt;
&lt;a href=&quot;http://extreme-java.com/remove-duplicate-element-in-array/&quot;&gt;http://extreme-java.com/remove-duplicate-element-in-array/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
string 객체에서 white space제거 하기&lt;br /&gt;
&lt;a href=&quot;http://extreme-java.com/how-to-remove-trailing-white-space-from-a-string/&quot;&gt;http://extreme-java.com/how-to-remove-trailing-white-space-from-a-string/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
java 약한 참조에 대한 이해&lt;br /&gt;
&lt;a href=&quot;http://www.javacodegeeks.com/2012/01/understanding-java-weak-references.html&quot;&gt;http://www.javacodegeeks.com/2012/01/understanding-java-weak-references.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
이클립스 커스텀하게 코드 자동생성하는법&lt;br /&gt;
&lt;a href=&quot;http://www.javacodegeeks.com/2012/01/eclipse-code-formatting-tips.html&quot;&gt;http://www.javacodegeeks.com/2012/01/eclipse-code-formatting-tips.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;javasciprt&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
jqmobi의 장점에 대한 설명&lt;br /&gt;
&lt;a href=&quot;http://www.readwriteweb.com/mobile/2012/01/jqmobi-is-a-mobile-optimized-h.php#.TxRDA8sY9vc.hackernews&quot;&gt;http://www.readwriteweb.com/mobile/2012/01/jqmobi-is-a-mobile-optimized-h.php#.TxRDA8sY9vc.hackernews&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Node.js&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
node.js와 socketio기반의 순수한 자바스크립트 기반으로 만든 p2p file공유&lt;br /&gt;
&lt;a href=&quot;http://gun.io/blog/dirtyshare-pure-javascript-peer-to-peer-p2p-file-sharing-nodejs-socketio/&quot;&gt;http://gun.io/blog/dirtyshare-pure-javascript-peer-to-peer-p2p-file-sharing-nodejs-socketio/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
crog.js 한국분이 만듬 콘솔에 로그뿌려주는거 같음&lt;br /&gt;
&lt;a href=&quot;http://firejune.com/1727&quot;&gt;http://firejune.com/1727&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;HTML5&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
c&amp;amp;c를 html5로 웹에서 구현&lt;br /&gt;
&lt;a href=&quot;http://www.adityaravishankar.com/projects/games/command-and-conquer/&quot;&gt;http://www.adityaravishankar.com/projects/games/command-and-conquer/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
hmt5 태그들을 인포그래프 보여줌&lt;br /&gt;
&lt;a href=&quot;http://bloggerspath.com/ultimate-html5-cheat-sheet-for-web-developers/&quot;&gt;http://bloggerspath.com/ultimate-html5-cheat-sheet-for-web-developers/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
새로나온 datalist태그&lt;br /&gt;
&lt;a href=&quot;http://www.htmlgoodies.com/html5/markup/whats-new-in-html5-forms-the-datalist-control.html#fbid=tMbtSWO1S9b&quot;&gt;http://www.htmlgoodies.com/html5/markup/whats-new-in-html5-forms-the-datalist-control.html#fbid=tMbtSWO1S9b&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;CSS&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
다이나믹한 css js less.js 공통속성을 전역변수처럼 상단에 선언하고 가져다 쓸수있다.&lt;br /&gt;
&lt;a href=&quot;http://lesscss.org/&quot;&gt;http://lesscss.org/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
twitter bootstrap 커스텀하게 css 생성 해주는 페이지&lt;br /&gt;
&lt;a href=&quot;http://www.martinbean.co.uk/bootstrap-generator/&quot;&gt;http://www.martinbean.co.uk/bootstrap-generator/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
8가지 css3를 이용한 text효과들&lt;br /&gt;
&lt;a href=&quot;http://www.catswhocode.com/blog/8-examples-of-stunning-css3-text-effects&quot;&gt;http://www.catswhocode.com/blog/8-examples-of-stunning-css3-text-effects&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;python&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
파이썬 배우기 2장&lt;br /&gt;
&lt;a href=&quot;http://blog.dhananjaynene.com/2010/03/functional-programming-with-python-%E2%80%93-part-2-useful-python-constructs/&quot;&gt;http://blog.dhananjaynene.com/2010/03/functional-programming-with-python-%E2%80%93-part-2-useful-python-constructs/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;scala&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
bash를 훅 보내버리는 scala&lt;br /&gt;
&lt;a href=&quot;http://playlatam.wordpress.com/2011/12/05/first-steps-with-scala-say-goodbye-to-bash-scripts/&quot;&gt;http://playlatam.wordpress.com/2011/12/05/first-steps-with-scala-say-goodbye-to-bash-scripts/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;etc.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
nodejs용 ide nide&lt;br /&gt;
&lt;a href=&quot;http://coreh.github.com/nide/&quot;&gt;http://coreh.github.com/nide/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
시간 절약하는 bash 트릭&lt;br /&gt;
&lt;a href=&quot;http://blog.hyfather.com/time-saving-bash-tricks&quot;&gt;http://blog.hyfather.com/time-saving-bash-tricks&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
모바일 프레임워크 개발 가이드(소개와 선택가이드라고 보면 된다.)&lt;br /&gt;
&lt;a href=&quot;http://www.netmagazine.com/features/developers-guide-mobile-frameworks&quot;&gt;http://www.netmagazine.com/features/developers-guide-mobile-frameworks&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://jangnandev.blogspot.com/feeds/3722783729013094999/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://jangnandev.blogspot.com/2012/01/2012-1-17-it.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/3722783729013094999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/3722783729013094999'/><link rel='alternate' type='text/html' href='http://jangnandev.blogspot.com/2012/01/2012-1-17-it.html' title='2012년 1월 17일 it 기술 동향'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07131582180996221331</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3457111550855581420.post-636397359725757735</id><published>2012-01-15T17:57:00.000-08:00</published><updated>2012-01-15T17:57:07.214-08:00</updated><title type='text'>2012년 1월 16일 it 기술 동향</title><content type='html'>&lt;b&gt;JAVA&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
io에 대한 간단한 설명&lt;br /&gt;
&lt;a href=&quot;http://www.code2learn.com/2012/01/advance-io-streams-in-java.html&quot;&gt;http://www.code2learn.com/2012/01/advance-io-streams-in-java.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;HTML5&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
간단한 indexed db 예제&lt;br /&gt;
&lt;a href=&quot;http://acuriousanimal.com/blog/2011/04/17/simplywrite-a-free-web-distraction-writing-tool-based-on-indexeddb/&quot;&gt;http://acuriousanimal.com/blog/2011/04/17/simplywrite-a-free-web-distraction-writing-tool-based-on-indexeddb/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
3d 슬라이드 쇼 js Reveal.js&lt;br /&gt;
&lt;a href=&quot;http://www.queness.com/post/10361/use-revealjs-to-create-css-3d-slideshow&quot;&gt;http://www.queness.com/post/10361/use-revealjs-to-create-css-3d-slideshow&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
쓸만한 그래프 차트 20가지&lt;br /&gt;
&lt;a href=&quot;http://designmodo.com/css-graph-chart-tutorials/&quot;&gt;http://designmodo.com/css-graph-chart-tutorials/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
jquery&lt;br /&gt;
&lt;br /&gt;
디테일하게 눌르면 그래프에서 그래프를 만드는 plugin&lt;br /&gt;
&lt;a href=&quot;http://kiersimmons.com/DDChart/index.html&quot;&gt;http://kiersimmons.com/DDChart/index.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
jquery만든 웹 가상 os&lt;br /&gt;
&lt;a href=&quot;http://desktop.sonspring.com/&quot;&gt;https://github.com/nathansmith/jQuery-Desktop&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
통화단위를 바꿔주는 money.js&lt;br /&gt;
&lt;u&gt;&lt;a href=&quot;http://josscrowcroft.github.com/money.js/#playground&quot;&gt;http://josscrowcroft.github.com/money.js/#playground&lt;/a&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JAVASCRIPT&lt;br /&gt;
&lt;br /&gt;
mvc js 10가지&lt;br /&gt;
&lt;a href=&quot;http://codebrief.com/2012/01/the-top-10-javascript-mvc-frameworks-reviewed/&quot;&gt;http://codebrief.com/2012/01/the-top-10-javascript-mvc-frameworks-reviewed/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Python&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
파이썬 개발자를 위한 자바강좌&lt;br /&gt;
&lt;a href=&quot;http://knuth.luther.edu/~bmiller/Java4Python/index.html&quot;&gt;http://knuth.luther.edu/~bmiller/Java4Python/index.html&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
구글서비스 용 파이썬 라이브러리&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/p/gdata-python-client/&quot;&gt;http://code.google.com/p/gdata-python-client/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;android&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
안드로이드 트위터 쉐어링 다이얼로그 창을 이용한 공유하기&lt;br /&gt;
&lt;a href=&quot;http://www.markhneedham.com/blog/2011/12/29/learning-android-sharing-with-twitterthe-share-via-dialog/&quot;&gt;http://www.markhneedham.com/blog/2011/12/29/learning-android-sharing-with-twitterthe-share-via-dialog/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Linux&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
리눅스 커널 3.2의 변화&lt;br /&gt;
&lt;a href=&quot;https://www.linux.com/learn/tutorials/533708-whats-new-in-linux-32&quot;&gt;https://www.linux.com/learn/tutorials/533708-whats-new-in-linux-32&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;etc.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
kindle fire 에 ics깔기&lt;br /&gt;
&lt;a href=&quot;http://www.androidauthority.com/how-to-install-android-4-0-ice-cream-sandwich-on-the-kindle-fire-44255/&quot;&gt;http://www.androidauthority.com/how-to-install-android-4-0-ice-cream-sandwich-on-the-kindle-fire-44255/&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://jangnandev.blogspot.com/feeds/636397359725757735/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://jangnandev.blogspot.com/2012/01/2012-1-16-it.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/636397359725757735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/636397359725757735'/><link rel='alternate' type='text/html' href='http://jangnandev.blogspot.com/2012/01/2012-1-16-it.html' title='2012년 1월 16일 it 기술 동향'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07131582180996221331</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3457111550855581420.post-7765887939552412898</id><published>2012-01-11T17:36:00.000-08:00</published><updated>2012-01-12T18:33:50.405-08:00</updated><title type='text'>2012년 1월 12,13일 it 기술 동향</title><content type='html'>&lt;b&gt;java&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
visual-vm ubuntu에서 사용법&lt;br /&gt;
&lt;a href=&quot;http://www.baptiste-wicht.com/2010/07/profile-applications-java-visualvm/&quot;&gt;http://www.baptiste-wicht.com/2010/07/profile-applications-java-visualvm/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
zip파일 만들기&lt;br /&gt;
&lt;a href=&quot;http://extreme-java.com/create-zip-files-in-java/&quot;&gt;http://extreme-java.com/create-zip-files-in-java/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
joor에 의한 직접적인 메소드 호출에 대한 함축&lt;br /&gt;
&lt;a href=&quot;http://lukaseder.wordpress.com/2011/12/29/a-neater-way-to-use-reflection-in-java/&quot;&gt;http://lukaseder.wordpress.com/2011/12/29/a-neater-way-to-use-reflection-in-java/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
javascript&lt;br /&gt;
&lt;br /&gt;
작성한 내용을 별도의 저장없이 남들과 공유가능하게 해주는 share.js&lt;br /&gt;
&lt;a href=&quot;http://sharejs.org/&quot;&gt;http://sharejs.org/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
coffee,jquery,dart,purejs 들간의 문법 비교&lt;br /&gt;
&lt;a href=&quot;http://blog.sethladd.com/2012/01/vanilla-dart-ftw.html&quot;&gt;http://blog.sethladd.com/2012/01/vanilla-dart-ftw.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;jquery&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
프레지 스타일의 impress.js를 jquery스타일로 변형한듯&lt;br /&gt;
&lt;a href=&quot;https://github.com/shama/jmpress.js/&quot;&gt;https://github.com/shama/jmpress.js/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
android&lt;br /&gt;
&lt;br /&gt;
안드로이드 디자인 사이트 오픈&lt;br /&gt;
http://developer.android.com/design/index.html&lt;br /&gt;
&lt;br /&gt;
Python&lt;br /&gt;
&lt;br /&gt;
html to text 모듈&lt;br /&gt;
http://blog.fiesta.cc/post/14575090271/cool-python-module-html2text&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;etc.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
15가지 개발 ide&lt;br /&gt;
&lt;a href=&quot;http://blog.freelancer-id.com/2011/03/18/15-free-ides-for-developers/&quot;&gt;http://blog.freelancer-id.com/2011/03/18/15-free-ides-for-developers/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
xcode 4.0 도서 추가 인쇄분&lt;br /&gt;
&lt;a href=&quot;http://blog.insightbook.co.kr/250&quot;&gt;http://blog.insightbook.co.kr/250&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://jangnandev.blogspot.com/feeds/7765887939552412898/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://jangnandev.blogspot.com/2012/01/2012-1-12-it.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/7765887939552412898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/7765887939552412898'/><link rel='alternate' type='text/html' href='http://jangnandev.blogspot.com/2012/01/2012-1-12-it.html' title='2012년 1월 12,13일 it 기술 동향'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07131582180996221331</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3457111550855581420.post-3120307653959577856</id><published>2012-01-10T17:37:00.000-08:00</published><updated>2012-01-11T06:38:09.037-08:00</updated><title type='text'>2012년 1월 11일 it 기술 동향</title><content type='html'>&lt;b&gt;JAVA&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
콜렉션 별 오버헤드&lt;br /&gt;
&lt;a href=&quot;http://www.plumbr.eu/blog/fat-collections&quot;&gt;http://www.plumbr.eu/blog/fat-collections&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Iphone&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
네이티브 아이폰 앱개발 가능하게 하는 모비원툴&lt;br /&gt;
&lt;a href=&quot;http://www.genuitec.com/blog/?p=4051&quot;&gt;http://www.genuitec.com/blog/?p=4051&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Jquery&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
유효성검사 가능한 패스워드 플러그인&lt;br /&gt;
&lt;a href=&quot;http://www.webdesignerdepot.com/2012/01/password-strength-verification-with-jquery/&quot;&gt;http://www.webdesignerdepot.com/2012/01/password-strength-verification-with-jquery/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
미디어쿼리 적용된 슬라이더&lt;br /&gt;
&lt;a href=&quot;http://webdesignledger.com/resources/8-responsive-jquery-slider-plugins&quot;&gt;http://webdesignledger.com/resources/8-responsive-jquery-slider-plugins&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
SNS관련 북마크 외 기타 플러그인&lt;br /&gt;
&lt;a href=&quot;http://www.jqueryrain.com/2012/01/35-best-jquery-social-bookmark-tutorials-and-bookmark-plugins/&quot;&gt;http://www.jqueryrain.com/2012/01/35-best-jquery-social-bookmark-tutorials-and-bookmark-plugins/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
웹에서 path흉내내기&lt;br /&gt;
&lt;a href=&quot;http://www.redeyeoperations.com/blog/path-fly-out-menu-css3/web-tutorials/&quot;&gt;http://www.redeyeoperations.com/blog/path-fly-out-menu-css3/web-tutorials/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;javascript&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
mozilla browser id 이용하기&lt;br /&gt;
&lt;a href=&quot;https://github.com/mozilla/browserid/wiki/How-to-Use-BrowserID-on-Your-Site&quot;&gt;https://github.com/mozilla/browserid/wiki/How-to-Use-BrowserID-on-Your-Site&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Node.js&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
node.js에서 couchdb 사용하기&lt;br /&gt;
&lt;a href=&quot;http://writings.nunojob.com/2011/09/getting-started-with-nodejs-and-couchdb.html&quot;&gt;http://writings.nunojob.com/2011/09/getting-started-with-nodejs-and-couchdb.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;etc&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
iis보다 잘나가는 nginx&lt;br /&gt;
http://royal.pingdom.com/2012/01/06/web-server-software-nginx-is-now-bigger-than-microsoft-iis/</content><link rel='replies' type='application/atom+xml' href='http://jangnandev.blogspot.com/feeds/3120307653959577856/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://jangnandev.blogspot.com/2012/01/2012-1-11-it.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/3120307653959577856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3457111550855581420/posts/default/3120307653959577856'/><link rel='alternate' type='text/html' href='http://jangnandev.blogspot.com/2012/01/2012-1-11-it.html' title='2012년 1월 11일 it 기술 동향'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07131582180996221331</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>