<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>머드초보의 블로그</title>
		<link>http://mudchobo.tomeii.com/tt/</link>
		<description>허접한 개발자 성종천입니다.</description>
		<language>ko</language>
		<pubDate>Wed, 19 Nov 2008 14:14:57 +0900</pubDate>
		<generator>Textcube 1.7.6 : Staccato</generator>
		<image>
		<title>머드초보의 블로그</title>
		<url>http://mudchobo.tomeii.com/tt/attach/1/1088758691.jpg</url>
		<link>http://mudchobo.tomeii.com/tt/</link>
		<width>220</width>
		<height>165</height>
		<description>허접한 개발자 성종천입니다.</description>
		</image>
		<item>
			<title>[JAVA] 오픈아이디 로그인 테스트 - 실제 controller구현</title>
			<link>http://mudchobo.tomeii.com/tt/359</link>
			<description>셋팅이 완료되었으니 이제 controller를 만들어봅시다.&lt;br&gt;src폴더에 openidtest.controller라는 package를 만듭시다.&lt;br&gt;그리고, OpenIDController클래스를 생성합니다.&lt;br&gt;OpendIDController.java&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;&lt;br&gt;package openidtest.controller;&lt;br&gt;&lt;br&gt;import java.io.IOException;&lt;br&gt;import java.util.List;&lt;br&gt;&lt;br&gt;import javax.servlet.ServletException;&lt;br&gt;import javax.servlet.http.HttpServletRequest;&lt;br&gt;import javax.servlet.http.HttpServletResponse;&lt;br&gt;&lt;br&gt;import org.openid4java.OpenIDException;&lt;br&gt;import org.openid4java.consumer.ConsumerManager;&lt;br&gt;import org.openid4java.consumer.VerificationResult;&lt;br&gt;import org.openid4java.discovery.DiscoveryInformation;&lt;br&gt;import org.openid4java.discovery.Identifier;&lt;br&gt;import org.openid4java.message.AuthRequest;&lt;br&gt;import org.openid4java.message.ParameterList;&lt;br&gt;import org.openid4java.server.RealmVerifier;&lt;br&gt;import org.springframework.ui.ModelMap;&lt;br&gt;import org.springframework.web.bind.annotation.RequestMapping;&lt;br&gt;import org.springframework.web.bind.annotation.RequestMethod;&lt;br&gt;&lt;br&gt;public class OpenIDController &lt;br&gt;{&lt;br&gt;private ConsumerManager manager;&lt;br&gt;    &lt;br&gt;    @RequestMapping(value=&quot;/index.do&quot;, method=RequestMethod.GET)&lt;br&gt;    public String indexGetcontroller(ModelMap model)&lt;br&gt;    {&lt;br&gt;        return &quot;index&quot;;&lt;br&gt;    }&lt;br&gt;    &lt;br&gt;    @SuppressWarnings(&quot;unchecked&quot;)&lt;br&gt;    @RequestMapping(value=&quot;/index.do&quot;, method=RequestMethod.POST)&lt;br&gt;    public String indexPostController(String openId, ModelMap model, &lt;br&gt;            HttpServletRequest request, &lt;br&gt;            HttpServletResponse response) throws ServletException, IOException&lt;br&gt;    {&lt;br&gt;        try&lt;br&gt;        {&lt;br&gt;            manager = new ConsumerManager();&lt;br&gt;            &lt;br&gt;            String returnToUrl = &quot;http://localhost:8080/OpenIdTest/verify.do&quot;;&lt;br&gt;            &lt;br&gt;            List discoveries = manager.discover(openId);&lt;br&gt;            if (discoveries.size() == 0)&lt;br&gt;            {&lt;br&gt;                model.addAttribute(&quot;noopenid&quot;, openId);&lt;br&gt;                return &quot;index&quot;;&lt;br&gt;            }&lt;br&gt;            DiscoveryInformation discovered = manager.associate(discoveries);&lt;br&gt;            request.getSession().setAttribute(&quot;openid-disc&quot;, discovered);&lt;br&gt;            RealmVerifier rv = new RealmVerifier();&lt;br&gt;            rv.setEnforceRpId(false);&lt;br&gt;            manager.setRealmVerifier(rv); &lt;br&gt;            AuthRequest authReq = manager.authenticate(discovered, returnToUrl);&lt;br&gt;            &lt;br&gt;            if (!discovered.isVersion2()) &lt;br&gt;            {&lt;br&gt;                // Option 1: GET HTTP-redirect to the OpenID Provider endpoint&lt;br&gt;                // The only method supported in OpenID 1.x&lt;br&gt;                // redirect-URL usually limited ~2048 bytes&lt;br&gt;                response.sendRedirect(authReq.getDestinationUrl(true));&lt;br&gt;                return null;&lt;br&gt;            } else {&lt;br&gt;                // Option 2: HTML FORM Redirection (Allows payloads &amp;gt;2048 bytes)&lt;br&gt;&lt;br&gt;                // RequestDispatcher dispatcher =&lt;br&gt;                // getServletContext().getRequestDispatcher(&quot;formredirection.jsp&quot;);&lt;br&gt;                // httpReq.setAttribute(&quot;prameterMap&quot;,&lt;br&gt;                // response.getParameterMap());&lt;br&gt;                // httpReq.setAttribute(&quot;destinationUrl&quot;,&lt;br&gt;                // response.getDestinationUrl(false));&lt;br&gt;                // dispatcher.forward(request, response);&lt;br&gt;            }&lt;br&gt;            &lt;br&gt;        }&lt;br&gt;        catch (OpenIDException e) &lt;br&gt;        {&lt;br&gt;        }&lt;br&gt;        return null;&lt;br&gt;        //model.addAttribute(&quot;openId&quot;, openId);&lt;br&gt;        //return &quot;index&quot;;&lt;br&gt;    }&lt;br&gt;    &lt;br&gt;    @RequestMapping(value=&quot;/verify.do&quot;, method=RequestMethod.GET)&lt;br&gt;    public String verifyController(String openId, ModelMap model, &lt;br&gt;            HttpServletRequest request, &lt;br&gt;            HttpServletResponse response) throws ServletException&lt;br&gt;    {&lt;br&gt;        try&lt;br&gt;        {&lt;br&gt;            ParameterList paramList = new ParameterList(request.getParameterMap());&lt;br&gt;            DiscoveryInformation discovered = (DiscoveryInformation) request&lt;br&gt;            .getSession().getAttribute(&quot;openid-disc&quot;);&lt;br&gt;            &lt;br&gt;            // extract the receiving URL from the HTTP request&lt;br&gt;            StringBuffer receivingURL = request.getRequestURL();&lt;br&gt;            String queryString = request.getQueryString();&lt;br&gt;            if (queryString != null &amp;amp;&amp;amp; queryString.length() &amp;gt; 0)&lt;br&gt;                receivingURL.append(&quot;?&quot;).append(request.getQueryString());&lt;br&gt;            &lt;br&gt;            // verify the response; ConsumerManager needs to be the same&lt;br&gt;            // (static) instance used to place the authentication request&lt;br&gt;            VerificationResult verification = manager.verify(receivingURL.toString(), &lt;br&gt;                    paramList, discovered);&lt;br&gt;            &lt;br&gt;            // examine the verification result and extract the verified&lt;br&gt;            // identifier&lt;br&gt;            Identifier verified = verification.getVerifiedId();&lt;br&gt;            if (verified != null)&lt;br&gt;            {&lt;br&gt;                request.getSession()&lt;br&gt;                    .setAttribute(&quot;openid&quot;, verified.getIdentifier());&lt;br&gt;            }&lt;br&gt;        }&lt;br&gt;        catch (OpenIDException e) &lt;br&gt;        {&lt;br&gt;        }&lt;br&gt;        &lt;br&gt;        return &quot;redirect:index.do&quot;;&lt;br&gt;    }&lt;br&gt;    &lt;br&gt;    @RequestMapping(value=&quot;/logout.do&quot;, method=RequestMethod.POST)&lt;br&gt;    public String logoutController(String openId, ModelMap model, &lt;br&gt;            HttpServletRequest request, &lt;br&gt;            HttpServletResponse response) throws ServletException&lt;br&gt;    {&lt;br&gt;        request.getSession().removeAttribute(&quot;openid&quot;);&lt;br&gt;        return &quot;redirect:index.do&quot;;&lt;br&gt;    }&lt;br&gt;}&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;WEB-IINF/jsp/index.jsp&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;&lt;br&gt;&amp;lt;%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=EUC-KR&quot;&lt;br&gt;    pageEncoding=&quot;EUC-KR&quot;%&amp;gt;&lt;br&gt;&amp;lt;%@ taglib prefix=&quot;c&quot; uri=&quot;http://java.sun.com/jsp/jstl/core&quot; %&amp;gt;&lt;br&gt;&amp;lt;%@ taglib prefix=&quot;fmt&quot; uri=&quot;http://java.sun.com/jsp/jstl/fmt&quot; %&amp;gt;&lt;br&gt;&amp;lt;%@ taglib prefix=&quot;fn&quot; uri=&quot;http://java.sun.com/jsp/jstl/functions&quot; %&amp;gt;&lt;br&gt;&amp;lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot; &quot;http://www.w3.org/TR/html4/loose.dtd&quot;&amp;gt;&lt;br&gt;&amp;lt;html&amp;gt;&lt;br&gt;&amp;lt;head&amp;gt;&lt;br&gt;&amp;lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=EUC-KR&quot;&amp;gt;&lt;br&gt;&amp;lt;title&amp;gt;오픈아이디 테스트&amp;lt;/title&amp;gt;&lt;br&gt;&amp;lt;/head&amp;gt;&lt;br&gt;&amp;lt;body&amp;gt;&lt;br&gt;&amp;lt;c:choose&amp;gt;&lt;br&gt;    &amp;lt;c:when test=&quot;${sessionScope.openid != null}&quot;&amp;gt;&lt;br&gt;        ${sessionScope.openid}님 환영합니다.&lt;br&gt;        &amp;lt;form action=&quot;logout.do&quot; method=&quot;POST&quot;&amp;gt;&lt;br&gt;            &amp;lt;input type=&quot;submit&quot; value=&quot;로그아웃&quot;/&amp;gt;&lt;br&gt;        &amp;lt;/form&amp;gt;&lt;br&gt;    &amp;lt;/c:when&amp;gt;&lt;br&gt;    &amp;lt;c:otherwise&amp;gt;&lt;br&gt;        &amp;lt;form action=&quot;index.do&quot; method=&quot;POST&quot;&amp;gt;&lt;br&gt;            &amp;lt;input type=&quot;text&quot; id=&quot;openId&quot; name=&quot;openId&quot;/&amp;gt;&lt;br&gt;            &amp;lt;input type=&quot;submit&quot; value=&quot;로그인&quot;/&amp;gt;&lt;br&gt;        &amp;lt;/form&amp;gt;&lt;br&gt;    &amp;lt;/c:otherwise&amp;gt;&lt;br&gt;&amp;lt;/c:choose&amp;gt;&lt;br&gt;&amp;lt;c:if test=&quot;${noopenid != null}&quot;&amp;gt;&lt;br&gt;    ${noopenid}는 없는 아이디입니다.&lt;br&gt;&amp;lt;/c:if&amp;gt;&lt;br&gt;&amp;lt;/body&amp;gt;&lt;br&gt;&amp;lt;/html&amp;gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;view페이지에서 아이디를 치고, post요청을 하게 되면 indexPostController메소드가 호출이 됩니다. 여기서는 인증할 수 있는 URL을 redirect하게 됩니다. 그러면 OpenID를 제공하는 Provider에서 인증을 받고, returnURL로 이동을 해서 인증이 되었는지 확인 후 인증이 되면 &lt;br&gt;Identifier verified = verification.getVerifiedId(); &lt;br&gt;에서 Identifier 객체를 받을 수 있는데요. 이곳에서 오픈아이디를 구할 수 있습니다.&lt;br&gt;&lt;br&gt;아 졸려-_-&lt;br&gt;&lt;br&gt;</description>
			<category>자바(Java)</category>
			<category>openid</category>
			<category>로그인</category>
			<category>오픈아이디</category>
			<category>자바</category>
			<category>테스트</category>
			<author>(머드초보)</author>
			<guid>http://mudchobo.tomeii.com/tt/359</guid>
			<comments>http://mudchobo.tomeii.com/tt/359#entry359comment</comments>
			<pubDate>Sun, 16 Nov 2008 00:19:13 +0900</pubDate>
		</item>
		<item>
			<title>[JAVA] 오픈아이디 로그인 테스트 - 환경 셋팅</title>
			<link>http://mudchobo.tomeii.com/tt/358</link>
			<description>우선 rath님이 올리신 글과 outsider님이 올리신 글을 참조했습니다.&lt;br&gt;(거의 똑같네-_-)&lt;br&gt;&lt;br&gt;근데 이상하게 톰캣로그에서는 에러가 막 떨어지는데, 되네요-_-; 좀 더 확인해봐야겠네요 ㅠ&lt;br&gt;&lt;br&gt;xrath님의 &lt;a href=&quot;http://rath.springnote.com/pages/213977.xhtml&quot; target=&quot;_blank&quot;&gt;J2EE 환경에서 OpenID 지원 사이트 구축해보기&lt;/a&gt;&lt;br&gt;outsider님의 &lt;a href=&quot;http://blog.outsider.ne.kr/164&quot; target=&quot;_blank&quot;&gt;http://blog.outsider.ne.kr/164&lt;/a&gt; &lt;a href=&quot;http://blog.outsider.ne.kr/166&quot; target=&quot;_blank&quot;&gt;http://blog.outsider.ne.kr/166&lt;/a&gt;&lt;br&gt;&lt;br&gt;테스트환경은 TOMCAT6.0.18 + JDK 6u10 + Spring 2.5.6 입니다.&lt;br&gt;&lt;br&gt;우선 &lt;a href=&quot;http://code.sxip.com/&quot; target=&quot;_blank&quot;&gt;http://code.sxip.com/&lt;/a&gt; 이곳에서 라이브러리를 받습니다.&lt;br&gt;이클립스를 열어서 프로젝트를 하나 만듭시다.&lt;br&gt;&lt;br&gt;Dynamic Web Project로 해서 만듭시다.&lt;br&gt;OpenIdTest라는 프로젝트로 만듭시다.&lt;br&gt;&lt;br&gt;WEB-INF/lib에 라이브러리를 복사해야합니다. java-openid-sxip-0.9.4.jar이거 하나만 있으면 되는 줄 알았는데, lib폴더에 있는거 거의 다 필요하더군요-_-;&lt;br&gt;java-openid-sxip-0.9.4.jar&lt;br&gt;lib/commons-codec-1.3.jar&lt;br&gt;lib/commons-httpclient-3.0.1.jar&lt;br&gt;lib/commons-logging-1.03.jar&lt;br&gt;lib/htmlparser.jar&lt;br&gt;lib/openxri-client.jar&lt;br&gt;lib/openxri-syntax.jar&lt;br&gt;lib/endorsed/dom3-xercesImpl.jar&lt;br&gt;lib/endorsed/dom3-xml-apis.jar&lt;br&gt;lib/endorsed/xalan-2.6.0.jar&lt;br&gt;lib/xri/xmlsec-1.1.jar&lt;br&gt;&lt;br&gt;그 외, 스프링과 jstl을 사용하기 위한 라이브러리를 복사합니다.&lt;br&gt;spring.jar&lt;br&gt;spring-webmvc.jar&lt;br&gt;standard.jar&lt;br&gt;jstl.jar&lt;br&gt;&lt;br&gt;스프링을 위한 셋팅을 해봅시다.&lt;br&gt;web.xml파일을 수정합니다.&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;&lt;br&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;&lt;br&gt;&amp;lt;web-app xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&lt;br&gt;    xmlns=&quot;http://java.sun.com/xml/ns/javaee&quot; xmlns:web=&quot;http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&quot;&lt;br&gt;    xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&quot;&lt;br&gt;    id=&quot;WebApp_ID&quot; version=&quot;2.5&quot;&amp;gt;&lt;br&gt;    &amp;lt;display-name&amp;gt;OpenIdTest&amp;lt;/display-name&amp;gt;&lt;br&gt;&lt;br&gt;    &amp;lt;!-- SPRING FRAMEWORK DISPATCHER SERVLET CONFIGURATIONS --&amp;gt;&lt;br&gt;    &amp;lt;servlet&amp;gt;&lt;br&gt;        &amp;lt;servlet-name&amp;gt;spring&amp;lt;/servlet-name&amp;gt;&lt;br&gt;        &amp;lt;servlet-class&amp;gt; org.springframework.web.servlet.DispatcherServlet &lt;br&gt;        &amp;lt;/servlet-class&amp;gt;&lt;br&gt;        &amp;lt;load-on-startup&amp;gt;2&amp;lt;/load-on-startup&amp;gt;&lt;br&gt;    &amp;lt;/servlet&amp;gt;&lt;br&gt;    &amp;lt;servlet-mapping&amp;gt;&lt;br&gt;        &amp;lt;servlet-name&amp;gt;spring&amp;lt;/servlet-name&amp;gt;&lt;br&gt;        &amp;lt;url-pattern&amp;gt;*.do&amp;lt;/url-pattern&amp;gt;&lt;br&gt;    &amp;lt;/servlet-mapping&amp;gt;&lt;br&gt;&lt;br&gt;    &amp;lt;welcome-file-list&amp;gt;&lt;br&gt;        &amp;lt;welcome-file&amp;gt;redirect.jsp&amp;lt;/welcome-file&amp;gt;&lt;br&gt;    &amp;lt;/welcome-file-list&amp;gt;&lt;br&gt;&amp;lt;/web-app&amp;gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;WebContent밑에 redirect.jsp파일을 생성합니다.&lt;br&gt;redirect.jsp&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;&lt;br&gt;&amp;lt;%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=UTF-8&quot;&lt;br&gt;    pageEncoding=&quot;UTF-8&quot;%&amp;gt;&lt;br&gt;&amp;lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot; &quot;http://www.w3.org/TR/html4/loose.dtd&quot;&amp;gt;&lt;br&gt;&amp;lt;html&amp;gt;&lt;br&gt;&amp;lt;head&amp;gt;&lt;br&gt;&amp;lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;&amp;gt;&lt;br&gt;&amp;lt;title&amp;gt;OPENID TEST&amp;lt;/title&amp;gt;&lt;br&gt;&amp;lt;/head&amp;gt;&lt;br&gt;&amp;lt;body&amp;gt;&lt;br&gt;&amp;lt;% response.sendRedirect(&quot;index.do&quot;); %&amp;gt;&lt;br&gt;&amp;lt;/body&amp;gt;&lt;br&gt;&amp;lt;/html&amp;gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;WEB-INF 밑에 spring-servlet.xml을 생성합니다.&lt;br&gt;spring-servlet.xml&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;&lt;br&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;&lt;br&gt;&amp;lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot;&lt;br&gt;    xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&lt;br&gt;    xmlns:context=&quot;http://www.springframework.org/schema/context&quot;&lt;br&gt;    xsi:schemaLocation=&quot;http://www.springframework.org/schema/beans &lt;br&gt;    http://www.springframework.org/schema/beans/spring-beans.xsd&lt;br&gt;    http://www.springframework.org/schema/context &lt;br&gt;    http://www.springframework.org/schema/context/spring-context.xsd&quot;&amp;gt;&lt;br&gt;&lt;br&gt;    &amp;lt;!-- ANNOTATION CONTEXT DEFINITION --&amp;gt;&lt;br&gt;    &amp;lt;context:annotation-config /&amp;gt;&lt;br&gt;    &amp;lt;context:component-scan base-package=&quot;openidtest&quot; /&amp;gt;&lt;br&gt;    &lt;br&gt;    &amp;lt;!-- VIEW RESOLVER CONFIGURATIONS --&amp;gt;&lt;br&gt;    &amp;lt;bean id=&quot;viewResolver&quot; &lt;br&gt;        class=&quot;org.springframework.web.servlet.view.InternalResourceViewResolver&quot;&amp;gt;&lt;br&gt;        &amp;lt;property name=&quot;viewClass&quot; value=&quot;org.springframework.web.servlet.view.JstlView&quot;/&amp;gt;&lt;br&gt;        &amp;lt;property name=&quot;prefix&quot; value=&quot;/WEB-INF/jsp/&quot;/&amp;gt;&lt;br&gt;        &amp;lt;property name=&quot;suffix&quot; value=&quot;.jsp&quot;/&amp;gt;&lt;br&gt;    &amp;lt;/bean&amp;gt;&lt;br&gt;    &lt;br&gt;&amp;lt;/beans&amp;gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;아... 이제 셋팅이 완료되었어요.&lt;br&gt;다음 글에 계속.....-_-;&lt;br&gt;&lt;br&gt;</description>
			<category>자바(Java)</category>
			<category>JAVA</category>
			<category>openid</category>
			<category>로그인</category>
			<category>오픈아이디</category>
			<category>자바</category>
			<category>테스트</category>
			<author>(머드초보)</author>
			<guid>http://mudchobo.tomeii.com/tt/358</guid>
			<comments>http://mudchobo.tomeii.com/tt/358#entry358comment</comments>
			<pubDate>Sun, 16 Nov 2008 00:19:00 +0900</pubDate>
		</item>
		<item>
			<title>[Flex/AIR] ID3 한글깨짐 문제 ID3v2읽기 다른방법.</title>
			<link>http://mudchobo.tomeii.com/tt/357</link>
			<description>다...다른 방법을 검색해서 구했습니다-_-;&lt;br&gt;하지만, 이건 한글은 이제 잘 읽는 것 같은데......한자를 못 읽습니다-_-; 원래 안되는건가....-_-;&lt;br&gt;&lt;br&gt;우선 ID3Parser 링크입니다. 매우 빠른 속도로 ID3데이터를 가져옵니다.&lt;br&gt;&lt;a href=&quot;http://blog.ashier.com/2007/11/08/id3-parser/&quot; target=&quot;_blank&quot;&gt;http://blog.ashier.com/2007/11/08/id3-parser/&lt;/a&gt;&lt;br&gt;&lt;br&gt;여기서 한글을 읽을 수 있게 수정하는 부분이......&lt;br&gt;보면 ID3데이터를 추출해오는 부분이 있습니다.&lt;br&gt;거기서 한글로 추출할 수 있게 변경합니다.&lt;br&gt;&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;&lt;br&gt;private function parseFrames():void {&lt;br&gt;    var id:String = &quot;&quot;;&lt;br&gt;    var size:uint = 0;&lt;br&gt;    if(fs.position &amp;lt;length) {&lt;br&gt;        try {&lt;br&gt;            id = fs.readUTFBytes(frameIdSize);&lt;br&gt;            size = fs.readUnsignedInt();&lt;br&gt;            if (version&amp;gt;= 3) {&lt;br&gt;                fs.readByte();&lt;br&gt;                fs.readByte();&lt;br&gt;            }&lt;br&gt;            if(id.match(regEx)) {&lt;br&gt;                var obj:Object = new Object();&lt;br&gt;                obj.encoding = fs.readByte();&lt;br&gt;                obj.text = fs.readUTFBytes(size - 1);&lt;br&gt;                frames[id] = obj;&lt;br&gt;            }&lt;br&gt;            parseFrames();&lt;br&gt;        }catch(e:Error) {}&lt;br&gt;    }&lt;br&gt;}&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;이 부분이 있는데요. 한글을 읽어오는 readUTFBytes 부분을 바꿔줍니다.&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;&lt;br&gt;//obj.text = fs.readUTFBytes(size - 1);&lt;br&gt;if (obj.encoding == &quot;1&quot;)&lt;br&gt;{&lt;br&gt;    obj.text = StringUtil.trim(fs.readMultiByte(size - 1, &quot;unicode&quot;));&lt;br&gt;}&lt;br&gt;else&lt;br&gt;{&lt;br&gt;    obj.text = StringUtil.trim(fs.readMultiByte(size - 1, &quot;EUC-KR&quot;));&lt;br&gt;} &lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;보니까 obj.encoding이 1인 값은 unicode로 인코딩 된 것 같아요. obj.encoding이 0인 값은 EUC-KR로...&lt;br&gt;이렇게 하니까 잘 되네요....가끔 공백을 추출해오고 그래서 trim처리했습니다.&lt;br&gt;&lt;br&gt;아래글은 ID3v1방식 추출 방법 및 ID3v2의 다른 추출 방식 입니다^^ 참고하세요~&lt;br&gt;&lt;a href=&quot;http://mudchobo.tomeii.com/tt/356&quot; target=&quot;_blank&quot;&gt;http://mudchobo.tomeii.com/tt/356&lt;/a&gt;&lt;br&gt;</description>
			<category>에어(AIR)</category>
			<category>actionscript3</category>
			<category>air</category>
			<category>as3</category>
			<category>flex</category>
			<category>id3</category>
			<category>ID3v1</category>
			<category>ID3v2</category>
			<category>mp3</category>
			<category>에어</category>
			<category>플렉스</category>
			<category>한글깨짐</category>
			<author>(머드초보)</author>
			<guid>http://mudchobo.tomeii.com/tt/357</guid>
			<comments>http://mudchobo.tomeii.com/tt/357#entry357comment</comments>
			<pubDate>Thu, 06 Nov 2008 10:22:43 +0900</pubDate>
		</item>
		<item>
			<title>[Flex/AIR] MP3파일 ID3태그 한글깨짐현상 해결법. ID3v1, ID3v2</title>
			<link>http://mudchobo.tomeii.com/tt/356</link>
			<description>그......sound객체를 이용해서 하는 것이라니라 직접 바이트로 읽어서-_-; 하는 법이 있더라구요.&lt;br&gt;우선 ID3v1태그는 음악내용 맨 뒤에 있습니다. 그래서 추출하기는 쉽습니다.&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://cafe.naver.com/flexcomponent.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=10087&quot; target=&quot;_blank&quot;&gt;http://cafe.naver.com/flexcomponent.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=10087&lt;/a&gt;&lt;br&gt;flexcomponent에서 혀니님께서 작성하신 글입니다.&lt;br&gt;&lt;br&gt;그 다음 ID3v2태그는 맨 앞에 있습니다. 또한 이것을 추출하는 방법이 만만치 않습니다-_-;&lt;br&gt;왜냐하면 이건 뭐 길이도 가변적이고, 태그가 복잡합니다-_-;&lt;br&gt;그래서 태그를 공부하는 것보다 누가 만들어 놓은 것을 찾는 게 더 빠를 듯하여.....-_-;&lt;br&gt;구글신님께 부탁드리니 잘 찾아주셨습니다 ^^&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://blog.benstucki.net/?id=3&quot; target=&quot;_blank&quot;&gt;http://blog.benstucki.net/?id=3&lt;/a&gt;&lt;br&gt;&lt;br&gt;이것을 그대로 사용하시면 한글이 깨집니다.&lt;br&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://mudchobo.tomeii.com/tt/attach/1/1127882948.jpg&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;365&quot; width=&quot;354&quot; /&gt;&lt;/div&gt;&lt;br&gt;저 위에 소스를 다운 받아서 첫번째 ID3v1에서 사용한 방법을 사용합니다.&lt;br&gt;ID3Reader.as파일에 readTextFrame이라는 함수가 있는데요.&lt;br&gt;이게 텍스트를 읽어올 때 사용하는 함수인 것 같습니다.&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;&lt;br&gt;//obj.text = bytes.readUTFBytes(size-1);&lt;br&gt;obj.text = bytes.readMultiByte(size-1, &quot;EUC-KR&quot;);&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;요렇게 바꿔줍니다-_-; &lt;br&gt;그런 다음에 실행하면 한글이 잘 나옵니다.&lt;br&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://mudchobo.tomeii.com/tt/attach/1/1234053571.jpg&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;369&quot; width=&quot;358&quot; /&gt;&lt;/div&gt;하지만........-_-;&lt;br&gt;&lt;span style=&quot;text-decoration: line-through;&quot;&gt;기존에 Actionscript에서 제공하는 Sound클래스에서 추출하는 ID3에서 잘나오는 한글(즉 UTF-8로 인코딩 된 것)은 여기서 읽으면 잘 안나옵니다-_-; 이거 추출하는 프로그램 만드신 분이 잘못 만든건지 잘 모르겠는데요. 확인해봐야할 것 같네요 ㅠ&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://mudchobo.tomeii.com/tt/attach/1/1046649797.jpg&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;536&quot; width=&quot;500&quot; /&gt;&lt;/div&gt;&lt;span style=&quot;text-decoration: line-through;&quot;&gt;헉...-_-; 인코딩을 unicode로 바꾸니까 잘 나오네요. 기존에 Actionscript에서 잘 나오는 것은 unicode로 되어있어서 그런거였나요? ㅠ 더 확인해봐야겠습니다 ㅠ&lt;/span&gt;&lt;br&gt;이거 말고, 요아래 것으로 하면 잘 되네요.&lt;br&gt;&lt;br&gt;ID3v2추출하는 다른 방법입니다.&lt;br&gt;&lt;a href=&quot;http://mudchobo.tomeii.com/tt/357&quot; target=&quot;_blank&quot;&gt;http://mudchobo.tomeii.com/tt/357&lt;/a&gt;&lt;br&gt;</description>
			<category>에어(AIR)</category>
			<category>air</category>
			<category>flex</category>
			<category>id3</category>
			<category>mp3</category>
			<category>에어</category>
			<category>플렉스</category>
			<category>한글깨짐</category>
			<author>(머드초보)</author>
			<guid>http://mudchobo.tomeii.com/tt/356</guid>
			<comments>http://mudchobo.tomeii.com/tt/356#entry356comment</comments>
			<pubDate>Mon, 03 Nov 2008 23:09:24 +0900</pubDate>
		</item>
		<item>
			<title>[JAVA] File클래스에 있는 list()메소드에서 원하는 파일만 필터링하기.</title>
			<link>http://mudchobo.tomeii.com/tt/355</link>
			<description>필터링 해야할 일이 생겨서 해봤습니다.&lt;br&gt;&lt;br&gt;File클래스에는 list()메소드가 2개가 있습니다.&lt;br&gt;하나는 해당 디렉토리에서 모든 파일 리스트를 리턴하는 메소드입니다.&lt;br&gt;다른 하나는 필터링을 할 수 있게 FilenameFilter를 파라메터로 받는 list메소드가 있습니다.&lt;br&gt;&lt;br&gt;두번째 것을 이용해서 원하는 파일을 필터링 할 수 있습니다.&lt;br&gt;&lt;br&gt;FilenameFilter는 Interface입니다. 그래서 accept메소드를 구현하면 됩니다. 이 메소드에서 true값을 가지게 하는 값만이 String[]으로 반환이 됩니다.&lt;br&gt;&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;&lt;br&gt;import java.io.File;&lt;br&gt;import java.io.FilenameFilter;&lt;br&gt;&lt;br&gt;public class FileFilterTest {&lt;br&gt;&lt;br&gt;    public static void main(String[] args)&lt;br&gt;    {&lt;br&gt;        File file = new File(&quot;D:/&quot;);&lt;br&gt;        String[] list = file.list(new FilenameFilter()&lt;br&gt;        {&lt;br&gt;            @Override&lt;br&gt;            public boolean accept(File dir, String name) &lt;br&gt;            {&lt;br&gt;                return name.endsWith(&quot;.mp3&quot;);&lt;br&gt;            }&lt;br&gt;        });&lt;br&gt;        &lt;br&gt;        for (int i = 0; i &amp;lt; list.length; i++)&lt;br&gt;        {&lt;br&gt;            System.out.println(list[i]);&lt;br&gt;        }&lt;br&gt;    }&lt;br&gt;}&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;&lt;br&gt;01. War.mp3&lt;br&gt;01_Be.mp3&lt;br&gt;01 ) 나를 보낸다.mp3&lt;br&gt;더 크로스 3집 [&#039;07 The Cross]- 01 Love Song.mp3&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;음.....잘되는군요. 저 accept함수를 잘만 구현하면 원하는 형태로 구현할 수 있는 것 같습니다.&lt;br&gt;&lt;br&gt;</description>
			<category>자바(Java)</category>
			<category>file</category>
			<category>filter</category>
			<category>JAVA</category>
			<category>자바</category>
			<category>파일</category>
			<category>필터링</category>
			<author>(머드초보)</author>
			<guid>http://mudchobo.tomeii.com/tt/355</guid>
			<comments>http://mudchobo.tomeii.com/tt/355#entry355comment</comments>
			<pubDate>Mon, 03 Nov 2008 21:02:21 +0900</pubDate>
		</item>
		<item>
			<title>[유틸리티] Eclipse 3.4를 위한 Visual Editor플러그인 설치로 SWT 애플리케이션만들기</title>
			<link>http://mudchobo.tomeii.com/tt/354</link>
			<description>업체에서 윈도우를 만들고, 트레이아이콘형태로 애플리케이션을 띄워달라고해서 SWT까지 손을 대는군요-_-;&lt;br&gt;&lt;br&gt;디자인할 수 있는 툴로는 유료로 Window Builder라는 것이 있는 것 같은데요. SWT Designer, SWING Designer 등의 툴이 있는 것 같아요. 안써봐서 모르겠네요^^&lt;br&gt;그리고, 무료로 좋은 것이 하나 있는데, 그것이 넷빈즈(NetBeans)입니다. 넷빈즈는 무료임에도 불구하고 엄청난 디자인툴을 제공합니다. 넷빈즈가 저는 훨씬 좋은데, 프로젝트가 다 이클립스로 되어있어서 이클립스로 하는 법을 찾다가 Visual Editor를 알게 되었네요. (사실....Visual Editor가 없는 게 더 나은 것 같습니다-_-; 이걸로 만들면 코드가 개판이 됩니다-_-)&lt;br&gt;&lt;br&gt;이클립스 3.4를 실행합니다.&lt;br&gt;
Visual Editor가 원래는 이클립스 공식 플러그인이였는데, 이제 지원을 안하는 것 같아요.&lt;br&gt;Help -&amp;gt; Software Updates에서 Available Softeware탭에서 Add Site한다음에&lt;br&gt;&lt;a href=&quot;http://update.soyatec.org/Ganymede/ve/1.4/&quot; target=&quot;_blank&quot;&gt;http://update.soyatec.org/Ganymede/ve/1.4/&lt;/a&gt; 를 추가합니다.&lt;br&gt;열어보면 Visual Editor 1.4가 있습니다. 체크하고 Install합니다.&lt;br&gt;&lt;br&gt;이클립스 리스타트하고, New Java Project를 생성합니다.&lt;br&gt;Project Name은 SWTTest로.....&lt;br&gt;src에 대고, New -&amp;gt; Other -&amp;gt; Wizard에 Shell이라고 치면, Java -&amp;gt; SWT -&amp;gt; Shell Visual Class가 나옵니다.&lt;br&gt;선택하고, SWTTest라고 해줍니다. 그리고, public static void main에 체크를 합니다.&lt;br&gt;&lt;br&gt;그러면 위에 디자인이 보이고, 아래에 코드가 보입니다. 오른쪽에는 Pallette가 있어서 원하는 Control이나 Container를 가져다 쓸 수 있습니다.&lt;br&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://mudchobo.tomeii.com/tt/attach/1/1406641296.jpg&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;474&quot; width=&quot;600&quot; /&gt;&lt;/div&gt;실행하면 그냥 창이 뜰겁니다.&lt;br&gt;이거 배포할 때도 디게 쉽습니다.&lt;br&gt;Export 선택 후, Java -&amp;gt; Runnable JAR file이라고 있는데, 이걸 선택하면 자동으로 실행가능한 jar파일로 생성해줍니다. 윈도우에서 jar파일 더블클릭만하면 실행됩니다.&lt;br&gt;&lt;br&gt;아무런 코딩을 안했는데, 2메가네-_-;&lt;br&gt;</description>
			<category>유틸리티 활용하기</category>
			<category>swt</category>
			<category>visual editor</category>
			<category>비주얼 에디터</category>
			<category>유틸리티</category>
			<category>이클립스</category>
			<category>자바</category>
			<author>(머드초보)</author>
			<guid>http://mudchobo.tomeii.com/tt/354</guid>
			<comments>http://mudchobo.tomeii.com/tt/354#entry354comment</comments>
			<pubDate>Wed, 29 Oct 2008 19:38:25 +0900</pubDate>
		</item>
		<item>
			<title>[FLEX/AIR] 최소화이벤트발생 시 작업표시줄에서 사라지게 하기.</title>
			<link>http://mudchobo.tomeii.com/tt/353</link>
			<description>Microsoft Outlook 2007에서 최소화버튼을 누르면, 창이 사라지면서 작업표시줄에서도 같이 사라지고, 트레이아이콘으로만 남게 됩니다.&lt;br&gt;그것을 AIR에서도 구현할 수 있습니다.&lt;br&gt;&lt;br&gt;AIR에서는 윈도우의 DisplayState를 캐치할 수 있는데요. 즉, 최소화, 최대화 이런 이벤트가 발생하는 것을 잡을 수 있습니다. 그래서 만약 위와 같은 기능을 구현하고자 한다면 이렇게 하면 됩니다.&lt;br&gt;&lt;br&gt;최소화이벤트를 잡은 뒤, 창의 visible을 false로 바꾸고, trayicon의 icon이미지를 넣어주면 됩니다.&lt;br&gt;또, 창을 다시 원래 대로 돌리려면, trayicon에 이벤트를 걸어서 클릭 시, 창의 visible을 true로 바꿔주고, trayicon의 icon이미지를 삭제하면 됩니다.&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://help.adobe.com/en_US/AIR/1.1/devappsflex/WS5b3ccc516d4fbf351e63e3d118666ade46-7dcb.html&quot; target=&quot;_blank&quot;&gt;http://help.adobe.com/en_US/AIR/1.1/devappsflex/WS5b3ccc516d4fbf351e63e3d118666ade46-7dcb.html&lt;/a&gt;&lt;br&gt;&lt;br&gt;음....저는 찾는데 하루를 소비했습니다만-_-;(머리가 딸려서-_-) 찾은 문서는 Adobe AIR에 있는 &quot;Developing Adobe AIR 1.1 Applications with Flex&quot;문서군요 ㅠ&lt;br&gt;&lt;br&gt;아래는 제가 구현해봤습니다.&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;&lt;br&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;&lt;br&gt;&amp;lt;mx:WindowedApplication xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot; layout=&quot;absolute&quot;&lt;br&gt;    creationComplete=&quot;creationCompleteHandler()&quot;&amp;gt;&lt;br&gt;    &amp;lt;mx:Script&amp;gt;&lt;br&gt;        &amp;lt;![CDATA[&lt;br&gt;&lt;br&gt;            private var icons:Loader = new Loader();&lt;br&gt;                    &lt;br&gt;            private function creationCompleteHandler():void&lt;br&gt;            {&lt;br&gt;                makeTrayIcon();&lt;br&gt;                icons.contentLoaderInfo.addEventListener(Event.COMPLETE, iconLoadComplete);&lt;br&gt;                &lt;br&gt;                nativeWindow.addEventListener(&lt;br&gt;                        NativeWindowDisplayStateEvent.DISPLAY_STATE_CHANGING, onChange); &lt;br&gt;            }&lt;br&gt;            &lt;br&gt;            private function onChange(event:NativeWindowDisplayStateEvent):void&lt;br&gt;            {&lt;br&gt;                if (event.afterDisplayState == NativeWindowDisplayState.MINIMIZED)&lt;br&gt;                {&lt;br&gt;                    event.preventDefault();&lt;br&gt;                    nativeWindow.visible = false;&lt;br&gt;                    &lt;br&gt;                    icons.load(new URLRequest(&quot;icons/icon_16.png&quot;));&lt;br&gt;                }&lt;br&gt;            }&lt;br&gt;            &lt;br&gt;            private function makeTrayIcon():void&lt;br&gt;            { &lt;br&gt;                var iconMenu:NativeMenu = new NativeMenu();&lt;br&gt;                var visibleCommand:NativeMenuItem = iconMenu.addItem(new NativeMenuItem(&quot;Visible&quot;));&lt;br&gt;                visibleCommand.addEventListener(Event.SELECT, function(event:Event):void {&lt;br&gt;                    nativeWindow.visible = true;&lt;br&gt;                    NativeApplication.nativeApplication.icon.bitmaps = [];&lt;br&gt;                });&lt;br&gt;                &lt;br&gt;                var exitCommand:NativeMenuItem = iconMenu.addItem(new NativeMenuItem(&quot;Exit&quot;)); &lt;br&gt;                exitCommand.addEventListener(Event.SELECT, function(event:Event):void {&lt;br&gt;                    NativeApplication.nativeApplication.icon.bitmaps = [];&lt;br&gt;                    NativeApplication.nativeApplication.exit();&lt;br&gt;                });&lt;br&gt;                &lt;br&gt;                var systray:SystemTrayIcon =&lt;br&gt;                NativeApplication.nativeApplication.icon as SystemTrayIcon;&lt;br&gt;                systray.menu = iconMenu;&lt;br&gt;            } &lt;br&gt;         &lt;br&gt;            private function iconLoadComplete(event:Event):void &lt;br&gt;            { &lt;br&gt;                NativeApplication.nativeApplication.icon.bitmaps = &lt;br&gt;                    [event.target.content.bitmapData]; &lt;br&gt;            }&lt;br&gt;&lt;br&gt;        ]]&amp;gt;&lt;br&gt;    &amp;lt;/mx:Script&amp;gt;&lt;br&gt;&amp;lt;/mx:WindowedApplication&amp;gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;핵심은 &lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;&lt;br&gt;nativeWindow.addEventListener(&lt;br&gt;                        NativeWindowDisplayStateEvent.DISPLAY_STATE_CHANGING, onChange); &lt;br&gt;&lt;br&gt;private function onChange(event:NativeWindowDisplayStateEvent):void{ &lt;br&gt;    if(event.afterDisplayState == NativeWindowDisplayState.MINIMIZED){ &lt;br&gt;        event.preventDefault(); &lt;br&gt;        event.target.visible = false; &lt;br&gt;    } &lt;br&gt;}&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;우선 윈도우에 NativeWindowDisplayStateEvent.DISPLAY_STATE_CHANGING 이벤트를 겁니다. 이것은 윈도우의 상태가 변경되었을 때 발생합니다.&lt;br&gt;최소화버튼을 누르거나 작업표시줄에서 버튼을 클릭하여 최소화 할 때 이벤트가 발생합니다. &lt;br&gt;event.preventDefault()를 호출하게 되면 디폴트동작을 취소하게 됩니다. 그리고 창만 숨기는거죠. 창을 숨기면 작업표시줄에도 사라집니다. 그리고, trayicon을 만들면 됩니다.&lt;br&gt;&lt;br&gt;후.....달이차오르니 가야겠습니다.&lt;br&gt;&lt;br&gt;</description>
			<category>에어(AIR)</category>
			<category>air</category>
			<category>flex</category>
			<category>minimize</category>
			<category>taskbar</category>
			<category>trayicon</category>
			<category>에어</category>
			<category>작업표시줄</category>
			<category>최소화</category>
			<category>트레이아이콘</category>
			<category>플렉스</category>
			<author>(머드초보)</author>
			<guid>http://mudchobo.tomeii.com/tt/353</guid>
			<comments>http://mudchobo.tomeii.com/tt/353#entry353comment</comments>
			<pubDate>Tue, 28 Oct 2008 22:34:09 +0900</pubDate>
		</item>
		<item>
			<title>[유틸리티] 자신이 어떤 소프트웨어를 쓰는지 통계내주는 프로그램 Wakoopa</title>
			<link>http://mudchobo.tomeii.com/tt/352</link>
			<description>올블로그를 보다가 &lt;br&gt;&lt;a href=&quot;http://www.choboweb.com/entry/%EB%82%B4-%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4-%EC%82%AC%EC%9A%A9-%ED%86%B5%EA%B3%84%EB%A5%BC-%EC%B6%94%EC%A0%81%ED%95%98%EB%8A%94-Wakoopa&quot; target=&quot;_blank&quot;&gt;http://www.choboweb.com/entry/%EB%82%B4-%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4-%EC%82%AC%EC%9A%A9-%ED%86%B5%EA%B3%84%EB%A5%BC-%EC%B6%94%EC%A0%81%ED%95%98%EB%8A%94-Wakoopa&lt;br&gt;&lt;/a&gt;&#039;내 소프트웨어 사용 통계를 추적하는 Wakoopa&#039; 라는 글을 읽고, 저도 설치해봤습니다^^&lt;br&gt;와우~ 아직 하루밖에 통계를 내지 않았지만......&lt;br&gt;&lt;br&gt;사이트입니다.&lt;br&gt;&lt;a href=&quot;http://wakoopa.com/&quot; target=&quot;_blank&quot;&gt;http://wakoopa.com/&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://mudchobo.tomeii.com/tt/attach/1/1322352941.jpg&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;766&quot; width=&quot;431&quot; /&gt;&lt;/div&gt;1등이 원격데스크탑 연결인데, 저건 잠시 외부서버에서 작업을 해야해서 좀 썼더니, 1등이 되버렸네요-_-;&lt;br&gt;2등은 FireFox인데, 회사에서 일안하고 인터넷만 한다는 것을 보여주는군요.&lt;br&gt;3등은 이클립스군요. 그래도 일을 하고 있는 것을 보여주는....-_-;&lt;br&gt;4등은 네이트온. 친구들과 채팅을 한 시간만 치는 것 같아요.&lt;br&gt;등등~&lt;br&gt;&lt;br&gt;암튼 신기한 프로그램입니다.&lt;br&gt;&lt;br&gt;이거 사장님이 직원 컴퓨터에 깔아놓고 확인해도 참 좋을 듯 싶습니다.&lt;br&gt;&lt;br&gt;여러가지 부가기능들이 있는데요. 위젯을 달 수가 있어요-_-; 자기가 제일 많이 쓰는 애플리케이션으로 한 위젯! 멋지네요 ^^ 게다가 open api를 지원하는 듯하네요. api를 이용해서 전체적으로 가장 많이 사용하는 애플리케이션을 받아올 수 있는 듯 합니다.&lt;br&gt;&lt;br&gt;이 사이트를 아는 사람들은 IE보다 FF를 많이 쓰네요^^&lt;br&gt;&lt;br&gt;PS. 사람들은 통계를 좋아하는 것 같아요 ^^&lt;br&gt;</description>
			<category>유틸리티 활용하기</category>
			<category>wakoopa</category>
			<category>유틸리티</category>
			<category>통계</category>
			<author>(머드초보)</author>
			<guid>http://mudchobo.tomeii.com/tt/352</guid>
			<comments>http://mudchobo.tomeii.com/tt/352#entry352comment</comments>
			<pubDate>Mon, 27 Oct 2008 15:31:08 +0900</pubDate>
		</item>
		<item>
			<title>[JAVA] java application실행 시 콘솔창에서 한글깨짐(물음표)현상 해결법</title>
			<link>http://mudchobo.tomeii.com/tt/351</link>
			<description>오늘 아침부터....저녁까지 케삽질을 하고 있었습니다.&lt;br&gt;제 PC에서는 한글로 잘 나왔는데, 실제 옮겨질 서버(Windows Server 2003)에서 돌리면 한글 부분이 물음표(???)로 나오는 현상이 있었습니다.&lt;br&gt;&lt;br&gt;삽질하다 안되서 그 윈도우서버2003에 이클립스(Eclipse)를 설치했습니다-_-; 그리고, 소스코드를 옮겨놓으니....디폴트가 CP1252로 소스코드가 되어있어서 한글이 다 깨져서 보이더군요. 분명 한글윈도우서버2003인데 이상하더군요. (CP1252는 영문윈도우 코드페이지라는군요).&lt;br&gt;그래서 강제로 MS949로 바꾸고, 한글로 고쳤습니다.&lt;br&gt;그리고, 이클립스에서 실행하는 CONSOLE창에서는 제대로 나오는 겁니다.&lt;br&gt;&lt;br&gt;하지만, 그 실행파일로 실행을 하면 그대로 한글이 깨집니다-_-;&lt;br&gt;그래서 생각했습니다. 자바를 실행할 때 뭔가 옵션이있다!&lt;br&gt;그래서 구글신님께 물어보니 이런 실행방법이 있었습니다.&lt;br&gt;&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;-Dfile.encoding=MS949&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;실행시 인코딩을 정하는 것 같습니다.&lt;br&gt;&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;&lt;br&gt;java -Dfile.encoding=MS949 ~~~메인클래스명&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;이렇게 띄우니까 한글이 나오더군요!&lt;br&gt;&lt;br&gt;젠장 하루종일 삽질했네-_-;&lt;br&gt;&lt;br&gt;</description>
			<category>자바(Java)</category>
			<category>cp1252</category>
			<category>JAVA</category>
			<category>ms949</category>
			<category>물음표</category>
			<category>자바</category>
			<category>한글깨짐</category>
			<author>(머드초보)</author>
			<guid>http://mudchobo.tomeii.com/tt/351</guid>
			<comments>http://mudchobo.tomeii.com/tt/351#entry351comment</comments>
			<pubDate>Fri, 24 Oct 2008 19:18:22 +0900</pubDate>
		</item>
		<item>
			<title>[머드초보의 일상] NetBeans Deep Dive Seminar 후기~</title>
			<link>http://mudchobo.tomeii.com/tt/350</link>
			<description>넷빈즈에 관심이 있어서 여기에도 갔습니다^^&lt;br&gt;&lt;br&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;1. NetBeans 최신 동향 소개 / Sridhar Reddy&lt;/span&gt;&lt;br&gt;처음에 5대 오픈소스에 대해서 말하는 사람에게 큐브를 줬는데요. 나도 가지고 싶었는데....-_-; 우선 넷빈즈 6.5를 내 놓으면서 새로워 지는 것은 PHP를 향상되게 지원하고, MySQL을 지원하고, JavaFX를 지원, Hibernate지원 등등이 있었는데요. &lt;br&gt;신기한 것을 보았는데요. NetBeans에서 Hibernate를 Swing에다가 연동을 하는데, 5분이면 하더군요-_-; Hibernate를 손쉽게 할 수 있었습니다. 설정파일도 쉽게 만들고, HQL을 테스트를 할 수 있었습니다. HQL을 날리니 실제 DB로 날리는 쿼리로도 보여주는 등 Hibernate를 위한 배려를 많이 했더군요(국외에는 Persistence층에서 가장 많이 사용하는게 Hibernate라고 하더라구요. 국내에서는 iBATIS를 많이 사용하죠^^). 저도 Hibernate로 삽질 좀 해봐야겠습니다. DB영역에서 조금 강화된 것이 DB쿼리관련이 잘 되어있더군요. sql쿼리도 테스트해 볼 수 있고, SQL코드컴플리션도 되구요^^&lt;br&gt;그 다음에 Profiler를 소개했는데요. 성능을 분석해서 메모리를 많이 잡아먹는 부분을 최적화 할 때 유용히 사용할 수 있는 것이죠(최적화 툴!) 무료로 제공하는 프로그램은 많이 없는데, 넷빈즈는 무료로 제공한다고 자랑합니다^^ 게다가 이클립스 프로젝트 임포터를 제공해서 최적화를 넷빈즈에서 해라라곡 하는데, 이것의 목적은 이클립스 유저를 뺏어오기 위함인듯?-_-;&lt;br&gt;&lt;br&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;2. NetBeans 6.5를 통해 더욱 쉬워진 스크립트 언어 구현 / Micheal Li&lt;/span&gt;&lt;br&gt;보니까 놀라울 정도로 Javascript 코드 완성을 제공하더라구요. 물론 완벽하지는 않지만(완벽하게는 안되겠죠^^) Aptana랑 비교했을 때 누가 더 뛰어날까요^^ 궁금하네. 암튼, Javascript / HTML / css editor가 매우 향상 되었습니다. 좀 맘에 들었던 것이 css Editor! 미리보기를 할 수 있고, UI처럼 CSS를 수정할 수 있습니다-_-; 좋아요!&lt;br&gt;그 다음, jMaki라는 Ajax프레임워크를 보여줬는데, 제가 Hands-on-Lab에서 한 것을 시연해줬습니다. 드래그앤 드랍으로 구글맵을 1분만에 띄울 수 있는...-_-;&lt;br&gt;그 외에 여러 스크립트 프레임워크를 보여줬는데요. JSF, Dynafaces, Woodstock 등등~&lt;br&gt;그 중에서도 신기한 것 중에 하나가 Wicket이라는 것이였는데요.&lt;br&gt;Ajax without Javascript입니다. Java와 HTML로 합니다. HTML에 widcket:id=hello 라고 넣으면, Java코드에서는 그 해당 hello를 가지고 액션을 취하게 합니다. 많이 사용한다는데...왜 몰랐지....-_-;&lt;br&gt;이번 행사를 통해 여러 신기한 기술을 많이 배우고 가네요^^&lt;br&gt;&lt;br&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;3. 데스크탑 개발자를 위한 NetBeans 사용법 / Chuk-Munn Lee&lt;/span&gt;&lt;br&gt;음....스윙은 예전에 학교다닐 때 swing으로 WebService클라이언트를 만들 때 사용하고 사용해본 적이 없어요^^ &lt;br&gt;아...회사에서 운영할 때 편하게 하려고 스윙으로 뭔가 만든적이 있네요^^ &lt;br&gt;초반에 넷빈즈를 통해 쉬운 Swing애플리케이션을 만들더군요. 매우 쉽게 만들던데, 직접 하려고하면 잘 안되는데-_-;&lt;br&gt;스윙에 대해서 좋아진 점을 발표한 것 같은데, 스윙을 많이 사용하지 않아서 내용이 잘 안들어오더라구요-_-; 손쉬운 Splash Screen만들기(애플리케이션 뜨기전에 뜨는 화면), Nimbus LookAndFeel(벡터로 만들어져서 확대해도 픽셀이 깨지지 않으며 매우 빠르다고 하네요), 크로스플랫폼적인 TrayIcon, 스윙에서 자바스크립트 콜~, 손쉬운 소켓통신을 위한 XMPP 등의 설명을 하더군요. 시간이 없어서 다 못했습니다만^^(준비해오신 내용이 너무 많았어요^^) &lt;br&gt;&lt;br&gt;넷빈즈는 매우 훌륭한 IDE인 것 같습니다. 보면 개발자들을 위해 신경을 많이 쓴 것 같구요. 하지만, 이클립스와는 다르게 플러그인이 정해져있는 것 같습니다. 이클립스는 사용자들이 플러그인을 제작할 수 있죠. 이것도 할 수 있으려나-_-; 암튼, 넷빈즈를 사용해보면 개발자들이 자주 쓰는 기능을 손쉽게 사용할 수 있게 만들어져있습니다. 라이브러리도 자동으로 추가시켜주며, Junit테스트도 용이하고, SVN, CVS 등도 잘 지원해주며, 배포가 매우 쉽게 배포파일을 생성시켜줍니다. 이클립스는 플러그인으로 설치를 다 해야하는데, 넷빈즈는 자주 쓰는 것을 다 포함하고 나옵니다. 서버까지 포함되어있죠^^(물론 자기네들 서버인 글래스피쉬가 기본입니다^^) &lt;br&gt;뭐 넷빈즈와 이클립스를 비교하면 장단점이 서로 있죠. 선택은 개발자들의 몫입니다^^&lt;br&gt;</description>
			<category>생활속에 나</category>
			<category>deep dive seminar</category>
			<category>netbeans</category>
			<category>넷빈즈</category>
			<category>세미나</category>
			<category>후기</category>
			<author>(머드초보)</author>
			<guid>http://mudchobo.tomeii.com/tt/350</guid>
			<comments>http://mudchobo.tomeii.com/tt/350#entry350comment</comments>
			<pubDate>Fri, 17 Oct 2008 23:55:18 +0900</pubDate>
		</item>
		<item>
			<title>[머드초보의 일상] SUN TECH DAYS 2008 2DAY 관람 후기~</title>
			<link>http://mudchobo.tomeii.com/tt/349</link>
			<description>둘째날 후기입니다.&lt;br&gt;&lt;br&gt;처음부터 Hands on Lab시간을 신청해서 그것을 들으러 갔습니다. 그.....쓰리다 레디(Sridhar Reddy)가 있었습니다. 아....속 쓰리다....-_-; 이름가지고 장난치면 안되는데-_-;&lt;br&gt;NetBeans를 이용한 JavaFX시간입니다! 이 JavaFX를 넷빈즈를 통해서 쉽게 개발할 수 있었습니다. 아직 JavaFX는 SDK가 preview버전이더군요. 아직 멀은 것 같습니다.&lt;br&gt;&lt;br&gt;1&lt;span style=&quot;font-weight: bold;&quot;&gt;.JavaFX SDK 시작하기 / Sridhar Reddy&lt;/span&gt;&lt;br&gt;가장 먼저 예제를 실행하는 사람에게 티셔츠를 준다고 했는데요. 저는 어제 Hands-on-Lab에서 느린 인터넷 속도를 체험을 했기때문에 집에서 먼저 예제를 실행하고 왔습니다-_-; 그래서 제가 티셔츠를 받았습니다-_-; 티셔츠가 2개가 되버렸군요-_-; 어제도 받았는데 ^^ 암튼, JavaFX로 동영상 재생이 플렉스처럼 쉽습니다^^ 음악재생도 쉽구요. 여러가지 다양한 Effect들과 Draw기능들이 있는데, 주로 Visual에 맞춘 것 같습니다. 게다가 직관적인 코드를 중심으로 설계를 한 것 같습니다. 앞으로 어떻게 발전할지 기대됩니다 ^^&lt;br&gt;&lt;br&gt;밥은 뷔페로......-_-;&lt;br&gt;&lt;br&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;2. EJB 3.0 / Sridhar Reddy&lt;/span&gt;&lt;br&gt;뭔가 조정이 된 듯 합니다. 원래 AMD어쩌구 였는데, EJB3.0소개 시간으로 바뀐 것 같습니다. 어쨌든, EJB는 전혀 안해봐서 이해가 잘 안됐는데요. 말을 들어보니 그 전버전보다 라이트해지려고 노력을 많이 한 것 같습니다. POJO로 돌아가려고 한 것 같구요. Entity Bean을 애노테이션을 통해 구현으로 하구요. 여기에 포함되어 있는 JPA(Java Persistance Api)는 독립적으로 나와서 EJB없이 독립적으로도 사용이 가능하다는군요. 제가 예전에 올린 웹서비스예제를 보시면 ejb를 안쓰는데, JPA를 쓴 것을 볼 수 있습니다 ^^&lt;br&gt;Entity Bean에서 애노테이션을 통해 간소화 하려는 것을 느낄 수 있었습니다. @OneToMany, @ManyToOne 등의 직관적인 애노테이션들이 보이더군요. 시간나면 EJB도 해봐야겠습니다^^ 간단하다며 예제를 보여주긴 했는데, 전혀 간단해 보이지 않습니다-_-; 하긴 처음에 ejb의 대안으로 라이트웨이트형태로 나온 스프링도 엄청 복잡하다고 생각했으니 ^^&lt;br&gt;&lt;br&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;3. Comet 및 Ajax를 이용한 웹애플리케이션 개발 / Michael Li&lt;/span&gt;&lt;br&gt;오.....이거 물건입니다. Comet이라는 건데요. 기존 Ajax에서는 Client가 요청해서 데이터를 주고 받을 수 있는데요. 이 Comet는 다른 클라이언트에서 요청을 하면 이벤트를 발생시켜 현재 Connect된 클라이언트에 데이터를 줄 수 있다고 하는군요. 제가 설명을 그지같이 하는데, 즉 서버-클라이언트 모델 형태로 서버에서 push가 가능하다는 얘기입니다 ^^ &lt;br&gt;제가 예전에 Ajax를 이용해서 오목을 만들었는데, 이것을 구현할 때 다른쪽 클라이언트가 데이터를 받아야할 때에는 데이터가 있는지, 계속 Polling을 하면서 확인을 했었습니다. 이렇게 폴링을 안해도 된다는 얘기입니다. 발표하면서 아쉬웠던 점은 예제구현으로 하려고 하는데, 예제 구동이 안되었습니다. 제가 보기엔 넷빈즈 껐다 키면 될 듯 싶었는데-_-; 넷빈즈에서 가끔 글래스피쉬가 맛이 갈 때가 있더라구요-_-; (넷빈즈....버그가 엄청많고, 아직도 불안하다고 생각하는 1인입니다^^) 이것도 해봐야겠습니다^^&lt;br&gt;&lt;br style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;4. 기업환경 프레임워크에 필요한 것들 / 임수경&lt;/span&gt;&lt;br&gt;아....졸았습니다-_-; iBATIS는 ORM이 아니고 SQL Map인데 왜 ORM에 분류를 해놨을까요-_-; 그냥 기업환경에 프레임워크를 선택할 때 기준이나 뭐 그런 것을 설명한 것 같습니다. 기술적인 내용이 아니였습니다^^&lt;br&gt;&lt;br&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;5. EJB3, Spring, SEAM / Chuk-Munn Lee&lt;/span&gt;&lt;br&gt;EJB3을 얘기하고, 그의 대안이나 보완하는 기술인 Spring, SEAM에 대해서 설명했습니다. 둘중 더 나은 것을 얘기하는 것이 아니라, 이런 대안이 있다는 것을 알려주는 강의라고 하더군요. 사전에 재미있는 말은...EJB를 모르면 강의가 끝나도 뭔 개소리인지 모를 것이라고 하더군요. 맞습니다. 저도 한 절반만 이해한 듯 하군요.&lt;br&gt;우선 JPA, JSF 등 ejb에 대해서 소개를 하고(근데, 스프링과 상당히 흡사하다고 생각했습니다...하긴 대안으로 나온거니-_-) 플로우에 대해서 설명했습니다.&lt;br&gt;그리고, 해당 플로우에 Spring을 적용하면 어떻게 변경되는가를 설명하는 식으로 했습니다. 스프링의 장점인 DI, AOP, 용이한 테스트를 설명하고, 스프링 기술에 대해 간단히 설명했습니다. 최근에 나온 애노테이션 방식의 스프링의 쉬운 코딩도 보여주고요. @Autowired가 대규모의 문제가 있다는 의견이 있었다는 얘기도 해줬네요^^ 대규모가 되면 어떤 눔이 Autowired가 된지 모르니 그런거라는데...명시적인 네이밍룰을 잘 하면 될 것같은데....&lt;br&gt;그리고, Seam을 설명했는데, 이거 뭔소리인지 잘 모르겠습니다. Bijection이라는 개념을 설명했는데, 1번 Injection되면 다시 안되는데, 다시 Injection을 하는건지 거꾸로 인젝션을 하는건지 모르겠습니다.-_-; @In, @Out이라는 어노테이션으로 막 설명하던데 잘 모르겠어요--;&lt;br&gt;간단히 마지막에 정리를 하니, Spring은 J2EE의 대체모델이고, Seam은 J2EE에 붙여주는 개념이라고 하네요-_-; &lt;br&gt;이 분 &quot;뚜~ 뚜~&quot; 라는 말을 자주 써요 ^^&lt;br&gt;&lt;br&gt;아... 회사 휴가내고 선테크데이를 갔다왔습니다. 우선 유용한 기술들을 배워서 좋기는 하지만, 이 기술들을 써먹을 날은 먼 미래가 될 것 같네요. 좋은 기술들이 나와도 회사들은 그 기술을 사용함을 꺼려하죠. 기존에 쓰던 것에 익숙해 새로운 것을 써먹으려면 배우기도 귀찮고, 어떤 문제점이 발생할지도 모르기 때문인 것 같습니다.&lt;br&gt;하지만, 전 생각이 다릅니다. 새로운 기술은 기존 개발 시 문제가 됐던 것을 더욱 편하게 하기 위해서 나온 것이 많습니다. 그리고, 개발자들의 편의를 위한 기술들이 많죠. &lt;br&gt;스프링만 봐도 기존에 사용했던 J2EE의 복잡함을 간소화 하기 위해서 탄생했다고 들었습니다. Ajax 또한 Javascript를 활용하여 웹에서 구현하기 힘든 부분을 쉽게 구현하는데에 사용됩니다. 개발자들의 조금 더 노력하면 더욱 편하게 개발할 수 있을 것 같아요^^ &lt;br&gt;</description>
			<category>생활속에 나</category>
			<category>2DAY</category>
			<category>JAVA</category>
			<category>sun tech days</category>
			<category>선테크데이</category>
			<category>자바</category>
			<category>후기</category>
			<author>(머드초보)</author>
			<guid>http://mudchobo.tomeii.com/tt/349</guid>
			<comments>http://mudchobo.tomeii.com/tt/349#entry349comment</comments>
			<pubDate>Fri, 17 Oct 2008 23:18:24 +0900</pubDate>
		</item>
		<item>
			<title>[머드초보의 일상] SUN TECH DAYS 2008 1DAY 관람 후기~</title>
			<link>http://mudchobo.tomeii.com/tt/348</link>
			<description>사실 무료쿠폰이 없었으면 너무 비싸서 안갔을텐데, 무료쿠폰이 생겨서 갔습니다^^&lt;br&gt;유료행사인 만큼....사람이 많이 없겠지? 라는 생각에 갔는데, 사람이 뭐이리 많은지-_-;&lt;br&gt;마지막에 실습하는 사람 리스트보니, 약 70%가 무료쿠폰 관람자인듯?-_-;&lt;br&gt;&lt;br&gt;암튼, 처음에 등록하고, 들어가니 모래로 삽질하는(?) 영상을 보여주더군요. 멋있었습니다^^&lt;br&gt;아....엄청 신기했던 것이 발표자가 대부분 외국사람이다보니 저는 어떤식으로 진행되는지 궁금했습니다. 통역리시버를 주더군요. 예전에 Adobe RIA Camp에 갔을때는 번역하시는 분과 발표하시는 분이 교대로 말씀했는데 ^^&lt;br&gt;이 통역리시버 좋네요. 가끔 통역하시는 분이 당황하시는 소리도 참 듣기좋았(?)습니다.&lt;br&gt;&lt;br&gt;우선 SUN TECH DAYS 2008은 크게 3가지를 홍보하러 온 것 같습니다. Open Solaris, JavaFX, NetBeans...&lt;br&gt;처음 오픈솔라리스를 소개했는데요. 가장 멋진 것은, 비스타의 3D Flip보다 더 멋진 텝전환이였습니다-_-; 이것만 봐도 깔아보고 싶다는 생각이 들더군요^^ 예전에 VirtualBox로 깔아봤는데, 노트북 밀고 한번 설치해봐야겠습니다^^ 그리고, 가상화기술은 VirtualBox를 소개했는데요. 이건 제 블로그에 한번 소개를 했었죠^^ 이것만 있으면 다중환경에 테스팅이 용이하다는 것을 설명하더군요. 그리고, ZFS에 대해서 소개했는데, 뭔소리하는지 몰라서 패스-_-;&lt;br&gt;&lt;br&gt;그 다음 JavaFX! 제가 좀 관심을 가지고 있는데요.&lt;br&gt;넷빈즈의 특성인 드래그앤드랍코딩-_-을 이용해서 코딩하는데, 완전 신기하더군요. 문법이 이상해요^^ 매우 직관적인 문법을 표현하려고 애쓴 것 같아요. 순식간에 이미지를 조합하고, 알파효과와 Fade효과를 적용했어요. 문법은 AS3처럼 스크립트언어더군요. 그리고, 강조하는 것 중 하나가 Bind입니다. AS3에서도 [Bindable]이라는 엄청난 기능이 있죠. 이것과 같은 것입니다. 또 웹에서 보이기 위한 애플릿으로 실행이 가능한데요, 더 신기한 것은...만든 애플리케이션이 웹에서 보여지고, 웹에서 떼어지기도 합니다-_-; 공부해봐야겠군요^^ &lt;br&gt;&lt;br&gt;그....Rich Green씨의 말 중 가장 마음에 와닫는 것이....&#039;최고의 기술이 선택을 받는다&#039; 라는 말인데요. 정말 맞다고 생각해요 ^^ &lt;br&gt;&lt;br&gt;그 외, Zembly라는 이상한....것을 소개했는데. 뭐하는 건지 모르겠더군요-_-;&lt;br&gt;&lt;br&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;1. 첫번째 세션! JAVA SE 6 Update 10&lt;/span&gt;&lt;br&gt;사실....이것을 들으려고 한게 아니라 GlassFish를 들으려고 했는데...전 맨끝에 있는 곳에 1번세션인줄 알았어요-_-; 이런 트릭을 넘어가다니....ㅠ&lt;br&gt;암튼, u10버전에서 달라진 점을 소개했는데요. &lt;br&gt;첫번째로 ColdStart라는 것인데요. 메모리에 커널을 조금 올려서 빠르게 시작시킬 수 있는 기술이라는 것 같네요. &lt;br&gt;두번째로 Install Time을 줄이는 것이라고 하네요. 설치 시 자바커널만 설치하고, 나중에 실행에 필요한 라이브러리는 필요할 때 다운 받는 것이라고 하네요. 보니까, 커널만 설치 후, Swing애플리케이션을 실행했는데, 업데이트를 자동으로 하더니 라이브러리가 생기는 것을 보여주더라구요. 설치 시간을 줄이려고 이런 노력을 하다니...대단합니다.&lt;br&gt;세번째는 Deployment에 대해서 애기했는데, 뭔소리인지 모르겠더군요-_-; &lt;br&gt;그 외, 룩앤필을 개선하고, Direct3d를 쓸 수 있다고 한 것 같은데...암튼, 이것저것 얘기를 하시더군요.&lt;br&gt;&lt;br&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;2. 두번재 세션! MySQL 어쩌구~&lt;/span&gt;&lt;br&gt;대륙의 발표자인 듯 했습니다. (대세는 대륙시리즈-_-). 이 분 영어 잘 못하시는 듯 하던데-_-; 암튼, 버벅이고, 엄청 지루했습니다. 사실....잤습니다-_-; MySQL을 소개했는데, 깨어나보니 어떤 형이 있는지 소개를 하고 있더군요. 나쁜 스키마에 대해서 소개하고, SQL을 튜닝하고 적게 날리라는 당연한 말씀을 하셨습니다.&lt;br&gt;&lt;br&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;점심시간!&lt;/span&gt;&lt;br&gt;식사시간을.....뷔페음식이 떨어졌는지....저는 딴 곳에서 먹었습니다. 이동경로는 이렇습니다. 3층에서 -&amp;gt; B1층으로 가니 식권을 도림이라는 식권으로 나눠주더군요. 다시 1층으로 올라가니....도림은 32층에 있답니다-_-; 헉... 32층까지 언제가지 했는데, 미친 엘리베이터가 날아가더니 금방 가더군요. 코스요리인 듯한 중식을 먹었습니다. 역시 싸구려 입인 제게 안맞을 것 같았지만! 맛있었습니다 ^^ 생각해보니 이것도 대륙의 음식인가...-_-;&lt;br&gt;&lt;br&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;3. 세번째 세션! JavaFX 소개&lt;/span&gt;&lt;br&gt;식사가 늦게 끝나서 가니까 하고 있더군요. JavaFX에서 시퀀스문법이 있었는데, var days = [1..31]; 이렇게하면 days에 1부터 31까지 선언이 되는 문법을 보여주고 있었습니다. 그 외 직관적인 문법을 많이 보여주셨는데, &lt;br&gt;delete 1 from days -&amp;gt; [2..31] 같은 문법을 보여주더군요^^ &lt;br&gt;넷빈즈에서 자랑하는 드래그앤드랍 신공으로 작성하는....-_-; 여러 컴포넌트를 소개하고, 효과를 쉽게 줄 수 있는 장점, Bind에 대한 간략한 설명(AS3의 Bindable과 매우 흡사 ^^), 직관적인 애니메이션 효과 등을 보여줬습니다.&lt;br&gt;JavaFX의 목적은 쉬운 RIA(Rich Internet Application)을 만드는 것인데요. 애니메이션, 효과, 다양한 컴포넌트, 쉬운 비디오 오디오 재생 등의 장점을 얘기하는 것 보면 사실인 듯하네요. 한번 해보고 싶군요^^&lt;br&gt;더 재미있는 것은 JavaFX에서 자바호출을 할 수 있다고 하더군요. 어떤 식으로 될지는 모르겠군요^^&lt;br&gt;&lt;br&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;4. 네번째 세션! 강여사님의 자바 플랫폼의 신기능&lt;/span&gt;&lt;br&gt;저의 넷빈즈 사부님이신 강진영여사님께서 발표를 하신다고 해서 들으러 갔습니다^^ 넷빈즈를 입문할 때 강여사님의 카페자료에서 많은 도움이 되었죠^^ &lt;a href=&quot;http://cafe.naver.com/netbean&quot; target=&quot;_blank&quot;&gt;http://cafe.naver.com/netbean&lt;/a&gt;&lt;br&gt;너무 많은 것을 준비해와서 다 보여주지 못하고, 빠르게 진행하고 끝났네요. Java 7에 관한 내용이 주로 였는데요. 어노테이션 문법을 통해 널포인트에러를 컴파일상에서 잡을 수 있는 것이 참 신기했습니다.&lt;br&gt;@NotNull 이런 걸 썼던 것 같은데....-_-; &lt;br&gt;그 외, Java Module이라는 것을 설명했는데, 뭐지.....JAM파일로 만들고 막 그러던데...OSGi와 비슷한 개념이라고 얘기를 하더군요^^ &lt;br&gt;Closure라는 문법을 소개했는데, 대략 이런 식이였는데, { double x =&amp;gt; math.log(x) } =&amp;gt;이것을 말하는 것 같습니다. 이것도 잘 모르겠습니다-_-; &lt;br&gt;그 외, AWT 향상, Bean Binding, 리소스맵, Action 등을 소개했는데... 하나도 모르겠습니다-_-; 나중에 발표자료를 다시 검토해봐야겠습니다^^ 한가지 반가운 것이 있다면 직관적인 파일시스템API가 생기는 것입니다. 기존에 io패키지에 있던 것은 사용하려면 매우 힘들었죠^^ 암튼 반가운 소식이네요. 너무 빨리 얘기하시느라 잘 못들은 부분이 많이 있네요 ㅠ&lt;br&gt;&lt;br&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;5. Hands-on-Lab! Ajax 프레임워크를 이용하여 리치 웹 애플리케이션 구축하기(jMaki Framework)&lt;/span&gt;&lt;br&gt;최악이였습니다. 하필 15일 Hands-on-Lab은 통역이 없답니다 OTL..그리고, 인터넷속도가 모뎀속도보다 안나옵니다. 넷빈즈 깔고, jMaki프레임워크를 설치하는데, 백만년걸립니다. 5메가 밖에 안하는데....-_-;&lt;br&gt;암튼, 설치하는데에 시간 다잡아먹고, 겨우 설치를 해서 따라해봤습니다. &lt;br&gt;이 jMaki라는 것(제이마키라고 발음하더군요^^)이 미리 만들어 놓은 컴포넌트들을 쉽게 사용할 수 있는 프레임워크입니다. 넷빈즈의 특징인 드래그앤드랍으로 오른쪽 Palette에서 가져다 놓으면 자동으로 생성됩니다. 드래그앤드랍코딩!&lt;br&gt;&lt;br&gt;오늘 행사는 이렇게 끝이 났군요. 내일 JavaFX실습이 기대됩니다^^&lt;br&gt;</description>
			<category>생활속에 나</category>
			<category>2008</category>
			<category>netbeans</category>
			<category>sun tech days</category>
			<category>넷빈즈</category>
			<category>선테크데이</category>
			<category>후기</category>
			<author>(머드초보)</author>
			<guid>http://mudchobo.tomeii.com/tt/348</guid>
			<comments>http://mudchobo.tomeii.com/tt/348#entry348comment</comments>
			<pubDate>Wed, 15 Oct 2008 22:32:28 +0900</pubDate>
		</item>
		<item>
			<title>[Flex/AIR] RESTful을 이용한 Web Service 게시판 클라이언트.</title>
			<link>http://mudchobo.tomeii.com/tt/347</link>
			<description>플렉스로 만들기는 했지만, 뭐 모든 클라이언트 플랫폼에서 쉽게 만들 수 있습니다.&lt;br&gt;&lt;br&gt;요아래에 있는 RESTful Web Service를 구축하셨다면 그것을 이용한 클라이언트가 필요할 것입니다. &lt;br&gt;&lt;br&gt;게시판용 RESTful WebService만들기&lt;br&gt;&lt;a href=&quot;http://mudchobo.tomeii.com/tt/345&quot; target=&quot;_blank&quot;&gt;http://mudchobo.tomeii.com/tt/345&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://mudchobo.tomeii.com/tt/346&quot; target=&quot;_blank&quot;&gt;http://mudchobo.tomeii.com/tt/346&lt;/a&gt;&lt;br&gt;&lt;br&gt;그래서 구현해봤습니다.&lt;br&gt;우선 5가지 요청을 합니다.&lt;br&gt;&lt;br&gt;1. 게시물 리스트를 받아오는 것(GET)&lt;br&gt;2. 게시물 1개의 데이터를 받아오는 것(GET)&lt;br&gt;3. 게시물 쓰기(POST)&lt;br&gt;4. 게시물 삭제(DELETE)&lt;br&gt;5. 게시물 수정(PUT)&lt;br&gt;&lt;br&gt;핵심은 RESTful요청이 가능한 라이브러리입니다. 요아래를 참고하세요~&lt;br&gt;&lt;h2&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://mudchobo.tomeii.com/tt/343&quot; class=&quot;entry-title&quot; rel=&quot;bookmark&quot; title=&quot;[Flex/AIR] RESTful WebService를 위한 Flex RestService Library!&quot;&gt;[Flex/AIR] RESTful WebService를 위한 Flex RestService Library!&lt;/a&gt;&lt;/h2&gt;&lt;br&gt;이 라이브러리를 통해 RESTService요청을 합니다. (기존 Flex에 있는 HTTPService는 DELETE와 PUT이 안됩니다.)&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;&lt;br&gt;&amp;lt;rest:RESTService id=&quot;boardService&quot; method=&quot;GET&quot; &lt;br&gt;        rootURL=&quot;http://localhost/BoardWS/resources/wsboards/&quot; port=&quot;9080&quot; &lt;br&gt;        result=&quot;resultBoardHandler(event)&quot; fault=&quot;faultHandler(event)&quot;/&amp;gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;이런식으로 요청하면 되겠죠? ^^&lt;br&gt;&lt;br&gt;아래는 구현체 소스입니다.&lt;br&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a class=&quot;extensionIcon&quot; href=&quot;http://mudchobo.tomeii.com/tt/attachment/1381125974.zip&quot;&gt;&lt;img src=&quot;http://mudchobo.tomeii.com/tt/image/extension/zip.gif&quot; alt=&quot;&quot; /&gt; AirBoard.zip&lt;/a&gt;&lt;/div&gt;허접해서 도움이 될지는 모르겠지만....-_-; 어쨌든 저의 삽질의 결정체니....-_-;&lt;br&gt;&lt;br&gt;저 위에서 구현한 WebService를 띄워놓고, 이 클라이언트로 접속하면 잘 될겁니다.&lt;br&gt;&lt;br&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://mudchobo.tomeii.com/tt/attach/1/1372170096.jpg&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;516&quot; width=&quot;500&quot; /&gt;&lt;/div&gt;&lt;br&gt;</description>
			<category>플렉스(Flex)</category>
			<category>air</category>
			<category>flex</category>
			<category>RESTful</category>
			<category>WebService</category>
			<category>게시판</category>
			<category>에어</category>
			<category>웹서비스</category>
			<category>클라이언트</category>
			<category>플렉스</category>
			<author>(머드초보)</author>
			<guid>http://mudchobo.tomeii.com/tt/347</guid>
			<comments>http://mudchobo.tomeii.com/tt/347#entry347comment</comments>
			<pubDate>Wed, 15 Oct 2008 21:23:15 +0900</pubDate>
		</item>
		<item>
			<title>[JAVA] netbeans 초간단 게시판을 위한 RESTful WebService를 만들어봅시다-_-; (2)</title>
			<link>http://mudchobo.tomeii.com/tt/346</link>
			<description>전시간에 이어서.....&lt;br&gt;이걸 좀 수정해봅시다.&lt;br&gt;&lt;br&gt;우선 List를 받으려면 idx, 제목, 글쓴이의 정보가 필요합니다. 하지만, 기본적인 RESTful 웹서비스를 생성하게 되면 idx밖에 반환하지 않습니다. 이걸 고쳐봅시다.&lt;br&gt;&lt;br&gt;boarddb.converter패키지에 WsboardsConverter클래스가 있습니다.&lt;br&gt;클래스 위에 XmlRootElement(name = &quot;wsboards&quot;)라는 것이 붙어있습니다. 그렇습니다. 클래스형태가 바로 애노테이션 하나로 xml이 되버립니다-_-;(동작원리는 잘 모르겠네요-_-)&lt;br&gt;현재 데이터를 이런 식으로 반환합니다.&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;&amp;lt;wsboards uri=&quot;http://localhost:9080/BoardWS2/resources/wsboards/&quot;&amp;gt;&lt;br&gt;    &amp;lt;wsboardRef uri=&quot;http://localhost:9080/BoardWS2/resources/wsboards/33/&quot;&amp;gt;&lt;br&gt;        &amp;lt;idx&amp;gt;33&amp;lt;/idx&amp;gt;&lt;br&gt;    &amp;lt;/wsboardRef&amp;gt; &lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;여기에 subject와 writer를 추가해봅시다.&lt;br&gt;wsboardRef쪽에다가 추가를 해야하니, WsboardRefConverter클래스를 봅시다.&lt;br&gt;@XmlRootElement(name = &quot;wsboardRef&quot;)가 붙어있습니다. @XmlElement애노테이션을 붙이면 Element를 생성할 수 있습니다.&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;@XmlElement&lt;br&gt;public String getWriter() {&lt;br&gt;    return entity.getWriter();&lt;br&gt;}&lt;br&gt;@XmlElement&lt;br&gt;public String getSubject() {&lt;br&gt;    return entity.getSubject();&lt;br&gt;}&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;이렇게 2개를 추가했습니다. 그리고 게시판은 최근글이 마지막에 보여야하므로 쿼리를 수정합니다.&lt;br&gt;WsboardsResource클래스의 getEntities메소드를 봅시다.&lt;br&gt;쿼리를 아래와같이 수정합니다.&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;SELECT e FROM Wsboard e ORDER BY e.idx DESC&quot;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;다시 테스트를 해봅시다.&lt;br&gt;이제 이렇게 나올겁니다.&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;&amp;lt;wsboardRef uri=&quot;http://localhost:9080/BoardWS2/resources/wsboards/33/&quot;&amp;gt;&lt;br&gt;      &amp;lt;idx&amp;gt;33&amp;lt;/idx&amp;gt;&lt;br&gt;      &amp;lt;subject&amp;gt;111&amp;lt;/subject&amp;gt;&lt;br&gt;    &amp;lt;writer&amp;gt;11&amp;lt;/writer&amp;gt;&lt;br&gt;&amp;lt;/wsboardRef&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;와우 List는 이제 구현이 다되었습니다-_-;&lt;br&gt;&lt;br&gt;List를 가져올 때 총 게시물을 뽑아서 나중에 페이징을 할 때 사용해야합니다. 총게시물을 구하는 쿼리는&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;SELECT count(e) FROM Wsboard e&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;이렇게 하면 되더군요.&lt;br&gt;그럼 WsboardsResource.java파일의 @GET부분을 다음과 같이 바꿉시다.&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;try {&lt;br&gt;    Long count = (Long)PersistenceService.getInstance().createQuery(&quot;SELECT count(e) FROM Wsboard e&quot;).getSingleResult();&lt;br&gt;    return new WsboardsConverter(getEntities(start, max), context.getAbsolutePath(), count);&lt;br&gt;} finally {&lt;br&gt;    PersistenceService.getInstance().close();&lt;br&gt;}&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;카운트값을 xml에 표기를 해야하니 WsboardsConverter를 수정해야겠죠?&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;&lt;br&gt;private Long count; // 추가&lt;br&gt;public WsboardsConverter(Collection&amp;lt;Wsboard&amp;gt; entities, URI uri, Long count) {&lt;br&gt;        this.entities = entities;&lt;br&gt;        this.uri = uri;&lt;br&gt;        this.count = count;&lt;br&gt;    }&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;count변수를 추가하고, 생성자를 저렇게 생성하도록 바꿉니다.&lt;br&gt;속성값으로 count를 추가해야겠죠?&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;&lt;br&gt;@XmlAttribute(name = &quot;count&quot;)&lt;br&gt;    public String getCount() {&lt;br&gt;        return count.toString();&lt;br&gt;    }&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;&lt;br&gt;이제 1개데이터 가져오기를 구현해봅시다. 사실.....이건 다 되어있군요. Test RESTful Web Service에서 {idx}에서 해당 idx를 넣고 Test눌렀을 때 정상적으로 나오면 된겁니다 ^^&lt;br&gt;&lt;br&gt;이제 DELETE와 MODIFY 2개가 남았습니다.&lt;br&gt;DELETE를 구현하기 위해서는 db에 저장된 비밀번호와 입력한 비밀번호의 비교를 위해서 비밀번호를 받는 것을 하나 추가합시다. 저는 그냥 경로에 추가했습니다. 보안상 매우 안좋지만...-_-; 어떻게 하는지 몰라서-_-;&lt;br&gt;&lt;br&gt;WsboardsResource.java파일에서 @Path(&quot;{idx}/&quot;) -&amp;gt; @Path(&quot;{idx}/{pwd}&quot;)로 바꿨습니다.&lt;br&gt;그리고, 1개의 PathParam을 받았던 것을 pwd도 받게 바꿨습니다. 그리고 WsboardResource클래스에 pwd를 추가하고, 생성자를 수정했습니다. &lt;br&gt;&lt;br&gt;WsboardsResource.java파일&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;@Path(&quot;{idx}/{pwd}&quot;)&lt;br&gt;public WsboardResource getWsboardResource(@PathParam(&quot;idx&quot;)&lt;br&gt;Integer id, @PathParam(&quot;pwd&quot;) String pwd) {   &lt;br&gt;    return new WsboardResource(id, pwd, context);&lt;br&gt;}&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;WsboardResource.java파일&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;private String pwd; //추가&lt;br&gt;public WsboardResource(Integer id, String pwd, UriInfo context) {&lt;br&gt;    this.id = id;&lt;br&gt;    this.pwd = pwd;&lt;br&gt;    this.context = context;&lt;br&gt;} // 생성자 수정&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;이제 /wsboards/{idx}/{pwd}로 요청하면 idx와 pwd를 받을 수 있습니다.&lt;br&gt;&lt;br&gt;DELETE를 수정해봅시다.&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;@DELETE&lt;br&gt;public Response delete() {&lt;br&gt;    PersistenceService persistenceSvc = PersistenceService.getInstance();&lt;br&gt;    try {&lt;br&gt;        Wsboard entity = getEntity();&lt;br&gt;        if (entity.getPwd().equals(pwd)) {                &lt;br&gt;            persistenceSvc.beginTx();&lt;br&gt;            persistenceSvc.removeEntity(entity);&lt;br&gt;            persistenceSvc.commitTx();&lt;br&gt;            return Response.ok(&quot;success&quot;).build();&lt;br&gt;        }&lt;br&gt;    } finally {&lt;br&gt;        persistenceSvc.close();&lt;br&gt;    }&lt;br&gt;    return Response.ok(&quot;fail&quot;).build();&lt;br&gt;}&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;간단합니다. 받은 pwd랑 현재 입력된 pwd랑 같은지 확인 후에 맞으면 지우고 success를 리턴하고, 틀리면 fail을 리턴합니다. 테스트를 해볼 수 있는데요. 한번 지워보시면&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;Delete failed: Server returned --&amp;gt; Status: (200)
Response: {success}&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;저는 이런 메시지를 받습니다. Delete failed라고 뜨는데요. 그래도 success라는 응답을 받고 db에서 보면 지워졌을 겁니다. 보면 DELETE는 뭔가 리턴을 하면 안되는 듯 합니다. 암튼...잘 되니...-_-;&lt;br&gt;&lt;br&gt;이제 PUT을 수정해봅시다.&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;@PUT&lt;br&gt;@ConsumeMime({&quot;application/xml&quot;, &quot;application/json&quot;})&lt;br&gt;public Response put(WsboardConverter data) {&lt;br&gt;    PersistenceService persistenceSvc = PersistenceService.getInstance();&lt;br&gt;    try {&lt;br&gt;        Wsboard entity = getEntity();&lt;br&gt;        if (entity.getPwd().equals(pwd)) {&lt;br&gt;            persistenceSvc.beginTx();&lt;br&gt;            updateEntity(getEntity(), data.getEntity());&lt;br&gt;            persistenceSvc.commitTx();&lt;br&gt;            return Response.ok(&quot;success&quot;).build();&lt;br&gt;        }&lt;br&gt;    } finally {&lt;br&gt;        persistenceSvc.close();&lt;br&gt;    }&lt;br&gt;    return Response.ok(&quot;fail&quot;).build();&lt;br&gt;}&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;이것도 그냥 pwd랑 같으면 수정시키고 success를 리턴하고, 틀리면 수정 안시키고 fail을 리턴합니다.&lt;br&gt;테스트해봅시다. &lt;br&gt;테스트할 때 주의사항이....xml로 데이터를 던져야 하는데요. idx빼고 모든 값이 다 들어가야합니다.&lt;br&gt;PUT으로 맞춰놓고, idx랑 pwd를 쓴 다음 content란에 이렇게 씁니다.&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;&amp;lt;wsboard&amp;gt;&lt;br&gt;&amp;lt;pwd&amp;gt;1&amp;lt;/pwd&amp;gt;&lt;br&gt;&amp;lt;writer&amp;gt;11&amp;lt;/writer&amp;gt;&lt;br&gt;&amp;lt;subject&amp;gt;22&amp;lt;/subject&amp;gt;&lt;br&gt;&amp;lt;content&amp;gt;33&amp;lt;/content&amp;gt;&lt;br&gt;&amp;lt;/wsboard&amp;gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;idx빼고 다 넣어야합니다. 그러면 업데이트가 됩니다.&lt;br&gt;&lt;br&gt;아....다 됐네요. 아.....POST로 글쓰는 것을 빼먹고 안했는데요. 그냥 위처럼 XML로 넘겨주기만 하면 돼요 ^^&lt;br&gt;flex로 게시판 만드는 것도 해야하는데, 졸려서 내일로.....-_-;&lt;br&gt;&lt;br&gt;내일은 선테크데이2008가야지-_-;&lt;br&gt;&lt;br&gt;&lt;h2&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://mudchobo.tomeii.com/tt/345&quot; class=&quot;entry-title&quot; rel=&quot;bookmark&quot; title=&quot;[JAVA] netbeans 초간단 게시판을 위한 RESTful WebService를 만들어봅시다-_-; (2)&quot;&gt;[JAVA] netbeans 초간단 게시판을 위한 RESTful WebService를 만들어봅시다-_-; (1)&lt;/a&gt;&lt;/h2&gt;&lt;br&gt;&lt;h2&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://mudchobo.tomeii.com/tt/347&quot; class=&quot;entry-title&quot; rel=&quot;bookmark&quot; title=&quot;[Flex/AIR] RESTful을 이용한 Web Service 게시판 클라이언트.&quot;&gt;[Flex/AIR] RESTful을 이용한 Web Service 게시판 클라이언트.&lt;/a&gt;&lt;/h2&gt;</description>
			<category>자바(Java)</category>
			<category>netbeans</category>
			<category>RESTful</category>
			<category>web service</category>
			<category>게시판</category>
			<category>넷빈즈</category>
			<category>웹서비스</category>
			<category>자바</category>
			<author>(머드초보)</author>
			<guid>http://mudchobo.tomeii.com/tt/346</guid>
			<comments>http://mudchobo.tomeii.com/tt/346#entry346comment</comments>
			<pubDate>Tue, 14 Oct 2008 23:47:57 +0900</pubDate>
		</item>
		<item>
			<title>[JAVA] netbeans 초간단 게시판을 위한 RESTful WebService를 만들어봅시다-_-; (1)</title>
			<link>http://mudchobo.tomeii.com/tt/345</link>
			<description>우선 저도 잘 모르는 상태에서 삽질을 한거라....잘못된 점 있으면 바로바로 태클을 걸어주세요~&lt;br&gt;&lt;br&gt;우선 리스트데이터 가져오기.&lt;br&gt;resources/wsboards/ 형태로 요청을 하면 데이터를 가져옵니다.&lt;br&gt;WebService로 넘겨줘야할 값은 start값과 max값을 넘겨줘서 값을 가져옵니다. method는 GET입니다.&lt;br&gt;&lt;br&gt;1개 게시물데이터 가져오기.&lt;br&gt;이것은 url로 resource/wsboards/{idx}/ 하면 해당 idx에 맞는 데이터를 가져옵니다. method는 GET입니다.&lt;br&gt;&lt;br&gt;게시물 쓰기&lt;br&gt;resources/wsboards/로 xml형태의 글쓴이, 제목, 내용, 비밀번호 등의 정보를 보내줍니다. method는 POST입니다.&lt;br&gt;&lt;br&gt;게시물수정&lt;br&gt;resources/wsboards/{idx}/{pwd}로 xml형태의 글쓴이, 제목, 내용, 비밀번호 등의 정보를 보내서 {pwd}랑 맞으면 수정합니다. method는 PUT입니다.&lt;br&gt;&lt;br&gt;게시물삭제&lt;br&gt;resources/wsboards/{idx}/{pwd}로 요청해 pwd랑 서버에 있는 데이터pwd랑 비교해서 맞으면 삭제합니다. method는 DELETE입니다.&lt;br&gt;&lt;br&gt;요렇게 5가지만 있으면 되겠군요.&lt;br&gt;&lt;br&gt;저는 NetBeans6.1 + GlassFish V2 + MySQL 5.0에서 했습니다 ^^&lt;br&gt;우선 DB를 만듭시다. MySQL을 실행해서 해당 wsboard 테이블을 만듭니다.&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;DROP TABLE IF EXISTS `mudchobo`.`wsboard`;&lt;br&gt;CREATE TABLE  `mudchobo`.`wsboard` (&lt;br&gt;  `idx` int(10) unsigned NOT NULL auto_increment,&lt;br&gt;  `writer` varchar(10) NOT NULL default &#039;writer&#039;,&lt;br&gt;  `pwd` varchar(10) NOT NULL default &#039;pwd&#039;,&lt;br&gt;  `subject` varchar(50) NOT NULL default &#039;subject&#039;,&lt;br&gt;  `content` text,&lt;br&gt;  PRIMARY KEY  (`idx`)&lt;br&gt;) ENGINE=InnoDB AUTO_INCREMENT=56 DEFAULT CHARSET=utf8;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;&lt;br&gt;1. 넷빈즈6.1을 실행합니다.&lt;br&gt;&lt;br&gt;2. New Project -&amp;gt; Web -&amp;gt; Web Application -&amp;gt; Project Name은 BoardWS로.....&lt;br&gt;서버는 GlassFish V2로 합니다. (tomcat으로 해도 되는데, 테스트가 용이하지 않아요!). Finish!&lt;br&gt;&lt;br&gt;3. 해당프로젝트에 New -&amp;gt; Entity Classs from Database -&amp;gt; Data Source 선택, New Data Source -&amp;gt; JNDI Name에는 jndi/board, Database Connection에는 New Database Connection선택, Name을 MySQL로 바꿔주고, 알맞게 셋팅합니다 ^^ 그리고 확인을 누르면 해당 database에 있는 모든 테이블을 가져옵니다. 이중에 우리가 만든 wsboard테이블을 선택하고 add합니다 ^^&lt;br&gt;pakage는 boarddb라고 합시다. 아래 Create Persistence Unit를 선택해서 걍 다 디폴트로 주고 Create합니다. (이건 Unit을 자동으로 생성해주는 것 같더군요. 즉, 사용자가 직접 만들 수도 있죠. 아직 저는 JPA를 모르니..ㅠ) Finish!&lt;br&gt;&lt;br&gt;해당 객체가 만들어졌습니다. 소스를 보게 되면 &lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;@Id&lt;br&gt;@Column(name = &quot;idx&quot;, nullable = false)&lt;br&gt;private Integer idx;&lt;br&gt;@Column(name = &quot;writer&quot;, nullable = false)&lt;br&gt;private String writer;&lt;br&gt;@Column(name = &quot;pwd&quot;, nullable = false)&lt;br&gt;private String pwd;&lt;br&gt;@Column(name = &quot;subject&quot;, nullable = false)&lt;br&gt;private String subject;&lt;br&gt;@Lob&lt;br&gt;@Column(name = &quot;content&quot;)&lt;br&gt;private String content;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;속성값을 Column이랑 애노테이션을 이용해서 자동으로 매핑해주는군요. MySQL의 text타입은 Lob(Large Object랍니다)으로 되는군요^^&lt;br&gt;이제 이것을 이용한 웹서비스를 만들어봅시다.&lt;br&gt;&lt;br&gt;4. 프로젝트에 New -&amp;gt; RESTful Web Services from Entity Classes선택. 방금 추가했던 Wsboard클래스가 있습니다. add하고, Package만 boarddb.service, boarddb.converter로 바꾸고 Finish.&lt;br&gt;&lt;br&gt;service클래스는 잘 보면 PersistenceService랑 WsboardResource, WsboardsResource 3가지가 있네요. PersistenceService는 말그대로 Persistence단에서 하는 db관련된 내용이구요. entity를 가져오거나, 추가, 삭제, 수정 등을 할 수 있는 클래스입니다. &lt;br&gt;WsboardsResource는 @Path(&quot;/wsboards/&quot;)가 클래스 앞에 붙어있는데요. 아마 저 해당 URL로 접근하면 이 클래스가 대신하는 것 같습니다. 이 클래스 메소드에 @GET, @POST가 있는데, 저 url로 저 메소드를 접근하게 되면 해당 메소드를 실행하는 역할을 하게 됩니다. Wsboard도 위와 비슷합니다 ^^&lt;br&gt;&lt;br&gt;5. 프로젝트메뉴에 Test RESTful Web Services를 선택하면 브라우저가 뜨고, 테스트를 할 수 있습니다. &lt;br&gt;&lt;br&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://mudchobo.tomeii.com/tt/attach/1/1114479753.jpg&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;430&quot; width=&quot;462&quot; /&gt;&lt;/div&gt;&lt;br&gt;글이 길어지네-_-; 해당 웹서비스 수정은 다음시간에.....-_-;&lt;br&gt;&lt;br&gt;&lt;h2&gt;&lt;a target=&quot;&quot; href=&quot;http://mudchobo.tomeii.com/tt/346&quot; class=&quot;entry-title&quot; rel=&quot;bookmark&quot; title=&quot;[JAVA] netbeans 초간단 게시판을 위한 RESTful WebService를 만들어봅시다-_-; (2)&quot;&gt;[JAVA] netbeans 초간단 게시판을 위한 RESTful WebService를 만들어봅시다-_-; (2)&lt;/a&gt;&lt;/h2&gt;&lt;br&gt;&lt;h2&gt;&lt;a href=&quot;../../../347&quot; class=&quot;entry-title&quot; rel=&quot;bookmark&quot; title=&quot;[Flex/AIR] RESTful을 이용한 Web Service 게시판 클라이언트.&quot;&gt;[Flex/AIR] RESTful을 이용한 Web Service 게시판 클라이언트.&lt;/a&gt;&lt;/h2&gt;&lt;br&gt;참고자료 &lt;a href=&quot;http://www.netbeans.org/kb/60/websvc/rest-mysql.html&quot; target=&quot;_blank&quot;&gt;http://www.netbeans.org/kb/60/websvc/rest-mysql.html&lt;/a&gt;&lt;br&gt;</description>
			<category>자바(Java)</category>
			<category>netbeans</category>
			<category>RESTful</category>
			<category>web service</category>
			<category>게시판</category>
			<category>넷빈즈</category>
			<category>웹서비스</category>
			<category>자바</category>
			<author>(머드초보)</author>
			<guid>http://mudchobo.tomeii.com/tt/345</guid>
			<comments>http://mudchobo.tomeii.com/tt/345#entry345comment</comments>
			<pubDate>Tue, 14 Oct 2008 23:08:16 +0900</pubDate>
		</item>
		<item>
			<title>[유틸리티] 위젯을 퍼갈 수 있는 위자드팩토리 런칭</title>
			<link>http://mudchobo.tomeii.com/tt/344</link>
			<description>항상 신기한 것으로 다가오는....위자드웍스의 또 다른 서비스를 런칭했네요.&lt;br&gt;&lt;br&gt;위자드팩토리 주소입니다.&lt;br&gt;
&lt;a href=&quot;http://www.wzdfactory.com/&quot; target=&quot;_blank&quot;&gt;http://www.wzdfactory.com/&lt;/a&gt;&lt;br&gt;&lt;br&gt;예전에 다음에서 런칭한 위젯뱅크와 비슷한데요. &lt;br&gt;위젯뱅크와 비교를 해서 보면 틀린 점이 있다면 해당 위젯의 크기를 조절할 수 있습니다-_-; 게다가 이동도 할 수 있습니다. 또, 블로그의 달린 모습을 볼 수 있는데.....&lt;br&gt;블로그를 그 미리보기 바탕화면에 띄워줘서 해당 위젯을 거기다가 그냥 위치 시켜보는겁니다! 참 기발하군요^^&lt;br&gt;&lt;br&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://mudchobo.tomeii.com/tt/attach/1/1308638816.jpg&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;431&quot; width=&quot;500&quot; /&gt;&lt;p class=&quot;cap1&quot;&gt;다음 검색기를 선택했는데....음...미리보기를 한 것 같지 않아요-_-; 진짜 미리보기를 했었으면 하는데 ^^&lt;/p&gt;&lt;/div&gt;또 해당 위젯마다 태그를 가지고 있어서 특정 역할을 하는 것 끼리 검색을 할 수 있더군요. 관심위젯으로 등록할 수도 있고, 선택을 해서 설치를 하게 되면 코드를 보여주는데, 이건 전에도 말했듯이 매우 쉽게 블로그에 등록할 수 있게 플러그인을 만들었으면 하는 생각이 들었습니다. 하지만-_-; 이렇게 하게 되면 위자드팩토리 사이트가 무의미해질 것 같아서......&lt;br&gt;&lt;br&gt;그냥 퍼가기만 하고 나의 위젯정보를 보니.....사용하고 있는 위젯에 추가가 되어있네요.&lt;br&gt;&lt;br&gt;근데...이거 왜 추천블로그를 위젯으로 만들었는지 모르겠네요. 별로 안 쓸 것 같은데-_-;&lt;br&gt;그리고, 그냥 일반 카테고리에서도 추천블로그가 나오는데, 이거 안나오게 하는 게 더 나을 듯 하네요. 공부/퀴즈 카테고리를 선택했는데, 추천블로그도 몇 개 같이 나옵니다. 추천블로그는 추천블로그 카테고리에만 나와야할 듯한데, 버그인지 모르겠네요 ^^&lt;br&gt;&lt;br&gt;그리고, 모바일과 연동이 된다고 하네요. 모바일 연동은 아직 안되나봐요. 찾아봐도 없네요 ^^&lt;br&gt;&lt;br&gt;다음위젯뱅크에는 게임도 있는데, 여기에는 없네요^^ 미술작품 감상 위젯도 있던데-_-;&lt;br&gt;둘 다 아직 초기 단계인데 얼른 빨리 성장했으면 좋겠네요. 블로그에 달고 싶을 만한 좋은 위젯을 만들었으면 좋겠습니다 ^^ 11월에 오픈하는 위젯만들기(개발자다보니 개발에 관심이 가는군요^^)에 어떤 기능이 제공되는지 궁금하네요^^&lt;br&gt;</description>
			<category>유틸리티 활용하기</category>
			<category>widget</category>
			<category>wzdfactory</category>
			<category>런칭</category>
			<category>위자드팩토리</category>
			<category>위젯</category>
			<category>유틸리티</category>
			<author>(머드초보)</author>
			<guid>http://mudchobo.tomeii.com/tt/344</guid>
			<comments>http://mudchobo.tomeii.com/tt/344#entry344comment</comments>
			<pubDate>Tue, 14 Oct 2008 15:36:21 +0900</pubDate>
		</item>
		<item>
			<title>[Flex/AIR] RESTful WebService를 위한 Flex RestService Library!</title>
			<link>http://mudchobo.tomeii.com/tt/343</link>
			<description>우선 RESTFul로 구현된 WebService를 Flex에서 호출하기 위해서는 클라이언트에서 method방식이 GET, POST, DELETE, PUT을 지원을 해야합니다. 근데, 제가 RESTful WebService를 만들었는데요. 만들어놓고, 자체 GlassFish에서 제공하는 RESTful WebService Test로는 무쟈게 잘 돌아갔습니다.&lt;br&gt;근데, Flex에서 제공하는 HTTPService를 이용해서 method는 DELETE로 놓은다음에 http요청을 해봤습니다. 이게 왠걸......POST로 요청이 되는 듯해서 데이터를 가져오고 있습니다-_-; 지워야하는데!&lt;br&gt;&lt;br&gt;그래서 검색을 해보니.......&lt;br&gt;&lt;a href=&quot;http://verveguy.blogspot.com/2008/07/truth-about-flex-httpservice.html&quot; target=&quot;_blank&quot;&gt;http://verveguy.blogspot.com/2008/07/truth-about-flex-httpservice.html&lt;/a&gt;&lt;br&gt;저의 짧은 영어실력으로 보니.......&lt;br&gt;&lt;blockquote&gt;4/ All HTTP PUT and HTTP DELETE requests are turned into POST requests.
This appears to be a browser limitation that the Flash player is stuck
with.&lt;/blockquote&gt;라고 되어있군요. PUT과 DELETE는 POST로 요청이 된다고 하는 것 같습니다. 플래쉬플레이어가 브라우저 제한에 뭐 걸린 것으로 보인다고 말하는데요. 해석이 잘 안되네요-_-;&lt;br&gt;&lt;br&gt;그래서! 검색해본 결과 REST요청을 위한 라이브러리를 누가 만들었더군요. 대단합니다 ^^ 어차피 HTTP요청도 해당 포트로 뭐 데이터를 주고 받는 것이다 보니, 이것을 소켓으로 구현을 했더군요.&lt;br&gt;&lt;br&gt;&lt;a style=&quot;font-weight: bold;&quot; aiotarget=&quot;true&quot; aiotitle=&quot;http://lab.arc90.com/2008/03/restservice.php&quot; href=&quot;http://lab.arc90.com/2008/03/restservice.php&quot; target=&quot;_blank&quot;&gt;http://lab.arc90.com/2008/03/restservice.php&lt;/a&gt;&lt;br&gt;&lt;br&gt;기존 HTTPService랑 틀린 것이...얘는 소켓을 통해서 쏘기 때문에 포트를 지정해줘야합니다. 그리고 arc90에서 만든 ResultEvent랑 FaultEvent를 사용해야합니다.&lt;br&gt;&lt;br&gt;서버측 코드를 보면 &lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;&lt;br&gt;@DELETE&lt;br&gt;    public Response delete() {&lt;br&gt;        PersistenceService persistenceSvc = PersistenceService.getInstance();&lt;br&gt;        try {&lt;br&gt;            Wsboard entity = getEntity();&lt;br&gt;            if (entity.getPwd().equals(pwd))&lt;br&gt;            {&lt;br&gt;                persistenceSvc.beginTx();&lt;br&gt;                persistenceSvc.removeEntity(entity);&lt;br&gt;                persistenceSvc.commitTx();&lt;br&gt;                &lt;br&gt;                return Response.ok(&quot;success&quot;).build();&lt;br&gt;            }&lt;br&gt;        } finally {&lt;br&gt;            persistenceSvc.close();&lt;br&gt;        }&lt;br&gt;        return Response.ok(&quot;fail&quot;).build();&lt;br&gt;    }&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;그냥 단순히 비밀번호가 같으면 지워서 응답을 success로 주고, 틀리면 fail로 줍니다.&lt;br&gt;&lt;br&gt;이제 플렉스에서 봅시다.&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;&lt;br&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;&lt;br&gt;&amp;lt;mx:WindowedApplication xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot; &lt;br&gt;    layout=&quot;absolute&quot;&lt;br&gt;    creationComplete=&quot;init()&quot; xmlns:rest=&quot;com.arc90.rpc.rest.*&quot;&amp;gt;&lt;br&gt;    &lt;br&gt;    &amp;lt;mx:Script&amp;gt;&lt;br&gt;        &amp;lt;![CDATA[&lt;br&gt;            import com.arc90.rpc.events.FaultEvent;&lt;br&gt;            import com.arc90.rpc.events.ResultEvent;&lt;br&gt;            import mx.controls.Alert;&lt;br&gt;            &lt;br&gt;            private function init():void&lt;br&gt;            {        &lt;br&gt;                service.send();                &lt;br&gt;            }&lt;br&gt;&lt;br&gt;            private function result(event:ResultEvent):void&lt;br&gt;            {&lt;br&gt;                Alert.show(event.result.toString());&lt;br&gt;            }    &lt;br&gt;            &lt;br&gt;            private function fault(event:FaultEvent):void&lt;br&gt;            {&lt;br&gt;                Alert.show(event.fault.toString());&lt;br&gt;            }        &lt;br&gt;        ]]&amp;gt;&lt;br&gt;    &amp;lt;/mx:Script&amp;gt;&lt;br&gt;    &amp;lt;rest:RESTService id=&quot;service&quot;&lt;br&gt;        port=&quot;9080&quot; url=&quot;http://localhost/BoardWS/resources/wsboards/22/1&quot;&lt;br&gt;        result=&quot;result(event)&quot; fault=&quot;fault(event)&quot; method=&quot;DELETE&quot;&amp;gt;&lt;br&gt;    &amp;lt;/rest:RESTService&amp;gt;&lt;br&gt;    &lt;br&gt;&amp;lt;/mx:WindowedApplication&amp;gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;포트를 port라고 해서 따로 지정해줍니다.&lt;br&gt;저 웹서비스가 {idx}/{pwd} 형식의 url을 요청합니다. DB에는 22번의 idx를 가지고 pwd가 1인 데이터가 있습니다. 저렇게 요청하면 지워집니다.&lt;br&gt;&lt;br&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://mudchobo.tomeii.com/tt/attach/1/1231866238.jpg&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;402&quot; width=&quot;508&quot; /&gt;&lt;/div&gt;ps. 정말 적절하지 못한 웹서비스군-_-;&lt;br&gt;</description>
			<category>플렉스(Flex)</category>
			<category>air</category>
			<category>flex</category>
			<category>library</category>
			<category>rest</category>
			<category>RESTful</category>
			<category>라이브러리</category>
			<category>에어</category>
			<category>플렉스</category>
			<author>(머드초보)</author>
			<guid>http://mudchobo.tomeii.com/tt/343</guid>
			<comments>http://mudchobo.tomeii.com/tt/343#entry343comment</comments>
			<pubDate>Mon, 13 Oct 2008 09:01:24 +0900</pubDate>
		</item>
		<item>
			<title>[머드초보의 일상] 제9회 한국스프링사용자모임 세미나 후기</title>
			<link>http://mudchobo.tomeii.com/tt/342</link>
			<description>아...저번 회 때에는 박재성씨가 준비한 세미나를 들어서 그 때에는 스프링에 관한 것 보다 그냥 협업프로세스를 도울 만한 유용한 프로그램이나 작업 방법을 소개하는 자리였습니다. 그래서 스프링에 관해서는 많이 듣지 못했는데요.&lt;br&gt;&lt;br&gt;오늘 세미나는 우선 2가지 세션을 못들은 것이 좀 아쉽구요. 그래도 백기선씨의 Spring AOP가 도움이 많이 되었구요. 박찬욱씨의 그 괴물같이 손이 보이지 않을 정도로 하는 라이브로 코딩하는 실력을 보면서 감탄사를 내뱉느라 제대로 못 듣기는 했지만, 꽤나 유용한 시간이였습니다. 그리고 스프링 보안인 Spring Security에 관한 설명도 들었는데....마침 이 시간이 졸려서-_- 잤습니다(발표자님께는 죄송하지만ㅠ)&lt;br&gt;&lt;br&gt;우선 11시에 도착을 했는데, 20분부터 한다고 공지가 되어있더라구요. &lt;br&gt;&lt;br&gt;1. 박찬욱님의 Refactoring JDBC Programming&lt;br&gt;우선 기존 JDBC를 접근하는 방식을 스프링 jdbc templete을 라이브로-_-; 만들어 보는 과정을 보게 되었습니다. 이건 뭐 감탄사밖에 안 나오는 군요. 이런 것을 한번도 보지 못한 저로썬 그냥 놀랄 따름입니다-_-; 보통 이클립스의 리펙토리 기능은 잘 쓰기 힘든데, 저걸 저렇게 활용하는 사람도 있구나 라는 생각이 드는군요 ^^&lt;br&gt;기존에 JDBC는 Try Catch Finally Try Catch의 반복으로 이루어져있죠. 그래서 그걸 템플릿으로 만들어서 중복코드에 대한 제거를 하고, 바뀌는 부분만 비교해서 잘 보여주셔서 이해가 매우 빨랐습니다. (하지만....휙휙~지나가는 화면들..OTL...)&lt;br&gt;사실 기존에 DB연동 부분은 그냥 항상 사용하기만 해서 내부 구조를 볼 겨를이 없었거든요. 실제 구현체를 보니 신기할 따름이군요. 그냥 queryForObject, queryForList, update, delete, insert 등의 메소드를 가져다가 쓰기만 했지, 어떻게 돌아가는지 몰랐는데, 이제 보니 확실히는 아니지만, 어느정도 알겠네요. 인터페이스를 활용하여 Strategy패턴을 이용해서 하는 것이더군요. 이제부터 디자인패턴을 공부해야겠다는 생각이 좀 드네요-_-; 사실 Head First Design Patterns책이 있는데...왠지 펼치기 싫습니다만, 이제 펼쳐야겠습니다 ㅠ&lt;br&gt;아....그리고, 저도 이클립스 단축키를 좀 외워야겠습니다-_-; 저도 이제부터 간지코딩을...-_-;&lt;br&gt;&lt;br&gt;2. 박현준님의 Spring Security&lt;br&gt;헉.....순간 졸다가 기절했습니다-_-; Spring Security를 사용 안해봐서 인지 모르겠지만, 내용도 너무 어렵고ㅠ 졸리고 해서....ㅠ 자다가 일어나니 그 데모를 좀 보여줬는데, 대충 내용을 보니, 그....로그인 프로세스를 데모로 보여준 것 같습니다. 인증을 한 페이지를 보여주고 막 그랬던 것 같은데.....사실 잘 모르겠군요 ㅠ&lt;br&gt;얼마전 OAuth를 공부한 적이 있었는데, Spring Security에서도 지원을 한다고 한 것이 생각나는군요. 갑자기 얘기가 또 새네-_-; 암튼 보안쪽도 공부를 해봐야겠습니다 ㅠㅠ&lt;br&gt;&lt;br&gt;3. 백기선님의 Spring AOP&lt;br&gt;우선 AOP에 대한 개념을 쉽게 설명해주어서 좋았구요. 하지만, 제 친구는 AOP에 대한 개념을 처음 접하는데, 용어가 너무 어렵다고 하더군요. 저도 친구들이랑 AOP스터디를 했을 때 advice, advisor, pointcut, joinpoint 등의 용어가 처음에는 헷깔렸는데, 그런 용어를 통해 친구가 그냥 처음에 들으려니까 어려운 부분이 있었나 봅니다. 암튼, AOP에 대한 EMAIL예제를 보여주시고, 1.X대 방식, 2.0.X방식, 2.5방식(어노테이션)을 보여주시고 ^^ 예전에 최범균님의 스프링2.5프로그래밍이라는 책에서 나온 예제가 있는데, 그것이 생각나더군요. 거기에서도 다 나와있었어요. 1.X대 방식은 어떤 인터페이스를 구현하는 것으로 나오고 ^^ 2.0.X는 POJO로 하고, XML설정파일에서 포인트컷을 정의를 해주는 방식이죠. 2.5의 어노테이션은 마법이죠 ^^&lt;br&gt;아...그리고 신기했던 것이 저도 @AspectJ 붙이면 컴포넌트 스캔이 안되는데, 그걸 포함시킬 수 있더군요.&lt;br&gt;저는 그냥 &lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;&amp;lt;bean class=&quot;~~~~.AnnotMyAop&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;그냥 선언해줬는데-_-; 컴포넌트 스캔에 AspectJ클래스를 넣으면 되는군요. &lt;br&gt;그리고, Spring AOP와 AspectJ를 비교하셨는데, 역시 AspectJ는 안써봐서 모르겠군요-_-; &lt;br&gt;또 하이버네이트는 제가 안해봐서 몰르겠는데, 이거 db를 객체랑 매핑해주는 거로 알고 있는데, add를 하면 insert를 하는건데, 이거 지가 필요하면 하는 거군요. 그래서 jdbctemplete이랑 같이 쓰면 데이터를 가져오면 insert가 안되서 문제가 발생하는데, 이걸 AOP로 해결할 수 있더군요. AOP를 예전에 회사에 적용해보려고 하다가 실패를 했던 기억이 있어서-_-; 다시 한번 해봐야겠습니다-_-;&lt;br&gt;&lt;br&gt;근데, 이번 세미나를 마지막으로 무료세미나를 마친다고 한 것 같더라구요. 이제 돈내고 들어야하는건가.... &lt;br&gt;암튼, 어느 정도 좋은 정보를 얻을 수 있었고, 도움이 많이 되었습니다. 스프링에 대해서 공부를 안한지 쫌 됐는데, 다시 한번 되새기게 만들어주네요. 우선 @MVC관련된 강의를 듣지 못해서 좀 아쉽구요. 저도 열심히 공부를 해야겠다는 생각이 드는군요. &lt;br&gt;&lt;br&gt;이런 모임이 자주 있어서 좋은 정보를 공유했으면 하는데, 아직도 스프링 자료는 외국에서 많이 찾아야해요 ㅠ&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
			<category>생활속에 나</category>
			<category>KSUG</category>
			<category>spring</category>
			<category>스프링</category>
			<category>한국스프링사용자모임</category>
			<category>후기</category>
			<author>(머드초보)</author>
			<guid>http://mudchobo.tomeii.com/tt/342</guid>
			<comments>http://mudchobo.tomeii.com/tt/342#entry342comment</comments>
			<pubDate>Mon, 13 Oct 2008 00:01:07 +0900</pubDate>
		</item>
		<item>
			<title>[Javascript유틸리티] 매우 심플한 Javascript Calendar(Date Picker)</title>
			<link>http://mudchobo.tomeii.com/tt/341</link>
			<description>주소는 여기입니다.&lt;br&gt;&lt;a href=&quot;http://www.calendarview.org/&quot; target=&quot;_blank&quot;&gt;http://www.calendarview.org/&lt;/a&gt;&lt;br&gt;&lt;br&gt;일하다가 데이트픽커가 좀 필요해서 만들기 귀찮고 해서-_-; 찾아보던중-_-;&lt;br&gt;매우 심플한 Date Picker를 발견했습니다.&lt;br&gt;&lt;br&gt;Prototype과 Script aculous기반의 Calendar입니다.&lt;br&gt;Prototype은 이곳에서 다운.&lt;br&gt;&lt;a href=&quot;http://www.prototypejs.org/download&quot; target=&quot;_blank&quot;&gt;http://www.prototypejs.org/download&lt;/a&gt;&lt;br&gt;Script Aculous는 이곳에서 다운(필요한 것은 builder.js파일 1개뿐)&lt;br&gt;&lt;a href=&quot;http://script.aculo.us/downloads&quot; target=&quot;_blank&quot;&gt;http://script.aculo.us/downloads&lt;/a&gt;&lt;br&gt;&lt;br&gt;릴리즈 히스토리를 보게 되면 더이상 업데이트가 되지 않고 있습니다-_-;&lt;br&gt;&lt;br&gt;암튼 한줄이면 바로 생성할 수 있습니다.&lt;br&gt;&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;&lt;br&gt;Calendar.setup({&lt;br&gt;    dateField      : &#039;fromdate&#039;,&lt;br&gt;    triggerElement : &#039;fromDateButton&#039;&lt;br&gt;});&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;triggerElement에 버튼 id를 넣어주면 버튼을 클릭했을 때 Calendar가 표시됩니다.&lt;br&gt;dateField는 Calendar에서 날짜를 클릭하면 해당 dateField에 YYYY-MM-DD형식으로 표시해줍니다.&lt;br&gt;</description>
			<category>자바스크립트(Javascript)</category>
			<category>calendar</category>
			<category>calendarview</category>
			<category>date picker</category>
			<category>javascript</category>
			<category>유틸리티</category>
			<category>자바스크립트</category>
			<author>(머드초보)</author>
			<guid>http://mudchobo.tomeii.com/tt/341</guid>
			<comments>http://mudchobo.tomeii.com/tt/341#entry341comment</comments>
			<pubDate>Thu, 09 Oct 2008 21:48:18 +0900</pubDate>
		</item>
		<item>
			<title>[M.C the MAX] 엠씨더맥스 6집 구매! 케이스가 클래식으로 돌아갔군요.</title>
			<link>http://mudchobo.tomeii.com/tt/340</link>
			<description>저번 5집은 마치 게임팩을 산 것 같은 느낌이였습니다만-_-;&lt;br&gt;이번에는 클래식 형태로 돌아갔군요^^ 5집은 CD2장이다보니 그렇게 구성한 것 같군요.&lt;br&gt;&lt;br&gt;전체적으로 노래를 들어보니 뭐 나쁘지 않습니다. 덤으로 안에 콘서트 10%할인 쿠폰이 들어있군요^^&lt;br&gt;콘서트는 가고 싶지만, 최근 Wii때문에 지출이 많아져서-_-; 다음으로 미루어야겠습니다 ㅠ(아마도 엠씨더맥스가 군대 갔다오고 난 후 쯤?-_-)&lt;br&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://mudchobo.tomeii.com/tt/attach/1/1009887280.jpg&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;375&quot; width=&quot;500&quot; /&gt;&lt;/div&gt;&lt;br&gt;음악은 항상 엠씨더맥스 스러운 음악이 들어있구요. 신나는 음악도 많고, 시원한 가창력을 보인 음악도 있네요^^&lt;br&gt;5집과 6집은 참 만족스러운 수준이에요. 참고로 전 4집을 제일 싫어해요-_-; 발라드로 도배가 된 4집은 많이 듣지도 않았어요. 한개의 앨범을 듣는데, 계속 발라드만 나온다면 계속 기분이 우울해질 것 같아요-_-; 신나는 음악도 가끔 포함이 되어 있어야죠 ^^&lt;br&gt;&lt;br&gt;01. 나를 보낸다&lt;br&gt;이 노래를 들으면 가사에 &#039;다&#039;로 끝나는 게 많아서 에반의 어떤 노래가 생각납니다-_-; 검색해보니 &#039;남자도 어쩔 수 없다&#039; 인것 같군요. 같은 사람이 작곡했나-_-; 암튼, 군대에서 다나까로 끝나야하니....(뭔 개소리지-_-)&lt;br&gt;듣다보면 가사가 사랑하는 사람을 떠나보내고, 나까지 보내는 것(?) 같습니다-_-;&lt;br&gt;&lt;br&gt;02. 눈물은 모르게&lt;br&gt;작곡가 분이 전형적인 엠씨더맥스 타이틀곡을 노리고 아마 곡을 준 것 같습니다. 정말 전형적이여서 별 감상평이 없습니다-_-; 이제 막 헷깔립니다-_-; 그 노래가 그노래 같습니다. 작곡가가 신인수씨로 되어있는데, 이 분 혹시.. 신화1집에서 &#039;키가 자랐어요&#039;를 작곡하신 분인가요? 그 노래 좋아했는데-_-;&lt;br&gt;&lt;br&gt;03. 심가&lt;br&gt;매우 발랄한 노래입니다. 하지만, 가사에서는 여자를 떠나보내고 오라고 하는 것 같은데, 음악이 너무 발랄하고 신이나는데-_-; come back home이 아니라 come back to me라고 외치는군요. &lt;br&gt;&lt;br&gt;04. 미로&lt;br&gt;시작부터 심각함이 느껴지는 노래입니다. 그냥 이별하고 잊으려는 과정을 가사로 쓴 것 같습니다. 아 심각하고 무거운 노래군요.&lt;br&gt;&lt;br&gt;05. Listen&lt;br&gt;이 노래가 제일 맘에 듭니다. 신나면서 후렴구에서 뭘 들어달라고 외칩니다. 계속 Listen을 외칩니다-_-; Listen하면 오라클에 있는 lsnrctl start 명령어가.....아...또 삼천포로 빠지네. 가사는 뭔 내용인지 모르겠지만, 그냥 신나는 노래입니다 ^^ &lt;br&gt;&lt;br&gt;06. Closing Time&lt;br&gt;네이버에서 Closing Time을 쳐봤습니다. &lt;br&gt;&lt;strong&gt;closing time&lt;/strong&gt;&lt;br&gt;
		cl&lt;img src=&quot;http://sstatic.naver.com/endic/2005/images/font/syn/d0d4.gif&quot; align=&quot;absmiddle&quot;&gt;sing t&lt;img src=&quot;http://sstatic.naver.com/endic/2005/images/font/syn/d0d0.gif&quot; align=&quot;absmiddle&quot;&gt;me 폐점[종업] 시간	
		
		&lt;br&gt;그렇습니다. 폐점시간이군요. 그대의 마음이 폐점했어요. 그래서 시간을 되돌리고 싶은 마음을 노래했습니다. 마치 6시가 넘어가면서 돈을 뽑아야하는데 수수료가 나가는 가슴아픈 마음을 노래한 것 같습니다.&lt;br&gt;&lt;br&gt;07. 한숨&lt;br&gt;제목처럼 우울한 노래입니다. &lt;br&gt;&lt;br&gt;08. You Are My Sunshine&lt;br&gt;항상 들을 때 마다 느낀 거지만, 왜 금요일이랑 토요일이랑 일요일은 없죠?-_-; Thursday까지밖에 없네요. 그냥 여자친구를 찬양하는 노래입니다. 신나는 노래군요. &lt;br&gt;&lt;br&gt;09. Blink&lt;br&gt;템포가 좀 살아있는 노래군요. 기계음이 들어가있습니다&lt;br&gt;&lt;br&gt;10. Hmm Hmm&lt;br&gt;노래제목이 특이하네요. 가사 없이 들을 때 몰랐는데, 가사를 보니 랄~ 랄~ 하는 부분이 night light 라고 하는 거군요. 충격적입니다.&lt;br&gt;&lt;br&gt;11. 쌍꺼풀&lt;br&gt;이 노래의 후렴구의 어떤 부분이 &#039;Closing Time&#039;의 어떤 부분과 비슷한 것 같아요. 처음에 헷깔렸어요. 지금 가사집을 보니 같은 분이 작곡했군요-_-; 가사는 그녀를 떠나보내고 눈을 비비다보니 쌍꺼풀이 생긴거죠.&lt;br&gt;희미하게~ 이부분이랑 Closing Time~ 이랑 비슷해요-_-; 나만 그런 듯...&lt;br&gt;&lt;br&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://mudchobo.tomeii.com/tt/attach/1/1065348064.jpg&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;375&quot; width=&quot;500&quot; /&gt;&lt;/div&gt;&lt;br&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://mudchobo.tomeii.com/tt/attach/1/1333123277.jpg&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;375&quot; width=&quot;500&quot; /&gt;&lt;/div&gt;약 90%가 이별과 그리움을 노래하고, 10%의 염장노래로 항상 채워주는 엠씨더맥스. 이번 앨범에서도 변치 않았군요. 좋아요~ 모두들 들어보세요~ 좋아요~ ^^&lt;br&gt;</description>
			<category>M.C The Max</category>
			<category>6th</category>
			<category>6집</category>
			<category>M.C the MAX</category>
			<category>MC THE MAX</category>
			<category>엠씨더맥스</category>
			<category>엠씨더맥스 6집</category>
			<author>(머드초보)</author>
			<guid>http://mudchobo.tomeii.com/tt/340</guid>
			<comments>http://mudchobo.tomeii.com/tt/340#entry340comment</comments>
			<pubDate>Tue, 07 Oct 2008 21:29:43 +0900</pubDate>
		</item>
		<item>
			<title>[JAVA] NetBeans를 이용한 쉽고 빠르게 RESTful 웹서비스(Web Service)만들기.</title>
			<link>http://mudchobo.tomeii.com/tt/339</link>
			<description>넷빈즈에서는 RESTful 웹서비스를 손쉽게 만들 수 있습니다.&lt;br&gt;RESTful은 기존에 사용하던 SOAP/WSDL-based의 WebService와 다르게 매우 간단하게 HTTP를 통해서 자원을 접근할 수 있습니다. 넷빈즈 웹서비스관련문서페이지에는 이렇게 써있군요.&lt;br&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;REST-based.&lt;/strong&gt; &lt;strong&gt;RE&lt;/strong&gt;presentational &lt;strong&gt;S&lt;/strong&gt;tate &lt;strong&gt;T&lt;/strong&gt;ransfer
is a new way to create and communicate with web services. In REST,
resources have URIs and are manipulated through HTTP header operations.
For more details, see RESTful Web Services.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;SOAP/WSDL-based.&lt;/strong&gt;
In traditional web service models, web service interfaces are exposed
through WSDL documents (a type of XML), which have URLs. Subsequent
message exchange is in SOAP, another type of XML document. For more
details, see SOAP-based Web Services. &lt;/li&gt;&lt;/ul&gt;&lt;br&gt;기존 SOAP/WSDL-based는 WSDL이라는 문서에 정의된 것을 바탕으로 데이터를 요청하고, 요청한 결과를 리턴받는 것 같았습니다. 그리고 데이터를 주고받기 위해서 SOAP이라는 프로토콜을 사용했습니다. 그 프로토콜에 의하면 무슨 봉투만들고, 정의된 표준에 의해서 리턴값을 만들어야 하는 점이 있었는데요. &lt;br&gt;&lt;br&gt;이 RESTful방식은 자원이 uri를 가지고 있는데요. 그냥 http요청으로 해당 자원 uri를 요청하는데, method를 get, put, delete, post를 이용해 직관적으로 자원에 접근하는 듯 합니다. 아직 잘 모르겠네요-_-; DB랑 연동해서 삽질해보려니 힘들어서 우선 제가 제일 좋아하는 sayHello만 찍어봤습니다-_-;&lt;br&gt;&lt;br&gt;참고자료&lt;br&gt;넷빈즈 웹서비스 관련문서페이지&lt;br&gt;&lt;a href=&quot;http://www.netbeans.org/kb/61/websvc/intro-ws.html&quot; target=&quot;_blank&quot;&gt;http://www.netbeans.org/kb/61/websvc/intro-ws.html&lt;/a&gt;&lt;br&gt;&lt;br&gt;1. 느리고 답답한 넷빈즈6.1이 필요합니다.&lt;br&gt;&lt;br&gt;2. New Project -&amp;gt; Web -&amp;gt; Web Application, ProjectName은 HelloWS, Next!&lt;br&gt;&lt;br&gt;3. Server는 GlashFish V2로 합니다. tomcat으로는 여기서도 아마 테스트를 지원하지 않을 듯 합니다. Finish!&lt;br&gt;&lt;br&gt;4. HelloWS프로젝트 이름에 대고, 오른쪽버튼 New -&amp;gt; Other -&amp;gt; Web Services -&amp;gt; RESTful Web Services from Patterns선택, Sinleton선택 Next!&lt;br&gt;&lt;br&gt;5. Resource Package는 자기가 원하는 대로! 저는 com.mudchobo.hello,&lt;br&gt;Resource Name은 Hello. 이것만 고치면 아래는 자동으로 고쳐집니다. Path부분이 해당 자원의 uri가 됩니다. Finish!&lt;br&gt;만들어진 소스코드를 보면 HelloResource라는 클래스가 생성되었습니다. @Path(&quot;hello&quot;)라는 어노테이션이 붙었는데요. HelloResource라는 자원은 /hello로 접근하는 자원이라는 것을 지정해주는 겁니다.&lt;br&gt;이 HelloResource에는 2가지 메소드가 자동으로 만들어졌습니다. GET과 PUT인데요.&lt;br&gt;우리가 만들것은 parameter로 name을 받아서 Hello! name 을 리턴하는 것을 만들껀데요. 그러면 GET메소드를 수정해야합니다.&lt;br&gt;&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;@GET&lt;br&gt;    @ProduceMime(&quot;application/xml&quot;)&lt;br&gt;    public String getXml(&lt;br&gt;            @QueryParam(&quot;name&quot;)&lt;br&gt;            @DefaultValue(&quot;NONE&quot;)&lt;br&gt;            String name) {&lt;br&gt;        return &quot;&amp;lt;?xml version=\&quot;1.0\&quot; encoding=\&quot;utf-8\&quot;?&amp;gt;&amp;lt;hello&amp;gt;Hello! &quot; + name + &quot;&amp;lt;/hello&amp;gt;&quot;;&lt;br&gt;    }&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;QueryParm어노테이션은 http요청 시 요청파라메터구요. 이건 name으로 받습니다. DefaultValue는 NONE로 했습니다. &lt;br&gt;보통 자원에 접근하는 주소는 아래와 같이 되더군요.&lt;br&gt;http://localhost:8080/HelloWS/resources/자원URI&lt;br&gt;hello자원은 http://localhost:8080/HelloWS/resources/hello이더군요.&lt;br&gt;&lt;br&gt;저렇게 바꾸었으면 테스트를 할 수 있습니다. GlassFish가 테스트를 너무 잘 지원해줘서 참 좋습니다.&lt;br&gt;&lt;br&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://mudchobo.tomeii.com/tt/thumbnail/1/1379898037.w610-h590.jpg&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;590&quot; width=&quot;610&quot; /&gt;&lt;p class=&quot;cap1&quot;&gt;HelloResource클래스에 GET과 PUT이 있기때문에 2개가 나옵니다. 아래는 테스트결과로 리턴받는 값을 실제로 볼 수 있습니다. http Monitor도 있어서 요청한 값, 리턴값을 다 볼 수 있습니다.&lt;/p&gt;&lt;/div&gt;이제 다른 클라이언트에서 사용할 수 있습니다. Flex에서 요청하신다면...이건 SOAP WSDL방식이 아니기 때문에 &amp;lt;WebService&amp;gt;를 사용하는 것이 아니라 &amp;lt;HTTPService&amp;gt;를 사용해야합니다.&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;&lt;br&gt;&amp;lt;mx:WindowedApplication xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot; layout=&quot;vertical&quot;&amp;gt;&lt;br&gt;&lt;br&gt;    &amp;lt;mx:Script&amp;gt;&lt;br&gt;        &amp;lt;![CDATA[&lt;br&gt;            import mx.rpc.events.ResultEvent;&lt;br&gt;            private function click():void&lt;br&gt;            {&lt;br&gt;                service.send({name: inputName.text});&lt;br&gt;            }&lt;br&gt;            &lt;br&gt;            private function result(event:ResultEvent):void&lt;br&gt;            {&lt;br&gt;                 labelResult.text = event.result.hello;&lt;br&gt;            }&lt;br&gt;        ]]&amp;gt;&lt;br&gt;    &amp;lt;/mx:Script&amp;gt;&lt;br&gt;    &amp;lt;mx:HTTPService id=&quot;service&quot; method=&quot;GET&quot;&lt;br&gt;        url=&quot;http://localhost:8080/HelloWS/resources/hello&quot; &lt;br&gt;        result=&quot;result(event)&quot; /&amp;gt;&lt;br&gt;        &lt;br&gt;    &amp;lt;mx:TextInput id=&quot;inputName&quot; /&amp;gt;&lt;br&gt;    &amp;lt;mx:Button label=&quot;확인&quot; click=&quot;click()&quot;/&amp;gt;&lt;br&gt;    &amp;lt;mx:Label id=&quot;labelResult&quot; /&amp;gt;&lt;br&gt;    &lt;br&gt;&amp;lt;/mx:WindowedApplication&amp;gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;해당 자원주소에 method를 지정해주고 파라메터로 name을 넘기면 됩니다.&lt;br&gt;그럼 리턴값은 xml로 받게 됩니다.&lt;br&gt;&lt;br&gt;제가 잘 몰라서 그러는데, 잘못된 점 있으면 태클걸어주세요-_-; 아직도 잘 모르겠네-_-;&lt;br&gt;아졸려...-_-; &lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
			<category>자바(Java)</category>
			<category>flex</category>
			<category>netbeans</category>
			<category>RESTful</category>
			<category>WebService</category>
			<category>넷빈즈</category>
			<category>웹서비스</category>
			<category>자바</category>
			<category>플렉스</category>
			<author>(머드초보)</author>
			<guid>http://mudchobo.tomeii.com/tt/339</guid>
			<comments>http://mudchobo.tomeii.com/tt/339#entry339comment</comments>
			<pubDate>Sat, 04 Oct 2008 02:22:26 +0900</pubDate>
		</item>
		<item>
			<title>[JAVA] Dangling meta character &#039;*&#039; near index 0 에러....</title>
			<link>http://mudchobo.tomeii.com/tt/338</link>
			<description>음....뭔 개소리지....라는 생각으로 찾아보니 있더군요.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;public class Test2 &lt;br&gt;{&lt;br&gt;    public static void main(String[] args)&lt;br&gt;    {&lt;br&gt;        String readStr = &quot;mudchobo*배고파*밥줘*아놔&quot;;&lt;br&gt;        String[] token = readStr.split(&quot;*&quot;);&lt;br&gt;        &lt;br&gt;        for (int i = 0; i&amp;lt;token.length; i++)&lt;br&gt;        {&lt;br&gt;            System.out.println(&quot;token = &quot; + token[i]);&lt;br&gt;        }&lt;br&gt;    }&lt;br&gt;}&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;split함수는 해당 문자열로 문자를 나눠서 String배열로 리턴해줍니다. 역시 자바는 다 잘 되어있습니다.&lt;br&gt;*로 구분되어진 문서를 파싱하고 있는데요. *로 split를 하면 이상하게 저런 에러를 내뱉습니다. meta문자가 매달려있다고 하는 것 같습니다-_-;&lt;br&gt;그래서 \이거 한개를 붙여봤더니......&lt;br&gt;&lt;br&gt;Invalid escape sequence (valid ones are&amp;nbsp; \b&amp;nbsp; \t&amp;nbsp; \n&amp;nbsp; \f&amp;nbsp; \r&amp;nbsp; \&quot;&amp;nbsp; \&#039;&amp;nbsp; \\ )&lt;br&gt;&lt;br&gt;요렇게 밖에 지원을 안하는 것 같습니다. 그래서 검색해보니...-_-; 두개를 붙이더군요-_-;&lt;br&gt;&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;String[] token = readStr.split(&quot;\\*&quot;);&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;오...됩니다-_-;&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;token = mudchobo&lt;br&gt;token = 배고파&lt;br&gt;token = 밥줘&lt;br&gt;token = 아놔&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;&lt;br&gt;PS. 점심시간이 다가오는 관계로....배고프다는 생각이 머릿속에 가득하다보니 저런 얘기가 써진 것 같습니다.&lt;br&gt;</description>
			<category>자바(Java)</category>
			<category>Dangling meta character</category>
			<category>split</category>
			<category>token</category>
			<category>자바</category>
			<author>(머드초보)</author>
			<guid>http://mudchobo.tomeii.com/tt/338</guid>
			<comments>http://mudchobo.tomeii.com/tt/338#entry338comment</comments>
			<pubDate>Wed, 01 Oct 2008 11:04:05 +0900</pubDate>
		</item>
		<item>
			<title>[머드초보의 일상] RIA Camp 2nd in Seoul - AIR티셔츠 득템!-_-;</title>
			<link>http://mudchobo.tomeii.com/tt/337</link>
			<description>입을 옷이 없었는데 잘 됐습니다. 하지만.......반팔이군요-_-; 날씨가 추워졌는데-_-;&lt;br&gt;&lt;br&gt;뭐 어쨌든, 갔다왔습니다. 평일인데도 많은 분들이 오셨더라구요. 저는 버스가 얼마나 걸리는지 몰라서 빨리나왔는데 버스가 의외로 빨리 도착하는 바람에 12시20분쯤 도착했습니다. 더욱 신기했던 것은.......교보타워 엘리베이터......완전 빠르네요-_-; 예전에 포스코 엘리베이터도 완전 빠르던데....엘리베이터가 빠른 게 부러운 이유는 우리회사 있는 엘리베이터는......거북이처럼 느리기 때문이죠. 점심시간에 재수없으면 10분걸려서 올라가야하는 일이 생기기도 하죠 ㅠ 얘기가 갑자기 삼천포로 빠졌습니다만-_-;&lt;br&gt;&lt;br&gt;23층에 올라갔습니다. 와우 핸드폰줄입니다. 하나 더 달라고 하고 싶었지만, 소심해서-_-;&lt;br&gt;&lt;br&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://mudchobo.tomeii.com/tt/attach/1/1020702079.jpg&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;300&quot; width=&quot;400&quot; /&gt;&lt;/div&gt;&lt;br&gt;제가 1등인줄알고 혼잣말로 &quot;1등인가......&quot; 라고 하니 도우미분께서 &quot;안에 몇 분 와계세요.&quot; 그러시더라구요. 아....6등입니다-_-; 설문지를 작성하면 티셔츠를 준다고 하더군요. 사실 강의평도 안하고 그냥 작성해서 내고 싶었습니다만, 끝까지 기다렸습니다.&lt;br&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://mudchobo.tomeii.com/tt/attach/1/1033803717.jpg&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;375&quot; width=&quot;500&quot; /&gt;&lt;p class=&quot;cap1&quot;&gt;6등으로 온 증거-_-; 오른쪽에 한 분 더 계셨습니다-_-;&lt;/p&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;사람들이 막 모이더니 어느새 자리가 꽉 찼더군요. 우와....자리가 없어서 뒤에 서서 보신 분들도 계시더라구요.&lt;br&gt;&lt;br&gt;우선 영상을 보여줬는데요. Adobe AIR 주제를 가지고, 투어를 하며 사람들에게 홍보를 하는 영상을 보여줬는데 편집이 예술이고 영상미가 꽤 있어보였습니다. 역시 외국은 다르군요. 매우 멋졌습니다.&lt;br&gt;&lt;br&gt;시작은 어도비사의 어떤 전무님이 말씀으로 시작하셨습니다. 이 분께서 하신 말씀은 최근에 나온 CS4를 자랑 하는 제품 자랑으로 시작했습니다. RIA기술로 구현한 프로젝트가 성공했다는 얘기를 한 듯 합니다 ^^&lt;br&gt;&lt;br&gt;이제 마이크 챔버스랑 라이언스트어트의 강연이 시작되었습니다.&lt;br&gt;꽤나 준비를 많이 하신 것 같습니다. 강의 진행방식은 마이크와 라이언이 말을 하면, 통역하시는 분이 통역으로 얘기를 해줍니다. 예전에 JCO에서는 외국인 강연은......그냥 외국인 혼자서 얘기하는 강연을 들은 적이 있었습니다만, 이렇게 Adobe에서는 동시 통역을 준비해줬군요. 대단합니다 ^^&lt;br&gt;&lt;br&gt;우선 이분들은 새로 나올 신기술에 대해서 소개를 해줬는데요. 저는 곧 나오는 것들인 줄 알았습니다만-_-; 2009월 하반기가 예정이라는 군요? 1년넘게 남았다는 얘기죠 ^^&lt;br&gt;&lt;br&gt;암튼, 나중에 나올 기술등에 대해서 소개를 해줬는데요. Flash Player 10, AIR 1.5, Flex4를 얘기해줬습니다. 외국분들은 PPT를 잘 만드는 것 같아요. 딱 핵심 포인트만 포인트에 적어 놓는데, 파워포인트의 정석이죠. 외국 ppt를 보면 정말 잘 지키는 것 같아요. 국내에 글씨만 무성히 많은 PPT가 참 많은데, 그건 발표하는 동안, 발표자의 말을 들으라는 건지, 저걸 다 읽으라는 건지 그런 경우가 참 많았거든요. 또 자꾸 얘기가 샙니다만-_-;&lt;br&gt;&lt;br&gt;암튼, 3D를 사용한 어플리케이션을 많이 보여주셨는데, 여기저기서 환호성이 터져나왔네요. 저도 신기했구요^^ z축을 이용해서 구현이 가능한 것 같아요. Flex Store라는 예제를 보여주셨는데, 핸드폰이 막 쓰리디로 정렬되면서 멋진 장면이 연출 되더군요. 저는 언제쯤 그런 걸 구현할까요-_-;&lt;br&gt;&lt;br&gt;근데, 일본에서 발표하고 왔는지, 일본어로 된 데이터로 Flash Player10 Text 기능을 보여주더라구요. 일본에 역시 먼저 갔다왔군요. 일본에 대해서 참 부러운 건 JDK를 일본어를 공식 지원한다는것-_-; 그 외에도 Flex Builder를 보면 일본어를 공식 지원해요-_-; 우리나라도 공식 지원해줘요! MS는 한국어판 다 내는데 ^^ Adobe도 내주세욤!&lt;br&gt;&lt;br&gt;AIR1.5부터는 리눅스를 공식 지원한다고 하는군요. 예전에 리눅스에서 AIR를 한 번 돌려봤는데 잘 돌아갔었습니다. 이제 대표적인 OS는 다 지원하는군요. 멋집니다. 이제 크로스플랫폼이라고 제대로 불리울 수 있겠군요^^&lt;br&gt;&lt;br&gt;좀 있다 마이클 챔버스가 나왔습니다.&lt;br&gt;이 분이 얘기하신 것 중에...Vectors라는 자료형이 나왔습니다. 이거 왠지 java의 Vector인가...라는 생각이 들었습니다. Array랑 비슷한 것 같은데요. Vectors도 보니까 Array처럼 쓰지만, 이 놈은 하나의 자료형으로 사용할 수 있는 것 같습니다. 자바에서 제너릭(Generic)문법처럼 쓰더라구요.&lt;br&gt;&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;var v:Vectors.&amp;lt;Number&amp;gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;얼핏 보고 왔는데.....저런식으로 쓰는 것 같았어요. 우선 Array처럼 v[i] 형태로 사용하구요. 성능차이를 보여줬는데, Vectors가 훨씬 빨랐어요. 효율문제로 저걸 만들었나봐요. 저도 잘 모르겠네요^^&lt;br&gt;&lt;br&gt;그리고, Flash Player10에서의 개발자들에게 편해진 점들을 소개해주셨는데요. 성능문제로 Drawing APIs에서 여러번 함수를 콜해야