<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
    <channel>
        <title>jspGeek.com</title>
        <link>http://jspgeek.com/article/textyle</link>
        <description></description>
        <language>ko</language>
        <pubDate>Wed, 17 Mar 2010 15:44:09 +0900</pubDate>
        <lastBuildDate>Wed, 17 Mar 2010 15:44:09 +0900</lastBuildDate>
        <generator>XpressEngine 1.3.1.1</generator>
                                <item>
            <title>iPad Specs - 카메라가 없당!!!</title>
            <dc:creator>theclub</dc:creator>
            <link>http://jspgeek.com/article/11491</link>
            <guid isPermaLink="true">http://jspgeek.com/article/11491</guid>
                        <comments>http://jspgeek.com/article/11491#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;p&gt;원문 :&lt;a target=&quot;_blank&quot; href=&quot;http://www.apple.com/ipad/specs/&quot;&gt;http://www.apple.com/ipad/specs/&lt;/a&gt;&lt;/p&gt;&lt;h2&gt;Technical Specifications&lt;/h2&gt;
		&lt;div class=&quot;clear grid2cola&quot;&gt;
			&lt;h3&gt;Size and weight&lt;sup&gt;1&lt;/sup&gt;&lt;/h3&gt;
			&lt;div class=&quot;column first&quot;&gt;
				&lt;dl&gt;&lt;dt&gt;Height:&lt;/dt&gt;&lt;dd&gt;&lt;span&gt;9.56&lt;/span&gt; inches (242.8 mm)&lt;/dd&gt;&lt;dt&gt;Width:&lt;/dt&gt;&lt;dd&gt;&lt;span&gt;7.47&lt;/span&gt; inches (189.7 mm)&lt;/dd&gt;&lt;dt&gt;Depth:&lt;/dt&gt;&lt;dd&gt;&lt;span&gt;0.5&lt;/span&gt; inch (13.4 mm)&lt;/dd&gt;&lt;dt&gt;Weight:&lt;/dt&gt;&lt;dd&gt;&lt;span&gt;1.5&lt;/span&gt; pounds (.68 kg) Wi-Fi model;&lt;/dd&gt;&lt;dd&gt;&lt;span&gt;1.6&lt;/span&gt; pounds (.73 kg) Wi-Fi + 3G model&lt;/dd&gt;&lt;/dl&gt;
			&lt;/div&gt;
			&lt;div class=&quot;column last&quot;&gt;
				&lt;img src=&quot;http://images.apple.com/ipad/specs/images/dimensions_20100127.jpg&quot; alt=&quot;&quot; height=&quot;380&quot; width=&quot;610&quot;&gt;
			&lt;/div&gt;
		&lt;/div&gt;
		&lt;div id=&quot;specifications&quot; class=&quot;grid3col&quot;&gt;
			&lt;div class=&quot;column first&quot;&gt;
				&lt;h3&gt;Display&lt;/h3&gt;
				&lt;ul class=&quot;square&quot;&gt;&lt;li&gt;9.7-inch (diagonal) LED-backlit glossy widescreen Multi-Touch 
display with IPS technology&lt;/li&gt;&lt;li&gt;1024-by-768-pixel resolution at 132 pixels per inch (ppi)&lt;/li&gt;&lt;li&gt;Fingerprint-resistant oleophobic coating&lt;/li&gt;&lt;li&gt;Support for display of multiple languages and characters 
simultaneously&lt;/li&gt;&lt;/ul&gt;
				&lt;img id=&quot;display&quot; src=&quot;http://images.apple.com/ipad/specs/images/display_20100127.jpg&quot; alt=&quot;&quot; height=&quot;170&quot; width=&quot;322&quot;&gt;

				&lt;h3&gt;Wireless and Cellular&lt;/h3&gt;
				&lt;h5&gt;Wi-Fi model&lt;/h5&gt;
				&lt;ul class=&quot;square&quot;&gt;&lt;li&gt;Wi-Fi (802.11 a/b/g/n)&lt;/li&gt;&lt;li&gt;Bluetooth 2.1 + EDR technology&lt;/li&gt;&lt;/ul&gt;
				&lt;h5&gt;Wi-Fi + 3G model&lt;/h5&gt;
				&lt;ul class=&quot;square&quot;&gt;&lt;li&gt;UMTS/HSDPA (850, 1900, 2100 MHz)&lt;/li&gt;&lt;li&gt;GSM/EDGE (850, 900,1800, 1900 MHz)&lt;/li&gt;&lt;li&gt;Data only&lt;sup&gt;2&lt;/sup&gt;&lt;/li&gt;&lt;li&gt;Wi-Fi (802.11 a/b/g/n)&lt;/li&gt;&lt;li&gt;Bluetooth 2.1 + EDR technology&lt;/li&gt;&lt;/ul&gt;
				
				&lt;h3&gt;Location&lt;/h3&gt;
				&lt;ul class=&quot;square&quot;&gt;&lt;li&gt;Wi-Fi&lt;/li&gt;&lt;li&gt;Digital compass&lt;/li&gt;&lt;li&gt;Assisted GPS (Wi-Fi + 3G model)&lt;/li&gt;&lt;li&gt;Cellular (Wi-Fi + 3G model)&lt;/li&gt;&lt;/ul&gt;
				
				&lt;h3&gt;In the Box&lt;/h3&gt;
				&lt;ul class=&quot;square&quot;&gt;&lt;li&gt;iPad&lt;/li&gt;&lt;li&gt;Dock connector to USB cable&lt;/li&gt;&lt;li&gt;10W Power Adapter&lt;/li&gt;&lt;li&gt;Documentation&lt;/li&gt;&lt;/ul&gt;
				&lt;img id=&quot;packaging&quot; src=&quot;http://images.apple.com/ipad/specs/images/packaging_20100127.jpg&quot; alt=&quot;&quot; height=&quot;176&quot; width=&quot;328&quot;&gt;
				
				&lt;div id=&quot;environment&quot;&gt;
					&lt;h4&gt;Environmental Status Report&lt;/h4&gt;
					&lt;p&gt;iPad embodies Apple’s continuing environmental progress. It is 
designed with the following features to reduce environmental impact:&lt;/p&gt;
					&lt;ul class=&quot;square&quot;&gt;&lt;li&gt;Arsenic-free display glass&lt;/li&gt;&lt;li&gt;BFR-free&lt;/li&gt;&lt;li&gt;Mercury-free LCD display&lt;/li&gt;&lt;li&gt;PVC-free&lt;/li&gt;&lt;li&gt;Recyclable aluminum and glass enclosure&lt;/li&gt;&lt;/ul&gt;
					
				&lt;/div&gt;
			&lt;/div&gt;

			&lt;div class=&quot;column&quot;&gt;
				&lt;h3&gt;Capacity&lt;sup&gt;3&lt;/sup&gt;&lt;/h3&gt;
				&lt;ul class=&quot;square&quot;&gt;&lt;li&gt;16GB, 32GB, or 64GB flash drive&lt;/li&gt;&lt;/ul&gt;
				
				&lt;h3&gt;Processor&lt;/h3&gt;
				&lt;ul class=&quot;square&quot;&gt;&lt;li&gt;1GHz Apple A4 custom-designed, high-performance, low-power 
system-on-a-chip&lt;/li&gt;&lt;/ul&gt;
				
				&lt;h3&gt;Sensors&lt;/h3&gt;
				&lt;ul class=&quot;square&quot;&gt;&lt;li&gt;Accelerometer&lt;/li&gt;&lt;li&gt;Ambient light sensor&lt;/li&gt;&lt;/ul&gt;
				
				&lt;h3&gt;Audio Playback&lt;/h3&gt;
				&lt;ul class=&quot;square&quot;&gt;&lt;li&gt;Frequency response: 20Hz to 20,000Hz&lt;/li&gt;&lt;li&gt;Audio formats supported: AAC (16 to 320 Kbps), Protected AAC 
(from iTunes Store), MP3 (16 to 320 Kbps), MP3 VBR, Audible (formats 2, 
3, and 4), Apple Lossless, AIFF, and WAV&lt;/li&gt;&lt;li&gt;User-configurable maximum volume limit&lt;/li&gt;&lt;/ul&gt;

				&lt;h3&gt;TV and Video&lt;/h3&gt;
				&lt;ul class=&quot;square&quot;&gt;&lt;li&gt;Support for 1024 x 768 with Dock Connector to VGA adapter; 576p
 and 480p with Apple Composite A/V Cable, 576i and 480i with Apple 
Composite A/V Cable&lt;/li&gt;&lt;li&gt;H.264 video up to 720p, 30 frames per second, Main Profile 
level 3.1 with AAC-LC audio up to 160 Kbps, 48kHz, stereo audio in .m4v,
 .mp4, and .mov file formats; MPEG-4 video, up to 2.5 Mbps, 640 by 480 
pixels, 30 frames per second, Simple Profile with AAC-LC audio up to 160
 Kbps, 48kHz, stereo audio in .m4v, .mp4, and .mov file formats&lt;/li&gt;&lt;/ul&gt;
				
				&lt;h3&gt;Mail attachment support&lt;/h3&gt;
				&lt;ul class=&quot;square&quot;&gt;&lt;li&gt;Viewable document types: .jpg, .tiff, .gif (images); .doc and 
.docx (Microsoft Word); .htm and .html (web pages); .key (Keynote); 
.numbers (Numbers); .pages (Pages); .pdf (Preview and Adobe Acrobat); 
.ppt and .pptx (Microsoft PowerPoint); .txt (text); .rtf (rich text 
format); .vcf (contact information); .xls and .xlsx (Microsoft Excel)&lt;/li&gt;&lt;/ul&gt;
				
				&lt;h3&gt;Languages&lt;/h3&gt;
				&lt;ul class=&quot;square&quot;&gt;&lt;li&gt;Language support for English, French, German, Japanese, Dutch, 
Italian, Spanish, Simplified Chinese, Russian&lt;/li&gt;&lt;li&gt;Keyboard support for English (US) English (UK), French (France,
 Canada), German, Japanese (QWERTY), Dutch, Flemish, Spanish, Italian, 
Simplified Chinese (Handwriting and Pinyin), Russian&lt;/li&gt;&lt;li&gt;Dictionary support for English (US), English (UK), French, 
French (Canadian), French (Swiss), German, Japanese, Dutch, Flemish, 
Spanish, Italian, Simplified Chinese (Handwriting, Pinyin), Russian&lt;/li&gt;&lt;/ul&gt;
				
				&lt;h3&gt;Accessibility&lt;/h3&gt;
				&lt;ul class=&quot;square&quot;&gt;&lt;li&gt;Support for playback of closed-captioned content&lt;/li&gt;&lt;li&gt;VoiceOver screen reader&lt;/li&gt;&lt;li&gt;Full-screen zoom magnification&lt;/li&gt;&lt;li&gt;White on black&lt;/li&gt;&lt;li&gt;Mono audio&lt;/li&gt;&lt;/ul&gt;
			&lt;/div&gt;

			&lt;div class=&quot;column last&quot;&gt;
				&lt;h3&gt;Battery and Power&lt;sup&gt;4&lt;/sup&gt;&lt;/h3&gt;
				&lt;ul class=&quot;square&quot;&gt;&lt;li&gt;Built-in 25Whr rechargeable lithium-polymer battery&lt;/li&gt;&lt;li&gt;Up to 10 hours of surfing the web on Wi-Fi, watching video, or 
listening to music&lt;/li&gt;&lt;li&gt;Charging via power adapter or USB to computer system&lt;/li&gt;&lt;/ul&gt;

				&lt;h3&gt;Input and Output&lt;/h3&gt;
				&lt;ul class=&quot;square&quot;&gt;&lt;li&gt;Dock connector&lt;/li&gt;&lt;li&gt;3.5-mm stereo headphone&amp;nbsp;jack&lt;/li&gt;&lt;li&gt;Built-in speakers&lt;/li&gt;&lt;li&gt;Microphone&lt;/li&gt;&lt;li&gt;SIM card tray (Wi-Fi + 3G model only)&lt;/li&gt;&lt;/ul&gt;

				&lt;h3 class=&quot;clear&quot;&gt;External buttons and controls&lt;/h3&gt;
				&lt;img id=&quot;external&quot; src=&quot;http://images.apple.com/ipad/specs/images/external_20100127.jpg&quot; alt=&quot;&quot; height=&quot;270&quot; width=&quot;265&quot;&gt;
				&lt;ul class=&quot;seeimage&quot;&gt;&lt;li&gt;On/Off, Sleep/wake&lt;/li&gt;&lt;li&gt;Mute&lt;/li&gt;&lt;li&gt;Volume up/down&lt;/li&gt;&lt;li&gt;Home&lt;/li&gt;&lt;/ul&gt;
				
				&lt;h3 id=&quot;macrequirements&quot;&gt;Mac system requirements&lt;/h3&gt;
				&lt;ul class=&quot;square&quot;&gt;&lt;li&gt;Mac computer with USB 2.0 port&lt;/li&gt;&lt;li&gt;Mac OS X v10.5.8 or later&lt;/li&gt;&lt;li&gt;iTunes 9.0 or later (free download from &lt;a onclick=&apos;s_objectID=&quot;http://www.itunes.com/download/_1&quot;;return 
this.s_oc?this.s_oc(e):true&apos; href=&quot;http://www.itunes.com/download/&quot;&gt;www.itunes.com/download&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;iTunes Store account&lt;/li&gt;&lt;li&gt;Internet access&lt;/li&gt;&lt;/ul&gt;

				&lt;h3 id=&quot;winrequirements&quot;&gt;Windows system requirements&lt;/h3&gt;
				&lt;ul class=&quot;square&quot;&gt;&lt;li&gt;PC with USB 2.0 port&lt;/li&gt;&lt;li&gt;Windows 7, Windows Vista; Windows XP Home or Professional with 
Service Pack 3 or later&lt;/li&gt;&lt;li&gt;iTunes 9.0 or later (free download from &lt;a onclick=&apos;s_objectID=&quot;http://www.itunes.com/download/_2&quot;;return 
this.s_oc?this.s_oc(e):true&apos; href=&quot;http://www.itunes.com/download/&quot;&gt;www.itunes.com/download&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;iTunes Store account&lt;/li&gt;&lt;li&gt;Internet access&lt;/li&gt;&lt;/ul&gt;
				
				&lt;h3 id=&quot;envrequirements&quot;&gt;Environmental requirements&lt;/h3&gt;
				&lt;ul class=&quot;square&quot;&gt;&lt;li&gt;Operating temperature: 32° to 95° F (0° to 35°&amp;nbsp;C)&lt;/li&gt;&lt;li&gt;Nonoperating temperature: -4° to 113° F (-20° to 45°&amp;nbsp;C)&lt;/li&gt;&lt;li&gt;Relative humidity: 5% to 95% noncondensing&lt;/li&gt;&lt;li&gt;Maximum operating altitude: 10,000 feet (3000 m)&lt;/li&gt;&lt;/ul&gt;
			&lt;/div&gt;
		&lt;/div&gt;
		
		&lt;div id=&quot;accessories&quot;&gt;
			&lt;h3&gt;iPad Accessories&lt;/h3&gt;
			&lt;div id=&quot;keyboard-dock&quot;&gt;
				&lt;div id=&quot;dock&quot;&gt;
					&lt;div class=&quot;swapView&quot; id=&quot;dock-switch&quot;&gt;&lt;div class=&quot;dock-content&quot; id=&quot;MASKED-keyboard-portrait&quot;&gt;
						&lt;img src=&quot;http://images.apple.com/ipad/specs/images/keyboard_dock_1_20100127.jpg&quot; alt=&quot;&quot; height=&quot;494&quot; width=&quot;508&quot;&gt;
					&lt;/div&gt;&lt;/div&gt;
					
					&lt;div class=&quot;dock-content&quot; id=&quot;MASKED-keyboard-only&quot;&gt;
						&lt;img src=&quot;http://images.apple.com/ipad/specs/images/keyboard_dock_2_20100127.jpg&quot; alt=&quot;&quot; height=&quot;494&quot; width=&quot;508&quot;&gt;
					&lt;/div&gt;
				&lt;/div&gt;
				
				&lt;h4&gt;iPad Keyboard Dock&lt;/h4&gt;
				&lt;p&gt;The Keyboard Dock is a dock for charging your iPad, integrated 
with a full-size keyboard. The dock has a rear 30-pin connector, which 
lets you connect to an electrical outlet using a USB Power Adapter, sync
 to your computer, and use accessories like the Camera Connection Kit. 
And an audio jack lets you connect to a stereo or powered speakers.&lt;/p&gt;
				&lt;p class=&quot;last&quot;&gt;View Gallery:&lt;/p&gt;
				&lt;ul class=&quot;dock-triggers triggers&quot;&gt;&lt;li&gt;&lt;a onclick=&apos;s_objectID=&quot;http://www.apple.com/ipad/specs/#keyboard-portrait_1&quot;;return
 this.s_oc?this.s_oc(e):true&apos; class=&quot;dock-switch active&quot; href=&quot;http://www.apple.com/ipad/specs/#keyboard-portrait&quot;&gt;&lt;img src=&quot;http://images.apple.com/ipad/specs/images/keyboard_dock_1t_20100127.png&quot; alt=&quot;&quot; height=&quot;40&quot; width=&quot;48&quot;&gt;&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;thelast&quot;&gt;&lt;a onclick=&apos;s_objectID=&quot;http://www.apple.com/ipad/specs/#keyboard-only_1&quot;;return
 this.s_oc?this.s_oc(e):true&apos; class=&quot;dock-switch&quot; href=&quot;http://www.apple.com/ipad/specs/#keyboard-only&quot;&gt;&lt;img src=&quot;http://images.apple.com/ipad/specs/images/keyboard_dock_2t_20100127.png&quot; alt=&quot;&quot; height=&quot;40&quot; width=&quot;48&quot;&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
			&lt;/div&gt;
			
			&lt;div id=&quot;ipad-case&quot;&gt;
				&lt;div id=&quot;case&quot;&gt;
					&lt;div class=&quot;swapView&quot; id=&quot;case-switch&quot;&gt;&lt;div class=&quot;case-content&quot; id=&quot;MASKED-case-open&quot;&gt;
						&lt;img src=&quot;http://images.apple.com/ipad/specs/images/case_1_20100127.png&quot; alt=&quot;&quot; height=&quot;440&quot; width=&quot;485&quot;&gt;
					&lt;/div&gt;&lt;/div&gt;
					
					&lt;div class=&quot;case-content&quot; id=&quot;MASKED-case-front&quot;&gt;
						&lt;img src=&quot;http://images.apple.com/ipad/specs/images/case_2_20100127.png&quot; alt=&quot;&quot; height=&quot;440&quot; width=&quot;485&quot;&gt;
					&lt;/div&gt;
					&lt;div class=&quot;case-content&quot; id=&quot;MASKED-case-wedge&quot;&gt;
						&lt;img src=&quot;http://images.apple.com/ipad/specs/images/case_3_20100127.png&quot; alt=&quot;&quot; height=&quot;440&quot; width=&quot;485&quot;&gt;
					&lt;/div&gt;
					&lt;div class=&quot;case-content&quot; id=&quot;MASKED-case-standing&quot;&gt;
						&lt;img src=&quot;http://images.apple.com/ipad/specs/images/case_4_20100127.png&quot; alt=&quot;&quot; height=&quot;440&quot; width=&quot;485&quot;&gt;
					&lt;/div&gt;
					&lt;div class=&quot;case-content&quot; id=&quot;MASKED-case-flat&quot;&gt;
						&lt;img src=&quot;http://images.apple.com/ipad/specs/images/case_5_20100127.png&quot; alt=&quot;&quot; height=&quot;440&quot; width=&quot;485&quot;&gt;
					&lt;/div&gt;
				&lt;/div&gt;
				&lt;div id=&quot;casecopy&quot;&gt;
					&lt;h4&gt;iPad Case&lt;/h4&gt;
					&lt;p&gt;The iPad Case not only protects the iPad, it can be used in 
various positions. So it’s easy to type, look at photos and slideshows, 
or watch movies.&lt;/p&gt;
					&lt;p class=&quot;last&quot;&gt;View Gallery:&lt;/p&gt;
					&lt;ul class=&quot;case-triggers triggers&quot;&gt;&lt;li class=&quot;first&quot;&gt;&lt;a onclick=&apos;s_objectID=&quot;http://www.apple.com/ipad/specs/#case-open_1&quot;;return
 this.s_oc?this.s_oc(e):true&apos; class=&quot;case-switch active&quot; href=&quot;http://www.apple.com/ipad/specs/#case-open&quot;&gt;&lt;img src=&quot;http://images.apple.com/ipad/specs/images/case_1t_20100127.png&quot; alt=&quot;&quot; height=&quot;40&quot; width=&quot;48&quot;&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a onclick=&apos;s_objectID=&quot;http://www.apple.com/ipad/specs/#case-front_1&quot;;return
 this.s_oc?this.s_oc(e):true&apos; class=&quot;case-switch&quot; href=&quot;http://www.apple.com/ipad/specs/#case-front&quot;&gt;&lt;img src=&quot;http://images.apple.com/ipad/specs/images/case_2t_20100127.png&quot; alt=&quot;&quot; height=&quot;40&quot; width=&quot;48&quot;&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a onclick=&apos;s_objectID=&quot;http://www.apple.com/ipad/specs/#case-wedge_1&quot;;return
 this.s_oc?this.s_oc(e):true&apos; class=&quot;case-switch&quot; href=&quot;http://www.apple.com/ipad/specs/#case-wedge&quot;&gt;&lt;img src=&quot;http://images.apple.com/ipad/specs/images/case_3t_20100127.png&quot; alt=&quot;&quot; height=&quot;40&quot; width=&quot;48&quot;&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a onclick=&apos;s_objectID=&quot;http://www.apple.com/ipad/specs/#case-standing_1&quot;;return
 this.s_oc?this.s_oc(e):true&apos; class=&quot;case-switch&quot; href=&quot;http://www.apple.com/ipad/specs/#case-standing&quot;&gt;&lt;img src=&quot;http://images.apple.com/ipad/specs/images/case_4t_20100127.png&quot; alt=&quot;&quot; height=&quot;40&quot; width=&quot;48&quot;&gt;&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;thelast&quot;&gt;&lt;a onclick=&apos;s_objectID=&quot;http://www.apple.com/ipad/specs/#case-flat_1&quot;;return
 this.s_oc?this.s_oc(e):true&apos; class=&quot;case-switch&quot; href=&quot;http://www.apple.com/ipad/specs/#case-flat&quot;&gt;&lt;img src=&quot;http://images.apple.com/ipad/specs/images/case_5t_20100127.png&quot; alt=&quot;&quot; height=&quot;40&quot; width=&quot;48&quot;&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
				&lt;/div&gt;
			&lt;/div&gt;
			
			&lt;div id=&quot;moreaccessories&quot; class=&quot;grid3col&quot;&gt;
				&lt;div class=&quot;column first&quot;&gt;
					&lt;img src=&quot;http://images.apple.com/ipad/specs/images/ipad_dock_20100127.jpg&quot; alt=&quot;&quot; height=&quot;165&quot; width=&quot;250&quot;&gt;
					&lt;h4&gt;iPad Dock&lt;/h4&gt;
					&lt;p&gt;The iPad Dock lets you dock and charge iPad. The rear 30-pin 
connector lets you connect the iPad Dock to an electrical outlet using 
the USB Power Adapter, sync to your computer, and use accessories like 
the Camera Connection Kit. And an audio jack lets you connect to a 
stereo or powered speakers.&lt;/p&gt;
				&lt;/div&gt;
				&lt;div class=&quot;column&quot;&gt;
					&lt;img src=&quot;http://images.apple.com/ipad/specs/images/usb_connectors_20100127.jpg&quot; alt=&quot;&quot; height=&quot;165&quot; width=&quot;230&quot;&gt;
					&lt;h4&gt;iPad Camera Connection Kit&lt;/h4&gt;
					&lt;p&gt;The Camera Connection Kit gives you two ways to import photos 
and videos from a digital camera. The Camera Connector lets you import 
your photos and videos to iPad using the camera’s USB cable. Or you can 
use the SD Card Reader to import photos and videos directly from the 
camera’s SD card.&lt;/p&gt;
				&lt;/div&gt;
				&lt;div class=&quot;column last&quot;&gt;
					&lt;img src=&quot;http://images.apple.com/ipad/specs/images/usb_power_20100127.jpg&quot; alt=&quot;&quot; height=&quot;165&quot; width=&quot;245&quot;&gt;
					&lt;h4&gt;iPad USB Power Adapter&lt;/h4&gt;
					&lt;p&gt;The 10W USB Power Adapter lets you charge your iPad directly 
through an electrical outlet. And the 6 foot long power cable allows you
 to charge it from an even greater distance.&lt;/p&gt;
				&lt;/div&gt;
			&lt;/div&gt;
		&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description>
                        <pubDate>Thu, 28 Jan 2010 08:52:26 +0900</pubDate>
                        <category>iPad</category>
                                </item>
                <item>
            <title>iPad</title>
            <dc:creator>theclub</dc:creator>
            <link>http://jspgeek.com/article/11483</link>
            <guid isPermaLink="true">http://jspgeek.com/article/11483</guid>
                        <comments>http://jspgeek.com/article/11483#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;&lt;div class=&quot;eArea xe_content xe_dr_mov&quot;&gt;&lt;embed wmode=&quot;opaque&quot; src=&quot;http://v.wordpress.com/wp-content/plugins/video/flvplayer.swf?ver=1.15&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; flashvars=&quot;guid=DnLiyQ9N&amp;amp;width=640&amp;amp;height=360&amp;amp;qc_publisherId=p-18-mFEk4J448M&quot; title=&quot;&quot; height=&quot;360&quot; width=&quot;640&quot;&gt;&lt;/div&gt;&lt;/div&gt;</description>
                        <pubDate>Thu, 28 Jan 2010 08:19:43 +0900</pubDate>
                        <category>iPad</category>
                                </item>
                <item>
            <title>[IT수다떨기]모바일 앱스토어 생태계에 ‘풍덩’ 빠져보자</title>
            <dc:creator>theclub</dc:creator>
            <link>http://jspgeek.com/article/9841</link>
            <guid isPermaLink="true">http://jspgeek.com/article/9841</guid>
                        <comments>http://jspgeek.com/article/9841#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;p&gt;출처 : &lt;a target=&quot;_blank&quot; href=&quot;http://www.bloter.net/archives/23062&quot;&gt;http://www.bloter.net/archives/23062&lt;/a&gt;&lt;/p&gt;&lt;p&gt;새로운 바람이 분다. 소프트웨어 개발자 사이에 불고 있는 스마트폰용 애플리케이션 개발 바람이다. 부러운 눈길로 쳐다보고 있다.&lt;/p&gt;
&lt;p&gt;이번 바람은 기존에 있던 소프트웨어 생태계와는 질적으로 다르다는 점에서 주목할 필요가 있다.&lt;/p&gt;
&lt;p&gt;그간 소프트웨어 개발자 지원에 나섰던 IT 업체 담당자들은 더 이상 인재들이 유입되지 않고 있고, 그나마 있던 개발자들도
떠나고 있다고 우려해 왔다. 이같은 상황이 하루 아침에 변하지는 않을 것이다. 오히려 더욱 가속화될 수 있다. 소프트웨어에 대한
가치는 논외로 치더라도 여전히 ‘월화수목금금금’을 감내해야만 한다면 말이다. 정부와 대기업, 중소 소프트웨어 개발업체는 선순환
생태계 마련에 실패했다. 문제를 해결하는 것도 요원하다. 이런 곳에 몸바칠 개발자들이 있다면 오히려 이상할 정도다.&lt;/p&gt;
&lt;p&gt;외국 IT기업의 임원들을 만나 우리나라 소프트웨어 산업에 대한 조언을 부탁할 때마다 빠지지 않는 것이 있다. “처음부터
세계 시장을 겨냥해라. 미리 해외로 나가라”라는 말이다. 그러면서 자주 언급하는 나라가 이스라엘이다. 국내 시장 규모 자체가
너무나 작은 이스라엘은 처음부터 해외로 눈을 돌리고 개발할 수밖에 없는 처지인데 우리도 이를 벤치마킹해 보라는 것이다. 하지만
지난 10년간 IT 분야에서 일해왔지만 그런 업체들은 거의 못봤다. 대부분 국내에서 시작해 일단 관공서에 제품을 공급하고 착실히
점유율을 넓힌 후에 민간 시장에 진출하고 그리고 나서 여유가 되면 해외 시장에 눈을 돌렸다.&lt;/p&gt;
&lt;p&gt;그런데 ‘처음부터 세계시장을 겨냥’할 수 있는 분야가 탄생했다. 바로 모바일 앱스토어 생태계다. 가트너는 지난해 1억8천만
대 가량 판매된 스마트폰이 올해는 2억7천만 대 가량으로 늘어날 것으로 예측했다. 또 스마트폰 운영체제는 심비안과 안드로이드,
리서치인모션, 아이폰, 마이크로소프트 윈도우 폰 등 상위 5대 제품이 전체 시장의 93.9%를 차지할 것으로 내다봤다.모바일
생태계의 선순환 구조를 만들어 낸 애플은 지난 6일 아이폰용 응용프로그램 다운로드가 30억 회를 돌파했다고 밝혔다. 이런 성과가
불과 18개월 만에 나온 결과라는 점에서 전세계 개발자들과 소비자들이 이런 선순환 생태계를 환영하고 있다는 걸 잘 보여주고 있다.&lt;/p&gt;
&lt;p&gt;애플이 신호탄을 쏘아올린 모바일 앱스토어 생태계는 국내 소프트웨어 개발자들에게 새로운 돌파구를 마련해 줬다. 기존 패키지
소프트웨어 업체들이 갔던 길을 그대로 따라가지 않아도 된다. 또 이동통신사에 제품을 제공하기 위해 수많은 시간과 노력과 돈을
허비하지 않아도 된다. 대기업의 횡포도 없다. 오로지 자신의 능력 하나로 전세계 수많은 사용자에게 직접 다가설 수 있게 됐다.
“처음부터 세계 시장을 겨냥”할 딱 들어맞는 분야가 바로 모바일 앱스토어 생태계다. 어디에 좌판을 깔지 스스로 결정하기만 하면
된다.&lt;/p&gt;
&lt;p&gt;1인 창업자들이 쏟아지고 있고, 앱 전문 회사들도 대거 등장할 조짐이다. 시장 변혁기에는 언제나 거품이 끼기 마련이지만
이번 거품은 걱정보다 기대가 크다. 전세계 사용자들의 입맛에 맞는 제품을 만들기 위해서는 기술 못지 않게 사용자들에 대한 분석이
필요하다. 우리나라 개발자들이나 전문 개발회사들은 모바일 애플리케이션을 개발해 가는 과정에서 전세계인들과 소통하기 위해 노력할
것이기 때문이다. 어떤 제품이 인기를 끌고 있는지 발빠르게 파악하고 대응할 것이다.&lt;/p&gt;
&lt;p&gt;우리가 이전에 만나보지 못했던 새로운 유형의 개발자들이 탄생할 것이다. 성공 신화도 만나게 될 것이고 실패 사례도 만날
것이다. 하지만 해외 시장 개척을 위해 ‘눈물 젖은 빵’을 먹어가며, 읍소를 밥먹듯이 하며, ‘월화수목금금금’ 일만 해 왔다는
선배 세대의 성공담은 더 이상 이 분야에서 듣지 않을 것 같다. “즐겁고, 재미나게 만들다 보니 이렇게 됐어요”라는 말들이 더
많아질 것이다.&lt;/p&gt;
&lt;p&gt;기존 산업계는 더욱 긴장을 해야한다. 이미 보유한 인재들을 잡아놓기 위한 방안도 마련해야 하고, 새로운 모바일 앱스토어
생태계를 활용해 새로운 기회를 잡기 위해 머리를 싸매야 한다. 유행처럼 번지는 분야에 사람과 돈이 몰리는 것은 당연하다.
친구따라 강남도 가는 마당에 친구따라 해외 소비자들에게 좌판깔고 지갑을 두둑히 할 수 있는 일에 안 나설 이들이 누가 있겠는가?&lt;/p&gt;
&lt;p&gt;새로운 도전에 걸림돌도 많지만, 올 한해 멋진 도전을 시작하시라. 도전 자체만으로 이미 이전과는 다른 자신을 발견할 것이다. 기술을 가진 이들이 부러운 새해 벽두다.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;</description>
                        <pubDate>Mon, 11 Jan 2010 09:43:47 +0900</pubDate>
                        <category>모바일</category>
                        <category>iphone</category>
                                </item>
                <item>
            <title>Spring JTA TransactionManager config: Supporting both Tomcat and JBoss</title>
            <dc:creator>theclub</dc:creator>
            <link>http://jspgeek.com/article/8573</link>
            <guid isPermaLink="true">http://jspgeek.com/article/8573</guid>
                        <comments>http://jspgeek.com/article/8573#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;출처 : &lt;a target=&quot;_blank&quot; href=&quot;http://stackoverflow.com/questions/117751/spring-jta-transactionmanager-config-supporting-both-tomcat-and-jboss&quot;&gt;http://stackoverflow.com/questions/117751/spring-jta-transactionmanager-config-supporting-both-tomcat-and-jboss&lt;/a&gt;&lt;br&gt;&lt;div class=&quot;post-text&quot;&gt;
                &lt;p&gt;I have a web application
using JPA and JTA with Spring. I would like to support both JBoss and
Tomcat. When running on JBoss, I&apos;d like to use JBoss&apos; own
TransactionManager, and when running on Tomcat, I&apos;d like to use JOTM.&lt;/p&gt;

&lt;p&gt;I have both scenarios working, but I now find that I seem to need
two separate Spring configurations for the two cases. With JOTM, I need
to use Spring&apos;s &lt;code&gt;JotmFactoryBean&lt;/code&gt;:&lt;/p&gt;

&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;bean&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt; &lt;/span&gt;&lt;span class=&quot;atn&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;atv&quot;&gt;&quot;transactionManager&quot;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt; &lt;br&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;atn&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;atv&quot;&gt;&quot;org.springframework.transaction.jta.JtaTransactionManager&quot;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;property&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt; &lt;/span&gt;&lt;span class=&quot;atn&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;atv&quot;&gt;&quot;userTransaction&quot;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;bean&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt; &lt;/span&gt;&lt;span class=&quot;atn&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;atv&quot;&gt;&quot;org.springframework.transaction.jta.JotmFactoryBean&quot;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;/bean&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In JBoss, though, I just need to fetch &quot;TransactionManager&quot; from JNDI:&lt;/p&gt;

&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;bean&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt; &lt;/span&gt;&lt;span class=&quot;atn&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;atv&quot;&gt;&quot;transactionManager&quot;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt; &lt;br&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;atn&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;atv&quot;&gt;&quot;org.springframework.transaction.jta.JtaTransactionManager&quot;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;property&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt; &lt;/span&gt;&lt;span class=&quot;atn&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;atv&quot;&gt;&quot;transactionManager&quot;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;bean&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt; &lt;/span&gt;&lt;span class=&quot;atn&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;atv&quot;&gt;&quot;org.springframework.jndi.JndiObjectFactoryBean&quot;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;property&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt; &lt;/span&gt;&lt;span class=&quot;atn&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;atv&quot;&gt;&quot;resourceRef&quot;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt; &lt;/span&gt;&lt;span class=&quot;atn&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;atv&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt; &lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;property&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt; &lt;/span&gt;&lt;span class=&quot;atn&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;atv&quot;&gt;&quot;jndiName&quot;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt; &lt;/span&gt;&lt;span class=&quot;atn&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;atv&quot;&gt;&quot;TransactionManager&quot;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt; &lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;property&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt; &lt;/span&gt;&lt;span class=&quot;atn&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;atv&quot;&gt;&quot;expectedType&quot;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt; &lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;atn&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;atv&quot;&gt;&quot;javax.transaction.TransactionManager&quot;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt; &lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;/bean&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;/bean&amp;gt;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Is there a way to configure this so that the appropriate
TransactionManager - JBoss or JOTM - is used, without the need for two
different configuration files?&lt;/p&gt;

            &lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description>
                        <pubDate>Fri, 25 Dec 2009 18:54:26 +0900</pubDate>
                        <category>JTA TransactionManager</category>
                        <category>Spring</category>
                        <category>JBoss</category>
                        <category>Tomcat</category>
                                </item>
                <item>
            <title>New Features and Enhancements in Spring 3.0</title>
            <dc:creator>theclub</dc:creator>
            <link>http://jspgeek.com/article/7864</link>
            <guid isPermaLink="true">http://jspgeek.com/article/7864</guid>
                        <comments>http://jspgeek.com/article/7864#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;p&gt;출처 : &lt;a target=&quot;_blank&quot; href=&quot;http://static.springsource.org/spring/docs/3.0.0.RELEASE/reference/html/new-in-3.html&quot;&gt;http://static.springsource.org/spring/docs/3.0.0.RELEASE/reference/html/new-in-3.html&lt;/a&gt;&lt;/p&gt;&lt;h2 class=&quot;title&quot;&gt;2.&amp;nbsp;New Features and Enhancements in Spring 3.0&lt;/h2&gt;&lt;p&gt;If you have been using the Spring Framework for some time, you will be
  aware that Spring has undergone two major revisions: Spring 2.0, released in
  October 2006, and Spring 2.5, released in November 2007. It is now time for
  a third overhaul resulting in Spring 3.0.&lt;/p&gt;&lt;div class=&quot;sidebar&quot;&gt;&lt;a name=&quot;new-in-3-intro-java&quot;&gt;&lt;/a&gt;&lt;p class=&quot;title&quot;&gt;&lt;b&gt;Java SE and Java EE Support&lt;/b&gt;&lt;/p&gt;&lt;p&gt;The Spring Framework is now based on Java 5, and Java 6 is fully
    supported.&lt;/p&gt;&lt;p&gt;Furthermore, Spring is compatible with J2EE 1.4 and Java EE 5, while
    at the same time introducing some early support for Java EE 6.&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;section&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;titlepage&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;h2 class=&quot;title&quot; style=&quot;clear: both;&quot;&gt;&lt;a name=&quot;new-in-3-intro&quot;&gt;&lt;/a&gt;2.1&amp;nbsp;Java 5&lt;/h2&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;The entire framework code has been revised to take advantage of Java
    5 features like generics, varargs and other language improvements. We have
    done our best to still keep the code backwards compatible. We now have
    consistent use of generic Collections and Maps, consistent use of generic
    FactoryBeans, and also consistent resolution of bridge methods in the
    Spring AOP API. Generic ApplicationListeners automatically receive
    specific event types only. All callback interfaces such as
    TransactionCallback and HibernateCallback declare a generic result value
    now. Overall, the Spring core codebase is now freshly revised and
    optimized for Java 5.&lt;/p&gt;&lt;p&gt;Spring&apos;s TaskExecutor abstraction has been updated for close
    integration with Java 5&apos;s java.util.concurrent facilities. We provide
    first-class support for Callables and Futures now, as well as
    ExecutorService adapters, ThreadFactory integration, etc. This has been
    aligned with JSR-236 (Concurrency Utilities for Java EE 6) as far as
    possible. Furthermore, we provide support for asynchronous method
    invocations through the use of the new @Async annotation (or EJB 3.1&apos;s
    @Asynchronous annotation).&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;section&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;titlepage&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;h2 class=&quot;title&quot; style=&quot;clear: both;&quot;&gt;&lt;a name=&quot;new-in-3-improved-docs&quot;&gt;&lt;/a&gt;2.2&amp;nbsp;Improved documentation&lt;/h2&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;The Spring reference documentation has also substantially been
    updated to reflect all of the changes and new features for Spring 3.0.
    While every effort has been made to ensure that there are no errors in
    this documentation, some errors may nevertheless have crept in. If you do
    spot any typos or even more serious errors, and you can spare a few cycles
    during lunch, please do bring the error to the attention of the Spring
    team by &lt;a class=&quot;ulink&quot; href=&quot;http://jira.springframework.org/&quot; target=&quot;_top&quot;&gt;raising an
    issue&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;section&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;titlepage&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;h2 class=&quot;title&quot; style=&quot;clear: both;&quot;&gt;&lt;a name=&quot;new-in-3-new-tutorial&quot;&gt;&lt;/a&gt;2.3&amp;nbsp;New getting started tutorial&lt;/h2&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;There is now a new getting started tutorial for developing a basic
    Spring 3.0 MVC web application. This tutorial is a separate document that
    can be found at the &lt;a class=&quot;ulink&quot; href=&quot;http://www.springsource.org/documentation&quot; target=&quot;_top&quot;&gt; Spring
    Documentation&lt;/a&gt; page.&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;section&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;titlepage&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;h2 class=&quot;title&quot; style=&quot;clear: both;&quot;&gt;&lt;a name=&quot;new-in-3-modules-build&quot;&gt;&lt;/a&gt;2.4&amp;nbsp;New module organization and build system&lt;/h2&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;The framework modules have been revised and are now managed
    separately with one source-tree per module jar:&lt;/p&gt;&lt;div class=&quot;itemizedlist&quot;&gt;&lt;ul type=&quot;disc&quot;&gt;&lt;li&gt;&lt;p&gt;org.springframework.aop&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;org.springframework.beans&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;org.springframework.context&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;org.springframework.context.support&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;org.springframework.expression&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;org.springframework.instrument&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;org.springframework.jdbc&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;org.springframework.jms&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;org.springframework.orm&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;org.springframework.oxm&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;org.springframework.test&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;org.springframework.transaction&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;org.springframework.web&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;org.springframework.web.portlet&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;org.springframework.web.servlet&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;org.springframework.web.struts&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class=&quot;sidebar&quot;&gt;&lt;a name=&quot;new-in-3-intro-spring-jar&quot;&gt;&lt;/a&gt;&lt;p class=&quot;title&quot;&gt;&lt;b&gt;Note:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;The spring.jar artifact that contained almost the entire framework
      is no longer provided.&lt;/p&gt;&lt;/div&gt;&lt;p&gt;We are now using a new Spring build system as known from Spring Web
    Flow 2.0. This gives us:&lt;/p&gt;&lt;div class=&quot;itemizedlist&quot;&gt;&lt;ul type=&quot;disc&quot;&gt;&lt;li&gt;&lt;p&gt;Ivy-based &quot;Spring Build&quot; system&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;consistent deployment procedure&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;consistent dependency management&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;consistent generation of OSGi manifests&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;section&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;titlepage&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;h2 class=&quot;title&quot; style=&quot;clear: both;&quot;&gt;&lt;a name=&quot;new-in-3-features-overview&quot;&gt;&lt;/a&gt;2.5&amp;nbsp;Overview of new features&lt;/h2&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;This is a list of new features for Spring 3.0. We will cover these
    features in more detail later in this section.&lt;/p&gt;&lt;div class=&quot;itemizedlist&quot;&gt;&lt;ul type=&quot;disc&quot;&gt;&lt;li&gt;&lt;p&gt;Spring Expression Language&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;IoC enhancements/Java based bean metadata&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;General-purpose type conversion system and field formatting
        system&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Object to XML mapping functionality (OXM) moved from Spring Web
        Services project&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Comprehensive REST support&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;@MVC additions&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Declarative model validation&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Early support for Java EE 6&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Embedded database support&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class=&quot;section&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;titlepage&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;h3 class=&quot;title&quot;&gt;&lt;a name=&quot;new-feature-java5&quot;&gt;&lt;/a&gt;2.5.1&amp;nbsp;Core APIs updated for Java 5&lt;/h3&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;BeanFactory interface returns typed bean instances as far as
      possible: &lt;/p&gt;&lt;div class=&quot;itemizedlist&quot;&gt;&lt;ul type=&quot;disc&quot;&gt;&lt;li&gt;&lt;p&gt;T getBean(Class&amp;lt;T&amp;gt; requiredType)&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;T getBean(String name, Class&amp;lt;T&amp;gt; requiredType)&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Map&amp;lt;String, T&amp;gt; getBeansOfType(Class&amp;lt;T&amp;gt;
            type)&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;p&gt;Spring&apos;s TaskExecutor interface now extends
      &lt;code class=&quot;classname&quot;&gt;java.util.concurrent.Executor&lt;/code&gt;: &lt;/p&gt;&lt;div class=&quot;itemizedlist&quot;&gt;&lt;ul type=&quot;disc&quot;&gt;&lt;li&gt;&lt;p&gt;extended AsyncTaskExecutor supports standard Callables with
            Futures&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;p&gt;New Java 5 based converter API and SPI: &lt;/p&gt;&lt;div class=&quot;itemizedlist&quot;&gt;&lt;ul type=&quot;disc&quot;&gt;&lt;li&gt;&lt;p&gt;stateless ConversionService and Converters&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;superseding standard JDK PropertyEditors&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;p&gt;Typed ApplicationListener&amp;lt;E&amp;gt;&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;section&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;titlepage&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;h3 class=&quot;title&quot;&gt;&lt;a name=&quot;new-feature-el&quot;&gt;&lt;/a&gt;2.5.2&amp;nbsp;Spring Expression Language&lt;/h3&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Spring introduces an expression language which is similar to
      Unified EL in its syntax but offers significantly more features. The
      expression language can be used when defining XML and Annotation based
      bean definitions and also serves as the foundation for expression
      language support across the Spring portfolio. Details of this new
      functionality can be found in the chapter &lt;a class=&quot;link&quot; href=&quot;http://static.springsource.org/spring/docs/3.0.0.RELEASE/reference/htmlsingle/spring-framework-reference.html#expressions&quot; title=&quot;6.&amp;nbsp;Spring Expression Language (SpEL)&quot;&gt;Spring Expression Language (SpEL).&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The Spring Expression Language was created to provide the Spring
      community a single, well supported expression language that can be used
      across all the products in the Spring portfolio. Its language features
      are driven by the requirements of the projects in the Spring portfolio,
      including tooling requirements for code completion support within the
      Eclipse based &lt;a class=&quot;ulink&quot; href=&quot;http://www.springsource.com/products/sts&quot; target=&quot;_top&quot;&gt;SpringSource
      Tool Suite&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The following is an example of how the Expression Language can be
      used to configure some properties of a database setup &lt;/p&gt;&lt;pre class=&quot;programlisting&quot;&gt;&amp;lt;&lt;span class=&quot;hl-tag&quot;&gt;bean&lt;/span&gt; &lt;span class=&quot;hl-attribute&quot;&gt;class&lt;/span&gt;=&lt;span class=&quot;hl-value&quot;&gt;&quot;mycompany.RewardsTestDatabase&quot;&lt;/span&gt;&amp;gt;&lt;br&gt;    &amp;lt;&lt;span class=&quot;hl-tag&quot;&gt;property&lt;/span&gt; &lt;span class=&quot;hl-attribute&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;hl-value&quot;&gt;&quot;databaseName&quot;&lt;/span&gt;&lt;br&gt;        &lt;span class=&quot;hl-attribute&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;hl-value&quot;&gt;&quot;#{systemProperties.databaseName}&quot;&lt;/span&gt;/&amp;gt;&lt;br&gt;    &amp;lt;&lt;span class=&quot;hl-tag&quot;&gt;property&lt;/span&gt; &lt;span class=&quot;hl-attribute&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;hl-value&quot;&gt;&quot;keyGenerator&quot;&lt;/span&gt;&lt;br&gt;        &lt;span class=&quot;hl-attribute&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;hl-value&quot;&gt;&quot;#{strategyBean.databaseKeyGenerator}&quot;&lt;/span&gt;/&amp;gt;&lt;br&gt;&amp;lt;&lt;span class=&quot;hl-tag&quot;&gt;/bean&lt;/span&gt;&amp;gt;&lt;br&gt;&lt;/pre&gt;&lt;p&gt;This functionality is also available if you prefer to configure
      your components using annotations: &lt;/p&gt;&lt;pre class=&quot;programlisting&quot;&gt;@Repository &lt;br&gt;&lt;span class=&quot;hl-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hl-keyword&quot;&gt;class&lt;/span&gt; RewardsTestDatabase {&lt;br&gt;&lt;br&gt;    @Value(&lt;span class=&quot;hl-string&quot;&gt;&quot;#{systemProperties.databaseName}&quot;&lt;/span&gt;)&lt;br&gt;    &lt;span class=&quot;hl-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hl-keyword&quot;&gt;void&lt;/span&gt; setDatabaseName(String dbName) { … }&lt;br&gt;&lt;br&gt;    @Value(&lt;span class=&quot;hl-string&quot;&gt;&quot;#{strategyBean.databaseKeyGenerator}&quot;&lt;/span&gt;)&lt;br&gt;    &lt;span class=&quot;hl-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hl-keyword&quot;&gt;void&lt;/span&gt; setKeyGenerator(KeyGenerator kg) { … }&lt;br&gt;}&lt;br&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&quot;section&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;titlepage&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;h3 class=&quot;title&quot;&gt;&lt;a name=&quot;new-feature-java-config&quot;&gt;&lt;/a&gt;2.5.3&amp;nbsp;The Inversion of Control (IoC) container&lt;/h3&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;section&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;titlepage&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;h4 class=&quot;title&quot;&gt;&lt;a name=&quot;new-java-configuration&quot;&gt;&lt;/a&gt;2.5.3.1&amp;nbsp;Java based bean metadata&lt;/h4&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Some core features from the &lt;a class=&quot;ulink&quot; href=&quot;http://www.springsource.org/javaconfig&quot; target=&quot;_top&quot;&gt;JavaConfig&lt;/a&gt;
        project have been added to the Spring Framework now. This means that
        the following annotations are now directly supported: &lt;/p&gt;&lt;div class=&quot;itemizedlist&quot;&gt;&lt;ul type=&quot;disc&quot;&gt;&lt;li&gt;&lt;p&gt;@Configuration&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;@Bean&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;@DependsOn&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;@Primary&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;@Lazy&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;@Import&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;@ImportResource&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;@Value&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;p&gt;Here is an example of a Java class providing basic configuration
        using the new JavaConfig features: &lt;/p&gt;&lt;pre class=&quot;programlisting&quot;&gt;&lt;span class=&quot;hl-keyword&quot;&gt;package&lt;/span&gt; org.example.config;&lt;br&gt;&lt;br&gt;@Configuration&lt;br&gt;&lt;span class=&quot;hl-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hl-keyword&quot;&gt;class&lt;/span&gt; AppConfig {&lt;br&gt;    &lt;span class=&quot;hl-keyword&quot;&gt;private&lt;/span&gt; @Value(&lt;span class=&quot;hl-string&quot;&gt;&quot;#{jdbcProperties.url}&quot;&lt;/span&gt;) String jdbcUrl;&lt;br&gt;    &lt;span class=&quot;hl-keyword&quot;&gt;private&lt;/span&gt; @Value(&lt;span class=&quot;hl-string&quot;&gt;&quot;#{jdbcProperties.username}&quot;&lt;/span&gt;) String username;&lt;br&gt;    &lt;span class=&quot;hl-keyword&quot;&gt;private&lt;/span&gt; @Value(&lt;span class=&quot;hl-string&quot;&gt;&quot;#{jdbcProperties.password}&quot;&lt;/span&gt;) String password;&lt;br&gt;&lt;br&gt;    @Bean&lt;br&gt;    &lt;span class=&quot;hl-keyword&quot;&gt;public&lt;/span&gt; FooService fooService() {&lt;br&gt;        &lt;span class=&quot;hl-keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;hl-keyword&quot;&gt;new&lt;/span&gt; FooServiceImpl(fooRepository());&lt;br&gt;    }&lt;br&gt;&lt;br&gt;    @Bean&lt;br&gt;    &lt;span class=&quot;hl-keyword&quot;&gt;public&lt;/span&gt; FooRepository fooRepository() {&lt;br&gt;        &lt;span class=&quot;hl-keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;hl-keyword&quot;&gt;new&lt;/span&gt; HibernateFooRepository(sessionFactory());&lt;br&gt;    }&lt;br&gt;&lt;br&gt;    @Bean&lt;br&gt;    &lt;span class=&quot;hl-keyword&quot;&gt;public&lt;/span&gt; SessionFactory sessionFactory() {&lt;br&gt;        &lt;span class=&quot;hl-comment&quot;&gt;// wire up a session factory&lt;/span&gt;&lt;br&gt;        AnnotationSessionFactoryBean asFactoryBean = &lt;br&gt;            &lt;span class=&quot;hl-keyword&quot;&gt;new&lt;/span&gt; AnnotationSessionFactoryBean();&lt;br&gt;        asFactoryBean.setDataSource(dataSource());&lt;br&gt;        &lt;span class=&quot;hl-comment&quot;&gt;// additional config&lt;/span&gt;&lt;br&gt;        &lt;span class=&quot;hl-keyword&quot;&gt;return&lt;/span&gt; asFactoryBean.getObject();&lt;br&gt;    }&lt;br&gt;&lt;br&gt;    @Bean&lt;br&gt;    &lt;span class=&quot;hl-keyword&quot;&gt;public&lt;/span&gt; DataSource dataSource() { &lt;br&gt;        &lt;span class=&quot;hl-keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;hl-keyword&quot;&gt;new&lt;/span&gt; DriverManagerDataSource(jdbcUrl, username, password);&lt;br&gt;    }&lt;br&gt;}&lt;br&gt;&lt;/pre&gt;&lt;p&gt; To get this to work you need to add the following component
        scanning entry in your minimal application context XML file.
        &lt;/p&gt;&lt;pre class=&quot;programlisting&quot;&gt;&amp;lt;&lt;span class=&quot;hl-tag&quot;&gt;context:component-scan&lt;/span&gt; &lt;span class=&quot;hl-attribute&quot;&gt;base-package&lt;/span&gt;=&lt;span class=&quot;hl-value&quot;&gt;&quot;org.example.config&quot;&lt;/span&gt;/&amp;gt;&lt;br&gt;&amp;lt;&lt;span class=&quot;hl-tag&quot;&gt;util:properties&lt;/span&gt; &lt;span class=&quot;hl-attribute&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;hl-value&quot;&gt;&quot;jdbcProperties&quot;&lt;/span&gt; &lt;span class=&quot;hl-attribute&quot;&gt;location&lt;/span&gt;=&lt;span class=&quot;hl-value&quot;&gt;&quot;classpath:org/example/config/jdbc.properties&quot;&lt;/span&gt;/&amp;gt;&lt;br&gt;        &lt;/pre&gt;&lt;p&gt;
        Or you can bootstrap a &lt;code class=&quot;literal&quot;&gt;@Configuration&lt;/code&gt; class directly using
        &lt;code class=&quot;literal&quot;&gt;AnnotationConfigApplicationContext&lt;/code&gt;:
        &lt;/p&gt;&lt;pre class=&quot;programlisting&quot;&gt;&lt;span class=&quot;hl-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hl-keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hl-keyword&quot;&gt;void&lt;/span&gt; main(String[] args) {&lt;br&gt;    ApplicationContext ctx = &lt;span class=&quot;hl-keyword&quot;&gt;new&lt;/span&gt; AnnotationConfigApplicationContext(AppConfig.&lt;span class=&quot;hl-keyword&quot;&gt;class&lt;/span&gt;);&lt;br&gt;    FooService fooService = ctx.getBean(FooService.&lt;span class=&quot;hl-keyword&quot;&gt;class&lt;/span&gt;);&lt;br&gt;    fooService.doStuff();&lt;br&gt;}&lt;/pre&gt;&lt;p&gt;
        See &lt;a class=&quot;xref&quot; href=&quot;http://static.springsource.org/spring/docs/3.0.0.RELEASE/reference/htmlsingle/spring-framework-reference.html#beans-java-instantiating-container&quot; title=&quot;3.11.2&amp;nbsp;Instantiating the Spring container using AnnotationConfigApplicationContext&quot;&gt;Section&amp;nbsp;3.11.2, “Instantiating the Spring container using
      AnnotationConfigApplicationContext”&lt;/a&gt; for full information on
        &lt;code class=&quot;literal&quot;&gt;AnnotationConfigApplicationContext&lt;/code&gt;.&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;section&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;titlepage&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;h4 class=&quot;title&quot;&gt;&lt;a name=&quot;d0e1125&quot;&gt;&lt;/a&gt;2.5.3.2&amp;nbsp;Defining bean metadata within components&lt;/h4&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code class=&quot;literal&quot;&gt;@Bean&lt;/code&gt; annotated methods are also supported
        inside Spring components. They contribute a factory bean definition to
        the container. See &lt;a class=&quot;link&quot; href=&quot;http://static.springsource.org/spring/docs/3.0.0.RELEASE/reference/htmlsingle/spring-framework-reference.html#beans-factorybeans-annotations&quot; title=&quot;3.10.4&amp;nbsp;Defining bean metadata within components&quot;&gt;Defining bean metadata within
        components&lt;/a&gt; for more information&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;section&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;titlepage&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;h3 class=&quot;title&quot;&gt;&lt;a name=&quot;new-feature-convert-and-format&quot;&gt;&lt;/a&gt;2.5.4&amp;nbsp;General purpose type conversion system and field formatting
      system&lt;/h3&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;A general purpose &lt;a class=&quot;link&quot; href=&quot;http://static.springsource.org/spring/docs/3.0.0.RELEASE/reference/htmlsingle/spring-framework-reference.html#core-convert&quot; title=&quot;5.5&amp;nbsp;Spring 3 Type Conversion&quot;&gt;type conversion
      system&lt;/a&gt; has been introduced. The system is currently used by SpEL
      for type conversion, and may also be used by a Spring Container and DataBinder when
      binding bean property values.&lt;/p&gt;&lt;p&gt;In addition, a &lt;a class=&quot;link&quot; href=&quot;http://static.springsource.org/spring/docs/3.0.0.RELEASE/reference/htmlsingle/spring-framework-reference.html#format&quot; title=&quot;5.6&amp;nbsp;Spring 3 Field Formatting&quot;&gt;formatter&lt;/a&gt; SPI
      has been introduced for formatting field values. This SPI provides
      a simpler and more robust alternative to JavaBean PropertyEditors for use in client
      environments such as Spring MVC.&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;section&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;titlepage&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;h3 class=&quot;title&quot;&gt;&lt;a name=&quot;new-feature-oxm&quot;&gt;&lt;/a&gt;2.5.5&amp;nbsp;The Data Tier&lt;/h3&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Object to XML mapping functionality (OXM) from the Spring Web
      Services project has been moved to the core Spring Framework now. The
      functionality is found in the &lt;code class=&quot;literal&quot;&gt;org.springframework.oxm&lt;/code&gt;
      package. More information on the use of the &lt;code class=&quot;literal&quot;&gt;OXM&lt;/code&gt;
      module can be found in the &lt;a class=&quot;link&quot; href=&quot;http://static.springsource.org/spring/docs/3.0.0.RELEASE/reference/htmlsingle/spring-framework-reference.html#oxm&quot; title=&quot;14.&amp;nbsp;Marshalling XML using O/X Mappers&quot;&gt;Marshalling XML using O/X
      Mappers&lt;/a&gt; chapter.&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;section&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;titlepage&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;h3 class=&quot;title&quot;&gt;&lt;a name=&quot;new-feature-rest&quot;&gt;&lt;/a&gt;2.5.6&amp;nbsp;The Web Tier&lt;/h3&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;The most exciting new feature for the Web Tier is the support for
      building RESTful web services and web applications. There are also some
      new annotations that can be used in any web application.&lt;/p&gt;&lt;div class=&quot;section&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;titlepage&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;h4 class=&quot;title&quot;&gt;&lt;a name=&quot;d0e1167&quot;&gt;&lt;/a&gt;2.5.6.1&amp;nbsp;Comprehensive REST support&lt;/h4&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Server-side support for building RESTful applications has been
        provided as an extension of the existing annotation driven MVC web
        framework. Client-side support is provided by the
        &lt;code class=&quot;classname&quot;&gt;RestTemplate&lt;/code&gt; class in the spirit of other
        template classes such as &lt;code class=&quot;classname&quot;&gt;JdbcTemplate&lt;/code&gt; and
        &lt;code class=&quot;classname&quot;&gt;JmsTemplate&lt;/code&gt;. Both server and client side REST
        functionality make use of
        &lt;code class=&quot;interfacename&quot;&gt;HttpConverter&lt;/code&gt;s to facilitate the
        conversion between objects and their representation in HTTP requests
        and responses.&lt;/p&gt;&lt;p&gt;The &lt;code class=&quot;classname&quot;&gt;MarshallingHttpMessageConverter&lt;/code&gt; uses
        the &lt;span class=&quot;emphasis&quot;&gt;&lt;em&gt;Object to XML mapping&lt;/em&gt;&lt;/span&gt; functionality mentioned
        earlier.&lt;/p&gt;&lt;p&gt;Refer to the sections on &lt;a class=&quot;link&quot; href=&quot;http://static.springsource.org/spring/docs/3.0.0.RELEASE/reference/htmlsingle/spring-framework-reference.html#mvc&quot; title=&quot;15.&amp;nbsp;Web MVC framework&quot;&gt;MVC&lt;/a&gt; and &lt;a class=&quot;link&quot; href=&quot;http://static.springsource.org/spring/docs/3.0.0.RELEASE/reference/htmlsingle/spring-framework-reference.html#rest-resttemplate&quot; title=&quot;19.9.1&amp;nbsp;RestTemplate&quot;&gt;the RestTemplate&lt;/a&gt; for more
        information.&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;section&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;titlepage&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;h4 class=&quot;title&quot;&gt;&lt;a name=&quot;d0e1200&quot;&gt;&lt;/a&gt;2.5.6.2&amp;nbsp;@MVC additions&lt;/h4&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;A &lt;code class=&quot;literal&quot;&gt;mvc&lt;/code&gt; namespace has been introduced that greatly simplifies Spring MVC configuration.&lt;/p&gt;&lt;p&gt;Additional annotations such as
        &lt;code class=&quot;classname&quot;&gt;@CookieValue&lt;/code&gt; and
        &lt;code class=&quot;classname&quot;&gt;@RequestHeaders&lt;/code&gt; have been added. See &lt;a class=&quot;link&quot; href=&quot;http://static.springsource.org/spring/docs/3.0.0.RELEASE/reference/htmlsingle/spring-framework-reference.html#mvc-ann-cookievalue&quot; title=&quot;15.3.2.9&amp;nbsp;Mapping cookie values with the @CookieValue annotation&quot;&gt;Mapping cookie values with the
        @CookieValue annotation&lt;/a&gt; and &lt;a class=&quot;link&quot; href=&quot;http://static.springsource.org/spring/docs/3.0.0.RELEASE/reference/htmlsingle/spring-framework-reference.html#mvc-ann-requestheader&quot; title=&quot;15.3.2.10&amp;nbsp;Mapping request header attributes with the @RequestHeader annotation&quot;&gt;Mapping request header attributes with
        the @RequestHeader annotation&lt;/a&gt; for more information.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;section&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;titlepage&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;h3 class=&quot;title&quot;&gt;&lt;a name=&quot;new-feature-validation&quot;&gt;&lt;/a&gt;2.5.7&amp;nbsp;Declarative model validation&lt;/h3&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Several &lt;a class=&quot;link&quot; href=&quot;http://static.springsource.org/spring/docs/3.0.0.RELEASE/reference/htmlsingle/spring-framework-reference.html#validation-beanvalidation&quot; title=&quot;5.7&amp;nbsp;Spring 3 Validation&quot;&gt;validation enhancements&lt;/a&gt;,
      including JSR 303 support that uses Hibernate Validator as the default provider.&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;section&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;titlepage&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;h3 class=&quot;title&quot;&gt;&lt;a name=&quot;new-feature-jee-6&quot;&gt;&lt;/a&gt;2.5.8&amp;nbsp;Early support for Java EE 6&lt;/h3&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;We provide support for asynchronous method invocations through the
      use of the new @Async annotation (or EJB 3.1&apos;s @Asynchronous
      annotation).&lt;/p&gt;&lt;p&gt;JSR 303, JSF 2.0, JPA 2.0, etc&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;section&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;titlepage&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;h3 class=&quot;title&quot;&gt;&lt;a name=&quot;new-feature-embedded-databases&quot;&gt;&lt;/a&gt;2.5.9&amp;nbsp;Support for embedded databases&lt;/h3&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Convenient support for &lt;a class=&quot;link&quot; href=&quot;http://static.springsource.org/spring/docs/3.0.0.RELEASE/reference/htmlsingle/spring-framework-reference.html#jdbc-embedded-database-support&quot; title=&quot;12.8&amp;nbsp;Embedded database support&quot;&gt;embedded Java database
      engines&lt;/a&gt;, including HSQL, H2, and Derby, is now provided.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description>
                        <pubDate>Fri, 18 Dec 2009 10:19:19 +0900</pubDate>
                        <category>Spring 3.0</category>
                                </item>
                <item>
            <title>url-pattern에서 / 와 /*의 차이점</title>
            <dc:creator>theclub</dc:creator>
            <link>http://jspgeek.com/article/6945</link>
            <guid isPermaLink="true">http://jspgeek.com/article/6945</guid>
                        <comments>http://jspgeek.com/article/6945#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;p&gt;Spring framework이 유행하고 REST Style URL이 유행하면서 직면하는 문제가 하나 있다.&lt;br&gt;&lt;br&gt;다음과 같은 url로 서비스를 한다고 가정해보자.&lt;br&gt;/article&lt;br&gt;/article/1&lt;br&gt;/article/add&lt;br&gt;&lt;br&gt;음 갈끔한 URL이다. ㅋ&lt;br&gt;&lt;br&gt;그러면 web.xml에 다음과 같이 url-pattern을 설정하게 된다.&lt;br&gt;&lt;br&gt;&amp;lt;servlet&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;servlet-name&amp;gt;dispatcher&amp;lt;/servlet-name&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;servlet-class&amp;gt;org.springframework.web.servlet.DispatcherServlet&amp;lt;/servlet-class&amp;gt;&lt;br&gt;&amp;lt;/servlet&amp;gt;&lt;br&gt;&amp;lt;servlet-mapping&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;servlet-name&amp;gt;dispatcher&amp;lt;/servlet-name&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;&lt;br&gt;&amp;lt;/servlet-mapping&amp;gt;&lt;br&gt;&lt;br&gt;REST Style의 url을 가져야 함으로 url-pattern은 /* 처럼 걸어야 한다.&lt;br&gt;.do와 같은 확장자를 가져서는 안된다. &amp;lt;-- 촌스러... ㅋㅋ&lt;br&gt;&lt;br&gt;아 물론 viewResolver는 간단히 아래처럼 걸었다. 물론 default다. 흐&lt;br&gt;&lt;br&gt;&amp;lt;!-- viewResolver --&amp;gt;&lt;br&gt;&amp;lt;bean id=&quot;viewResolver&quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; class=&quot;org.springframework.web.servlet.view.UrlBasedViewResolver&quot;&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name=&quot;viewClass&quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; value=&quot;org.springframework.web.servlet.view.JstlView&quot; /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name=&quot;prefix&quot; value=&quot;/WEB-INF/jsp/&quot; /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name=&quot;suffix&quot; value=&quot;.jsp&quot; /&amp;gt;&lt;br&gt;&amp;lt;/bean&amp;gt;&lt;br&gt;&lt;br&gt;이렇게 하고 /article을 호출하면, 다음과 같은 에러를 만나게 된다.&lt;br&gt;&lt;br style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;경고: No mapping found for HTTP request with URI [/WEB-INF/jsp/article.jsp] in DispatcherServlet with name &apos;dispatcher&apos;&lt;/span&gt;&lt;br&gt;&lt;br&gt;흐... RequestMapping를 타고나서, jsp를 호출하려고 하였더니, /* url-pattern에 걸려들어 에러가 나는 것이다.&lt;br&gt;&lt;br&gt;이를 어쩌란 말인가??? 흐&lt;br&gt;&lt;br&gt;여기서 등장하는 것이 우리의 servlet spec이다.&lt;br&gt;&lt;br&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;SRV.11.2 Specification of Mappings&lt;/span&gt; 를 보면 아래와 같이 나와 있다.&lt;br&gt;&lt;br&gt;In theWeb application deployment descriptor, the following syntax is used to define mappings:&lt;br&gt;1. A string beginning with a ‘/’ character and ending with a ‘/*’ suffix is used for path mapping.&lt;br&gt;2. A string beginning with a ‘*.’ prefix is used as an extension mapping.&lt;br&gt;3. A string containing only the ’/’ character indicates the &quot;default&quot; servlet of the application. In this case the servlet path is the request URI minus the context path and the path info is null.&lt;br&gt;4. All other strings are used for exact matches only.&lt;br&gt;&lt;br&gt;1, 2, 4는 알겠는데, 3번은 좀 그렇다. ㅋ 우리의 주인공은 바로 이 3번이다. 3번을 보면 &apos;/&apos;만 딸랑 있을 경우에는 default servlet를 탄다고 한다. 아 그런데 그래서 뭐? default servlet이 먼데? 뭘 어쩌라는 거야?&lt;br&gt;&lt;br&gt;ㅋ, 아! 톰켓을 참조하도록 하자. 톰켓의 conf/web.xml를 열어서 default servlet을 찾아보자. 그러면 주석에 이런 말이 나온다.&lt;br&gt;&lt;br&gt;&amp;lt;!-- The default servlet for all web applications, that serves static&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; --&amp;gt;&lt;br&gt;&amp;lt;!-- resources.&amp;nbsp; It processes all requests that are not mapped to other&amp;nbsp;&amp;nbsp; --&amp;gt;&lt;br&gt;&amp;lt;!-- servlets with servlet mappings (defined either here or in your own&amp;nbsp;&amp;nbsp; --&amp;gt;&lt;br&gt;&amp;lt;!-- web.xml file.&amp;nbsp; This servlet supports the following initialization&amp;nbsp;&amp;nbsp;&amp;nbsp; --&amp;gt;&lt;br&gt;&amp;lt;!-- parameters (default values are in square brackets):&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;gt;&lt;br&gt;&lt;br&gt;It processes all requests that are not mapped to other servlets with servlet mappings&lt;br&gt;&lt;br&gt;이런 말이 있다. 이 default servlet은 servlet mapping에 하나도 걸리지 않는 녀석들을 처리한다고 한다. 온갖 mapping을 통과해 버린 녀석들을 말하는 것이다. 그러면 뭐가 남을까? 바로 jpg, html 등 정적인 리소스만 남게 된다. 톰켓만으로도 이미지를 보여 줄 수 있는 것은 이 default servlet이 있기 때문이다.&lt;br&gt;&lt;br&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;흐하하하하하하~ 여기서 살짝 잔머리를 굴려 보자.. ㅋㅋ&lt;/span&gt;&lt;br&gt;&lt;br&gt;일반적으로 web과 was를 분리해서 쓰니까, jpg나 html 등 정적인 리소스는 web 서버가 맡아서 해야한다. 그리고 나머지들은 was로 넘어 와야 한다. 위의 상황의 문제는 *.jsp가 DispatcherServlet를 타면 안되는 상황이다.&amp;nbsp; ㅋ, jsp는 was에서 처리를 해야 하는 것이지만 /* url-pattern에 의해서 DispatcherServlet를 타면 안되는 상황이다.&lt;br&gt;&lt;br style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;ㅋㅋ 원래 default servlet의 목적을 살짝쿵 바꿔 버리는 것이다.&lt;/span&gt;&lt;br&gt;&lt;br&gt;그런데, SRV.11.2.1 Implicit Mappings에 나와 있는 것처럼, *.jsp는 이미 mapping되어 있다. 톰켓안에 벌써 되어 버려 있다. 물론 이 conf/web.xml 파일 안에 말이다. ㅋㅋ &lt;br&gt;&lt;br&gt;그러므로 *.jsp는 톰켓에 걸려 있는 servlet을 타면 되고, 이를 통과한 /article은 default servlet을 타면 된다는 것이다. 이야... 쥑인다!!!!!&lt;br&gt;&lt;br&gt;앗 그런데, conf/web.xml에 이미 default servlet이 설정되어 있다. 앗.. 어쩌지? ㅋㅋ SRV.11.2.1 Implicit Mappings(If a *.jsp mapping is defined by the Web application, its mapping takes precedence over the implicit mapping.) 에 나와 있는 것처럼 해당 web application에 재정의를 하게 되면, implicit Mapping 보다 우선적으로 적용된다고 한다. 흐흐.&lt;br&gt;&lt;br&gt;이렇게 해서 *.jsp를 제외하고 Spring의 DispatcherServlet을 태울 수 있는 것이다. 아래처럼 url-pattern만 /* 에서 /로 바꿔 버리면 된다. 아래처럼.. 흐&lt;br&gt;&lt;br&gt;&amp;lt;servlet-mapping&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;servlet-name&amp;gt;dispatcher&amp;lt;/servlet-name&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;url-pattern&amp;gt;/&amp;lt;/url-pattern&amp;gt;&lt;br&gt;&amp;lt;/servlet-mapping&amp;gt;&lt;br&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;</description>
                        <pubDate>Wed, 09 Dec 2009 19:48:41 +0900</pubDate>
                        <category>Spring</category>
                        <category>url-pattern</category>
                                </item>
                <item>
            <title>Java 7 chapter 1: The Virtual Machine</title>
            <dc:creator>theclub</dc:creator>
            <link>http://jspgeek.com/article/6756</link>
            <guid isPermaLink="true">http://jspgeek.com/article/6756</guid>
                        <comments>http://jspgeek.com/article/6756#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;&lt;div class=&quot;eArea xe_content xe_dr_txt&quot;&gt;&lt;div style=&quot;position: relative;&quot; class=&quot;editorArea textyleContent ui-sortable&quot;&gt;&lt;div class=&quot;here eArea xe_content xe_dr_txt&quot;&gt;&lt;p&gt;주소 : &lt;a target=&quot;_blank&quot; href=&quot;http://harals.blogspot.com/2009/12/java-7-chapter-1-virtual-machine.html&quot;&gt;http://harals.blogspot.com/2009/12/java-7-chapter-1-virtual-machine.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;To prepare for the arrival of the Dolphin, I will indulge in some
research entitled &quot;What&apos;s new in Java 7&quot;. The story will consist of 5
chapters: the vm, the language, the core, the client and the Web. First
came the change to the &lt;span style=&quot;font-weight: bold;&quot;&gt;virtual machine&lt;/span&gt;. &lt;br&gt;&lt;br&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;CompressedOops&lt;/span&gt;&lt;br&gt;OOP
is an “ordinary object pointer”, and it’s length is usually similar to
the length of the native operating system pointer. Increasing the
length from 32 to 64 bits will cause the heap in a 32-based program
(running on a 64-bit system) to expand by 50%. Memory is cheap, but
bandwidth and cache is expensive, and it is should not be very costly
to port applications a new platform. Using a 64 bit vm and the
UseCompressedOops flag will keep addressing overhead similar to that of
32 bit systems at the cost of cpu cycles.&lt;br&gt;&lt;br&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Garbage First GC (“G1”)&lt;/span&gt;&lt;br&gt;Replacement
for Concurrent-Mark-Sweep GC, but still “generational”. CMS divides
memory into young generation (eden, survivor) and and old generation.
Move live object into a more “persistent” generation. Stops the world
to do complete collections. G1 divides memory into small “regions”, and
these are labeled “young” or “old”. During a GC, those objects who are
“live” in a region, will be compacted with other “live” objects in
another region, depending on their age. Each region has a “remembered
set”, which contains all external references to this region. This
reduces the need to pause the world to mark. &lt;br&gt;&lt;br&gt;G1 is a
server-style garbage collector, targeted for multiprocessor- and large
memory systems. It aims at being more predictable than CMS. It’s also
available in 6u14. &lt;br&gt;&lt;br&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;JSR 292: The Da Vinci Machine Project&lt;/span&gt;&lt;br&gt;The
JVM should be extended with general support of languages other than
Java, and in particular dynamically typed languages. Such language
implementers have observed a range of painful aspects of the byte code
language, and this projects aims to remove those in a general manner.
The noteworthy suggestions is: dynamic invocation, continuations,
tail-calls and interface injection. The JSR specifically targets
dynamic invocation and hot class modification. Today dynamic languages
produces a lot of different options for signatures that all have to be
stored in permgen space. This is very inefficient, and one should be
able to narrow down these options at runtime.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description>
                        <pubDate>Tue, 08 Dec 2009 10:26:52 +0900</pubDate>
                        <category>java 7</category>
                        <category>Dolphin</category>
                                </item>
                <item>
            <title>Hibernate Vs JDBC Performance Comparison</title>
            <dc:creator>theclub</dc:creator>
            <link>http://jspgeek.com/article/6389</link>
            <guid isPermaLink="true">http://jspgeek.com/article/6389</guid>
                        <comments>http://jspgeek.com/article/6389#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;주소 : &lt;a href=&quot;http://itspice.net/cms/enterprise-java/hibernate-vs-jdbc-performance-comparison&quot; target=&quot;_blank&quot;&gt;http://itspice.net/cms/enterprise-java/hibernate-vs-jdbc-performance-comparison&lt;/a&gt;&lt;br&gt;&lt;p&gt;&lt;font&gt;The Hibernate advantage over JDBC&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font&gt;&lt;strong&gt;Concurrency Support&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font&gt;In JDBC there is no check that always every user has updated data this check 
has to be added by the developer. Hibernate maintains this concurrency check 
using a version field.It checks this version field in the database table before 
every update operation.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font&gt;So, if two users retrieve data from the same table and modify it and if one 
of them saves the modification, the version gets updated. Now when the second 
user tries to save his data hibernate doesn’t allow it because the data he 
retrieved was modified and his version doesn’t match with the version in the 
database.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font&gt;&lt;strong&gt;Caching and Connection Pooling&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font&gt;In JDBC, caching and connection pooling is maintained by hand-coding. 
Hibernate provides excellent caching support and connection pooling for better 
application performance.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font&gt;&lt;strong&gt;Transaction Management&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font&gt;In JDBC one has to explicitly handle transaction management in the code. 
Hibernate provides injected transaction management.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font&gt;&lt;strong&gt;Programming Overhead&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font&gt;In JDBC one has to do a lot of coding in the form of SQL queries to handle 
persistent data in database. In Hibernate there is no need to write code in the 
form of SQL queries to save and retrieve the data, thus reduces programming 
overhead and development time.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font&gt;&lt;strong&gt;Maintenance Costs&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font&gt;Applications using JDBC contain large amounts of code that handles database 
persistent data. This code is subjected to changes whenever there is a change in 
database table structure leading to high maintenance cost.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font&gt;In Hibernate the actual mapping between database tables and program objects 
is done in a XML descriptor file. So any changes to a database table will only 
need a change in the XML file resulting in centralized maintenance and reduction 
of maintenance costs.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font&gt;Pinaki Mukherjee&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font&gt;A tenacious and successful Software professional with full project life cycle 
and consulting experience in real-time and non-real-time finance, telecom and 
government projects.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font&gt;An Oracle certified professional with extensive java experience and now a 
certified ScrumMaster.&lt;br&gt;Also experienced in product promotion and pre-sales 
consulting.&lt;/font&gt;&lt;/p&gt;&lt;br&gt;&lt;/div&gt;</description>
                        <pubDate>Mon, 30 Nov 2009 16:16:24 +0900</pubDate>
                        <category>hibernate</category>
                        <category>jdbc</category>
                        <category>performance</category>
                                </item>
                <item>
            <title>Implementing HTTP sessions for Web Applications spread across multiple physical servers (or JVMs)</title>
            <dc:creator>theclub</dc:creator>
            <link>http://jspgeek.com/article/6387</link>
            <guid isPermaLink="true">http://jspgeek.com/article/6387</guid>
                        <comments>http://jspgeek.com/article/6387#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;주소 : &lt;a href=&quot;http://itspice.net/cms/web-internet/how-to-implement-session-for-a-web-app-spread-on-multiple-servers&quot; target=&quot;_blank&quot;&gt;http://itspice.net/cms/web-internet/how-to-implement-session-for-a-web-app-spread-on-multiple-servers&lt;/a&gt;&lt;br&gt;&lt;p&gt;&lt;font&gt;Say your Web Application is spread across multiple physical servers (or may 
be on the same server, but using different JVMs which is of course a rarity) 
which might have been done to balance the load of your application OR may be the 
requirement is such that separate physical servers is a need than a luxury. 
Whatever be the case, in such a scenario if a user say log into one of the 
machines (JVMs to be specific) and then s/he is taken to some other Servlet/JSP 
running on some other server (JVM) to fulfill the client request. Now if that 
Servlet/JSP also requires authentication (which it would in most of the 
practical scenarios) then the user would be prompted to enter his/her 
credentials once again which s/he would of course not like. It’s the 
applications responsibility to transfer the credentials from one server (JVM) to 
another)… right?&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font&gt;Using Persistent Sessions, we can easily achieve a solution to this complex 
problem. This approach requires the session to be saved in a data source which 
can easily be accessed by any of the scattered servers (JVMs) and the client 
gets a feeling that his application is virtually running on a single server 
(JVM). It’s a better practice to have a completely separate data Source just for 
the purpose of session persistence and not to integrate session data with the 
application data source(s) for the obvious reason of making the overall 
implementation loosely coupled and hence better maintainable and more scalable.&lt;/font&gt;&lt;/p&gt;&lt;br&gt;&lt;/div&gt;</description>
                        <pubDate>Mon, 30 Nov 2009 16:06:00 +0900</pubDate>
                        <category>session</category>
                                </item>
                <item>
            <title>기존 개발팀이 모바일로 이행하기 위한 플랫폼 비교</title>
            <dc:creator>theclub</dc:creator>
            <link>http://jspgeek.com/article/6383</link>
            <guid isPermaLink="true">http://jspgeek.com/article/6383</guid>
                        <comments>http://jspgeek.com/article/6383#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;주소 : &lt;a href=&quot;http://blog.daum.net/effortless/7864583&quot; target=&quot;_blank&quot;&gt;http://blog.daum.net/effortless/7864583&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;스마트폰이 세상을 바꿔 놓을 것이라고들 하는데, 우리팀에서도 뭔가 해야 하는거 아냐?라는 불안함이 있다면 참고하시기 바랍니다. &lt;br&gt;&lt;/p&gt;&lt;p&gt;기존 서버/웹/일반응용/SI 개발하던 사람들에게 모바일은 참 낯선 환경입니다. &lt;br&gt;&lt;/p&gt;&lt;p&gt;혼란을 좀 줄여 보고자, 한두달 검토한 내용을 정리해 봤습니다.&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;1. &lt;/span&gt;우리팀이 모바일 개발을 할 때&lt;span&gt;,
&lt;/span&gt;&lt;span style=&quot;color: rgb(227, 22, 0); font-weight: bold;&quot;&gt;아이폰&lt;/span&gt;으로 갈까&lt;span&gt;?&lt;/span&gt;&lt;br&gt;&lt;/p&gt;

&lt;table class=&quot;MsoTableGrid&quot; style=&quot;border: medium none ; border-collapse: collapse;&quot; border=&quot;1&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
 &lt;tbody&gt;&lt;tr style=&quot;&quot;&gt;
  &lt;td style=&quot;border: 1pt solid black; padding: 0cm 5.4pt; width: 55.05pt;&quot; width=&quot;73&quot; valign=&quot;top&quot;&gt;
  &lt;p style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;b style=&quot;&quot;&gt;구분&lt;/b&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td style=&quot;border-style: solid solid solid none; border-color: black black black -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;b style=&quot;&quot;&gt;설명&lt;/b&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 26.45pt;&quot;&gt;
  &lt;td rowspan=&quot;4&quot; style=&quot;border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 55.05pt; height: 26.45pt;&quot; width=&quot;73&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;장점&lt;/p&gt;
  &lt;/td&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 26.45pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;단일 사용자 인터페이스&lt;/b&gt;&lt;span&gt; - &lt;/span&gt;해상도&lt;span&gt;/UI&lt;/span&gt;가 거의 동일하다&lt;span&gt;.
  &lt;/span&gt;해상도가 달라서 생기는&lt;span&gt; UI&lt;/span&gt;개발상의 어려움이 거의 없다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 36pt;&quot;&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 36pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;단일&lt;span&gt;
  H/W &lt;/span&gt;서포트&lt;/b&gt;&lt;span&gt; - &lt;/span&gt;하드웨어 제작사가&lt;span&gt; Apple
  &lt;/span&gt;한 회사여서&lt;span&gt;, &lt;/span&gt;하드웨어 때문에 말썽 피우는 일이 없다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 36pt;&quot;&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 36pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;개발 툴킷 통합성&lt;/b&gt;&lt;span&gt; - XCode/Objective-C/Apple/iTunes&lt;/span&gt;로 대변되는 툴킷 및 환경은 매우 훌륭하다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 17.35pt;&quot;&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 17.35pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;마켓의 성숙성 &lt;/b&gt;&lt;span&gt;- &lt;/span&gt;활발하고 거래가 잦은 앱스토어가 있다&lt;span&gt;. &lt;/span&gt;대박의 가능성이 있다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 36pt;&quot;&gt;
  &lt;td rowspan=&quot;4&quot; style=&quot;border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 55.05pt; height: 36pt;&quot; width=&quot;73&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;단점&lt;/p&gt;
  &lt;/td&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 36pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;개발자 진입 장벽&lt;/b&gt;&lt;span&gt; -&lt;span style=&quot;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;국내의 대부분의 개발자들은&lt;span&gt; Apple &lt;/span&gt;및&lt;span&gt; XCode&lt;/span&gt;상의 개발을 해 본적이 없다&lt;span&gt;. &lt;/span&gt;완전히 새로 배워야 한다&lt;span&gt;. &lt;/span&gt;일단 개발하려면 비싼 맥북부터 구입해야
  한다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 36pt;&quot;&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 36pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;애플사의 정책&lt;/b&gt;&lt;span&gt; -&lt;span style=&quot;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;애플사는 앱스토어에 올릴 때&lt;span&gt;, &lt;/span&gt;엄격한 검사를 하는데&lt;span&gt;, &lt;/span&gt;애플의 검사를 통과하지 못하면 앱스토어에
  올리지 못한다&lt;span&gt;. &lt;/span&gt;이것에 대해서 불평이 상당하다&lt;span&gt;. &lt;/span&gt;앱스토어에
  올리는 비용도 제법&lt;span&gt;(?) &lt;/span&gt;든다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 36pt;&quot;&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 36pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;치열한 경쟁&lt;/b&gt;&lt;span&gt; - &lt;/span&gt;이미 레드오션이나 다름없다&lt;span&gt;. &lt;/span&gt;개인들이 취미로 개발할 것이 아니고&lt;span&gt;, &lt;/span&gt;팀 단위 이상의 수익성을 바란다면&lt;span&gt;, &lt;/span&gt;상당한 개발력을 투입하여야&lt;span&gt; (&lt;/span&gt;적어도&lt;span&gt;3~4M/M) &lt;/span&gt;하며&lt;span&gt;, &lt;/span&gt;그게
  수익을 가져다 줄지는 아무도 보장해 주지 못한다&lt;span&gt;. &lt;/span&gt;이미 완성도가 높은 애플릿들로 넘친다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 21pt;&quot;&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 21pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;국내시장의 낮은 점유율&lt;/b&gt;&lt;span&gt; - &lt;/span&gt;국내에서는 잘나가도&lt;span&gt; 50&lt;/span&gt;만대&lt;span&gt;,
  &lt;/span&gt;무지 크게 잡아도&lt;span&gt; 100&lt;/span&gt;만대 수준에서 멈출 것이다&lt;span&gt;. &lt;/span&gt;전체
  시장의&lt;span&gt; 5% &lt;/span&gt;미만이라는 뜻이다&lt;span&gt;. &lt;/span&gt;기업이 기대할 수준의
  수익을 가져다 주기에는 너무 작은 시장이다&lt;span&gt;. &lt;/span&gt;개인이 취미로 하자면&lt;span&gt;,
  &lt;/span&gt;큰 문제가 없을 것이다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 21pt;&quot;&gt;
  &lt;td rowspan=&quot;2&quot; style=&quot;border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 55.05pt; height: 21pt;&quot; width=&quot;73&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;대응방안&lt;/p&gt;
  &lt;/td&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 21pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;개발할 대상에 따라 다른 것 같다&lt;span&gt;. - &lt;/span&gt;&lt;/b&gt;낮은 국시장 점유율에서라도 수익을 낼 수 있을 것 같으면&lt;span&gt;, &lt;/span&gt;아이폰이
  적당하다&lt;span&gt;. &lt;/span&gt;국내용이 아니고&lt;span&gt;, &lt;/span&gt;세계 시장에 팔 수 있는
  것이라면&lt;span&gt;, &lt;/span&gt;아이폰은 환상적인 플랫폼이다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;p&gt;좀 럭셔리하고&lt;span&gt;(?), &lt;/span&gt;여유있는&lt;span&gt;(?)
  &lt;/span&gt;개인 개발자라면&lt;span&gt;, &lt;/span&gt;아이폰 만큼 좋은 취미생활이 따로 없다&lt;span&gt;. &lt;/span&gt;단 돈은 바라지 않는 게 좋다&lt;span&gt;. &lt;/span&gt;아마 개발하면서 먹은 햄버거와
  콜라 값 정도나 간신히 나올 것이다&lt;span&gt;. &lt;/span&gt;어쩌다 운 좋아서&lt;span&gt; 2~30&lt;/span&gt;만원을
  넘겨도 그걸로 끝이다&lt;span&gt;. &lt;/span&gt;세계에 팔 수 있는 능력이 있는지 한번 테스트해 보기 바란다&lt;span&gt;. &lt;/span&gt;아마 그럴 수 있다면&lt;span&gt;, &lt;/span&gt;굳이 아이폰에서 개발 않고&lt;span&gt;, &lt;/span&gt;자기 블로그만 으로도 비슷한 수익을 만들 수 있을 것이다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 21pt;&quot;&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 21pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;솔루션 개발사라면&lt;/b&gt;&lt;span&gt;, 5%&lt;/span&gt;도 안되는 아이폰 고객들의 등쌀에 못 이겨&lt;span&gt;, &lt;/span&gt;어떤 식으로든
  자사 솔루션에 대한 아이폰 인터페이스를 만들어 내야 할 것이다&lt;span&gt;. &lt;/span&gt;안그러면 솔루션 자체가 안 팔릴
  테니까&lt;span&gt;… &lt;/span&gt;이때는 수익보다는 개발비용 감소에 초점을 맞춰야 하는데&lt;span&gt;,
  &lt;/span&gt;최소한으로 아이폰 인터페이스를 만들라치면&lt;span&gt;, &lt;/span&gt;모바일 웹&lt;span&gt;(&lt;/span&gt;아이폰
  크기에 맞는 웹인터페이스&lt;span&gt;)&lt;/span&gt;를 고려해 볼 수 있다&lt;span&gt;. &lt;/span&gt;그것은
  폰특화된 것이 아니니까&lt;span&gt;, &lt;/span&gt;기존의 웹개발자가 대응할 수 있다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;2. &lt;/span&gt;우리팀이 모바일 개발을 할 때&lt;span&gt;,
&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(227, 22, 0);&quot;&gt;안드로이드폰&lt;/span&gt;으로 갈까&lt;span&gt;?&lt;/span&gt;&lt;/p&gt;

&lt;table class=&quot;MsoTableGrid&quot; style=&quot;border: medium none ; border-collapse: collapse;&quot; border=&quot;1&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
 &lt;tbody&gt;&lt;tr style=&quot;&quot;&gt;
  &lt;td style=&quot;border: 1pt solid black; padding: 0cm 5.4pt; width: 55.05pt;&quot; width=&quot;73&quot; valign=&quot;top&quot;&gt;
  &lt;p style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;b style=&quot;&quot;&gt;구분&lt;/b&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td style=&quot;border-style: solid solid solid none; border-color: black black black -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;b style=&quot;&quot;&gt;설명&lt;/b&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 26.45pt;&quot;&gt;
  &lt;td rowspan=&quot;4&quot; style=&quot;border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 55.05pt; height: 26.45pt;&quot; width=&quot;73&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;장점&lt;/p&gt;
  &lt;/td&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 26.45pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;낮은 진입 장벽 &lt;/b&gt;&lt;span&gt;– &lt;/span&gt;가장 많은 개발인구인 자바 개발자들이 타겟이다&lt;span&gt;. &lt;/span&gt;이클립스에 포함되는
  개발 툴킷을 가지면 쉽게 개발에 뛰어들 수 있다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 36pt;&quot;&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 36pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;구글 후광&lt;/b&gt; &lt;span&gt;– &lt;/span&gt;구글 후광으로 추종자들이 제법 많다&lt;span&gt;. &lt;/span&gt;폰 개발사라면&lt;span&gt;, &lt;/span&gt;너도나도 안드로이드 폰 한종 정도는 만들 것이고&lt;span&gt;, &lt;/span&gt;국내에서는&lt;span&gt; SKTelecom&lt;/span&gt;이 안드로이드를 밀고갈 것 같다&lt;span&gt;. &lt;/span&gt;전략적으로 안드로이드를
  미는 데 편승할 수 있으면 좋을 것이다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 36pt;&quot;&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 36pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;쉬운 마켓 접근성&lt;/b&gt; &lt;span&gt;– &lt;/span&gt;안드로이드 마켓은 등록이 매우 자유롭다&lt;span&gt;. &lt;/span&gt;진입 장벽이 더욱 낮다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 17.35pt;&quot;&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 17.35pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;낮은 경쟁 &lt;/b&gt;&lt;span&gt;– &lt;/span&gt;현재의 안드로이드 마켓의 앱들은 매우 품질이 낮고 조잡하다&lt;span&gt;. &lt;/span&gt;품질에
  좀 손을 쓰면 돋보일 가능성이 높다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 36pt;&quot;&gt;
  &lt;td rowspan=&quot;4&quot; style=&quot;border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 55.05pt; height: 36pt;&quot; width=&quot;73&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;단점&lt;/p&gt;
  &lt;/td&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 36pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;더 낮은 국내 시장점유율&lt;/b&gt; &lt;span&gt;– &lt;/span&gt;아마도 아이폰의&lt;span&gt; 5%&lt;/span&gt;보다 더 낮은 국내시장 점유율을 보일 것이다&lt;span&gt;. &lt;/span&gt;국내용 앱으로는 수익성 맞추는 것이 불가능하겠다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 36pt;&quot;&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 36pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;좀더 다양한 폰 환경&lt;/b&gt;&lt;span&gt; -&lt;span style=&quot;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;애플의 단일한 개발환경에 비해서&lt;span&gt;, &lt;/span&gt;폰들이 더 다양하다&lt;span&gt;. &lt;/span&gt;해상도&lt;span&gt;,
  &lt;/span&gt;터치 방식 등에서 상당히 다양한 환경이므로&lt;span&gt;, &lt;/span&gt;사용자&lt;span&gt;
  Experience&lt;/span&gt;를 구현하는데 좀더 어려울 것이다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 36pt;&quot;&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 36pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;낮은 폰 성숙도&lt;/b&gt; &lt;span&gt;– &lt;/span&gt;안드로이드&lt;span&gt; 2.0&lt;/span&gt;이 최근에야 나왔고&lt;span&gt;, &lt;/span&gt;그게 기본으로 탑재되어 있는 폰은 거의 없다&lt;span&gt;. &lt;/span&gt;내년&lt;span&gt; 3&lt;/span&gt;분기 이후에야 주변에서 겨우 안드로이드&lt;span&gt; 2.0&lt;/span&gt;폰 구경해 볼 수
  있을 것이다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 21pt;&quot;&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 21pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;구글의 우울한 판매정책&lt;/b&gt; &lt;span&gt;– &lt;/span&gt;구글은 애플과 달리 적극적으로 앱을 판매하려고 하지 않는다&lt;span&gt;. &lt;/span&gt;안드로이드
  시장에서 구글은 직접적인 수익이 제로이므로&lt;span&gt;… &lt;/span&gt;당연하다&lt;span&gt;. &lt;/span&gt;유명한
  게임 개발사는&lt;span&gt;, &lt;/span&gt;안드로이드 마켓이 전혀 판매유도를 하지 않는다는 이유로&lt;span&gt; (&lt;/span&gt;수익성이 낮으므로&lt;span&gt;), &lt;/span&gt;애플에만 집중하겠다고 선언하기까지 했다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 21pt;&quot;&gt;
  &lt;td rowspan=&quot;2&quot; style=&quot;border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 55.05pt; height: 21pt;&quot; width=&quot;73&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;대응방안&lt;/p&gt;
  &lt;/td&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 21pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;개발자 훈련에 좋은 플랫폼이다&lt;span&gt;.&lt;/span&gt;&lt;/b&gt;&lt;span&gt; &lt;/span&gt;모바일 개발 경험이 없는 개발자들을 모바일로 이행시키는
  제일 좋은 방법이다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;p&gt;오픈&lt;span&gt;/&lt;/span&gt;자유 소프트웨어 추종자라면&lt;span&gt;,
  &lt;/span&gt;안드로이드 폰을 취미로 해 보는 것도 나쁘지 않다&lt;span&gt;. &lt;/span&gt;하지만&lt;span&gt;, &lt;/span&gt;애써서 만든 앱을&lt;span&gt;, &lt;/span&gt;주변 사람들에게 나눠줘서 폼내지는 못할 것이다&lt;span&gt;. &lt;/span&gt;당최 안드로이드 폰을 가진 사람이 있어야 말이지&lt;span&gt;… &lt;/span&gt;그래도 실망
  말라&lt;span&gt;, &lt;/span&gt;온라인에 테키들이 제법 있으니&lt;span&gt;…&lt;/span&gt;&lt;/p&gt;
  &lt;p&gt;팀수준이라면&lt;span&gt;, &lt;/span&gt;만약 구글추종 사업자&lt;span&gt;(SKT, HTC, &lt;/span&gt;삼성전자&lt;span&gt;)&lt;/span&gt;등과 어떤 제휴관계를 형성해서 기업형
  비즈모델을 만들었다면&lt;span&gt;, &lt;/span&gt;이 폰에 집중해도 상관없겠다&lt;span&gt;. &lt;/span&gt;그런
  수준의 보장이 없이는 아마도 안드로이드 폰으로 수익만들기 힘들 것이다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 21pt;&quot;&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 21pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p style=&quot;margin-left: 10pt; text-align: left; text-indent: -10pt;&quot; align=&quot;left&quot;&gt;&lt;b style=&quot;&quot;&gt;솔루션 개발사라면&lt;/b&gt;&lt;span&gt;, 5%&lt;/span&gt;미만의 안드로이드 폰 고객들은 대부분 얼리어댑터형 테키일
  가능성 크므로&lt;span&gt;, &lt;/span&gt;싸악 무시해도 되지 않을까 싶다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;p style=&quot;margin-left: 10pt; text-align: left; text-indent: -10pt;&quot; align=&quot;left&quot;&gt;구글 추종 사업자들과 관계를 만들 정도의 역량이 있는
  회사라면&lt;span&gt;, &lt;/span&gt;안드로이드 폰에 사업적으로 접근하는 것도 가능하겠다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;p style=&quot;text-align: left;&quot; align=&quot;left&quot;&gt;전세계&lt;span&gt;(&lt;/span&gt;주로
  유럽&lt;span&gt;)&lt;/span&gt;에 판매 가능한 앱을 만들 수 있다면&lt;span&gt;, &lt;/span&gt;안드로이드를
  주 타겟으로 삼아도 되겠다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;3. &lt;/span&gt;우리팀이 모바일 개발을 할 때&lt;span&gt;,
&lt;/span&gt;&lt;span style=&quot;color: rgb(227, 22, 0); font-weight: bold;&quot;&gt;윈도우 모바일&lt;/span&gt;로 갈까&lt;span&gt;?&lt;/span&gt;&lt;/p&gt;

&lt;table class=&quot;MsoTableGrid&quot; style=&quot;border: medium none ; border-collapse: collapse;&quot; border=&quot;1&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
 &lt;tbody&gt;&lt;tr style=&quot;&quot;&gt;
  &lt;td style=&quot;border: 1pt solid black; padding: 0cm 5.4pt; width: 55.05pt;&quot; width=&quot;73&quot; valign=&quot;top&quot;&gt;
  &lt;p style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;b style=&quot;&quot;&gt;구분&lt;/b&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td style=&quot;border-style: solid solid solid none; border-color: black black black -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;b style=&quot;&quot;&gt;설명&lt;/b&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 26.45pt;&quot;&gt;
  &lt;td rowspan=&quot;4&quot; style=&quot;border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 55.05pt; height: 26.45pt;&quot; width=&quot;73&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;장점&lt;/p&gt;
  &lt;/td&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 26.45pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;널리 퍼진 개발 플랫폼 &lt;/b&gt;&lt;span&gt;– Visual Studio 2007 Express, C#.Net &lt;/span&gt;등은 공짜로 쓸 수 있고&lt;span&gt;, &lt;/span&gt;당장 내&lt;span&gt; PC&lt;/span&gt;에서 바로 동작한다&lt;span&gt;. Visual Studio &lt;/span&gt;및 모바일 개발 플랫폼은&lt;span&gt; 10&lt;/span&gt;년 이상
  발전해 온 성숙한 플랫폼이다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 36pt;&quot;&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 36pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;상대적으로 높은 국내점유율&lt;/b&gt; &lt;span&gt;– 2009&lt;/span&gt;년 말&lt;span&gt;, &lt;/span&gt;국내 스마트폰 점유율은&lt;span&gt; 90%&lt;/span&gt;를 훨씬 상회하게&lt;span&gt; Windows Mobile &lt;/span&gt;폰들이다&lt;span&gt;. &lt;/span&gt;주변에 좀 그럴싸 해 보이는 폰들은 다&lt;span&gt; Windows Mobile&lt;/span&gt;이라고
  보면 맞다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 36pt;&quot;&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 36pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;마이크로소프트 후광&lt;/b&gt; &lt;span&gt;– MicroSoft&lt;/span&gt;가 경쟁하겠다고 맘 먹어서&lt;span&gt;, &lt;/span&gt;실패한 경우가 거의
  없다&lt;span&gt;. MS&lt;/span&gt;가 모바일 폰에도 관심을 갖기 시작했으니&lt;span&gt;, &lt;/span&gt;아마도
  품질이 급격히 높아질 것이다&lt;span&gt;. Win Mobile 6.5&lt;/span&gt;는 아이폰과 경쟁할 수준이 된다&lt;span&gt;. (&lt;/span&gt;수준 차는 맥&lt;span&gt;OS-X &lt;/span&gt;와&lt;span&gt;
  WinXP &lt;/span&gt;정도 되겠다&lt;span&gt;. &lt;/span&gt;여전히&lt;span&gt; Win Mobile
  6.5&lt;/span&gt;가 열세이기는 하지만&lt;span&gt;, &lt;/span&gt;시장 점유율에서는 애플이 항상 뒤진다&lt;span&gt;.)&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 17.35pt;&quot;&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 17.35pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;다양한&lt;span&gt; H/W &lt;/span&gt;서포트 &lt;/b&gt;&lt;span&gt;– &lt;/span&gt;거의 모든&lt;span&gt; Embedded &lt;/span&gt;장치의 개발환경이 다 갖춰져 있어서&lt;span&gt;, &lt;/span&gt;굳이 스마트폰이
  아니라도&lt;span&gt;, &lt;/span&gt;다른 장치 개발에&lt;span&gt; Win Mobile &lt;/span&gt;개발
  경험이 도움이 될 것이다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 36pt;&quot;&gt;
  &lt;td rowspan=&quot;3&quot; style=&quot;border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 55.05pt; height: 36pt;&quot; width=&quot;73&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;단점&lt;/p&gt;
  &lt;/td&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 36pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;다양한 폰과 버전 &lt;/b&gt;&lt;span&gt;– &lt;/span&gt;윈모바일 폰은 무지막지하게 다양하다&lt;span&gt;. &lt;/span&gt;키보드가 있기도 하고 없기도
  하고&lt;span&gt;, &lt;/span&gt;가로이기도 하고&lt;span&gt;, &lt;/span&gt;정사각형이기도 하고&lt;span&gt;, &lt;/span&gt;터치가 되기도 하고 안되기도 하고&lt;span&gt;… &lt;/span&gt;세상에 존재하는 모든 형태의
  폰이 다 윈모바일에 적응되어 있다&lt;span&gt;. &lt;/span&gt;따라서 개발자는 다양한 해상도와 다양한 입력을 고려해야 한다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;p&gt;&lt;span&gt;OS&lt;/span&gt;도&lt;span&gt; Win Mobile
  5.0&lt;/span&gt;폰들로 부터 최근&lt;span&gt; 6.1, 6.5&lt;/span&gt;까지 상대적으로 다양하다&lt;span&gt;. PC OS &lt;/span&gt;업그레이드 하듯이 &lt;span&gt;“&lt;/span&gt;롬업&lt;span&gt;”&lt;/span&gt;이라는 것을 하면&lt;span&gt;, &lt;/span&gt;최신&lt;span&gt; OS&lt;/span&gt;로
  업그레이드 할 수 있지만&lt;span&gt;, &lt;/span&gt;일반 개인이 하기에는 좀 어려운 작업이다&lt;span&gt;. &lt;/span&gt;깔려 있는 폰들을 대상으로 하려면&lt;span&gt;, &lt;/span&gt;적어도&lt;span&gt; WM 5.0, 6.1, 6.5 &lt;/span&gt;를 모두 고려해야 한다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 36pt;&quot;&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 36pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;시장의 분산 &lt;/b&gt;&lt;span&gt;– &lt;/span&gt;가장 큰 시장점유율에도 불구하고&lt;span&gt;, &lt;/span&gt;단일화된 시장이 없다&lt;span&gt;. MS&lt;/span&gt;가 최근에 오픈한 시장도 활성화 되어 있지 않다&lt;span&gt;. MS &lt;/span&gt;앱스토어&lt;span&gt;, Samsung, SKT T-Store, KT ShowStore &lt;/span&gt;등이 있고&lt;span&gt;,
  Handango&lt;/span&gt;같은 수년된 오래된 마켓도 있다&lt;span&gt;. &lt;/span&gt;단일 시장에서 대박 만들기 어려운 환경이다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 21.55pt;&quot;&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 21.55pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;무료 인식 &lt;/b&gt;&lt;span&gt;– &lt;/span&gt;상당히 많은 윈모바일 앱들이 무료로 블로그 같은 곳에서 유통되고 있다&lt;span&gt;. &lt;/span&gt;윈모바일
  폰용 앱들은 무료라는 인식의 장벽도 상당히 높을 것이다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 21pt;&quot;&gt;
  &lt;td rowspan=&quot;2&quot; style=&quot;border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 55.05pt; height: 21pt;&quot; width=&quot;73&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;대응방안&lt;/p&gt;
  &lt;/td&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 21pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;폰 접근성이 높다&lt;span&gt;.&lt;/span&gt;&lt;/b&gt;&lt;span&gt; &lt;/span&gt;주변 사람들에게 나눠줄 앱을 만들 생각이라면&lt;span&gt;, &lt;/span&gt;좋은 타겟이다&lt;span&gt;. &lt;/span&gt;아이폰과 비교해서 좀 없어 보이기는 하지만&lt;span&gt;, &lt;/span&gt;가장 활용도가 높을 것이다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;p&gt;뽀대나지 않는 거친 개발 환경에서&lt;span&gt;, &lt;/span&gt;널리 인간을 이롭게 하는 홍익인간의
  정신을 가진 사람이라면&lt;span&gt;, &lt;/span&gt;도전해 볼 만하다&lt;span&gt;. &lt;/span&gt;개발환경이
  다 무료고&lt;span&gt;, &lt;/span&gt;폰도 널리 퍼져 있으므로 실험하기도 좋다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 21pt;&quot;&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 21pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p style=&quot;margin-left: 10pt; text-align: left; text-indent: -10pt;&quot; align=&quot;left&quot;&gt;&lt;b style=&quot;&quot;&gt;솔루션 개발사라면&lt;/b&gt;&lt;span&gt;, WinMobile&lt;/span&gt;에서 돌아가는 삼성 옴니아폰이 잘 팔리는
  한&lt;span&gt;, &lt;/span&gt;윈모바일을 피해가기 힘들 것이다&lt;span&gt;. &lt;/span&gt;괴롭더라도 등떠
  밀려서&lt;span&gt;, &lt;/span&gt;자사 제품에 대한 윈모바일 인터페이스를 개발할 수 밖에 없을 것이다&lt;span&gt;. &lt;/span&gt;안그러면 솔루션 안 팔릴 테니까&lt;span&gt;…&lt;/span&gt;&lt;/p&gt;
  &lt;p style=&quot;margin-left: 10pt; text-align: left; text-indent: -10pt;&quot; align=&quot;left&quot;&gt;가장 쉬운 비용 절감 방법은 기존 개발자를 활용한 웹형
  인터페이스를 개발이다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;4. &lt;/span&gt;어느 것 하나 쉽지가 않군&lt;span&gt;… &lt;/span&gt;우리팀이
모바일에 더 쉽게 접근할 방법은 없나요&lt;span&gt;?&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;있습니다&lt;span&gt;. &lt;/span&gt;&lt;span style=&quot;color: rgb(227, 22, 0); font-weight: bold;&quot;&gt;가장 쉬운 방법은 모바일 웹&lt;/span&gt;입니다&lt;span&gt;. (WAP &lt;/span&gt;또는&lt;span&gt; MobileWeb&lt;/span&gt;이 이 부류에 속한다&lt;span&gt;.)&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;table class=&quot;MsoTableGrid&quot; style=&quot;border: medium none ; border-collapse: collapse;&quot; border=&quot;1&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
 &lt;tbody&gt;&lt;tr style=&quot;&quot;&gt;
  &lt;td style=&quot;border: 1pt solid black; padding: 0cm 5.4pt; width: 55.05pt;&quot; width=&quot;73&quot; valign=&quot;top&quot;&gt;
  &lt;p style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;b style=&quot;&quot;&gt;구분&lt;/b&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td style=&quot;border-style: solid solid solid none; border-color: black black black -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;b style=&quot;&quot;&gt;설명&lt;/b&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 26.45pt;&quot;&gt;
  &lt;td rowspan=&quot;3&quot; style=&quot;border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 55.05pt; height: 26.45pt;&quot; width=&quot;73&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;장점&lt;/p&gt;
  &lt;/td&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 26.45pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;쉬운 개발자 투입 &lt;/b&gt;&lt;span&gt;– &lt;/span&gt;웹개발과 똑같다&lt;span&gt;. &lt;/span&gt;특별히 비용 더 들이지 않고&lt;span&gt;, &lt;/span&gt;당장 개발자에게 모바일 웹브라우져 용으로 개발하자고 하면 된다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 26.45pt;&quot;&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 26.45pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;인터넷 거인들과의 동참 &lt;/b&gt;&lt;span&gt;– &lt;/span&gt;네이버&lt;span&gt;/&lt;/span&gt;다음을 위시한 모든 인터넷 회사들은 사실상 이 방향을
  가장 선호한다&lt;span&gt;. &lt;/span&gt;당연히 구글도 이 방향을 선호한다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 26.45pt;&quot;&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 26.45pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;가장 넓은 폰 접근성 &lt;/b&gt;&lt;span&gt;– &lt;/span&gt;사실상 모든 폰을 접근할 수 있다&lt;span&gt;. &lt;/span&gt;신형&lt;span&gt; MobileWeb&lt;/span&gt;과 구형&lt;span&gt; WAP&lt;/span&gt;을 웹의 부분으로 볼 수 있기 때문에&lt;span&gt;, &lt;/span&gt;접근성은 가장 넓다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 26.45pt;&quot;&gt;
  &lt;td rowspan=&quot;5&quot; style=&quot;border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 55.05pt; height: 26.45pt;&quot; width=&quot;73&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;단점&lt;/p&gt;
  &lt;/td&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 26.45pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;다양한 폰 브라우져&lt;/b&gt;&lt;span&gt; - &lt;/span&gt;화면이 최소&lt;span&gt;(320x240)&lt;/span&gt;까지가는 열악한 환경을 고려해야
  하는 제약이 있습니다&lt;span&gt;. &lt;/span&gt;모든 유형의 폰이 다 대상이 되므로&lt;span&gt;, &lt;/span&gt;화면
  크기 문제가 심각하다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 26.45pt;&quot;&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 26.45pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;열악한 폰 브라우저 호환성&lt;/b&gt; &lt;span&gt;– &lt;/span&gt;폰에 들어 있는 브라우저들은 호환성이&lt;span&gt;
  Explorer6&amp;lt;-&amp;gt;FireFox&lt;/span&gt;에 비하면&lt;span&gt; 10&lt;/span&gt;배 정도 더 떨어진다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 26.45pt;&quot;&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 26.45pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;높은 패킷&lt;span&gt;/&lt;/span&gt;데이터 요금 압박 &lt;/b&gt;&lt;span&gt;– &lt;/span&gt;요금 압박만 없으면&lt;span&gt;, 24&lt;/span&gt;시간 계속 켜 놓고 있는 게 사실상 제일 좋다&lt;span&gt;. &lt;/span&gt;수도꼭지처럼
  틀면 바로 되는 인터넷이 되기에는 아직 무선 데이터데 비용이 너무 비싸다&lt;span&gt;. &lt;/span&gt;하지만&lt;span&gt;, &lt;/span&gt;이것도 데이터 정액제로 풀리게 되면 좀 낫지 않을까 싶다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 13.25pt;&quot;&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 13.25pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;기능 제약 &lt;span&gt;– &lt;/span&gt;&lt;/b&gt;폰이 제공하는 향상 된 기능&lt;span&gt;(GPS, G-sensor)&lt;/span&gt;등은
  전혀 쓸 수 없다&lt;span&gt;. &lt;/span&gt;당분간 화려한 게임 만들기 힘들 수도 있다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 13.25pt;&quot;&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 13.25pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;앱스토어 부재 &lt;span&gt;– &lt;/span&gt;&lt;/b&gt;이런 형태의 앱에 대한 적절한 과금 모델은 없다&lt;span&gt;. &lt;/span&gt;따라서
  여기서 대박은 일어날 수 없다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 13.25pt;&quot;&gt;
  &lt;td rowspan=&quot;2&quot; style=&quot;border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 55.05pt; height: 13.25pt;&quot; width=&quot;73&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;대응방안&lt;/p&gt;
  &lt;/td&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 13.25pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;개인 개발자라면 &lt;span&gt;– &lt;/span&gt;&lt;/b&gt;작은 폰에 맞는 웹페이지 및 서비스를 만들어 보라&lt;span&gt;. &lt;/span&gt;모바일
  브라우져가 얼마나 열악한지 느끼게 될 것이지만&lt;span&gt;, &lt;/span&gt;약간의 개고생&lt;span&gt;(?)&lt;/span&gt;하면&lt;span&gt;, &lt;/span&gt;가장 많은 사용자에 접근할 수 있다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr style=&quot;height: 13.25pt;&quot;&gt;
  &lt;td style=&quot;border-style: none solid solid none; border-color: -moz-use-text-color black windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 406.15pt; height: 13.25pt;&quot; width=&quot;542&quot; valign=&quot;top&quot;&gt;
  &lt;p&gt;&lt;b style=&quot;&quot;&gt;솔루션 개발팀이라면 &lt;span&gt;– &lt;/span&gt;&lt;/b&gt;이걸로 스마트폰 압박에서 가장 저비용으로 면피는 할 수 있다&lt;span&gt;. &lt;/span&gt;간단하게
  만든 모바일용&lt;span&gt; URL&lt;/span&gt;만 알려주면 끝이다&lt;span&gt;. &lt;/span&gt;단&lt;span&gt;, “&lt;/span&gt;내폰에서는 안된다&lt;span&gt;”&lt;/span&gt;는 민원을 제법 듣게 될 것이다&lt;span&gt;. &lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;br&gt;&lt;p&gt;&lt;span&gt;5. &lt;/span&gt;정녕 그것뿐인가요&lt;span&gt;? &lt;/span&gt;다른
방법은 없나요&lt;span&gt;?&lt;/span&gt;

&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;&lt;span style=&quot;&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;있습니다&lt;span&gt;. &lt;/span&gt;국내에서 무역장벽 역할을 훌륭하게 해낸 위피&lt;span&gt;(WIPI)&lt;/span&gt;이다&lt;span&gt;. &lt;/span&gt;폰 접근성 뛰어나고 사용자도 많지만&lt;span&gt;, &lt;/span&gt;아마 지금 위피&lt;span&gt;(WIPI)&lt;/span&gt;개발 새로 하겠다고 하면&lt;span&gt;, &lt;/span&gt;아마 회사에서 쫓겨날 지도 모르겠다&lt;span&gt;. WIPI&lt;/span&gt;는 이미 과거라고 치부하니까&lt;span&gt;… &lt;/span&gt;어쨌든 아직까지도 위피&lt;span&gt;(WIPI) &lt;/span&gt;게임으로 먹고 사는 회사들이 많지만&lt;span&gt;, &lt;/span&gt;그건 걔네들의 몫이고
신참자들의 몫은 아니다&lt;span&gt;. &lt;/span&gt;새로 모바일을 한다면&lt;span&gt;, &lt;/span&gt;위피&lt;span&gt;(WIPI)&lt;/span&gt;는 추천하기 힘들다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;



&lt;p&gt;&lt;span&gt;&amp;nbsp; &lt;br&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;6. &lt;/span&gt;또 없나요&lt;span&gt;?&lt;/span&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;p style=&quot;text-indent: 9.75pt;&quot;&gt;더 있습니다&lt;span&gt;. &lt;/span&gt;심비안과
블랙베리가 있다&lt;span&gt;. &lt;/span&gt;하지만&lt;span&gt;, &lt;/span&gt;국내에서는 심비안 폰과 블랙베리
폰 구경할 수 없으니&lt;span&gt;, &lt;/span&gt;캐나다나 유럽에 이민가지 않는 한&lt;span&gt;, &lt;/span&gt;잊고
사는 것이 편하다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;7. &lt;/span&gt;결론적으로&lt;span&gt;…&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;기존 개발팀이 새로 모바일로 전향해 갈 때 정답은 없다&lt;span&gt;. &lt;/span&gt;아무도 어느
한 쪽이 우세할 것이라고 점칠 수 없는 상황이다&lt;span&gt;. &lt;/span&gt;그냥 상황에 맞게 대처하기 바란다&lt;span&gt;. &lt;/span&gt;상황에 맞는 대처란 이런 것이다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class=&quot;MsoListParagraph&quot; style=&quot;margin-left: 38pt; text-indent: -18pt;&quot;&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=&quot;&quot;&gt;&lt;span style=&quot;&quot;&gt;(1)&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&quot;&gt;&amp;nbsp; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;만약 자기팀 개발자 중에 팀원들을 가르쳐 가면서 일하기 좋아하는 성향인 상급 개발자가&lt;span&gt;, &lt;/span&gt;특정 플랫폼을 고집하고&lt;span&gt;, &lt;/span&gt;다른 사람의 저항이 없으면&lt;span&gt;, &lt;/span&gt;그냥 그 친구 따라 가라&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;

&lt;p class=&quot;MsoListParagraph&quot; style=&quot;margin-left: 38pt; text-indent: -18pt;&quot;&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=&quot;&quot;&gt;&lt;span style=&quot;&quot;&gt;(2)&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&quot;&gt;&amp;nbsp; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;모바일 개발자도 없는데&lt;span&gt;, &lt;/span&gt;모바일 대응을 내 놓으라고&lt;span&gt;, &lt;/span&gt;상부&lt;span&gt;/&lt;/span&gt;외부에서 압력이 들어오고 어쨌든 해야만 하는 상황이면&lt;span&gt;, MobileWeb&lt;/span&gt;만 고려하면 된다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;

&lt;p class=&quot;MsoListParagraph&quot; style=&quot;margin-left: 38pt; text-indent: -18pt;&quot;&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=&quot;&quot;&gt;&lt;span style=&quot;&quot;&gt;(3)&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&quot;&gt;&amp;nbsp; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;구체적인 앱형 아이디어가 있고&lt;span&gt;, &lt;/span&gt;그게 대박을
낼 상품이라고 확신하면&lt;span&gt;, &lt;/span&gt;그게 진짜 그런지 한번 더 따져 봐라&lt;span&gt;. &lt;/span&gt;진짜
꼼꼼히 찾아보면&lt;span&gt;, &lt;/span&gt;아마도 비슷하거나 동일한 것이 이미 시장에 있을 것이다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;

&lt;p class=&quot;MsoListParagraph&quot; style=&quot;margin-left: 38pt; text-indent: -18pt;&quot;&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=&quot;&quot;&gt;&lt;span style=&quot;&quot;&gt;(4)&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&quot;&gt;&amp;nbsp; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;영업력이 좀 되어서&lt;span&gt;, MS, SKT, &lt;/span&gt;삼성&lt;span&gt;, LGT &lt;/span&gt;등과 같은 회사와 공동 프로젝트를 할 수 있으면&lt;span&gt;, &lt;/span&gt;그 대기업
회사&lt;span&gt;(&lt;/span&gt;팀&lt;span&gt;)&lt;/span&gt;에서 주력으로 미는 걸 만들고&lt;span&gt;, &lt;/span&gt;용역비만 챙기는 것이 답이다&lt;span&gt;. &lt;/span&gt;용역비로 팀원들 교육시킨다고 생각하면
남는 것이다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;

&lt;p class=&quot;MsoListParagraph&quot; style=&quot;margin-left: 38pt; text-indent: -18pt;&quot;&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=&quot;&quot;&gt;&lt;span style=&quot;&quot;&gt;(5)&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&quot;&gt;&amp;nbsp; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;안드로이드 폰을 대상으로 삼는다면&lt;span&gt;, “&lt;/span&gt;싼티&lt;span&gt;”&lt;/span&gt;나는 것을 주의할 필요가 있다&lt;span&gt;. &lt;/span&gt;똑같이 만든 것 같아 보여도&lt;span&gt;, &lt;/span&gt;어째 아이폰의 그것보다 &lt;span&gt;“&lt;/span&gt;싼티&lt;span&gt;”&lt;/span&gt;가
난다&lt;span&gt;. “&lt;/span&gt;싼티&lt;span&gt;”&lt;/span&gt;를 벗기 위해서 좀 &lt;span&gt;Polish&lt;/span&gt;하다 보면&lt;span&gt;, &lt;/span&gt;제법 공수가 들어갈 것이다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;

&lt;p class=&quot;MsoListParagraph&quot; style=&quot;margin-left: 38pt; text-indent: -18pt;&quot;&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=&quot;&quot;&gt;&lt;span style=&quot;&quot;&gt;(6)&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&quot;&gt;&amp;nbsp; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;윈모바일 폰으로 개발하겠다고 맘먹었다면&lt;span&gt;, &lt;/span&gt;타겟
폰 몇종으로 국한할 필요가 있다&lt;span&gt;. &lt;/span&gt;전체 윈모바일은 너무 방대하고 혼란스럽다&lt;span&gt;. “6.1 &lt;/span&gt;이상의 터치폰&lt;span&gt;”&lt;/span&gt;만 대상으로 하는 것도 방법이다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;

&lt;p class=&quot;MsoListParagraph&quot; style=&quot;margin-left: 38pt; text-indent: -18pt;&quot;&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=&quot;&quot;&gt;&lt;span style=&quot;&quot;&gt;(7)&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&quot;&gt;&amp;nbsp; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;취미로 할 것 같으면&lt;span&gt;, &lt;/span&gt;아무렴 어때&lt;span&gt;? &lt;/span&gt;아무거나 해라&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;

&lt;p class=&quot;MsoListParagraph&quot; style=&quot;margin-left: 38pt; text-indent: -18pt;&quot;&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=&quot;&quot;&gt;&lt;span style=&quot;&quot;&gt;(8)&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&quot;&gt;&amp;nbsp; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;개인적으로 앱 올려서 돈좀 벌고&lt;span&gt;, &lt;/span&gt;회사 때려치우고
싶으면&lt;span&gt;, &lt;/span&gt;포기해라&lt;span&gt;. &lt;/span&gt;그러다 회사 짤리면 대책 없다&lt;span&gt;.&lt;/span&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;span&gt;--上善若水&lt;/span&gt;&lt;span&gt;, 2009-11-25.&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/div&gt;</description>
                        <pubDate>Wed, 25 Nov 2009 17:42:28 +0900</pubDate>
                        <category>아이폰</category>
                        <category>안드로이드</category>
                                    <slash:comments>1</slash:comments>
                    </item>
                <item>
            <title>아이폰 요금제</title>
            <dc:creator>theclub</dc:creator>
            <link>http://jspgeek.com/article/6381</link>
            <guid isPermaLink="true">http://jspgeek.com/article/6381</guid>
                        <comments>http://jspgeek.com/article/6381#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;&lt;img style=&quot;width: 609px; height: 405px;&quot; src=&quot;http://jspGeek.com/assets/img/dhfgsgsdf_glory2me.png&quot;&gt;&lt;/div&gt;</description>
                        <pubDate>Sat, 21 Nov 2009 20:30:07 +0900</pubDate>
                        <category>iPhone</category>
                                </item>
                <item>
            <title>2와 1은 같다</title>
            <dc:creator>theclub</dc:creator>
            <link>http://jspgeek.com/article/6380</link>
            <guid isPermaLink="true">http://jspgeek.com/article/6380</guid>
                        <comments>http://jspgeek.com/article/6380#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;주소 : &lt;a href=&quot;http://lotsofclicks.blogspot.com/2009/10/2-1.html&quot; target=&quot;_blank&quot;&gt;http://lotsofclicks.blogspot.com/2009/10/2-1.html&lt;/a&gt;&lt;br&gt;&lt;br&gt;2와 1이 수학적으로 동등하다는 것을 증명했다고하는 논문이 수학 세계에서 화제가되고있다. 지난 1 월 제출한 1 페이지에 부족한
작은 논문이지만 여전히 반증할 수 없으며, 이대로는 수학의 근본 조건 자체에 비틀거리고가 발생할 수있다. &lt;br&gt;러시아의 칼라
슈 니 코프 통신이 전했다에도 불구하고,이 논문의 저자는 국립 요하네스 버그 대학 교수 이바노프 보스코노빗찌 박사. 박사가
꿈에서 본 식을 베개 아래 메모에書き残し, 다음날 아침이 식을 약간 변형 시켰는데, 2 = 1이라는 결론으로 전환한다.   &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/_1bjvKy3fTOQ/St6RtvSj2sI/AAAAAAAAAlg/8XGF1Wuj9Qs/s1600-h/image%5B4%5D.png&quot;&gt;&lt;img style=&quot;border-width: 0px;&quot; alt=&quot;image&quot; src=&quot;http://lh5.ggpht.com/_1bjvKy3fTOQ/St6RutWchKI/AAAAAAAAAlk/c_10Df7g80M/image_thumb%5B2%5D.png?imgmax=800&quot; height=&quot;200&quot; width=&quot;384&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;박
사는 다음날부터 동료와지도하고있는 학생들에게 수식을 보이고, 반증을 요구했지만, 누구도 증명할 수 없기 때문에 논문으로 영어
수학 잡지 &quot;마스마티쿠 로지스틱&quot;1 월호에 추가 . 이후 전세계의 수학자가이 논문의 반증을 시도했지만 9 월 현재 아직까지
완전한 해답라고 부를 논문은 나와 있지 않다. &lt;br&gt;&quot;마스마티쿠 로지스틱&quot;잡지의 편집 장인 존 로크 씨는 &quot;보스코노빗찌 박사
논문 자체는 매우 간단하고 발표된 식만면 중학생도 이해할 수 있지만, 그것이 부정확하다는 것을 증명하기 위해 매우 높은 수준의
수학 지식을 요구하는 해명은 아직 시간이 걸릴 것 &quot;이라고 말했다. &lt;br&gt;이번 논문은 2와 1이 동등한라는 일반적인 통념과는 크게 다른 결과를 보이고 있으며, 만약이 논문이 맞다는 것이 증명되면, 유클리드 기하학의 근본을 흔드는 큰 사건이 될것이 틀림이 없다.&lt;/p&gt;&lt;br&gt;&lt;/div&gt;</description>
                        <pubDate>Sun, 08 Nov 2009 23:17:42 +0900</pubDate>
                                </item>
                <item>
            <title>Annotations in Tiger, Part 2: Custom annotations</title>
            <dc:creator>theclub</dc:creator>
            <link>http://jspgeek.com/article/6378</link>
            <guid isPermaLink="true">http://jspgeek.com/article/6378</guid>
                        <comments>http://jspgeek.com/article/6378#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;주소 : &lt;a href=&quot;http://www.ibm.com/developerworks/library/j-annotate2.html&quot; target=&quot;_blank&quot;&gt;http://www.ibm.com/developerworks/library/j-annotate2.html&lt;/a&gt;&lt;br&gt;&lt;p&gt;In the &lt;a href=&quot;http://www.ibm.com/developerworks/library/j-annotate1/&quot;&gt;first article in this series&lt;/a&gt;,
I explained what metadata is, why it&apos;s valuable, and how to use the
basic built-in annotations introduced in J2SE 5.0 (aka Tiger). If
you&apos;re comfortable with these concepts now, you might already be
thinking that the three standard annotations Java 5 offers aren&apos;t
especially robust. You can do only so much with &lt;code&gt;Deprecated&lt;/code&gt;, &lt;code&gt;SuppressWarnings&lt;/code&gt;, and &lt;code&gt;Override&lt;/code&gt;.
Fortunately, Tiger also lets you define your own annotation types. In
this article, I&apos;ll take you through this relatively simple process with
some examples. You&apos;ll also find out how to annotate your own
annotations and what you gain by doing so. My thanks to O&apos;Reilly Media,
Inc., which has graciously allowed me to use the code sample from the
annotations chapter of my book on Tiger for this article (see &lt;a href=&quot;http://www.ibm.com/developerworks/library/j-annotate2.html#Resources&quot;&gt;Resources&lt;/a&gt;). &lt;/p&gt;



&lt;p&gt;&lt;a name=&quot;N1006B&quot;&gt;&lt;span class=&quot;atitle&quot;&gt;Defining your own annotation type&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;With the addition of a little syntax (and Tiger has added plenty of
syntactical constructs), the Java language supports a new type -- the &lt;i&gt;annotation type&lt;/i&gt;.
An annotation type looks a lot like an ordinary class, but it has some
unique properties. Most notably, you can use it with the at sign (&lt;code&gt;@&lt;/code&gt;) in your classes to annotate your other Java code. I&apos;ll walk you through the process piece by piece.&lt;/p&gt;

    
&lt;p&gt;&lt;a name=&quot;N1007B&quot;&gt;&lt;span class=&quot;smalltitle&quot;&gt;The @interface declaration&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Defining a new annotation type is a lot like creating an interface, except that you precede the &lt;code&gt;interface&lt;/code&gt; keyword with the &lt;code&gt;@&lt;/code&gt; sign. Listing 1 shows an example of the simplest possible annotation type:&lt;/p&gt;

&lt;br&gt;&lt;a name=&quot;N1008C&quot;&gt;&lt;b&gt;Listing 1. A very simple annotation type&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;100%&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code-outline&quot;&gt;&lt;pre class=&quot;displaycode&quot;&gt;package com.oreilly.tiger.ch06;&lt;br&gt;&lt;br&gt;/**&lt;br&gt; * Marker annotation to indicate that a method or class&lt;br&gt; *   is still in progress.&lt;br&gt; */&lt;br&gt;public @interface InProgress { }&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;

&lt;p&gt;Listing 1 is pretty self-explanatory. If you compile this annotation
type and ensure that it&apos;s in your classpath, you can then use it on
your own source code methods to indicate that a method or class is
still in progress, as in Listing 2:&lt;/p&gt;

&lt;br&gt;&lt;a name=&quot;N10099&quot;&gt;&lt;b&gt;Listing 2. Using your custom annotation type&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;100%&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code-outline&quot;&gt;&lt;pre class=&quot;displaycode&quot;&gt;@com.oreilly.tiger.ch06.InProgress&lt;br&gt;public void calculateInterest(float amount, float rate) {&lt;br&gt;  // Need to finish this method later&lt;br&gt;}&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;

&lt;p&gt;You use the annotation type in Listing 1 exactly the same way you
use the built-in annotation types, except that you indicate the custom
annotation by both its name and package. Of course, normal Java rules
apply, so you can import the annotation type and refer to it as simply &lt;code&gt;@InProgress&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;ibm-container ibm-alt-header dw-container-sidebar&quot;&gt;&lt;h2&gt;Don&apos;t miss the rest of this series&lt;/h2&gt;&lt;div class=&quot;ibm-container-body&quot;&gt;
	
	&lt;p&gt;Be sure to read, &quot;&lt;a href=&quot;http://www.ibm.com/developerworks/library/j-annotate1/&quot;&gt;Part 1&quot;&lt;/a&gt; of this series, which introduces annotations in Java 5.0.
	&lt;/p&gt;
	&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;a name=&quot;N100BA&quot;&gt;&lt;span class=&quot;smalltitle&quot;&gt;Adding a member&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The basic usage I&apos;ve just shown you is far from robust. As you&apos;ll
remember from Part 1, annotation types can have member variables (see &lt;a href=&quot;http://www.ibm.com/developerworks/library/j-annotate2.html#Resources&quot;&gt;Resources&lt;/a&gt;).
This is useful, especially when you begin to use annotations as
more-sophisticated metadata, not just raw documentation. Code-analysis
tools like to have lots of information to crunch, and custom
annotations can supply that information.&lt;/p&gt;

&lt;p&gt;Data members in annotation types are set up to work using limited
information. You don&apos;t define a member variable and then provide
accessor and mutator methods. Instead, you define a single method,
named after the member, that you want to allow for. The data type
should be the return value of the method. The concrete example in
Listing 3 should make this somewhat confusing requirement more clear:&lt;/p&gt;

&lt;br&gt;&lt;a name=&quot;N100CA&quot;&gt;&lt;b&gt;Listing 3. Adding a member to an annotation type&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;100%&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code-outline&quot;&gt;&lt;pre class=&quot;displaycode&quot;&gt;package com.oreilly.tiger.ch06;&lt;br&gt;&lt;br&gt;/**&lt;br&gt; * Annotation type to indicate a task still needs to be&lt;br&gt; *   completed.&lt;br&gt; */&lt;br&gt;public @interface TODO {&lt;br&gt;  String value();&lt;br&gt;}&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;

&lt;p&gt;As odd as Listing 3 might look, it&apos;s what you need in annotation types. Listing 3 defines a string named &lt;code&gt;value&lt;/code&gt; that the annotation type can accept. You then use the annotation type as in Listing 4:&lt;/p&gt;

&lt;br&gt;&lt;a name=&quot;listing4&quot;&gt;&lt;b&gt;Listing 4. Using an annotation type with a member value&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;100%&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code-outline&quot;&gt;&lt;pre class=&quot;displaycode&quot;&gt;@com.oreilly.tiger.ch06.InProgress&lt;br&gt;@TODO(&quot;Figure out the amount of interest per month&quot;)&lt;br&gt;public void calculateInterest(float amount, float rate) {&lt;br&gt;  // Need to finish this method later&lt;br&gt;}&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;

&lt;p&gt;Again, not much is tricky here. Listing 4 assumes that &lt;code&gt;com.oreilly.tiger.ch06.TODO&lt;/code&gt; has been imported, so in the source, you &lt;i&gt;don&apos;t&lt;/i&gt; prefix the annotation with its package name. Also note that Listing 4 uses the shorthand approach: You feed the value &lt;code&gt;(&quot;Figure out the amount of interest per month&quot;)&lt;/code&gt;
into the annotation without specifying the member-variable name.
Listing 4 is equivalent to Listing 5, which doesn&apos;t use the shorthand:&lt;/p&gt;

&lt;br&gt;&lt;a name=&quot;listing5&quot;&gt;&lt;b&gt;Listing 5. &quot;Longhand&quot; version of Listing 4&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;100%&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code-outline&quot;&gt;&lt;pre class=&quot;displaycode&quot;&gt;@com.oreilly.tiger.ch06.InProgress&lt;br&gt;@TODO(value=&quot;Figure out the amount of interest per month&quot;)&lt;br&gt;public void calculateInterest(float amount, float rate) {&lt;br&gt;  // Need to finish this method later&lt;br&gt;}&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;

&lt;p&gt;Of course, we&apos;re all coders, so who wants to mess with the longhand
version? Take note, though -- the shorthand version is available only
if the annotation type has a &lt;i&gt;single&lt;/i&gt;-member variable named &lt;code&gt;value&lt;/code&gt;. If you don&apos;t meet this condition, you lose the shorthand feature.&lt;/p&gt;

&lt;p&gt;&lt;a name=&quot;N10107&quot;&gt;&lt;span class=&quot;smalltitle&quot;&gt;Setting default values&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;What you&apos;ve seen so far is a good start, but you have plenty of ways
to spruce it up. Probably the next addition you&apos;ll think of is to set
some default values for the annotation. This is nice when you want
users to specify some values, but they need to specify other values
only if they differ from the default. Listing 6 illustrates both this
concept and its implementation with another custom annotation -- a
fuller-featured version of the &lt;code&gt;TODO&lt;/code&gt; annotation type from &lt;a href=&quot;http://www.ibm.com/developerworks/library/j-annotate2.html#listing4&quot;&gt;Listing 4&lt;/a&gt;:&lt;/p&gt;

&lt;br&gt;&lt;a name=&quot;N10118&quot;&gt;&lt;b&gt;Listing 6. Annotation type with default values&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;100%&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code-outline&quot;&gt;&lt;pre class=&quot;displaycode&quot;&gt;package com.oreilly.tiger.ch06;&lt;br&gt;&lt;br&gt;public @interface GroupTODO {&lt;br&gt;&lt;br&gt;  public enum Severity { CRITICAL, IMPORTANT, TRIVIAL, DOCUMENTATION };&lt;br&gt;&lt;br&gt;  Severity severity() &lt;strong&gt;default Severity.IMPORTANT;&lt;/strong&gt;&lt;br&gt;  String item();&lt;br&gt;  String assignedTo();&lt;br&gt;  String dateAssigned();&lt;br&gt;}&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;

&lt;p&gt;The &lt;code&gt;GroupTODO&lt;/code&gt; annotation type in Listing 6 adds several
new variables. Note that this annotation type doesn&apos;t have a
single-member variable, so you gain nothing by naming one of the
variables &lt;code&gt;value&lt;/code&gt;. Any time you have more than one member
variable, you should name them as precisely as possible. You don&apos;t get
the benefit of the shorthand syntax shown in &lt;a href=&quot;http://www.ibm.com/developerworks/library/j-annotate2.html#listing5&quot;&gt;Listing 5&lt;/a&gt;, so you might as well be a little more verbose and create better self-documentation for your annotation type.&lt;/p&gt;

&lt;p&gt;Another new feature that Listing 6 demonstrates is that the
annotation type defines its own enumeration. (Enumerations -- usually
just called &lt;i&gt;enums&lt;/i&gt; -- are another new feature of Java 5. This
isn&apos;t anything remarkable, or even specific to annotation types.) Then,
Listing 6 uses the new enumeration as the type for the member variable.&lt;/p&gt;

&lt;p&gt;Finally, back to the subject at hand -- default values. Establishing them is pretty trivial. You add the keyword &lt;code&gt;default&lt;/code&gt;
at the end of the member declaration, and then supply the default
value. As you might expect, this must be the same type that you
declared for the member variable. Again, this isn&apos;t rocket science --
just a little bit of a lexical twist. Listing 7 shows the &lt;code&gt;GroupTODO&lt;/code&gt; annotation in action, in a case in which &lt;code&gt;severity&lt;/code&gt; is &lt;i&gt;not&lt;/i&gt; indicated:&lt;/p&gt;

&lt;br&gt;&lt;a name=&quot;N1014C&quot;&gt;&lt;b&gt;Listing 7. Taking advantage of default values&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;100%&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code-outline&quot;&gt;&lt;pre class=&quot;displaycode&quot;&gt;  @com.oreilly.tiger.ch06.InProgress&lt;br&gt;  @GroupTODO(&lt;br&gt;    item=&quot;Figure out the amount of interest per month&quot;,&lt;br&gt;    assignedTo=&quot;Brett McLaughlin&quot;,&lt;br&gt;    dateAssigned=&quot;08/04/2004&quot;&lt;br&gt;  )&lt;br&gt;  public  void calculateInterest(float amount, float rate) {&lt;br&gt;    // Need to finish this method later&lt;br&gt;  }&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;

&lt;p&gt;Listing 8 shows the same annotation in use, this time with a value supplied for &lt;code&gt;severity&lt;/code&gt;:&lt;/p&gt;

&lt;br&gt;&lt;a name=&quot;N1015D&quot;&gt;&lt;b&gt;Listing 8. Overriding default values&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;100%&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code-outline&quot;&gt;&lt;pre class=&quot;displaycode&quot;&gt;  @com.oreilly.tiger.ch06.InProgress&lt;br&gt;  @GroupTODO(&lt;br&gt;    severity=GroupTODO.Severity.DOCUMENTATION,&lt;br&gt;    item=&quot;Need to explain how this rather unusual method works&quot;,&lt;br&gt;    assignedTo=&quot;Jon Stevens&quot;,&lt;br&gt;    dateAssigned=&quot;07/30/2004&quot;&lt;br&gt;  )&lt;br&gt;  public  void reallyConfusingMethod(int codePoint) {&lt;br&gt;    // Really weird code implementation&lt;br&gt;  }&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;


&lt;div class=&quot;ibm-alternate-rule&quot;&gt;&lt;hr&gt;&lt;/div&gt;&lt;p class=&quot;ibm-ind-link ibm-back-to-top&quot;&gt;&lt;a href=&quot;http://www.ibm.com/developerworks/library/j-annotate2.html#ibm-pcon&quot; class=&quot;ibm-anchor-up-link&quot;&gt;Back to top&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a name=&quot;N10167&quot;&gt;&lt;span class=&quot;atitle&quot;&gt;Annotating an annotation&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Before closing the book on annotations (at least in this series),
I&apos;ll deal briefly with annotating annotations. The set of predefined
annotation types you learned about in Part 1 have a predetermined
purpose. However, as you move into writing your own annotation types,
the purpose of your annotation types isn&apos;t always self-evident. In
addition to basic documentation, you&apos;ll probably write types that are
specific to a certain member type, or perhaps a certain set of member
types. This requires you to supply some sort of metadata on your
annotation type, so that the compiler can enforce the annotation&apos;s
intended functionality.&lt;/p&gt;

&lt;p&gt;Of course, annotations -- the Java language&apos;s choice for metadata --
should immediately come to mind as the solution. You can use four
predefined annotation types -- referred to as &lt;i&gt;meta-annotations&lt;/i&gt; -- to annotate your annotations. I&apos;ll cover each one in turn.&lt;/p&gt;

&lt;p&gt;&lt;a name=&quot;N10176&quot;&gt;&lt;span class=&quot;smalltitle&quot;&gt;Specifying the target&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The most obvious meta-annotation is one that allows you to indicate
which program elements can have annotations of the defined type.
Unsurprisingly, this meta-annotation is called &lt;code&gt;Target&lt;/code&gt;. Before you see how to use &lt;code&gt;Target&lt;/code&gt;, though, you need to know about another new class -- actually an enum -- called &lt;code&gt;ElementType&lt;/code&gt;. This enum defines the various program elements that an annotation type can target. Listing 9 show the &lt;code&gt;ElementType&lt;/code&gt; enum in its entirety:&lt;/p&gt;

&lt;br&gt;&lt;a name=&quot;N1018F&quot;&gt;&lt;b&gt;Listing 9. The ElementType enum&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;100%&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code-outline&quot;&gt;&lt;pre class=&quot;displaycode&quot;&gt;package java.lang.annotation;&lt;br&gt;&lt;br&gt;public enum ElementType {&lt;br&gt;  TYPE,			// Class, interface, or enum (but not annotation)&lt;br&gt;  FIELD,		// Field (including enumerated values)&lt;br&gt;  METHOD,		// Method (does not include constructors)&lt;br&gt;  PARAMETER,		// Method parameter&lt;br&gt;  CONSTRUCTOR,		// Constructor&lt;br&gt;  LOCAL_VARIABLE,	// Local variable or catch clause&lt;br&gt;  ANNOTATION_TYPE,	// Annotation Types (meta-annotations)&lt;br&gt;  PACKAGE		// Java package&lt;br&gt;}&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;

&lt;p&gt;The enumerated values in Listing 9 are pretty obvious, and you can
figure out on your own (with help from the comments) how each one
applies. When you use the &lt;code&gt;Target&lt;/code&gt; meta-annotation, you
supply it at least one of these enumerated values and indicate which
program elements the annotated annotation can target. Listing 10 shows &lt;code&gt;Target&lt;/code&gt; in action:&lt;/p&gt;

&lt;br&gt;&lt;a name=&quot;N101A4&quot;&gt;&lt;b&gt;Listing 10. Using the Target meta-annotation&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;100%&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code-outline&quot;&gt;&lt;pre class=&quot;displaycode&quot;&gt;package com.oreilly.tiger.ch06;&lt;br&gt;&lt;br&gt;import java.lang.annotation.ElementType;&lt;br&gt;import java.lang.annotation.Target;&lt;br&gt;&lt;br&gt;/**&lt;br&gt; * Annotation type to indicate a task still needs to be completed&lt;br&gt; */&lt;br&gt;@Target({ElementType.TYPE,&lt;br&gt;         ElementType.METHOD,&lt;br&gt;         ElementType.CONSTRUCTOR,&lt;br&gt;         ElementType.ANNOTATION_TYPE})&lt;br&gt;public @interface TODO {&lt;br&gt;  String value();&lt;br&gt;}&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;

&lt;p&gt;Now the Java compiler will apply &lt;code&gt;TODO&lt;/code&gt; only to types,
methods, constructors, and other annotation types. This helps you
ensure that nobody else takes your annotation type and misapplies it
(or, better yet, that &lt;i&gt;you&lt;/i&gt; don&apos;t misapply it in a fit of fatigue).&lt;/p&gt;

&lt;p&gt;&lt;a name=&quot;N101B8&quot;&gt;&lt;span class=&quot;smalltitle&quot;&gt;Setting retention&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The next meta-annotation you want to get under your fingers is &lt;code&gt;Retention&lt;/code&gt;.
This meta-annotation is related to how the Java compiler treats the
annotated annotation type. The compiler has several options:
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Retain the annotation in the compiled class file of the annotated class, and read it when the class first loads&lt;/li&gt;&lt;li&gt;Retain the annotation in the compiled class file, but ignore it at runtime&lt;/li&gt;&lt;li&gt;Use the annotation as indicated, but then discard it in the compiled class file&lt;/li&gt;&lt;/ul&gt;


&lt;p&gt;These three options are represented in the &lt;code&gt;java.lang.annotation.RetentionPolicy&lt;/code&gt; enum, shown in Listing 11:&lt;/p&gt;

&lt;br&gt;&lt;a name=&quot;N101D8&quot;&gt;&lt;b&gt;Listing 11. The RetentionPolicy enum&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;100%&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code-outline&quot;&gt;&lt;pre class=&quot;displaycode&quot;&gt;package java.lang.annotation;&lt;br&gt;&lt;br&gt;public enum RetentionPolicy {&lt;br&gt;  SOURCE,		// Annotation is discarded by the compiler&lt;br&gt;  CLASS,		// Annotation is stored in the class file, but ignored by the VM&lt;br&gt;  RUNTIME		// Annotation is stored in the class file and read by the VM&lt;br&gt;}&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;

&lt;p&gt;As you should expect by now, the &lt;code&gt;Retention&lt;/code&gt;
meta-annotation type takes as its single argument one of the enumerated
values you see in Listing 11. You target this meta-annotation to your
annotations, as shown in Listing 12:&lt;/p&gt;

&lt;br&gt;&lt;a name=&quot;N101E9&quot;&gt;&lt;b&gt;Listing 12. Using the Retention meta-annotation&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;100%&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code-outline&quot;&gt;&lt;pre class=&quot;displaycode&quot;&gt;@Retention(RetentionPolicy.SOURCE)&lt;br&gt;public @interface SuppressWarnings {&lt;br&gt;  // annotation type body&lt;br&gt;}&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;

&lt;p&gt;As you can tell from Listing 12, you can use the shorthand form here, because &lt;code&gt;Retention&lt;/code&gt; has a single-member variable. And if you want the retention to be &lt;code&gt;RetentionPolicy.CLASS&lt;/code&gt;, you don&apos;t have to do a thing, because that&apos;s the default behavior.&lt;/p&gt;

&lt;p&gt;&lt;a name=&quot;N101FE&quot;&gt;&lt;span class=&quot;smalltitle&quot;&gt;Adding public documentation&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The next meta-annotation is &lt;code&gt;Documented&lt;/code&gt;. This is another one that&apos;s pretty easy to understand, partly because &lt;code&gt;Documented&lt;/code&gt; is a marker annotation. As you should remember from Part 1, marker annotations have no member variables.  &lt;code&gt;Documented&lt;/code&gt; indicates that an annotation should appear in the Javadoc for a class. By default, annotations are &lt;i&gt;not&lt;/i&gt;
included in Javadoc -- a fact worth remembering when you spend a lot of
time annotating a class, detailing what&apos;s left to do, what it does
correctly, and otherwise documenting its behavior.&lt;/p&gt;

&lt;p&gt;Listing 13 shows what the &lt;code&gt;Documented&lt;/code&gt; meta-annotation looks like in use:&lt;/p&gt;

&lt;br&gt;&lt;a name=&quot;N1021D&quot;&gt;&lt;b&gt;Listing 13. Using the Documented meta-annotation&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;100%&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code-outline&quot;&gt;&lt;pre class=&quot;displaycode&quot;&gt;package com.oreilly.tiger.ch06;&lt;br&gt;&lt;br&gt;import java.lang.annotation.Documented;&lt;br&gt;import java.lang.annotation.Retention;&lt;br&gt;import java.lang.annotation.RetentionPolicy;&lt;br&gt;&lt;br&gt;/**&lt;br&gt; * Marker annotation to indicate that a method or class&lt;br&gt; *   is still in progress.&lt;br&gt; */&lt;br&gt;&lt;strong&gt;@Documented&lt;/strong&gt;&lt;br&gt;@Retention(RetentionPolicy.RUNTIME)&lt;br&gt;public @interface InProgress { }&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;

&lt;p&gt;The one &quot;gotcha&quot; with &lt;code&gt;Documented&lt;/code&gt; is in the retention policy. Notice that Listing 13 specifies the annotation&apos;s retention as &lt;code&gt;RUNTIME&lt;/code&gt;.  This is a &lt;i&gt;required&lt;/i&gt; aspect of using the &lt;code&gt;Documented&lt;/code&gt;
annotation type. Javadoc loads its information from class files (not
source files), using a virtual machine. The only way to ensure that
this VM gets the information for producing Javadoc from these class
files is to specify the retention of &lt;code&gt;RetentionPolicy.RUNTIME&lt;/code&gt;. As a result, the annotation is kept in the compiled class file &lt;i&gt;and&lt;/i&gt; is loaded by the VM; Javadoc then picks it up and adds it to the class&apos;s HTML documentation. &lt;/p&gt;

&lt;p&gt;&lt;a name=&quot;N10243&quot;&gt;&lt;span class=&quot;smalltitle&quot;&gt;Setting up inheritance&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The final meta-annotation, &lt;code&gt;Inherited&lt;/code&gt;, is probably the
most complicated to demonstrate, the least-often used, and the one that
creates the most confusion. All that said, let&apos;s cheerily run through
it.&lt;/p&gt;

&lt;p&gt;First, take a use case: Suppose that you mark a class as being in progress, through your own custom &lt;code&gt;InProgress&lt;/code&gt; annotation. No problem, right? This will even show up in the Javadoc if you&apos;ve correctly applied the &lt;code&gt;Documented&lt;/code&gt;
meta-annotation. Now, suppose you write a new class and extend the
in-progress class. Easy enough, right? But remember that the superclass
is in progress. If you use the subclass, and even look at its
documentation, you get no indication that anything is incomplete. You
would expect to see that the &lt;code&gt;InProgress&lt;/code&gt; annotation is carried through to subclasses -- that it&apos;s &lt;i&gt;inherited&lt;/i&gt; -- but it isn&apos;t. You must use the &lt;code&gt;Inherited&lt;/code&gt; meta-annotation to specify the behavior you want, as shown in Listing 14:&lt;/p&gt;

&lt;br&gt;&lt;a name=&quot;N10266&quot;&gt;&lt;b&gt;Listing 14. Using the Inherited meta-annotation&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;100%&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;code-outline&quot;&gt;&lt;pre class=&quot;displaycode&quot;&gt;package com.oreilly.tiger.ch06;&lt;br&gt;&lt;br&gt;import java.lang.annotation.Documented;&lt;br&gt;import java.lang.annotation.Inherited;&lt;br&gt;import java.lang.annotation.Retention;&lt;br&gt;import java.lang.annotation.RetentionPolicy;&lt;br&gt;&lt;br&gt;/**&lt;br&gt; * Marker annotation to indicate that a method or class&lt;br&gt; *   is still in progress.&lt;br&gt; */&lt;br&gt;@Documented&lt;br&gt;&lt;strong&gt;@Inherited&lt;/strong&gt;&lt;br&gt;@Retention(RetentionPolicy.RUNTIME)&lt;br&gt;public @interface InProgress { }&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;

&lt;p&gt;With the addition of &lt;code&gt;@Inherited&lt;/code&gt;, you&apos;ll see the &lt;code&gt;InProgress&lt;/code&gt;
annotation show up on subclasses of annotated classes. Of course, you
don&apos;t really want this behavior on all your annotation types (that&apos;s
why the default is &lt;i&gt;not&lt;/i&gt; to inherit); for example, the &lt;code&gt;TODO&lt;/code&gt; annotation wouldn&apos;t (and shouldn&apos;t) be propagated. Still, for the case I&apos;ve shown here, &lt;code&gt;Inherited&lt;/code&gt; can be quite helpful.&lt;/p&gt;


&lt;div class=&quot;ibm-alternate-rule&quot;&gt;&lt;hr&gt;&lt;/div&gt;&lt;p class=&quot;ibm-ind-link ibm-back-to-top&quot;&gt;&lt;a href=&quot;http://www.ibm.com/developerworks/library/j-annotate2.html#ibm-pcon&quot; class=&quot;ibm-anchor-up-link&quot;&gt;Back to top&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a name=&quot;N10289&quot;&gt;&lt;span class=&quot;atitle&quot;&gt;Conclusion&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;At this point, you&apos;re ready to go back into the Java world and
document and annotate everything. Then again, this reminds me a bit of
what happened when everyone figured out Javadoc. We all went into the
mode of over-documenting everything, before someone realized that
Javadoc is best used for clarification of confusing classes or methods.
Nobody looks at those easy-to-understand &lt;code&gt;getXXX()&lt;/code&gt; and &lt;code&gt;setXXX()&lt;/code&gt; methods you worked so hard to Javadoc.&lt;/p&gt;

&lt;p&gt;The same trend will probably occur with annotations, albeit to a
lesser degree. It&apos;s a great idea to use the standard annotation types
often, and even heavily. Every Java 5 compiler will support them, and
their behavior is well-understood. However, as you get into custom
annotations and meta-annotations, it becomes harder to ensure that the
types you work so hard to create have any meaning outside of your own
development context. So be measured. Use annotations when it makes
sense to, but don&apos;t get ridiculous. However you use it, an annotation
facility is nice to have and can really help out in your development
process.&lt;/p&gt;

      
&lt;!-- CMA ID: 15004 --&gt; &lt;!-- Site ID: 1 --&gt;&lt;!--XSLT stylesheet used to transform this file: dw-document-html-6.0.xsl--&gt;
&lt;br&gt;
&lt;p&gt;&lt;a name=&quot;resources&quot;&gt;&lt;span class=&quot;atitle&quot;&gt;Resources&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Don&apos;t miss &lt;a href=&quot;http://www.ibm.com/developerworks/library/j-annotate1/&quot;&gt;Part 1&lt;/a&gt; of this series, which introduces annotations in Java 5.0.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;The open source &lt;a href=&quot;http://xdoclet.sourceforge.net/xdoclet/index.html&quot;&gt;XDoclet&lt;/a&gt; code-generation engine enables attribute-oriented programming for the Java language.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.jcp.org/en/jsr/detail?id=175&quot;&gt;JSR 175&lt;/a&gt;,
the specification for incorporating a metadata facility into the Java
language, is in proposed final draft status under the Java Community
Process.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;Visit Sun&apos;s home base for &lt;a href=&quot;http://java.sun.com/j2se/1.5.0/index.jsp&quot;&gt;all things J2SE 5.0.&lt;/a&gt;.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;You can &lt;a href=&quot;http://java.sun.com/j2se/1.5.0/download.jsp&quot;&gt;download Tiger&lt;/a&gt; and try it out for yourself.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;John Zukowski&apos;s series &lt;a href=&quot;http://www.ibm.com/developerworks/views/java/libraryview.jsp?search_by=taming+tiger:&quot;&gt;&lt;i&gt;Taming Tiger&lt;/i&gt;&lt;/a&gt; covers the new features of Java 5.0 in practical tip-based format.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.oreilly.com/catalog/javaadn/&quot;&gt;&lt;i&gt;Java 1.5 Tiger: A Developer&apos;s Notebook&lt;/i&gt;&lt;/a&gt;
(O&apos;Reilly &amp;amp; Associates; 2004), by Brett McLaughlin and David
Flanagan, covers almost all of Tiger&apos;s newest features -- including
annotations -- in a code-centric, developer-friendly format.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;Find hundreds more Java technology resources on the &lt;a href=&quot;http://www.ibm.com/developerworks/java/&quot;&gt;&lt;i&gt;developerWorks&lt;/i&gt; Java technology zone&lt;/a&gt;.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.ibm.com/developerworks/apps/SendTo?bookstore=safari&quot;&gt;Browse for books&lt;/a&gt; on these and other technical topics.&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;&lt;/div&gt;</description>
                        <pubDate>Thu, 05 Nov 2009 14:18:42 +0900</pubDate>
                        <category>Custom annotation</category>
                                </item>
                <item>
            <title>Beware of System.nanoTime() in Java</title>
            <dc:creator>theclub</dc:creator>
            <link>http://jspgeek.com/article/6376</link>
            <guid isPermaLink="true">http://jspgeek.com/article/6376</guid>
                        <comments>http://jspgeek.com/article/6376#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;주소 : &lt;a href=&quot;http://www.principiaprogramatica.com/?p=16&quot; target=&quot;_blank&quot;&gt;http://www.principiaprogramatica.com/?p=16&lt;/a&gt;&lt;br&gt;&lt;div class=&quot;contenttext&quot;&gt;
&lt;p&gt;The documentation for System.nanoTime() (and the function’s name
itself) leads developers to believe it’s a much more accurate timer
than anything else Java provides. Depending on which set of
documentation you read, it claims to use “the most precise available
system timer”. While I can’t speak for any architecture other than x86,
I can state that System.nanoTime() is broken for multi-CPU or
multi-core x86 systems, and generally unreliable on all x86 systems.
The problem lies in the RDTSC instruction which retrieves the number of
CPU ticks since the CPU started. On multi-core systems, each core will
have its own tick count, and they &lt;strong&gt;will not&lt;/strong&gt; match, so
every time your process switches CPUs, you get a different measurement.
The issue is compounded by the fact that some power management systems
actually alter the CPU’s frequency to save power, which breaks the
functionality even on single core, single CPU systems.&lt;/p&gt;
&lt;p&gt;In general, do not use System.nanoTime() in any program which you
don’t plan to strongly control how it is run, and the environment it is
run in.&lt;/p&gt;
&lt;/div&gt;&lt;br&gt;&lt;/div&gt;</description>
                        <pubDate>Sat, 31 Oct 2009 22:53:29 +0900</pubDate>
                        <category>System.nanoTime()</category>
                                </item>
                <item>
            <title>System.currentTimeMillis, System.nanoTime and Their Resolution</title>
            <dc:creator>theclub</dc:creator>
            <link>http://jspgeek.com/article/6373</link>
            <guid isPermaLink="true">http://jspgeek.com/article/6373</guid>
                        <comments>http://jspgeek.com/article/6373#comment</comments>
                                    <description>&lt;div class=&quot;xe_content&quot;&gt;주소 : &lt;a href=&quot;http://www.techper.net/2008/08/10/systemcurrenttimemillis-systemnanotime-and-their-resolution/&quot; target=&quot;_blank&quot;&gt;http://www.techper.net/2008/08/10/systemcurrenttimemillis-systemnanotime-and-their-resolution/&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;When reading about &lt;a href=&quot;http://www.ibm.com/developerworks/java/library/j-benchmark1.html&quot; onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/www.ibm.com&apos;);&quot;&gt;Robust Java Benchmarking&lt;/a&gt;, I came across some things I had not thought about myself. It turns out, that even though &lt;a title=&quot;Java System.currentTimeMillis&quot; href=&quot;http://java.sun.com/j2se/1.4.2/docs/api/java/lang/System.html#currentTimeMillis%28%29&quot; onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/java.sun.com&apos;);&quot;&gt;System.currentTimeMillis()&lt;/a&gt; has the unit of milliseconds, the precision with which the method can return, is quite different on various operating systems.&lt;/p&gt;
&lt;p&gt;Brent Boyer explains that Windows XP has a granularity of 15 ms,
while Linux with a 2.6 kernel have a much finer grained precision of 1
ms. For many purposes, I guess this is no problem. I know I have not
had a problem with it before.&lt;/p&gt;
&lt;p&gt;What I did not know is, that the &lt;a href=&quot;http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html#nanoTime%28%29&quot; onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/java.sun.com&apos;);&quot;&gt;System.nanoTime&lt;/a&gt;
call (available from Java5 and on) should be the one used for timing
intervals. In addition to being nano-based, this call does not work as
a “wall clock” as &lt;a title=&quot;Java System.currentTimeMillis&quot; href=&quot;http://java.sun.com/j2se/1.4.2/docs/api/java/lang/System.html#currentTimeMillis%28%29&quot; onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/java.sun.com&apos;);&quot;&gt;System.currentTimeMillis()&lt;/a&gt; do, in that it only measures elapsed time in an interval. The &lt;a title=&quot;Java System.currentTimeMillis&quot; href=&quot;http://java.sun.com/j2se/1.4.2/docs/api/java/lang/System.html#currentTimeMillis%28%29&quot; onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/java.sun.com&apos;);&quot;&gt;System.currentTimeMillis()&lt;/a&gt;
call tries to reflect a “wall clock” time, as milliseconds since
January 1, 1970. If the clock is drifting or being set by tools like &lt;a href=&quot;http://www.ntp.org/&quot; onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/www.ntp.org&apos;);&quot;&gt;NTP daemons&lt;/a&gt;, this will skew the results of &lt;a title=&quot;Java System.currentTimeMillis&quot; href=&quot;http://java.sun.com/j2se/1.4.2/docs/api/java/lang/System.html#currentTimeMillis%28%29&quot; onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/java.sun.com&apos;);&quot;&gt;System.currentTimeMillis()&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Coincidentally, I was reading a chapter on concurrency in &lt;a href=&quot;http://www.amazon.com/gp/product/0321356683?ie=UTF8&amp;amp;tag=tepe0d-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0321356683&quot; onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/www.amazon.com&apos;);&quot;&gt;Effective Java (2nd Edition) (The Java Series)&lt;/a&gt;&lt;img style=&quot;border: medium none  ! important; margin: 0px ! important;&quot; src=&quot;http://www.assoc-amazon.com/e/ir?t=tepe0d-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0321356683&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot; border=&quot;0&quot;&gt; by &lt;a href=&quot;http://en.wikipedia.org/wiki/Joshua_Bloch&quot; onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/en.wikipedia.org&apos;);&quot;&gt;Joshua Bloch&lt;/a&gt;, in which he states:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;For interval timing, always use System.nanoTime in preference to System.currentTimeMillis&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I do still have my thoughts about these two methods. When I read the javadoc for the new &lt;a href=&quot;http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html#nanoTime%28%29&quot; onclick=&quot;javascript:pageTracker._trackPageview(&apos;/outbound/article/java.sun.com&apos;);&quot;&gt;System.nanoTime&lt;/a&gt; call, I do not really feel at ease using it:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;…The value returned represents nanoseconds since some
fixed but arbitrary time (perhaps in the future, so values may be
negative). This method provides nanosecond precision, but not
necessarily nanosecond accuracy. No guarantees are made about how
frequently values change….&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Note the “perhaps in the future” and “values may be negative”. Hmmm!&lt;/p&gt;
&lt;p&gt;This just goes to show, that it is really hard, to provide a virtual
platform, that is supposed to look and act equal on all platforms.&lt;/p&gt;&lt;br&gt;&lt;/div&gt;</description>
                        <pubDate>Sat, 31 Oct 2009 22:16:05 +0900</pubDate>
                        <category>System.currentTimeMillis</category>
                        <category>System.nanoTime</category>
                                </item>
            </channel>
</rss>
