<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="http://rss.egloos.com/style/blog.xsl" type="text/xsl" media="screen"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
	<title>바람, 별 그리고  프로그래밍 -_-;</title>
	<link>http://lakhos.egloos.com</link>
	<description>28살....</description>
	<language>ko</language>
	<pubDate>Wed, 25 Jul 2007 11:15:17 GMT</pubDate>
	<generator>Egloos</generator>
	<image>
		<title>바람, 별 그리고  프로그래밍 -_-;</title>
		<url>http://pds3.egloos.com/logo/200708/15/20/b0015820.jpg</url>
		<link>http://lakhos.egloos.com</link>
		<width>80</width>
		<height>53</height>
		<description>28살....</description>
	</image>
  	<item>
		<title><![CDATA[ 광안대교 ]]> </title>
		<link>http://lakhos.egloos.com/3302652</link>
		<guid>http://lakhos.egloos.com/3302652</guid>
		<description>
			<![CDATA[ 
  <br><div style="FLOAT: left; MARGIN-RIGHT: 10px"><a href="http://lakhos.egloos.com/photo/album/23874/574381"><img alt="" src="http://pds3.egloos.com/pmf/200707/25/20/b0015820_0307371247604_m.jpg" border="0"></a><br><a title="부산여행" href="http://lakhos.egloos.com/photo/23874">부산여행</a></div><br clear="all"><br>광안대교....&nbsp; 여름휴가에 아무계획 없이 혼자 스스로 갔던...아니... 어쩌면 거의 마지못해 갔던....<br><br>이번 28살때의 여름휴가도 특별히 기억에 남는것 없이 보냈다... 막상 휴가때는 생각 못하다가...<br><br>휴가가 끝날때쯤이면 항상 이렇게 아쉬움이 남는다... <br><br>정말 언제쯤 휴가를 제대로 보낼 수 있을까?&nbsp; 			 ]]> 
		</description>

		<comments>http://lakhos.egloos.com/3302652#comments</comments>
		<pubDate>Wed, 25 Jul 2007 11:15:17 GMT</pubDate>
		<dc:creator>규영이</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 2차「오픈 리눅스폰」판매 시작 ]]> </title>
		<link>http://lakhos.egloos.com/3281389</link>
		<guid>http://lakhos.egloos.com/3281389</guid>
		<description>
			<![CDATA[ 
  <p>오픈 리눅스 폰이 출시 되었다. 이제 휴대폰도 Manufacture에 따른 흐름이 아닌 사용자 중심의 device로 변신의 시작인 것 같아 보인다. 정말 2020년에 휴대폰 시장은 어떻게 변해있을까?&nbsp; 정말 궁금하다. 휴대폰으로 모든 진정으로 모든 생활을 다 할 수 있는 세상이 올것인가?<br><br><br><br><br><br><br></p><div id="story_body[content]"><b>완전한 오픈 소스 기반 전화기 판매가 9일(미국시간) 시작됐다. 이로써 개발자들은 자체 모바일 리눅스 애플리케이션을 구축할 기회를 갖게 됐다.</b><br><br>네오1973은 오픈소스 운영 시스템 오픈모코(OpenMoko)를 실행하도록 설계된 최초의 이동전화기이다. 9일(미국시간) 개발자들을 대상으로 공식 출시된 이 제품은 지난해 트롤테크가 그린폰을 출시한 이후 두 번째로 제공하는 간편한 리눅스폰이다. <br><br>퍼스트 인터내셔널 컴퓨터가 제작한 터치스크린 GSM폰은 블루투스 2.0, 통합 지원 GPS, 마이크로 SD-기반 확장형 저장장치, 삼성전자의 프로세서를 자랑한다. <br><br>애플리케이션 개발업체는 전화기와 표준 액세서리를 비롯한 기본 키트를 300달러에 구입할 수 있으며, 450달러짜리의 이른바 '해커스 드림 박스'라는 고급 키트에는 디버그 보드와 케이블, 툴, 견고한 케이스까지 들어 있다. <br><br>이른바 네오1973의 '대량생산' 단계에서, 이 신형 버전의 전화기는 사양 목록에 3D 그래픽 가속화, 프로세스 강화 기능, 802.11b/g 와이파이 기능을 추가해 올해 말 일부 소매점에 판매될 예정이다. <br><br><center><table width="500"><tbody><tr><td align="middle"><img src="http://www.zdnet.co.kr/images/stories/news/enterprise/2007/07/0710/linuxphone_1.jpg"></td></tr><!?시작--><tr><td class="bk" align="middle"><span style="FONT-FAMILY: 돋움">제공: OpenMoko</span></td></tr><!?끝--></tbody></table></center><br><font face="돋움" color="#666600" size="2" font>해킹이 가능한 리눅스 기반 전화기 네오 1973은 오픈모코 소프트웨어 플랫폼을 기반으로 하는 오픈 소스 운영 시스템을 사용하고 있다. 퍼스트 인터내셔널 컴퓨터에서 제조했으며 기본형 키트는 300달러에, 고급형 키트는 450달러에 판매되고 있다. </font><br><br><center><table width="500"><tbody><tr><td align="middle"><img src="http://www.zdnet.co.kr/images/stories/news/enterprise/2007/07/0710/linuxphone_2.jpg"></td></tr><!?시작--><tr><td class="bk" align="middle"><span style="FONT-FAMILY: 돋움">제공: OpenMoko</span></td></tr><!?끝--></tbody></table></center><br><font face="돋움" color="#666600" size="2" font>해커스 드림 박스로 제공되는 네오1973의 고급 개발자 키트는 오픈모코 웹사이트에서 구입할 수 있다. </font><br><br><center><table width="500"><tbody><tr><td align="middle"><img src="http://www.zdnet.co.kr/images/stories/news/enterprise/2007/07/0710/linuxphone_3.jpg"></td></tr><!?시작--><tr><td class="bk" align="middle"><span style="FONT-FAMILY: 돋움">제공: OpenMoko</span></td></tr><!?끝--></tbody></table></center><br><font face="돋움" color="#666600" size="2" font>오픈모코 운영 시스템을 이용하는 네오1973은 시장에 두 번째로 선보이는 완전 개방형 리눅스폰이다. 첫 번째 제품은 트롤테크의 그린폰으로, 지난 해 출시됐다.</font><br><br><center><table width="500"><tbody><tr><td align="middle"><img src="http://www.zdnet.co.kr/images/stories/news/enterprise/2007/07/0710/linuxphone_4.jpg"></td></tr><!?시작--><tr><td class="bk" align="middle"><span style="FONT-FAMILY: 돋움">제공: OpenMoko</span></td></tr><!?끝--></tbody></table></center><br><font face="돋움" color="#666600" size="2" font>네오1973 내부. 블루투스 2.0, 통합 지원 GPS, 마이크로SD 기반 확장형 저장장치, 삼성전자 프로세서가 장착된 터치스크린 GSM폰.</font><br><br>모바일 리눅스는 서서히 눈길을 끌고 있으며, 업계 그룹 리모 파운데이션과 립스 포럼은 사업자와 제조사를 결합해 표준을 조직화하고 있다. <br><br>모토로라와 같은 일부 제조사는 이미 리눅스를 기반으로 일부 소비자용 핸드셋의 운영 시스템을 제조하고 있지만, 일각에서 모바일 오픈소스 움직임은 지나치게 파편화돼 네오 1973과 그린폰이 대상으로 삼고 있는 첨단 스마트폰 분야에서 효과를 거둘 수 없다는 비판을 받아 왔다. @<br></div><a class="lnk8" href="http://www.zdnet.co.kr/news/internet/search/0,39031339,39159351,00.htm" target="_blank"></a>			 ]]> 
		</description>
		<category>IT 관련 잡다한것들..</category>

		<comments>http://lakhos.egloos.com/3281389#comments</comments>
		<pubDate>Fri, 13 Jul 2007 00:04:50 GMT</pubDate>
		<dc:creator>규영이</dc:creator>
	</item>
	<item>
		<title><![CDATA[ DLL ]]> </title>
		<link>http://lakhos.egloos.com/3244573</link>
		<guid>http://lakhos.egloos.com/3244573</guid>
		<description>
			<![CDATA[ 
  <table cellspacing="0" cellpadding="0" width="100%" border="0"><tbody><tr><td class="p3 na" style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px">OS/2, <a href="http://terms.naver.com/item.nhn?dirId=2&amp;docId=12017"><span style="COLOR: #458a08">윈도즈</span></a> 등의 <a href="http://terms.naver.com/item.nhn?dirId=2&amp;docId=11592"><span style="COLOR: #458a08">운영 체계</span></a>(OS) 본래 기능으로, 소프트웨어의 루틴을 몇 개의 파일로 나누어 <a href="http://terms.naver.com/search.naver?mode=all&amp;query=%B5%F0%BD%BA%C5%A9"><span style="COLOR: #458a08">디스크</span></a>에 두고 필요한 것만을 실행 <a href="http://terms.naver.com/search.naver?mode=all&amp;query=%B8%DE%B8%F0%B8%AE"><span style="COLOR: #458a08">메모리</span></a>에 실어서 사용하기 위한 파일. DLL로 사용되는 파일은 <a href="http://terms.naver.com/item.nhn?dirId=2&amp;docId=19625"><span style="COLOR: #458a08">확장자</span></a>가 ‘dll’로 되어 있기 때문에 ‘DLL 파일’이라고 부른다. DLL의 장점은 루틴을 공통으로 사용하는 것이다. 루틴의 함수 집단을 자료집이라고 하는데, 보통 <a href="http://terms.naver.com/item.nhn?dirId=2&amp;docId=24081"><span style="COLOR: #458a08">실행 파일</span></a>을 작성할 때 자료집을 포함해서 <a href="http://terms.naver.com/search.naver?mode=all&amp;query=%C4%C4%C6%C4%C0%CF"><span style="COLOR: #458a08">컴파일</span></a>하는 경우가 많다. 그러나 이 방법은 동일 루틴을 다수의 실행 파일이 갖게 되어 비효율적이다. DLL은 다수의 실행 파일에 공유될 수 있기 때문에 디스크 용량이나 메모리를 절약할 수 있다. 또 프로그램을 수정하려는 경우, DLL 파일만을 수정함으로써 완료되는 경우도 있다. 윈도즈 등에서는 OS 기능은 물론 DLL을 애플리케이션과 공유할 수도 있으나, DLL 파일 등의 애플리케이션이 공유되고 있는지는 이용자 수준에서는 판단하기가 어렵다.</td></tr></tbody></table><!-- //본문관련 이미지  -->			 ]]> 
		</description>
		<category>IT 관련 잡다한것들..</category>

		<comments>http://lakhos.egloos.com/3244573#comments</comments>
		<pubDate>Fri, 22 Jun 2007 00:35:53 GMT</pubDate>
		<dc:creator>규영이</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 잘나가는 삼성맨... ]]> </title>
		<link>http://lakhos.egloos.com/2937520</link>
		<guid>http://lakhos.egloos.com/2937520</guid>
		<description>
			<![CDATA[ 
  <font class="list18_b">같은 회사에서 근무 하셨던 분이 이직을 해서 블로그 사업에 뛰어 들었다는 기사가 났다..<br />
<br />
나도 현재 회사에 얼마나 근무하게 될 지 모르겠다.. 분명 이직에 대해서 고민할 시기가 올 것이고 <br />
<br />
그 때 어떠한 선택을 할 것인지..고민스럽다. 이런분들의 선택도 나에겐 하나의 예시가 되는것 같다.<br />
<br />
<br />
<br />
----<br />
<br />
<br />
[웹2.0 기업 - 태터앤컴퍼니] 김창원 대표「잘나가던 삼성맨, 블로그에 뛰어들다」<br />
<br />
</font><b>"싸이월드처럼 경계 허무는 서비스 만들고 싶다"</b><br />
 <br />
 설치형 블로그인 태터툴즈를 서비스하고 있는 태터앤컴퍼니의 김창원 대표는 지난 10월 대기업인 삼성전자 무선사업부를 그만두고 블로그 사업에 뛰어들었다. <br />
 <br />
 "회사에는 작은 벤처 회사에 들어간다고 말하고 그만뒀죠"라는 말과 함께 멋쩍은 웃음을 보이는 김창원 대표는 회사에 합류한 이유를 두 가지로 꼽는다. <br />
 <br />
 우선 한 가지는 국내SW 벤처기업이 해외로 나가서 잘 된 경우를 보지 못했기 때문에 그런 회사를 만들고 싶었다는 것. 두 번째는 싸이월드에 대한 자극을 받았다는 이유다. 사람들에게 가치있고 온 국민이 쓸 수 있는 서비스를 만들고 싶다는 것이 그의 소망이다. <br />
 <br />
 "싸이월드가 너무 좋아요. 사회적 지위와 나이를 막론하고 모든 사람들을 엮어주고 많은 사람들이 쓰도록 만들었잖아요"<br />
 <br />
 지난해 9월, 5명으로 시작한 태터앤컴퍼니는 현재 22명의 직원들이 구슬땀을 쏟아내고 있다. 설립 1년 만에 태터툴즈 외에 가입형 블로그 서비스 티스토리( www.tistory.com), 블로그 미디어 사이트 이올린(www.eolin.com) 같은 새로운 서비스들을 선보이며 블로그 업계서 영역을 확장하고 있는데, 특히 다음과 제휴를 통해 만들어낸 티스토리는 현재 3만여 명 이상이 가입해 사용하고 있고 정식 서비스가 시작되면 그 수는 더욱 증가할 것으로 전망되고 있다. <br />
 <br />
 10여년 전 한국과학기술원(KAIST) 재학시절 전산시스템 연구동아리 `쿠스(KUS)의 회장으로 있으면서 포항공대와의 해킹전쟁을 주도했던 인물로 '한국의 전설적인 해커' 중 한 사람으로 꼽히고 있는 유명 인물인 노정석 대표는 기술과 개발을, 김창원 대표는 서비스 기획과 마케팅 등을 맡고 있다. <br />
 <br />
 <b>「올해는 블로그 확대 원년」</b><br />
 특히 지난 11월 태터앤컴퍼니는 일본의 소프트뱅크벤처스로부터 15억 투자 유치를 받아 관심을 끌었다. 김 사장은 "오프라인 기업이 아닌만큼 공장을 증설할 필요는 없겠죠. 많이 달라진 것은 없지만 중기적 플랜을 짜는데 도움이 됐습니다. 올해는 국내서 내실을 다져서 해외로 서비스를 확장하는 것이 목표"라고 전한다.<br />
 <br />
 그는 서비스와 시장의 흐름이 일치해야 성공할 수 있다고 보고 있다. 5년 전 웹 오피스가 나왔을 때 환경이 뒷받침되지 않아서 성공을 못했지만 브로드밴드 확대와 사람들의 인식 변화로 이제 어느 정도 각광을 받고 있는 것처럼 올해가 블로그 서비스의 원년이 될 것이라는 기대를 품고 있다. <br />
 <br />
 김창원 대표는 "블로그는 엄청나게 확대될 것이며, 심지어 미디어들도 블로그로 확대되고 있죠"라며 "테터앤컴퍼니는 그 중에서도 플랫폼 비즈니스를 하고 싶은거예요. 상거래든지 검색이든지 테터툴즈 안에서 가능할 수 있도록 할 것이고 이를 위한 저변확대가 올해 꼭 이뤄야 할 목표입니다"라고 전했다. @<br />
<br />
<br />
출처: <a href="http://www.zdnet.co.kr/news/internet/portal/0,39031333,39154620,00.htm">http://www.zdnet.co.kr/news/internet/portal/0,39031333,39154620,00.htm<br />
</a><br />
			 ]]> 
		</description>
		<category>일상의 기록...</category>

		<comments>http://lakhos.egloos.com/2937520#comments</comments>
		<pubDate>Mon, 15 Jan 2007 00:44:06 GMT</pubDate>
		<dc:creator>규영이</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 아이폰 ]]> </title>
		<link>http://lakhos.egloos.com/2927858</link>
		<guid>http://lakhos.egloos.com/2927858</guid>
		<description>
			<![CDATA[ 
  http://www.engadget.com/gallery/first-iphone-pics/130234<br />
<br />
실제 동작 동영상<br />
http://zdnet.com.com/1606-2-6148749.html<br />
			 ]]> 
		</description>
		<category>IT 관련 잡다한것들..</category>

		<comments>http://lakhos.egloos.com/2927858#comments</comments>
		<pubDate>Wed, 10 Jan 2007 00:12:35 GMT</pubDate>
		<dc:creator>규영이</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 최고의 토성사진 ]]> </title>
		<link>http://lakhos.egloos.com/2917223</link>
		<guid>http://lakhos.egloos.com/2917223</guid>
		<description>
			<![CDATA[ 
  <div id="story_body[content]"><span style="color: rgb(0, 102, 0);">나사(NASA)에서 진행하는 최고의 토성사진 투표에 나온 사진들이다.&nbsp; 언젠가 토성도 관광하는 날이 오겠지?</span><br />
<span style="color: rgb(0, 102, 0);">그때까지 살아있을 수 있을런지..-_-; </span><br />
<br />
<span style="color: rgb(0, 102, 0);">개인적으로 2번사진이 맘에 든다. </span><b><br />
<br />
<br />
<br />
<br />
</b><div id="story_body[content]"><b>카 시니(Cassini) 토성 탐사선이 토성에 접근한지 2주년이 되감에 따라 NASA는 이 탐사선이 찍은 사진 가운데 최고의 사진을 뽑는 투표를 진행했다. 사용자는 NASA 사이트를 방문하여 가장 마음에 드는 사진에 투표했다. 카시니-호이겐스(Cassini-Huygens) 미션은 NASA, 유럽 우주국 및 이태리 우주국간의 협력 프로젝트.</b> <br />
 <br />
 NASA는 15장의 사진에서 최고의 사진을 뽑는 투표를 진행했는데 우리가 가장 좋아하는 사진 중 하나인 사진 16번은 후보작으로 지명되지도 않았다. 최고의 사진으로 선정된 사진은 다음달에 발표. <br />
 <br />
 <center><table border="0" cellpadding="0" cellspacing="0" width="500"><tbody><tr><td align="center"><img src="http://www.zdnet.co.kr/images/stories/news/enterprise/2007/01/0103/saturn_01.jpg" /></td></tr><tr><td class="popul_list" align="center"><font color="#0f88e0">사진 1 (제공:NASA/JPL/Space Science Institute)</font></td></tr></tbody></table></center>이미지에서 토성의 고리 사이에 나타난 푸른 점은 지구. <br />
 <br />
 <center><table border="0" cellpadding="0" cellspacing="0" width="500"><tbody><tr><td align="center"><img src="http://www.zdnet.co.kr/images/stories/news/enterprise/2007/01/0103/saturn_02.jpg" /></td></tr><tr><td class="popul_list" align="center"><font color="#0f88e0">사진 2 (제공:NASA/JPL/Space Science Institute)</font></td></tr></tbody></table></center>그 이면에 위치한 태양으로 인해 위성 엔셀라두스(Enceladus)에서 분출된 얼음재가 엔셀라두스 표면으로부터 수만 미터 상공에까지 도달하는 것을 볼 수 있다. 이 입자들은 엔셀라두스에 있는 간헐천(geyser)에서 분출된 물의 부산물일 가능성이 가장 크다. <br />
 <br />
 <center><table border="0" cellpadding="0" cellspacing="0" width="500"><tbody><tr><td align="center"><img src="http://www.zdnet.co.kr/images/stories/news/enterprise/2007/01/0103/saturn_03.jpg" /></td></tr><tr><td class="popul_list" align="center"><font color="#0f88e0">사진 3 (제공:NASA/JPL/Space Science Institute)</font></td></tr></tbody></table></center>토 성의 F 고리를 촬영한 여러 이미지를 조합하면 위성 프로메테우스가 고리 옆을 지나가면서 매 14시간 42분마다 만들어내는 ‘협곡(gorge)’이 나타난다. 이 협곡은 프로메테우스의 중력으로 인한 것으로서 실제로 프로메테우스는 결코 F 고리로 진입하지 않는다. <br />
 <br />
 <center><table border="0" cellpadding="0" cellspacing="0" width="500"><tbody><tr><td align="center"><img src="http://www.zdnet.co.kr/images/stories/news/enterprise/2007/01/0103/saturn_04.jpg" /></td></tr><tr><td class="popul_list" align="center"><font color="#0f88e0">사진 4 (제공:NASA/JPL/Space Science Institute)</font></td></tr></tbody></table></center>카시니 탐사선이 토성의 그림자에 머무는 동안 촬영한 사진에서 토성 고리에 대한 새로운 세부사실이 포착되었다. <br />
 <br />
 <center><table border="0" cellpadding="0" cellspacing="0" width="500"><tbody><tr><td align="center"><img src="http://www.zdnet.co.kr/images/stories/news/enterprise/2007/01/0103/saturn_05.jpg" /></td></tr><tr><td class="popul_list" align="center"><font color="#0f88e0">사진 5 (제공:NASA/JPL/University of Arizona)</font></td></tr></tbody></table></center>이 이미지는 카시니 우주선에 장착된 가시광선-적외선 분광기(visual infrared mapping spectrometer)를 통해 얻은 것으로서 실제로는 토성의 깊은 구름 층에서 구름이 없는 부분(clearings)인 밝은 ‘펄(pearls)’을 보여주고 있다. <br />
 <br />
 <center><table border="0" cellpadding="0" cellspacing="0" width="500"><tbody><tr><td align="center"><img src="http://www.zdnet.co.kr/images/stories/news/enterprise/2007/01/0103/saturn_06.jpg" /></td></tr><tr><td class="popul_list" align="center"><font color="#0f88e0">사진 6 (제공:NASA/JPL/Space Science Institute)</font></td></tr></tbody></table></center>토 성의 위성인 엔셀라두스는 광범위하게 배치된 기하학적 형상으로 과학자들을 사로잡았다. 가장 눈에 띄는 형상은 남극에서부터 시작되는 선명한 색상의 여러 단열(fractures). 이러한 단열은 위성의 자전 속도가 변해 그 결과 이 위성이 형상이 평탄해지면서 형성되었을 가능성이 크다. <br />
 <br />
 <center><table border="0" cellpadding="0" cellspacing="0" width="500"><tbody><tr><td align="center"><img src="http://www.zdnet.co.kr/images/stories/news/enterprise/2007/01/0103/saturn_07.jpg" /></td></tr><tr><td class="popul_list" align="center"><font color="#0f88e0">사진 7 (제공:NASA/JPL/Space Science Institute)</font></td></tr></tbody></table></center>하이페리온(Hyperion)은 거대한 스펀지(해면질)처럼 보이지만 그 174마일의 직경은 융해 침식(thermal erosion)에 의해 모양이 바뀐 충돌 크레이터(impact craters)로 뒤덮여 있다. <br />
 <br />
 <center><table border="0" cellpadding="0" cellspacing="0" width="500"><tbody><tr><td align="center"><img src="http://www.zdnet.co.kr/images/stories/news/enterprise/2007/01/0103/saturn_08.jpg" /></td></tr><tr><td class="popul_list" align="center"><font color="#0f88e0">사진 8 (제공:NASA/JPL/Space Science Institute)</font></td></tr></tbody></table></center>엔셀라두스의 남극쪽에서 물방울이 튀는 것처럼 보이는 물질은 간헐천(geyser)의 물로 여겨진다.<br />
 <br />
 <center><table border="0" cellpadding="0" cellspacing="0" width="500"><tbody><tr><td align="center"><img src="http://www.zdnet.co.kr/images/stories/news/enterprise/2007/01/0103/saturn_09.jpg" /></td></tr><tr><td class="popul_list" align="center"><font color="#0f88e0">사진 9 (제공:NASA/JPL/Space Science Institute)</font></td></tr></tbody></table></center>이 작은 토성의 위성은 폭이 15마일로 측정되며 큰 충돌을 당한 여타의 위성들과 비교할 때 매끄러운 표면을 자랑한다. <br />
 <br />
 <center><table border="0" cellpadding="0" cellspacing="0" width="500"><tbody><tr><td align="center"><img src="http://www.zdnet.co.kr/images/stories/news/enterprise/2007/01/0103/saturn_10.jpg" /></td></tr><tr><td class="popul_list" align="center"><font color="#0f88e0">사진 10 (제공:NASA/JPL/Space Science Institute)</font></td></tr></tbody></table></center>특별한 필터를 이용해 어떻게 디온(Dione)과 토성이 인간의 눈과 같이 보이는지를 근접 촬영하였다. 이 사진을 찍을 때 카시니 우주선은 토성의 고리 아랫부분쪽에 거의 닿을 정도로 비행했다.<br />
 <br />
 <center><table border="0" cellpadding="0" cellspacing="0" width="500"><tbody><tr><td align="center"><img src="http://www.zdnet.co.kr/images/stories/news/enterprise/2007/01/0103/saturn_11.jpg" /></td></tr><tr><td class="popul_list" align="center"><font color="#0f88e0">사진 11 (제공:NASA/JPL/Space Science Institute)</font></td></tr></tbody></table></center>디온의 모습. 충돌 크레이터에 의해 형성된 경관을 보여준다. <br />
 <br />
 <center><table border="0" cellpadding="0" cellspacing="0" width="500"><tbody><tr><td align="center"><img src="http://www.zdnet.co.kr/images/stories/news/enterprise/2007/01/0103/saturn_12.jpg" /></td></tr><tr><td class="popul_list" align="center"><font color="#0f88e0">사진 12 (제공:NASA/JPL/Space Science Institute)</font></td></tr></tbody></table></center>위성 엔셀라두스(작은 쪽)는 태양계에서 가장 밝은 천체이다. 황금색 아지랑이가 타이탄(Titan) 주변을 감싸고 있다. 두 위성 모두 지질학적으로 활성 상태에 있다.<br />
 <br />
 <center><table border="0" cellpadding="0" cellspacing="0" width="500"><tbody><tr><td align="center"><img src="http://www.zdnet.co.kr/images/stories/news/enterprise/2007/01/0103/saturn_13.jpg" /></td></tr><tr><td class="popul_list" align="center"><font color="#0f88e0">사진 13 (제공:NASA/JPL/Space Science Institute)</font></td></tr></tbody></table></center>토성의 고리 너머에서 보면 타이탄 주변의 스모그성 대기가 초승달 모양을 형성하고 있다. <br />
 <br />
 <center><table border="0" cellpadding="0" cellspacing="0" width="500"><tbody><tr><td align="center"><img src="http://www.zdnet.co.kr/images/stories/news/enterprise/2007/01/0103/saturn_14.jpg" /></td></tr><tr><td class="popul_list" align="center"><font color="#0f88e0">사진 14 (제공:NASA/JPL)</font></td></tr></tbody></table></center>재너듀(Xanadu)라 불리는 타이탄의 일부 지역. 이 곳은 동쪽에서 서쪽까지 약 2,485마일, 북쪽에서 남쪽까지 약 1,243마일에 이르며 지구의 표면에 영향을 미치는 지질력을 가지고 있다.<br />
 <br />
 <center><table border="0" cellpadding="0" cellspacing="0" width="500"><tbody><tr><td align="center"><img src="http://www.zdnet.co.kr/images/stories/news/enterprise/2007/01/0103/saturn_15.jpg" /></td></tr><tr><td class="popul_list" align="center"><font color="#0f88e0">사진 15 (제공:NASA/JPL/University of Arizona)</font></td></tr></tbody></table></center>카 시니 탐사선이 정기적으로 타이탄 옆을 지나갈 때 이 거대한 위성의 표면에서 발생하는 변화를 관찰할 수 있다. 지난해 12월 촬영된 사진 오른쪽의 이미지는 매우 밝은 남극 지역의 구름층을 보여준다. 지난해 10월에 촬영된 왼쪽 이미지에서는 구름을 거의 볼 수가 없다. <br />
 <br />
 <center><table border="0" cellpadding="0" cellspacing="0" width="500"><tbody><tr><td align="center"><img src="http://www.zdnet.co.kr/images/stories/news/enterprise/2007/01/0103/saturn_16.jpg" /></td></tr><tr><td class="popul_list" align="center"><font color="#0f88e0">사진 16 (제공:NASA/JPL/Space Science Institute)<br />
<br />
<br />
</font></td></tr></tbody></table></center>이 사진은 본 컨테스트를 위해 편집된 것은 아니지만 토성에서 새로 발견된 놀라운 형상 중 하나인 행성 남극의 거대한 회오리를 보여주고 있다. <br />
 <br />
 바람은 눈 주위를 소용돌이치며 흐르는데 이는 토성의 바람이 시속 350마일로 분다는 점을 제외하면 지구의 허리케인과 흡사하다. 지구에서의 5급 허리케인은 시속 156마일의 바람을 동반한다. 이 폭풍의 직경은 약 5천 마일. <br />
<br />
출처: http://www.zdnet.co.kr/news/internet/etc/0,39031281,39154301,00.htm<br />
<br />
</div>     </div>			 ]]> 
		</description>
		<category>일상의 기록...</category>

		<comments>http://lakhos.egloos.com/2917223#comments</comments>
		<pubDate>Thu, 04 Jan 2007 14:24:38 GMT</pubDate>
		<dc:creator>규영이</dc:creator>
	</item>
	<item>
		<title><![CDATA[ POJO로 돌아온「EJB 3.0과 자바 퍼시스턴스 API」 ]]> </title>
		<link>http://lakhos.egloos.com/2902729</link>
		<guid>http://lakhos.egloos.com/2902729</guid>
		<description>
			<![CDATA[ 
  <b>EJB(Enterprise JavaBeans)는 한마디로 말해 분산 컴포넌트와 DB에 대한 접근 방법을 제공하는 기술이라고 할 수 있다.</b> <br />
 <br />
 EJB는 자바EE 프레임워크에서 백엔드를 담당하는 중요한 역할을 해왔지만 기존 EJB 2.1은 개발자에게 다가가기 쉬운 존재는 아니었다. 일반적인 자바 OOP 프로그래밍과는 다른 복잡한 구조와 많은 코드, 복잡한 XML 정의가 필요한 등의 문제 탓이었다. EJB 프로그래밍을 위해서는 많은 노력이 필요 했고, 당연히 처음 접하는 사람들에게는 높은 벽으로 느껴질 수 밖에 없었다.<br />
 <br />
 하지만 EJB 3.0에서는 EJB만의 복잡한 프로그래밍 모델에서 탈피하여 일반적인 자바 프로그래밍 모델인 POJO(Plain Old Java Object) 스타일로 바뀌면서 단순화된 프로그래밍이 가능 해졌다.<br />
 <br />
 POJO 스타일 프로그래밍은 이미 스프링(Spring)이나 하이버 네이트(Hibernate)와 같은 오픈 소스 프레임워크에서 많이 사용 되고 있다. 단순화된 프로그래밍 모델과 코드의 재활용 가능성을 높여줄 뿐만 아니라 IDE의 리팩토링 기능을 십분 활용할 수 있다는 점들이 이 프레임워크들의 인기 비결이다.<br />
 <br />
 또한 자바SE 5에서 추가된 메타데이터 어노테이션(Metadata annotation) 언어 기능을 사용하여 EJB에 관련된 설정을 XML 디스크립터(deployment descriptor)대신 코드 상에서 직접 할 수 있게 되었다. 이렇게 하면서 개발자는 복잡한 XML 설정에서 탈피할 수 있게 되고 코드 상에서 연관된 설정을 할 수 있기 때문에 코드의 가독성도 높아지게 되었다. 물론 그 외에도 여러 방면에서 개발자 편의성을 높이기 위한 노력이 이루어졌다.<br />
 <br />
 자바 퍼시스턴스(Java Persistence) API 1.0은 DB에 접근하기 위해 사용되었던 기존 엔티티 빈을 대체하는 새로운 기술이다. 자바 퍼시스턴스는 엔티티 빈과는 아주 다른 POJO 기반의 ORM(Object-Relational Mapping) 프로그래밍 모델을 제공하며 기존에 존재하던 하이버네이트(Hibernate)와 같은 ORM 솔루션과 유사하다. 또한 EJB에 국한되지 않은 범용적인 기술로 만들어졌기 때문에 자바EE 환경에서뿐만 아니라 자바SE 환경 에서도 사용할 수 있다.<br />
 <br />
 자바 퍼시스턴스는 EJB 3.0과는 별도로 다루기로 하고 여기에서는 먼저 EJB 3.0에 대해서 알아보자.<br />
 <br />
 <table align="center" border="0" cellpadding="0" cellspacing="0" width="568"><tbody><tr><td height="24" width="5"><img src="http://www.zdnet.co.kr/i/ui/common/r_title_ro_left.gif" border="0" height="24" width="5" /></td><td class="list15_00" bgcolor="#d9d0b7"><font color="#724339">&nbsp;&nbsp;<b>EJB 3.0</b></font></td><td height="24" width="5"><img src="http://www.zdnet.co.kr/i/ui/common/r_title_ro_right.gif" border="0" height="24" width="5" /></td></tr></tbody></table><br />
 EJB 3.0 프로그래밍 모델이 EJB 2.1에 비해서 얼마나 개선되었을까? 백문이 불여일견이라 했으니 Hello 메시지를 출력하는 간단한 예제 코드인 HelloEJB를 통해 살펴보도록 하자. &lt;리스트 1&gt;은 기존 EJB 2.1 방식으로 구현한 것이다.<br />
 <br />
 <table align="center" border="0" cellpadding="0" cellspacing="0" width="440">  <tbody><tr>    <td>      <table border="0" cellpadding="0" cellspacing="0" width="100%">        <tbody><tr>          <td bgcolor="#646464">            <table border="0" cellpadding="1" cellspacing="1" width="100%">              <tbody><tr>                <td width="1"><br />
</td>                <td class="popul_list"><font color="#ffffff">&nbsp;&lt;리스트 1&gt; EJB 2.1로 구현한 HelloEJB와 클라이언트</font></td>              </tr>            </tbody></table>          </td>          <td bgcolor="#646464">            <div align="right"><img src="http://images.zdnet.co.kr/img/edit_table/table9_1.gif" /></div>          </td>        </tr>      </tbody></table>    </td>  </tr>  <tr>    <td bgcolor="#efefef">      <table id="100" style="display: none;" border="0" cellpadding="3" cellspacing="3" width="100%">        <tbody><tr>          <td class="popul_list"><br />
 // 컴포넌트 인터페이스<br />
 public interface Hello extends EJBObject {public String sayHello() throws RemoteException;}<br />
 // 홈 인터페이스<br />
 public interface HelloHome extends EJBHome {Hello create() throws RemoteException, CreateException;}<br />
 // 빈 클래스<br />
 public class HelloBean implements SessionBean {public String sayHello(){<br />
 return "Hello EJB!";<br />
 }<br />
 public void ejbCreate() {}<br />
 public void ejbRemove() {}<br />
 public void ejbActivate() {}<br />
 public void ejbPassivate() {}<br />
 public void setSessionContext(SessionContext sc) {}}<br />
 // ejb-jar.xml<br />
 <ejb-jar version="2.1"><br />
 xmlns="http://java.sun.com/xml/ns/j2ee"&gt;<enterprise-beans><br />
 <session><br />
 <ejb-name>HelloEJB</ejb-name><br />
 <home>hello.HelloHome</home><br />
 <remote>hello.Hello</remote><br />
 <ejb-class>hello.HelloBean</ejb-class><session-type>Stateless</session-type></session><br />
 </enterprise-beans><br />
 </ejb-jar><br />
 // 클라이언트<br />
 public class HelloClient {<br />
 public static void main(String[] args) throws Exception {Context ic = new InitialContext();Object objref =<br />
 ic.lookup("java:comp/env/ejb/HelloEJB");HelloHome home =<br />
 (HelloHome)PortableRemoteObject.narrow(objref,HelloHome.class);<br />
 Hello hello = home.create();<br />
 System.out.println(hello.sayHello());}<br />
 }<br />
 <br />
</td>        </tr>      </tbody></table>    <br />
</td>  </tr>  <tr>    <td><a href="javascript:showLayer('100')"><img src="http://images.zdnet.co.kr/img/edit_table/table9_2.gif" border="0" /></a></td>  </tr></tbody></table><br />
 <br />
 <table align="center" border="0" cellpadding="0" cellspacing="0" width="500">  <tbody><tr>     <td class="button_00">       <table border="0" cellpadding="0" cellspacing="0" width="100%">        <tbody><tr>           <td width="7"><img src="http://images.zdnet.co.kr/img/edit_table/table8_1.gif" height="24" width="7" /></td>          <td class="button_00" background="http://images.zdnet.co.kr/img/edit_table/table8_1_bg.gif" valign="baseline" width="350"><font color="#ffffff">자바EE 5 애플리케이션 서버</font></td>          <td width="34"><img src="http://images.zdnet.co.kr/img/edit_table/table8_2.gif" height="24" width="34" /></td>          <td background="http://images.zdnet.co.kr/img/edit_table/table8_3_bg.gif">&nbsp; </td>          <td width="5"><img src="http://images.zdnet.co.kr/img/edit_table/table8_7.gif" height="24" width="5" /></td>        </tr>      </tbody></table>    </td>  </tr>  <tr>     <td background="http://images.zdnet.co.kr/img/edit_table/table8_bg.gif">       <table border="0" cellpadding="0" cellspacing="0" width="100%">        <tbody><tr>           <td bgcolor="#000000" width="1"><br />
</td>          <td>             <table border="0" cellpadding="0" cellspacing="10" width="100%">              <tbody><tr>                 <td class="button_00">                   <table border="0" cellpadding="0" cellspacing="0" width="100%">                    <tbody><tr>                       <td>                         <table border="0" cellpadding="0" cellspacing="0" width="100%">                          <tbody><tr>                             <td class="button_00"><br />
 현재 여러 벤더들이 자바EE 5의 플랫폼을 내놓고 있다. 완성된 상용 수준의 제품은 아니지만 충분히 개발용으로 쓸 만하다. 국내 제품으로는 자 바EE 5 호환 인증을 세계 최초로 통과한 티맥스 소프트의 제우스 (JEUS) 6.0 프리뷰가 있다. 또한 썬마이크로시스템즈의 자바EE 5 SDK(또는 이의 오픈소스 구현인 글래스피시(GlassFish))도 나와 있다.<br />
 그 외에도 EJB 3.0만 지원하는 JBoss EJB 3.0과 Oracle Application<br />
  Server 10.1.3, BEA WebLogic Server EJB 3.0 프리뷰와 같은 제품도 있으니 참고하자.<br />
 여기에 제시된 예제들은 기본적으로 제우스 6.0을 기반으로 작성 되었으며 자바EE 5 SDK를 통해서도 구동할 수 있다.<br />
 <br />
 ● TmaxSoft JEUS 6.0 - http://www.tmax.co.kr<br />
 ● Java EE 5 SDK - http://java.sun.com/javaee/<br />
 ● GlassFish - https://glassfish.dev.java.net/<br />
 ● JBoss - http://jboss.com/products/jbossas<br />
 ● Oracle AS - http://www.oracle.com/technology/products/ias/index.html<br />
 ● BEA WebLogic Server - http://www.bea.com/products/weblogic/server/<br />
 </td>                          </tr>                        </tbody></table>                      </td>                    </tr>                  </tbody></table>                </td>              </tr>            </tbody></table>          </td>          <td bgcolor="#000000" width="1"><br />
</td>        </tr>      </tbody></table>    </td>  </tr>  <tr>     <td class="bk">       <table border="0" cellpadding="0" cellspacing="0" width="100%">        <tbody><tr>           <td background="http://images.zdnet.co.kr/img/edit_table/table8_bot_mid.gif"><img src="http://images.zdnet.co.kr/img/edit_table/table8_bot_left.gif" height="7" width="5" /></td>          <td background="http://images.zdnet.co.kr/img/edit_table/table8_bot_mid.gif"><br />
</td>          <td background="http://images.zdnet.co.kr/img/edit_table/table8_bot_mid.gif">            <div align="right"><img src="http://images.zdnet.co.kr/img/edit_table/table8_bot_right.gif" height="7" width="6" /></div>          </td>        </tr>      </tbody></table>    </td>  </tr></tbody></table><br />
 <br />
 이미 EJB 프로그래밍을 해본 독자라면 알겠지만 매우 간단한 HelloEJB 예제에도 많은 코드가 필요하다. 또한 일반적인 자바 OOP 프로그래밍과 달리 EJB 만의 특수한 모델에 맞게 프로그래밍 해야 했다. 다음은 EJB 2.1의 대표적인 불편사항들을 정리 해 놓은 것이다.<br />
 <br />
 ● 컴포넌트 인터페이스 - 비즈니스 메소드를 정의한 부분으로 EJBObject/EJBLocalObject를 extends하여 정의한다. EJB만의 인터페이스 상속구조를 따라야 하므로 기존에 존재하던 일반 자바 인터페이스를 바로 재활용 할 수 없다. 또한 EJBObject를 extends한 원격 인터페이스의 경우 RMI(Remote Method Invocation) 인터페이스이므로 모든 메소드 정의에 RemoteException이 꼭 들어가야 한다.<br />
 ● 홈 인터페이스 - Stateless 세션 빈의 경우 항상 똑 같이 위와 같은 create() 메소드를 정의해야 한다. EJB가 많아지면 반복적으로 코딩해야 한다.<br />
 ● 빈 클래스 - 컴포넌트 인터페이스에 정의된 비즈니스 메소드를 구현한다. 하지만 해당 컴포넌트 인터페이스를 문법적으로 implements 하지 않아 실제 인터페이스와의 관계가 명시적으로 인식되지 않는다(IDE의 리팩토링 기능도 쓸 수 없다).<br />
 SessionBean 인터페이스를 항상 implements해야 하기 때문 에 쓰지도 않는 콜백 메소드를 모두 구현해야 한다.<br />
 ● ejb-jar.xml - EJB에 대한 설정을 선언적으로 해주며 항상 있어야 한다. 컴포넌트 인터페이스, 홈 인터페이스, 빈 클래스의 관계가 여기서 나타나기 때문에 자바 코드와 별도로 항상 이 XML을 참고해야 EJB 구조를 알 수 있다. 설정이 많아지면 XML 내용과 구조가 복잡해진다.<br />
 ● 클라이언트 - EJB를 얻기 위해 여러 단계를 거친다. JNDI lookup, 홈 객체 캐스팅, create 메소드 호출 등 비즈니스 로직과 관계 없는 코드가 많다. 또한 컴포넌트 인터페이스가 RemoteException을 던질 수 있기 때문에 항상 예외(checked Exception 처리를 해주어야 한다.<br />
 <br />
 EJB 3.0에서는 위에서 제기한 상당수의 문제를 해결하였다.<br />
 <br />
 &lt;리스트 2&gt;는 똑같은 예제를 EJB 3.0 방식으로 구현한 것이다.<br />
 <br />
 실제 로직에 불필요한 코드의 양이 확 줄었고 POJO 방식으로 프로그래밍 모델이 단순해진 것을 확인할 수 있다. 새롭게 도입 된 비즈니스 인터페이스는 이제 보통의 자바 인터페이스이고 빈 클래스가 이를 구현(implements)하는 POJO 객체이다. EJB에 관련된 내용은 어노테이션을 통해 표기되므로 EJB 구조를 코드 상에서 파악할 수 있다. 따라서 XML 설정(ejb-jar.xml)은 더 이 상 사용할 필요가 없다. 반복되던 홈 인터페이스 정의도 없어졌 다. 클라이언트 코드도 매우 깔끔해졌는데 인젝션(Injection)을 통해 EJB를 얻는 과정이 단순화 되었다.<br />
 <br />
 <table align="center" border="0" cellpadding="0" cellspacing="0" width="440">  <tbody><tr>    <td>      <table border="0" cellpadding="0" cellspacing="0" width="100%">        <tbody><tr>          <td bgcolor="#646464">            <table border="0" cellpadding="1" cellspacing="1" width="100%">              <tbody><tr>                <td width="1"><br />
</td>                <td class="popul_list"><font color="#ffffff">&nbsp;&lt;리스트 2&gt; EJB 3.0으로 구현한 HelloEJB와 클라이언트</font></td>              </tr>            </tbody></table>          </td>          <td bgcolor="#646464">            <div align="right"><img src="http://images.zdnet.co.kr/img/edit_table/table9_1.gif" /></div>          </td>        </tr>      </tbody></table>    </td>  </tr>  <tr>    <td bgcolor="#efefef">      <table id="200" style="display: none;" border="0" cellpadding="3" cellspacing="3" width="100%">        <tbody><tr>          <td class="popul_list"><br />
 // 비즈니스 인터페이스<br />
 @Remote<br />
 public interface Hello {<br />
 public String sayHello();<br />
 }<br />
 // 홈 인터페이스 - 없음<br />
 // 빈 클래스<br />
 @Stateless<br />
 public class HelloBean implements Hello {public String sayHello(){<br />
 return "Hello EJB!";<br />
 }<br />
 }<br />
 // ejb-jar.xml - 불필요함<br />
 // 클라이언트<br />
 public class HelloClient {<br />
 @EJB<br />
 private static Hello hello;<br />
 public static void main(String[] args) {System.out.println(hello.sayHello());}<br />
 }<br />
 <br />
</td>        </tr>      </tbody></table>    <br />
</td>  </tr>  <tr>    <td><a href="javascript:showLayer('200')"><img src="http://images.zdnet.co.kr/img/edit_table/table9_2.gif" border="0" /></a></td>  </tr></tbody></table><br />
 <br />
 앞으로는 LottoApp 이라고 하는 간단한 샘플 애플리케이션을 통해 EJB 3.0 코드를 살펴볼 것이다. LottoApp는 로또를 발급 하는 애플리케이션으로 웹 인터페이스를 통해 EJB를 호출한다.<br />
 웹을 통해 들어온 사용자 요청은 서블릿(Servlet)이 다음의 EJB 들을 사용하여 처리하게 된다.<br />
 <br />
 ● LotteryBean - 로또 번호를 발급하는 Stateful 세션 빈● RandomGeneratorBean - 1에서 45사이의 랜덤 숫자를 발생시키는 Stateless 세션 빈<br />
 ● TimestampBean - 현재 날짜를 돌려주는 Stateless 세션 빈<br />
 <br />
 <table align="center" border="0" cellpadding="0" cellspacing="0" width="568"><tbody><tr><td class="list15_00"><b>세션 빈(Session Bean)</b></td></tr><tr><td bgcolor="#000000" height="2"><br />
</td></tr></tbody></table><br />
 먼저 세션 빈의 변화된 특징에 대해서 먼저 살펴보자. 새롭게 도입된 세션 빈의 비즈니스 인터페이스(business interface)는 EJBObject/EJBLocalObject를 extends한 인터페이스대신 일반적인 자바 인터페이스를 사용한다. 단지 원격 인터페이스인지<br />
 로컬 인터페이스인지 구분하기 위해 @Remote 또는 @Local 어노테이션을 아래와 같이 달아주면 된다.<br />
 <br />
 @Remote // 원격 비즈니스 인터페이스public interface RandomGenerator {public int getNumber( );<br />
 }<br />
 <br />
 @Local // 로컬 비즈니스 인터페이스public interface Timestamp {<br />
 public String today( );<br />
 }<br />
 <br />
 위의 RandomGenerator 인터페이스에서 보듯이 원격 인터페이스의 경우에 java.rmi.Remote 인터페이스를 extends 하지 않아도 되어(선택사항임) 모든 메소드에 RemoteException을 붙일 필요가 없어졌다. 따라서 클라이언트도 이제 이 체크 익셉션 (checked Exception)을 항상 처리할 필요가 없다. 네트워크와 같은 시스템 문제는 이제 RuntimeException인 EJBException으로 발생하기 때문에 익셉션 처리에 좀 더 유연성을 가지게 됐다.<br />
 물론 여전히 EJB에 대한 원격 접근은 RMI/IIOP를 통해서 이루어진다. 이제 비즈니스 메소드를 구현하는 빈 클래스를 살펴보자.<br />
 <br />
 @Stateless<br />
 public class RandomGeneratorBean implementsRandomGenerator {<br />
 public int getNumber() {<br />
 Random random = new Random();<br />
 return 1 + random.nextInt(45);}<br />
 }<br />
 <br />
 빈 클래스는 비즈니스 인터페이스를 implements 한 POJO 객체로 정의한다. 세션 빈임을 표시하기 위해 @Stateless나 @Stateful 어노테이션만 달아주면 된다. 또한 빈 클래스가 SessionBean 인터페이스를 implements 할 필요가 없어 사용하지 않는 콜백 메소드를 모두 구현할 필요가 없어졌다. 필요한 콜 백의 경우 콜백 어노테이션을 통해 콜백 메소드를 지정하면 된 다. &lt;리스트 3&gt;에 있는 좀더 복잡한 LotteryBean Stateful 세션 빈을 살펴보자.<br />
 <br />
 <table align="center" border="0" cellpadding="0" cellspacing="0" width="440">  <tbody><tr>    <td>      <table border="0" cellpadding="0" cellspacing="0" width="100%">        <tbody><tr>          <td bgcolor="#646464">            <table border="0" cellpadding="1" cellspacing="1" width="100%">              <tbody><tr>                <td width="1"><br />
</td>                <td class="popul_list"><font color="#ffffff">&nbsp;&lt;리스트 3&gt; LotteryBean Stateful 세션 빈</font></td>              </tr>            </tbody></table>          </td>          <td bgcolor="#646464">            <div align="right"><img src="http://images.zdnet.co.kr/img/edit_table/table9_1.gif" /></div>          </td>        </tr>      </tbody></table>    </td>  </tr>  <tr>    <td bgcolor="#efefef">      <table id="300" style="display: none;" border="0" cellpadding="3" cellspacing="3" width="100%">        <tbody><tr>          <td class="popul_list"><br />
 // e.g<br />
 @Stateful<br />
 @Interceptors(ProfilingInterceptor.class) // 인터셉터 지정public class LotteryBean implements Lottery, Serializable{<br />
 @Resource // 인젝션<br />
 private SessionContext sc;<br />
 @PostConstruct // PostConstruct 콜백 지정private void postConstruct(){<br />
 //...<br />
 }<br />
 //...<br />
 @Remove // Remove 메소드 지정<br />
 public void remove(){<br />
 // bye~<br />
 }<br />
 }<br />
 <br />
</td>        </tr>      </tbody></table>    <br />
</td>  </tr>  <tr>    <td><a href="javascript:showLayer('300')"><img src="http://images.zdnet.co.kr/img/edit_table/table9_2.gif" border="0" /></a></td>  </tr></tbody></table><br />
 <br />
 &lt;리스트 3&gt;에서는 @PostConstruct 어노테이션을 통해서 PostConstruct 콜백 메소드를 지정하고 있다. XXX void XXX() 형태의 시그너처를 가진 모든 메소드는 어노테이션으로 콜백 메소드로 지정할 수 있기 때문에 하나의 메소드로 여러 콜백을 처 리 하는 등 상당한 유연성을 제공한다. 다음은 콜백 어노테이션 의 종류별 설명이다.<br />
 <br />
 ● @PostConstruct - 빈 인스턴스가 생성된 후에 불리며 예전 의 ejbCreate( )와 동일<br />
 ● @PreDestroy - 빈 인스턴스가 삭제되기 전에 불리며 예전 의 ejbRemove( )와 동일<br />
 ● @PrePassivate - Stateful 세션 빈 인스턴스가 passivation 되기 전에 불리며 예전의 ejbPassivate( )와 동일● @PostActivate - Stateful 세션 빈 인스턴스가 activation 된 후에 불리며 예전의 ejbActivate( )와 동일<br />
 LotteryBean의 경우 또한 SessionContext 객체를 @Re source 어노테이션을 사용하여 인젝션해서 가져오고 있다. 인젝션은 정확한 용어로 디펜던시 인젝션(Dependency Injection) 혹 은 리소스 인젝션(Resource Injection)이라고 하는데 해당 컴포넌트가 의존하는 외부 리소스를 가져오는 새로운 방법이다. 기존에 개발자가 직접 JNDI lookup하던 것을 이제 컨테이너가 알아서 필드 값에 넣어주게 된 것이다. 인젝션은 필드에 적용할 수도 있고 아래와 같이 setter 메소드에도 적용할 수 있다.<br />
 <br />
 @Resource<br />
 private void setSessionContext(SessionContext sc){this.sc = sc;<br />
 }<br />
 <br />
 또, 인젝션을 이용하여 DataSource나 EJB 참조, Connection Factory, Queue, Topic, UserTransaction 등의 외부 리소스를 가져올 수 있다.<br />
 LotteryBean은 Stateful 세션 빈이기 때문에 빈을 제거하기 위 한 Remove 메소드를 @Remove 어노테이션으로 지정한다.<br />
 Remove 메소드는 임의의 비즈니스 메소드에 지정할 수 있으며 메소드의 수행이 끝나면 해당 Stateful 세션 인스턴스가 제거된다.<br />
 <br />
 <b>인터셉터 (Interceptor)</b><br />
 &lt;리스트 3&gt; LotteryBean의 경우 @Interceptors 어노테이션을 이용하여 EJB 3.0에서 새로 추가된 인터셉터(interceptor)클래스를 지정하고 있다.<br />
 <br />
 인터셉터는 현재 많은 관심을 끌고 있는 AOP(AspectOriented Programming)의 개념에서 파생된 것으로 비즈니스메소드가 불리기 전에(혹은 후에) 해야 하는 공통적인 부분(cross-cutting concerns)을 별도로 구현할 수 있게 해준다. 인터셉터는 다양한 목적으로 활용될 수 있는데, 예를 들어 메소드의 수행시간을 측정하거나 예외처리, 파라미터 검사, 사용자 고유의 보안 검사 등에 이용될 수 있다. &lt;리스트 4&gt;는 메소드 수행 시간을 측정하는 인터셉터이다.<br />
 <br />
 <table align="center" border="0" cellpadding="0" cellspacing="0" width="440">  <tbody><tr>    <td>      <table border="0" cellpadding="0" cellspacing="0" width="100%">        <tbody><tr>          <td bgcolor="#646464">            <table border="0" cellpadding="1" cellspacing="1" width="100%">              <tbody><tr>                <td width="1"><br />
</td>                <td class="popul_list"><font color="#ffffff">&nbsp;&lt;리스트 4&gt; ProfilingInterceptor 인터셉터</font></td>              </tr>            </tbody></table>          </td>          <td bgcolor="#646464">            <div align="right"><img src="http://images.zdnet.co.kr/img/edit_table/table9_1.gif" /></div>          </td>        </tr>      </tbody></table>    </td>  </tr>  <tr>    <td bgcolor="#efefef">      <table id="400" style="display: none;" border="0" cellpadding="3" cellspacing="3" width="100%">        <tbody><tr>          <td class="popul_list"><br />
 public class ProfilingInterceptor {@AroundInvoke<br />
 public Object intercept(InvocationContext invocation)throws Exception {<br />
 long start = System.currentTimeMillis();try {<br />
 return invocation.proceed(); // 다음 인터셉터 메소드나 실제 빈 메소드를 수행<br />
 } finally {<br />
 long time = System.currentTimeMillis() - start;Method method = invocation.getMethod();System.out.println("Profiling: " +method.toString() + " took " + time + "(ms)");}<br />
 }<br />
 //...<br />
 }<br />
 <br />
</td>        </tr>      </tbody></table>    <br />
</td>  </tr>  <tr>    <td><a href="javascript:showLayer('400')"><img src="http://images.zdnet.co.kr/img/edit_table/table9_2.gif" border="0" /></a></td>  </tr></tbody></table><br />
 <br />
 인터셉터 클래스에는 하나의 인터셉트 메소드가 @AroundInvoke라는 어노테이션을 통해 지정된다. 인터셉트 메소드는 빈클래스 내에서 구현하거나 ProfilingInterceptor와 같이 별도로 인터셉트 클래스로 만들 수 있으며 인터셉트 클래스는 재활용 할 수 있다는 장점도 있다. 중요한 것은 인터셉터는 여러 개가 있으면 체인으로 구성되기 때문에 Invocation Context.proceed()를 호출해야 다음 인터셉터나 실제 빈 메소드로 넘어가게 된다는 점이다.<br />
 <br />
 인터셉터는 또한 디폴트 레벨로 정의하여 모든 빈에게 적용시킬 수도 있고 메소드별로 정의할 수도 있으며 PostConstruct,PreDestroy와 같은 콜백 인터셉트 메소드도 가질 수 있어 콜백을 별도의 핸들러 클래스로 처리할 수 있다.<br />
 <br />
 <b>클라이언트 뷰(Client view)</b><br />
 기존의 EJB를 호출하는 클라이언트 코드는 실제 비즈니스 메소드를 수행하기 전에 JNDI lookup 코드 등 복잡한 과정을 수행해야 했다. EJB 3.0에서는 인젝션과 단순화된 lookup을 통해 EJB를 얻어오는 과정이 단순해졌다. &lt;리스트 5&gt; 서블릿 클라이언트를 살펴보자.<br />
 <br />
 <table align="center" border="0" cellpadding="0" cellspacing="0" width="440">  <tbody><tr>    <td>      <table border="0" cellpadding="0" cellspacing="0" width="100%">        <tbody><tr>          <td bgcolor="#646464">            <table border="0" cellpadding="1" cellspacing="1" width="100%">              <tbody><tr>                <td width="1"><br />
</td>                <td class="popul_list"><font color="#ffffff">&nbsp;&lt;리스트 5&gt; 서블릿 클라이언트</font></td>              </tr>            </tbody></table>          </td>          <td bgcolor="#646464">            <div align="right"><img src="http://images.zdnet.co.kr/img/edit_table/table9_1.gif" /></div>          </td>        </tr>      </tbody></table>    </td>  </tr>  <tr>    <td bgcolor="#efefef">      <table id="500" style="display: none;" border="0" cellpadding="3" cellspacing="3" width="100%">        <tbody><tr>          <td class="popul_list"><br />
 @EJB(name="ejb/lottery", beanName="LotteryBean",beanInterface=Lottery.class)<br />
 public class PlayLotteryServlet extends HttpServlet {@EJB // 인젝션<br />
 private RandomGenerator generator;protected void processRequest(HttpServletRequest request,HttpServletResponse response) throwsServletException, IOException {//...<br />
 InitialContext initContext = new InitialContext();Lottery lottery = (Lottery)<br />
 initContext.lookup("java:comp/env/ejb/lottery");<br />
 <br />
</td>        </tr>      </tbody></table>    <br />
</td>  </tr>  <tr>    <td><a href="javascript:showLayer('500')"><img src="http://images.zdnet.co.kr/img/edit_table/table9_2.gif" border="0" /></a></td>  </tr></tbody></table><br />
 <br />
 클래스에 붙어 있는 @EJB(name="ejb/lottery"...) 어노테이션은 기존의 <ejb-ref>와 같이 참조되는 EJB에 대해 정의를 한 것으로 EJB를 JNDI lookup으로 가져오기 위해 필요하다. 이렇게 정의를 하면 해당 EJB 레퍼런스는 ENC(EnvironmentNaming Context)에 해당하는 java:comp/env 네임스페이스에 들어간다. 맨 아랫줄의 lookup 코드가 해당 EJB 레퍼런스를 얻어오는 것을 보여주고 있는데 이처럼 홈 객체를 통하지 않고 바로 비즈니스 객체를 받아 올 수 있다. 비즈니스 인터페이스는 컨테이너가 lookup 할 때 기존의 홈 객체의 create 메소드와 같은과정을 대신해 준다. 이 경우에는 새로운 Stateful 세션 빈 인스턴스를 생성하고 이에 대한 레퍼런스를 얻어오게 된다.<br />
 <br />
 인젝션을 이용하면 JNDI lookup 보다 더 쉽게 EJB 레퍼런스를 얻어올 수 있다. 필드에 붙어있는 @EJB 어노테이션은 필드<br />
 의 타입을 참조하여 해당 EJB 레퍼런스를 필드에 넣어준다.<br />
 <br />
 <b>웹서비스 엔드포인트</b><br />
 EJB 3.0에서는 세션 빈을 웹서비스로 노출하는 것도 매우 간단해졌다. 이에 대한 것은 특집 3부 JAX-WS 2.0을 참조하자.<br />
 <br />
 </ejb-ref><table align="center" border="0" cellpadding="0" cellspacing="0" width="568"><tbody><tr><td class="list15_00"><b>MDB(Message-Driven Bean)</b></td></tr><tr><td bgcolor="#000000" height="2"><br />
</td></tr></tbody></table><br />
 메시지를 처리하기 위한 MDB도 EJB 3.0에서 POJO 형태로단순화 되었다. &lt;리스트 6&gt;에서 보듯이 MDB도 어노테이션을 통해 필요한 설정을 하며 이제 MessageListener를 직접 implements 하게 된다.<br />
 <br />
 <table align="center" border="0" cellpadding="0" cellspacing="0" width="440">  <tbody><tr>    <td>      <table border="0" cellpadding="0" cellspacing="0" width="100%">        <tbody><tr>          <td bgcolor="#646464">            <table border="0" cellpadding="1" cellspacing="1" width="100%">              <tbody><tr>                <td width="1"><br />
</td>                <td class="popul_list"><font color="#ffffff">&nbsp;&lt;리스트 6&gt; MDB 예제</font></td>              </tr>            </tbody></table>          </td>          <td bgcolor="#646464">            <div align="right"><img src="http://images.zdnet.co.kr/img/edit_table/table9_1.gif" /></div>          </td>        </tr>      </tbody></table>    </td>  </tr>  <tr>    <td bgcolor="#efefef">      <table id="600" style="display: none;" border="0" cellpadding="3" cellspacing="3" width="100%">        <tbody><tr>          <td class="popul_list"><br />
 @MessageDriven( activationConfig = {@ActivationConfigProperty(propertyName="acknowlegeMode",propertyValue="Auto-acknowledge"),@ActivationConfigProperty(propertyName="destinationType",propertyValue="javax.jms.Queue")})<br />
 public class SimpleMessageBean implements MessageListener{<br />
 @Resource<br />
 private MessageDrivenContext mdc;public void onMessage(Message inMessage) {//...<br />
 }<br />
 }<br />
 <br />
</td>        </tr>      </tbody></table>    <br />
</td>  </tr>  <tr>    <td><a href="javascript:showLayer('600')"><img src="http://images.zdnet.co.kr/img/edit_table/table9_2.gif" border="0" /></a></td>  </tr></tbody></table><br />
 <br />
 <b>디스크립터</b><br />
 EJB 3.0에서는 ejb-jar.xml 표준 디스크립터의 대부분을 어노테이션으로 설정할 수 있게 되었다. 물론, 어노테이션이 모든 것을 커버하지 않기 때문에 어떤 경우에는 디스크립터에 설정이 필요할 때가 있기는 하다. 또한 보안 설정(security role)과 같이 실제 런타임 환경에서 바뀔 수 있는 부분은 디스크립터에 설정을 하는 것이 좋다. EJB 3.0에서는 디스크립터 오버라이딩을 지원하기 때문에 필요한 정보만 디스크립터에서 설정할 수 있다. 만약 어노테이션 대신에 예전처럼 디스크립터에 모든 정보를 주고 싶으면 그렇게 할 수도 있다.<br />
 <br />
 <table align="center" border="0" cellpadding="0" cellspacing="0" width="568"><tbody><tr><td height="24" width="5"><img src="http://www.zdnet.co.kr/i/ui/common/r_title_ro_left.gif" border="0" height="24" width="5" /></td><td class="list15_00" bgcolor="#d9d0b7"><font color="#724339">&nbsp;&nbsp;자바 퍼시스턴스(Java Persistence) API</font></td><td height="24" width="5"><img src="http://www.zdnet.co.kr/i/ui/common/r_title_ro_right.gif" border="0" height="24" width="5" /></td></tr></tbody></table><br />
 이제부터는 데이터를 관계형 데이터베이스(RDBMS)에 저장하기 위한 퍼시스턴스 레이어 기술인 자바 퍼시스턴스에 대해서 살펴보자.<br />
 <br />
 애플리케이션에서 다루는 객체 모델을 데이터베이스의 데이터모델로 저장하고 매핑하기 위해 다양한 ORM(Object-Relational Mapping) 기술들이 정의되어 왔다. EJB에서는 엔티티 빈이 그 기술을 제공해왔다. 엔티티 빈은 개발하기가 까다롭고 EJB 자체의 복잡한 프로그래밍 모델을 사용해야 할 뿐 아니라 객체간의 상속(Inheritance) 관계를 매핑하지 못하는 등의 제약이 있어서 실제로 쓰기에는 불편하였다. 따라서 최근에는 하이버네이트와 같은 POJO 기반의 다른 ORM 기술들이 점점 더 인기를 끌어 왔다. 결국 EJB 3.0 표준화 그룹인 JSR 220에서 POJO를 표준화된 ORM 기술로 채택하게 되었는데 그것이 바로자바 퍼시스턴스 API 스펙이다. 실제로 자바 퍼시스턴스 스펙 제정에는 Gavin King(하이버 네이트 제작자)을 포함하여 여러 ORM 기술 개발자들이 참여했기에 때문에 유사한 점이 많다. 먼저 자바 퍼시스턴스가 가지는 특징이 어떤 것이 있는지 살펴보자.<br />
 <br />
 ● POJO 기반의 단순한 퍼시스턴스 모델<br />
 ● 표준화된 O/R 매핑 - 어노테이션 혹은 XML 사용, 디폴트 규칙 적용으로 대부분의 경우 별도의 O/R 매핑을 지정할 필요가 없음<br />
 ● 객체간의 상속관계 지원<br />
 ● EJBQL에 비해서 발전된 쿼리 언어 - Update/delete, 서브쿼리, 네이티브 쿼리 지원<br />
 ● 자바EE 환경뿐만 아니라 자바SE 환경 지원<br />
 ● 프로바이더(Provider)을 플러그인 해서 사용 가능POJO 기반의 단순화된 프로그래밍 모델을 지원하기 때문에 엔티티 빈처럼 복잡한 EJB 객체 모델대신 일반적인 자바 클래스 하나로 쉽게 엔티티를 만들 수 있다. 필요한 O/R 매핑은 POJO 위에 어노테이션으로 표기하거나 XML로 표기할 수 있고 상속 관계를 지원하므로 기존에 존재하던 객체 모델을 쉽게 자바 퍼시스턴스 엔티티로 전환해서 사용할 수 있다. 또한 엔티티 객체는 POJO 이므로 DTO(Data Transfer Object)로 바로 사용이 가능하다.<br />
 <br />
 앞으로는 OrderApp이라고 하는 간단한 애플리케이션을 통해 자바 퍼시스턴스의 전반적인 내용을 살펴볼 것이다. OrderApp는 EJB로 구현된 단순한 주문시스템인데 EJB에서 자바 퍼시스턴스 API를 사용하여 데이터를 다루게 된다. 여기에서 사용된 데이터 모델은 &lt;그림 1&gt;과 같다.<br />
 <br />
 <center><table border="0" cellpadding="0" cellspacing="0" width="500"><tbody><tr><td align="center"><img src="http://www.zdnet.co.kr/images/stories/builder/2006/12/7-1/7-2/2-1.JPG" /></td></tr><tr><td class="popul_list" align="center"><font color="#0f7ccb">&lt;그림 1&gt; 예제 데이터 모델</font></td></tr></tbody></table></center><br />
 <br />
 <table align="center" border="0" cellpadding="0" cellspacing="0" width="568"><tbody><tr><td class="list15_00"><b>엔티티(Entity)</b></td></tr><tr><td bgcolor="#000000" height="2"><br />
</td></tr></tbody></table><br />
 DB의 데이터 모델은 자바 퍼시스턴스에서 엔티티(Entity)로 표현된다. 엔티티는 데이터 모델을 객체 모델로 표현한 것으로 EJB 2.1의 엔티티 빈과 유사하지만 자바 퍼시스턴스에서는 별도의 인터페이스 없이 POJO 클래스로 표현된다. 클래스에는 엔티티임을 표시하기 위해 @Entity 어노테이션이 달려있다. 실제로 &lt;그림 1&gt;의 데이터 모델에 대해서 엔티티가 어떻게 만들어 지는지 &lt;리스트 7&gt;을 보도록 하자.<br />
 <br />
 <table align="center" border="0" cellpadding="0" cellspacing="0" width="440">  <tbody><tr>    <td>      <table border="0" cellpadding="0" cellspacing="0" width="100%">        <tbody><tr>          <td bgcolor="#646464">            <table border="0" cellpadding="1" cellspacing="1" width="100%">              <tbody><tr>                <td width="1"><br />
</td>                <td class="popul_list"><font color="#ffffff">&nbsp;&lt;리스트 7&gt; 엔티티 클래스</font></td>              </tr>            </tbody></table>          </td>          <td bgcolor="#646464">            <div align="right"><img src="http://images.zdnet.co.kr/img/edit_table/table9_1.gif" /></div>          </td>        </tr>      </tbody></table>    </td>  </tr>  <tr>    <td bgcolor="#efefef">      <table id="700" style="display: none;" border="0" cellpadding="3" cellspacing="3" width="100%">        <tbody><tr>          <td class="popul_list"><br />
 // Customer.java<br />
 @Entity<br />
 public class Customer implements Serializable {@Id<br />
 private String id;<br />
 private String name;<br />
 private String address;<br />
 @OneToMany(mappedBy="customer",cascade={CascadeType.ALL})<br />
 private List<orders> orders;<br />
 //...<br />
 }<br />
 // Item.java<br />
 @Entity<br />
 public class Item implements Serializable {//...<br />
 @Id @GeneratedValue<br />
 public long getId() {<br />
 return id;<br />
 }<br />
 public void setId(long id) {<br />
 this.id = id;<br />
 }<br />
 public String getName(){<br />
 return name;<br />
 }<br />
 public void setName(String name){this.name = name;<br />
 }<br />
 //...<br />
 }<br />
 // Orders.java<br />
 @Entity<br />
 public class Orders implements Serializable {@Id @GeneratedValue<br />
 private Long id;<br />
 @ManyToOne<br />
 private Customer customer;<br />
 @ManyToMany<br />
 @JoinTable(name="ORDERAPP_ORDERS2ITEMS")private Collection<item> items;//...<br />
 }<br />
 </item></orders><br />
</td>        </tr>      </tbody></table>    <br />
</td>  </tr>  <tr>    <td><a href="javascript:showLayer('700')"><img src="http://images.zdnet.co.kr/img/edit_table/table9_2.gif" border="0" /></a></td>  </tr></tbody></table><br />
 <br />
 엔티티는 기본적으로 하나의 엔티티 클래스에 대해 하나의DB 테이블이 매핑된다(이 경우에는 M:N(many to many) 관계를 위한 테이블이 하나 더 만들어진다). 필드나 자바빈즈(JavaBeans) 프로퍼티 값은 DB의 컬럼에 매핑된다. 어떤 부분에 어노테이션이 달려있는지에 따라서 필드 접근 타입(Fieldaccess type)과 프로퍼티 접근 타입(Property access type)이 결정된다. 예제에서는 Customer, Orders 엔티티의 경우 필드 들이 매핑되고, Item 엔티티의 경우 프로퍼티 들이 DB 컬럼에 매핑된다.<br />
 <br />
 DB와의 매핑은 O/R 매핑 어노테이션 혹은 XML(orm.xml디스크립터)로 이루어진다. Primary Key를 나타내는 필드나 관계(Relationship)를 나타내는 필드를 제외하고는 대부분 디폴트정책에 따라서 매핑되기 때문에 별도의 어노테이션을 지정하지 않아도 된다. 다음은 위의 엔티티에서 사용된 어노테이션들에 대한 설명이다. 이외에도 O/R 매핑에 사용할 수 있는 많은 표준 어노테이션이 있다.<br />
 <br />
 ● @Id - Primary Key에 해당하는 ID 필드임을 표시한다.<br />
 ● @GeneratedValue - DB에 의해서 값이 자동으로 생성되는 필드임을 표시한다.<br />
 ● @OneToMany - 1:N 관계를 위한 표현하기 위한 필드임을 표시한다.<br />
 ● @ManyToOne - N:1 관계를 위한 표현하기 위한 필드임을 표시한다.<br />
 ● @ManytoMany - M:N 관계를 위한 표현하기 위한 필드임을 표시한다.<br />
 ● @JoinTable - 관계를 표현할 때 어떤 테이블을 사용할 것인지에 대해 표시한다.<br />
 <br />
 엔티티는 일반 클래스와 비슷하지만 항상 디폴트 생성자(Default constructor)를 만들어 주어야 한다는 특징이 있다. 디폴트 생성자는 엔티티 인스턴스를 내부적으로도 생성해서 사용하기 때문에 필요하다. 또한 예제의 경우 엔티티들이 Serializable 객체로 구현되었는데 이는 필수사항은 아니지만 엔티티를 DTO(Data Transfer Object)로 사용하여 원격으로 보낼 때 필요하다.<br />
 <br />
 <table align="center" border="0" cellpadding="0" cellspacing="0" width="568"><tbody><tr><td class="list15_00"><b>EntityManager API</b></td></tr><tr><td bgcolor="#000000" height="2"><br />
</td></tr></tbody></table><br />
 DB에서 엔티티를 가져오거나, 생성, 삭제 하는 일은 모두 EntityManager API를 통해서 이루어진다. EntityManager는 누가 관리하느냐에 따라 크게 두 가지로 구분된다.<br />
 <br />
 ● Container-managed EntityManager - 자바EE 환경에서만 사용되며 컨터이너가 EntityManager 인스턴스의 Lifecycle을 관리한다. JTA 트랜잭션에 자동으로 연결되기 때문에 자바EE 환경에서 유용하다.<br />
 <br />
 ● Application-managed EntityManager - 자바EE, 자바SE환경에서 모두 사용되며 개발자가 EntityManager 인스턴스의 Lifecycle을 직접 관리하며 트랜잭션도 직접 관리해야 한다.<br />
 <br />
 EntityManager 객체는 Container-managed EntityManager의 경우 인젝션이나 lookup을 통해서 바로 얻어올 수 있다.<br />
 <br />
 // 인젝션 이용. 해당 필드나 메소드에 @PersistenceContext 표기@PersistenceContext<br />
 private EntityManager em;<br />
 <br />
 // lookup 이용. 클래스에 @PersistenceContext를 표기해 EntityManager를 ENC 네임스페이스에 등록<br />
 @PersistenceContext(name="em", unitName="HR")public class HelloBean implements Hello {//...<br />
 InitialContext ic = new InitialContext();EntityManager em = (EntityManager)ic.lookup("java:comp/env/em");<br />
 <br />
 Application-managed EntityManager의 경우 EntityManagerFactory API를 통해서 EntityManager 객체를 얻게 된다. 자바EE 환경에서는 인젝션이나 lookup을 통해 EntityManagerFactory를 얻어올 수 있다.<br />
 <br />
 @PersistenceUnit<br />
 private EntityManagerFactory emf;//...<br />
 EntityManager em = emf.createEntityManager();<br />
 엔티티 객체를 만드는 것은 일반 자바 객체를 생성하듯이 new생성자를 사용하면 되며 이를 DB에 저장하려면 다음과 같이EntityManager.persist() 메소드를 호출해야 한다.<br />
 <br />
 Customer customer = new Customer(id, name, address);em.persist(customer);<br />
 <br />
 DB에서 하나의 엔티티 객체를 가져오려면 EntityManager.find() 메소드를 호출한다. 이 경우에는 Primary key에 해당하는 값을 통해서 엔티티를 가져올 수 있다.<br />
 <br />
 Customer c = em.find(Customer.class, id);<br />
 또는 자바 퍼시스턴스 쿼리 랭귀지(Java Persistence QueryLanguage)를 이용하여 모든 엔티티 들을 가져오거나 특정 필드값을 비교하여 엔티티를 가져올 수 있다.<br />
 <br />
 Query query = em.createQuery("select c from Customer c");List list = query.getResultList();<br />
 엔티티의 필드를 수정하려면 엔티티 객체의 필드를 수정하면 된다. 해당 필드는 EntityManager.flush() 를 호출하거나 트랜잭션이 commit 될 때 DB와 동기화 된다.<br />
 <br />
 Customer c = em.find(Customer.class, id);<br />
 c.setAddress(address);<br />
 엔티티를 삭제할 때에는 EntityManager.remove()를 호출한다.<br />
 <br />
 em.remove(customer);<br />
 <br />
 엔티티 간의 관계(Relationship)는 다른 엔티티에 대한 레퍼런스로 표현되는데 관계를 수정하려면 레퍼런스 값을 바꾸면 된다. 혹은 ManyToMany, OneToMany와 같이 여러 개의 엔티티와 관계를 맺고 있을 때는 Collection 객체로 표현되므로 해당micro software 2006+7 129<br />
 Collection 내용을 바꾸면 된다.<br />
 <br />
 public class Customer //...<br />
 @OneToMany(mappedBy="customer", cascade={CascadeType.<br />
 PERSIST, CascadeType.REMOVE})<br />
 private List<orders> orders;<br />
 public void addOrder(Orders o){orders.add(o);<br />
 }<br />
 <br />
 관계의 경우에는 해당 엔티티에 대해 오퍼레이션(persist,remove 등) 할 때 관계된 엔티티도 같이 persist, remove 될 것인지를 지정하는 cascade 타입을 지정할 수 있다. 기본적으로는 cascade 값이 지정되지 않지만 위와 같이 지정하면 Customer엔티티가 생성, 삭제될 때 관계된 Orders 엔티티도 같이 생성, 삭제된다.<br />
 <br />
 </orders><table align="center" border="0" cellpadding="0" cellspacing="0" width="568"><tbody><tr><td class="list15_00"><b>쿼리(Query)</b></td></tr><tr><td bgcolor="#000000" height="2"><br />
</td></tr></tbody></table><br />
 자바 퍼시스턴스에서는 자바 퍼시스턴스 쿼리 랭귀지(JavaPersistence Query Language)라고 하는 객체 지향적인 쿼리 언어를 제공한다. EJBQL와 유사하지만 자바 퍼시스턴스 쿼리는 Bulk Update, Delete 문 뿐만 아니라 서브쿼리(Subquery)도 지원하므로 그 활용범위가 넓다. 또한 DB에 특화된 SQL 문을 직접 사용할 수 있는 네이티브 쿼리(Native Query)도 지원한다.<br />
 쿼리를 실제로 사용할 때는 동적으로 바로 생성해서 사용하거나 네임드 쿼리(Named query)라고 하는 정적인 방식으로 사용할 수 있다.<br />
 <br />
 // 동적 쿼리<br />
 Query query = em.createQuery("select c from Customer c wherename=:name");<br />
 query.setParameter("name", name);List list = query.getResultList();<br />
 // 정적 쿼리 - @NamedQuery는 엔티티에 명기@NamedQuery(name="findCustomerByName", query="select cfrom Customer c where c.name=:name")<br />
 Query query = em.createNamedQuery("findCustomerByName");query.setParameter("name", name);List list = query.getResultList();<br />
 네임드 쿼리(Named Query)는 엔티티 클래스에 직접 명기되며 재활용되기 때문에 해당 엔티티에 대해서 자주 활용되는 쿼리의 경우 미리 정의해 놓고 사용하면 편리하다.<br />
 <br />
 <table align="center" border="0" cellpadding="0" cellspacing="0" width="568"><tbody><tr><td class="list15_00"><b>엔티티의 라이프사이클과 퍼시스턴스 컨텍스트</b></td></tr><tr><td bgcolor="#000000" height="2"><br />
</td></tr></tbody></table><br />
 EntityManager의 동작은 퍼시스턴스 컨텍스트(PersistenceContext)와 이와 관련된 엔티티 인스턴스의 라이프사이클을 알아야 이해할 수 있다. 이 부분은 자바 퍼시스턴스에서 중요하고도 조금 복잡한 부분이다. 퍼시스턴스 컨텍스트(PersistenceContext)는 현재 관리되고 있는 엔티티 인스턴스들의 집합을 말하는데 엔티티 인스턴스의 상태는 EntityManager 오퍼레이션과 밀접한 관련이 있다. &lt;그림 2&gt;는 엔티티의 상태가 어떻게 변화하는지 보여준다.<br />
 <br />
 <center><table border="0" cellpadding="0" cellspacing="0" width="500"><tbody><tr><td align="center"><img src="http://www.zdnet.co.kr/images/stories/builder/2006/12/7-1/7-2/2-2.JPG" /></td></tr><tr><td class="popul_list" align="center"><font color="#0f7ccb">&lt;그림 2&gt; EntityManager 오퍼레이션에 따른 엔티티의 라이프사이클</font></td></tr></tbody></table></center><br />
 <br />
 ● New - 엔티티 인스턴스가 생성되었을 때의 상태로 DB와 연결되어 있지 않다. persist( )를 통해서 DB에 저장되며managed 상태가 된다.<br />
 <br />
 ● Managed - 엔티티 인스턴스가 퍼시스턴스 컨텍스트에 의해서 관리되는 상태로 엔티티 인스턴스 값의 변화가 DB에 반영된다. Container-managed EntityManager의 경우 트랜잭션이 종료되면 모든 엔티티는 detached 상태가 된다.<br />
 <br />
 ● Detached - 엔티티 인스턴스가 퍼시스턴스 컨텍스트에 의해서 더 이상 관리되지 않는 상태로 DB와 연결되지 않는다.<br />
 EntityManager.merge( )를 통해서 다시 managed 상태로 만들 수 있다.<br />
 <br />
 ● Removed - DB에서 해당 엔티티가 삭제될 상태이다.<br />
 <br />
 <table align="center" border="0" cellpadding="0" cellspacing="0" width="568"><tbody><tr><td class="list15_00"><b>패키징(Packaging)</b></td></tr><tr><td bgcolor="#000000" height="2"><br />
</td></tr></tbody></table><br />
 이제 엔티티 클래스들을 실제로 애플리케이션에 패키징 시키는 방법에 대해 알아보자. 엔티티 클래스를 패키징 할 때는META-INF/persistence.xml 디스크립터가 꼭 필요하다.<br />
 <br />
 persistence.xml은 관련된 엔티티 클래스들과 이에 대한 DB<br />
 <br />
 DataSource 설정 등과 같이 퍼시스턴스 유닛(PersistenceUnit_에 대한 정보를 담고 있다. 퍼시스턴스 유닛은 엔티티를 묶는 단위이며 이것은 하나의 DB에만 매핑된다. 퍼시스턴스 유닛은 유닛 이름(Unit Name) 식별자를 가지는데 이 식별자는 EntityManager나 EntityManagerFactory를 얻을 때 사용된다.<br />
 <br />
 // persistence.xml<br />
 &lt;persistence version="1.0"xmlns="http://java.sun.com/xml/ns/persistence"&gt;<br />
 &lt;persistence-unit name="orderunit"transaction-type="JTA"&gt;&lt;jta-data-source&gt;jdbc/sample&lt;/jta-data-source&gt;&lt;properties&gt; &lt;!-- 프로바이더 별 설정 --&gt;&lt;property name="toplink.ddl-generation"value="createtables"/&gt;&lt;/properties&gt;<br />
 &lt;/persistence-unit&gt;<br />
 &lt;/persistence&gt;<br />
 <br />
 패키징은 다음과 같이 JAR 파일이나 디렉토리에 할 수 있으며 이 단위를 퍼시스턴스 유닛 루트(Persistence Unit Root)라고 한다.<br />
 <br />
 ● EAR library 디렉터리의 JAR 파일(e.g. orderapp.ear!/lib/entities.jar)● EAR 루트 디렉터리의 JAR 파일(e.g. orderapp.ear!/entities.jar)● EJB JAR 파일 (e.g. orderapp.ear!/orderapp-ejb.jar)● WAR 파일의 WEB-INF/classes<br />
 (e.g. orderapp-web.war!/WEB-INF/classes)● WAR 파일의 WEB-INF/lib에 JAR 파일(e.g. orderapp-web.war!/WEB-INF/lib/entities.jar)● application client의 JAR 파일(e.g. orderapp.ear!/orderapp-client.jar)<br />
 <br />
 <table align="center" border="0" cellpadding="0" cellspacing="0" width="568"><tbody><tr><td class="list15_00"><b>자바SE 환경에서 사용하기</b></td></tr><tr><td bgcolor="#000000" height="2"><br />
</td></tr></tbody></table><br />
 자바SE 환경에서 사용할 때는 Application-managedEntityManager만 사용할 수 있으며 JDBC 드라이버에 국한된 로컬(resource-local) 트랜잭션만 쓸 수 있다.<br />
 <br />
 EntityManagerFactory emf = Persistence.createEntityManagerFactory("orderunit");<br />
 EntityManager em = emf.createEntityManager();//...<br />
 EntityTransaction tx = em.getTransaction();tx.begin();<br />
 em.persist(customer);<br />
 tx.commit();<br />
 //...<br />
 em.close();<br />
 emf.close();<br />
 <br />
 자바SE에서는 javax.persistence.spi.Persistence 부트스트랩API를 사용해서 EntityManagerFactory를 얻는다는 것과 EntityTransaction API를 이용하여 직접 트랜잭션 컨트롤을 해주어야 한다는 차이가 있다. 또한 persistence.xml 파일의 위치는 클래스패스 상에서 META-INF/persistence.xml에 있어야 하며, 자바EE 환경과 달리 다음과 같이 모든 엔티티 클래스를 명시적으로 나열해 주어야 한다.<br />
 <br />
 &lt;persistence-unit name="orderunit"&gt;<br />
  &lt;class&gt;orderapp.entities.Customer&lt;/class&gt;<br />
  &lt;class&gt;orderapp.entities.Item&lt;/class&gt;<br />
  &lt;class&gt;orderapp.entities.Orders&lt;/class&gt;<br />
 <br />
 지금까지 EJB 3.0과 자바 퍼시스턴스 API 1.0 내용과 예제코드를 살펴보았다. 많은 내용을 깊이 있게 다루지는 못하였지만 전반적인 특징을 살펴보는데 도움이 되었으리라 믿는다.<br />
 <br />
 2006년 자바원(JavaOne)에서도 EJB 3.0과 자바 퍼시스턴스에 관련된 세션이 많았다. 필자의 블로그에 가면 세션에 대한 소개와 프리젠테이션 PDF를 받을 수 있다(http: //weblogs.java.net/blog/guruwons/archive/2006/06/ejb_30_sessions.html). @<br />
 <br />
 <table align="center" border="0" cellpadding="1" cellspacing="0" width="568"><tbody><tr><td bgcolor="#d9d0b7"><table border="0" cellpadding="0" cellspacing="0" width="568"><tbody><tr><td style="padding: 5px;" class="button_00" bgcolor="#f6f2eb"><font class="list15_00"><b>참고 자료:</b></font>1. Java EE 5 Tutorial - http://java.sun.com/javaee/5/docs/tutorial/doc/2. SDN Article: The Java Persistence API - A Simpler Programming Model forEntity Persistence - http://java.sun.com/developer/technicalArticles/J2EE/jpa/3. JSR 220 - http://jcp.org/en/jsr/detail?id=220이달의 디스켓 : EJB30samp.zip</td></tr></tbody></table></td></tr></tbody></table><br />
<br />
&nbsp;* 출처: <a href="http://www.zdnet.co.kr/builder/dev/java/0,39031622,39153447,00.htm" class="lnk8" target="_blank">http://www.zdnet.co.kr/builder/dev/java/0,39031622,39153447,00.htm</a><br />
<br />
			 ]]> 
		</description>

		<comments>http://lakhos.egloos.com/2902729#comments</comments>
		<pubDate>Thu, 28 Dec 2006 12:15:14 GMT</pubDate>
		<dc:creator>규영이</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 프로그래머의 꿈이 현실로 펼쳐질「자바 2.0의 시대」 ]]> </title>
		<link>http://lakhos.egloos.com/2902722</link>
		<guid>http://lakhos.egloos.com/2902722</guid>
		<description>
			<![CDATA[ 
  <!-- CLIPPING --><br />
     <font class="t11_99" color="#818181">     이창신(티맥스소프트의 웹&amp;XML 테크놀로지 팀 책임자)        </font><br />
<b><br />
1부 | 프로그래머의 꿈이 현실로 펼쳐질「자바 2.0의 시대」<br />
 2부 | <a href="http://www.zdnet.co.kr/builder/dev/java/0,39031622,39153468-1,00.htm">POJO로 돌아온「EJB 3.0과 자바 퍼시스턴스 API」</a><br />
 3부 | <a href="http://www.zdnet.co.kr/builder/dev/java/0,39031622,39153638-1,00.htm">웹 2.0 시대를 선도할「자바 웹 서비스 2.0」</a><br />
 4부 | <a href="http://www.zdnet.co.kr/builder/dev/java/0,39031622,39153639-1,00.htm">모바일 기기의 미래를 여는「모바일 자바 플랫폼」</a><br />
 5부 | <a href="http://www.zdnet.co.kr/builder/dev/java/0,39031622,39153640-1,00.htm">미리 보는 미래 개발환경「자바SE 6」</a><br />
 Plus | <a href="http://www.zdnet.co.kr/builder/dev/java/0,39031622,39153641-1,00.htm">자바개발자 페스티벌 - The Power Of The Java「2006 자바원 컨퍼런스」</a></b><br />
<b><br />
<br />
새로운 용어를 만드는 것은 쉬우면서도 어려운 일이다. 웹2.0도 그렇다. 누가 감히 웹이라는 일반화된 명사에 버전번호를 붙일 생각을 했겠는가?</b> <br />
 <br />
 그러나 한번 물꼬가 트이면 일반화까지는 일사천리다. 더욱이 1990년대 중반부터 대중화에 성공한 인터넷 관련 기술에 있어 2000년대 중반은 확실히 전환점으로 삼기 충분했고, 거기에 2.0이라는 접미사는 훌륭한 조합이었다. 우연인지는 몰라도 올해 많은 자바 기술이 큰 변화를 겪었다. 자바 웹 서비스를 이루는 새로운 표준들이 대거 등장하여 필자는 그것들을 한 데 묶어 자바 웹 서비스 2.0이라고 부르기 시작했다(weblogs.java.net/blog/iasandcb/archive/2006/03/java_web_servic.html 참조).<br />
 <center><table border="0" cellpadding="0" cellspacing="0" width="500"><tbody><tr><td align="center"><img src="http://www.zdnet.co.kr/images/stories/builder/2006/12/7-1/01.jpg" /></td></tr><tr><td class="popul_list" align="center"><br />
</td></tr></tbody></table></center><br />
 그런데 이번에는 또 다른 새로운 이름이 필요한 때가 되었다. 작년과 올해에 거쳐 자바의 모든 면에서 새로운 국면을 맞게 된 탓이다. 그래서, 나는 다시 과감히 자바에 ‘2.0’이라는 버전을 붙여보고자 한다. 1부에서는 자바 2.0이 자바 1.0과 어떻게 다른 지와 자바 2.0 시대에 개발자들이 주목해야 할 것은 무엇인지에 대해 알아보자.<br />
 <br />
 <table align="center" border="0" cellpadding="0" cellspacing="0" width="568"><tbody><tr><td height="24" width="5"><img src="http://www.zdnet.co.kr/i/ui/common/r_title_ro_left.gif" border="0" height="24" width="5" /></td><td class="list15_00" bgcolor="#d9d0b7"><font color="#724339">&nbsp;&nbsp;<b>새 이름을 얻은 자바 플랫폼</b></font></td><td height="24" width="5"><img src="http://www.zdnet.co.kr/i/ui/common/r_title_ro_right.gif" border="0" height="24" width="5" /></td></tr></tbody></table><br />
 자바의 이름이 바뀌었다. J2ME, J2SE, J2EE, 자바가 실험실 수준을 벗어나 본격적으로 주목을 받던 1990년대 말부터 쓰이기 시작하여 격변의 IT계에서는 보기 드물게 오랜 수명을 누린 이름이다. <br />
 <br />
 마이크로소프트(이하 MS)의 윈도우만 봐도 윈도우 95, 98, 2000, 2003이라는 연도 기반 이름과 더불어 중간중간 ME, XP, 이제는 비스타(Vista)까지 쓰이며 버전 번호라는 일반적인 명명법과는 거리가 먼 행보를 거듭해 왔다. 서비스 팩이라는 수단으로 밋밋한 이름에 힘을 주는 센스도 선보였다. <br />
 <br />
 그에 비하면 자바는 J2SE만 보더라도 1.1에서 1.2로 현대화된 이후로 1.4와 1.5에 이르면서 상당히 큰 변화가 있었음에도 계속 1.x의 버전 번호를 고수해왔다. 개인적으로 J2SE에서의 2라는 숫자는 매우 제한적이라고 생각했다. 도대체 언제까지 자바2라고 할 것인지 궁금하기까지 했다. J2SE 1.4는 코어 플랫폼에 있어 가장 많고 중요한 API 추가가 있었고, J2SE 1.5는 자바 언어 자체에 심대한 발전이 있었다. 이미 이때부터 2라는 테두리로 묶기에는 커져버렸던 것이 아닐까? 그래서 필자는 J2SE 1.4부터는 1.4대신 4.0을 써야 하는 것이 아닌가 하는 생각이 들 정도였다.<br />
 <br />
 이런 작은 단위의 버전 업이 안정감을 나타낼 수는 있겠지만 동시에 더딘 성장세를 시사할 수도 있는 탓이다. 실제로는 대폭 변했는데도 버전 번호를 낮춰 별로 변한 것이 없다는 식의 태도는 오히려 점점 더 많은 문제를 해결해야 하는 범용 소프트웨어에 있어 답답하다는 인상을 주기에 충분했다.<br />
 <br />
 J2EE도 상황은 마찬가지여서 1.2로 시작하여 1.3에서 EJB 2.0으로 크게 도약한 분산 컴포넌트 기술은 1.4에서 웹 서비스 지원의 추가로 날개를 달았지만 여전히 1.x라는 빈약한 버전을 가지고 있었다.<br />
 <br />
 그래서, J2SE 1.6과 J2EE 1.5부터는 J2라는 약자를 버리고 자바라는 완전한 이름으로 돌아옴과 동시에 1.6대신 6, 1.5대신 5라는 과감한 버전 업그레이드를 단행하게 되었다. 아직도 여전히 J2SE와 J2EE라는 말은 자바 플랫폼의 대명사로 많이 쓰이고 있지만, 새 술을 새 부대에 담듯이 자바SE 6와 자바EE 5는 그 새로운 이름과 함께 ‘2’라는 굴레를 벗어나 도약의 로드맵을 사용자에게 제시하는 첫걸음을 디디게 된다. <br />
 <br />
 한편, 함께 이름을 바꾼 자바 ME는 버전 번호의 큰 변경은 없지만 내실에 있어서는 큰 변화를 더했다. 제약이 많던 CLDC(connected Limited Device Configuration)에서 거의 PC급인 CDC(connected Device Configuration)로 빠른 이전 현상을 보이며 새로운 이름에 걸 맞는 실질적인 변화가 일어나고 있다.<br />
 <br />
 <table align="center" border="0" cellpadding="0" cellspacing="0" width="568"><tbody><tr><td height="24" width="5"><img src="http://www.zdnet.co.kr/i/ui/common/r_title_ro_left.gif" border="0" height="24" width="5" /></td><td class="list15_00" bgcolor="#d9d0b7"><font color="#724339">&nbsp;&nbsp;<b>오픈 플랫폼의 가치</b></font></td><td height="24" width="5"><img src="http://www.zdnet.co.kr/i/ui/common/r_title_ro_right.gif" border="0" height="24" width="5" /></td></tr></tbody></table><br />
 자바2.0 시대의 개막이 웹2.0 시대의 개막과 가장 유사한 점은 바로 열린 플랫폼(Open Platform)에선 찾을 수 있다. MS라는 한 기업이 내부적인 절차에 의해 개발하는 방식에 비해, 자바는 매우 일찍부터 많은 개발사 혹은 개발자들과 함께 시장을 키워왔다. <br />
 <br />
 축구 종주국은 영국이지만 월드컵은 세계인의 축제로 발전한 것처럼 자바도 종가인 썬마이크로시스템즈(이하 썬)뿐 아니라 써드 파티들도 함께 성공을 거두는 좋은 자원이 되고 있다. 이런 기술 주도와 사업 성공의 독립성은 전체 시장의 활성화에 매우 중요하다. <br />
 <br />
 닌텐도는 매번 우수한 게임기 하드웨어를 내놓고 거기에 최적화된 게임 소프트로 팬들을 열광시키지만, 저조한 써드 파티들의 활약으로 매번 위험성을 지적 받고 있다. 독차지하기 보다는 서로 나누면서 자라는 것은 자연스럽게 건전한 경쟁으로 이어지고, 그 과정에서 공정한 경쟁의 장을 마련해주는 선 순환이 이루어진 셈이다.<br />
 <br />
 하지만, JCP의 표준화가 아무리 투명한 절차로 진행되더라도, 자바는 여전히 100% 오픈이라는 평가를 받기 어려웠다. 이는 오픈 소스의 대명사인 리눅스와 비교해보면 더욱 확연히 드러난다. 리눅스라는 OS적 오픈 플랫폼에 이은 자바라는 애플리케이션적 오픈 플랫폼의 등장이 장애로 여겨지기도 했다. 물론, 여기에는 두 가지 측면이 있다. 하나는 썬이라는 한 회사가 자바 기술에서 차지하는 비중이며, 또 하나는 그 동안 표준을 강제하며 변종을 억제해 온 통제 시장 구조이다.<br />
 <br />
 그럼에도 불구하고 이제 용단을 내릴 때가 온 것으로 보인다. 먼저 자바EE 5의 참조 구현체(Reference Implementation, 이하 RI)가 글래스피시(GlassFish)라는 오픈 소스 프로젝트로 진행되어 왔다. 사용상의 라이선스도 CDDL(Common Development and Deployment License)로 OSI(Open Source Initiative)가 인증한 라이선스이며 GPL(GNU Public License)보다도 쓰기가 편하다. <br />
 <br />
 또한 자바SE 6의 RI도 머스탱(Mustang)이라는 오픈 소스 프로젝트로 공개되어 있다. 아직 라이선스는 매우 제한적이며 실제 사용도 어렵지만, 이 또한 올해 자바원 컨퍼런스에서 썬의 CEO인 조나단 슈왈츠가 조만간 글래스피시처럼 될 것이라고 공식 발표했다.<br />
 <br />
 이와 같이 자바가 리눅스처럼 오픈 소스로 풀린다는 것은 어떤 의미를 가지는 것일까? 글래스피시 프로젝트를 이끌고 있는 사람들 중 한 명인 에드와르도(Eduardo Pelegri-Llopart)는 “RI는 그 동안 장난 수준의 구현(Toy Implementation)으로 여겨져서, 그저 한번 설치하고 간단한 애플리케이션을 돌리는 수준으로 쓰여 왔지만 그것은 오해”라며 잘라 말한다 (http://weblogs.java.net/blog/pelegri/archive/2006/06/what_is_a_jcp_r.html).<br />
 <center><table border="0" cellpadding="0" cellspacing="0" width="500"><tbody><tr><td align="center"><img src="http://www.zdnet.co.kr/images/stories/builder/2006/12/7-1/02.jpg" /></td></tr><tr><td class="popul_list" align="center"><br />
</td></tr></tbody></table></center><br />
 <br />
 그런 선입견을 극복하기 위해 RI를 제품 수준의 품질로 끌어 올리려는 노력이 부단히 이루어져 왔다. 톰캣(Tomcat)의 경우도 초기에는 그야말로 써블릿과 JSP에 관심 있는 사람들에게 학습과 시험의 도구 정도로만 여겨져 왔다. ‘왜 이것을 실제 서비스에 쓸 수 없는가?’라는 각성으로부터 실질적인 기능들이 추가되고 많은 버그들이 고쳐져서 (다음과 같은 포탈에서 쓰일 정도로) 많은 사람들이 실제 서비스에 채택하기에 이른 것이다. <br />
 <br />
 일단 RI가 건실해지고 저변을 넓히면, 다음은 다양한 배포판이 나오며 사용자들을 즐겁게 한다. 즉 RI가 오픈 소스가 되어도 천하를 통일하여 독점하게 된다면 이 역시 아무 소용이 없다. 탄탄한 기초가 창조적인 응용을 낳는 것이 가장 바람직함은 자바의 발전에도 예외가 없는 셈이다.<br />
 <br />
 잘 알려진 것처럼 구글은 자체 개조한 리눅스를 이용하여 서비스를 하고 있다. 그렇다면, 다음은 무엇일까? 구글은 자바에 깊이 관여하고 있다. RI에 기반하여 자체 자바EE 구현과 SE의 구현이 가능할 것이다. 구글뿐만 아니라 플랫폼을 이용하여 서비스를 제공하는 회사라면 누구라도 할 수 있는 일이다. 그렇다면 그 동안 썬이 혼자서 짊어져 오던 자바에 대한 투자가 더 많은 회사들로 확산되어 중복은 피하고 특성은 강화하는 효율적인 집단 개발이 실현되는 것이다.<br />
 <br />
 <table align="center" border="0" cellpadding="0" cellspacing="0" width="568"><tbody><tr><td height="24" width="5"><img src="http://www.zdnet.co.kr/i/ui/common/r_title_ro_left.gif" border="0" height="24" width="5" /></td><td class="list15_00" bgcolor="#d9d0b7"><font color="#724339">&nbsp;&nbsp;<b>사용자 작성 코드(User Created Code)</b></font></td><td height="24" width="5"><img src="http://www.zdnet.co.kr/i/ui/common/r_title_ro_right.gif" border="0" height="24" width="5" /></td></tr></tbody></table><br />
 자바 2.0이 웹 2.0과 유사한 또 한 가지 측면은 사용자가 창조의 중심에 선다는 점에서 찾아볼 수 있다. 웹 2.0에서 사용자 작성 컨텐츠(User Created Contents)를 전면에 내세우듯이, 자바 2.0도 개발자 개개인의 블로그를 통해 지식과 코드를 나누는 것이 일상화되어 가고 있다. <br />
 <br />
 더불어 과거(90년대 이전)와 비교해 보면 2006년 현재의 개발 환경은 그야말로 천국이나 다름없다. 게다가 돈을 들여 툴을 살 필요도 없다. 일인당 생산성은 현저히 올라가고, 필요한 지식의 습득과 달성을 돕는 인프라도 급속도로 증가되어왔다. <br />
 <br />
 당장 개발자 개인이 쓰는 개발용 컴퓨터의 사양만 봐도 전에는 하드 디스크드라이브에서나 쓸법하던 용량이 지금은 메인 메모리 용량이 되어버렸다. 노트북이 개발자에게 크게 어필하게 되면서 ‘어디서나 코딩’이 가능해졌다. 굳이 일 중독이 아니더라도 분위기 좋은 카페나 햇살 따스한 야외에서 최고의 창의적 무드를 코드로 승화시켜 볼 수도 있다. <br />
 <br />
 사실 자신이 만든 코드를 올린다는 것은 웹 상의 프로젝트에 참여하는 식의 형식적이며 커뮤니티적인 통로로만 행해지는 것으로 생각되어왔다. 사실 블로그에 자료를 올리듯이 코드를 올린다고 생각하면 그리 대단한 과정을 거치지 않아도 충분하다. 대체로 이런 짧은 코드는 하나의 완성된 애플리케이션이기보다는 기능과 아이디어에 집중된 것이다. 이런 코드의 설명에 글이나 그림으로 살을 붙이면, 코드는 문서화라는 까다로운 작업을 할 필요 없이 훌륭히 완성된다.<br />
 <br />
 기존의 웹이 HTML 작성과 퍼블리싱이라는 다소 거창한 작업을 통해 컨텐츠를 공개했던 것에 반해(특히 HTML은 웹 디자인이라는 요소까지 맞물려 비전문가에게 한계를 심어주었다) 웹 2.0은 글쓰기 플랫폼으로서(예를 들어 태터툴즈와 같은 설치형 블로그) 겉보기와 올리기라는 작업을 줄이고 창작 자체에 집중할 수 있도록 하는 점도 최근 자바가 추구하는 비즈니스 로직 집중과 일맥상통한다. <br />
 <br />
 즉 인프라가 점점 더 두터워지고, 아이디어 공개와 교류가 실시간으로 이루어질 수 있는 공간이 탄생하면서, 자바 2.0은 단순히 프로그래밍 언어가 아니라 알고리즘과 로직의 플랫폼으로 자리매김할 것이다. 스트럿츠와 스프링으로 이어지는 프레임워크의 흐름은 이와 같은 움직임을 대변하고 있다. <br />
 <br />
 그 동안 컴포넌트 컴포넌트 노래를 불렀지만, 마치 자동차 부품처럼 규격화된 컴포넌트가 아닌, 인간의 ‘생각’을 컴포넌트화한다면, 꼭 인터페이스를 맞추는 고정관념을 탈피하여 자유롭고 유연한 재활용의 세계가 펼쳐지는 것이다. 더욱 동적인 시스템을 수용할 수 있는 프레임워크, 그리고 동적일 수밖에 없는 인간의 사고와 요구에 이제 새로운 자바가 부응하기 시작하는 모습이다.<br />
 <br />
 <table align="center" border="0" cellpadding="0" cellspacing="0" width="568"><tbody><tr><td height="24" width="5"><img src="http://www.zdnet.co.kr/i/ui/common/r_title_ro_left.gif" border="0" height="24" width="5" /></td><td class="list15_00" bgcolor="#d9d0b7"><font color="#724339">&nbsp;&nbsp;<b>컨버전스(Convergence)</b></font></td><td height="24" width="5"><img src="http://www.zdnet.co.kr/i/ui/common/r_title_ro_right.gif" border="0" height="24" width="5" /></td></tr></tbody></table><br />
 하드웨어 이야기이긴 하지만, 울트라 모바일 PC(이하 UMPC)는 컨버전스의 미래를 보여준다. MP3 플레이어, PMP, PDA, DMB, 네비게이션, 컴퓨터가 합체된 작고 휴대하기 좋은 기기. 여기에 휴대폰 같은 통신 기기까지 가미되면 어디서나 인터넷에 접속하며 화상 통화도 즐길 수 있다. 필자가 늘 꿈꾸던 컴퓨팅 환경도 바로 그런 것이었다. <br />
 <br />
 필자가 평소에 들고 다니는 것은 지갑, 휴대폰, 그리고 회사 출입 카드와 집 열쇠다. 지갑 안은 더 가관이다. 각종 카드와 현금, 명함, 메모 등이 빼곡하다. 휴대폰은 DMB폰이라서 크고 무거운 데다가 출입 카드나 열쇠를 잊고 나오기라도 하면 정말 낭패다. 봄이나 가을 겨울에야 겉옷을 입는다지만, 여름에는 넣을 주머니도 부족하다. 왜 이런 것들이 하나로 합쳐지지 않을까?<br />
 <br />
 아주 극단적으로, 위에서 말한 모든 기능을 가진 기기를 생각해보자. 대략 휴대폰보다는 약간 크지만, UMPC처럼 크진 않고 현재의 휴대폰보다는 넓은 화면과 고운 해상도를 가져 MP3 플레이어, PMP, PDA, DMB, 네비게이션으로 부족함이 없도록 한다. 내부에는 고성능 임베디드 CPU를 탑재하여 멀티태스킹 OS를 지원하고, 그 위에 자바SE급의 자바를 올려 웬만한 자바 애플리케이션은 수정 없이 돌릴 수 있게 한다. <br />
 <br />
 여기에 제 3세대 급의 무선 이동 통신이 가능하여 고속 인터넷 접속을 지원한다. 모든 카드는 이 기기에 특별히 할당된 카드 메모리에 기억되어, 아무리 많은 카드라도 모조리 그 특징과 함께 수록된다. SKT, KTF, LGT 멤버십 카드를 다 가지고 있다면 세 장의 카드를 따로따로 가지고 다닐 필요 없이 이 기기로 제시하고 싶은 카드를 선택할 수 있게 하는 것이다. 명함도 실제 종이 명함이 아니라 이 기기로 주고받고, 모든 출입 통제는 이 기기에 부여된 권한으로 이루어지게 한다.<br />
 <br />
 어떤가? 이 정체 모를 기기, 잃어버리면 끝이지만 그야말로 만능이고 무거운 노트북을 들고 다닐 필요도 없다. 무선 인터넷을 몰래 쓰기 위해 거리를 배회할 필요도 없다. 그런데도 작고 가벼워 늘 들고 다닐 수 있다. 전에는 기능 하나의 기능만 가진 기기조차도 들고 다니기 어려울 만큼 무거웠을 텐데 말이다.<br />
 <br />
 하드웨어 이야기를 장황하게 늘어놓은 이유는 자바에도 바로 이런 현상이 나타나고 있기 때문이다. 개별적으로 존재하던 많은 기술들이 자바EE와 자바SE라는 우산 아래로 모여들고 있다.<br />
 <center><table border="0" cellpadding="0" cellspacing="0" width="500"><tbody><tr><td align="center"><img src="http://www.zdnet.co.kr/images/stories/builder/2006/12/7-1/03.jpg" /></td></tr><tr><td class="popul_list" align="center"><br />
</td></tr></tbody></table></center><br />
 &lt;그림 3&gt;을 과거 J2EE 1.4와 비교해보면 점점 더 포함되는 JSR이 많아짐을 느낄 수 있다. 한편으로는 비대해지는 듯 보이지만(실제로 플랫폼 자체의 배포판 크기도 늘고 있다), 자바를 지탱해주는 하드웨어의 발전(CPU, 메모리, 하드 디스크, IO 버스 대역폭 등)에 비하면 오히려 하드웨어를 제대로 활용하기 위한 방향이라고 할 수 있다. <br />
 <br />
 특히 자바SE 6의 포용력은 경이롭다. 자바EE 5에도 포함된 XML과 웹 서비스 관련 기술(JSR 109과 JAXR을 제외한 JAXP, StAX, JAXB, SAAJ, JAX-WS)을 모두 포함하고 있다. 심지어 자바 DB라는 100% 자바 기반 RDBMS까지 내장하게 되었다. 앞에서 예로 들었던 당장은 비현실적인 컨버전스가 자바에서는 올해 가을이면 현실로 다가오는 셈이다. 이제 Java SE 6 하나만 설치하면 네트워크, XML 처리, 그래픽, 그리고 DB의 저장까지 가능하게 되는 것이다.<br />
 <br />
 그렇다면 어떤 일이 가능해지는 것일까? 사용자가 XML을 주면 그것으로부터 일정 정보를 뽑아 DB에 유지하는 프로그램을 짜야 한다고 생각해보자. 전에는 자바SE뿐만 아니라, XML 처리를 쉽게 하기 위해 JAXB도 따로 깔고(단순히 라이브러리뿐만 아니라 스키마를 처리하는 툴도 필요하다), MySQL과 같은 DBMS와 거기에 맞는 JDBC 드라이버도 구해 넣어야 했다. <br />
 <br />
 그런데 이제 그런 인프라 구축 과정이 일체 필요 없게 되는 것이다. 여기에 자바 퍼시스턴스(Java Persistence) API까지 가미되면, XML 처리와 DB 처리에 XML 이해와 SQL 쿼리가 전혀 필요 없는 자바 지향적 프로그래밍까지 가능해진다. 달리 말하면, 자바 2.0의 컨버전스는 단순히 API의 수집이 아니라 개발 방식에 있어서도 통합을 의미한다고 할 수 있다. <br />
 <br />
 한편, 자바ME의 컨버전스는 고성능으로 치닫고 있다. 노키아를 위시한 메이저 휴대폰 메이커들이 기존의 CLDC에서 보다 다양한 기능을 지원하는 CDC로 이전하고 있다. 거기에 많은 부가 패키지를 올려 자바SE에 뒤지지 않는 실행 환경을 제공하기 시작했다. 이는 휴대폰을 구성하는 하드웨어의 폭발적인 발전과 맞물려 있는데, 조만간 CDC조차도 뛰어넘는 자바SE급의 자바 환경이 휴대폰에 올라 갈 지도 모를 일이다.<br />
 <br />
 자바의 활약이 기대되는 매우 흥미로운 곳이 하나 더 있다. 바로 최근에 출시된 블루레이 디스크(Blue-ray Disk, 이하 BD)이다. BD는 DVD처럼 많은 컨텐츠를 섭렵할 수 있도록 다양한 메뉴 시스템을 제공해야 한다. 바로 이 메뉴 시스템을 확장하여 컨텐츠를 운영하는 애플리케이션을 작성하고 실행하는 플랫폼으로 자바가 쓰이게 되었다. <br />
 <br />
 모든 BD 플레이어는 자바를 지원할 것이며, 자바는 단순한 인터렉티브 메뉴 개발뿐 아니라 BD 컨텐츠를 활용한 멀티미디어 애플리케이션에 능히 쓰일 수 있다. 더욱이 BD 전용 플레이어가 네트워크 연결을 지원하거나 PC에서 BD를 보는 경우 자바의 네트워크 기능까지 활용한다면 그 응용성은 상상하기조차 힘들어 질 것이다.<br />
 <br />
 <table align="center" border="0" cellpadding="0" cellspacing="0" width="568"><tbody><tr><td height="24" width="5"><img src="http://www.zdnet.co.kr/i/ui/common/r_title_ro_left.gif" border="0" height="24" width="5" /></td><td class="list15_00" bgcolor="#d9d0b7"><font color="#724339">&nbsp;&nbsp;<b>언어적 중립성</b></font></td><td height="24" width="5"><img src="http://www.zdnet.co.kr/i/ui/common/r_title_ro_right.gif" border="0" height="24" width="5" /></td></tr></tbody></table><br />
 자바 2.0의 마지막 특징은 타 언어와의 혼용 지원에 있다. 이 말을 듣고 벌써 ‘닷넷에서 이미 한 거잖아’라고 생각했다면 맞다 바로 그것이다. 그런데 재미있는 것은 닷넷의 다중 언어 지원이 이미 MS가 공들인 프로그래밍 언어들을 한 데 모은 것인 반면, 자바와 함께 하고 싶어 하는 언어들은 자바와는 성질이 다른(특히 동적 스크립트) 언어가 많다는 사실이다. <br />
 <br />
 이와 관련한 JSR인 JSR 223 Scripting for Java Platform이 자바SE 6에 탑재되어 있어, 자바스크립트는 기본으로 지원되고, 그 밖에 그루비(Groovy), 파이썬(Python), 루비(Ruby), PHP등 많은 스크립트 언어를 자바 코드 안에서 실행할 수 있고 그 반대도 가능하다. 자바가 주가 되는 측면에서 바라본다면, 전체 코드에서 일부 코드를 자신이 좋아하는 스크립트 언어로 작성해도 된다. <br />
 <br />
 또 이미 많이 나와 있는 스크립트들을 라이브러리처럼 불러 쓸 수 있다. 그야말로 전에는 생각하기 어려웠던 놀라운 일이다.<br />
 <br />
 <table align="center" border="0" cellpadding="0" cellspacing="0" width="500">  <tbody><tr>     <td class="button_00">       <table border="0" cellpadding="0" cellspacing="0" width="100%">        <tbody><tr>           <td width="7"><img src="http://images.zdnet.co.kr/img/edit_table/table8_1.gif" height="24" width="7" /></td>          <td class="button_00" background="http://images.zdnet.co.kr/img/edit_table/table8_1_bg.gif" valign="baseline" width="350"><font color="#ffffff">머스탱과 글래스피시, 과연 내 맘대로 고쳐 쓸 수 있을까?</font></td>          <td width="34"><img src="http://images.zdnet.co.kr/img/edit_table/table8_2.gif" height="24" width="34" /></td>          <td background="http://images.zdnet.co.kr/img/edit_table/table8_3_bg.gif">&nbsp; </td>          <td width="5"><img src="http://images.zdnet.co.kr/img/edit_table/table8_7.gif" height="24" width="5" /></td>        </tr>      </tbody></table>    </td>  </tr>  <tr>     <td background="http://images.zdnet.co.kr/img/edit_table/table8_bg.gif">       <table border="0" cellpadding="0" cellspacing="0" width="100%">        <tbody><tr>           <td bgcolor="#000000" width="1"><br />
</td>          <td>             <table border="0" cellpadding="0" cellspacing="10" width="100%">              <tbody><tr>                 <td class="button_00">                   <table border="0" cellpadding="0" cellspacing="0" width="100%">                    <tbody><tr>                       <td>                         <table border="0" cellpadding="0" cellspacing="0" width="100%">                          <tbody><tr>                             <td class="button_00">머스탱과 글래스피시는 각각 자바SE 6와 자바EE 5의 RI를 오픈 소스로 구현한 것이다. 소스가 있으니 내려 받아 빌드도 가능해야 하겠지만 그 복잡한 코드만큼이나 빌드는 만만치 않다.<br />
 <br />
 머스탱은 현재 솔라리스, 리눅스, 윈도우 세 가지 플랫폼을 지원한다. 세 OS를 빼고 개인이 가장 많이 쓴다고 할 수 있는 Mac OS를 지원하지 않는 것이 아쉽지만, 최근에 맥이 인텔로 CPU를 이주하면서 전보다 훨씬 포팅 속도가 빨라진 것은 반가운 일이다. 사실 맥용 자바SE 플랫폼은 애플이 작업하고 있으나 아직 오픈 소스가 아니어서 아쉬움이 남는 부분이기도 하다. 글래스피시처럼 머스탱도 맥을 공식 지원하기를 기대해본다.<br />
 <br />
 머스탱을 윈도우에서 빌드하려면 비주얼 스튜디오(이하 VS) 2003 프로페셔널이 필요하다. VS 프로는 한두 푼 하는 툴이 아닌 탓에 개인이 정식으로 구입하기에는 장벽이 높다. MS에서는 VS 익스프레스 에디션(이하 VSE)이라는 것을 무료로 배포하고 있다. 그래서, 이 익스프레스 에디션의 최신 버전인 VSE 2005 C++를 머스탱 빌드에 쓰려고 하는 시도가 몇몇 열혈지사들을 통해 이루어지고 있다. 조만간 썬에서 머스탱 빌드에 공식적으로 VSE 2005를 지원하면 윈도우 사용자에게 큰 도움이 될 것이다.<br />
 <br />
 이런 사정으로 인해 개인적인 머스탱 개발은 리눅스가 가장 쓰기 편해 보인다. 실제 리눅스를 쓰면 특별히 컴파일러나 추가 패키지를 깔 필요가 거의 없다. 그런데 산 넘어 산인 것이 웬만한 PC에서도 몇 시간씩 걸치는 완전 빌드 과정이다. 이것은 글래스피시도 마찬가지여서, 필자가 쓰는 초강력 파워맥(CPU 코어 4개, 메모리 8기가)에서도 2시간이나 걸릴 정도이다. 물론 모든 모듈을 다 빌드해야 할 필요성은 드물겠지만, 이토록 엄청난 규모의 프로젝트를 파악하고 자기 것으로 만드는 데에는 많은 시간과 자원의 투자가 필요한 상황이다.<br />
 <br />
 하지만, 여기에도 반전이 있어 PC의 하드웨어는 눈부시게 발전하고 있다. 64비트, 멀티 코어, SSD(Solid State Disk) 등의 기술이 속속 개인 사용자에게 다가가고 있다. 이제 바야흐로 맞춤형 자바의 시대가 다가오는 것이다.</td>                          </tr>                        </tbody></table>                      </td>                    </tr>                  </tbody></table>                </td>              </tr>            </tbody></table>          </td>          <td bgcolor="#000000" width="1"><br />
</td>        </tr>      </tbody></table>    </td>  </tr>  <tr>     <td class="bk">       <table border="0" cellpadding="0" cellspacing="0" width="100%">        <tbody><tr>           <td background="http://images.zdnet.co.kr/img/edit_table/table8_bot_mid.gif"><img src="http://images.zdnet.co.kr/img/edit_table/table8_bot_left.gif" height="7" width="5" /></td>          <td background="http://images.zdnet.co.kr/img/edit_table/table8_bot_mid.gif"><br />
</td>          <td background="http://images.zdnet.co.kr/img/edit_table/table8_bot_mid.gif">            <div align="right"><img src="http://images.zdnet.co.kr/img/edit_table/table8_bot_right.gif" height="7" width="6" /></div>          </td>        </tr>      </tbody></table>    </td>  </tr></tbody></table><br />
 <br />
 자바는 프로그래밍 언어이기도 하지만 자바 바이트 코드를 실행하는 버추얼 머신이기도 하다. 바로 이 점에서 ‘자바 실행 파일을 꼭 자바로 짜야 하는가?’라는 의문을 낳게 되었다. 이미 닷넷이 CLR(Common Language Runtime)을 통해 보여준 것처럼, 실행 환경과 개발 환경의 분리는 새로운 것도 아니지만 그 동안 자바에 천착한 이들에게는 생소하고 또 두려울 수도 있다. <br />
 <br />
 하지만 자바는 다른 모든 언어가 그렇듯이 언어로서 모든 목적에 100% 부합할 수 없다. 개발에 쓸 언어의 선택은 사용자의 몫으로 돌리고, 자바2.0은 실행 환경으로서 더욱 넓어지는 길을 운명으로 삼으려 한다. 이는 자바SE 7 코드명 돌핀(Dolphin)에서 구제화 될 예정이며, 자바에 있어 일대 전환점이 될 것이다.<br />
 <br />
 <b>꿈이 자라면 현실이 된다.</b><br />
 꿈은 이루어진다. 2002년 월드컵 구호가 아니다. 자바에 대한 많은 꿈들이 현실로 이루어졌고, 또 많은 꿈들이 실현의 후보로 뛰고 있다.<br />
 <br />
 <table align="center" border="0" cellpadding="0" cellspacing="0" width="500">  <tbody><tr>     <td class="button_00">       <table border="0" cellpadding="0" cellspacing="0" width="100%">        <tbody><tr>           <td width="7"><img src="http://images.zdnet.co.kr/img/edit_table/table8_1.gif" height="24" width="7" /></td>          <td class="button_00" background="http://images.zdnet.co.kr/img/edit_table/table8_1_bg.gif" valign="baseline" width="350"><font color="#ffffff">Java SE 7와 Java EE 6을 구성할 신기술들</font></td>          <td width="34"><img src="http://images.zdnet.co.kr/img/edit_table/table8_2.gif" height="24" width="34" /></td>          <td background="http://images.zdnet.co.kr/img/edit_table/table8_3_bg.gif">&nbsp; </td>          <td width="5"><img src="http://images.zdnet.co.kr/img/edit_table/table8_7.gif" height="24" width="5" /></td>        </tr>      </tbody></table>    </td>  </tr>  <tr>     <td background="http://images.zdnet.co.kr/img/edit_table/table8_bg.gif">       <table border="0" cellpadding="0" cellspacing="0" width="100%">        <tbody><tr>           <td bgcolor="#000000" width="1"><br />
</td>          <td>             <table border="0" cellpadding="0" cellspacing="10" width="100%">              <tbody><tr>                 <td class="button_00">                   <table border="0" cellpadding="0" cellspacing="0" width="100%">                    <tbody><tr>                       <td>                         <table border="0" cellpadding="0" cellspacing="0" width="100%">                          <tbody><tr>                             <td class="button_00">자 바 개발자들의 꿈을 현실에 한걸음 다가서도록 만들어 줄 자바SE 7과 자바EE 6의 정확한 로드맵은 아직 나오지 않았지만, 다음과 같은 기술들이 새로이 추가될 것으로 관측되고 있다. 관심 있는 많은 자바 연구자와 개발자의 참여 바란다.<br />
 <br />
 ● Java SE 7<br />
  - JSR 277 Java Module System<br />
  - JSR 292 Supporting Dynamically Typed Languages on the Java Platform<br />
  - JSR 294 Improved Modularity Support in the Java Programming Language<br />
  - JSR 295 Beans Binding<br />
  - JSR 296 Swing Application Framework<br />
 <br />
 ● Java EE 6<br />
  - JSR 208 Java Business Integration (JBI)<br />
  - JSR 225 XQuery API for Java (XQJ)<br />
  - JSR 235 Service Data Objects (SDO)<br />
  - JSR 283 Content Repository for Java Technology API (JCR) 2.0<br />
  - JSR 286 Portlet Specification 2.0<br />
  - JSR 299 Web Beans</td>                          </tr>                        </tbody></table>                      </td>                    </tr>                  </tbody></table>                </td>              </tr>            </tbody></table>          </td>          <td bgcolor="#000000" width="1"><br />
</td>        </tr>      </tbody></table>    </td>  </tr>  <tr>     <td class="bk">       <table border="0" cellpadding="0" cellspacing="0" width="100%">        <tbody><tr>           <td background="http://images.zdnet.co.kr/img/edit_table/table8_bot_mid.gif"><img src="http://images.zdnet.co.kr/img/edit_table/table8_bot_left.gif" height="7" width="5" /></td>          <td background="http://images.zdnet.co.kr/img/edit_table/table8_bot_mid.gif"><br />
</td>          <td background="http://images.zdnet.co.kr/img/edit_table/table8_bot_mid.gif">            <div align="right"><img src="http://images.zdnet.co.kr/img/edit_table/table8_bot_right.gif" height="7" width="6" /></div>          </td>        </tr>      </tbody></table>    </td>  </tr></tbody></table> <br />
 <br />
 좀 더 나은 소프트웨어 개발을 향해 우리는 한 걸음 한 걸음 나아가고 있으며, 그것이 개발자가 할 수 있는 좋은 세상 만들기의 지름길이기도 하다. 자바 2.0은 자바를 통해 그 세상을 열어 가려는 사람들의 염원의 결정체이다. 꿈을 꾸는 당신이 가장 소중하다. @<br />
<br />
&nbsp;* 출처: http://www.zdnet.co.kr/builder/dev/java/0,39031622,39153447,00.htm<br />
<br />
<br />
			 ]]> 
		</description>
		<category>Java</category>

		<comments>http://lakhos.egloos.com/2902722#comments</comments>
		<pubDate>Thu, 28 Dec 2006 12:12:41 GMT</pubDate>
		<dc:creator>규영이</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 아이폰, 희대의 사기극? ]]> </title>
		<link>http://lakhos.egloos.com/2901538</link>
		<guid>http://lakhos.egloos.com/2901538</guid>
		<description>
			<![CDATA[ 
  <b>이런 생각을 하는 사람이 있을까? 아이폰(iPhone)이 IT업계가 얼마나 교묘한 술수에 잘 속아 넘어가는지를 테스트하기 위해 스티브 잡스와 실리콘밸리 관계자들이 꾸며낸 이야기라는 설을...</b><br />
 <br />
 도대체 지금처럼 중요한 시기에 수잔 파우터(Susan Powter)는 어디에 있단 말인가? <br />
 <br />
 기즈모도가 지난 밤 ‘기즈모도는 알고 있다. 아이폰이 월요일에 발표된다는 것을’이라는 내용의 3문장짜리 포스트를 올리면서 아이폰 음모론에 더욱 불이 붙었다. <br />
 <br />
 기즈모도의 포스트를 직접 읽어볼 수도 있겠지만 아주 간단한 문장이니 여기서 인용해 봤다.<br />
 <br />
 “나는 확신한다. 그건 결코 내가 기대했던 것이 아니다. 그리고 나는 이미 너무 많은 것을 말해버렸다(브라이언 램).”<br />
 <center><table width="500"><tbody><tr><td align="center"><img src="http://www.zdnet.co.kr/images/stories/review/2006/12/1222/iPhone_270x409_270x409_90x136.jpg" /></td></tr><!--?시작--><tr><td class="bk" align="center"><br />
</td></tr><!--?끝--></tbody></table></center><br />
 이 포스트가 올라오면서 램이 말하는 월요일이 지난주 월요일인 18일을 말하는 것인지, 맥월드 위크의 월요일인지 아니면 그 다음주 월요일인지, 그것도 아니라면 2013년 4월 1일을 말하는 것인지를 둘러싸고 한바탕 논란이 일었다. <br />
 <br />
 아이폰이 실제로 제품명으로 쓰일지는 아직 모르겠지만 일단 아이폰이 존재한다는 사실만은 기꺼이 받아들이고 싶다. <br />
 <br />
 수많은 이 시대의 존경받는 애널리스트들과 약간의 소란을 만들어낸 미디어 기업들이 애플이 디자인한 휴대폰/아이팟이 출시될 예정이라고 이미 언급했고, 구체적인 사양에 대해서는 조금씩 다르긴 하지만 한편으로는 수많은 사람들이 머지 않은 미래에 스티브 잡스가 청중이 빽빽이 들어찬 무대에서 애플폰으로 마돈나나 보노, 혹은 잭슨 브라운에게 전화를 걸게 될 것으로 기대하고 있다.<br />
 <center><table width="500"><tbody><tr><td align="center"><img src="http://www.zdnet.co.kr/images/stories/review/2006/12/1222/jpeg_iPhone_again_270x332_90x110.jpg" /></td></tr><!--?시작--><tr><td class="bk" align="center"><br />
</td></tr><!--?끝--></tbody></table></center><br />
 하지만 이 모든 것이 희대의 사기극이라면? <br />
 <br />
 아마도 길가에 서서 결코 오지 않을 수도 있는 무언가를 기다리는 블라디미르와 에스트래곤의 처지를 조금이나마 이해할 수 있게 되지 않을까. <br />
 <br />
 그러나 불행하게도 지금 중단하기에는 너무 멀리까지 와버렸다. 그렇다면 한 발 더 나아가볼까<br />
<br />
<br />
&nbsp;출처: http://www.zdnet.co.kr/news/digital/0,39030978,39154109,00.htm<br />
<br />
<br />
<br />
<br />
			 ]]> 
		</description>
		<category>IT 관련 잡다한것들..</category>

		<comments>http://lakhos.egloos.com/2901538#comments</comments>
		<pubDate>Wed, 27 Dec 2006 23:39:52 GMT</pubDate>
		<dc:creator>규영이</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 파이썬 개요 ]]> </title>
		<link>http://lakhos.egloos.com/2899553</link>
		<guid>http://lakhos.egloos.com/2899553</guid>
		<description>
			<![CDATA[ 
  <b><br />
파이썬</b>(Python)은 1989년 <a href="http://ko.wikipedia.org/wiki/%EC%95%94%EC%8A%A4%ED%85%8C%EB%A5%B4%EB%8B%B4" title="암스테르담">암스테르담</a>에서 <a href="http://ko.wikipedia.org/wiki/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8" title="프로그래머">프로그래머</a>인 <a href="http://ko.wikipedia.org/w/index.php?title=%EA%B7%80%EB%8F%84_%EB%B0%98_%EB%A1%9C%EC%84%AC&amp;action=edit" class="new" title="귀도 반 로섬">귀도 반 로섬</a>(Guido van Rossum)에 의해 개발되기 시작한 <a href="http://ko.wikipedia.org/wiki/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%EC%96%B8%EC%96%B4" title="프로그래밍 언어">프로그래밍 언어</a>로, 플랫폼 독립적이며 <a href="http://ko.wikipedia.org/wiki/%EC%9D%B8%ED%84%B0%ED%94%84%EB%A6%AC%ED%84%B0" title="인터프리터">인터프리터</a>식, <a href="http://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5" title="객체지향">객체지향</a>적, <a href="http://ko.wikipedia.org/w/index.php?title=%EB%8F%99%EC%A0%81_%ED%83%80%EC%9D%B4%ED%95%91&amp;action=edit" class="new" title="동적 타이핑">동적 타이핑</a>(dynamically typed) 대화형 언어이다. 파이썬이라는 이름은 귀도가 좋아하는 코미디 〈Monty Pythons Flying Circus〉에서 따온 것이다. <a href="http://ko.wikipedia.org/wiki/%EC%99%B8%EB%9E%98%EC%96%B4_%ED%91%9C%EA%B8%B0%EB%B2%95" title="외래어 표기법">외래어 표기법</a>에 따르면 Python은 영어를 기준으로 할 때 한글로 '파이선'으로 적어야 하나, 정식으로 채택된 한글 표기는 <b>파이썬</b>이다. <table id="toc" class="toc" summary="목차"> <tbody><tr> <td> <div id="toctitle"> <h2><br />
<span class="toctoggle"></span></h2></div></td></tr></tbody></table><p><!--[CDATA[  if (window.showTocToggle) { var tocShowText = "보이기"; var tocHideText = "숨기기"; showTocToggle(); }  //]]--> <a name=".EA.B0.9C.EC.9A.94"></a></p> <h2><span class="editsection">1. </span><span class="mw-headline">개요</span></h2> <p>파이썬은 초보자부터 전문가까지 폭넓은 사용자층을 보유하고 있다. <a href="http://ko.wikipedia.org/w/index.php?title=%EB%8F%99%EC%A0%81_%ED%83%80%EC%9D%B4%ED%95%91&amp;action=edit" class="new" title="동적 타이핑">동적 타이핑</a>(dynamic typing) 범용 프로그래밍 언어로, <a href="http://ko.wikipedia.org/wiki/%ED%8E%84_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%EC%96%B8%EC%96%B4" title="펄 프로그래밍 언어">펄</a> 및 <a href="http://ko.wikipedia.org/wiki/%EB%A3%A8%EB%B9%84_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%EC%96%B8%EC%96%B4" title="루비 프로그래밍 언어">루비</a>와 자주 비교된다. 다양한 플랫폼에서 쓸 수 있고, 라이브러리(모듈)가 풍부하여, <a href="http://ko.wikipedia.org/wiki/%EB%8C%80%ED%95%99" title="대학">대학</a>을 비롯한 여러 교육 기관, 연구 기관 및 산업계에서 이용이 증가하고 있다. 또 파이썬은 순수한 프로그램 언어로써의 기능 외에도 다른 언어로 쓰여진 모듈들을 연결하는 <a href="http://ko.wikipedia.org/w/index.php?title=%ED%92%80%EC%96%B8%EC%96%B4&amp;action=edit" class="new" title="풀언어">풀언어</a>(glue language)로써 자주 이용된다. 실제 파이썬은 많은 상용 애플리케이션에서 <a href="http://ko.wikipedia.org/wiki/%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8_%EC%96%B8%EC%96%B4" title="스크립트 언어">스크립트 언어</a>로써 채용되고 있다. 도움말 문서화도 잘 되어 있으며, <a href="http://ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C" title="유니코드">유니코드</a> 문자열을 지원해서 다양한 언어의 문자처리에도 능하다.</p> <p>파이썬은 기본적으로 인터프리터 위에서 실행될 것을 염두에 두어 설계되었으며 다음과 같은 특징을 갖고 있다.:</p> <ul><li><a href="http://ko.wikipedia.org/w/index.php?title=%EB%8F%99%EC%A0%81_%ED%83%80%EC%9D%B4%ED%95%91&amp;action=edit" class="new" title="동적 타이핑">동적 타이핑</a>(dynamic typing). (<a href="http://ko.wikipedia.org/w/index.php?title=%EC%8B%A4%ED%96%89_%EC%8B%9C%EA%B0%84&amp;action=edit" class="new" title="실행 시간">실행 시간</a>에 타입 체킹이 이루어진다.)</li><li><a href="http://ko.wikipedia.org/w/index.php?title=%EA%B0%9D%EC%B2%B4&amp;action=edit" class="new" title="객체">객체</a>의 멤버에 대한 접근이 제한되어 있지 않다. (속성이나 전용의 메서드 훅을 만들어 제한할 수는 있음.)</li><li>모듈, 클래스, 객체등의 언어의 요소가 내부로부터 액세스 가능하고, 리플렉션을 이용한 기술이 가능.</li></ul> <p>인터프리터로는 오리지날 C 로 쓰여진 버전 CPython 외에, C 스택을 사용하지 않는 <a href="http://ko.wikipedia.org/w/index.php?title=%EC%8A%A4%ED%83%9D%EB%A6%AC%EC%8A%A4_%ED%8C%8C%EC%9D%B4%EC%8D%AC&amp;action=edit" class="new" title="스택리스 파이썬">스택리스 파이썬</a>이나, Java 가상 머신 상에서 동작하는 <a href="http://ko.wikipedia.org/wiki/%EC%9E%90%EC%9D%B4%EC%8D%AC" title="자이썬">Jython</a>(과거 JPython이라고 불렸음), <a href="http://ko.wikipedia.org/w/index.php?title=.NET&amp;action=edit" class="new" title=".NET">.NET</a> 플랫폼 상에서 동작하는 <a href="http://ko.wikipedia.org/wiki/IronPython" title="IronPython">IronPython</a>, 파이썬으로 재구현하는 <a href="http://ko.wikipedia.org/wiki/PyPy" title="PyPy">PyPy</a> 등이 있다.</p> <p>현대의 파이썬은 여전히 인터프리터 언어인 것처럼 동작하나 사용자가 모르는 사이에 스스로 파이썬 소스코드를 컴파일하여 바이트 코드(Byte code)를 생성함으로써 다음 번 수행 시에는 빠른 속도를 보여준다. 파이썬의 이러한 특징으로 소스코드의 유출 등의 보안 문제도 해결할 수 있게 되었다.</p> <p>파이썬에서는 들여쓰기(indentation)를 사용해서 블럭을 구분하는 독특한 문법을 채용하고 있다. 이 문법은 파이썬에 익숙한 사용자나 기존 프로그래밍 언어에서 들여쓰기의 중요성을 높이 평가하는 사용자에게는 잘 받아 들여지고 있지만, 다른 언어의 유저에게서는 프로그래머의 코딩 스타일을 제한한다는 비판도 많다. 이 밖에도 네이티브 바이너리를 생성해 주는 <a href="http://ko.wikipedia.org/wiki/C_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%EC%96%B8%EC%96%B4" title="C 프로그래밍 언어">C</a>/<a href="http://ko.wikipedia.org/wiki/C%2B%2B" title="C++">C++</a> 등의 언어에 비해 수행 속도가 느리다는 단점이 있다. 그러나 비즈니스 분야 등 일반적인 컴퓨터 응용 환경에서는 속도가 그리 중요하지 않고, 빠른 속도를 요하는 프로그램의 경우에도 프로토타이핑 후 빠른 속도가 필요한 부분만 선택적으로 C언어 등으로 모듈화 할 수 있다(<a href="http://ko.wikipedia.org/w/index.php?title=SWIG&amp;action=edit" class="new" title="SWIG">SWIG</a>, <a href="http://ko.wikipedia.org/wiki/SIP" title="SIP">SIP</a> 등 wrapper생성 프로그램들이 많이 있다). 또한 <a href="http://ko.wikipedia.org/w/index.php?title=Pyrex&amp;action=edit" class="new" title="Pyrex">Pyrex</a>, <a href="http://ko.wikipedia.org/w/index.php?title=Psyco&amp;action=edit" class="new" title="Psyco">Psyco</a>, <a href="http://ko.wikipedia.org/w/index.php?title=NumPy&amp;action=edit" class="new" title="NumPy">NumPy</a> 등을 이용하면 빠른 수치 연산이 가능하기 때문에 과학 및 공학 분야에서도 많이 이용되고 있다.</p> <p><a name=".ED.8C.8C.EC.9D.B4.EC.8D.AC.EC.97.90_.EC.98.81.ED.96.A5.EC.9D.84_.EC.A4.80_.EC.96.B8.EC.96.B4"></a></p> <h2><span class="editsection">2.</span> <span class="mw-headline">파이썬에 영향을 준 언어</span></h2> <ul><li><a href="http://ko.wikipedia.org/wiki/ABC" title="ABC">ABC</a>&nbsp;: 들여쓰기에 의한 블럭 구분</li><li><a href="http://ko.wikipedia.org/w/index.php?title=Modula-2&amp;action=edit" class="new" title="Modula-2">Modula-2</a>&nbsp;: 모듈 기능</li><li><a href="http://ko.wikipedia.org/w/index.php?title=ICON&amp;action=edit" class="new" title="ICON">ICON</a>&nbsp;: 사전, 슬라이스 연산자 등</li><li><a href="http://ko.wikipedia.org/w/index.php?title=SETL&amp;action=edit" class="new" title="SETL">SETL</a>&nbsp;: 리스트의 내포 표현</li><li><a href="http://ko.wikipedia.org/wiki/C_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%EC%96%B8%EC%96%B4" title="C 프로그래밍 언어">C</a>, <a href="http://ko.wikipedia.org/wiki/C_%ED%94%8C%EB%9F%AC%EC%8A%A4_%ED%94%8C%EB%9F%AC%EC%8A%A4" title="C 플러스 플러스">C++</a>&nbsp;: 기본적인 문법</li><li><a href="http://ko.wikipedia.org/w/index.php?title=SmallTalk&amp;action=edit" class="new" title="SmallTalk">SmallTalk</a>&nbsp;: 객체 지향</li><li><a href="http://ko.wikipedia.org/wiki/%EB%A6%AC%EC%8A%A4%ED%94%84" title="리스프">Lisp</a>, <a href="http://ko.wikipedia.org/wiki/%EC%8A%A4%ED%82%B4_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%EC%96%B8%EC%96%B4" title="스킴 프로그래밍 언어">Scheme</a>&nbsp;: 함수형 언어적 특징</li></ul> <p><a name=".EB.8F.99.EC.9E.91.ED.95.98.EB.8A.94_.ED.94.8C.EB.9E.AB.ED.8F.BC"></a></p> <h2><span class="editsection">3.</span> <span class="mw-headline">동작하는 플랫폼</span></h2> <p>파이썬 최초 버전은 <a href="http://ko.wikipedia.org/wiki/%EB%A7%A4%ED%82%A8%ED%86%A0%EC%8B%9C" title="매킨토시">매킨토시</a>에서 개발되었지만, 현재는 다양한 플랫폼에서 동작한다.</p> <ul><li><a href="http://ko.wikipedia.org/wiki/%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%86%8C%ED%94%84%ED%8A%B8_%EC%9C%88%EB%8F%84" title="마이크로소프트 윈도">마이크로소프트 윈도</a>(9x계 및 NT계는 최신판, 3.1 및 MS-DOS는 구판만)</li><li><a href="http://ko.wikipedia.org/wiki/%EB%A7%A4%ED%82%A8%ED%86%A0%EC%8B%9C" title="매킨토시">매킨토시</a>(OS 9 이전 및 OS X 이후 함께)</li><li><a href="http://ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%89%EC%8A%A4" title="유닉스">각종UNIX</a></li><li><a href="http://ko.wikipedia.org/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4" title="리눅스">Linux</a></li><li><a href="http://ko.wikipedia.org/wiki/PalmOS" title="PalmOS">PalmOS</a></li><li><a href="http://ko.wikipedia.org/w/index.php?title=Nokia_Series_60&amp;action=edit" class="new" title="Nokia Series 60">Nokia Series 60</a></li></ul> <p><a name=".EC.96.B8.EC.96.B4.EC.9D.98_.EA.B8.B0.EB.8A.A5"></a></p> <h2><span class="editsection">4.</span> <span class="mw-headline">언어의 기능</span></h2> <p>파이썬은 언어 자신의 기능은 작게하여 사용자가 언제나 필요로 하는 최소한의 기능만을 제공하도록 만들어져 있다. 이것은 펄의 TIMTOWTDI (<i>there's more than one way to do it - 문제를 해결하는 방법은 단 한가지가 아니다</i>) 철학과는 대조적인 것이며, 파이썬에서는 다른 유저가 썼더라도 동일한 일을 하는 프로그램은 대체로 모두 비슷한 코드로 수렴한다. 기본 기능에 없는 많은 기능이 라이브러리에 의해서 제공되고 있다.</p> <p>또, 파이썬 에서는 프로그램의 문서화가 매우 중시되고 있어 언어의 기본 기능에 포함되어 있다. 파이썬은 원래 교육용으로 설계되었기 때문에 읽기 쉽고, 그래서 효율적인 코드를 가능한 간단하게 쓸 수 있도록 하려는 철학이 구석구석까지 침투하고 있어, 파이썬 커뮤니티에서도 알기 쉬운 코드를 선호하는 경향이 강하다.</p> <p><a name=".EB.AC.B8.EB.B2.95"></a></p> <h2><span class="editsection">5.</span> <span class="mw-headline">문법</span></h2> <p>파이썬의 문법에서 가장 잘 알려진 특징은 들여쓰기를 이용한 블럭 구조를 들 수 있다. 이것은 통상 <a href="http://ko.wikipedia.org/wiki/C_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%EC%96%B8%EC%96%B4" title="C 프로그래밍 언어">C</a>등에서 쓰이는 괄호를 이용한 블럭 구조를 대신한 것으로 매줄에서 처음오는 공백에 의해 눈에 보이는 블록 구조가 논리적인 제어구조와 일치하게 하는 방식이다. 아래는 C와 파이썬으로 재귀호출을 사용한 <a href="http://ko.wikipedia.org/wiki/%EC%B0%A8%EB%A1%80%EA%B3%B1" title="차례곱">차례곱</a>을 계산하는 함수를 정의한 것이다.</p> <p><b>Python:</b></p> <pre>def factorial(x):<br />
    if x == 0:<br />
        return 1<br />
    else:<br />
        return x * factorial(x - 1)<br />
</pre> <p><b>들여쓰기가 잘 된 C:</b></p> <pre>int factorial(int x)<br />
{<br />
    if(x == 0) {<br />
        return 1;<br />
    } else {<br />
        return x * factorial(x - 1);<br />
    }<br />
}<br />
</pre> <p>이렇게 비교하여 보면 파이썬과 정리되어 들여쓰기가 된 C 언어와는 차이가 거의 없어 보인다. 그러나 여기서 중요한 것은 위쪽의 C 형식은 가능한 여러가지 스타일 중에 하나일 뿐이라는 사실이다.</p> <p>즉 C로는 똑같은 구문을 다음과 같이 쓸 수도 있다.</p> <p><b>읽기 어렵게 쓰인 C:</b></p> <pre>int factorial(int x) { <br />
 if(x == 0) {return 1;} else<br />
 {return x * factorial(x - 1); } }<br />
</pre> <p>파이썬으로는 이렇게 쓰는 것이 허용되지 않는다. 파이썬에서 들여쓰기는 한가지 스타일이 아니라 필수적인 문법에 속한다. 파이썬의 이러한 엄격한 스타일 제한은 쓰는 사람에 관계없이 통일성을 유지하게 하며, 그 결과 가독성이 향상될 수 있는 장점이 있지만, 다른 한편 프로그램을 쓰는 스타일을 선택할 자유를 제약하는 것이란 의견도 있다.</p> <p><a name=".EB.8D.B0.EC.9D.B4.ED.84.B0.ED.98.95"></a></p> <h2><span class="editsection">6.</span> <span class="mw-headline">데이터형</span></h2> <p>파이썬은 기본 데이터형으로 정수형, 긴 정수형(long integer),부동 소수점수형, 복소수형, 문자형, 유니코드 문자형, 함수형을 갖고 있다. 긴 정수형(long integer)은 메모리가 허락하는 한 무제한의 자리수로 정수 계산이 가능하다. 여기에 집합적 데이터형으로 리스트형, 터퓰(tuple)형, 사전형, 중복을 허락하지 않는 집합형이 있다. 리스트형, 사전형은 내부의 값을 나중에 바꿀 수 있고, 터퓰형은 한 번 값을 정하면 내부의 값을 바꿀 수 없다. 집합형은 변경 가능하게도 변경 불능으로도 만들 수 있다. 또 많은 객체 지향 언어와 같이, 유저가 새롭게 자신의 형을 정의하는 것도 가능하다.</p> <p>파이썬은 <a href="http://ko.wikipedia.org/w/index.php?title=%EB%8F%99%EC%A0%81_%ED%83%80%EC%9D%B4%ED%95%91&amp;action=edit" class="new" title="동적 타이핑">동적 타이핑</a> 언어이기 때문에, 변수가 아닌 값이 타입을 가지고 있고, 변수는 모두 값의 참조(<a href="http://ko.wikipedia.org/wiki/C%2B%2B" title="C++">C++</a>의 reference)이다.</p> <p><a name=".EB.9D.BC.EC.9D.B4.EB.B8.8C.EB.9F.AC.EB.A6.AC"></a></p> <h2><span class="editsection">7.</span> <span class="mw-headline">라이브러리</span></h2> <p>파이썬에는 「건전지 포함("Battery Included")」이란 기본개념이 있어, 프로그래머가 바로 사용할 수 있는 라이브러리와 통합 환경이 이미 배포판과 함께 제공된다. 이 때문에 파이썬의 표준 라이브러리는 매우 충실하다. 여기에는 <a href="http://ko.wikipedia.org/wiki/%EC%A0%95%EA%B7%9C_%ED%91%9C%ED%98%84%EC%8B%9D" title="정규 표현식">정규 표현식</a>을 비롯해 운영체제의 시스템 콜이나 <a href="http://ko.wikipedia.org/wiki/XML" title="XML">XML</a> 처리, 직렬화, HTTP ,FTP 등의 각종 네트워크 프로토콜, 전자 메일이나 CSV파일의 처리, 데이터베이스 접속, GUI, HTML, 파이썬 코드 <a href="http://ko.wikipedia.org/wiki/%EA%B5%AC%EB%AC%B8_%EB%B6%84%EC%84%9D" title="구문 분석">구문 분석</a> 툴 등이 포함된다.</p> <p>써드파티 라이브러리도 풍부하며, 행렬 연산 패키지 Numeric Python 이나 이미지 처리용 Python Imaging Library, SDL 랩퍼인 PyGame 등은 잘 알려져 있다. 다만, 마이너 라이브러리까지 포함하면 너무 많아서 수습이 되지 않기 때문에, 최근 PyPI (Python Packages Index) 로 불리는 라이브러리의 저장소(repository)를 관리하는 기구가 새롭게 도입되었다.</p> <p><a name=".ED.95.9C.EA.B8.80_.EB.8B.A4.EB.A3.A8.EA.B8.B0"></a></p> <h2><span class="editsection">8.</span> <span class="mw-headline">한글 다루기</span></h2> <p>원래 파이썬은 미국 지역에서 개발되었기 때문에, 한글이나 한자와 같은 2바이트 문자를 지원하지 않았다. 그러나 Python 2.0 에서 <a href="http://ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C" title="유니코드">유니코드</a> 문자형이 새롭게 도입되어 다국어를 취급할 수 있게 되었다. 다른 스크립트 언어와 달리, 파이썬에서는 문자의 인코딩과 내부 유니코드 표현을 명확하게 구별한다. 유니코드 문자는 메모리에 저장되는 추상적인 개체이다. 화면에 나타내거나 파일 입출력을 할 때는 변환 코덱의 힘을 빌려서 특정 인코딩으로 변환한다. 또, 소스 코드의 문자 코드를 인식하는 기능이 있어, 다른 문자 코드로 쓰여진 프로그램의 동작이 달라질 위험을 해소하고 있다. 파이썬 2.4 에서는, CJK 코덱이 표준으로 배포판에 포함되게 되었기 때문에, 현재는 한글 처리에 문제는 거의 없다. 통합 개발 환경 IDLE에서의 한글 입출력도 기본적으로 가능하다고 한다.</p> <p><br />
</p> <p><a name=".EC.96.B8.EC.96.B4_.ED.99.95.EC.9E.A5"></a></p> <h2><span class="editsection">9.</span> <span class="mw-headline">언어 확장</span></h2> <p><a href="http://ko.wikipedia.org/wiki/Ctypes" title="Ctypes">ctypes</a></p> <p><a name=".EC.82.AC.EC.9A.A9_.ED.98.84.ED.99.A9"></a></p> <h2><span class="editsection">10.</span> <span class="mw-headline">사용 현황</span></h2> <p>파이썬은 많은 제품이나 기업 및 연구기관에서 사용되고 있다. 아래에 그 대표적인 것을 몇개 들어 본다.</p> <p><a name=".ED.8C.8C.EC.9D.B4.EC.8D.AC.EC.9C.BC.EB.A1.9C_.EC.9E.91.EC.84.B1.EB.90.9C_.EC.9E.90.EC.9C.A0.2F.EC.98.A4.ED.94.88.EC.86.8C.EC.8A.A4_.EC.86.8C.ED.94.84.ED.8A.B8.EC.9B.A8.EC.96.B4"></a></p> <h3><span class="editsection">&nbsp;10.1</span> <span class="mw-headline">파이썬으로 작성된 자유/오픈소스 소프트웨어</span></h3> <ul><li>Anaconda</li><li>BitTorrent</li><li>MailMan</li><li>MoinMoin</li><li>Plucker</li><li>Portage</li><li>PySol</li><li>ViewCVS</li><li>Zope / Plone</li><li><a href="http://ko.wikipedia.org/w/index.php?title=Trac&amp;action=edit" class="new" title="Trac">Trac</a></li></ul> <p><a name=".ED.8C.8C.EC.9D.B4.EC.8D.AC.EC.9D.84_.EB.82.B4.EB.B6.80.EC.A0.81.EC.9C.BC.EB.A1.9C_.EC.82.AC.EC.9A.A9.ED.95.98.EB.8A.94_.EC.86.8C.ED.94.84.ED.8A.B8.EC.9B.A8.EC.96.B4"></a></p> <h3><span class="editsection">&nbsp;10.2</span> <span class="mw-headline">파이썬을 내부적으로 사용하는 소프트웨어</span></h3> <ul><li>Blender</li><li>Inkscape</li><li>Paint Shop Pro</li><li>Shade</li><li>TRIBON (3D CAD Software)</li></ul> <p><a name=".ED.8C.8C.EC.9D.B4.EC.8D.AC.EC.9D.84_.EC.9D.B4.EC.9A.A9.ED.95.98.EA.B3.A0_.EC.9E.88.EB.8A.94_.EA.B8.B0.EC.97.85.C2.B7.EC.A0.95.EB.B6.80_.EA.B8.B0.EA.B4.80"></a></p> <h3><span class="editsection">&nbsp;10.3</span> <span class="mw-headline">파이썬을 이용하고 있는 기업·정부 기관</span></h3> <ul><li>야후</li><li><a href="http://ko.wikipedia.org/wiki/%EA%B5%AC%EA%B8%80" title="구글">구글</a></li><li>인더스트리얼 라이트 앤드 매직 (ILM)</li><li><a href="http://ko.wikipedia.org/wiki/%EB%AF%B8%EA%B5%AD%ED%95%AD%EA%B3%B5%EC%9A%B0%EC%A3%BC%EA%B5%AD" title="미국항공우주국">미국항공우주국</a> (NASA)</li><li>미국 해양 대기청 (NOAA)</li></ul> <p><a name=".EB.B0.94.EA.B9.A5_.EA.B3.A0.EB.A6.AC"></a></p> <h2><span class="editsection">11.</span> <span class="mw-headline">바깥 고리</span></h2> <ul><li><a href="http://www.python.or.kr/" class="external text" title="http://www.python.or.kr" rel="nofollow">한국 파이썬 사용자 모임</a></li><li><a href="http://home.paran.com/johnsonj/" class="external text" title="http://home.paran.com/johnsonj/" rel="nofollow">파이썬 문서고</a></li><li><a href="http://www.python.org/" class="external text" title="http://www.python.org" rel="nofollow">파이썬 공식 홈페이지</a></li></ul><br />
<br />
<a href="http://ko.wikipedia.org/wiki/%ED%8C%8C%EC%9D%B4%EC%8D%AC">&nbsp;* 출처: http://ko.wikipedia.org/wiki/%ED%8C%8C%EC%9D%B4%EC%8D%AC</a>			 ]]> 
		</description>
		<category>프로그래밍</category>

		<comments>http://lakhos.egloos.com/2899553#comments</comments>
		<pubDate>Wed, 27 Dec 2006 04:09:47 GMT</pubDate>
		<dc:creator>규영이</dc:creator>
	</item>
</channel>
</rss>
