<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>u2m.kr</title>
		<link>http://u2m.kr/</link>
		<description></description>
		<language>ko</language>
		<pubDate>Thu, 01 Sep 2011 10:43:09 +0900</pubDate>
		<generator>Tistory 1.1 (http://www.tistory.com/)</generator>
		<item>
			<title>YUI COMPRESSOR를 이용한 js 및 css 파일 COMPRESS with editplus</title>
			<link>http://u2m.kr/189</link>
			<description>http://yuilibrary.com/download/yuicompressor/&lt;br /&gt;
http://phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&amp;amp;wr_id=60412&lt;br /&gt;
&lt;a href=&quot;http://yui.2clics.net/&quot; target=&quot;_blank&quot;&gt;http://yui.2clics.net/&lt;/a&gt;
&lt;br /&gt;
&lt;a href=&quot;http://phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&amp;amp;wr_id=52074&quot; target=&quot;_blank&quot;&gt;http://phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&amp;amp;wr_id=52074&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;p style=&quot;margin:0&quot;&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://jadunara.tistory.com/attachment/cfile22.uf@1373003D4E5ED2F9340040.zip&quot;&gt;&lt;img src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/blog/image/extension/zip.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; yuicompressor-2.4.6.zip&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;br /&gt;</description>
			<category>JS</category>
			<author>by jadunara(Nam 경탁) 나는너의힘</author>
			<guid>http://u2m.kr/189</guid>
			<comments>http://u2m.kr/189#entry189comment</comments>
			<pubDate>Thu, 01 Sep 2011 09:35:20 +0900</pubDate>
		</item>
		<item>
			<title>Internet Explorer Developer Toolbar</title>
			<link>http://u2m.kr/188</link>
			<description>http://www.microsoft.com/download/en/confirmation.aspx?id=18359&lt;p style=&quot;margin:0&quot;&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://jadunara.tistory.com/attachment/cfile7.uf@19067A424E56104F29D8B1.msi&quot;&gt;&lt;img src=&quot;http://i1.daumcdn.net/cfs.tistory/v/110706133414/blog/image/extension/unknown.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; IEDevToolBarSetup.msi&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p style=&quot;margin:0&quot;&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://jadunara.tistory.com/attachment/cfile6.uf@161A6F424E56105508B6BC.msi&quot;&gt;&lt;img src=&quot;http://i1.daumcdn.net/cfs.tistory/v/110706133414/blog/image/extension/unknown.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; JSLeaksDetector.msi&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;br /&gt;</description>
			<category>JS</category>
			<author>by jadunara(Nam 경탁) 나는너의힘</author>
			<guid>http://u2m.kr/188</guid>
			<comments>http://u2m.kr/188#entry188comment</comments>
			<pubDate>Thu, 25 Aug 2011 18:05:43 +0900</pubDate>
		</item>
		<item>
			<title>Understanding and Solving Internet Explorer Leak Patterns 자바스크립트 메모리 릭</title>
			<link>http://u2m.kr/187</link>
			<description>http://msdn.microsoft.com/en-us/library/Bb250448.aspx&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;p&gt;Justin Rogers&lt;br /&gt;
			Microsoft Corporation&lt;/p&gt;
		&lt;p&gt;June 2005&lt;/p&gt;
		&lt;h2&gt;The Evolution of the Web Developer&lt;/h2&gt;
		&lt;p&gt;In the past, memory leaks haven&#039;t posed huge problems for Web developers. Pages 
			were kept relatively simple and navigation between different locations within a 
			site was a great way to clean up any loose memory. If there was a leak, it was 
			most likely small enough to go unnoticed.&lt;/p&gt;
		&lt;p&gt;New Web applications live up to higher standards. A page might run for hours 
			without being navigated and retrieve updated information dynamically through 
			Web services. Language features are pushed to the breaking point by combining 
			complex event schemes, object-oriented JScript, and closures to produce entire 
			applications. With these and other changes, certain memory leak patterns are 
			becoming more prominent, especially those previously hidden by navigation.&lt;/p&gt;
		&lt;p&gt;The good news is that memory leak patterns can be easily spotted if you know 
			what to look for. Most of the troublesome patterns you might face have known 
			workarounds requiring only a small amount of extra work on your behalf. While 
			some pages might still fall prey to small memory leaks, the most noticeable 
			ones can be easily removed.&lt;/p&gt;
		&lt;h2&gt;Leak Patterns&lt;/h2&gt;
		&lt;p&gt;The following sections will discuss patterns of memory leaks and point out some 
			common examples of each pattern. One great example of a pattern is the closure 
			feature of JScript, while another example is the use of closures in hooking 
			events. If you&#039;re familiar with the event hooking example, you might be able to 
			find and fix many of your memory leaks, but other closure-related issues might 
			go unnoticed.&lt;/p&gt;
		&lt;p&gt;Now, let&#039;s look at the following patterns:&lt;/p&gt;
		&lt;ol&gt;
&lt;li&gt;
				&lt;p&gt;Circular References—When mutual references are counted between Internet 
					Explorer&#039;s COM infrastructure and any scripting engine, objects can leak 
					memory. This is the broadest pattern.
				&lt;/p&gt;
			&lt;/li&gt;
&lt;li&gt;
				&lt;p&gt;Closures—Closures are a specific form of circular reference that pose the 
					largest pattern to existing Web application architectures. Closures are easy to 
					spot because they rely on a specific language keyword and can be searched for 
					generically.
				&lt;/p&gt;
			&lt;/li&gt;
&lt;li&gt;
				&lt;p&gt;Cross-Page Leaks—Cross-page leaks are often very small leaks of internal 
					book-keeping objects as you move from site to site. We&#039;ll examine the DOM 
					Insertion Order issue, along with a workaround that shows how small changes to 
					your code can prevent the creation of these book-keeping objects.
				&lt;/p&gt;
			&lt;/li&gt;
&lt;li&gt;
				&lt;p&gt;Pseudo-Leaks—These aren&#039;t really leaks, but can be extremely annoying if 
					you don&#039;t understand where your memory is going. We&#039;ll examine the script 
					element rewriting and how it appears to leak quite a bit of memory, when it is 
					really performing as required.
				&lt;/p&gt;
			&lt;/li&gt;
&lt;/ol&gt;
		&lt;h2&gt;Circular References&lt;/h2&gt;
		&lt;p&gt;Circular references are the root of nearly every leak. Normally, script engines 
			handle circular references through their garbage collectors, but certain 
			unknowns can prevent their heuristics from working properly. The unknown in the 
			case of IE would be the status of any DOM elements that a portion of script has 
			access to. The basic principle would be as follows:&lt;/p&gt;
		&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;p style=&quot;margin:0&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;img src=&quot;http://cfile2.uf.tistory.com/image/11229A414E55E23B0B9FC9&quot; alt=&quot;&quot; filemime=&quot;image/gif&quot; filename=&quot;IC24175.gif&quot; height=&quot;568&quot; width=&quot;413&quot;/&gt;&lt;/div&gt;&lt;/p&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
		&lt;p&gt;&lt;strong&gt;Figure 1. Basic Circular Reference Pattern&lt;/strong&gt;&lt;/p&gt;
		&lt;p&gt;The cause of the leak in this pattern is based on COM reference counting. The 
			script engine objects will hold a reference to the DOM element and will be 
			waiting for any outstanding references to be removed before cleaning up and 
			releasing the DOM element pointer. In our case we have two references on the 
			script engine object: the script engine scope, and the DOM element expando 
			property. While terminating the script engine will release the first reference, 
			the DOM element reference will never be released because it is waiting on the 
			script engine object to release it! You might think it would be easy to detect 
			this scenario and fix the problem, but in practice the basic case presented is 
			only the tip of the iceberg. You could have circular references at the end of a 
			30 object chain and those would be much harder to detect.&lt;/p&gt;
		&lt;p&gt;If you are wondering what this pattern looks like in HTML, you can cause a leak 
			by using a global script engine variable and a DOM element as shown.&lt;/p&gt;
		&lt;pre&gt;&lt;code&gt;&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;script language=&quot;JScript&quot;&amp;gt;

        var myGlobalObject;

        function SetupLeak()
        {
            // First set up the script scope to element reference
            myGlobalObject =
                document.getElementById(&quot;LeakedDiv&quot;);

            // Next set up the element to script scope reference
            document.getElementById(&quot;LeakedDiv&quot;).expandoProperty =
                myGlobalObject;
        }


        function BreakLeak()
        {
            document.getElementById(&quot;LeakedDiv&quot;).expandoProperty =
                null;
        }
        &amp;lt;/script&amp;gt;
    &amp;lt;/head&amp;gt;

    &amp;lt;body onload=&quot;SetupLeak()&quot; onunload=&quot;BreakLeak()&quot;&amp;gt;
        &amp;lt;div id=&quot;LeakedDiv&quot;&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
		&lt;p&gt;To break the leak pattern you can make use of explicit null assignments. By 
			assigning null before the document unloads you are telling the script engine 
			there is no longer an association between the element and the object inside the 
			engine. It can now properly clean up references and will release the DOM 
			element. In this case, you as the Web developer know more about the 
			relationships between your objects than the script engine does.&lt;/p&gt;
		&lt;p&gt;While that is the basic pattern, it can be difficult to spot more complex 
			scenarios. A common usage of object-oriented JScript is to extend DOM elements 
			by encapsulating them inside of a JScript object. During the construction 
			process, you generally pass in the DOM element you want to attach to and then 
			store a reference to the DOM element on the newly constructed object while at 
			the same time storing an instance of the newly constructed object on the DOM 
			element. That way your application model always has access to everything it 
			needs. The problem is this is a very explicit circular reference, but because 
			it uses different language aspects it might go unnoticed. Breaking up this kind 
			of pattern can become more complex, and you can use the same simple methods 
			discussed earlier.&lt;/p&gt;
		&lt;pre&gt;&lt;code&gt;&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;script language=&quot;JScript&quot;&amp;gt;

        function Encapsulator(element)
        {
            // Set up our element
            this.elementReference = element;

            // Make our circular reference
            element.expandoProperty = this;
        }

        function SetupLeak()
        {
            // The leak happens all at once
            new Encapsulator(document.getElementById(&quot;LeakedDiv&quot;));
        }

        function BreakLeak()
        {
            document.getElementById(&quot;LeakedDiv&quot;).expandoProperty =
                null;
        }
        &amp;lt;/script&amp;gt;
    &amp;lt;/head&amp;gt;

    &amp;lt;body onload=&quot;SetupLeak()&quot; onunload=&quot;BreakLeak()&quot;&amp;gt;
        &amp;lt;div id=&quot;LeakedDiv&quot;&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
		&lt;p&gt;More complex solutions to this problem involve registration schemes to note 
			which elements/properties need to be unhooked, having the peer element hook 
			events so that it can clean up before the document unloads, but often you can 
			run into additional leak patterns without actually fixing the problem.&lt;/p&gt;
		&lt;h2&gt;Closures&lt;/h2&gt;
		&lt;p&gt;Closures are very often responsible for leaks because they create circular 
			references without the programmer being fully aware. It isn&#039;t immediately 
			obvious that parent function parameters and local variables will be frozen in 
			time, referenced, and held until the closure itself is released. In fact this 
			has become such a common programming tactic, and users have run into issues so 
			often, there are quite a few resources already available. Because they detail 
			some of the history behind closures as well as some of the specific instances 
			of closure leaks we&#039;ll check those out after applying the closure model to our 
			circular reference diagram and figuring out where these extra references are 
			coming from.&lt;/p&gt;
		&lt;p&gt;&lt;p style=&quot;margin:0&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;img src=&quot;http://cfile4.uf.tistory.com/image/1316E7464E55E2F52F1C52&quot; alt=&quot;&quot; filemime=&quot;image/gif&quot; filename=&quot;IC133807.gif&quot; height=&quot;525&quot; width=&quot;413&quot;/&gt;&lt;/div&gt;&lt;/p&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
		&lt;p&gt;&lt;strong&gt;Figure 2. Circular References with Closures&lt;/strong&gt;&lt;/p&gt;
		&lt;p&gt;With normal circular references there were two solid objects holding references 
			to each other, but closures are different. Rather than make the references 
			directly, they are made instead by importing information from their parent 
			function&#039;s scope. Normally, a function&#039;s local variables and the parameters 
			used when calling a function only exist for the lifetime of the function 
			itself. With closures, these variables and parameters continue to have an 
			outstanding reference as long as the closure is alive, and since closures can 
			live beyond the lifetime of their parent function so can any of the locals and 
			parameters in that function. In the example, Parameter 1 would normally be 
			released as soon as the function call was over. Because we&#039;ve added a closure, 
			a second reference is made, and that second reference won&#039;t be released until 
			the closure is also released. If you happened to attach the closure to an 
			event, then you would have to detach it from that event. If you happened to 
			attach the closure to an expando then you would need to null that expando.&lt;/p&gt;
		&lt;p&gt;Closures are also created per call, so calling this function twice will create 
			two individual closures, each holding references to the parameters passed in 
			each time. Because of this transparent nature it is really easy to leak 
			closures. The following example provides the most basic of leaks using 
			closures:&lt;/p&gt;
		&lt;pre&gt;&lt;code&gt;&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;script language=&quot;JScript&quot;&amp;gt;

        function AttachEvents(element)
        {
            // This structure causes element to ref ClickEventHandler
            element.attachEvent(&quot;onclick&quot;, ClickEventHandler);

            function ClickEventHandler()
            {
                // This closure refs element
            }
        }

        function SetupLeak()
        {
            // The leak happens all at once
            AttachEvents(document.getElementById(&quot;LeakedDiv&quot;));
        }

        function BreakLeak()
        {
        }
        &amp;lt;/script&amp;gt;
    &amp;lt;/head\&amp;gt;

    &amp;lt;body onload=&quot;SetupLeak()&quot; onunload=&quot;BreakLeak()&quot;&amp;gt;
        &amp;lt;div id=&quot;LeakedDiv&quot;&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
		&lt;p&gt;If you are wondering how to break this leak, it won&#039;t be as easy as a normal 
			circular reference. The &quot;closure&quot; can be viewed as a temporary object that 
			exists in the function scope. Once the function exits, you lose reference to 
			the closure itself, so what would you end up calling &lt;strong&gt;detachEvent&lt;/strong&gt; with? 
			One of the most interesting approaches to this problem was demonstrated on &lt;a href=&quot;http://spaces.msn.com/members/siteexperts/Blog/cns%211pNcL8JwTfkkjv4gg6LkVCpw%21338.entry&quot;&gt;
				MSN spaces thanks to Scott Isaacs&lt;/a&gt;. The approach uses a second closure 
			to additionally hook the window&#039;s &lt;strong&gt;onUnload&lt;/strong&gt; event, and because this 
			closure has the same &quot;scoped&quot; objects it is able to detach the event, detach 
			itself, and finish the clean up process. To make everything easily fit with our 
			model we can also store the closure on an expando, detach it, and then null the 
			expando, as in the following example.&lt;/p&gt;
		&lt;pre&gt;&lt;code&gt;&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;script language=&quot;JScript&quot;&amp;gt;

        function AttachEvents(element)
        {
            // In order to remove this we need to put
            // it somewhere. Creates another ref
            element.expandoClick = ClickEventHandler;

            // This structure causes element to ref ClickEventHandler
            element.attachEvent(&quot;onclick&quot;, element.expandoClick);

            function ClickEventHandler()
            {
                // This closure refs element
            }
        }

        function SetupLeak()
        {
            // The leak happens all at once
            AttachEvents(document.getElementById(&quot;LeakedDiv&quot;));
        }

        function BreakLeak()
        {
            document.getElementById(&quot;LeakedDiv&quot;).detachEvent(&quot;onclick&quot;,
                document.getElementById(&quot;LeakedDiv&quot;).expandoClick);
            document.getElementById(&quot;LeakedDiv&quot;).expandoClick = null;
        }
        &amp;lt;/script&amp;gt;
    &amp;lt;/head&amp;gt;

    &amp;lt;body onload=&quot;SetupLeak()&quot; onunload=&quot;BreakLeak()&quot;&amp;gt;
        &amp;lt;div id=&quot;LeakedDiv&quot;&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
		&lt;p&gt;In a &lt;a href=&quot;http://support.microsoft.com/default.aspx?scid=KB;EN-US;830555&quot;&gt;Knowledge 
				Base article&lt;/a&gt;, we actually recommend that you try not to use closures 
			unless they are necessary. In the example, I&#039;ve given we don&#039;t need to use a 
			closure as the event handler, instead we can move the closure to a global 
			scope. When the closure becomes a function, it no longer inherits the 
			parameters or local variables from its parent function so we don&#039;t have to 
			worry about closure-based circular references at all. Most code can be fixed by 
			creating an architecture that doesn&#039;t rely on closures where they aren&#039;t 
			necessary.&lt;/p&gt;
		&lt;p&gt;Finally, Eric Lippert, one of the developers of the scripting engines, has a &lt;a href=&quot;http://blogs.msdn.com/ericlippert/archive/2003/09/17/53028.aspx&quot;&gt;
				great post on closures in general&lt;/a&gt;. His final recommendations are also 
			along the lines of only using closures when truly necessary. While his article 
			doesn&#039;t mention any of the workarounds for the closure pattern, hopefully we&#039;ve 
			covered enough examples here to get you started.&lt;/p&gt;
		&lt;h2&gt;Cross-Page Leaks&lt;/h2&gt;
		&lt;p&gt;Leaks that are based on order of insertion are almost always caused by the 
			creation of intermediate objects that don&#039;t get cleaned up properly. That is 
			exactly the case when creating dynamic elements and then attaching them to the 
			DOM. The basic pattern is attaching two dynamically created objects together 
			temporarily which creates a scope from the child to the parent element. Later, 
			when you attach this two-element tree to the primary tree, they both inherit 
			the scope of the document and a temporary object is leaked. The following 
			diagram shows two methods for attaching dynamically created elements to the 
			tree. In the first model, attach each child element to its parent, and finally 
			attach the entire subtree to the primary tree. This method can cause leaks 
			through temporary objects if other conditions are met. In the second model, we 
			attach elements into the primary tree working our way from top-level 
			dynamically created element down through all of the children. Because each 
			attachment inherits the scope of the primary document we never generate 
			temporary scopes. This method is much better at avoiding potential memory 
			leaks.&lt;/p&gt;
		&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;p style=&quot;margin:0&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;img src=&quot;http://cfile9.uf.tistory.com/image/205A02504E55E3202C011A&quot; alt=&quot;&quot; filemime=&quot;image/gif&quot; filename=&quot;IC4544.gif&quot; height=&quot;379&quot; width=&quot;417&quot;/&gt;&lt;/div&gt;&lt;/p&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
		&lt;p&gt;&lt;strong&gt;Figure 3. DOM Insertion Order Leak Model&lt;/strong&gt;&lt;/p&gt;
		&lt;p&gt;Next, we are going to cover an example of a leak that is transparent to most 
			leak-detection algorithms. Because we don&#039;t leak any publicly visible elements 
			and the objects we leak are very small you might never notice this problem. For 
			our example to work, the dynamically created elements will have to contain a 
			script pointer in the form of an inline function. This will allow us to leak an 
			internal script object that is created temporarily as we attach elements 
			together. Because the leak is small, we&#039;ll have to run thousands of samples. In 
			fact, the objects leaked are only a few bytes. By running the sample and 
			navigating to an empty page, you can see the difference in memory consumption 
			between the two versions. When we use the first DOM model of attaching child to 
			parent, then parent to the primary tree, our memory usage goes up a bit. This 
			is a cross-navigation leak and the memory isn&#039;t reclaimed until you restart the 
			IE process. If you run the sample a few more times, using the second DOM model 
			of attaching the parent to the primary tree and then the child to the parent, 
			your memory won&#039;t continue to climb and you&#039;ll find that you&#039;ve fixed the 
			cross-page navigation leak.&lt;/p&gt;
		&lt;pre&gt;&lt;code&gt;&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;script language=&quot;JScript&quot;&amp;gt;

        function LeakMemory()
        {
            var hostElement = document.getElementById(&quot;hostElement&quot;);

            // Do it a lot, look at Task Manager for memory response

            for(i = 0; i &amp;lt; 5000; i++)
            {
                var parentDiv =
                    document.createElement(&quot;&amp;lt;div onClick=&#039;foo()&#039;&amp;gt;&quot;);
                var childDiv =
                    document.createElement(&quot;&amp;lt;div onClick=&#039;foo()&#039;&amp;gt;&quot;);

                // This will leak a temporary object
                parentDiv.appendChild(childDiv);
                hostElement.appendChild(parentDiv);
                hostElement.removeChild(parentDiv);
                parentDiv.removeChild(childDiv);
                parentDiv = null;
                childDiv = null;
            }
            hostElement = null;
        }


        function CleanMemory()
        {
            var hostElement = document.getElementById(&quot;hostElement&quot;);

            // Do it a lot, look at Task Manager for memory response

            for(i = 0; i &amp;lt; 5000; i++)
            {
                var parentDiv =
                    document.createElement(&quot;&amp;lt;div onClick=&#039;foo()&#039;&amp;gt;&quot;);
                var childDiv =
                    document.createElement(&quot;&amp;lt;div onClick=&#039;foo()&#039;&amp;gt;&quot;);

                // Changing the order is important, this won&#039;t leak
                hostElement.appendChild(parentDiv);
                parentDiv.appendChild(childDiv);
                hostElement.removeChild(parentDiv);
                parentDiv.removeChild(childDiv);
                parentDiv = null;
                childDiv = null;
            }
            hostElement = null;
        }
        &amp;lt;/script&amp;gt;
    &amp;lt;/head&amp;gt;

    &amp;lt;body&amp;gt;
        &amp;lt;button onclick=&quot;LeakMemory()&quot;&amp;gt;Memory Leaking Insert&amp;lt;/button&amp;gt;
        &amp;lt;button onclick=&quot;CleanMemory()&quot;&amp;gt;Clean Insert&amp;lt;/button&amp;gt;
        &amp;lt;div id=&quot;hostElement&quot;&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
		&lt;p&gt;This leak deserves clarification, because our workaround goes against some best 
			practices in IE. The key points to understand about the leak are that DOM 
			elements are being created with scripts already attached. This is actually 
			crucial to the leak, because if we create DOM elements that don&#039;t contain any 
			script and attach them together in the same manner we don&#039;t have a leak 
			problem. This gives rise to a second workaround that might be even better for 
			larger subtrees (in the example we only have two elements, so building the tree 
			off the primary DOM isn&#039;t a performance hit). The second workaround would be to 
			create your elements with no scripts attached initially so that you can safely 
			build your subtree. After you&#039;ve attached your subtree to the primary DOM, go 
			back and wire up any script events at that point. Remember to follow the 
			principles for circular references and closures so you don&#039;t cause a different 
			leak in your code as you hook up your events.&lt;/p&gt;
		&lt;p&gt;I really wanted to point out this issue because it shows that not all memory 
			leaks are easy to find. It could take thousands of iterations of a smaller 
			pattern to become visible, and it might be something slight, like the order of 
			insertion of DOM elements that causes the problem to arise. If you tend to 
			program using only best practices, then you think you are safe, but this leak 
			shows that even best practices can exhibit leaks. Our solution here was to 
			improve upon the best practice or even introduce a new best practice in order 
			to remove the leaking condition.&lt;/p&gt;
		&lt;h2&gt;Pseudo-Leaks&lt;/h2&gt;
		&lt;p&gt;Often times the actual behavior and expected behavior of some APIs can lead you 
			to misdiagnose memory leaks. Pseudo-leaks almost always appear on the same page 
			during dynamic scripting operations and should rarely be visible after 
			navigation away from the page to a blank page. That is how you can eliminate 
			the issue as a cross-page leak and then start to work on whether the memory 
			consumption is expected. We&#039;ll use script text rewriting as our example of a 
			pseudo-leak.&lt;/p&gt;
		&lt;p&gt;Like the DOM Insertion Order issue, this issue also relies on the creation of 
			temporary objects in order to &quot;leak&quot; memory. By rewriting the script text 
			inside of a script element over and over again, slowly you&#039;ll begin to leak 
			various script engine objects that were attached to the previous contents. In 
			particular, objects related to debugging script are left behind as are fully 
			formed code elements.&lt;/p&gt;
		&lt;pre&gt;&lt;code&gt;&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;script language=&quot;JScript&quot;&amp;gt;

        function LeakMemory()
        {
            // Do it a lot, look at Task Manager for memory response

            for(i = 0; i &amp;lt; 5000; i++)
            {
                hostElement.text = &quot;function foo() { }&quot;;
            }
        }
        &amp;lt;/script&amp;gt;
    &amp;lt;/head&amp;gt;

    &amp;lt;body&amp;gt;
        &amp;lt;button onclick=&quot;LeakMemory()&quot;&amp;gt;Memory Leaking Insert&amp;lt;/button&amp;gt;
        &amp;lt;script id=&quot;hostElement&quot;&amp;gt;function foo() { }&amp;lt;/script&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
		&lt;p&gt;If you run the above code and use the Task Manager trick again, while navigating 
			between the &quot;leaking&quot; page and a blank page, you won&#039;t notice a script leak. 
			This script leak is entirely within a page and when you navigate away then you 
			get your memory back. The reason this one is bad is due to expected behavior. 
			You expect that after rewriting some script that the original script won&#039;t stay 
			around. But it really has to, because it might have been used already for event 
			attachments and there might be outstanding reference counts. As you can see, 
			this is a pseudo-leak. On the surface the amount of memory consumption looks 
			really bad, but there is a completely valid reason.&lt;/p&gt;
		&lt;h2&gt;Conclusion&lt;/h2&gt;
		&lt;p&gt;Every Web developer builds a personal list of code examples that they know leak 
			and learns to work around those leaks when they see them in code. This is 
			extremely handy and is the reason the Web is relatively leak-free today. 
			Thinking about the leaks in terms of patterns instead of individual code 
			examples, you can start to develop even better strategies for dealing with 
			them. The idea is to take them into account during the design phase and make 
			sure you have plans for any potential leaks. Use defensive coding practices and 
			assume that you&#039;ll need to clean up all your own memory. While this is an 
			overstatement of the problem, you very rarely need to clean up your own memory; 
			it becomes obvious which variables and expando properties have the potential 
			for leaking.&lt;/p&gt;
		&lt;p&gt;In the interest of patterns and design I highly recommend &lt;a href=&quot;http://spaces.msn.com/members/siteexperts/Blog/cns%211pNcL8JwTfkkjv4gg6LkVCpw%21338.entry&quot;&gt;
				Scott&#039;s short blog entry&lt;/a&gt; because it demonstrates a general purpose 
			example of removing all closure-based leaks. It does require a bit more code, 
			but the practice is sound and the improved pattern is easy to spot in code and 
			to debug. Similar registration schemes can be used for expando-based circular 
			references as long as care is taken that the registration method itself isn&#039;t 
			riddled with leaks (especially where closures are used)!&lt;/p&gt;
		
		
		
		&lt;strong&gt;About the author&lt;/strong&gt;
		&lt;p&gt;&lt;strong&gt;Justin Rogers&lt;/strong&gt; recently joined the Internet Explorer team as an Object 
			Model developer working on extensibility and previously worked on such notable 
			projects as the .NET QuickStart Tutorials, .NET Terrarium, and SQL Reporting 
			Services Management Studio in SQL Server 2005.&lt;/p&gt;
&lt;br /&gt;</description>
			<category>JS</category>
			<author>by jadunara(Nam 경탁) 나는너의힘</author>
			<guid>http://u2m.kr/187</guid>
			<comments>http://u2m.kr/187#entry187comment</comments>
			<pubDate>Thu, 25 Aug 2011 14:52:47 +0900</pubDate>
		</item>
		<item>
			<title>자바 스크립트 메모리 누수 방지법</title>
			<link>http://u2m.kr/186</link>
			<description>&lt;span style=&quot;WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: medium Gulim; WHITE-SPACE: normal; ORPHANS: 2; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px&quot; class=&quot;Apple-style-span&quot;&gt;&lt;pre&gt;출처 : http://blog.naver.com/PostView.nhn?blogId=bg_ellder&amp;amp;logNo=102838476&lt;br /&gt;
&lt;br /&gt;되는지 안되는지 모름.&lt;br /&gt;
&lt;br /&gt;var obj = func.test;&lt;/pre&gt;&lt;pre&gt;........................&lt;/pre&gt;&lt;pre&gt;obj = null;  &amp;lt;==  참조가 끝났다면 자원을 수동으로 해제!.&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;============================================================================== &lt;/pre&gt;&lt;pre&gt;다음은 객체의 child들 까지도 자원을 해제 할 수 있도록 하는 function 모듈입니다.&lt;/pre&gt;&lt;pre&gt;(removeChild나 insertHTML등 전에 실행하지 않도록 주의하셔요.... 당연한거겠지만..^^)&lt;/pre&gt;&lt;pre&gt;function purge(d) {&lt;br /&gt;
    var a = d.attributes, i, l, n;&lt;br /&gt;
    if (a) {&lt;br /&gt;
        l = a.length;&lt;br /&gt;
        for (i = 0; i &amp;lt; l; i += 1) {&lt;br /&gt;
            n = a[i].name;&lt;br /&gt;
            if (typeof d[n] === &#039;function&#039;) {&lt;br /&gt;
                d[n] = null;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    a = d.childNodes;&lt;br /&gt;
    if (a) {&lt;br /&gt;
        l = a.length;&lt;br /&gt;
        for (i = 0; i &amp;lt; l; i += 1) {&lt;br /&gt;
            purge(d.childNodes[i]);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/pre&gt;&lt;/span&gt;</description>
			<category>JS</category>
			<author>by jadunara(Nam 경탁) 나는너의힘</author>
			<guid>http://u2m.kr/186</guid>
			<comments>http://u2m.kr/186#entry186comment</comments>
			<pubDate>Wed, 24 Aug 2011 14:06:18 +0900</pubDate>
		</item>
		<item>
			<title>ORA-22992: 원격 테이블로 부터 선택된 LOB 위치를 사용할 수 없습니다.</title>
			<link>http://u2m.kr/185</link>
			<description>출처 : &lt;A href=&quot;http://orapybubu.blog.me/40025520035&quot;&gt;http://orapybubu.blog.me/40025520035&lt;/A&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;CREATE GLOBAL TEMPORARY TABLE FOO&lt;br /&gt;
(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;C1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VARCHAR2(8 BYTE),&lt;br /&gt;
&amp;nbsp;&amp;nbsp;C2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VARCHAR2(8 BYTE),&lt;br /&gt;
&amp;nbsp; C3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CLOB&lt;br /&gt;
)&lt;br /&gt;
;&lt;br /&gt;
&lt;br /&gt;INSERT INTO FOO SELECT * FROM &lt;A href=&quot;mailto:스키마마명.테이블명@링크명&quot;&gt;스키마마명.테이블명@링크명&lt;/A&gt; WHERE 절 ;&lt;br /&gt;
&lt;br /&gt;SELECT * FROM FOO;&lt;br /&gt;
&lt;br /&gt;COMMIT 하면 안됨.&lt;br /&gt;</description>
			<category>ORACLE</category>
			<author>by jadunara(Nam 경탁) 나는너의힘</author>
			<guid>http://u2m.kr/185</guid>
			<comments>http://u2m.kr/185#entry185comment</comments>
			<pubDate>Fri, 22 Jul 2011 11:39:07 +0900</pubDate>
		</item>
		<item>
			<title>Unix에서 오라클 9.2 TNS 재가동.</title>
			<link>http://u2m.kr/184</link>
			<description>오라클 계정 로그인 필&lt;br /&gt;
su - o~&lt;br /&gt;
[/oracle/app/oracle/product/920/network/admin]$vi tnsnames.ora &lt;br /&gt;
수정&lt;br /&gt;
&lt;br /&gt;/* 오라클 tns 중지*/&lt;br /&gt;
[/oracle/app/oracle/product/920/network/admin]$lsnrctl stop&lt;br /&gt;
&lt;br /&gt;/* 오라클 tns 시작*/&lt;br /&gt;
[/oracle/app/oracle/product/920/network/admin]$lsnrctl start&lt;br /&gt;
&lt;br /&gt;/* 오라클 tns 구동여부 체크*/&lt;br /&gt;
[/oracle/app/oracle/product/920/network/admin]$ps -ef | grep lsnr*&lt;br /&gt;
&amp;nbsp; oracle&amp;nbsp;xxxx&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp; 0&amp;nbsp; 11:11:54&amp;nbsp; pts/2&amp;nbsp; 0:00 /oracle/app/oracle/product/920/bin/tnslsnr LISTENER -inherit &lt;br /&gt;
&amp;nbsp; oracle&amp;nbsp;xxxx xxx&amp;nbsp;&amp;nbsp; 0&amp;nbsp; 11:12:02&amp;nbsp; pts/2&amp;nbsp; 0:00 grep lsnr* &lt;br /&gt;</description>
			<category>ORACLE</category>
			<author>by jadunara(Nam 경탁) 나는너의힘</author>
			<guid>http://u2m.kr/184</guid>
			<comments>http://u2m.kr/184#entry184comment</comments>
			<pubDate>Fri, 22 Jul 2011 11:32:36 +0900</pubDate>
		</item>
		<item>
			<title>자바 개발자와 시스템 운영자를 위한 트러블 슈팅 이야기</title>
			<link>http://u2m.kr/183</link>
			<description>http://www.aladin.co.kr/shop/wproduct.aspx?ISBN=8979148305&lt;br /&gt;</description>
			<category>읽어야 할책</category>
			<author>by jadunara(Nam 경탁) 나는너의힘</author>
			<guid>http://u2m.kr/183</guid>
			<comments>http://u2m.kr/183#entry183comment</comments>
			<pubDate>Tue, 12 Jul 2011 12:44:45 +0900</pubDate>
		</item>
		<item>
			<title>자바 개발자를 위한 이클립스 바이블</title>
			<link>http://u2m.kr/182</link>
			<description>&lt;div&gt;
http://www.aladin.co.kr/shop/wproduct.aspx?ISBN=8945074023&lt;br /&gt;
&lt;/div&gt;</description>
			<category>읽어야 할책</category>
			<author>by jadunara(Nam 경탁) 나는너의힘</author>
			<guid>http://u2m.kr/182</guid>
			<comments>http://u2m.kr/182#entry182comment</comments>
			<pubDate>Mon, 11 Jul 2011 12:56:07 +0900</pubDate>
		</item>
		<item>
			<title>협상의 법칙 1,2</title>
			<link>http://u2m.kr/181</link>
			<description>&lt;a class=&quot;bo&quot; href=&quot;http://www.aladin.co.kr/shop/wproduct.aspx?ISBN=8958611227&quot;&gt;허브 
코헨, 협상의 법칙 1&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;a class=&quot;bo&quot; href=&quot;http://www.aladin.co.kr/shop/wproduct.aspx?ISBN=8958610042&quot;&gt;협상의 법칙 2&lt;/a&gt; &lt;br /&gt;</description>
			<category>읽어야 할책</category>
			<author>by jadunara(Nam 경탁) 나는너의힘</author>
			<guid>http://u2m.kr/181</guid>
			<comments>http://u2m.kr/181#entry181comment</comments>
			<pubDate>Thu, 07 Jul 2011 12:52:26 +0900</pubDate>
		</item>
		<item>
			<title>전문가를 위한 오라클 데이터베이스 아키텍처(제2판)</title>
			<link>http://u2m.kr/180</link>
			<description>&lt;span class=&quot;sub_community_date&quot;&gt;&lt;font color=&quot;#000000&quot; face=&quot;돋움&quot; size=&quot;3&quot;&gt;&lt;b&gt;전문가를 위한 오라클 데이터베이스 아키텍처(제2판)&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;br /&gt;
http://kangcom.com/sub/view.asp?sku=201106140003&lt;br /&gt;</description>
			<category>읽어야 할책</category>
			<author>by jadunara(Nam 경탁) 나는너의힘</author>
			<guid>http://u2m.kr/180</guid>
			<comments>http://u2m.kr/180#entry180comment</comments>
			<pubDate>Tue, 05 Jul 2011 09:49:41 +0900</pubDate>
		</item>
		<item>
			<title>프로그래머의 길, 멘토에게 묻다</title>
			<link>http://u2m.kr/179</link>
			<description>http://www.aladin.co.kr/shop/wproduct.aspx?ISBN=8991268803&amp;amp;ttbkey=ttbkoko88290226001&amp;amp;COPYPaper=1&lt;br /&gt;
&lt;br /&gt;</description>
			<category>읽어야 할책</category>
			<author>by jadunara(Nam 경탁) 나는너의힘</author>
			<guid>http://u2m.kr/179</guid>
			<comments>http://u2m.kr/179#entry179comment</comments>
			<pubDate>Fri, 01 Jul 2011 09:53:31 +0900</pubDate>
		</item>
		<item>
			<title>프록시, 프록시 패턴, 데코레이터 패턴</title>
			<link>http://u2m.kr/178</link>
			<description>출처 : http://ohgyun.com/313&lt;br /&gt;
&lt;br /&gt;(아래 부분은 직접 타이핑 한것 입니다;)&lt;br /&gt;
&lt;br /&gt;프록시 : 자신이 클라이언트가 사용하려고 하는 실제 대상인 것처럼 위장해서 클라이언트의 요청을 받아준다.&lt;br /&gt;
대리자, 대리인과 같은 역할을 한다고 해서 프록시(proxy)라고 부른다.&lt;br /&gt;
&lt;br /&gt;프록시의 특징은 타깃과 같은 인터페이스를 구현햇다는 것과, 프록시가 타깃을 제어할 수 잇는 위치에 있다는 것이다.&lt;br /&gt;
&lt;br /&gt;프록시는 사용목적에 따라 두 가지로 구분할수 있다.&lt;br /&gt;
a)클라이언트가 타깃에 접근하는 방법을 제어하기 위함(--&amp;gt; 프록시 패턴)&lt;br /&gt;
b)타깃에 부가적인 기능을 부여해주기 위함.(--&amp;gt; 데코레이터 패턴)&lt;br /&gt;
&lt;br /&gt;데코레이터 패턴: 타깃에 부가적은 기능을 런타임시(Runtime)시 다이내믹하게 부여해주기 위해 프록시를 사용하는 패턴&lt;br /&gt;
&lt;br /&gt;프록시 패턴:&lt;br /&gt;
&amp;nbsp;프록시 패턴의 프록시는 타깃의 기능을 확장하거나 추가히지 않는다.&lt;br /&gt;
대신 클라이언트가 타깃에 접근하는 방식을 변경해준다.&lt;br /&gt;
타깃의 기능 자체에는 관여하지 않으면서 접근하는 방법을 제어해주는 프록시를 이용하는 것이다.&lt;br /&gt;
(따라서 프록시 패턴의 프록시는 코드에서 자신이 만들거나 접근할 타깃의 구체적인 클래스 정보를 알고 있는 경우가 많다.)&lt;br /&gt;
&lt;br /&gt;요약:&lt;br /&gt;
&amp;nbsp;프록시 : 클라이언트와 사용 대상 사이에 대리 역할을 맡은 오브젝트를 두는 방법을 총칭&lt;br /&gt;
&amp;nbsp;데코레이터 패턴 : 타깃에 부가적인 기능을 부여해주기 위해 프록시를 사용하는 패턴.&lt;br /&gt;
&amp;nbsp;프록시 패턴 : 타깃에 대한 접근 방법을 제어하려는 목적을 가지고 프록시를 사용하는 패턴.&lt;br /&gt;</description>
			<category>JAVA</category>
			<category>decorator</category>
			<category>Decorator Pattern</category>
			<category>proxy</category>
			<category>proxy pattern</category>
			<category>데코레이터</category>
			<category>프록시</category>
			<author>by jadunara(Nam 경탁) 나는너의힘</author>
			<guid>http://u2m.kr/178</guid>
			<comments>http://u2m.kr/178#entry178comment</comments>
			<pubDate>Thu, 30 Jun 2011 11:04:00 +0900</pubDate>
		</item>
		<item>
			<title>AOP(Aspect Oriented Programming) in Java</title>
			<link>http://u2m.kr/177</link>
			<description>메인 출처 : &lt;a href=&quot;http://ukja.tistory.com/&quot; target=&quot;_blank&quot;&gt;http://ukja.tistory.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
서브 출처 : http://blog.naver.com/ypark197?Redirect=Log&amp;amp;logNo=90093937410&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;&lt;font color=&quot;#cc6714&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-SIZE: 14pt&quot;&gt;AOP(Aspect Oriented Programming) in Java - Part I&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;br /&gt;
&lt;div class=&quot;article&quot;&gt;
&lt;div style=&quot;FONT-FAMILY: 985643_10; FONT-SIZE: 10pt&quot; class=&quot;view&quot;&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;Enterprise Java 환경에서 
최근 가장 주목받는 기술 중 하나는 AOP, 즉 Aspected Oriented Programming 이다. AOP가 주목받는 
이유는 Enterprise Java 시스템이 맞닥뜨리고 있는 복잡성때문이다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Verdana; FONT-SIZE: 12pt&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;(AOP의 정의에 대해서는 &lt;/span&gt;&lt;a target=&quot;_blank&quot; class=&quot;con_link&quot; href=&quot;http://en.wikipedia.org/wiki/Aspect-oriented_programming&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Verdana; FONT-SIZE: 12pt&quot;&gt;&lt;font color=&quot;#cc6714&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;Wikipedia&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;를 참조하기 바란다)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Verdana; FONT-SIZE: 12pt&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;AOP는 전통적인 객체 지향의 
프로그래밍(Object Oriented Programming. 이하 OOP)이 실패한 곳에서 진가를 발휘한다. OOP 언어들은 
견고한 철학과 다양하고 유연한 프로그래밍 기법, 다양한 패턴들의 체계화등을 제공한다. 프로그래머들은 이로 인해 절차식 프로그래밍 
언어들을 사용할 때에 비해 훨씬 직관적이고 체계적이고 모듈화된 구현을 할 수 있게 되었다. 만세!!! &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 12pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;하지만,불행히도 OOP 언어가 해결하지 못하는 몇가지 중요한 문제점&lt;/span&gt;&lt;/strong&gt;들이 대두되었다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;가장 간단하고 직관적인 예로 로깅(Logging) 기능을 생각해 보자. OOP 언어의 대표격인 Java에서의 전통적인 Logging 구현 방법은 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 12pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;public class OrderManager {&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 12pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;public void orderItem(OrderItem oi) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;Logger log = Logger.getLogger(&quot;order&quot;);&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;log.info(&quot;orderItem started...&quot;);&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;// do something&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;try {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;doSomething(oi);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;} catch(Exception ex) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;log.info(&quot;Error : &quot; + ex.getMessage());&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;} finally {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;log.info(&quot;orderItem finished...&quot;);&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Verdana; FONT-SIZE: 12pt&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;Logger라는 객체를 이용해서 로깅 기능을 잘 모듈화했지만, 실제 이 객체를 사용하다보면 몇가지 심각한 문제를 만나게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;FONT-FAMILY: 돋움&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;로직을 구현하는 핵심 소스에 많은 수의 로깅 관련 소스가 삽입됨으로써 소스의 가독성과 간결함을 심하게 훼손한다.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;FONT-FAMILY: 돋움&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;로깅을 남기는 방법이나 시점, 위치 등을 바꾸려면 거의 모든 소스파일을 변경해야 한다. &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;위와 같이 &quot;어떻게 하면 로깅을 남기는 기능을 핵심 로직과 무관하게 구분해서 구현할 수 있을까&quot;라는 간단하고 명확한 요구에 대해 OOP는 적절한 대답을 하지 못한다.여기가 AOP가 개입되는 부분이다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 12pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;AOP는 객체를 프로그래밍 단위로 하지 않고, 특정 사건의 발생 양상(또는 상황/국면)을 프로그래밍의 단위로 한다. 이런 의미에서 AOP를 한글로 번역하자면상황 지향 프로그래밍이 가장 적절한 것으로 생각된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 12pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;위의 로깅 예제에서는 다음과 같은 상황들이 펼쳐진다.&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li style=&quot;FONT-FAMILY: 돋움&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;orderItem 메소드가 시작하는 상황에 로그를 기록하라.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;FONT-FAMILY: 돋움&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;orderItem 메소드가 끝나는상황에 로그를 기록하라.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;FONT-FAMILY: 돋움&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;orderItem 메소드내에서 Exception이 발생하는 상황에 로그를 기록하라.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;AOP에서는 위의 상황들을 정의할 수 있고, 이런 상황이 발생했을 때 수행할 작업을 정의할 수 있다. 즉, 핵심 로직과 무관하게 핵심 로직을 수행하는 과정에서 발생하는 상황들을 적절하게 다룰 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 12pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;Java AOP의 대표적인 언어인 AspectJ를 이용하면위의 소스를 다음과 같이 변경할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 12pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;// &lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;놀랍게도&lt;/span&gt;&lt;/strong&gt; 핵심 로직에서는 Logging 관련된 부분이 완전히 제거된다.&lt;/span&gt;&lt;/p&gt;
&lt;span style=&quot;FONT-SIZE: 12pt&quot;&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;public class OrderManager {&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 12pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;public void orderItem(OrderItem oi) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;// do something&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;try {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;doSomething(oi);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;} catch(Exception ex) { }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 12pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;// 핵심 로직에서 발생하는 &lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;상황에 대한 로직을 구현&lt;/span&gt;&lt;/strong&gt;한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;public &lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;aspect&lt;/span&gt;&lt;/strong&gt; LoggingAspect {&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;// OrderManger내에서 발생하는 모든 Method Call에 대해&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 12pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;pointcut&lt;/span&gt;&lt;/strong&gt; methodExec() :&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;call(* *.*(..)) &amp;amp;&amp;amp;within(OrderManager);&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;//Method Call 시작시수행할 일&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;before() : methodExec()&lt;/span&gt;&lt;/strong&gt; {&lt;br /&gt;
Logger log = Logger.getLogger(&quot;order&quot;);&lt;br /&gt;
log.info(thisJoinPointStaticPart.getSignature() + &quot; started...&quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;//Method Call 종료시 수행할 일&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;after() returning : methodExec()&lt;/span&gt;&lt;/strong&gt; {&lt;br /&gt;
Logger log = Logger.getLogger(&quot;order&quot;);&lt;br /&gt;
log.info(thisJoinPointStaticPart.getSignature() + &quot; finished...&quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;// Exception 발생시&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;after() throwing(RuntimeException ex) : methodExec()&lt;/span&gt;&lt;/strong&gt; {&lt;br /&gt;
Logger log = Logger.getLogger(&quot;order&quot;);&lt;br /&gt;
log.info(&quot;Error : &quot; + ex.getMessage());&lt;br /&gt;
}&lt;br /&gt;
}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 12pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;span style=&quot;FONT-SIZE: 12pt&quot;&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;위와 같이 AOP를 이용하면 로깅과 같은
 Aspect라는 이름으로 비핵심 로직을 핵심 로직에서 완전히 분리할 수 있으며, 이후 로깅과 관련된 변경 사항은 핵심 로직을 
담당하는 소스의 변경이 아닌 Aspect의 변경만으로 이루어진다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 12pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;지금까지 AOP의 등장 배경에 대해 간략하게 살펴보았다. 다음 글을 통해 AOP의 개념 및 AOP의 대표 구현체인 AspectJ에 대해 좀 더 상세하게 논의해보자.&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 18pt&quot;&gt;AOP의 개념 - part2&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;AOP에서는 위와 같이 핵심 로직 
구현에서 부가적으로 처리해야 하는 작업들을 Concern(걱정/관심)이라고 부른다. Concern의 특징은 핵심 로직을 구현하는 
여러 객체들에 걸쳐져 있다는 것이다. 가령 로깅 Concern은 핵심 로직을 구현하는 모든 객체와 관련되어 있다. 이런 의미에서는
 흔히 Cross-cutting Concern이라는 용어를 쓴다. 우리말로 번역하면 &quot;횡단-절단 관심&quot; 정도가 될 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 돋움; font-size: 11pt;&quot;&gt;그림으로 표현하면 아래와 같지 않을까...?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin:0&quot;&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfile4.uf.tistory.com/image/203A71404E0AAE1E255A82&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;concern_ukja.gif&quot; height=&quot;407&quot; width=&quot;538&quot;/&gt;&lt;/div&gt;&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;즉 AOP는 객체가 구현하는 핵심 로직에
 존재하는 여러 가지 Concern(관심거리, 혹은 걱정거리)을 구현하기 위한 프로그래밍 방법론으로 이해할 수 있다. 핵심 로직을
 수행하는 과정에서 발생하는 로그 기록이라는 걱정 거리, 데이터베이스와의 통신 과정에서 발생하는 트랜잭션 관리라는 걱정 거리, 
핵심 로직을 수행하는 과정에서 발생하는 성능을 측정하고자 하는 걱정 거리 등... 여러 객체와 행위를 
관통하는(Cross-cutting)하는 걱정거리를 보다 손쉽게 구현하고자 하는 것이 바로 AOP의 핵심인 것이다.&lt;/span&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 14pt&quot;&gt;AOP의 용어&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;AOP에 대해 더 상세하게 논의하기 전에 AOP에서 사용하는 용어에 대해 간략하게 정리해보자. 용어를 정확하게 이해해야만 AOP의 기법을 이해할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;(정확하게 말하면 아래 용어는 AOP의 용어가 아니라 AspectJ의 용어이다. 하지만 AspectJ가 AOP의 사실상의 표준이기 때문에 무방하다고 간주한다)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;FONT-FAMILY: 돋움&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;joinpoint :&lt;/span&gt;&lt;/strong&gt; 프로그램 수행 과정에서의 특정 지점. 생성자의 호출, 메소드의 호출, 오브젝트 필드에 대한 접근 등의 대표적인 joinpoint들이다.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;FONT-FAMILY: 돋움&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;pointcut :&lt;/span&gt;&lt;/strong&gt; joinpoint와매칭하고자 하는 조건과 그 상황에서의 값들&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;FONT-FAMILY: 돋움&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;advice :&lt;/span&gt;&lt;/strong&gt; pointcut에 의해매칭된 joinpoint에서 실행할 작업&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;FONT-FAMILY: 돋움&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;aspect :&lt;/span&gt;&lt;/strong&gt; pointcut과 advice의 집합체. 즉 특정 상황(pointcut)과 그 상황에서 수행할 작업(advice)의 집합&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;FONT-FAMILY: 돋움&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;weaving :&lt;/span&gt;&lt;/strong&gt; aspect과 핵심 로직을 섞는(weave) 것을 의미&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 돋움; font-size: 11pt;&quot;&gt;이를 그림으로 표현하면 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 돋움; font-size: 11pt;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin:0&quot;&gt;&lt;/p&gt;
&lt;p style=&quot;margin:0&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;img src=&quot;http://cfile24.uf.tistory.com/original/162AD4594E0AB20E16F7E8&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;aspect_ukja.gif&quot; height=&quot;496&quot; width=&quot;748&quot;/&gt;&lt;/div&gt;&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p style=&quot;margin:0&quot;&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p style=&quot;margin:0&quot;&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p style=&quot;margin:0&quot;&gt;&lt;/p&gt;
&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;Weaving(직조)은 Aspect와 
Object, 또는 Concern과 Logic을, 또는 횡과 종을 합친다는 의미이다. 실을 횡과 종으로 이어서 천을 짜는 것을 
생각하면 된다. 가령 AspectJ는컴파일시 Weaving과 로딩타임시 Weaving을 제공한다. &lt;/span&gt;
&lt;ul&gt;
&lt;li style=&quot;FONT-FAMILY: 돋움&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;컴파일시 Weaving : Java/AspectA 소스파일을 컴파일하는 시점에 Weaving을 수행&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;FONT-FAMILY: 돋움&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;로딩타임시 Weaving: Java Class 파일을 ClassLoader에 의해 로딩하는 시점에 Weaving을 수행&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;다음으로 계속...&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 14pt&quot;&gt;AspectJ - part3&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;AspectJ는 Java에서의 AOP 언어의 사실상의 표준이다. Spring AOP, JBoss AOP 등 새로운 AOP 컴포넌트들이 있지만, 모두 AspectJ의 서브셋으로 보아도 무방할 것이다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;AspectJ의 특징과 역사는 &lt;a target=&quot;_blank&quot; class=&quot;con_link&quot; href=&quot;http://en.wikipedia.org/wiki/AspectJ&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;font color=&quot;#cc6714&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;Wikipedia&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/a&gt;에 잘 기술되어 있다. (고맙게도 ...)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;현재 AspectJ은 Eclipse 
Project의 서브 프로젝트로 관리되고 있으며, IBM 영국 연구소의 개발자들이 핵심 멤버로 활동하고 있다. 따라서 
Eclipse가 계속 존재하는 한, AspectJ 또한 계속 유지보수가 이루어질 것을 기대할 수 있다. ^^&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;AspectJ는 1.5 이후에 큰 변화를 겪었는데, 바로 &lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;AspectWerkz라는 이름의 AOP 프로젝트를 흡수&lt;/span&gt;&lt;/strong&gt;한 것이다. 이 흡수로 인해 AspectJ는 1) 로드타임시 Weaving(Load Time Weaving. LTW) 지원, 2) Java 5 스타일의 Annotation 지원이라는 새롭고 강력한 특징을 가지게 되었다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;이 중, 특히 LTW 기능에 주목할 
필요가 있다. 이전 버전의 AspectJ에서는 반드시 AspectJ가 제공하는 컴파일러를 이용해 사용자가 작성한 Class 
파일이나 Jar 파일에 대해 Weaving 작업을 수행해야 했다. 한 프로젝트에서 모든 소스를 다 스스로 작성하는 경우는 
모르겠지만, 다른 써드 파티가 제공하는 라이브러리를 사용하는 경우에는 확실히 번거로운 점이 있다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;LTW 기능을 이용하면 사용자의 Class 파일을 로딩하는 시점에(즉 실행시) Aspect를 Class와Weaving할 수 있다. 따라서 별도의번거로운 컴파일 과정을 거치지 않아도된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;하지만!!! 속도 면에서는 컴파일시Weaving이 더유리할 수 있다는 점만은 기억해두자.특히 프로그램 실행 초기에 클래스가 로딩되는 속도가 눈에띄게느려질 수 있다는 점은 기억해둘 필요가 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;AspectJ 다운받고 사용하기&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;AspectJ는 &lt;a target=&quot;_blank&quot; class=&quot;con_link&quot; href=&quot;http://www.eclipse.org/aspectj/index.php&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;font color=&quot;#cc6714&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;http://www.eclipse.org/aspectj/index.php&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/a&gt;에서 다운받을 수 있다. 다음 두가지를 다운받아야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;FONT-FAMILY: 돋움&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;AspectJ 1.5.3 - AspectJ 메인 릴리즈&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;FONT-FAMILY: 돋움&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;AJDT - AspectJ Development Tools. Eclipse Project내에서 AspectJ를 사용할 수 있는 플러그인을 제공&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;AJDT를 사용하면 Eclipse의 풍부한 기능과 함께 비주얼하게 AspectJ를 사용할 수 있으므로 보다 손쉽게 AspectJ에 접근할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;AJDT를 설치하고 나면, 아래 그림과 같이 AspectJ를 기본으로 하는 프로젝트와 Aspect를 손쉽게 생성할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-family: 돋움;&quot;&gt;&amp;lt;&amp;lt; AspectJ 프로젝트 생성&amp;gt;&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 돋움; font-size: 11pt;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin:0&quot;&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfile7.uf.tistory.com/image/203A35424E0AAE4C31E558&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;newaspect_ukja.gif&quot; height=&quot;377&quot; width=&quot;435&quot;/&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;strong&gt;&lt;img src=&quot;http://blogfiles12.naver.net/data28/2007/7/27/203/newaspect_ukja.gif&quot; style=&quot;cursor: pointer;CURSOR: pointer&quot; id=&quot;data28/2007/7/27/203/newaspect_ukja.gif&quot; height=&quot;377&quot; width=&quot;435&quot;&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;&amp;lt;&amp;lt; Aspect 생성&amp;gt;&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 돋움; font-size: 11pt;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin:0&quot;&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfile7.uf.tistory.com/image/113A35424E0AAE4C32EAE8&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;newaspectcreate_ukja.gif&quot; height=&quot;383&quot; width=&quot;575&quot;/&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;다음 파트에서 AJDT를 이용해 간단한 AOP 샘플을 구현할텐데, 다음과 같은 Concern을 해결하는 것을 목표로 한다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;em&gt;&lt;font style=&quot;BACKGROUND-COLOR: #ffffff&quot; color=&quot;#1b496a&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;&quot;
현재 운영 중인 시스템에서 코드상의 오류로 인해 Exception이 계속해서 발생한다. Exception이 발생할 때마다 발생한 
Exception을 파악하고, Exceptioon의 발생 시점, 발생 이유, 발생 시의 Stack Trace 등을 기록하고자 
한다.&quot;&lt;/span&gt;&lt;/font&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;즉, Exception 처리라는 걱정 거리를 좀 더 효과적으로 처리할려고 한다. 언뜻 어려워 보이는 이 걱정거리가 AOP에서는 얼마나 쉽게 해결가능한지 살펴보게 될 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 14pt&quot;&gt;AspectJ에서 Concern 구현 하기 - part4&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;아래에 심플한(?) 비지니스 로직을 구현하는 객체가 있다. 우리의 걱정 거리는 비지니스 로직에서 Exception이 발생할 때마다 상세한 발생 상황을 기록하는 것이다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 돋움; font-size: 11pt;&quot;&gt;우리의 &lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;비지니스 로직&lt;/span&gt;&lt;/strong&gt;은 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 돋움; font-size: 11pt;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin:0&quot;&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfile4.uf.tistory.com/image/163A35424E0AAE4B2C8921&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;bizlogic_ukja.gif&quot; height=&quot;444&quot; width=&quot;566&quot;/&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;이 비지니스 로직에 대한 우리의 Concern을 처리해야 하는 상황은 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;FONT-FAMILY: 돋움&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;ExceptionGenerator의 로직을 수행하는 과정에서 Exception이 발생하면 이것을 캡쳐해서 기록하고 싶다.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;FONT-FAMILY: 돋움&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;이 때 어떤 메소드를 호출하다가 Exception이 발생했는지, Exception의 종류는 무엇인지 등의 정보가 종합적으로 기록하고 싶다.&lt;br /&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;이 상황을 AOP 없이 처리하려면 제 아무리 자바의 고수라고 하더라도 다음과 같은 방식으로 일일이 소스를 변경해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;try { doSomething1() } catch(Exception ex) {&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;logger.log(&quot;Error &quot; + ex + &quot; occurred when executing ExceptionGenerator.doSomething1()...&quot;);&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;비록 Java Logging API나 Log4j 같은 라이브러리들이 이러한 작업을 처리하는데 상당히 도움이 되지만, 핵심 로직안에 우리의 Concern을 처리하는 로직을 넣어야 한다는 기본적인 사실에는 전혀 변화가 없다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;하지만, AspectJ를 사용하면... ? 핵심 로직에는 Exception Handling에 관련된 소스를 전혀 추가할 필요없이 다음과 같은 형태의&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt; Aspect만을 만들어주면 된다&lt;/span&gt;&lt;/strong&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;Exception Aspect Version 1&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 돋움; font-size: 11pt;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin:0&quot;&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfile6.uf.tistory.com/image/183A35424E0AAE4C2D5FCA&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;exceptionaspect1_ukja.gif&quot; height=&quot;208&quot; width=&quot;485&quot;/&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;매우 심플한 Aspect지만 두 가지의 핵심적인 정보를 담고 있는 완전한 형태의 Aspect이다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;FONT-FAMILY: 돋움&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;pointcut :&lt;/span&gt;&lt;/strong&gt; 모든객체의 메소드콜을 횡단으로 매치시키는 call (* *.*(..)) 이라는 pointcut이 callpoint라는 이름으로 정의되어 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;FONT-FAMILY: 돋움&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;after advice :&lt;/span&gt;&lt;/strong&gt; callpoint pointcut에서 Exceptoin이 발생한 이후(after + throwing) 수행할 advice가 정의되어 있다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;AspectJ에서는 대부분의 
Concern이 pointcut과 advice의 조합으로 이루어진다. 즉 어떤 지점(pointcut)에서 어떤 일(advice)를
 수행할 지가 바로 AspectJ가 구현하는 Concern에 대한 해결책이 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 돋움; font-size: 11pt;&quot;&gt;위의 ExceptionAspect와 ExceptionGenerator를 Weaving해서 수행하면 다음과 같은 결과가 나온다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 돋움; font-size: 11pt;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin:0&quot;&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfile9.uf.tistory.com/image/133A35424E0AAE4D33797B&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;runas_ukja.gif&quot; height=&quot;115&quot; width=&quot;529&quot;/&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;img src=&quot;http://blogfiles13.naver.net/data12/2007/7/27/60/runas_ukja.gif&quot; style=&quot;cursor: pointer;CURSOR: pointer&quot; id=&quot;data12/2007/7/27/60/runas_ukja.gif&quot; height=&quot;115&quot; width=&quot;529&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;결과1&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p style=&quot;margin:0&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;img src=&quot;http://cfile24.uf.tistory.com/image/121BA43F4E0AAFAE1B408B&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;result1_ukja.gif&quot; height=&quot;69&quot; width=&quot;252&quot;/&gt;&lt;/div&gt;&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;이제 ExceptionAspect를 좀 더 다듬어서 보다 완전한 형태의 정보를 얻을 수 있도록 해보자. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-family: 돋움;&quot;&gt;Exception Aspect Version 1&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: 돋움; font-size: 11pt;&quot;&gt;&lt;p style=&quot;margin:0&quot;&gt;&lt;/p&gt;
&lt;p style=&quot;margin:0&quot;&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfile27.uf.tistory.com/original/15141E524E0AB24B17BFF0&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;exceptionaspect2_ukja.gif&quot; height=&quot;346&quot; width=&quot;724&quot;/&gt;&lt;/div&gt;&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;img src=&quot;http://blogfiles3.naver.net/data11/2007/7/27/146/exceptionaspect2_ukja.gif&quot; style=&quot;cursor: pointer;CURSOR: pointer&quot; id=&quot;data11/2007/7/27/146/exceptionaspect2_ukja.gif&quot; height=&quot;346&quot; width=&quot;724&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;더욱 세련된 모양의 Aspect가 구현되었음을 확인할 수 있다. Version 1에 비해 다음과 같은 특징들이 추가되었다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;FONT-FAMILY: 돋움&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;After advice에서 Exception발생시 Exception 객체를 받는다. 이렇게 받은 객체를 이용해서 필요한 정보를 추출한다.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;FONT-FAMILY: 돋움&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;thisJoinPointStaticPart (또는 thisJoinPoint.getStaticPart())를 이용해 어떤 지점에서 발생한 Exception인지를 알아낸다. &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;위의 Aspect를 보고 &lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;&quot;아... 정말 내가 원하던 방법론이다&quot;&lt;/span&gt;&lt;/strong&gt;라고 감탄을 했다면 이미 일류 프로그래머이거나 일류 프로그래머가 될 잠재력을 가지고 있는 사람일 것이다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;AspectJ 혹은 AOP를 현재 프로젝트에 사용하고 싶은 욕구가 이는가...!!!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 14pt&quot;&gt;AspectJ의 Load Time Weaving - part5&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-SIZE: 14pt&quot;&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;ApsectJ 1.5는 &lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;AspectWerkz라는 신흥 AOP 컴포넌트를 흡수하면서 Load Time Weaving 기능을 크게 향상&lt;/span&gt;&lt;/strong&gt;시켰다. Load Time Weaving이란 말 그대로 클래스가 로드되는 시점에 Weaving 작업을 수행하는 것을 의미한다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;전통적으로 AspectJ에서는 
ajc(AspectJ Compiler)라는 컴파일러를 사용해서 사용자가 작성한 Class 파일이나 Jar 파일을 컴파일 시간에 
Weaving하는 방식을 지원했다. 비록 이 방법이 아직까지도 가장 보편적이고 또 편리한 방법이긴 하지만, 컴파일시 
Weaving은 역시 불편한 방법이다. 하지만!!! 성능 면에서는 가장 유리한 방법이라는 것은 다시 한번 염두에 두자&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 돋움; font-size: 11pt;&quot;&gt;AspectJ에서 Load Time Weaving이 적용되는 방식은 아래 그림과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 돋움; font-size: 11pt;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin:0&quot;&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfile3.uf.tistory.com/image/153A35424E0AAE4B2B6D80&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;aspectjltw_ukja.gif&quot; height=&quot;325&quot; width=&quot;542&quot;/&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://blogfiles5.naver.net/data18/2007/7/29/164/aspectjltw_ukja.gif&quot; style=&quot;cursor: pointer;CURSOR: pointer&quot; id=&quot;data18/2007/7/29/164/aspectjltw_ukja.gif&quot; height=&quot;325&quot; width=&quot;542&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;aop.xml&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 돋움; font-size: 11pt;&quot;&gt;aop.xml 파일은 LTW의 룰을 지정하는 역할을 한다. 즉 어떤 Aspect를 어떻게 Weaving 할 것인지 지정할 수 있다. &lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin:0&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/163A35424E0AAE4B29587E&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;aop_xml_ukja.gif&quot; height=&quot;140&quot; width=&quot;415&quot;/&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;아래에 aop.xml의 간단한 예제가 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p style=&quot;margin:0&quot;&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;위의 aop.xml 파일은[aop.ltw.SimpleLTWAspect]라는 이름의 Aspect를 &lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;사용하며, 이 Aspect를 이용해서 Weaving을 수행할 것을 지정한다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;AspectJ의 LTW 모듈은 [클래스패스(Classpath)/META-INF]에 있는 모든 aop.xml 파일을 불러와서 Weaving 작업을 수행한다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;aop.xml이 제공하는 문법은 매우 
다양하고 강력하다. 어떤 Aspect를 어떤 타겟(비지니스 로직)에 대해 어떤 조건(pointcut)으로 사용할지를 자유롭게 
지정할 수 있다. 예를 들어 Abstract Aspect를 만든 후 aop.xml에서pointcut을 정의할 수도 있다. 
aop.xml을 사용하는 상세한 방법은 &lt;a target=&quot;_blank&quot; class=&quot;con_link&quot; href=&quot;http://www.eclipse.org/aspectj/doc/released/devguide/ltw.html&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;font color=&quot;#cc6714&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;AspectJ Manual&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/a&gt;을 참조한다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;LTW의 간단한 예제&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 돋움; font-size: 11pt;&quot;&gt;아래에 간단한 Aspect가 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin:0&quot;&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfile7.uf.tistory.com/original/120DC0524E0AB1BC27882A&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;ltw_sampe_aspect_ukja.gif&quot; height=&quot;460&quot; width=&quot;911&quot;/&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p style=&quot;margin:0&quot;&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;img src=&quot;http://blogfiles8.naver.net/data11/2007/7/30/183/ltw_sampe_aspect_ukja.gif&quot; style=&quot;cursor: pointer;CURSOR: pointer&quot; id=&quot;data11/2007/7/30/183/ltw_sampe_aspect_ukja.gif&quot; height=&quot;373&quot; width=&quot;740&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;이 Aspect의 역할은 Method의 시작과 끝을 잡아서 수행 시간을 측정하는 것이다. 어플리케이션 성능 측정을 위한 가장 기본적인 기능을 구현할 것이라고 볼 수 있다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;이 Aspect를 다음과 같이 ajc를 이용해서 컴파일한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;em&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;c:aspectj1.5bin&lt;/span&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;ajc&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt; -1.5 -cp ../..;c:aspectj1.5libaspectjrt.jar SimpleLTWAspect.aj&lt;/span&gt;&lt;/em&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;컴파일에 성공하면 SimpleLTWApsect.class 파일이 생긴다. 이 Aspect 파일과 위에서 샘플로 사용한 aop.xml 파일을 이용해서 LTW을 수행하는 명령어는 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;(SimpleLTW 객체는 몇 개의 메소드를 반복적으로 호출하는 단순한 객체이다)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;em&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;java &lt;/span&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;-javaagent:aspectjweaver.jar&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt; -cp ../.. aop.ltw.SimpleLTW&lt;/span&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;아래 결과를 보면 우리가 원하는 대로 각 메소드를 실행하는데 걸린 시간이 계산되어 나오는 것을 알 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p style=&quot;margin:0&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/193A35424E0AAE4C305989&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;ltw_sample_result_ukja.gif&quot; height=&quot;289&quot; width=&quot;384&quot;/&gt;&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;위에서 본 간단한예제만으로도 AspectJ에서 제공하는 LTW의 유연함과 강력함을 느낄 수 있으리라 믿는다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;PS)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;Java 5 (JDK 1.5)부터는 
java.lang.instrument 패키지를 이용해서 Byte Code Instrumentation(BCI)을 직접적으로 
지원한다. 더 이상 BCI가 어둠의 자식이 아니라는 것을 의미한다.오히려 BCI가 Sun에서도 인정하는 보편적인 방법론임을 
의미한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;자연스럽게, AspectJ 1.5의 LTW도 이 기능을 이용한다. 위의 예에서 &lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;&quot;-javaagent:aspectjweaver.jar&quot;&lt;/span&gt;&lt;/strong&gt;
 JVM 옵션이 java.lang.instrument 패키지를 이용한다는 것을 의미한다. 즉, aspectjweaver.jar 
내에 클래스 로드 타임시 실시간으로 클래스를 Weaving하는 기능을 제공하는 Class Transformer가 존재한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;JDK 1.4에서는 VM 레벨에서 BCI가 지원되지 않는다.JDK 1.4라면 아래와 같은 형식으로 사용가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;java -classpath[aspectjweaver.jar] &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;-Djava.system.class.loader=org.aspectj.weaver.loadtime.WeavingURLClassLoader &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;-Daj.class.path=. -Daj.aspect.path=.[YourClass]&lt;/span&gt;&lt;span style=&quot;FONT-FAMILY: Verdana; FONT-SIZE: 11pt&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;또는 JRockit에서는 다음과 같은 JVM옵션을 사용할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 11pt&quot;&gt;-Xmanagement:class=org.aspectj.weaver.loadtime.JRockitAgent&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&lt;font color=&quot;#cc6714&quot;&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;AOP(Aspect Oriented Programming) in Java - Part 6&lt;/span&gt;&lt;/font&gt;&lt;/h2&gt;
&lt;div class=&quot;article&quot;&gt;
&lt;div style=&quot;FONT-FAMILY: 985643_10; FONT-SIZE: 10pt&quot; class=&quot;view&quot;&gt;
&lt;div style=&quot;FONT-FAMILY: 985643_10; FONT-SIZE: 10pt&quot; class=&quot;view&quot;&gt;
&lt;div style=&quot;FONT-FAMILY: 985637_10; FONT-SIZE: 10pt&quot; class=&quot;view&quot;&gt;
&lt;div style=&quot;FONT-FAMILY: 985637_10; FONT-SIZE: 10pt&quot; class=&quot;view&quot;&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;AOP와 AspectJ를 이용해서 할 수 있는 일은 실로 무궁구진하다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Verdana; FONT-SIZE: 12pt&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;비지니스 로직을 처리하는 과정에서 발생하는 관심거리나 걱정거리를 좀 더 효율적이고 체계적으로 처리하고자 한다면 AOP가 바로 대답이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Verdana; FONT-SIZE: 12pt&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;AOP를 이용해서 구현 가능한 몇 가지 사례를 끝으로 AOP에 관한 블로깅을 끝맺기로 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Verdana; FONT-SIZE: 12pt&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;로깅 :&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt; 각 조인포인트마다 적절한 로그를 남길 수 있다. &lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;프로파일링 :&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;
 각 조인포인트마다 수행되는 메소드 정보를 기록해서 프로파일링을 구현할 수 있다. 가령 자바 어플리케이션에서 수행되는 모든 
메소드에 대해 수행 시간을 측정하고자 한다면 AOP의 before/after/around advice를 이용해서 손쉽게 구현할 수
 있다. &lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;트랜잭션 관리 :&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;
 트랜잭션 관리에 관련된 모는 기능을 비지니스 로직에서 제거하고 AOP로 구현할 수 있다. EJB는 AOP의 개념을 사용하지 않고
 EJB 컨테이너를 이용해서 트랜잭션을 관리하는 기능을 제공하는 것으로 이해할 수 있다. 반면 Spring과 같은 경량 
프레임웍들을 EJB 컨테이너와 같은 무거운 방법대신 AOP를 사용해서 사용자가 작성한 비지니스 로직에 트랜잭션 관리에 필요한 
Bytecode를 직접 삽입하는 방식을 사용한다.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;코딩컨벤션 관리:&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;클
래스의 필드명을 항상 m_ 로 시작하게끔 규칙을 부여한다고 하자. 여러 명의 개발자들이 개발을 진행할 경우 이 규칙이 지켜지기는 
거의 불가능하다. 하지만 AOP의 필드 조인트포인트를 이용하면 컴파일 시점에 이러한 오류들을 모두 걸러낼 수 있다. AOP를 
이용하면 매우 복잡한 코딩 컨벤션 관리를 거의 자동화 할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-FAMILY: 돋움&quot;&gt;기타 등등... 오직 우리의 상상력에 의해서만 제약을 받는다!!!&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;국내 개발 프로젝트에서 AOP를 많이 사용하지 않는다고 해서 AOP가 무용하거나 현실과 동떨어진 것이라고 생각한다면 큰 오산이라는 것을 다시 한번 명심하자.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Verdana; FONT-SIZE: 12pt&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;Spring 프레임웍이 내부적으로 
트랜잭션 관리를 위해 AOP를 사용하고 있다. 따라서 여러분이 만일 Spring을 사용하고 있다면 이미 AOP를 사용하고 있는 
것이다. 그 외에도 대부분의 Application Server가 AOP를 이용해 사용자가 작성한 클래스 파일에 특정 기능을 
부여하는 기능을 곳곳에서 사용하고 있다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: Verdana; FONT-SIZE: 12pt&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 12pt&quot;&gt;앞서 다섯 편의 글을 통해 AOP의 강력함과 편리함을 조금이라도 느낄 수 있었기를 바라며, 국내의 개발 프로젝트에서 AOP를 사용하는 실제적인 사례를 목격하게 되기를 바래 본다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
			<category>SPRING</category>
			<author>by jadunara(Nam 경탁) 나는너의힘</author>
			<guid>http://u2m.kr/177</guid>
			<comments>http://u2m.kr/177#entry177comment</comments>
			<pubDate>Wed, 29 Jun 2011 14:04:43 +0900</pubDate>
		</item>
		<item>
			<title>오라클 특수문자 입력(sqlplus)</title>
			<link>http://u2m.kr/176</link>
			<description>&lt;h2&gt;출처 : http://www.oracleclub.com/lecture/1148&lt;br /&gt;
&lt;/h2&gt;&lt;h2&gt;&lt;br /&gt;
&lt;/h2&gt;&lt;h2&gt;Ampersand나 특수 문자를 갖는 데이타를 insert하는 방법&lt;/h2&gt;&lt;br /&gt;
&lt;br /&gt;&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;
    &lt;div class=&quot;codeContent panelContent&quot;&gt;
    &lt;pre class=&quot;code-xml&quot;&gt;-- 테스트 테이블 생성
SQL&amp;gt; CREATE TABLE test_str(
        val varchar2(10)
     );
 
 
-- 테이블에 아래와 같이 특수문자를 인서트 할경우
SQL&amp;gt; INSERT INTO test_str VALUES(&#039;Q&amp;amp;A&#039;);
a의 값을 입력하십시오: 
-- 이런 문장이 나옵니다..  
-- 특수문자를 갖는 데이터를 인서트 하기 위해서는 
-- 다음과 같은 세 가지 해결 방법이 있습니다.
    &lt;/pre&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt; &lt;/p&gt;
&lt;h4&gt; SET DEFINE OFF  &lt;/h4&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;
    &lt;div class=&quot;codeContent panelContent&quot;&gt;
    &lt;pre class=&quot;code-xml&quot;&gt; 
-- SQL*Plus에서 SET DEFINE OFF나 SET SCAN OFF를 실행하여 
-- Substitution Variable(&amp;amp;)을 Turn Off시킨다.

SQL&amp;gt; &lt;span class=&quot;code-keyword&quot;&gt;SET DEFINE OFF&lt;/span&gt;
SQL&amp;gt; INSERT INTO test_str VALUES(&#039;Q&amp;amp;A&#039;);

SQL&amp;gt; SELECT * FROM test_str;
     VAL
     ------
     Q&amp;amp;A
    &lt;/pre&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt; &lt;/p&gt;
&lt;h4&gt;  SET DEFINE % &lt;/h4&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;
    &lt;div class=&quot;codeContent panelContent&quot;&gt;
    &lt;pre class=&quot;code-xml&quot;&gt; 
-- SET DEFINE ON 상태로 유지 시키면서 Substitution Variable을 
-- 다른 Non-Alphanumeric 문자나 Non-White Space 문자(*, % 등등)로 
-- 대체시킨다. 
  
SQL&amp;gt; &lt;span class=&quot;code-keyword&quot;&gt;SET DEFINE&lt;/span&gt; %
SQL&amp;gt; INSERT INTO test_str VALUES(&#039;Q&amp;amp;A&#039;);
    &lt;/pre&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt; &lt;/p&gt;
&lt;h4&gt; SET ESCAPE ON  &lt;/h4&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;
    &lt;div class=&quot;codeContent panelContent&quot;&gt;
    &lt;pre class=&quot;code-xml&quot;&gt; 
-- SET ESCAPE ON 상태에서(DEFINE은 &amp;amp;로, SCAN은 ON 상태로 유지) 
-- 특수 문자 앞에 ESCAPE 문자인 BACKSLASH(&#039;\&#039;)를 붙인다.
 
SQL&amp;gt; &lt;span class=&quot;code-keyword&quot;&gt;SET ESCAPE ON&lt;/span&gt;
SQL&amp;gt; SHOW ESCAPE 
     ESCAPE &quot;\&quot; (hex 5c)
SQL&amp;gt; INSERT INTO test_str VALUES (&#039;Q\&amp;amp;A&#039;);
    &lt;/pre&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;&lt;br /&gt;
	</description>
			<category>ORACLE</category>
			<author>by jadunara(Nam 경탁) 나는너의힘</author>
			<guid>http://u2m.kr/176</guid>
			<comments>http://u2m.kr/176#entry176comment</comments>
			<pubDate>Tue, 28 Jun 2011 13:33:37 +0900</pubDate>
		</item>
		<item>
			<title>iframe resize</title>
			<link>http://u2m.kr/175</link>
			<description>&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; function autoResize(i){//i 는 document 의&amp;nbsp; element(iframe)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; try {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;var st = document.getElementById(&quot;contentFrame&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var iframeHeight= i.contentWindow.document.body.scrollHeight;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var iframeWidth=&amp;nbsp; i.contentWindow.document.body.scrollWidth;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (i).height=iframeWidth+20;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (i).height=iframeHeight+20;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } catch (e) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;var st = document.getElementById(&quot;contentFrame&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var iframeHeight= st.document.body.scrollHeight;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var iframeWidth=&amp;nbsp; st.document.body.scrollWidth;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; st.height=iframeWidth+20;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; st.height=iframeHeight+20;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;</description>
			<category>JS</category>
			<author>by jadunara(Nam 경탁) 나는너의힘</author>
			<guid>http://u2m.kr/175</guid>
			<comments>http://u2m.kr/175#entry175comment</comments>
			<pubDate>Fri, 17 Jun 2011 09:39:56 +0900</pubDate>
		</item>
		<item>
			<title>자바 쉘스크립트 실행.</title>
			<link>http://u2m.kr/174</link>
			<description>&lt;P&gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.InputStream;&lt;br /&gt;
import java.io.InputStreamReader;&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;
public class Test1 {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;public static void main(String args[]) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;Test1.getDiskSpace();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp;//서버의 쉘(UNIX) 또는 배치파일(WINDOW) 실행결과 가져오기&lt;br /&gt;
&amp;nbsp;public static void getDiskSpace() {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Process ps = Runtime.getRuntime().exec(&quot;d:/temp/view_direcotory.cmd&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; InputStream is = ps.getInputStream();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;InputStreamReader reader = new InputStreamReader(is);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;BufferedReader in = new BufferedReader(reader);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;StringBuffer sBuffer = new StringBuffer();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;char[] buf = new char[1024];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;int readcnt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;while((readcnt = in.read(buf,0,1024)) !=-1)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sBuffer.append(buf, 0, readcnt);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;in.close();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;reader.close();&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(sBuffer.toString());&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ps.destroy();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch(Exception e) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.printStackTrace();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
}&lt;/P&gt;</description>
			<category>JAVA</category>
			<author>by jadunara(Nam 경탁) 나는너의힘</author>
			<guid>http://u2m.kr/174</guid>
			<comments>http://u2m.kr/174#entry174comment</comments>
			<pubDate>Sat, 23 Apr 2011 14:24:52 +0900</pubDate>
		</item>
		<item>
			<title>weblogic classNotFoundException</title>
			<link>http://u2m.kr/173</link>
			<description>weblogic 에서&amp;nbsp;ClassNotFoundException 발생할경우&lt;br /&gt;
&lt;br /&gt;&amp;nbsp;&amp;lt;wls:container-descriptor&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;wls:servlet-reload-check-secs&amp;gt;3&amp;lt;/wls:servlet-reload-check-secs&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;wls:resource-reload-check-secs&amp;gt;-1&amp;lt;/wls:resource-reload-check-secs&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;wls:prefer-web-inf-classes&amp;gt;true&amp;lt;/wls:prefer-web-inf-classes&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;lt;/wls:container-descriptor&amp;gt;&lt;br /&gt;
&lt;br /&gt;참고자료 : &lt;A href=&quot;http://blog.anyframejava.org/?p=264&quot;&gt;http://blog.anyframejava.org/?p=264&lt;/A&gt;</description>
			<category>WebLogic</category>
			<author>by jadunara(Nam 경탁) 나는너의힘</author>
			<guid>http://u2m.kr/173</guid>
			<comments>http://u2m.kr/173#entry173comment</comments>
			<pubDate>Tue, 01 Feb 2011 11:35:33 +0900</pubDate>
		</item>
		<item>
			<title>아파치 DirectoryIndex 설정.</title>
			<link>http://u2m.kr/172</link>
			<description>index 파일을 설정할때 2개 이상일때.&lt;br /&gt;
&amp;lt;IfModule dir_module&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; DirectoryIndex index.html index.jsp&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;</description>
			<author>by jadunara(Nam 경탁) 나는너의힘</author>
			<guid>http://u2m.kr/172</guid>
			<comments>http://u2m.kr/172#entry172comment</comments>
			<pubDate>Tue, 01 Feb 2011 11:32:31 +0900</pubDate>
		</item>
		<item>
			<title>웹로직 아파치 연동</title>
			<link>http://u2m.kr/171</link>
			<description>&lt;P&gt;httpd.conf 의 제일 마지막에 추가.&lt;br /&gt;
&lt;br /&gt;# 웹로직 연동&lt;br /&gt;
# 1. 모듈 추가&lt;br /&gt;
LoadModule weblogic_module C:\bea\wlserver_10.0\server\plugin\win\32\mod_wl_22.so&lt;br /&gt;
# 2. 웹로직 포트 연동및 기타 연동&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;IfModule mod_weblogic.c&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WebLogicCluster localhost:7001&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ConnectTimeoutSecs 30&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ConnectRetrySecs 10&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DynamicServerList OFF&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Idempotent OFF&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MatchExpression *.jsp&lt;br /&gt;
&amp;nbsp;MatchExpression *.xxx&lt;br /&gt;
&amp;nbsp;MatchExpression *.yyy&lt;br /&gt;
&amp;nbsp;MatchExpression *.ddd&lt;br /&gt;
&amp;nbsp;MatchExpression /DDDD/XXX/*&lt;br /&gt;
&amp;nbsp;MatchExpression /DDDD/FFFFF&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Alias /DDDD/ &quot;D:/폴더/하위폴더/WebContent/&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Directory &quot;D:/폴더/하위폴더/WebContent/&quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Options Indexes FollowSymLinks MultiViews ExecCGI&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AllowOverride None&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Order allow,deny&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Allow from all&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/IfModule&amp;gt;&lt;/P&gt;</description>
			<category>WebLogic</category>
			<author>by jadunara(Nam 경탁) 나는너의힘</author>
			<guid>http://u2m.kr/171</guid>
			<comments>http://u2m.kr/171#entry171comment</comments>
			<pubDate>Thu, 30 Dec 2010 18:09:02 +0900</pubDate>
		</item>
		<item>
			<title>Log4J 설정방법 및 웹로직에서 사용방법</title>
			<link>http://u2m.kr/170</link>
			<description>&lt;br /&gt;
웹로직에서는 자체 Log4J 가 있기 때문에 별도 설정이 필요하다&lt;br /&gt;
override 하면 될것을...-_-;;&lt;br /&gt;
&lt;br /&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#e31600&gt;org.apache.log4j.PropertyConfigurator.configure(logPath);&amp;nbsp; 이것으로 하단에 참조...&lt;br /&gt;
&lt;/FONT&gt;&lt;/STRONG&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;A href=&quot;http://payoff.tistory.com/27&quot;&gt;&lt;STRONG&gt;http://payoff.tistory.com/27&lt;/STRONG&gt;&lt;/A&gt;&lt;br /&gt;
&lt;/P&gt;
&lt;P class=url&gt;&lt;A class=&quot;fil5 pcol2&quot; href=&quot;http://blog.naver.com/dalbong97/130021029647&quot; target=_blank&gt;&lt;FONT color=#0066cc&gt;&lt;STRONG&gt;http://blog.naver.com/dalbong97/130021029647&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;DIV class=&quot;post-sub ptr&quot;&gt;&lt;FONT color=#0066cc&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV id=post-view class=&quot;post-view pcol2&quot;&gt;
&lt;DIV style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 9pt&quot; class=view&gt;
&lt;DIV style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 9pt&quot; class=view&gt;
&lt;DIV style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 9pt&quot; class=view&gt;
&lt;DIV style=&quot;FONT-FAMILY: 돋움; FONT-SIZE: 9pt&quot; class=view&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;&lt;STRONG&gt;1. log4j란?&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;log4j는 프로그래머가 로그문의 출력을 다양한 대상으로 할 수 있도록 도와주는 도구이다.&lt;br /&gt;
애플리케이션에 문제가 생겼을 때, 로깅을 활성화하면 문제의 위치를 찾을 수 있으므로 도움이 된다. &lt;br /&gt;
log4j를 사용하면 애플리케이션의 실행코드를 수정하지 않고 런타임에 로깅의 활성화를 할 수 있다. &lt;br /&gt;
log4j 패키지는 성능상의 높은 비용을 들이지 않으면서도 배포코드에 로그문장을 남겨놓을 수 있도록 디자인되었다. &lt;br /&gt;
그러므로 로깅의 속도(정확히 말하자면 로깅을 하지 않을 때의 속도)가 중요하게 다루어졌다.&lt;br /&gt;
동시에 로그 결과는 짧은 시간에 감당하기 어렵게 될만큼 커질 수 있다. &lt;br /&gt;
log4j의 독특한 특징 중 하나는 계층적 로거라는 개념이다. &lt;br /&gt;
로거를 사용하면, 어떤 로그문이 출력되게 할 지 임의의 단위로 조정할 수 있다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;&lt;STRONG&gt;2. log4j 구성&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;- Logger(Category)&lt;br /&gt;
로깅 메세지를 Appender에 전달합니다.&lt;/P&gt;
&lt;P&gt;- Appender&lt;br /&gt;
전달된 로깅 메세지를 파일에다 기록할 것인지, 콘솔에 출력할 것인지 아니면 DB에 저장할 것인지 매개체 역활을 합니다.&lt;/P&gt;
&lt;P&gt;- Layout&lt;br /&gt;
Appender가 어디에 출력할 것인지 결정했다면 어떤 형식으로 출력할 것이지 출력 layout을 결졍합니다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;3. log4j 로깅 레벨&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;로깅의 우선 순위에 따른 로깅 레벨이다.&lt;/P&gt;
&lt;P&gt;FATAL &amp;gt; ERROR &amp;gt; WRN &amp;gt; INFO &amp;gt; DEBUG&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;① FATAL : 가장 크리티컬한 에러가 일어 났을 때 사용합니다.&lt;br /&gt;
② ERROR : 일반 에러가 일어 났을 때 사용합니다.&lt;br /&gt;
③ WARN : 에러는 아니지만 주의할 필요가 있을 때 사용합니다.&lt;br /&gt;
④ INFO : 일반 정보를 나타낼 때 사용합니다.&lt;br /&gt;
⑤ DEBUG : 일반 정보를 상세히 나타낼 때 사용합니다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;만약 현재 요청한 로깅의 우선순위가 카테고리의 우선순위와 같거나 높으면&lt;/P&gt;
&lt;P&gt;그 로깅 요청이 가능하다고 말한다.&lt;/P&gt;
&lt;P&gt;그렇지 않을 경우 그 요청은 불가능하다고 한다.&lt;/P&gt;
&lt;P&gt;다음은 로깅 요청의 가능/불가능 여부가 어떻게 처리되는 지를 보여주는 예이다.&lt;/P&gt;
&lt;P&gt;// 이름이 &quot;com.foo&quot;인 카테고리 인스턴스를 구한다.&lt;br /&gt;
Category cat = Category.getInstance(&quot;com.foo&quot;);&lt;/P&gt;
&lt;P&gt;// 카테고리의 우선순위를 설정한다.&lt;br /&gt;
cat.setPriority(Priority.INFO);&lt;/P&gt;
&lt;P&gt;// WARN &amp;gt;= INFO 이기 때문에, 이 요청은 가능하다.&lt;br /&gt;
cat.warn(&quot;Low fuel level.&quot;);&lt;/P&gt;
&lt;P&gt;// DEBUG &amp;lt; INFO 이기 때문에, 이 요청은 불가능하다.&lt;br /&gt;
cat.debug(&quot;Starting search for nearest gas station.&quot;);&lt;/P&gt;
&lt;P&gt;// 이름이 &quot;com.foo.Bar&quot;인 카테고리의 인스턴스를 생성한다.&lt;br /&gt;
// 이 카테고리는 이름이 &quot;com.foo&quot;인 카테고리를 상속 받는다.&lt;br /&gt;
// 따라서 이 카테고리 인스턴스는 INFO 우선순위를 갖는다.&lt;br /&gt;
Category barcat = Category.getInstance(&quot;com.foo.Bar&quot;);&lt;/P&gt;
&lt;P&gt;// INFO &amp;gt;= INFO 이므로, 이 요청은 가능하다.&lt;br /&gt;
barcat.info(&quot;Located nearest gas station.&quot;);&lt;/P&gt;
&lt;P&gt;// DEBUG &amp;lt; INFO 이므로, 이 요청은 불가능하다.&lt;br /&gt;
barcat.debug(&quot;Exiting gas station search&quot;);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;4. log4j 설정&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;log4j 설정은 프로그램 내에서 할 수 있지만 설정파일을 사용함으로서 좀더 유연하게 log4j환경을 만들 수 있습니다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#990000&gt;① &lt;/FONT&gt;프로그램에서 설정&lt;br /&gt;
&lt;/P&gt;
&lt;TABLE border=1 cellSpacing=0 borderColorLight=#aaaaaa borderColorDark=#ffffff cellPadding=0 width=600&gt;
&lt;TBODY&gt;
&lt;TR bgColor=#eeeeee&gt;
&lt;TD&gt;&amp;lt;%@ page contentType=&quot;text/html;charset=MS949&quot;&lt;br /&gt;
　import=&quot;org.apache.log4j.*,java.io.* &quot;&lt;br /&gt;
%&amp;gt; 
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;lt;%!&lt;br /&gt;
　static Logger logger = Logger.getLogger(&quot;log4j.jsp&quot;);&lt;br /&gt;
%&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;lt;%&lt;br /&gt;
　String layout = &quot;%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n&quot;;&lt;br /&gt;
　String logfilename = &quot;DailyLog.log&quot;;&lt;br /&gt;
　String datePattern = &quot;.yyyy-MM-dd &quot;;&lt;/P&gt;
&lt;P&gt;　PatternLayout patternlayout = new PatternLayout(layout);&lt;br /&gt;
　DailyRollingFileAppender appender = new DailyRollingFileAppender(patternlayout, logfilename, datePattern);&lt;br /&gt;
　logger.addAppender(appender);&lt;br /&gt;
　logger.setLevel(Level.INFO); &lt;br /&gt;
　logger.fatal(&quot;fatal!!&quot;);&lt;br /&gt;
%&amp;gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;br /&gt;

&lt;P&gt;&lt;FONT color=#990000&gt;② &lt;/FONT&gt;property 파일에 설정&lt;/P&gt;
&lt;P&gt;설정 파일의 위치를 별도로 지정하지 않으려면, &lt;STRONG&gt;log4j.properties&lt;/STRONG&gt;를 만들어&lt;STRONG&gt; /WEB-INF/classes 밑에 놓으세요.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;* log4j.properties 파일은 /WEB-INF/classes/ 하위에 있어야 자동으로 load 됨.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;TABLE border=1 cellSpacing=0 borderColorLight=#aaaaaa borderColorDark=#ffffff cellPadding=0 width=600&gt;
&lt;TBODY&gt;
&lt;TR bgColor=#eeeeee&gt;
&lt;TD&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;log4j.rootLogger=INFO, stdout, rolling&lt;/P&gt;
&lt;P&gt;log4j.appender.stdout=org.apache.log4j.ConsoleAppender&lt;/P&gt;
&lt;P&gt;log4j.appender.stdout.layout=org.apache.log4j.PatternLayout&lt;/P&gt;
&lt;P&gt;log4j.appender.stdout.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n&lt;/P&gt;
&lt;P&gt;log4j.appender.rolling=org.apache.log4j.DailyRollingFileAppender&lt;/P&gt;
&lt;P&gt;log4j.appender.rolling.File=output.log&lt;/P&gt;
&lt;P&gt;log4j.appender.rolling.Append=true&lt;/P&gt;
&lt;P&gt;log4j.appender.rolling.MaxFileSize=500KB&lt;/P&gt;
&lt;P&gt;log4j.appender.rolling.DatePattern=&#039;.&#039;yyyy-MM-dd&lt;/P&gt;
&lt;P&gt;log4j.appender.rolling.layout=org.apache.log4j.PatternLayout&lt;/P&gt;
&lt;P&gt;log4j.appender.rolling.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;#최상위 카테고리에 INFO로 레벨 설정 및 appender로 stdout, rolling을 정의&lt;br /&gt;
log4j.rootLogger=INFO, stdout, rolling&lt;/P&gt;
&lt;P&gt;#stdout 어펜더는 콘솔에 뿌리겠다는 정의&lt;br /&gt;
log4j.appender.stdout=org.apache.log4j.ConsoleAppender&lt;/P&gt;
&lt;P&gt;#stdout 어펜더는 patternlayout을 사용하겠다는 정의&lt;/P&gt;
&lt;P&gt;log4j.appender.stdout.layout=org.apache.log4j.PatternLayout&lt;br /&gt;
#페턴은 다음과 같이 포맷팅 하겠다는 것을 정의&lt;/P&gt;
&lt;P&gt;log4j.appender.stdout.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;#역시나 rolling 어펜더는 파일로 처리한다라고 정의&lt;br /&gt;
log4j.appender.rolling=org.apache.log4j.DailyRollingFileAppender&lt;/P&gt;
&lt;P&gt;#로그 파일 이름은 output.log&lt;br /&gt;
log4j.appender.rolling.File=output.log&lt;/P&gt;
&lt;P&gt;#true면 톰캣을 내렸다 올려도 파일이 리셋되지 않습니다.&lt;br /&gt;
log4j.appender.rolling.Append=true&lt;/P&gt;
&lt;P&gt;#파일 최대 사이즈는 500KB로 설정&lt;br /&gt;
log4j.appender.rolling.MaxFileSize=500KB&lt;/P&gt;
&lt;P&gt;#파일 포맷은 output.log.2005-03-10 으로 관리하겠다고 정의&lt;br /&gt;
log4j.appender.rolling.DatePattern=&#039;.&#039;yyyy-MM-dd&lt;/P&gt;
&lt;P&gt;#역시나 rolling 어펜더는 패턴 레이아웃을 사용하겠다고 정의&lt;br /&gt;
log4j.appender.rolling.layout=org.apache.log4j.PatternLayout&lt;/P&gt;
&lt;P&gt;#rolling 어펜더는 패턴 레이아웃 포맷&lt;br /&gt;
log4j.appender.rolling.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;특정 위치의 설정파일을 지정하는 방법&lt;/P&gt;
&lt;P&gt;1. WAS 기동 옵션으로&lt;/P&gt;
&lt;P&gt;-Dlog4j.configuration=file:D:\StandardPrj\StandardProject\WebContents\WEB-INF\classes\log4j.properties&lt;/P&gt;
&lt;P&gt;2. web.xml 파일에 설정&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;FONT style=&quot;BACKGROUND-COLOR: #e4ff75&quot;&gt;&amp;lt;context-param&amp;gt;&lt;br /&gt;
&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;lt;param-name&amp;gt;&lt;FONT color=#d41a01&gt;&lt;STRONG&gt;log4jConfigLocation&lt;/STRONG&gt;&lt;/FONT&gt;&amp;lt;/param-name&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;param-value&lt;STRONG&gt;&lt;FONT color=#d41a01&gt;&amp;gt;/WEB-INF/log4j.properties&lt;/FONT&gt;&lt;/STRONG&gt;&amp;lt;/param-value&amp;gt;&lt;br /&gt;
&lt;FONT style=&quot;BACKGROUND-COLOR: #e4ff75&quot;&gt;&amp;nbsp;&amp;lt;/context-param&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;3. 클래스에서 직접 로드&lt;/P&gt;
&lt;P&gt;org.apache.log4j.PropertyConfigurator.configure(logPath);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=2&gt;VIII. 설정 포맷&lt;br /&gt;
&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#990000&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#990000&gt;①&lt;/FONT&gt; 로그파일명 포맷 (DatePattern)&lt;br /&gt;
로그파일명 포맷입니다. 날짜, 시간 및 분단위로까지 로그 파일을 분리할 수 있습니다.&lt;br /&gt;
&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;TABLE border=1 cellSpacing=0 borderColorLight=#aaaaaa borderColorDark=#ffffff cellPadding=0 width=600&gt;
&lt;TBODY&gt;
&lt;TR align=middle&gt;
&lt;TD bgColor=#eeeeee height=20&gt;형식&lt;/TD&gt;
&lt;TD bgColor=#eeeeee&gt;설명&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&#039;.&#039;yyyy-MM&lt;/TD&gt;
&lt;TD&gt;매달 첫번째날에 로그파일을 변경합니다 &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&#039;.&#039;yyyy-ww&lt;/TD&gt;
&lt;TD&gt;매주의 시작시 로그파일을 변경합니다. &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&#039;.&#039;yyyy-MM-dd&lt;/TD&gt;
&lt;TD&gt;매일 자정에 로그파일을 변경합니다. &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&#039;.&#039;yyyy-MM-dd-a&lt;/TD&gt;
&lt;TD&gt;자정과 정오에 로그파일을 변경합니다. &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&#039;.&#039;yyyy-MM-dd-HH&lt;/TD&gt;
&lt;TD&gt;매 시간의 시작마다 로그파일을 변경합니다.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&#039;.&#039;yyyy-MM-dd-HH-mm&lt;/TD&gt;
&lt;TD&gt;매분마다 로그파일을 변경합니다. &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;
&lt;br /&gt;&lt;FONT color=#990000&gt;② &lt;/FONT&gt;PatternLayout 포맷&lt;br /&gt;
로그자체를 어떤 포맷으로 남길지 결정합니다.&lt;br /&gt;
layout에는 HTMLLayout, PatternLayout, SimpleLayout, XMLLayout등이 있으며 PatternLayout이&amp;nbsp;일반적으로 가장 많이 쓰입니다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;TABLE border=1 cellSpacing=0 borderColorLight=#aaaaaa borderColorDark=#ffffff cellPadding=0 width=600&gt;
&lt;TBODY&gt;
&lt;TR height=20 align=middle bgColor=#eeeeee&gt;
&lt;TD&gt;&lt;STRONG&gt;형식&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;설명&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width=40&gt;&lt;STRONG&gt;%p&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width=560&gt;debug, info, warn, error, fatal 등의 priority 가 출력된다. &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;STRONG&gt;%m&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;로그내용이 출력됩니다&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;STRONG&gt;%d&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;로깅 이벤트가 발생한 시간을 기록합니다.&lt;br /&gt;
포맷은 %d{HH:mm:ss, SSS}, %d{yyyy MMM dd HH:mm:ss, SSS}같은 형태로 사용하며 SimpleDateFormat에 따른 포맷팅을 하면 된다&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;STRONG&gt;%t&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;로그이벤트가 발생된 쓰레드의 이름을 출력합니다. &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;STRONG&gt;%%&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;% 표시를 출력하기 위해 사용한다. &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;STRONG&gt;%n&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;플랫폼 종속적인 개행문자가 출력된다. \r\n 또는 \n 일것이다. &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;STRONG&gt;%c&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;카테고리를 표시합니다 &lt;br /&gt;
예) 카테고리가 a.b.c 처럼 되어있다면 %c{2}는 b.c가 출력됩니다.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;STRONG&gt;%C&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;클래스명을 포시합니다. &lt;br /&gt;
예) 클래스구조가 org.apache.xyz.SomeClass 처럼 되어있다면 %C{2}는 xyz.SomeClass 가 출력됩니다&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;STRONG&gt;%F&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;로깅이 발생한 프로그램 파일명을 나타냅니다.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;STRONG&gt;%l&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;로깅이 발생한 caller의 정보를 나타냅니다&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;STRONG&gt;%L&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;로깅이 발생한 caller의 라인수를 나타냅니다&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;STRONG&gt;%M&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;로깅이 발생한 method 이름을 나타냅니다.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;STRONG&gt;%r&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;어플리케이션 시작 이후 부터 로깅이 발생한 시점의 시간(milliseconds)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;STRONG&gt;%x&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;로깅이 발생한 thread와 관련된 NDC(nested diagnostic context)를 출력합니다.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;STRONG&gt;%X&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;로깅이 발생한 thread와 관련된 MDC(mapped diagnostic context)를 출력합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;예시) (같은 색끼리 보시면 됩니다)&lt;/P&gt;
&lt;P&gt;위의 test.jsp를 다음 포맷으로 출력해본다면&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#006600&gt;[%c]&lt;/FONT&gt; &lt;FONT color=#0066ff&gt;[%C]&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;[%d]&lt;/FONT&gt; &lt;FONT color=#ff33ff&gt;[%F]&lt;/FONT&gt; &lt;FONT color=#003300&gt;[%l]&lt;/FONT&gt; &lt;FONT color=#0033ff&gt;[%L]&lt;/FONT&gt; &lt;FONT color=#993366&gt;[%m]&lt;/FONT&gt; &lt;FONT style=&quot;BACKGROUND-COLOR: #ffccff&quot;&gt;[%M]&lt;/FONT&gt; [%n] &lt;FONT style=&quot;BACKGROUND-COLOR: #ffff00&quot;&gt;[%p] &lt;/FONT&gt;&lt;FONT style=&quot;BACKGROUND-COLOR: #ffcc00&quot;&gt;[%r]&lt;/FONT&gt; &lt;FONT style=&quot;BACKGROUND-COLOR: #ccffff&quot;&gt;[%t]&lt;/FONT&gt; [%x] [%X]는 다음과 같다&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#006600&gt;[test.jsp]&lt;/FONT&gt; &lt;FONT color=#0066ff&gt;[org.apache.jsp.test_jsp]&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;[2005-03-10 12:37:23,561]&lt;/FONT&gt; &lt;FONT color=#ff33ff&gt;[test_jsp.java]&lt;/FONT&gt; [&lt;FONT color=#003300&gt;org.apache.jsp.test_jsp._jspService(test_jsp.java:64)] &lt;/FONT&gt;&lt;FONT color=#0033ff&gt;[64]&lt;/FONT&gt; &lt;FONT color=#993366&gt;[fatal!!] &lt;/FONT&gt;&lt;FONT style=&quot;BACKGROUND-COLOR: #ffccff&quot;&gt;[_jspService]&lt;/FONT&gt; [개행] &lt;FONT style=&quot;BACKGROUND-COLOR: #ffff00&quot;&gt;[FATAL]&lt;/FONT&gt; &lt;FONT style=&quot;BACKGROUND-COLOR: #ffcc00&quot;&gt;[765567]&lt;/FONT&gt; &lt;FONT style=&quot;BACKGROUND-COLOR: #ccffff&quot;&gt;[http-8080-Processor25] &lt;/FONT&gt;[] []&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;=============================================&lt;/P&gt;
&lt;P&gt;본문서는 자유롭게 배포/복사 할수 있지만&lt;/P&gt;
&lt;P&gt;이문서의 저자에 대한 언급을 삭제하시면 안됩니다&lt;/P&gt;
&lt;P&gt;저자 : GoodBug (&lt;A class=con_link href=&quot;mailto:unicorn@jakartaproject.com&quot; target=_blank&gt;&lt;FONT color=#0033cc&gt;&lt;STRONG&gt;unicorn@jakartaproject.com&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/A&gt;)&lt;/P&gt;
&lt;P&gt;최초 : &lt;A class=con_link href=&quot;http://www.jakartaproject.com/&quot; target=_blank&gt;&lt;FONT color=#0033cc&gt;&lt;STRONG&gt;http://www.jakartaproject.com&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;=============================================&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;log4j를 적용한 로깅 예제&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;// 로거 임포트하기&lt;br /&gt;
&lt;/STRONG&gt;import org.apache.log4j.Logger; &lt;/P&gt;
&lt;P&gt;public class ClassName {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;/** Log4J 로거 얻기 */&lt;/STRONG&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; private Logger log = Logger.getLogger(ClassName.class);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void method() {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (log.isDebugEnabled()) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; log.debug(&quot;디버깅용 메시지&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; log.info(&quot;정보를 남기기위한 메시지&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;// 어쩌구 저쩌구 실행...&lt;/STRONG&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } catch (Exception ex) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;// 로그에 예외 메시지도 함께 남기기&lt;/STRONG&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; log.error(&quot;예외가 발생했어요~~&quot;, ex);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
}&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;--------------------------------------------------------------------------------&lt;br /&gt;
프로바이더 mailto: &lt;A class=con_link href=&quot;mailto:madvirus@madvirus.net&quot; target=_blank&gt;&lt;FONT color=#0033cc&gt;&lt;STRONG&gt;madvirus@madvirus.net&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/A&gt;:&lt;br /&gt;
현재 티페이지 글로벌(주)의 기술연구소에 있으며, &lt;/P&gt;
&lt;P&gt;&#039;JSP 웹 어플리케이션 개발(가메출판사)&#039;을 이동훈씨와 함께 저술한 바 있다. &lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
관련자료 &lt;br /&gt;
예제 소스 코드 &lt;br /&gt;
관련링크 &lt;br /&gt;
Log4j 프로젝트 홈페이지 &lt;br /&gt;
&lt;A class=con_link href=&quot;http://jakarta.apache.org/log4j/index.html&quot; target=_blank&gt;&lt;FONT color=#0033cc&gt;&lt;STRONG&gt;http://jakarta.apache.org/log4j/index.html&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/A&gt; &lt;br /&gt;
Sun의 로깅 API 규약 &lt;br /&gt;
&lt;A class=con_link href=&quot;http://java.sun.com/aboutJava/communityprocess/jsr/jsr_047_log.html&quot; target=_blank&gt;&lt;FONT color=#0033cc&gt;&lt;STRONG&gt;http://java.sun.com/aboutJava/communityprocess/jsr/jsr_047_log.html&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;</description>
			<category>LOG4J</category>
			<author>by jadunara(Nam 경탁) 나는너의힘</author>
			<guid>http://u2m.kr/170</guid>
			<comments>http://u2m.kr/170#entry170comment</comments>
			<pubDate>Fri, 03 Dec 2010 14:44:44 +0900</pubDate>
		</item>
		<item>
			<title>varchar와 nvarchar의 차이점</title>
			<link>http://u2m.kr/169</link>
			<description>&lt;br /&gt;
varchar(10)의 의미?&lt;br /&gt;
&amp;nbsp;- 한글 5자, 영문 10자 입력 가능&lt;br /&gt;
&lt;br /&gt;nvarchar(10)의 의미?&lt;br /&gt;
&amp;nbsp;- 한글,영문 5자 입력 가능&lt;br /&gt;
&lt;br /&gt;한글, 영문을 제외한&lt;SPAN style=&quot;WIDTH: 226px; FLOAT: left; HEIGHT: 196px&quot; id=callbacknestjangjeonghuntistorycom3109573&gt;
&lt;OBJECT id=jangjeonghuntistorycom3109573 codeBase=&quot;http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0&quot; classid=clsid:d27cdb6e-ae6d-11cf-96b8-444553540000 width=&quot;100%&quot; height=&quot;100%&quot;&gt;&lt;PARAM NAME=&quot;_cx&quot; VALUE=&quot;5953&quot;&gt;&lt;PARAM NAME=&quot;_cy&quot; VALUE=&quot;5185&quot;&gt;&lt;PARAM NAME=&quot;FlashVars&quot; VALUE=&quot;&quot;&gt;&lt;PARAM NAME=&quot;Movie&quot; VALUE=&quot;http://cfs.tistory.com/blog/plugins/CallBack/callback.swf?destDocId=callbacknestjangjeonghuntistorycom3109573&amp;amp;id=310&amp;amp;callbackId=jangjeonghuntistorycom3109573&amp;amp;host=http://jangjeonghun.tistory.com&amp;amp;float=left&amp;amp;&quot;&gt;&lt;PARAM NAME=&quot;Src&quot; VALUE=&quot;http://cfs.tistory.com/blog/plugins/CallBack/callback.swf?destDocId=callbacknestjangjeonghuntistorycom3109573&amp;amp;id=310&amp;amp;callbackId=jangjeonghuntistorycom3109573&amp;amp;host=http://jangjeonghun.tistory.com&amp;amp;float=left&amp;amp;&quot;&gt;&lt;PARAM NAME=&quot;WMode&quot; VALUE=&quot;Transparent&quot;&gt;&lt;PARAM NAME=&quot;Play&quot; VALUE=&quot;-1&quot;&gt;&lt;PARAM NAME=&quot;Loop&quot; VALUE=&quot;-1&quot;&gt;&lt;PARAM NAME=&quot;Quality&quot; VALUE=&quot;High&quot;&gt;&lt;PARAM NAME=&quot;SAlign&quot; VALUE=&quot;LT&quot;&gt;&lt;PARAM NAME=&quot;Menu&quot; VALUE=&quot;0&quot;&gt;&lt;PARAM NAME=&quot;Base&quot; VALUE=&quot;&quot;&gt;&lt;PARAM NAME=&quot;AllowScriptAccess&quot; VALUE=&quot;always&quot;&gt;&lt;PARAM NAME=&quot;Scale&quot; VALUE=&quot;NoScale&quot;&gt;&lt;PARAM NAME=&quot;DeviceFont&quot; VALUE=&quot;0&quot;&gt;&lt;PARAM NAME=&quot;EmbedMovie&quot; VALUE=&quot;0&quot;&gt;&lt;PARAM NAME=&quot;BGColor&quot; VALUE=&quot;&quot;&gt;&lt;PARAM NAME=&quot;SWRemote&quot; VALUE=&quot;&quot;&gt;&lt;PARAM NAME=&quot;MovieData&quot; VALUE=&quot;&quot;&gt;&lt;PARAM NAME=&quot;SeamlessTabbing&quot; VALUE=&quot;1&quot;&gt;&lt;PARAM NAME=&quot;Profile&quot; VALUE=&quot;0&quot;&gt;&lt;PARAM NAME=&quot;ProfileAddress&quot; VALUE=&quot;&quot;&gt;&lt;PARAM NAME=&quot;ProfilePort&quot; VALUE=&quot;0&quot;&gt;&lt;PARAM NAME=&quot;AllowNetworking&quot; VALUE=&quot;all&quot;&gt;&lt;PARAM NAME=&quot;AllowFullScreen&quot; VALUE=&quot;false&quot;&gt;
    &lt;embed width=&quot;100%&quot; height=&quot;100%&quot; wmode=&quot;transparent&quot; id=&quot;jangjeonghuntistorycom3109573&quot; src=&quot;http://cfs.tistory.com/blog/plugins/CallBack/callback.swf?destDocId=callbacknestjangjeonghuntistorycom3109573&amp;id=310&amp;callbackId=jangjeonghuntistorycom3109573&amp;host=http://jangjeonghun.tistory.com&amp;float=left&amp;&quot; allowScriptAccess=&quot;always&quot; menu=&quot;false&quot; type=&quot;application/x-shockwave-flash&quot;  &gt;&lt;/embed&gt;&lt;/OBJECT&gt;&lt;/SPAN&gt; 다국어 언어를 사용하기 위해서는 nvarchar를 사용해야 한다.&lt;br /&gt;
&lt;br /&gt;참고 자료 : &lt;A title=&quot;[http://msdn.microsoft.com/ko-kr/library/ms187752(v=SQL.90).aspx]로 이동합니다.&quot; href=&quot;http://msdn.microsoft.com/ko-kr/library/ms187752(v=SQL.90).aspx&quot; target=_blank&gt;데이터 형식(Transact-SQL)&lt;/A&gt;
&lt;SCRIPT src=&quot;http://jangjeonghun.tistory.com/plugin/CallBack_bootstrapper?&amp;amp;src=http://cfs.tistory.com/blog/plugins/CallBack/callback&amp;amp;id=310&amp;amp;callbackId=jangjeonghuntistorycom3109573&amp;amp;destDocId=callbacknestjangjeonghuntistorycom3109573&amp;amp;host=http://jangjeonghun.tistory.com&amp;amp;float=left&amp;amp;random=790&quot;&gt;&lt;/SCRIPT&gt;</description>
			<category>MS-SQL</category>
			<author>by jadunara(Nam 경탁) 나는너의힘</author>
			<guid>http://u2m.kr/169</guid>
			<comments>http://u2m.kr/169#entry169comment</comments>
			<pubDate>Wed, 01 Dec 2010 09:28:01 +0900</pubDate>
		</item>
		<item>
			<title>정규식 - 라인 중간 중간 해당하는 단어 찾기</title>
			<link>http://u2m.kr/168</link>
			<description>&lt;DIV&gt;라인 중간중간 글자 찾기&lt;br /&gt;
&lt;/DIV&gt;
&lt;DIV&gt;xxx(.*)xxx(.*)xxx(.*)xxx&lt;/DIV&gt;</description>
			<author>by jadunara(Nam 경탁) 나는너의힘</author>
			<guid>http://u2m.kr/168</guid>
			<comments>http://u2m.kr/168#entry168comment</comments>
			<pubDate>Fri, 22 Oct 2010 13:17:06 +0900</pubDate>
		</item>
		<item>
			<title>dummy 테이블</title>
			<link>http://u2m.kr/167</link>
			<description>&lt;br /&gt;
&lt;STRONG&gt;DB DUMMY 테이블&lt;br /&gt;
ORACLE - DUAL&lt;br /&gt;
IBM - SYSIBM.SYSDUMMY1&lt;br /&gt;
MySQL - 없음&lt;/STRONG&gt;</description>
			<category>DATABASE</category>
			<author>by jadunara(Nam 경탁) 나는너의힘</author>
			<guid>http://u2m.kr/167</guid>
			<comments>http://u2m.kr/167#entry167comment</comments>
			<pubDate>Fri, 01 Oct 2010 14:00:50 +0900</pubDate>
		</item>
		<item>
			<title>Google Blogger API 사용</title>
			<link>http://u2m.kr/166</link>
			<description>&lt;br /&gt;
실질적으로 테스트 해보지는 않았습니다.&lt;br /&gt;
훗날 사용할거 같아서...&lt;br /&gt;
-----------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;P&gt;Google Blogger API는 ATOM 이라고 하는 표준(아직도 진행중) 을 이용하여 인증, 조회, 수정, 생성을 할 수 있도록 방법을 제공한다. 하지만 처음 API를 사용하여 Google Blogger를 제어하는 사용자에게는 예제의 부적절함 혹은 부족으로 상당한 시행착오를 겪는다 물론 그렇지 않은 사람들도 있다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;혹시 다른 분들도 시행착오를 겪을 수 있으므로 조금이나 도움이 되었으면 좋겠다.&lt;/P&gt;
&lt;P&gt;Google Blogger API :&amp;nbsp; &lt;A class=con_link href=&quot;http://code.blogger.com/archives/atom-docs.html&quot; target=_blank&gt;http://code.blogger.com/archives/atom-docs.html&lt;/A&gt;&lt;br /&gt;
개발환경 : Jdk1.5와 HttpClient3.0&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;기본적으로 읽기/쓰기 등을 하기 위해서는 먼저 인증절차를 거쳐야 한다.&lt;br /&gt;
이 인증은 모든 atom request 에 적용되어야 한다. &lt;/P&gt;
&lt;P&gt;Google Blogger는 모든 ATOM reqeust 를 HTTP Basic Authentication을 SSL 방식으로 인증한다. &lt;br /&gt;
Google Blogger API 의 자료를 보면 아래와 같이 사용자의 블로그 리스트를 얻어 오는데 &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Get a List of a User&#039;s Blogs:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;
&lt;FONT color=#0000ff&gt;GET /atom HTTP/1.1&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Host: &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;www.blogger.com&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#000000&gt;&lt;FONT color=#0000ff&gt;Authorization :&lt;/FONT&gt; &lt;/FONT&gt;BASIC c3RldmVqOm5vdGFyZWFscGFzc3dvcmQ=&lt;br /&gt;
&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;이 때 &lt;FONT color=#008000&gt;Authorization: BASIC c3RldmVqOm5vdGFyZWFscGFzc3dvcmQ= &lt;/FONT&gt;이 부분이 사용자 아이디와 패스워드로 생성된 credential이다. 이 Credential을 이용하여 google blogger server와의 인증을 하게 된다. &lt;br /&gt;
Http Request를 위와 같은 형태로 생성하여 보내줄 수만 있으면 되는 것이다.&lt;br /&gt;
그럼 위의 내용을 HttpClient를 이용하여 구현하면 아래와 같이 mehtod를 구현할 수 있다.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style=&quot;BACKGROUND-COLOR: rgb(228,228,228); COLOR: rgb(51,51,51)&quot;&gt;public String getAuthByAtom() {&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp; HttpClient client = new HttpClient();&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp; // userid, passwd는 실제로 존재하는 것을 사용한다.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp; // 빨간글자의 코드가 시행착오를 겪었던 부분임.&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp; client.getState().setCredentials(&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT style=&quot;BACKGROUND-COLOR: rgb(228,228,228); COLOR: rgb(255,0,0)&quot;&gt;new AuthScope(&quot;&lt;/FONT&gt;&lt;SPAN style=&quot;COLOR: rgb(255,0,0); TEXT-DECORATION: underline&quot;&gt;www.blogger.com&lt;/SPAN&gt;&lt;FONT style=&quot;BACKGROUND-COLOR: rgb(0,153,102)&quot;&gt;&lt;SPAN style=&quot;BACKGROUND-COLOR: rgb(228,228,228); COLOR: rgb(255,0,0)&quot;&gt;&quot;, 443, &quot;Blogger&quot;),&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR style=&quot;BACKGROUND-COLOR: rgb(228,228,228); COLOR: rgb(255,0,0)&quot;&gt;&lt;SPAN style=&quot;BACKGROUND-COLOR: rgb(228,228,228)&quot;&gt;&lt;SPAN style=&quot;COLOR: rgb(255,0,0)&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; new UsernamePasswordCredentials(&quot;userid&quot;, &quot;passwd&quot;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/SPAN&gt;&lt;br /&gt;
&lt;/FONT&gt;&amp;nbsp; );&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; // user의 블로그 리스트를 조회하는 url 임&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp; GetMethod get = new GetMethod(&quot;https://www.blogger.com/atom&quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp; get.setDoAuthentication( true );&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp; try {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int status = client.executeMethod(get);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println(status + &quot;\n&quot; + get.getResponseBodyAsString());&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp; } catch (Exception e) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println(e.toString());&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp; } finally {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; get.releaseConnection();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; return get.getResponseBodyAsString()&amp;nbsp; &lt;br /&gt;
}&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#006699&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;위의 코드는 결과로 아래와 같은 XML을 return 한다. &lt;/P&gt;
&lt;P&gt;특정 user가&amp;nbsp; 가지고 있는 블로그의 리스트이다.&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;
&lt;FONT color=#0000ff&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; standalone=&quot;yes&quot;?&amp;gt;&lt;br /&gt;
&amp;lt;feed xmlns=&quot;&lt;/FONT&gt;&lt;A class=con_link href=&quot;http://purl.org/atom/ns&quot; target=_blank&gt;&lt;FONT color=#0000ff&gt;http://purl.org/atom/ns&lt;/FONT&gt;&lt;/A&gt;&lt;FONT color=#0000ff&gt;#&quot;&amp;gt;&lt;br /&gt;
&amp;lt;userid xmlns=&quot;&lt;/FONT&gt;&lt;A class=con_link href=&quot;http://www.blogger.com/atom/ns#%22%3E27275760%3C/userid&quot; target=_blank&gt;&lt;FONT color=#0000ff&gt;http://www.blogger.com/atom/ns#&quot;&amp;gt;27275760&amp;lt;/userid&lt;/FONT&gt;&lt;/A&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;br /&gt;
&amp;lt;link href=&quot;&lt;/FONT&gt;&lt;A class=con_link href=&quot;https://www.blogger.com/atom/30952142&quot; target=_blank _cssquery_UID=&quot;14&quot;&gt;&lt;FONT color=#0000ff&gt;https://www.blogger.com/atom/30952142&lt;/FONT&gt;&lt;/A&gt;&lt;FONT color=#0000ff&gt;&quot; rel=&quot;service.post&quot; title=&quot;Open everything&quot; type=&quot;application/atom+xml&quot;/&amp;gt;&lt;br /&gt;
&amp;lt;link href=&quot;&lt;/FONT&gt;&lt;A class=con_link href=&quot;https://www.blogger.com/atom/30952142&quot; target=_blank&gt;&lt;FONT color=#0000ff&gt;https://www.blogger.com/atom/30952142&lt;/FONT&gt;&lt;/A&gt;&lt;FONT color=#0000ff&gt;&quot; rel=&quot;service.feed&quot; title=&quot;Open everything&quot; type=&quot;application/atom+xml&quot;/&amp;gt;&lt;br /&gt;
&amp;lt;link href=&quot;&lt;/FONT&gt;&lt;A class=con_link href=&quot;http://kimkun.blogspot.com/&quot; target=_blank _cssquery_UID=&quot;11&quot;&gt;&lt;FONT color=#0000ff&gt;http://kimkun.blogspot.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT color=#0000ff&gt;&quot; rel=&quot;alternate&quot; title=&quot;Open everything&quot; type=&quot;text/html&quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/feed&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;
이 api를 사용하는 개발자들은 return 되어 오는 xml 데이타를 적절히 파싱하여 사용하면 될 것이다. &lt;br /&gt;
다른 Google Blogger API도 위와 같은 원리로 http basic authentication을 이용하여 인증절차를 거치고특정 url을 호출하여 원하는 기능을 수행하도록 한다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;인증은 위의 코드로 수행을 하고 ROME(&lt;A class=con_link href=&quot;http://wiki.java.net/bin/view/Javawsxml/Rome&quot; target=_blank&gt;http://wiki.java.net/bin/view/Javawsxml/Rome&lt;/A&gt;)&amp;nbsp; 을 이용하여 xml format으로 생성하거나 parsing을 하면 xml 관련된 작업을 수월하게 할 수 있을 것이다.&lt;br /&gt;

&lt;DIV class=autosourcing-stub&gt;
&lt;P style=&quot;PADDING-BOTTOM: 0px; FONT-STYLE: normal; MARGIN: 11px 0px 7px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT-FAMILY: Dotum; FONT-SIZE: 12px; FONT-WEIGHT: normal; PADDING-TOP: 0px&quot;&gt;&lt;STRONG style=&quot;PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 7px; PADDING-TOP: 0px&quot;&gt;[출처]&lt;/STRONG&gt; &lt;A href=&quot;http://blog.naver.com/nstopkimsk/140026422940&quot; target=_blank&gt;Google Blogger API 사용&lt;/A&gt;&lt;SPAN style=&quot;PADDING-BOTTOM: 0px; PADDING-LEFT: 5px; PADDING-RIGHT: 7px; PADDING-TOP: 0px&quot;&gt;|&lt;/SPAN&gt;&lt;STRONG style=&quot;PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 7px; PADDING-TOP: 0px&quot;&gt;작성자&lt;/STRONG&gt; &lt;A href=&quot;http://blog.naver.com/nstopkimsk&quot; target=_blank&gt;김군&lt;/A&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;</description>
			<category>JAVA</category>
			<author>by jadunara(Nam 경탁) 나는너의힘</author>
			<guid>http://u2m.kr/166</guid>
			<comments>http://u2m.kr/166#entry166comment</comments>
			<pubDate>Fri, 16 Jul 2010 14:23:41 +0900</pubDate>
		</item>
		<item>
			<title>운동화를 신고 나는 발냄새 간단히 제거하는 방법</title>
			<link>http://u2m.kr/165</link>
			<description>&lt;br /&gt;
출처 : &lt;A href=&quot;http://bloping.tistory.com/108&quot;&gt;http://bloping.tistory.com/108&lt;/A&gt;&lt;br /&gt;
&lt;br /&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;심심한 잠깐팁...&lt;/SPAN&gt;&lt;br /&gt;
&lt;br /&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;[운동화 속 냄새 줄이는 방법]&lt;/SPAN&gt;&lt;br /&gt;
&lt;br /&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;앞으로 다가오는 여름이면 운동화를 즐겨 신으시는 분들은 발냄새 때문에 신경이 쓰일꺼라 생각합니다.&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;&lt;br /&gt;
여러가지 방법이 있지만 제가 알고 있는 방법이 하나 있어 짧게 나마 글로 알려 드리고 블로그가 완성성되면 손쉽게 운동화 세탁 하는 방법과 함께 좀 더 자세하게 포스팅 하도록 하겠습니다.&lt;/SPAN&gt;&lt;br /&gt;
&lt;br /&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;준비물- 평상시 신고단니는 운동화 깔창, 집안에 굴러 단니는 안입거나 오래된 청바지&lt;/SPAN&gt;&lt;br /&gt;
&lt;/STRONG&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;우선 운동화를 세탁하고 나서 깔창을 다 말린다음 안입는 청바지를 운동화 깔창에 맞게 본을 뜹니다.&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;여기서 청바지로 깔창 본을 뜰때 운동화 깔창보다 조금 여유(약 15cm정도)를 두고&amp;nbsp;자르셔야 되고요&lt;/SPAN&gt;&lt;br /&gt;
&lt;br /&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;그리고 나서 본을 뜬 청깔창을 운동화 깔창에 덮고 테두리를 재봉등으로 바느질을&amp;nbsp;꼼꼼하게 하시면 끝&lt;br /&gt;
&lt;/SPAN&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;그러면&amp;nbsp;청바지를 만드는 섬유(무슨섬유인지는 잘 생각이 안나네요)성분이 발냄새를 없애주는 역할을 한다고 합니다. 저 같은경우 구두보다는 대부분 운동화를 즐겨 신다보니&amp;nbsp;발냄새가 좀 신경&amp;nbsp;쓰였는데 이 방법을 쓰고나서는&amp;nbsp;발냄새가 많이 줄어 들었답니다.&amp;nbsp;운동화 매니아분들은 한번쯤&amp;nbsp;청바지로 만들어 사용해 보세요.&lt;/SPAN&gt;&lt;br /&gt;
&lt;br /&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;당연히 아시는 분들은&amp;nbsp;복습인거 아시죠 ㅋㅋ&amp;nbsp;&amp;nbsp;심심한 짧은 포스팅 끝&lt;/SPAN&gt;&lt;br /&gt;
&lt;br /&gt;</description>
			<author>by jadunara(Nam 경탁) 나는너의힘</author>
			<guid>http://u2m.kr/165</guid>
			<comments>http://u2m.kr/165#entry165comment</comments>
			<pubDate>Sat, 05 Jun 2010 17:49:07 +0900</pubDate>
		</item>
		<item>
			<title>정보처리기사 출제 기준</title>
			<link>http://u2m.kr/164</link>
			<description>&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://jadunara.tistory.com/attachment/cfile9.uf@142649174BEE3B9075AA01.hwp&quot;&gt;&lt;img src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/blog/image/extension/hwp.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; 정보처리기사.hwp&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;</description>
			<author>by jadunara(Nam 경탁) 나는너의힘</author>
			<guid>http://u2m.kr/164</guid>
			<comments>http://u2m.kr/164#entry164comment</comments>
			<pubDate>Sat, 15 May 2010 15:13:45 +0900</pubDate>
		</item>
		<item>
			<title>table 태그 대체</title>
			<link>http://u2m.kr/163</link>
			<description>&lt;div&gt;
&amp;lt;div class=&quot;table_style&quot;&amp;gt;&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&amp;lt;ul class=&quot;header&quot;&amp;gt;&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;&amp;lt;li class=&quot;column1&quot;&amp;gt;1&amp;lt;/li&amp;gt;&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;&amp;lt;li class=&quot;column2&quot;&amp;gt;2&amp;lt;/li&amp;gt;&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;&amp;lt;li class=&quot;column3&quot;&amp;gt;3&amp;lt;/li&amp;gt;&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;&amp;lt;li class=&quot;column4&quot;&amp;gt;4&amp;lt;/li&amp;gt;&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&amp;lt;/ul&amp;gt;&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&amp;lt;ul&amp;gt;&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;&amp;lt;li class=&quot;column1&quot;&amp;gt;내용2-1&amp;lt;/li&amp;gt;&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;&amp;lt;li class=&quot;column2&quot;&amp;gt;내용2-22&amp;lt;/li&amp;gt;&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;&amp;lt;li class=&quot;column3&quot;&amp;gt;내용2-33&amp;lt;/li&amp;gt;&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;&amp;lt;li class=&quot;column4&quot;&amp;gt;내용2-44&amp;lt;/li&amp;gt;&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&amp;lt;/ul&amp;gt;&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&amp;lt;ul&amp;gt;&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;&amp;lt;li class=&quot;column1&quot;&amp;gt;내용3-1&amp;lt;/li&amp;gt;&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;&amp;lt;li class=&quot;column2&quot;&amp;gt;내용3-2&amp;lt;/li&amp;gt;&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;&amp;lt;li class=&quot;column3&quot;&amp;gt;내용3-3&amp;lt;/li&amp;gt;&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;&amp;lt;li class=&quot;column4&quot;&amp;gt;내용3-3&amp;lt;/li&amp;gt;&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&amp;lt;/ul&amp;gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;style type=&quot;text/css&quot;&amp;gt;&lt;/div&gt;
&lt;div&gt;.table_style {&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;width:400px;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;/* 전체 테이블 폭 지정 */&lt;/div&gt;
&lt;div&gt;}&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
.table_style ul {&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;clear: left;&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;margin: 0;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;/*ul 에 대한 ie, ff 차이를 없애기 위해 0 으로 설정 */&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;padding: 0;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;/*ff 는 속성에 기본 margin, padding 이 설정된 경우가 았음*/&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;list-style-type: none; /* ul li 태그 사용으로 인한 disc 를 안보이도록*/&lt;/div&gt;
&lt;div&gt;}&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
/*&lt;/div&gt;
&lt;div&gt;테이블 상단 보더를 만들때 아래와 같이 :first-child 선택자를 사용하는것이&lt;/div&gt;
&lt;div&gt;좀더 범용적인 방법이지만 IE는 IE7 이후부터만 이를 제공합니다.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
.table_style ul:first-child{&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;border-top: 1px solid #000;&lt;/div&gt;
&lt;div&gt;}&lt;/div&gt;
&lt;div&gt;*/&lt;/div&gt;
&lt;div&gt;.table_style .header {&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;font-weight: bold; /*th 와 같은 볼드 효과를 만듬*/&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;text-align: center; /*th 와 같은 중앙 정렬 효과를 만듬*/&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;border-top: 1px solid #000; /*테이블의 상단 보더를 만듬*/&lt;/div&gt;
&lt;div&gt;}&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
/*&lt;/div&gt;
&lt;div&gt;만약 첫 컬럼에 th와 같은 제목 효과를 주고자 한다면&lt;/div&gt;
&lt;div&gt;위에 th 속성을 구현하기 위해 사용한 두개의 속성을 없애고&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
.table_style ul li:first-child {&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;font-weight: bold;&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;text-align: center;&lt;/div&gt;
&lt;div&gt;}&lt;/div&gt;
&lt;div&gt;와 같이 사용하면 됩니다.&lt;/div&gt;
&lt;div&gt;*/&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
.table_style ul li {&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;float: left;&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;margin: 0;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;/* 테이블 속성에 사용하던 cellspacing 과 동일 */&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;padding: 2px 1px;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;/* 테이블 속성에 사용하던 cellpadding 과 동일 */&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;border-bottom: 1px solid #000; /*테이블의 하단 보더를 만듬*/&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;border-left: 1px solid #000; /*테이블의 좌측 보더를 만듬*/&lt;/div&gt;
&lt;div&gt;}&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
/*&lt;/div&gt;
&lt;div&gt;각 컬럼에의 개별 폭을 지정함&lt;/div&gt;
&lt;div&gt;총 합(padding 과 margin 포함)이 테이블의 총 폭보다 넓으면 디자인이 깨짐&lt;/div&gt;
&lt;div&gt;적절하게 보일수 있도록 조정이 필요함(다른 트릭이 있을법도 한대 아직..;;;;)&lt;/div&gt;
&lt;div&gt;*/&lt;/div&gt;
&lt;div&gt;.table_style ul .column1 {&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;width: 60px;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;}&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
.table_style ul .column2 {&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;width: 160px;&lt;/div&gt;
&lt;div&gt;}&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
.table_style ul .column3 {&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;width: 70px;&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;border-right: 1px solid #000; /*테이블의 우측 보더를 만듬*/&lt;/div&gt;
&lt;div&gt;}&lt;/div&gt;
&lt;div&gt;.table_style ul .column4 {&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;width: 70px;&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;border-right: 1px solid #000; /*테이블의 우측 보더를 만듬*/&lt;/div&gt;
&lt;div&gt;}&lt;/div&gt;
&lt;div&gt;&amp;lt;/style&amp;gt;&lt;/div&gt;
&lt;div&gt;////////////////////////////////////////////////////////////////////&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
&amp;lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&amp;gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; lang=&quot;ko&quot; xml:lang=&quot;ko&quot;&amp;gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;head&amp;gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&amp;gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;title&amp;gt;Daum - 우리들의 UCC 세상, 다음&amp;lt;/title&amp;gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;style type=&quot;text/css&quot;&amp;gt;&lt;/div&gt;
&lt;div&gt;body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,form,fieldset,p,button{margin:0;padding:0;}&lt;/div&gt;
&lt;div&gt;body,div,dl,dt,dd,h1,h2,h3,h4,form,fieldset,p,th,td,input{color:#333;font-family:dotum,돋움,sans-serif;font-size:12px;font-weight:normal;}&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
#left_wrap{width:400px;position:absolute;top:10px;left:2;}&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
#navibest_area2{height:121px;overflow:hidden;border-left:#e2e2e2 1px solid;border-right:#e2e2e2 1px solid;}&lt;/div&gt;
&lt;div&gt;#navibest_area{height:121px;overflow:hidden;border:#e2e2e2 1px solid;border-right:#e2e2e2 1px solid;}&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;#navibest_area .sub{display:inline;float:left;margin:5px 0 0 9px;border-right:#f3f3f3 1px solid;}&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
#navibest_area .sub.f1{width:31px;margin:5px 0 0 17px;}&lt;/div&gt;
&lt;div&gt;#navibest_area .sub.f2{width:41px;}&lt;/div&gt;
&lt;div&gt;#navibest_area .sub.f3{width:31px;}&lt;/div&gt;
&lt;div&gt;#navibest_area .sub.f4{width:41px;margin:5px 0 0 9px;border:none;}&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
#navibest_area .sub li{display:inline;height:18px;overflow:hidden;line-height:18px;white-space:nowrap;}&lt;/div&gt;
&lt;div&gt;#navibest_area .sub li a{font-size:12px;color:#858585;letter-spacing:-1px;}&lt;/div&gt;
&lt;div&gt;#navibest_area .sub li a:hover{color:#4559E9;text-decoration:underline;}&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
hr{display:none;}&lt;/div&gt;
&lt;div&gt;img,fieldset{border:0 none;}&lt;/div&gt;
&lt;div&gt;ul,ol,li{list-style:none outside;}&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
a {color:#444;text-decoration:none;}&lt;/div&gt;
&lt;div&gt;a:hover{color:#4559E9;text-decoration:underline;}&lt;/div&gt;
&lt;div&gt;strong{font-weight:bold;}&lt;/div&gt;
&lt;div&gt;.ir:hover{text-decoration:none;}&lt;/div&gt;
&lt;div&gt;.ir span{display:block;overflow:hidden;height:11px;position:relative;z-index:-1;font-size:11px;}&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;/style&amp;gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
&amp;lt;/head&amp;gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;body&amp;gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
&amp;lt;div id=&quot;left_wrap&quot;&amp;gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;div id=&quot;navibest_area&quot;&amp;gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
&amp;lt;ul class=&quot;sub f1&quot;&amp;gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://movie.daum.net/?t__nil_bestservice=movie&quot;&amp;gt;영화&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://stock.daum.net/?t__nil_bestservice=stock&quot;&amp;gt;증권&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://book.daum.net/?t__nil_bestservice=book&quot;&amp;gt;책&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://cook.miznet.daum.net/?t__nil_bestservice=cook&quot;&amp;gt;요리&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;/ul&amp;gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;ul class=&quot;sub f2&quot;&amp;gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://movie.daum.net/play/?t__nil_bestservice=perform&quot;&amp;gt;공연&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://realestate.daum.net/?t__nil_bestservice=estate&quot;&amp;gt;부동산&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://k.daum.net/qna/?t__nil_bestservice=kin&quot;&amp;gt;지식&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://miznet.daum.net/?t__nil_bestservice=miznet&quot;&amp;gt;미즈넷&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;/ul&amp;gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;ul class=&quot;sub f3&quot;&amp;gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://tv.media.daum.net/?t__nil_bestservice=tv&quot;&amp;gt;텔존&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://home.finance.daum.net/?t__nil_bestservice=finance&quot;&amp;gt;금융&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://comic.daum.net/?t__nil_bestservice=comic&quot;&amp;gt;만화&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://fortune.daum.net/?t__nil_bestservice=fortune&quot;&amp;gt;운세&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;/ul&amp;gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;ul class=&quot;sub f4&quot;&amp;gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://music.daum.net/?t__nil_bestservice=music&quot;&amp;gt;뮤직&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://front.mobile.daum.net/message/Sms?t__nil_bestservice=sms&quot;&amp;gt;문자&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://tvpot.daum.net/?t__nil_bestservice=tvpot&quot;&amp;gt;동영상&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;/ul&amp;gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;</description>
			<category>HTML</category>
			<author>by jadunara(Nam 경탁) 나는너의힘</author>
			<guid>http://u2m.kr/163</guid>
			<comments>http://u2m.kr/163#entry163comment</comments>
			<pubDate>Sat, 15 May 2010 14:35:48 +0900</pubDate>
		</item>
		<item>
			<title>javamail</title>
			<link>http://u2m.kr/162</link>
			<description>&lt;br /&gt;</description>
			<category>JAVA</category>
			<author>by jadunara(Nam 경탁) 나는너의힘</author>
			<guid>http://u2m.kr/162</guid>
			<comments>http://u2m.kr/162#entry162comment</comments>
			<pubDate>Sat, 15 May 2010 13:52:55 +0900</pubDate>
		</item>
		<item>
			<title>화면효과</title>
			<link>http://u2m.kr/161</link>
			<description>&lt;div&gt;
메타태그&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
&amp;lt;meta http-equiv=&quot;Page-Enter&quot; content=&quot;revealtrans(duration=3, transition=23)&quot;&amp;gt;&lt;/div&gt;
&lt;div&gt;&amp;lt;meta http-equiv=&quot;Page-Exit&quot; content=&quot;revealtrans(duration=3, transition=23)&quot;&amp;gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
&amp;lt;meta&amp;gt;태그가 &amp;lt;html&amp;gt;태그 앞에 와야 함.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
transition=23은 랜덤효과, duration=3은 3초간 지속됨을 의미함.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
transition 효과&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
0 : 가운데로 모으기(박스형태)&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
1 : 밖으로 펼치기(박스형태)&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
2 : 가운데로 모으기(원형태)&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
3 : 밖으로 펼치기(원형태)&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
4 : 위로 닦아내기&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
5 : 아래로 닦아내기&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
6 : 오른쪽으로 닦아내기&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
7 : 왼쪽으로 닦아내기&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
8 : 세로 블라인드&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
9 : 가로 블라인드&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
10 : 가로 체크 무늬&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
11 : 세로 체크 무늬&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
12 : 흩어 뿌리기&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
13 : 수직 안쪽으로 나누기&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
14 : 수직 바깥쪽으로 나누기&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
15 : 수평 안쪽으로 나누기&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
16 : 수평 바깥쪽으로 나누기&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
17 : 왼쪽 아래로 계단모양&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
18 : 왼쪽 위로 계단모양&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
19 : 오른쪽 아래로 계단모양&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
20 : 오른쪽 위로 계단모양&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
21 : 가로 실선 무늬&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
22 : 세로 실선 무늬&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
23 : 0~22까의 효과를 랜덤으로 전환&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
&amp;nbsp;&lt;/div&gt;</description>
			<category>HTML</category>
			<author>by jadunara(Nam 경탁) 나는너의힘</author>
			<guid>http://u2m.kr/161</guid>
			<comments>http://u2m.kr/161#entry161comment</comments>
			<pubDate>Sat, 15 May 2010 13:50:15 +0900</pubDate>
		</item>
		<item>
			<title>배열을 복사하는 법(메소드)</title>
			<link>http://u2m.kr/160</link>
			<description>&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(99, 99, 99); font-family: 돋움, Dotum, AppleGothic, sans-serif; line-height: 24px; font-size: medium; &quot;&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; text-indent: 8pt; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 굴림; font-size: 8pt; &quot;&gt;&lt;font size=&quot;3&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;public static void arraycopy(Object sarr,&lt;span style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;/*원본배열.*/&lt;o:p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; text-indent: 8pt; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 굴림; font-size: 8pt; &quot;&gt;&lt;font size=&quot;3&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&lt;span style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;int st_position,&lt;span style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;/*원본배열의 시작위치*/&lt;o:p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; text-indent: 8pt; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 굴림; font-size: 8pt; &quot;&gt;&lt;font size=&quot;3&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&lt;span style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Object earr,&lt;span style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;/*복사할 배열*/&lt;o:p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; text-indent: 8pt; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 굴림; font-size: 8pt; &quot;&gt;&lt;font size=&quot;3&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&lt;span style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;int ed_position,&lt;span style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;/* 복사할 배열의 시작위치 */&lt;o:p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 굴림; font-size: 8pt; &quot;&gt;&lt;font size=&quot;3&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&lt;span style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;int length)&lt;span style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;/*복사할 개수.*/&lt;o:p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;System.arraycopy(a, 2, b, 3, 4);&lt;br style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&lt;br style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;위와 같이 arraycopy를 이용하는 방법과 다음의 clone을 이용하는 방법이 있습니다.&lt;br style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&lt;br style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 굴림; &quot;&gt;int[] a =&amp;nbsp;&lt;b style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;(int[])&lt;/b&gt;b.clone();&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 굴림; &quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 굴림; &quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; &quot;&gt;출처 :&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;a href=&quot;http://yayongi.tistory.com/category/Programming/JAVA&quot; target=&quot;_blank&quot; title=&quot;[http://yayongi.tistory.com/category/Programming/JAVA]로 이동합니다.&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; &quot;&gt;http://yayongi.tistory.com/category/Programming/JAVA&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.5; font-family: 굴림; &quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;</description>
			<category>JAVA</category>
			<author>by jadunara(Nam 경탁) 나는너의힘</author>
			<guid>http://u2m.kr/160</guid>
			<comments>http://u2m.kr/160#entry160comment</comments>
			<pubDate>Fri, 30 Apr 2010 19:32:19 +0900</pubDate>
		</item>
	</channel>
</rss>

