<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://pimg.daum-img.net/whsnake/css/atom.css?ver=1.0" type="text/css"?>
<feed xmlns="http://www.w3.org/2005/Atom" version="1.0" >
  <title>Time</title>
  <link rel="alternate" type="text/html" href="http://blog.daum.net/best_time"/>
  <link rel="self" type="application/atom+xml" href="http://blog.daum.net/xml/atom/best_time"/>
  <rights>서니</rights>
  <author>
    <name>서니</name>
    <uri>http://blog.daum.net/best_time</uri>
  </author>
  <generator uri="http://blog.daum.net" version="1.0">Daum blog (blogmaster@daum.net)</generator>
  <id>tag:blog.daum.net,2009:best_time</id>
  <updated>2009-06-24T10:30:31Z</updated>

  		<entry>
	    <title>POJO</title>
		<link rel="alternate" type="text/html" href="http://blog.daum.net/best_time/12682419"/>
		<id>tag:blog.daum.net,2009:best_time.12682419</id>
	    <author>
		    <name>서니</name>
	    </author>
	    <updated>2009-06-24T10:30:31Z</updated>
	    <published>2009-06-24T10:30:31Z</published>
	    <content type="html">
	    	&lt;p&gt;- 출처 : &lt;A href=&quot;http://blog.naver.com/thtlsgkrtod/40055742326&quot; target=&quot;_blank&quot;&gt;http://blog.naver.com/thtlsgkrtod/40055742326&lt;/a&gt;&amp;nbsp;-&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;br&gt;POJO (Plain Old java Object) 를 해석하면 평범 자바 오브젝트라고 한다. &lt;br&gt;
POJO를 이해 하기 전&amp;nbsp; POJO라는 단어가 만들어진 역사적 배경을 살펴볼 필요가 잇다. &lt;span style=&quot;color: rgb(0, 0, 0); background-color: rgb(228, 255, 117);&quot;&gt;POJO
는 마틴 파울러가&amp;nbsp; 2000년 가을에 열렸던 어느 컨퍼런스의 발표를 준비하면서 처음 만들어낸 말이다. 마틴 파울러는
EJB(Enterprise JavaBean)보다는 단순한 자바 오브젝트에 도메인 로직을 넣어 사용하는 것이 여러가지 장점이
있는데도 왜 사람들이 그 EJB가 아닌 '평범한자바 오브젝트'를 사용하기를 꺼려 하는지에 대해 의문&lt;/span&gt;을 가졌다. 그리고 그는 단순한 오브젝트에는 EJB와 같은 그럴듯한 이름이 없어어서 그 사용을 주저하는 것이라고 결론 내렸다. &lt;br&gt;
&amp;nbsp; 그래서 만든 단어가 POJO라는 용어인 것이다. POJO기반의 기술을 사용한다고 말하면 왠지 첨단 기술을 사용하는 앞선 개발자인 듯한 인상을 주기 때문인다.&lt;br&gt;
&lt;br&gt;POJO기반의 프로그래밍 기술이 EJB의 강력한 대안으로 등장했고 ,POJO 기반 프레임워크 ,POJO 애플리케이션을
위한 플랫폼 등이 점점 인기를 끌게 되었고, 결국 POJO가 배제하려고 했던 EJB는 POJO기반의 기술에 밀려 이제 레거시
기술로 사라질 위기에 처했다. 그렇다면 단지 EJB를 사용하지 않으면 모두 POJO라고 할 수 있을까? 그렇지 않다.
POJO프로그래밍이라는 개념은 단지 &quot;EJB가 아닌 자바&quot;이상의 특징을 가지고 있는 &lt;span style=&quot;font-weight: bold;&quot;&gt;프로그래밍 모델&lt;/span&gt;이다. POJO기반의 개발은 생각보다 단순하지 않다.&lt;br&gt;
&amp;nbsp;&lt;span style=&quot;color: rgb(0, 0, 0); background-color: rgb(228, 255, 117); text-decoration: underline;&quot;&gt; POJO를 좀더 이해하려면 EJB의 장단점을 함께 이해해야 한다. 그것은 POJO 프로그래밍이 다시 EJB시대이전으로 돌아 가자는 것이 아니고 ,EJB를 넘어 그보다 더 앞으로 나아가자는 것이기 때문&lt;/span&gt;이다. &lt;br&gt;
EJB를 사용하지 말고 POJO를 쓰자는 것은&amp;nbsp; EJB이전의&lt;span id=&quot;callbacknesthappybrucetistorycom1799814&quot; style=&quot;width: 1px; height: 1px; float: right;&quot;&gt;&lt;embed allowscriptaccess=&quot;always&quot; id=&quot;bootstrapperhappybrucetistorycom1799814&quot; src=&quot;http://happybruce.tistory.com/plugin/CallBack_bootstrapperSrc?nil_profile=tistory&amp;nil_type=copied_post&quot; wmode=&quot;transparent&quot; type=&quot;application/x-shockwave-flash&quot; enablecontextmenu=&quot;false&quot; flashvars=&quot;&amp;callbackId=happybrucetistorycom1799814&amp;host=http://happybruce.tistory.com&amp;embedCodeSrc=http%3A%2F%2Fhappybruce.tistory.com%2Fplugin%2FCallBack_bootstrapper%3F%26src%3Dhttp%3A%2F%2Fcfs.tistory.com%2Fblog%2Fplugins%2FCallBack%2Fcallback%26id%3D179%26callbackId%3Dhappybrucetistorycom1799814%26destDocId%3Dcallbacknesthappybrucetistorycom1799814%26host%3Dhttp%3A%2F%2Fhappybruce.tistory.com%26float%3Dleft&quot; swliveconnect=&quot;true&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;&lt;/span&gt;
방식으로 돌아 가는 것을 의미한다면 또 다른 문제가 발생 할 수 밖에 없다. 여전히 복잡한 로우레벨의 API를 이용해 코드를
작성해야 하고, 많은 기술적인 문제를 애플리케이션 코드에 그대로 노출시켜 개발해야 한다면 기껏 POJO로의 복귀 덕분에 얻는
많은 장점들을 놓칠 수 밖에 없다. &lt;br&gt;
&lt;br&gt;&amp;nbsp; &lt;strong&gt;그래서 등장한 것이 POJO 기반의 프레임워크이다. &lt;/strong&gt;&lt;span style=&quot;color: rgb(0, 0, 0); background-color: rgb(228, 255, 117);&quot;&gt;POJO프레임워크는 POJO를 이용한 애플리케이션 개발이 가진 특징과 장점을 그대로 살리면서 EJB에서 제공하는 엔터프라이즈 서비스와 기술을 그대로 사용할 수 있도록 도와주느 프레임워크&lt;/span&gt;이다. 나아가 이는 기존의 EJB에서보다 훨씬 더 세련되고 나은 방법이다. 데표적인 프레임웤 &lt;strong&gt;스프링 하이버네이트~!&lt;br&gt;
&lt;/strong&gt;&lt;br&gt;
참고로 &lt;strong&gt;스프링은 엔터프라이즈 서비스들을 POJO기반으로 만든 비지니스 오브젝트에서 사용할 수 있게 한다.&lt;/strong&gt; 대표적인 선언적인 트랜잭션 서비스와 보안이다. 또한 EJB와 마찬가지로 오브젝트 컨테이너를 제공해서 인스턴스의 라이프사이클을 과리하고 필요에 따라 &lt;strong&gt;스레딩, 풀링 및 서비스 인젝션 등의 기능을 제공&lt;/strong&gt;한다. 또한 OOP를 더&amp;nbsp; OOP답게 사용 할 수있게 하는 &lt;strong&gt;AOP기술&lt;/strong&gt;을 적용해서 POJO개발을 더 쉽게 만든다. &lt;br&gt;
&lt;br&gt;&lt;strong&gt;POJO프로그램의 진정한 가치는 자바의 객체지향적인 특징을 살려 비지니스 로직에 충실한 개발이 가능 하도록 하는것이기도 하다. &lt;br&gt;
&lt;/strong&gt;&lt;br&gt;
&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);&quot;&gt;&lt;br&gt;
내생각(원문 필자)을 적자면 &lt;/span&gt;&lt;br style=&quot;font-weight: bold; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);&quot;&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);&quot;&gt;평범한 자바 객체로 프로그래밍 하기라고 부르며, 침략적인 코드를 적지 않은 것이다. &lt;/span&gt;&lt;br style=&quot;font-weight: bold; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);&quot;&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);&quot;&gt;&lt;br&gt;
쉽게 말해 implement 와 extends를 사용 하지 않으며&lt;/span&gt;&lt;br style=&quot;font-weight: bold; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);&quot;&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);&quot;&gt;콤포지션과 인터페이스타입으로 프로그래밍 하는것(이건 레디 존슨)&lt;/span&gt;&lt;br style=&quot;font-weight: bold; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);&quot;&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);&quot;&gt;특정 클래스의 concrete class가 되면 안되고, 구현 체도 되면 안된다.&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
	    </content>
	    	</entry>
    	<entry>
	    <title>웹 어플리케이션 보안 인가</title>
		<link rel="alternate" type="text/html" href="http://blog.daum.net/best_time/12682418"/>
		<id>tag:blog.daum.net,2009:best_time.12682418</id>
	    <author>
		    <name>서니</name>
	    </author>
	    <updated>2009-06-23T14:55:30Z</updated>
	    <published>2009-06-23T14:55:30Z</published>
	    <content type="html">
	    	&lt;p&gt;★세 가지 유형의 해커들을 경계할 필요가 있다.&lt;br&gt;&lt;strong&gt;Impersonator&lt;/strong&gt;(임퍼스네이터): 마치 다른 사람인양 속이는 놈. (e.g. 다른 사람 아디로 뭐 산다.)&lt;br&gt;&lt;strong&gt;Upgrader&lt;/strong&gt;: 자신의 등급을 속이는 놈. (e.g. 일반 사용자가 프리미엄 사용자인 것처럼 속인다.)&lt;br&gt;&lt;strong&gt;Eavesdropper&lt;/strong&gt;(이즈드롭퍼): 중요한 정보를 몰래 훔쳐보는 놈. (e.g. 남의 주민등록번호를 알아낸다.)&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;★서블릿 보안의 4요소&lt;br&gt;쟤네들의 침략을 막기 위해서는 &lt;strong&gt;서블릿 보안&lt;/strong&gt;밖에 방법이 없다.&lt;br&gt;서블릿 보안을 4가지 개념으로 압축해서 다룰 수 있다.&lt;br&gt;(1) &lt;strong&gt;Authentication&lt;/strong&gt;(인증): by whom &amp;nbsp; // e.g. 요청한 사용자의 아이디가 pgwpgw인지 체크&lt;br&gt;(2) &lt;strong&gt;Authorization&lt;/strong&gt;(인가): what can be done &amp;nbsp; // e.g. 요청한 사용자가 프리미엄 회원인지 체크&lt;br&gt;(3) &lt;strong&gt;Confidentiality&lt;/strong&gt;(비밀 보장) &amp;nbsp; // e.g. 데이터를 암호화해서 전송함. (cf. HTTPS)&lt;br&gt;(4) &lt;strong&gt;Data Integrity&lt;/strong&gt;(데이터 무결성)&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;★HTTP 환경에서 transaction 보안 기초 과정&lt;br&gt;1. 브라우저가 자원을 요청.&lt;br&gt;2. 컨테이너가 그 자원에 제약 조건이 걸려있다는 것을 확인. HTTP 401 (unauthorized)응답을 보냄.&lt;br&gt;3. 브라우저는 401코드를 보고 보안 영역 정보에 기초하여 사용자에게 이름/패스워드를 물어봄.&lt;br&gt;4. 사용자가 후다닥 입력하고 엔터.&lt;br&gt;5. 브라우저가 자원을 요청. (이름/패스워드를 포함해서 요청을 보냄)&lt;br&gt;6. 이름/패스워드가 valid하다면 사용자가 이 자원을 접근할 수 있는지 확인한다.&lt;br&gt;※ 2번에서 제약 조건 확인을 위하여 &quot;보안 테이블&quot;이 존재한다. 자원URL과 제약 조건 여부가 적혀있는 듯.&lt;br&gt;※ 6번에서 인증과 인가를 모두 실시한다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;★Transaction 보안 기초 과정에서 컨테이너가 내부적으로 하는 일&lt;br&gt;(1) 요청 자원에 대한 lookup 작업을 한다.&lt;br&gt;&amp;nbsp;- 요청한 사람이 볼 수 있는 자원인지&lt;br&gt;&amp;nbsp;- 자원에 보안 제약이 걸려있는지&lt;br&gt;&amp;nbsp;- 서블릿 자체에 보안 플래그가 달려있는지 등...&lt;br&gt;(2) 인증 작업을 한다.&lt;br&gt;&amp;nbsp;- 당신이 Bob인지 체크.&lt;br&gt;(3) 인가 작업을 한다.&lt;br&gt;&amp;nbsp;- Bob이 특정 서블릿에 접근할 수 있는지 체크.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;★보안 관련 제약 사항은 배포 서술자에 선언적으로 관리한다.&lt;br&gt;난 기존의 애플리케이션들을 &lt;strong&gt;프로그램적&lt;/strong&gt;으로 보안을 설정하였는데&lt;br&gt;95%가 &lt;strong&gt;선언적&lt;/strong&gt;으로 한다고 한다 -_-;;&lt;br&gt;그 이유는...&lt;br&gt;&lt;br&gt;1. CBD가 가능.&lt;br&gt;2. 비싼 돈 주고 산 컨테이너 잘 활용.&lt;br&gt;3. 애플리케이션이 많아지고 복잡해져도 유지보수가 쉬움.&lt;br&gt;4. 재미있다.&lt;br&gt;5. 보안 관련 소스 코드 없이도 서블릿 재사용 가능.&lt;br&gt;6. 시험에 나옴.&lt;br&gt;7. &lt;strong&gt;서블릿을 좀 더 유연하게 작성 가능.&lt;/strong&gt;&lt;br&gt;8. &lt;strong&gt;이력서에 이런 일을 했다고 적음 ㅋㅋ&lt;/strong&gt;&lt;br&gt;9. 기업 IT부서에 실제로 이 일을 하는 사람이 있음.&lt;br&gt;10. XML을 어떻게 작성하는지 모르는 사람이 거의 없음.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;★웹 애플리케이션 보안 관련 업무 분담&lt;br&gt;- 서블릿 개발자: 서블릿마다 보안 정책을 다르게 적용하기 위해서 기능마다 적절한 모듈화를 시켜야 한다.&lt;br&gt;- 애플리케이션 관리자: 애플리케이션에 어떤 사용자 역할(e.g. 손님, 회원)이 있어야 하는지 결정하고 컨테이너&lt;br&gt;&amp;nbsp; 사용자 파일에 등록된 사용자를 사용자 역할에 매핑시킨다.&lt;br&gt;- 배포자: 서블릿 개발자와 애플리케이션 관리자가 알려준 정보를 바탕으로 역할과 서블릿을 매핑한다. 예를 들어&lt;br&gt;&amp;nbsp; 손님은 foo.Buy 서블릿에 접근할 수 없다고 매핑...&lt;br&gt;※ 일반적인 경우 원맨쇼를 해야되지만,&lt;span id=&quot;callbacknestscudtistorycom13994208&quot; style=&quot;width: 1px; height: 1px; float: right;&quot;&gt;&lt;embed allowscriptaccess=&quot;always&quot; id=&quot;bootstrapperscudtistorycom13994208&quot; src=&quot;http://scud.tistory.com/plugin/CallBack_bootstrapperSrc?nil_profile=tistory&amp;nil_type=copied_post&quot; wmode=&quot;transparent&quot; type=&quot;application/x-shockwave-flash&quot; enablecontextmenu=&quot;false&quot; flashvars=&quot;&amp;callbackId=scudtistorycom13994208&amp;host=http://scud.tistory.com&amp;embedCodeSrc=http%3A%2F%2Fscud.tistory.com%2Fplugin%2FCallBack_bootstrapper%3F%26src%3Dhttp%3A%2F%2Fcfs.tistory.com%2Fblog%2Fplugins%2FCallBack%2Fcallback%26id%3D1399%26callbackId%3Dscudtistorycom13994208%26destDocId%3Dcallbacknestscudtistorycom13994208%26host%3Dhttp%3A%2F%2Fscud.tistory.com%26float%3Dleft&quot; swliveconnect=&quot;true&quot; width=&quot;1&quot; height=&quot;1&quot;&gt;&lt;/span&gt; 단계별로 알아놓는 것이 좋다.&lt;br&gt;※ 보안 개념상으로만 봤을 때 &lt;strong&gt;인가&lt;/strong&gt;가 가장 중요하며 복잡하다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;★인증부터 해보자.&lt;br&gt;사실 보통 회사에서 관리하는 인증 데이터들은 DBMS 또는 LDAP에 저장되어 있고,&lt;br&gt;대부분 컨테이너는 이를 지원하기 위한 방법도 따로 제공한다.&lt;br&gt;일단 우리는 {Tomcat}/conf/tomcat-users.xml 에 다음과 같은 방식으로 사용자와 그의 역할을 선언해볼 것이다.&lt;br&gt;&lt;/p&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfs13.tistory.com/image/11/tistory/2009/05/12/22/23/4a097845697d3&quot; alt=&quot;사용자 삽입 이미지&quot; width=&quot;510&quot; height=&quot;371&quot;&gt;&lt;/div&gt;&lt;br&gt;이제 이 인증을 활성화시키려면 DD 상에 다음과 같이 설정해야 한다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfs14.tistory.com/image/4/tistory/2009/05/12/23/02/4a098171576ae&quot; alt=&quot;사용자 삽입 이미지&quot; width=&quot;585&quot; height=&quot;753&quot;&gt;&lt;/div&gt;※ 위에 잘못됨. role-name can be (0 .. *) 이다. 하나도 없으면 어떠한 사용자도 접근할 수 없다는 의미.&lt;br&gt;&lt;br&gt;&lt;br&gt;위의 상태에서 &lt;A href=&quot;http://loaclhost/Wow/Beer.do&quot; target=&quot;_blank&quot;&gt;http://loaclhost/Wow/Beer.do&lt;/a&gt;로 접속하니까 다음과 같은 창이 뜬다.&lt;br&gt;&lt;br&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfs12.tistory.com/image/36/tistory/2009/05/12/23/39/4a098a2450eb3&quot; alt=&quot;사용자 삽입 이미지&quot; width=&quot;379&quot; height=&quot;318&quot;&gt;&lt;/div&gt;&lt;br&gt;admin으로 접속하면 서블릿이 제대로 동작하여 리스폰스를 받아볼 수 있고,&lt;br&gt;youare로 접속하면 서비스가 denied된다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;★DD파일 관련 사족&lt;br&gt;- &lt;web-resource-name&gt;은 반드시 있어야 하는 항목이다. (그냥 컨테이너 내부적으로 사용한다.)&lt;br&gt;- &lt;url-pattern&gt;에 들어가는 값은 서블릿 표준 명명 규칙 및 매핑 규칙을 따른다.&lt;br&gt;- &lt;http-method&gt;를 등록하지 않으면 모든 메소드에 다 제약을 건다는 것으로 간주된다.&lt;br&gt;- &lt;http-method&gt;로 메소드를 등록한다는 의미는 해당 메소드에 제약을 건다는 의미이기도 하지만, 반대로 이를 제외한 나머지 HTTP 메소드는 모두 자동적으로 허용한다는 걸 의미한다.&lt;br&gt;- &lt;security-constraint&gt; 안에 하나 이상의 &lt;web-resource-collection&gt;을 포함할 수 있다.&lt;br&gt;- &lt;auth-constraint&gt;는 &lt;security-constraint&gt;안에 있는 모든 &lt;web-resource-collection&gt;에 적용된다.&lt;br&gt;- &lt;auth-constraint&gt;안에 있는 &lt;role-name&gt;은 optional이다. 하나도 없으면 어떠한 사용자도 접근 못한다는 의미다.&lt;br&gt;- &lt;role-name&gt;*&lt;/role-name&gt;은 모든 사용자가 다 접근할 수 있다는 말임.&lt;br&gt;- &lt;auth-constraint&gt;는 옵션 항목이다. 항목이 있다는 말은, 관련 URL에 대하여 인증을 실시하라고 컨테이너에게 지시하는 것이다. 항목이 없다면, 인증 없이도 접근할 수 있다는 말이다.&lt;br&gt;- 유지보수를 위하여 &lt;strong&gt;&lt;auth-constraint&gt; 안에 &lt;description&gt;&lt;/strong&gt;을 작성할 것을 추천한다.&lt;br&gt;- &lt;auth-constraint&gt;를 empty tag, 즉 &lt;strong&gt;&lt;auth-constraint/&gt;&lt;/strong&gt;로 기술한다면, 어떤 사용자도 접근 못함.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;★&lt;security-constraint&gt; 항목이 여러 개 있는데 겹칠 경우는 어케되나요?&lt;br&gt;어떤 서블릿 또는 서블릿 집합에 대해서 두 개 이상의 &lt;security-constraint&gt;로 제약을 걸면 어떻게 될까?&lt;br&gt;다음의 룰을 따른다.&lt;br&gt;1. 역할 이름이 각각 등록되어 있다면, 등록된 모든 역할이 접근 가능.&lt;br&gt;2. 역할 이름에 *이 들어 있는 것과 다른 것이 같이 있다면, 모든 사용자가 접근 가능.&lt;br&gt;3. &lt;auth-constraint/&gt;와 다른 것이 같이 있다면 누구도 접근할 수 없다.&lt;br&gt;4. &lt;security-constraint&gt;에 정의된 &lt;auth-constraint&gt;가 없는 경우 다른 것이 같이 있다면 누구나 다 접근 가능.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;★아놔 &lt;auth-constraint/&gt;는 왜 있는건데?&lt;br&gt;request dispatcher로 포워딩은 할테지만&lt;br&gt;직접 접근은 막는 것들이 존재하니까...&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;★
톰캣 메모리 상주 영역(Realm)을 사용한다면 위와 같이 해야 한다. 하지만 실제로 DB나 LDAP와 연동하는 제품을 사용하기
때문에 굳이 이렇게 할 필요는 &quot;전혀&quot; 없다. 실용성이 없다 이말. 그냥 이런 것도 있다고 알아두자.&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;br&gt;&lt;br&gt;tag : &lt;a href=&quot;/_blog/tagArticleList.do?BLOGID=0EpNI&amp;amp;tagName=보안&quot; rel=&quot;tag&quot; target=&quot;_blank&quot;&gt;보안&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;/_blog/tagArticleList.do?BLOGID=0EpNI&amp;amp;tagName=웹 어플리케이션&quot; rel=&quot;tag&quot; target=&quot;_blank&quot;&gt;웹 어플리케이션&lt;/a&gt;
	    </content>
	    	</entry>
    	<entry>
	    <title>공유기 내에서 원격데스크톱 사용해보자.</title>
		<link rel="alternate" type="text/html" href="http://blog.daum.net/best_time/12682416"/>
		<id>tag:blog.daum.net,2009:best_time.12682416</id>
	    <author>
		    <name>서니</name>
	    </author>
	    <updated>2009-06-20T09:28:32Z</updated>
	    <published>2009-06-20T09:28:32Z</published>
	    <content type="html">
	    	&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style=&quot;TEXT-ALIGN: center&quot;&gt;&lt;img src=&quot;http://cfile213.uf.daum.net/image/203790224A3C2D0553A729&quot; class=&quot;tx-daum-image&quot; style=&quot;CLEAR: none; FLOAT: none&quot; actualwidth=&quot;737&quot; hspace=&quot;1&quot; width=&quot;737&quot; vspace=&quot;1&quot; border=&quot;0&quot; /&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;br&gt;&lt;br&gt;tag : &lt;a href=&quot;/_blog/tagArticleList.do?BLOGID=0EpNI&amp;amp;tagName=원격데스크톱 공유기&quot; rel=&quot;tag&quot; target=&quot;_blank&quot;&gt;원격데스크톱 공유기&lt;/a&gt;
	    </content>
	    	</entry>
    	<entry>
	    <title>원격데스트톱 안될때 nvidia 그래픽카드 문제 해결 방법.</title>
		<link rel="alternate" type="text/html" href="http://blog.daum.net/best_time/12682415"/>
		<id>tag:blog.daum.net,2009:best_time.12682415</id>
	    <author>
		    <name>서니</name>
	    </author>
	    <updated>2009-06-20T09:17:32Z</updated>
	    <published>2009-06-20T09:17:32Z</published>
	    <content type="html">
	    	&lt;P&gt;Windows 2003 을 사용중인데 얼마전부터 원격 데스크톱으로 접속을 하면 접속이 되지 않았습니다. 관련 글들을 검색해보니 NVidia 그래픽 드라이버 문제라서 옛날 드라이버를 설치하면 문제가 발생하지 않는다는 내용이 있어서 적용해보았으나 저의 경우에는 해당 사항이 없었습니다.&lt;BR&gt;&lt;BR&gt;그러던 중 이벤트 뷰어를 확인해보고자 이벤트 뷰어를 열었더니 관련 오류 내용이 검색되었습니다.&lt;/P&gt;
&lt;P style=&quot;TEXT-ALIGN: center&quot;&gt;응용 프로그램 팝업 : :&lt;SPAN id=callbacknestthinkwebtistorycom5416 style=&quot;FLOAT: left; WIDTH: 226px; HEIGHT: 196px&quot;&gt;
&lt;OBJECT id=thinkwebtistorycom5416 codeBase=http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0 height=&quot;100%&quot; width=&quot;100%&quot; classid=clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&gt;&lt;PARAM NAME=&quot;_cx&quot; VALUE=&quot;5953&quot;&gt;&lt;PARAM NAME=&quot;_cy&quot; VALUE=&quot;5186&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=callbacknestthinkwebtistorycom5416&amp;id=5&amp;callbackId=thinkwebtistorycom5416&amp;host=http://thinkweb.tistory.com&amp;float=left&amp;&quot;&gt;&lt;PARAM NAME=&quot;Src&quot; VALUE=&quot;http://cfs.tistory.com/blog/plugins/CallBack/callback.swf?destDocId=callbacknestthinkwebtistorycom5416&amp;id=5&amp;callbackId=thinkwebtistorycom5416&amp;host=http://thinkweb.tistory.com&amp;float=left&amp;&quot;&gt;&lt;PARAM NAME=&quot;WMode&quot; VALUE=&quot;Transparent&quot;&gt;&lt;PARAM NAME=&quot;Play&quot; VALUE=&quot;0&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;thinkwebtistorycom5416&quot; src=&quot;http://cfs.tistory.com/blog/plugins/CallBack/callback.swf?destDocId=callbacknestthinkwebtistorycom5416&amp;id=5&amp;callbackId=thinkwebtistorycom5416&amp;host=http://thinkweb.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; \SystemRoot\System32\RDPDD.dll failed to load&lt;BR&gt;
&lt;DIV class=&quot;imageblock center&quot; style=&quot;CLEAR: both; TEXT-ALIGN: center&quot;&gt;&lt;IMG height=416 alt=&quot;&quot; src=&quot;http://cfs10.tistory.com/image/35/tistory/2008/11/10/11/32/49179d2898302&quot; width=469&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;관련 내용을 검색하다 보니 레지스터리를 수정함으로서 해결할 수 있다는 &lt;A title=&quot;[http://pdoti.tistory.com/69]로 이동합니다.&quot; href=&quot;http://pdoti.tistory.com/69&quot; target=_blank&gt;&lt;FONT color=#c45050&gt;내용&lt;/FONT&gt;&lt;/A&gt;을 찾았습니다. 이분은 NVidia 포럼에서 찾았다고 하네요.&lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management] &lt;/STRONG&gt;를 찾아서 &lt;STRONG&gt;SessionImageSize=dword:00000020&lt;/STRONG&gt; 내용을 추가합니다. 16진수로 32을 입력한 내용이구여 레지스터리 변경후 시스템을 재부팅하고 나니 정상적으로 접속이 되었습니다.&lt;/P&gt;
&lt;SCRIPT src=&quot;http://thinkweb.tistory.com/plugin/CallBack_bootstrapper?&amp;src=http://cfs.tistory.com/blog/plugins/CallBack/callback&amp;id=5&amp;callbackId=thinkwebtistorycom5416&amp;destDocId=callbacknestthinkwebtistorycom5416&amp;host=http://thinkweb.tistory.com&amp;float=left&amp;random=363&quot;&gt;&lt;/SCRIPT&gt;
	    </content>
	    	</entry>
    	<entry>
	    <title>원격데스크탑 안될때</title>
		<link rel="alternate" type="text/html" href="http://blog.daum.net/best_time/12682414"/>
		<id>tag:blog.daum.net,2009:best_time.12682414</id>
	    <author>
		    <name>서니</name>
	    </author>
	    <updated>2009-06-18T21:38:58Z</updated>
	    <published>2009-06-18T21:38:58Z</published>
	    <content type="html">
	    	&lt;H1 class=printNxhtmlTitle&gt;원격연결&lt;/H1&gt;
&lt;H4&gt;집에 있는 컴퓨터에 원격 연결이 안된다&lt;/H4&gt;
&lt;P&gt;아무런 에러메시지도 없이 뜅겨 나오는 현상이 있다.&lt;/P&gt;
&lt;P&gt;구글링을 해본 결과 nvidia 그래픽 카드를 사용하는 일부 유저에서 그런 현상이 있다고 블로그에 게시물이 있었다.&lt;/P&gt;
&lt;P&gt;내가 당시 쓰고 있던 그래픽 카드 드라이버는 GeForce 7300GT version 5.73.22.46.00 (175.19 forceware) 였다.&lt;/P&gt;
&lt;P&gt;&lt;A class=&quot;external newWindow&quot; title=http://youngjr.tistory.com/29 href=&quot;http://youngjr.tistory.com/29&quot;&gt;&lt;FONT color=#0000ff&gt;SP3에서 원격데스크톱 연결이 안될 때&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;최신 드라이버를 설치하니 원격 연결이 잘 되는 것을 확인 할 수 있었다.&lt;/P&gt;
&lt;H5&gt;원격연결을 하기 위해서는&lt;/H5&gt;
&lt;P&gt;[제어판-시스템]에서 원격 데스크톱에서 아래 그림처럼 체크가 되어 있어야 한다.&lt;/P&gt;
&lt;P&gt;&lt;IMG class=attachment title=system.png alt=system.png src=&quot;http://namoda.springnote.com/pages/1503930/attachments/757874&quot;&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;또한 방화벽도 해제가 되어야 한다.&lt;/P&gt;
&lt;P&gt;&lt;IMG class=attachment title=firewall.png alt=firewall.png src=&quot;http://namoda.springnote.com/pages/1503930/attachments/757884&quot;&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A class=&quot;external newWindow&quot; title=http://www.parkoz.com/zboard/view.php?id=my_tips&amp;no=10367 href=&quot;http://www.parkoz.com/zboard/view.php?id=my_tips&amp;no=10367&quot;&gt;&lt;FONT color=#0000ff&gt;http://www.parkoz.com/zboard/view.php?id=my_tips&amp;no=10367&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H5&gt;터미널 서버 패치&lt;/H5&gt;
&lt;P&gt;파일:&lt;/P&gt;
&lt;P&gt;XP 서비스팩 2 &amp; 3 (&lt;A class=attachment title=Termiserv_XPSP2-SP3_i386_2.1.exe href=&quot;http://namoda.springnote.com/pages/1503930/attachments/652760&quot;&gt;&lt;FONT color=#800080&gt;Termiserv_XPSP2-SP3_i386_2.1.exe&lt;/FONT&gt;&lt;/A&gt; ) - &lt;A class=&quot;external newWindow&quot; title=http://www.microsoft.com/downloadS/details.aspx?displaylang=ko&amp;FamilyID=5b33b5a8-5e76-401f-be08-1e1555d4f3d4 href=&quot;http://www.microsoft.com/downloadS/details.aspx?displaylang=ko&amp;FamilyID=5b33b5a8-5e76-401f-be08-1e1555d4f3d4&quot;&gt;&lt;FONT color=#0000ff&gt;서비스팩 3&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;XP 서비스팩2만 (&lt;A class=attachment title=Termiserv_XPSP2_i386_1.0.exe href=&quot;http://namoda.springnote.com/pages/1503930/attachments/652762&quot;&gt;&lt;FONT color=#0000ff&gt;Termiserv_XPSP2_i386_1.0.exe&lt;/FONT&gt;&lt;/A&gt; )&lt;/P&gt;
&lt;P&gt;(출처 : http://www.kood.org/terminal-server-patch/)&lt;/P&gt;
&lt;P&gt;XP의 로그 아웃 되는 문제 : &lt;A href=&quot;http://unfusion.kunsan.ac.kr/word/archive/296&quot; target=&quot;_blank&quot;&gt;&lt;FONT color=#0000ff&gt;http://unfusion.kunsan.ac.kr/word/archive/296&lt;/FONT&gt;&lt;/A&gt; (XP에 여러사용자의 접속을 허용하는 패치)&lt;/P&gt;
&lt;P&gt;FAST USER SWITCHING (&lt;A class=&quot;external newWindow&quot; title=http://support.microsoft.com/kb/279765 href=&quot;http://support.microsoft.com/kb/279765&quot;&gt;&lt;FONT color=#0000ff&gt;빠른 사용자 전환 기능 사용&lt;/FONT&gt;&lt;/A&gt;)&lt;/P&gt;
&lt;DIV class=section style=&quot;BACKGROUND-COLOR: rgb(249,249,216)&quot;&gt;
&lt;P&gt;&lt;STRONG&gt;참고&lt;/STRONG&gt; : 빠른 사용자 전환을 설정하려면 &lt;STRONG class=uiterm&gt;시작 화면 사용&lt;/STRONG&gt; 옵션도 설정해야 합니다. 해당 컴퓨터가 도메인의 멤버이면 이 기능을 사용할 수 없습니다. 빠른 사용자 전환을 설정하려면 다음과 같이 하십시오.&lt;/P&gt;
&lt;TABLE class=&quot;list ol&quot;&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=number&gt;1.&lt;/TD&gt;
&lt;TD class=text&gt;해당 컴퓨터에 관리자로 로그온합니다.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=number&gt;2.&lt;/TD&gt;
&lt;TD class=text&gt;&lt;STRONG&gt;시작&lt;/STRONG&gt;을 누르고, &lt;STRONG&gt;제어판&lt;/STRONG&gt;을 누른 다음 &lt;STRONG&gt;사용자 계정&lt;/STRONG&gt;을 누릅니다.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=number&gt;3.&lt;/TD&gt;
&lt;TD class=text&gt;&lt;STRONG&gt;사용자 로그온 또는 로그오프 방법 변경&lt;/STRONG&gt;을 누릅니다.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=number&gt;4.&lt;/TD&gt;
&lt;TD class=text&gt;&lt;STRONG&gt;시작 화면 사용&lt;/STRONG&gt; 확인란이 선택되어 있지 않으면 이를 선택합니다.&lt;BR&gt;&lt;STRONG&gt;참고&lt;/STRONG&gt;: &lt;STRONG&gt;시작 화면 사용&lt;/STRONG&gt; 확인란을 선택해야 &lt;STRONG&gt;빠른 사용자 전환 사용&lt;/STRONG&gt; 확인란을 선택할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=number&gt;5.&lt;/TD&gt;
&lt;TD class=text&gt;&lt;STRONG&gt;빠른 사용자 전환 사용&lt;/STRONG&gt; 확인란을 선택한 다음 &lt;STRONG&gt;확인&lt;/STRONG&gt;을 누릅니다. 사용자 계정 도구를 종료합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;몇 명까지 나의 노트북에 접속이 되는지 테스트를 해보았다&lt;/STRONG&gt;.(사람들에게 부탁해서... '제발 접속해 주삼~' &quot;뭐하려고?&quot;, '그냥 좀 테스트로..')&lt;/P&gt;
&lt;P&gt;결론은 나 포함 7명까지.. 8명에서 접속이 튕긴다.&lt;/P&gt;
&lt;P&gt;&lt;IMG class=attachment title=multiUser.png alt=multiUser.png src=&quot;http://namoda.springnote.com/pages/1503930/attachments/653112&quot;&gt;&lt;/P&gt;
&lt;P&gt;그래도 윈도우 2003 서버의 원격 데스크탑 기본이 3명인데 그것보다 높네..&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;IMG class=attachment title=lack.png alt=lack.png src=&quot;http://namoda.springnote.com/pages/1503930/attachments/653114&quot;&gt;&lt;/P&gt;
&lt;P&gt;이게 뭥미!! 그래도 이건 좀 나은 캡쳐...&lt;/P&gt;
&lt;P&gt;&lt;IMG class=attachment title=lack1.png alt=lack1.png src=&quot;http://namoda.springnote.com/pages/1503930/attachments/653118&quot;&gt;&lt;/P&gt;
&lt;P&gt;아이콘들의 모임이 되어 버렸다.&lt;/P&gt;
&lt;P&gt;누군지 확인은 오른쪽 마우스를 눌러야만...&lt;/P&gt;
&lt;P&gt;&lt;IMG class=attachment title=lack2.png alt=lack2.png src=&quot;http://namoda.springnote.com/pages/1503930/attachments/653122&quot;&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;그리고 빠른 사용자 전환을 할 때 에러메시지가 나오는 현상이 있었다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H5&gt;원격연결 단축키&lt;/H5&gt;
&lt;P&gt;작업관리자 : ctrl+alt+del =&gt; ctl+alt+&lt;STRONG&gt;end&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;전체화면 모드로 전환 : Ctrl+Alt+Pause&lt;/P&gt;
	    </content>
	    	</entry>
    	<entry>
	    <title>Javascript Closures</title>
		<link rel="alternate" type="text/html" href="http://blog.daum.net/best_time/12682410"/>
		<id>tag:blog.daum.net,2009:best_time.12682410</id>
	    <author>
		    <name>서니</name>
	    </author>
	    <updated>2009-06-06T03:50:28Z</updated>
	    <published>2009-06-06T03:50:28Z</published>
	    <content type="html">
	    	&lt;p&gt;

&lt;/p&gt;&lt;h1&gt;&lt;a name=&quot;clHead&quot; id=&quot;clHead&quot;&gt;&lt;/a&gt;출처: http://jibbering.com/faq/faq_notes/closures.html&lt;br&gt;&lt;/h1&gt;&lt;h1&gt;&lt;br&gt;&lt;/h1&gt;&lt;h1&gt;&lt;a name=&quot;clHead&quot; id=&quot;clHead&quot;&gt;&lt;/a&gt;&lt;br&gt;&lt;/h1&gt;&lt;h1&gt;&lt;a name=&quot;clHead&quot; id=&quot;clHead&quot;&gt;Javascript Closures&lt;/a&gt;&lt;br&gt;&lt;/h1&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://jibbering.com/faq/faq_notes/closures.html#clIntro&quot;&gt;Introduction&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://jibbering.com/faq/faq_notes/closures.html#clResO&quot;&gt;The Resolution of Property Names on Objects&lt;/a&gt;
		&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://jibbering.com/faq/faq_notes/closures.html#clResA&quot;&gt;Assignment of Values&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://jibbering.com/faq/faq_notes/closures.html#clResR&quot;&gt;Reading of Values&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
	&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://jibbering.com/faq/faq_notes/closures.html#clIRExSc&quot;&gt;Identifier Resolution, Execution Contexts and Scope Chains&lt;/a&gt;
		&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://jibbering.com/faq/faq_notes/closures.html#clExCon&quot;&gt;The Execution Context&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://jibbering.com/faq/faq_notes/closures.html#clScCh&quot;&gt;Scope chains and [[scope]]&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://jibbering.com/faq/faq_notes/closures.html#clIdRes&quot;&gt;Identifier Resolution&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
	&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://jibbering.com/faq/faq_notes/closures.html#clClose&quot;&gt;Closures&lt;/a&gt;
		&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://jibbering.com/faq/faq_notes/closures.html#clAtGb&quot;&gt;Automatic Garbage Collection&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://jibbering.com/faq/faq_notes/closures.html#clFrmC&quot;&gt;Forming Closures&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
	&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://jibbering.com/faq/faq_notes/closures.html#clClDo&quot;&gt;What can be done with Closures?&lt;/a&gt;
		&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://jibbering.com/faq/faq_notes/closures.html#clSto&quot;&gt;Example 1: setTimeout with Function References&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://jibbering.com/faq/faq_notes/closures.html#clObjI&quot;&gt;Example 2: Associating Functions with Object Instance Methods&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://jibbering.com/faq/faq_notes/closures.html#clEncap&quot;&gt;Example 3: Encapsulating Related Functionality&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://jibbering.com/faq/faq_notes/closures.html#clOtE&quot;&gt;Other Examples&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
	&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://jibbering.com/faq/faq_notes/closures.html#clAc&quot;&gt;Accidental Closures&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://jibbering.com/faq/faq_notes/closures.html#clMem&quot;&gt;The Internet Explorer Memory Leak Problem&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt;&lt;a name=&quot;clIntro&quot; id=&quot;clIntro&quot;&gt;Introduction&lt;/a&gt;&lt;/h2&gt;

&lt;blockquote cite=&quot;http://groups.google.com/groups?selm=wu535hos.fsf@hotpop.com&quot;&gt;
	&lt;dl&gt;&lt;dt&gt;&lt;a name=&quot;clDefN&quot; id=&quot;clDefN&quot;&gt;Closure&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;A &quot;closure&quot; is an expression (typically a function) that
		    can have free variables together with an environment that binds
		    those variables (that &quot;closes&quot; the expression).
		&lt;/dd&gt;&lt;dd&gt;
	&lt;br&gt;&lt;/dd&gt;&lt;/dl&gt;
&lt;/blockquote&gt;

&lt;p&gt;
Closures are one of the most powerful features of ECMAScript
(javascript) but they cannot be property exploited without
understanding them. They are, however, relatively easy to create,
even accidentally, and their creation has potentially harmful
consequences, particularly in some relatively common web browser
environments. To avoid accidentally encountering the drawbacks and
to take advantage of the benefits they offer it is necessary to
understand their mechanism. This depends heavily on the role of
scope chains in identifier resolution and so on the resolution of
property names on objects.
&lt;/p&gt;

&lt;p&gt;
The simple explanation of a Closure is that ECMAScript allows inner
functions; function definitions and function expressions that are
inside the function bodes of other functions. And that those inner
functions are allowed access to all of the local variables, parameters
and declared inner functions within their outer function(s). A closure
is formed when one of those inner functions is made accessible outside
of the function in which it was contained, so that it may be executed
after the outer function has returned. At which point it still has
access to the local variables, parameters and inner function
declarations of its outer function. Those local variables, parameter
and function declarations (initially) have the values that they had
when the outer function returned and may be interacted with by the
inner function.
&lt;/p&gt;

&lt;p&gt;
Unfortunately, properly understanding closures requires an
understanding of the mechanism behind them, and quite a bit of
technical detail. While some of the ECMA 262 specified algorithms have
been brushed over in the early part of the following explanation, much
cannot be omitted or easily simplified. Individuals familiar with
object property name resolution may skip that section but only people
already familiar with closures can afford to skip the following
sections, and they can stop reading now and get back to exploiting
them.
&lt;/p&gt;

&lt;h2&gt;&lt;a name=&quot;clResO&quot; id=&quot;clResO&quot;&gt;The Resolution of Property Names on Objects&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;
ECMAScript recognises two categories of object, &quot;Native Object&quot;
and &quot;Host Object&quot; with a sub-category of native objects called
&quot;Built-in Object&quot; (ECMA 262 3rd Ed Section 4.3). Native objects
belong to the language and host objects are provided by the environment,
and may be, for example, document objects, DOM nodes and the like.
&lt;/p&gt;

&lt;p&gt;
Native objects are loose and dynamic bags of named properties (some
implementations are not that dynamic when it comes to the built in
object sub-category, though usually that doesn't matter). The defined
named properties of an object will hold a value, which may be a
reference to another Object (functions are also Objects in this sense)
or a primitive value: String, Number, Boolean, Null or Undefined. The
Undefined primitive type is a bit odd in that it is possible to assign
a value of Undefined to a property of an object but doing so does not
remove that property from the object; it remains a defined named
property, it just holds the value &lt;code&gt;undefined&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
The following is a simplified description of how property values are
read and set on objects with the internal details brushed over to the
greatest extent possible.
&lt;/p&gt;

&lt;h3&gt;&lt;a name=&quot;clResA&quot; id=&quot;clResA&quot;&gt;Assignment of Values&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;
Named properties of objects can be created, or values set on existing
named properties, by assigning a value to that named property. So
given:-
&lt;/p&gt;

&lt;pre&gt;var objectRef = new Object(); &lt;span class=&quot;commentJS&quot;&gt;//create a generic javascript object.&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;

&lt;p&gt;
A property with the name &quot;testNumber&quot; can be created as:-
&lt;/p&gt;

&lt;pre&gt;objectRef.testNumber = 5;&lt;br&gt;&lt;span class=&quot;commentJS&quot;&gt;/* - or:- */&lt;/span&gt;&lt;br&gt;objectRef[&quot;testNumber&quot;] = 5;&lt;br&gt;&lt;/pre&gt;

&lt;p&gt;
The object had no &quot;testNumber&quot; property prior to the
assignment but one is created when the assignment is made. Any
subsequent assignment does not need to create the property, it just
re-sets its value:-
&lt;/p&gt;

&lt;pre&gt;objectRef.testNumber = 8;&lt;br&gt;&lt;span class=&quot;commentJS&quot;&gt;/* - or:- */&lt;/span&gt;&lt;br&gt;objectRef[&quot;testNumber&quot;] = 8;&lt;br&gt;&lt;/pre&gt;

&lt;p&gt;
Javascript objects have prototypes that can themselves be objects, as
will be described shortly, and that prototype may have named
properties. But this has no role in assignment. If a value is assigned
and the actual object does not have a property with the corresponding
name a property of that name is created and the value is assigned to
it. If it has the property then its value is re-set.
&lt;/p&gt;

&lt;h3&gt;&lt;a name=&quot;clResR&quot; id=&quot;clResR&quot;&gt;Reading of Values&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;
It is in reading values from object properties that prototypes come
into play. If an object has a property with the property name used in
the property accessor then the value of that property is returned:-
&lt;/p&gt;

&lt;pre&gt;&lt;span class=&quot;commentJS&quot;&gt;/* Assign a value to a named property. If the object does not have a&lt;br&gt;   property with the corresponding name prior to the assignment it&lt;br&gt;   will have one after it:-&lt;br&gt;*/&lt;/span&gt;&lt;br&gt;objectRef.testNumber = 8;&lt;br&gt;&lt;br&gt;&lt;span class=&quot;commentJS&quot;&gt;/* Read the value back from the property:- */&lt;/span&gt;&lt;br&gt;&lt;br&gt;var val = objectRef.testNumber;&lt;br&gt;&lt;span class=&quot;commentJS&quot;&gt;/* and  - val - now holds the value 8 that was just assigned to the&lt;br&gt;   named property of the object. */&lt;/span&gt;&lt;br&gt;   &lt;/pre&gt;

&lt;p&gt;
But all objects may have prototypes, and prototypes are objects so they, in
turn, may have prototypes, which may have prototypes, and so on forming
what is called the prototype chain. The prototype chain ends when one
of the objects in the chain has a null prototype. The default prototype for the
&lt;code&gt;Object&lt;/code&gt; constructor has a null prototype so:-
&lt;/p&gt; 

&lt;pre&gt;var objectRef = new Object(); &lt;span class=&quot;commentJS&quot;&gt;//create a generic javascript object.&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;

&lt;p&gt;
Creates an object with the prototype &lt;code&gt;Object.prototype&lt;/code&gt; that itself has a
null prototype. So the prototype chain for &lt;code&gt;objectRef&lt;/code&gt; contains only one
object: &lt;code&gt;Object.prototype&lt;/code&gt;. However:-
&lt;/p&gt;

&lt;pre&gt;&lt;span class=&quot;commentJS&quot;&gt;/* A &quot;constructor&quot; function for creating objects of a -&lt;br&gt;   MyObject1 - type.&lt;br&gt;*/&lt;/span&gt;&lt;br&gt;function MyObject1(formalParameter){&lt;br&gt;    &lt;span class=&quot;commentJS&quot;&gt;/* Give the constructed object a property called - testNumber - and&lt;br&gt;       assign it the value passed to the constructor as its first&lt;br&gt;       argument:-&lt;br&gt;    */&lt;/span&gt;&lt;br&gt;    this.testNumber = formalParameter;&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;span class=&quot;commentJS&quot;&gt;/* A &quot;constructor&quot; function for creating objects of a -&lt;br&gt;   MyObject2 - type:-&lt;br&gt;*/&lt;/span&gt;&lt;br&gt;function MyObject2(formalParameter){&lt;br&gt;   &lt;span class=&quot;commentJS&quot;&gt;/* Give the constructed object a property called - testString -&lt;br&gt;      and assign it the value passed to the constructor as its first&lt;br&gt;      argument:-&lt;br&gt;    */&lt;/span&gt;&lt;br&gt;    this.testString = formalParameter;&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;span class=&quot;commentJS&quot;&gt;/* The next operation replaces the default prototype associated with&lt;br&gt;   all MyObject2 instances with an instance of MyObject1, passing the&lt;br&gt;   argument - 8 - to the MyObject1 constructor so that its -&lt;br&gt;   testNumber - property will be set to that value:-&lt;br&gt;*/&lt;/span&gt;&lt;br&gt;MyObject2.prototype = new MyObject1( 8 );&lt;br&gt;&lt;br&gt;&lt;span class=&quot;commentJS&quot;&gt;/* Finally, create an instance of - MyObject2 - and assign a reference&lt;br&gt;   to that object to the variable - objectRef - passing a string as the&lt;br&gt;   first argument for the constructor:-&lt;br&gt;*/&lt;/span&gt;&lt;br&gt;&lt;br&gt;var objectRef = new MyObject2( &quot;String_Value&quot; );&lt;br&gt;&lt;/pre&gt;

&lt;p&gt;
The instance of &lt;code&gt;MyObject2&lt;/code&gt; referred to by the &lt;code&gt;objectRef&lt;/code&gt; variable has a
prototype chain. The first object in that chain is the instance of
&lt;code&gt;MyObject1&lt;/code&gt; that was created and assigned to the prototype
property of the &lt;code&gt;MyObject2&lt;/code&gt; constructor. The instance of
&lt;code&gt;MyObject1&lt;/code&gt; has a prototype, the default Object prototype
that corresponds with the object referred to by
&lt;code&gt;Object.prototype&lt;/code&gt;. &lt;code&gt;Object.prototype&lt;/code&gt; has
a null prototype so the prototype chain comes to an end at this point.
&lt;/p&gt;

&lt;p&gt;
When a property accessor attempts to read a named property form the
object referred to by the variable &lt;code&gt;objectRef&lt;/code&gt; the whole
prototype chain can enter into the process. In the simple case:-
&lt;/p&gt;

&lt;pre&gt;var val = objectRef.testString;&lt;br&gt;&lt;/pre&gt;

&lt;p&gt;
- the instance of &lt;code&gt;MyObject2&lt;/code&gt; referred to by &lt;code&gt;objectRef&lt;/code&gt; has
a property with the name &quot;testString&quot; so it is the value of
that property, set to &quot;String_Value&quot;, that is assigned to the
variable &lt;code&gt;val&lt;/code&gt;. However:-
&lt;/p&gt;

&lt;pre&gt;var val = objectRef.testNumber;&lt;br&gt;&lt;/pre&gt;

&lt;p&gt;
- cannot read a named property form the instance of
&lt;code&gt;MyObject2&lt;/code&gt; itself as it has no such property but the 
variable &lt;code&gt;val&lt;/code&gt; is set to the value of &lt;code&gt;8&lt;/code&gt; rather
than undefined because having failed to find a corresponding named
property on the object itself the interpreter then examines the object
that is its prototype. Its prototype is the instance of
&lt;code&gt;MyObject1&lt;/code&gt; and it was created with a property named
&quot;testNumber&quot; with the value &lt;code&gt;8&lt;/code&gt; assigned to that property, so
the property accessor evaluates as the value &lt;code&gt;8&lt;/code&gt;. Neither
&lt;code&gt;MyObject1&lt;/code&gt; or &lt;code&gt;MyObject2&lt;/code&gt; have defined a
&lt;code&gt;toString&lt;/code&gt; method, but if a property accessor attempts to
read the value of a &lt;code&gt;toString&lt;/code&gt; property from
&lt;code&gt;objectRef&lt;/code&gt;:-
&lt;/p&gt;

&lt;pre&gt;var val = objectRef.toString;&lt;br&gt;&lt;/pre&gt;

&lt;p&gt;
- the &lt;code&gt;val&lt;/code&gt; variable is assigned a reference to a function.
That function is the &lt;code&gt;toString&lt;/code&gt; property of
&lt;code&gt;Object.prototype&lt;/code&gt; and is returned because the process of
examining the prototype of &lt;code&gt;objectRef&lt;/code&gt;, when
&lt;code&gt;objectRef&lt;/code&gt; turns out not to have a &quot;toString&quot;
property, is acting on an object, so when that prototype is found to
lack the property its prototype is examined in turn. Its prototype
is &lt;code&gt;Object.prototype&lt;/code&gt;, which does have a
&lt;code&gt;toString&lt;/code&gt; method so it is a reference to that function
object that is returned.
&lt;/p&gt;

&lt;p&gt;
Finally:-
&lt;/p&gt;

&lt;pre&gt;var val = objectRef.madeUpProperty;&lt;br&gt;&lt;/pre&gt;

&lt;p&gt;
- returns &lt;code&gt;undefined&lt;/code&gt;, because as the process of working up the prototype
chain finds no properties on any of the object with the name
&quot;madeUpPeoperty&quot; it eventually gets to the prototype of
&lt;code&gt;Object.prototype&lt;/code&gt;, which is null, and the process ends
returning &lt;code&gt;undefined&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
The reading of named properties returns the first value found, on the
object or then from its prototype chain. The assigning of a value to a
named property on an object will create a property on the object itself
if no corresponding property already exists.
&lt;/p&gt;

&lt;p&gt;
This means that if a value was assigned as
&lt;code&gt;objectRef.testNumber = 3&lt;/code&gt; a &quot;testNumber&quot; property
will be created on the instance of &lt;code&gt;MyObject2&lt;/code&gt; itself, and
any subsequent attempts to read that value will retrieve that value as
set on the object. The prototype chain no longer needs to be examined
to resolve the property accessor, but the instance of
&lt;code&gt;MyObject1&lt;/code&gt; with the value of &lt;code&gt;8&lt;/code&gt; assigned to its
&quot;testNumber&quot; property is unaltered. The assignment to the
&lt;code&gt;objectRef&lt;/code&gt; object masks the corresponding property in its
prototype chain.
&lt;/p&gt;

&lt;p&gt;
Note: ECMAScript defines an internal &lt;code&gt;[[prototype]]&lt;/code&gt;
property of the internal Object type. This property is not directly accessible with
scripts, but it is the chain of objects referred to with the
internal &lt;code&gt;[[prototype]]&lt;/code&gt; property that is used in property
accessor resolution; the object's prototype chain. A public
&lt;code&gt;prototype&lt;/code&gt; property exists to allow the assignment,
definition and manipulation of prototypes in association with the
internal &lt;code&gt;[[prototype]]&lt;/code&gt; property. The details of the
relationship between to two are described in ECMA 262 (3rd edition)
and are beyond the scope of this discussion.
&lt;/p&gt;

&lt;h2&gt;&lt;a name=&quot;clIRExSc&quot; id=&quot;clIRExSc&quot;&gt;Identifier Resolution, Execution Contexts and Scope Chains&lt;/a&gt;&lt;/h2&gt;

&lt;h3&gt;&lt;a name=&quot;clExCon&quot; id=&quot;clExCon&quot;&gt;The Execution Context&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;
An execution context is an abstract concept used by the ECMSScript
specification (ECMA 262 3rd edition) to define the behaviour required
of ECMAScript implementations. The specification does not say anything
about how execution contexts should be implemented but execution
contexts have associated attributes that refer to specification defined
structures so they might be conceived (and even implemented) as objects
with properties, though not public properties.
&lt;/p&gt;

&lt;p&gt;
All javascript code is executed in an execution context. Global code
(code executed inline, normally as a JS file, or &lt;span class=&quot;initialism&quot; title=&quot;HyperText Mark-up Language&quot;&gt;&lt;abbr title=&quot;HyperText Mark-up Language&quot;&gt;HTML&lt;/abbr&gt;&lt;/span&gt; page, loads) gets
executed in what I will be calling a global execution context, and each
invocation of a function (possibly as a constructor) has an associated
execution context. Code executed with the &lt;code&gt;eval&lt;/code&gt; function
also gets a distinct execution context but as &lt;code&gt;eval&lt;/code&gt; is
never normally used by javascript programmers it will not be discussed
here. The specified details of execution contexts are to be found in
section 10.2 of ECMA 262 (3rd edition).
&lt;/p&gt;

&lt;p&gt;
When a javascript function is called it enters an execution context,
if another function is called (or the same function recursively) a new
execution context is created and execution enters that context for the
duration of the function call. Returning to the original execution
context when that called function returns. Thus running javascript code
forms a stack of execution contexts.
&lt;/p&gt;

&lt;p&gt;
When an execution context is created a number of things happen in a
defined order. First, in the execution context of a function, an
&quot;Activation&quot; object is created. The activation object is
another specification mechanism. It can be considered as an object
because it ends up having accessible named properties, but it is not a
normal object as it has no prototype (at least not a defined prototype)
and it cannot be directly referenced by javascript code.
&lt;/p&gt;

&lt;p&gt;
The next step in the creation of the execution context for a function
call is the creation of an &lt;code&gt;arguments&lt;/code&gt; object, which is an
array-like object with integer indexed members corresponding with the
arguments passed to the function call, in order. It also has
&lt;code&gt;length&lt;/code&gt; and &lt;code&gt;callee&lt;/code&gt; properties (which are not
relevant to this discussion, see the spec for details). A property of
the Activation object is created with the name &quot;arguments&quot;
and a reference to the &lt;code&gt;arguments&lt;/code&gt; object is assigned to
that property.
&lt;/p&gt;

&lt;p&gt;
Next the execution context is assigned a scope. A scope consists of a
list (or chain) of objects. Each function object has an internal
&lt;code&gt;[[scope]]&lt;/code&gt; property (which we will go into more detail
about shortly) that also consists of a list (or chain) of objects.
The scope that is assigned to the execution context of a function call
consists of the list referred to by the &lt;code&gt;[[scope]]&lt;/code&gt; property
of the corresponding function object with the Activation object added
at the front of the chain (or the top of the list).
&lt;/p&gt;

&lt;p&gt;
Then the process of &quot;variable instantiation&quot; takes place using an object
that ECMA 262 refers to as the &quot;Variable&quot; object. However,
the Activation object is used as the Variable object (note this, it is
important: they are the same object). Named properties of the Variable
object are created for each of the function's formal parameters, and if
arguments to the function call correspond with those parameters the
values of those arguments are assigned to the properties (otherwise the
assigned value is &lt;code&gt;undefined&lt;/code&gt;). Inner function definitions
are used to create function objects which are assigned to properties of
the Variable object with names that correspond to the function name
used in the function declaration. The last stage of variable
instantiation is to create named properties of the Variable object
that correspond with all the local variables declared within the
function.
&lt;/p&gt;

&lt;p&gt;
The properties created on the Variable object that correspond with
declared local variables are initially assigned &lt;code&gt;undefined&lt;/code&gt;
values during variable instantiation, the actual initialisation of
local variables does not happen until the evaluation of the
corresponding assignment expressions during the execution of the 
function body code.
&lt;/p&gt;

&lt;p&gt;
It is the fact that the Activation object, with its
&lt;code&gt;arguments&lt;/code&gt; property, and the Variable object, with named
properties corresponding with function local variables, are the same
object, that allows the identifier &lt;code&gt;arguments&lt;/code&gt; to be treated
as if it was a function local variable.
&lt;/p&gt;

&lt;p&gt;
Finally a value is assigned for use with the &lt;code&gt;this&lt;/code&gt; keyword.
If the value assigned refers to an object then property accessors
prefixed with the &lt;code&gt;this&lt;/code&gt; keyword reference properties of
that object. If the value assigned (internally) is null then the
&lt;code&gt;this&lt;/code&gt; keyword will refer to the global object.
&lt;/p&gt;

&lt;p&gt;
The global execution context gets some slightly different handling as
it does not have arguments so it does not need a defined Activation
object to refer to them. The global execution context does need a scope
and its scope chain consists of exactly one object, the global object.
The global execution context does go through variable instantiation,
its inner functions are the normal top level function declarations that
make up the bulk of javascript code. The global object is used as the
Variable object, which is why globally declared functions become
properties of the global object. As do globally declared variables.
&lt;/p&gt;

&lt;p&gt;
The global execution context also uses a reference to the global object
for the &lt;code&gt;this&lt;/code&gt; object.
&lt;/p&gt;

&lt;h3&gt;&lt;a name=&quot;clScCh&quot; id=&quot;clScCh&quot;&gt;Scope chains and [[scope]]&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;
The scope chain of the execution context for a function call is
constructed by adding the execution context's Activation/Variable
object to the front of the scope chain held in the function
object's &lt;code&gt;[[scope]]&lt;/code&gt; property, so it is important to
understand how the internal &lt;code&gt;[[scope]]&lt;/code&gt; property is
defined.
&lt;/p&gt;

&lt;p&gt;
In ECMAScript functions are objects, they are created during variable
instantiation from function declarations, during the evaluation of
function expressions or by invoking the &lt;code&gt;Function&lt;/code&gt;
constructor.
&lt;/p&gt;

&lt;p&gt;
Function objects created with the &lt;code&gt;Function&lt;/code&gt; constructor
always have a &lt;code&gt;[[scope]]&lt;/code&gt; property referring to a scope
chain that only contains the global object.
&lt;/p&gt;

&lt;p&gt;
Function objects created with function declarations or function
expressions have the scope chain of the execution context in which
they are created assigned to their internal &lt;code&gt;[[scope]]&lt;/code&gt;
property.
&lt;/p&gt;

&lt;p&gt;
In the simplest case of a global function declaration such as:-
&lt;/p&gt;

&lt;pre&gt;function exampleFunction(formalParameter){&lt;br&gt;    ...   &lt;span class=&quot;commentJS&quot;&gt;// function body code&lt;/span&gt;&lt;br&gt;}&lt;br&gt;&lt;/pre&gt;

&lt;p&gt;
- the corresponding function object is created during the variable
instantiation for the global execution context. The global execution
context has a scope chain consisting of only the global object. Thus
the function object that is created and referred to by the property of
the global object with the name &quot;exampleFunction&quot; is
assigned an internal &lt;code&gt;[[scope]]&lt;/code&gt; property referring to a
scope chain containing only the global object.
&lt;/p&gt;

&lt;p&gt;
A similar scope chain is assigned when a function expression is
executed in the global context:-
&lt;/p&gt;

&lt;pre&gt;var exampleFuncRef = function(){&lt;br&gt;    ...   &lt;span class=&quot;commentJS&quot;&gt;// function body code&lt;/span&gt;&lt;br&gt;}&lt;br&gt;&lt;/pre&gt;

&lt;p&gt;
- except in this case a named property of the global object is created
during variable instantiation for the global execution context but the
function object is not created, and a reference to it assigned to the
named property of the global object, until the assignment expression is
evaluated. But the creation of the function object still happens in the
global execution context so the &lt;code&gt;[[scope]]&lt;/code&gt; property of the
created function object still only contains the global object in the
assigned scope chain.
&lt;/p&gt;

&lt;p&gt;
Inner function declarations and expressions result in function objects
being created within the execution context of a function so they get
more elaborate scope chains. Consider the following code, which defines
a function with an inner function declaration and then executes the
outer function:-
&lt;/p&gt;

&lt;pre&gt;function exampleOuterFunction(formalParameter){&lt;br&gt;    function exampleInnerFuncitonDec(){&lt;br&gt;        ... &lt;span class=&quot;commentJS&quot;&gt;// inner function body&lt;/span&gt;&lt;br&gt;    }&lt;br&gt;    ...  &lt;span class=&quot;commentJS&quot;&gt;// the rest of the outer function body.&lt;/span&gt;&lt;br&gt;}&lt;br&gt;&lt;br&gt;exampleOuterFunction( 5 );&lt;br&gt;&lt;/pre&gt;

&lt;p&gt;
The function object corresponding with the outer function declaration
is created during variable instantiation in the global execution context
so its &lt;code&gt;[[scope]]&lt;/code&gt; property contains the one item scope
chain with only the global object in it.
&lt;/p&gt;

&lt;p&gt;
When the global code executes the call to the
&lt;code&gt;exampleOuterFunction&lt;/code&gt; a new execution context is created for
that function call and an Activation/Variable object along with it.
The scope of that new execution context becomes the chain consisting of
the new Activation object followed by the chain refereed to by the
outer function object's &lt;code&gt;[[scope]]&lt;/code&gt; property (just the
global object). Variable instantiation for that new execution context
results in the creation of a function object that corresponds with the
inner function definition and the &lt;code&gt;[[scope]]&lt;/code&gt; property of
that function object is assigned the value of the scope from the
execution context in which it was created. A scope chain that contains
the Activation object followed by the global object.
&lt;/p&gt;

&lt;p&gt;
So far this is all automatic and controlled by the structure and
execution of the source code. The scope chain of the execution context
defines the &lt;code&gt;[[scope]]&lt;/code&gt; properties of the function objects
created and the &lt;code&gt;[[scope]]&lt;/code&gt; properties of the function
objects define the scope for their execution contexts (along with the
corresponding Activation object). But ECMAScript provides the
&lt;code&gt;with&lt;/code&gt; statement as a means of modifying the scope chain.
&lt;/p&gt;

&lt;p&gt;
The &lt;code&gt;with&lt;/code&gt; statement evaluates an expression and if that
expression is an object it is added to the scope chain of the current
execution context (in front of the Activation/Variable object). The
&lt;code&gt;with&lt;/code&gt; statement then executes another statement (that may
itself be a block statement) and then restores the execution context's
scope chain to what it was before.
&lt;/p&gt;

&lt;p&gt;
A function declaration could not be affected by a &lt;code&gt;with&lt;/code&gt;
statement as they result in the creation of function objects during
variable instantiation, but a function expression can be evaluated
inside a &lt;code&gt;with&lt;/code&gt; statement:-
&lt;/p&gt;

&lt;pre&gt;&lt;span class=&quot;commentJS&quot;&gt;/* create a global variable - y - that refers to an object:- */&lt;/span&gt;&lt;br&gt;var y = {x:5}; &lt;span class=&quot;commentJS&quot;&gt;// object literal with an - x - property&lt;/span&gt;&lt;br&gt;function exampleFuncWith(){&lt;br&gt;    var z;&lt;br&gt;    &lt;span class=&quot;commentJS&quot;&gt;/* Add the object referred to by the global variable - y - to the&lt;br&gt;       front of he scope chain:-&lt;br&gt;    */&lt;/span&gt;&lt;br&gt;    with(y){&lt;br&gt;        &lt;span class=&quot;commentJS&quot;&gt;/* evaluate a function expression to create a function object&lt;br&gt;           and assign a reference to that function object to the local&lt;br&gt;           variable - z - :-&lt;br&gt;        */&lt;/span&gt;&lt;br&gt;        z = function(){&lt;br&gt;            ... &lt;span class=&quot;commentJS&quot;&gt;// inner function expression body;&lt;/span&gt;&lt;br&gt;        }&lt;br&gt;    }&lt;br&gt;    ... &lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;span class=&quot;commentJS&quot;&gt;/* execute the - exampleFuncWith - function:- */&lt;/span&gt;&lt;br&gt;exampleFuncWith();&lt;br&gt;&lt;/pre&gt;

&lt;p&gt;
When the &lt;code&gt;exampleFuncWith&lt;/code&gt; function is called the resulting
execution context has a scope chain consisting of its Activation object
followed by the global object. The execution of the &lt;code&gt;with&lt;/code&gt;
statement adds the object referred to by the global variable
&lt;code&gt;y&lt;/code&gt; to the front of that scope chain during the evaluation
of the function expression. The function object created by the
evaluation of the function expression is assigned a
&lt;code&gt;[[scope]]&lt;/code&gt; property that corresponds with the scope of the
execution context in which it is created. A scope chain consisting of
object &lt;code&gt;y&lt;/code&gt; followed by the Activation object from the
execution context of the outer function call, followed by the global
object.
&lt;/p&gt;

&lt;p&gt;
When the block statement associated with the &lt;code&gt;with&lt;/code&gt;
statement terminates the scope of the execution context is restored
(the &lt;code&gt;y&lt;/code&gt; object is removed), but the function object has
been created at that point and its &lt;code&gt;[[scope]]&lt;/code&gt; property
assigned a reference to a scope chain with the &lt;code&gt;y&lt;/code&gt; object
at its head.
&lt;/p&gt;

&lt;h3&gt;&lt;a name=&quot;clIdRes&quot; id=&quot;clIdRes&quot;&gt;Identifier Resolution&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;
Identifiers are resolved against the scope chain. ECMA 262 categorises
&lt;code&gt;this&lt;/code&gt; as a keyword rather than an identifier, which is not
unreasonable as it is always resolved dependent on the
&lt;code&gt;this&lt;/code&gt; value in the execution context in which it is used,
without reference to the scope chain.
&lt;/p&gt;

&lt;p&gt;
Identifier resolution starts with the first object in the scope chain.
It is checked to see if it has a property with a name that corresponds
with the identifier. Because the scope chain is a chain of objects
this checking encompasses the prototype chain of that object (if it
has one). If no corresponding value can be found on the first object
in the scope chain the search progresses to the next object. And so on until
one of the objects in the chain (or one of its prototypes) has a
property with a name that corresponds with the identifier or the scope
chain is exhausted.
&lt;/p&gt;

&lt;p&gt;
The operation on the identifier happens in the same way as the use of
property accessors on objects described above. The object identified
in the scope chain as having the corresponding property takes the
place of the object in the property accessor and the identifier acts
as a property name for that object. The global object is always at the
end of the scope chain.
&lt;/p&gt;

&lt;p&gt;
As execution contexts associated with function calls will have the
Activation/Variable object at the front of the chain, identifiers used
in function bodies are effectively first checked to see whether they
correspond with formal parameters, inner function declaration names or
local variables. Those would be resolved as named properties of the
Activation/Variable object.
&lt;/p&gt;

&lt;h2&gt;&lt;a name=&quot;clClose&quot; id=&quot;clClose&quot;&gt;Closures&lt;/a&gt;&lt;/h2&gt;

&lt;h3&gt;&lt;a name=&quot;clAtGb&quot; id=&quot;clAtGb&quot;&gt;Automatic Garbage Collection&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;
ECMAScript uses automatic garbage collection. The specification
does not define the details, leaving that to the implementers to sort
out, and some implementations are known to give a very low priority to
their garbage collection operations. But the general idea is that if an
object becomes un-referable (by having no remaining references to it
left accessible to executing code) it becomes available for garbage
collection and will at some future point be destroyed and any resources
it is consuming freed and returned to the system for re-use.
&lt;/p&gt;

&lt;p&gt;
This would normally be the case upon exiting an execution context. The
scope chain structure, the Activation/Variable object and any objects
created within the execution context, including function objects, would
no longer be accessible and so would become available for garbage
collection.
&lt;/p&gt;

&lt;h3&gt;&lt;a name=&quot;clFrmC&quot; id=&quot;clFrmC&quot;&gt;Forming Closures&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;
A closure is formed by returning a function object that was created
within an execution context of a function call from that function call
and assigning a reference to that inner function to a property of another
object. Or by directly assigning a reference to such a function object
to, for example, a global variable, a property of a globally accessible
object or an object passed by reference as an argument to the outer 
function call. e.g:-
&lt;/p&gt;

&lt;pre&gt;function exampleClosureForm(arg1, arg2){&lt;br&gt;    var localVar = 8;&lt;br&gt;    function exampleReturned(innerArg){&lt;br&gt;        return ((arg1 + arg2)/(innerArg + localVar));&lt;br&gt;    }&lt;br&gt;    &lt;span class=&quot;commentJS&quot;&gt;/* return a reference to the inner function defined as -&lt;br&gt;       exampleReturned -:-&lt;br&gt;    */&lt;/span&gt;&lt;br&gt;    return exampleReturned;&lt;br&gt;}&lt;br&gt;&lt;br&gt;var globalVar = exampleClosureForm(2, 4);&lt;br&gt;&lt;/pre&gt;

&lt;p&gt;
Now the function object created within the execution context of the
call to &lt;code&gt;exampleClosureForm&lt;/code&gt; cannot be garbage collected
because it is referred to by a global variable and is still accessible,
it can even be executed with &lt;code&gt;globalVar(n)&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
But something a little more complicated has happened because the
function object now referred to by &lt;code&gt;globalVar&lt;/code&gt; was created
with a &lt;code&gt;[[scope]]&lt;/code&gt; property referring to a scope chain
containing the Activation/Variable object belonging to the execution
context in which it was created (and the global object). Now the
Activation/Variable object cannot be garbage collected either as the
execution of the function object referred to by &lt;code&gt;globalVar&lt;/code&gt;
will need to add the whole scope chain from its &lt;code&gt;[[scope]]&lt;/code&gt;
property to the scope of the execution context created for each call to
it.
&lt;/p&gt;

&lt;p&gt;
A closure is formed. The inner function object has the free variables
and the Activation/Variable object on the function's scope chain is
the environment that binds them.
&lt;/p&gt;

&lt;p&gt;
The Activation/Variable object is trapped by being
referred to in the scope chain assigned to the internal
&lt;code&gt;[[scope]]&lt;/code&gt; property of the function object now referred to
by the &lt;code&gt;globalVar&lt;/code&gt; variable. The Activation/Variable object
is preserved along with its state; the values of its properties. Scope
resolution in the execution context of calls to the inner function will
resolve identifiers that correspond with named properties of that
Activation/Variable object as properties of that object. The value of
those properties can still be read and set even though the execution
context for which it was created has exited.
&lt;/p&gt;

&lt;p&gt;
In the example above that Activation/Variable object has a state that
represents the values of formal parameters, inner function definitions
and local variables, at the time when the outer function returned
(exited its execution context). The &lt;code&gt;arg1&lt;/code&gt; property has the
value &lt;code&gt;2&lt;/code&gt;,the &lt;code&gt;arg2&lt;/code&gt; property the value
&lt;code&gt;4&lt;/code&gt;, &lt;code&gt;localVar&lt;/code&gt; the value &lt;code&gt;8&lt;/code&gt; and an
&lt;code&gt;exampleReturned&lt;/code&gt; property that is a reference to the inner
function object that was returned form the outer function. (We will be
referring to this Activation/Variable object as &quot;ActOuter1&quot; in later
discussion, for convenience.)
&lt;/p&gt;

&lt;p&gt;
If the &lt;code&gt;exampleClosureForm&lt;/code&gt; function was called again as:-
&lt;/p&gt;

&lt;pre&gt;var secondGlobalVar = exampleClosureForm(12, 3);&lt;br&gt;&lt;/pre&gt;

&lt;p&gt;
- a new execution context would be created, along with a new Activation
object. And a new function object would be returned, with its own
distinct &lt;code&gt;[[scope]]&lt;/code&gt; property referring to a scope chain
containing the Activation object form this second execution context,
with &lt;code&gt;arg1&lt;/code&gt; being &lt;code&gt;12&lt;/code&gt; and &lt;code&gt;arg2&lt;/code&gt;
being &lt;code&gt;3&lt;/code&gt;. (We will be referring to this Activation/Variable
object as &quot;ActOuter2&quot; in later discussion, for convenience.)
&lt;/p&gt;

&lt;p&gt;
A second and distinct closure has been formed by the second execution
of &lt;code&gt;exampleClosureForm&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
The two function objects created by the execution of
&lt;code&gt;exampleClosureForm&lt;/code&gt; to which references have been assigned
to the global variable &lt;code&gt;globalVar&lt;/code&gt; and
&lt;code&gt;secondGlobalVar&lt;/code&gt; respectively, return the expression
&lt;code&gt;((arg1 + arg2)/(innerArg + localVar))&lt;/code&gt;. Which applies
various operators to four identifiers. How these identifiers are
resolved is critical to the use and value of closures.
&lt;/p&gt;

&lt;p&gt;
Consider the execution of the function object referred to by
&lt;code&gt;globalVar&lt;/code&gt;, as &lt;code&gt;globalVar(2)&lt;/code&gt;. A new execution
context is created and an Activation object (we will call it
&quot;ActInner1&quot;), which is added to the head of the scope chain
referred to the &lt;code&gt;[[scope]]&lt;/code&gt; property of the executed
function object. ActInner1 is given a property named
&lt;code&gt;innerArg&lt;/code&gt;, after its formal parameter and the argument
value &lt;code&gt;2&lt;/code&gt; assigned to it. The scope chain for this new
execution context is: &lt;span class=&quot;scopeCh&quot;&gt;ActInner1-&gt;&lt;/span&gt;
&lt;span class=&quot;scopeCh&quot;&gt;ActOuter1-&gt;&lt;/span&gt;
&lt;span class=&quot;scopeCh&quot;&gt;global object&lt;/span&gt;.
&lt;/p&gt;

&lt;p&gt;
Identifier resolution is done against the scope chain so in order
to return the value of the expression
&lt;code&gt;((arg1 + arg2)/(innerArg + localVar))&lt;/code&gt; the values of the
identifiers will be determined by looking for properties, with names
corresponding with the identifiers, on each object in the scope chain
in turn.
&lt;/p&gt;

&lt;p&gt;
The first object in the chain is ActInner1 and it has a property named
&lt;code&gt;innerArg&lt;/code&gt; with the value &lt;code&gt;2&lt;/code&gt;. All of the other
3 identifiers correspond with named properties of ActOuter1;
&lt;code&gt;arg1&lt;/code&gt; is &lt;code&gt;2&lt;/code&gt;, &lt;code&gt;arg2&lt;/code&gt; is 
&lt;code&gt;4&lt;/code&gt; and &lt;code&gt;localVar&lt;/code&gt; is &lt;code&gt;8&lt;/code&gt;. The
function call returns &lt;code&gt;((2 + 4)/(2 + 8))&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Compare that with the execution of the otherwise identical function
object referred to by &lt;code&gt;secondGlobalVar&lt;/code&gt;, as
&lt;code&gt;secondGlobalVar(5)&lt;/code&gt;. Calling the Activation object for
this new execution context &quot;ActInner2&quot;, the scope chain
becomes: &lt;span class=&quot;scopeCh&quot;&gt;ActInner2-&gt;&lt;/span&gt;
&lt;span class=&quot;scopeCh&quot;&gt;ActOuter2-&gt;&lt;/span&gt;
&lt;span class=&quot;scopeCh&quot;&gt;global object&lt;/span&gt;. ActInner2 returns
&lt;code&gt;innerArg&lt;/code&gt; as &lt;code&gt;5&lt;/code&gt; and ActOuter2 returns
&lt;code&gt;arg1&lt;/code&gt;, &lt;code&gt;arg2&lt;/code&gt; and &lt;code&gt;localVar&lt;/code&gt; as
&lt;code&gt;12&lt;/code&gt;, &lt;code&gt;3&lt;/code&gt; and &lt;code&gt;8&lt;/code&gt; respectively. The
value returned is &lt;code&gt;((12 + 3)/(5 + 8))&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Execute &lt;code&gt;secondGlobalVar&lt;/code&gt; again and a new Activation object
will appear at the front of the scope chain but ActOuter2 will still
be next object in the chain and the value of its named properties will
again be used in the resolution of the identifiers &lt;code&gt;arg1&lt;/code&gt;,
&lt;code&gt;arg2&lt;/code&gt; and &lt;code&gt;localVar&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
This is how ECMAScript inner functions gain, and maintain, access to the formal
parameters, declared inner functions and local variables of the
execution context in which they were created. And it is how the
forming of a closure allows such a function object to keep referring
to those values, reading and writing to them, for as long as it
continues to exist. The Activation/Variable object from the execution
context in which the inner function was created remains on the scope
chain referred to by the function object's &lt;code&gt;[[scope]]&lt;/code&gt;
property, until all references to the inner function are freed and
the function object is made available for garbage collection (along
with any now unneeded objects on its scope chain).
&lt;/p&gt;

&lt;p&gt;
Inner function may themselves have inner functions, and the inner
functions returned from the execution of functions to form closures
may themselves return inner functions and form closures of their own.
With each nesting the scope chain gains extra Activation objects
originating with the execution contexts in which the inner function
objects were created. The ECMAScript specification requires a scope
chain to be finite, but imposes no limits on their length.
Implementations probably do impose some practical limitation but no
specific magnitude has yet been reported. The potential for nesting
inner functions seems so far to have exceeded anyone's desire to
code them.
&lt;/p&gt;

&lt;h2&gt;&lt;a name=&quot;clClDo&quot; id=&quot;clClDo&quot;&gt;What can be done with Closures?&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;
Strangely the answer to that appears to be anything and everything.
I am told that closures enable ECMAScript to emulate anything, so the
limitation is the ability to conceive and implement the emulation. That
is a bit esoteric and it is probably better to start with something a
little more practical.
&lt;/p&gt;


&lt;h3&gt;&lt;a name=&quot;clSto&quot; id=&quot;clSto&quot;&gt;Example 1: setTimeout with Function References&lt;/a&gt;&lt;/h3&gt;


&lt;p&gt;
A common use for a closure is to provide parameters for the execution
of a function prior to the execution of that function. For example,
when a function is to be provided as the first argument to the
&lt;code&gt;setTimout&lt;/code&gt; function that is common in web browser
environments.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;setTimeout&lt;/code&gt; schedules the execution of a function (or a
string of javascript source code, but not in this context), provided as
its first argument, after an interval expressed in milliseconds (as its
second argument). If a piece of code wants to use
&lt;code&gt;setTimeout&lt;/code&gt; it calls the &lt;code&gt;setTimeout&lt;/code&gt; function
and passes a reference to a function object as the first argument and
the millisecond interval as the second, but a reference to a function
object cannot provide parameters for the scheduled execution of that
function.
&lt;/p&gt;

&lt;p&gt;
However, code could call another function that returned a reference to
an inner function object, with that inner function object being passed
by reference to the &lt;code&gt;setTimeout&lt;/code&gt; function. The parameters to
be used for the execution of the inner function are passed with the
call to the function that returns it. &lt;code&gt;setTimout&lt;/code&gt; executes
the inner function without passing arguments but that inner function
can still access the parameters provided by the call to the outer
function that returned it:-
&lt;/p&gt;

&lt;pre&gt;function callLater(paramA, paramB, paramC){&lt;br&gt;    &lt;span class=&quot;commentJS&quot;&gt;/* Return a reference to an anonymous inner function created&lt;br&gt;       with a function expression:-&lt;br&gt;    */&lt;/span&gt;&lt;br&gt;    return (function(){&lt;br&gt;        &lt;span class=&quot;commentJS&quot;&gt;/* This inner function is to be executed with - setTimeout&lt;br&gt;           - and when it is executed it can read, and act upon, the&lt;br&gt;           parameters passed to the outer function:-&lt;br&gt;        */&lt;/span&gt;&lt;br&gt;        paramA[paramB] = paramC;&lt;br&gt;    });&lt;br&gt;}&lt;br&gt;&lt;br&gt;...&lt;br&gt;&lt;br&gt;&lt;span class=&quot;commentJS&quot;&gt;/* Call the function that will return a reference to the inner function&lt;br&gt;   object created in its execution context. Passing the parameters that&lt;br&gt;   the inner function will use when it is eventually executed as&lt;br&gt;   arguments to the outer function. The returned reference to the inner&lt;br&gt;   function object is assigned to a local variable:-&lt;br&gt;*/&lt;/span&gt;&lt;br&gt;var functRef = callLater(elStyle, &quot;display&quot;, &quot;none&quot;);&lt;br&gt;&lt;span class=&quot;commentJS&quot;&gt;/* Call the setTimeout function, passing the reference to the inner&lt;br&gt;   function assigned to the - functRef - variable as the first argument:-&lt;br&gt;*/&lt;/span&gt;&lt;br&gt;hideMenu=setTimeout(functRef, 500);&lt;br&gt;&lt;/pre&gt;

&lt;h3&gt;&lt;a name=&quot;clObjI&quot; id=&quot;clObjI&quot;&gt;Example 2: Associating Functions with Object Instance Methods&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;
There are many other circumstances when a reference to a function
object is assigned so that it would be executed at some future time
where it is useful to provide parameters for the execution of that
function that would not be easily available at the time of execution
but cannot be known until the moment of assignment.
&lt;/p&gt;

&lt;p&gt;
One example might be a javascript object that is designed to
encapsulate the interactions with a particular DOM element. It has
&lt;code&gt;doOnClick&lt;/code&gt;, &lt;code&gt;doMouseOver&lt;/code&gt; and
&lt;code&gt;doMouseOut&lt;/code&gt; methods and wants to execute those methods
when the corresponding events are triggered on the DOM element, but
there may be any number of instances of the javascript object created
associated with different DOM elements and the individual object
instances do not know how they will be employed by the code that
instantiated them. The object instances do not know how to reference
themselves globally because they do not know which global variables
(if any) will be assigned references to their instances.
&lt;/p&gt;

&lt;p&gt;
So the problem is to execute an event handling function that has an
association with a particular instance of the javascript object, and
knows which method of that object to call.
&lt;/p&gt;

&lt;p&gt;
The following example uses a small generalised closure based function
that associates object instances with element event handlers.
Arranging that the execution of the event handler calls the specified
method of the object instance, passing the event object and a reference
to the associated element on to the object method and returning the
method's return value.
&lt;/p&gt;

&lt;pre&gt;&lt;span class=&quot;commentJS&quot;&gt;/* A general function that associates an object instance with an event&lt;br&gt;   handler. The returned inner function is used as the event handler.&lt;br&gt;   The object instance is passed as the - obj - parameter and the name&lt;br&gt;   of the method that is to be called on that object is passed as the -&lt;br&gt;   methodName - (string) parameter.&lt;br&gt;*/&lt;/span&gt;&lt;br&gt;function associateObjWithEvent(obj, methodName){&lt;br&gt;    &lt;span class=&quot;commentJS&quot;&gt;/* The returned inner function is intended to act as an event&lt;br&gt;       handler for a DOM element:-&lt;br&gt;    */&lt;/span&gt;&lt;br&gt;    return (function(e){&lt;br&gt;        &lt;span class=&quot;commentJS&quot;&gt;/* The event object that will have been parsed as the - e -&lt;br&gt;           parameter on DOM standard browsers is normalised to the IE&lt;br&gt;           event object if it has not been passed as an argument to the&lt;br&gt;           event handling inner function:-&lt;br&gt;        */&lt;/span&gt;&lt;br&gt;        e = e||window.event;&lt;br&gt;        &lt;span class=&quot;commentJS&quot;&gt;/* The event handler calls a method of the object - obj - with&lt;br&gt;           the name held in the string - methodName - passing the now&lt;br&gt;           normalised event object and a reference to the element to&lt;br&gt;           which the event handler has been assigned using the - this -&lt;br&gt;           (which works because the inner function is executed as a&lt;br&gt;           method of that element because it has been assigned as an&lt;br&gt;           event handler):-&lt;br&gt;        */&lt;/span&gt;&lt;br&gt;        return obj[methodName](e, this);&lt;br&gt;    });&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;span class=&quot;commentJS&quot;&gt;/* This constructor function creates objects that associates themselves&lt;br&gt;   with DOM elements whose IDs are passed to the constructor as a&lt;br&gt;   string. The object instances want to arrange than when the&lt;br&gt;   corresponding element triggers onclick, onmouseover and onmouseout&lt;br&gt;   events corresponding methods are called on their object instance.&lt;br&gt;*/&lt;/span&gt;&lt;br&gt;function DhtmlObject(elementId){&lt;br&gt;    &lt;span class=&quot;commentJS&quot;&gt;/* A function is called that retrieves a reference to the DOM&lt;br&gt;       element (or null if it cannot be found) with the ID of the&lt;br&gt;       required element passed as its argument. The returned value&lt;br&gt;       is assigned to the local variable - el -:-&lt;br&gt;    */&lt;/span&gt;&lt;br&gt;    var el = getElementWithId(elementId);&lt;br&gt;    &lt;span class=&quot;commentJS&quot;&gt;/* The value of - el - is internally type-converted to boolean for&lt;br&gt;       the - if - statement so that if it refers to an object the&lt;br&gt;       result will be true, and if it is null the result false. So that&lt;br&gt;       the following block is only executed if the - el - variable&lt;br&gt;       refers to a DOM element:-&lt;br&gt;    */&lt;/span&gt;&lt;br&gt;    if(el){&lt;br&gt;        &lt;span class=&quot;commentJS&quot;&gt;/* To assign a function as the element's event handler this&lt;br&gt;           object calls the - associateObjWithEvent - function&lt;br&gt;           specifying itself (with the - this - keyword) as the object&lt;br&gt;           on which a method is to be called and providing the name of&lt;br&gt;           the method that is to be called. The - associateObjWithEvent&lt;br&gt;           - function will return a reference to an inner function that&lt;br&gt;           is assigned to the event handler of the DOM element. That&lt;br&gt;           inner function will call the required method on the&lt;br&gt;           javascript object when it is executed in response to&lt;br&gt;           events:-&lt;br&gt;        */&lt;/span&gt;&lt;br&gt;        el.onclick = associateObjWithEvent(this, &quot;doOnClick&quot;);&lt;br&gt;        el.onmouseover = associateObjWithEvent(this, &quot;doMouseOver&quot;);&lt;br&gt;        el.onmouseout = associateObjWithEvent(this, &quot;doMouseOut&quot;);&lt;br&gt;        ...&lt;br&gt;    }&lt;br&gt;}&lt;br&gt;DhtmlObject.prototype.doOnClick = function(event, element){&lt;br&gt;    ... &lt;span class=&quot;commentJS&quot;&gt;// doOnClick method body&lt;/span&gt;.&lt;br&gt;}&lt;br&gt;DhtmlObject.prototype.doMouseOver = function(event, element){&lt;br&gt;    ... &lt;span class=&quot;commentJS&quot;&gt;// doMouseOver method body.&lt;/span&gt;&lt;br&gt;}&lt;br&gt;DhtmlObject.prototype.doMouseOut = function(event, element){&lt;br&gt;    ... &lt;span class=&quot;commentJS&quot;&gt;// doMouseOut method body.&lt;/span&gt;&lt;br&gt;}&lt;br&gt;&lt;/pre&gt;

&lt;p&gt;
And so any instances of the &lt;code&gt;DhtmlObject&lt;/code&gt; can associate themselves
with the DOM element that they are interested in without any need
to know anything about how they are being employed by other code,
impacting on the global namespace or risking clashes with other
instances of the &lt;code&gt;DhtmlObject&lt;/code&gt;.
&lt;/p&gt;

&lt;h3&gt;&lt;a name=&quot;clEncap&quot; id=&quot;clEncap&quot;&gt;Example 3: Encapsulating Related Functionality&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;
Closures can be used to create additional scopes that can be used to
group interrelated and dependent code in a way that minimises the risk
of accidental interaction. Suppose a function is to build a string and
to avoid the repeated concatenation operations (and the creation of
numerous intermediate strings) the desire is to use an array to store
the parts of the string in sequence and then output the results using
the &lt;code&gt;Array.prototype.join&lt;/code&gt; method (with an empty string as its argument).
The array is going to act as a buffer for the output, but defining it
locally to the function will result in its re-creation on each
execution of the function, which may not be necessary if the only
variable content of that array will be re-assigned on each function
call.
&lt;/p&gt;

&lt;p&gt;
One approach might make the array a global variable so that it can be
re-used without being re-created. But the consequences of that will be
that, in addition to the global variable that refers to the function
that will use the buffer array, there will be a second global property
that refers to the array itself. The effect is to render the code less
manageable, as, if it is to be used elsewhere, its author has to remember
to include both the function definition and the array definition. It
also makes the code less easy to integrate with other code because
instead of just ensuring that the function name is unique within the
global namespace it is necessary to ensure that the Array on which it
is dependent is using a name that is unique within the global
namespace.
&lt;/p&gt;

&lt;p&gt;
A Closure allows the buffer array to be associated (and neatly
packaged) with the function that is dependent upon it and
simultaneously keep the property name to which the buffer array as
assigned out of the global namespace and free of the risk of name
conflicts and accidental interactions.
&lt;/p&gt;

&lt;p&gt;
The trick here is to create one additional execution context by
executing a function expression in-line and have that function
expression return an inner function that will be the function that is
used by external code. The buffer array is then defined as a local
variable of the function expression that is executed in-line. That only
happens once so the Array is only created once, but is available to
the function that depends on it for repeated use.
&lt;/p&gt;

&lt;p&gt;
The following code creates a function that will return a string of
&lt;span class=&quot;initialism&quot; title=&quot;HyperText Mark-up Language&quot;&gt;&lt;abbr title=&quot;HyperText Mark-up Language&quot;&gt;HTML&lt;/abbr&gt;&lt;/span&gt;, much of which is constant, but those constant character
sequences need to be interspersed with variable information provided
as parameter to the function call.
&lt;/p&gt;

&lt;p&gt;
A reference to an inner function object is returned from the in-line
execution of a function expression and assigned to a global variable
so that it can be called as a global function. The buffer array is
defined as a local variable in the outer function expression. It is
not exposed in the global namespace and does not need to be re-created
whenever the function that uses it is called.
&lt;/p&gt; 

&lt;pre&gt;&lt;span class=&quot;commentJS&quot;&gt;/* A global variable - getImgInPositionedDivHtml - is declared and&lt;br&gt;   assigned the value of an inner function expression returned from&lt;br&gt;   a one-time call to an outer function expression.&lt;br&gt;&lt;br&gt;   That inner function returns a string of &lt;span class=&quot;initialism&quot; title=&quot;HyperText Mark-up Language&quot;&gt;&lt;abbr title=&quot;HyperText Mark-up Language&quot;&gt;HTML&lt;/abbr&gt;&lt;/span&gt; that represents an&lt;br&gt;   absolutely positioned DIV wrapped round an IMG element, such that&lt;br&gt;   all of the variable attribute values are provided as parameters&lt;br&gt;   to the function call:-&lt;br&gt;*/&lt;/span&gt;&lt;br&gt;var getImgInPositionedDivHtml = (function(){&lt;br&gt;    &lt;span class=&quot;commentJS&quot;&gt;/* The - buffAr - Array is assigned to a local variable of the&lt;br&gt;       outer function expression. It is only created once and that one&lt;br&gt;       instance of the array is available to the inner function so that&lt;br&gt;       it can be used on each execution of that inner function.&lt;br&gt;&lt;br&gt;       Empty strings are used as placeholders for the date that is to&lt;br&gt;       be inserted into the Array by the inner function:-&lt;br&gt;    */&lt;/span&gt;&lt;br&gt;    var buffAr = [&lt;br&gt;        '&lt;div id=&quot;',&lt;br&gt;        '',   &lt;span class=&quot;commentJS&quot;&gt;//index 1, DIV ID attribute&lt;/span&gt;&lt;br&gt;        '&quot; style=&quot;position:absolute;top:',&lt;br&gt;        '',   &lt;span class=&quot;commentJS&quot;&gt;//index 3, DIV top position&lt;/span&gt;&lt;br&gt;        'px;left:',&lt;br&gt;        '',   &lt;span class=&quot;commentJS&quot;&gt;//index 5, DIV left position&lt;/span&gt;&lt;br&gt;        'px;width:',&lt;br&gt;        '',   &lt;span class=&quot;commentJS&quot;&gt;//index 7, DIV width&lt;/span&gt;&lt;br&gt;        'px;height:',&lt;br&gt;        '',   &lt;span class=&quot;commentJS&quot;&gt;//index 9, DIV height&lt;/span&gt;&lt;br&gt;        'px;overflow:hidden;\&quot;&gt;&lt;img src=\&quot;',&lt;br&gt;        '',   &lt;span class=&quot;commentJS&quot;&gt;//index 11, IMG URL&lt;/span&gt;&lt;br&gt;        '\&quot; width=\&quot;',&lt;br&gt;        '',   &lt;span class=&quot;commentJS&quot;&gt;//index 13, IMG width&lt;/span&gt;&lt;br&gt;        '\&quot; height=\&quot;',&lt;br&gt;        '',   &lt;span class=&quot;commentJS&quot;&gt;//index 15, IMG height&lt;/span&gt;&lt;br&gt;        '\&quot; alt=\&quot;',&lt;br&gt;        '',   &lt;span class=&quot;commentJS&quot;&gt;//index 17, IMG alt text&lt;/span&gt;&lt;br&gt;        '\&quot;&gt;&lt;\/div&gt;'&lt;br&gt;    ];&lt;br&gt;    &lt;span class=&quot;commentJS&quot;&gt;/* Return the inner function object that is the result of the&lt;br&gt;       evaluation of a function expression. It is this inner function&lt;br&gt;       object that will be executed on each call to -&lt;br&gt;       getImgInPositionedDivHtml( ... ) -:-&lt;br&gt;    */&lt;/span&gt;&lt;br&gt;    return (function(url, id, width, height, top, left, altText){&lt;br&gt;        &lt;span class=&quot;commentJS&quot;&gt;/* Assign the various parameters to the corresponding&lt;br&gt;           locations in the buffer array:-&lt;br&gt;        */&lt;/span&gt;&lt;br&gt;        buffAr[1] = id;&lt;br&gt;        buffAr[3] = top;&lt;br&gt;        buffAr[5] = left;&lt;br&gt;        buffAr[13] = (buffAr[7] = width);&lt;br&gt;        buffAr[15] = (buffAr[9] = height);&lt;br&gt;        buffAr[11] = url;&lt;br&gt;        buffAr[17] = altText;&lt;br&gt;        &lt;span class=&quot;commentJS&quot;&gt;/* Return the string created by joining each element in the&lt;br&gt;           array using an empty string (which is the same as just&lt;br&gt;           joining the elements together):-&lt;br&gt;        */&lt;/span&gt;&lt;br&gt;        return buffAr.join('');&lt;br&gt;    }); &lt;span class=&quot;commentJS&quot;&gt;//:End of inner function expression.&lt;/span&gt;&lt;br&gt;})();&lt;br&gt;&lt;span class=&quot;commentJS&quot;&gt;/*^^- :The inline execution of the outer function expression. */&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;

&lt;p&gt;
If one function was dependent on one (or several) other functions, but
those other functions were not expected to be directly employed by any
other code, then the same technique could be used to group those
functions with the one that was to be publicly exposed. Making a
complex multi-function process into an easily portable and encapsulated
unit of code.
&lt;/p&gt;

&lt;h3&gt;&lt;a name=&quot;clOtE&quot; id=&quot;clOtE&quot;&gt;Other Examples&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;
Probably one of the best known applications of closures is
&lt;A href=&quot;http://www.crockford.com/javascript/private.html&quot; target=&quot;_blank&quot;&gt;Douglas
Crockford's technique for the emulation of private instance variables
in ECMAScript objects&lt;/a&gt;. Which can be extended to all sorts of
structures of scope contained nested accessibility/visibility, including
&lt;A href=&quot;http://www.litotes.demon.co.uk/js_info/private_static.html&quot; target=&quot;_blank&quot;&gt;
the emulation of private static members for ECMAScript objects&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
The possible application of closures are endless, understanding how
they work is probably the best guide to realising how they can be
used.
&lt;/p&gt;

&lt;h2&gt;&lt;a name=&quot;clAc&quot; id=&quot;clAc&quot;&gt;Accidental Closures&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;
Rendering any inner function accessible outside of the body of the
function in which it was created will form a closure. That makes
closures very easy to create and one of the consequences is that
javascript authors who do not appreciate closures as a language feature
can observe the use of inner functions for various tasks and employ
inner functions, with no apparent consequences, not realising that
closures are being created or what the implications of doing that are.
&lt;/p&gt;

&lt;p&gt;
Accidentally creating closures can have harmful side effects as the
following section on the IE memory leak problem describes, but they can
also impact of the efficiency of code. It is not the closures
themselves, indeed carefully used they can contribute significantly
towards the creation of efficient code. It is the use of inner
functions that can impact on efficiency.
&lt;/p&gt;

&lt;p&gt;
A common situation is where inner functions are used is as event
handlers for DOM elements. For example the following code might be used
to add an onclick handler to a link element:-
&lt;/p&gt;

&lt;pre&gt;&lt;span class=&quot;commentJS&quot;&gt;/* Define the global variable that is to have its value added to the&lt;br&gt;   - href - of a link as a query string by the following function:-&lt;br&gt;*/&lt;/span&gt;&lt;br&gt;var quantaty = 5;&lt;br&gt;&lt;span class=&quot;commentJS&quot;&gt;/* When a link passed to this function (as the argument to the function&lt;br&gt;   call - linkRef -) an onclick event handler is added to the link that&lt;br&gt;   will add the value of a global variable - quantaty - to the - href -&lt;br&gt;   of that link as a query string, then return true so that the link&lt;br&gt;   will navigate to the resource specified by the - href - which will&lt;br&gt;   by then include the assigned query string:-&lt;br&gt;*/&lt;/span&gt;&lt;br&gt;function addGlobalQueryOnClick(linkRef){&lt;br&gt;    &lt;span class=&quot;commentJS&quot;&gt;/* If the - linkRef - parameter can be type converted to true&lt;br&gt;       (which it will if it refers to an object):-&lt;br&gt;    */&lt;/span&gt;&lt;br&gt;    if(linkRef){&lt;br&gt;        &lt;span class=&quot;commentJS&quot;&gt;/* Evaluate a function expression and assign a reference to the&lt;br&gt;           function object that is created by the evaluation of the&lt;br&gt;           function expression to the onclick handler of the link&lt;br&gt;           element:-&lt;br&gt;        */&lt;/span&gt;&lt;br&gt;        linkRef.onclick = function(){&lt;br&gt;            &lt;span class=&quot;commentJS&quot;&gt;/* This inner function expression adds the query string to&lt;br&gt;               the - href - of the element to which it is attached as&lt;br&gt;               an event handler:-&lt;br&gt;            */&lt;/span&gt;&lt;br&gt;            this.href += ('?quantaty='+escape(quantaty));&lt;br&gt;            return true;&lt;br&gt;        };&lt;br&gt;    }&lt;br&gt;}&lt;br&gt;&lt;/pre&gt;

&lt;p&gt;
Whenever the &lt;code&gt;addGlobalQueryOnClick&lt;/code&gt; function is called a
new inner function is created (and a closure formed by its assignment).
From the efficiency point of view that would not be significant if the
&lt;code&gt;addGlobalQueryOnClick&lt;/code&gt; function was only called once or
twice, but if the function was heavily employed many distinct function
objects would be created (one for each evaluation of the inner function
expression).
&lt;/p&gt;

&lt;p&gt;
The above code is not taking advantage of the fact that inner functions
are becoming accessible outside of the function in which they are being
created (or the resulting closures). As a result exactly the same effect
could be achieved by defining the function that is to be used as the
event handler separately and then assigning a reference to that
function to the event handling property. Only one function object would
be created and all of the elements that use that event handler would
share a reference to that one function:-
&lt;/p&gt;

&lt;pre&gt;&lt;span class=&quot;commentJS&quot;&gt;/* Define the global variable that is to have its value added to the&lt;br&gt;   - href - of a link as a query string by the following function:-&lt;br&gt;*/&lt;/span&gt;&lt;br&gt;var quantaty = 5;&lt;br&gt;&lt;br&gt;&lt;span class=&quot;commentJS&quot;&gt;/* When a link passed to this function (as the argument to the function&lt;br&gt;   call - linkRef -) an onclick event handler is added to the link that&lt;br&gt;   will add the value of a global variable - quantaty - to the - href -&lt;br&gt;   of that link as a query string, then return true so that the link&lt;br&gt;   will navigate to the resource specified by the - href - which will&lt;br&gt;   by then include the assigned query string:-&lt;br&gt;*/&lt;/span&gt;&lt;br&gt;function addGlobalQueryOnClick(linkRef){&lt;br&gt;    &lt;span class=&quot;commentJS&quot;&gt;/* If the - linkRef - parameter can be type converted to true&lt;br&gt;       (which it will if it refers to an object):-&lt;br&gt;    */&lt;/span&gt;&lt;br&gt;    if(linkRef){&lt;br&gt;        &lt;span class=&quot;commentJS&quot;&gt;/* Assign a reference to a global function to the event&lt;br&gt;           handling property of the link so that it becomes the&lt;br&gt;           element's event handler:-&lt;br&gt;        */&lt;/span&gt;&lt;br&gt;        linkRef.onclick = forAddQueryOnClick;&lt;br&gt;    }&lt;br&gt;}&lt;br&gt;&lt;span class=&quot;commentJS&quot;&gt;/* A global function declaration for a function that is intended to act&lt;br&gt;   as an event handler for a link element, adding the value of a global&lt;br&gt;   variable to the - href - of an element as an event handler:-&lt;br&gt;*/&lt;/span&gt;&lt;br&gt;function forAddQueryOnClick(){&lt;br&gt;    this.href += ('?quantaty='+escape(quantaty));&lt;br&gt;    return true;&lt;br&gt;}&lt;br&gt;&lt;/pre&gt;

&lt;p&gt;
As the inner function in the first version is not being used to exploit
the closures produced by its use, it would be more efficient not to use
an inner function, and thus not repeat the process of creating many
essentially identical function objects.
&lt;/p&gt;

&lt;p&gt;
A similar consideration applies to object constructor functions. It is
not uncommon to see code similar to the following skeleton constructor:-
&lt;/p&gt;


&lt;pre&gt;function ExampleConst(param){&lt;br&gt;    &lt;span class=&quot;commentJS&quot;&gt;/* Create methods of the object by evaluating function expressions&lt;br&gt;       and assigning references to the resulting function objects&lt;br&gt;       to the properties of the object being created:-&lt;br&gt;    */&lt;/span&gt;&lt;br&gt;    this.method1 = function(){&lt;br&gt;        ... &lt;span class=&quot;commentJS&quot;&gt;// method body.&lt;/span&gt;&lt;br&gt;    };&lt;br&gt;    this.method2 = function(){&lt;br&gt;        ... &lt;span class=&quot;commentJS&quot;&gt;// method body.&lt;/span&gt;&lt;br&gt;    };&lt;br&gt;    this.method3 = function(){&lt;br&gt;        ... &lt;span class=&quot;commentJS&quot;&gt;// method body.&lt;/span&gt;&lt;br&gt;    };&lt;br&gt;    &lt;span class=&quot;commentJS&quot;&gt;/* Assign the constructor's parameter to a property of the object:-&lt;br&gt;    */&lt;/span&gt;&lt;br&gt;    this.publicProp = param;&lt;br&gt;}&lt;br&gt;&lt;/pre&gt;

&lt;p&gt;
Each time the constructor is used to create an object, with
&lt;code&gt;new ExampleConst(n)&lt;/code&gt;, a new set of function objects are
created to act as its methods. So the more object instances that are
created the more function objects are created to go with them.
&lt;/p&gt;

&lt;p&gt;
Douglas Crockford's technique for emulating private members on
javascript objects exploits the closure resulting form assigning
references to inner function objects to the public properties of a
constructed object from within its constructor. But if the methods of
an object are not taking advantage of the closure that they will form
within the constructor the creation of multiple function objects for
each object instantiation will make the instantiation process slower
and more resources will be consumed to accommodate the extra function
objects created.
&lt;/p&gt;

&lt;p&gt;
In that case it would be more efficient to create the function object
once and assign references to them to the corresponding properties of
the constructor's &lt;code&gt;prototype&lt;/code&gt; so they may be shared by all
of the objects created with that constructor:-
&lt;/p&gt;

&lt;pre&gt;function ExampleConst(param){&lt;br&gt;    &lt;span class=&quot;commentJS&quot;&gt;/* Assign the constructor's parameter to a property of the object:-&lt;br&gt;    */&lt;/span&gt;&lt;br&gt;    this.publicProp = param;&lt;br&gt;}&lt;br&gt;&lt;span class=&quot;commentJS&quot;&gt;/* Create methods for the objects by evaluating function expressions&lt;br&gt;   and assigning references to the resulting function objects to the&lt;br&gt;   properties of the constructor's prototype:-&lt;br&gt;*/&lt;/span&gt;&lt;br&gt;ExampleConst.prototype.method1 = function(){&lt;br&gt;    ... &lt;span class=&quot;commentJS&quot;&gt;// method body.&lt;/span&gt;&lt;br&gt;};&lt;br&gt;ExampleConst.prototype.method2 = function(){&lt;br&gt;    ... &lt;span class=&quot;commentJS&quot;&gt;// method body.&lt;/span&gt;&lt;br&gt;};&lt;br&gt;ExampleConst.prototype.method3 = function(){&lt;br&gt;    ... &lt;span class=&quot;commentJS&quot;&gt;// method body.&lt;/span&gt;&lt;br&gt;};&lt;br&gt;&lt;br&gt;&lt;/pre&gt;
&lt;h2&gt;&lt;a name=&quot;clMem&quot; id=&quot;clMem&quot;&gt;The Internet Explorer Memory Leak Problem&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;
The Internet Explorer web browser (verified on versions 4 to 6 (6 is
current at the time of writing)) has a fault in its garbage collection
system that prevents it from garbage collecting ECMAScript and some
host objects if those host objects  form part of a &quot;circular&quot;
reference. The host objects in question are any DOM Nodes (including
the document object and its descendants) and ActiveX objects. If a
circular reference is formed including one or more of them, then
none of the objects involved will be freed until the browser is closed
down, and the memory that they consume will be unavailable to the
system until that happens.
&lt;/p&gt;

&lt;p&gt;
A circular reference is when two or more objects refer to each other in
a way that can be followed and lead back to the starting point. Such
as object 1 has a property that refers to object 2, object 2 has a
property that refers to object 3 and object 3 has a property that
refers back to object 1. With pure ECMAScript objects as soon as no
other objects refer to any of objects 1, 2 or 3 the fact that they only
refer to each other is recognised and they are made available for
garbage collection. But on Internet Explorer, if any of those objects
happen to be a DOM Node or ActiveX object, the garbage collection
cannot see that the circular relationship between them is isolated
from the rest of the system and free them. Instead they all stay in
memory until the browser is closed.
&lt;/p&gt;

&lt;p&gt;
Closures are extremely good at forming circular references. If a
function object that forms a closure is assigned as, for example, and
event handler on a DOM Node, and a reference to that Node is assigned
to one of the Activation/Variable objects in its scope chain then a
circular reference exists.
&lt;span class=&quot;scopeCh&quot;&gt;DOM_Node.onevent -&gt;&lt;/span&gt;
&lt;span class=&quot;scopeCh&quot;&gt;function_object.[[scope]] -&gt;&lt;/span&gt;
&lt;span class=&quot;scopeCh&quot;&gt;scope_chain -&gt;&lt;/span&gt;
&lt;span class=&quot;scopeCh&quot;&gt;Activation_object.nodeRef -&gt;&lt;/span&gt;
&lt;span class=&quot;scopeCh&quot;&gt;DOM_Node&lt;/span&gt;.
It is very easy to do, and a bit of browsing around a site that forms
such a reference in a piece of code common to each page can consume
most of the systems memory (possibly all).
&lt;/p&gt;

&lt;p&gt;
Care can be taken to avoid forming circular references and remedial
action can be taken when they cannot otherwise be avoided, such as
using IE's onunload event to null event handling function
references. Recognising the problem and understanding closures
(and their mechanism) is the key to avoiding this problem with IE.
&lt;/p&gt;

&lt;p id=&quot;rToc&quot;&gt;
&lt;a href=&quot;http://jibbering.com/faq/faq_notes/faq_notes.html#toc&quot;&gt;comp.lang.javascript FAQ notes T.O.C.&lt;/a&gt;
&lt;/p&gt;

&lt;ul style=&quot;list-style-type: none; margin-top: 2.5em;&quot;&gt;&lt;li&gt;Written by &lt;span class=&quot;person&quot;&gt;Richard Cornford&lt;/span&gt;. March 2004.&lt;/li&gt;&lt;li&gt;With corrections and suggestions by:-&lt;br&gt;
		&lt;ul style=&quot;list-style-type: none;&quot;&gt;&lt;li&gt;&lt;span class=&quot;person&quot;&gt;Martin Honnen&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;person&quot;&gt;Yann-Erwan Perio (Yep)&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;person&quot;&gt;Lasse Reichstein Nielsen&lt;/span&gt;. (&lt;a href=&quot;http://jibbering.com/faq/faq_notes/closures.html#clDefN&quot;&gt;definition of closure&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;person&quot;&gt;Mike Scirocco&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;person&quot;&gt;Dr John Stockton&lt;/span&gt;.&lt;/li&gt;&lt;/ul&gt;
	&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
	    </content>
	    	</entry>
    	<entry>
	    <title>이클립스 단축키</title>
		<link rel="alternate" type="text/html" href="http://blog.daum.net/best_time/12682409"/>
		<id>tag:blog.daum.net,2009:best_time.12682409</id>
	    <author>
		    <name>서니</name>
	    </author>
	    <updated>2009-05-25T11:17:58Z</updated>
	    <published>2009-05-25T11:17:58Z</published>
	    <content type="html">
	    	&lt;P&gt;
&lt;TABLE id=post border=0 cellSpacing=0 cellPadding=0 width=&quot;100%&quot;&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD style=&quot;Z-INDEX: 1&quot;&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=0 width=&quot;100%&quot;&gt;
&lt;TBODY&gt;
&lt;TR height=29&gt;
&lt;TD style=&quot;Z-INDEX: 2&quot; id=PostTitle class=pt_tlt&gt;&lt;A class=con_link href=&quot;http://blog.empas.com/ahnyounghoe/read.html?a=13418397&quot; name=hl target=_blank&gt;&lt;B&gt;이클립스 단축키 정리&lt;/B&gt;&lt;/A&gt; &lt;/TD&gt;
&lt;TD align=right&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;DIV id=PostContent&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=0 width=&quot;100%&quot;&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=pt_text name=&quot;hl&quot;&gt;
&lt;DIV&gt;유용해보이는&amp;nbsp;내용을 발췌해옵니다.&lt;/DIV&gt;
&lt;DIV&gt;타 사이트 블러그 이므로.. 직접 복사한 것입니다.&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=verdana&gt;===== 실행 =====&lt;BR&gt;1. Ctrl + F11 : 바로 전에 실행했던 클래스 실행&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=verdana&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=verdana&gt;===== 소스 네비게이션 =====&lt;BR&gt;1. Ctrl + 마우스커서(혹은 F3) : 클래스나 메소드 혹은 멤버를 상세하게 검색하고자 할때&lt;BR&gt;2. Alt + -&gt;, Alt + &lt;- : 이후, 이전&lt;BR&gt;3. Ctrl + o : 해당 소스의 메소드 리스트를 확인하려 할때&lt;BR&gt;4. F4 : 클래스명을 선택하고 누르면 해당 클래스의 Hierarchy 를 볼 수 있다.&lt;BR&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=verdana&gt;===== 문자열 찾기 =====&lt;BR&gt;1. Ctrl + k : 찾고자 하는 문자열을 블럭으로 설정한 후 키를 누른다.&lt;BR&gt;2. Ctrl + Shift + k : 역으로 찾고자 하는 문자열을 찾아감.&lt;BR&gt;3. Ctrl + j : 입력하면서 찾을 수 있음.&lt;BR&gt;4. Ctrl + Shift + j : 입력하면서 거꾸로 찾아갈 수 있음.&lt;BR&gt;5. Ctrl + f : 기본적으로 찾기&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=verdana&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=verdana&gt;===== 소스 편집 =====&lt;BR&gt;1. Ctrl + Space : 입력 보조장치(Content Assistance) 강제 호출 =&gt; 입력하는 도중엔 언제라도 강제 호출 가능하다.&lt;BR&gt;2. F2 : 컴파일 에러의 빨간줄에 커서를 갖져다가 이 키를 누르면 에러의 원인에 대한 힌트를 제공한다.&lt;BR&gt;3. Ctrl + l : 원하는 소스 라인으로 이동&lt;BR&gt;&amp;nbsp;&amp;nbsp; 로컬 히스토리 기능을 이용하면 이전에 편집했던 내용으로 변환이 가능하다.&lt;BR&gt;4. Ctrl + Shift + Space : 메소드의 가로안에 커서를 놓고 이 키를 누르면 파라미터 타입 힌트를 볼 수 있다.&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=verdana&gt;5. 한줄 삭제 CTRL + D&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=verdana&gt;6. 파일 닫기 : CTRL+W &lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=verdana&gt;7. 들여쓰기 자동 수정. (3.0 NEW) : CTRL+I&amp;nbsp;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=verdana&gt;8. 블록 주석(/*..*/) 추가.(3.0 NEW): CTRL+SHIFT+/ &lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=verdana&gt;&amp;nbsp; 8.1 Ctrl + / 해주면 여러줄이 한꺼번에 주석처리됨. 주석 해제하려면 반대로 하면 됨.&lt;BR&gt;9. 위(아래)줄과 바꾸기 : ALT+UP(DOWN) &lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=verdana&gt;10. 블록 선택하기.&amp;nbsp; : ALT+SHIFT+방향키 &lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=verdana&gt;11. 메소드의 파라메터 목록 보기. : CTRL+SHIFT+SPACE&lt;BR&gt;12. 자동으로 import 하기 : CTRL+SHIFT+O &lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=verdana&gt;13. 열린 파일 모두 닫기 : CTRL + SHIFT + F4&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=verdana&gt;14. 블록 주석 제거 : CTRL+SHIFT+&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=verdana&gt;15. 전체화면 토글 : CTRL+M &lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=verdana&gt;16. 한줄(블럭) 복사 : Ctrl + Alt + 위(아래) &lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=verdana&gt;17. 다음 annotation(에러, 워닝, 북마크 가능)으로 점프 : Ctrl + , or . &lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=verdana&gt;18. 퀵 픽스 : Ctrl + 1&amp;nbsp; &lt;BR&gt;19. 메소드 정의부로 이동 : F3&lt;BR&gt;20. 하이어라키 팦업 창 띄우기(인터페이스 구현 클래스간 이동시 편리) : Ctrl + T&amp;nbsp; &lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=verdana&gt;21. 메소드나 필드 이동하기 CTRL + O &lt;BR&gt;22. ULTRAEDIT나 EDITPLUS 의 CTRL+TAB 과 같은 기능. : CTRL+F6&amp;nbsp;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=verdana&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=verdana&gt;===== 템플릿 사용 =====&lt;BR&gt;1. sysout 입력한 후 Ctrl + Space 하면 System.out.println(); 으로 바뀐다.&lt;BR&gt;2. try 입력한 후 Ctrl + Space 하면 try-catch 문이 완성된다.&lt;BR&gt;3. for 입력한 후 Ctrl + Space 하면 여러가지 for 문을 완성할 수 있다.&lt;BR&gt;4. 템플릿을 수정하거나 추가하려면 환경설정/자바/편집기/템플리트 에서 할 수 있다.&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=verdana&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=verdana&gt;===== 메소드 쉽게 생성하기 =====&lt;BR&gt;1. 클래스의 멤버를 일단 먼저 생성한다.&lt;BR&gt;2. override 메소드를 구현하려면 : 소스-&gt;메소드대체/구현 에서 해당 메소드를 체크한다.&lt;BR&gt;3. 기타 클래스의 멤버가 클래스의 오브젝트라면 : 소스-&gt;위임메소드 생성에서 메소드를 선택한다.&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=verdana&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=verdana&gt;===== organize import =====&lt;BR&gt;1. 자바파일을 여러개 선택한 후 소스 -&gt; 가져오기 체계화 해주면 모두 적용된다.&amp;nbsp;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=verdana&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=verdana&gt;===== 소스 코드 형식 및 공통 주석 설정 =====&lt;BR&gt;1. 환경설정 -&gt; 자바 -&gt; 코드 스타일 -&gt; 코드 포멧터 -&gt; 가져오기 -&gt; 프로파일.xml 을 불러다가 쓰면 된다.&lt;BR&gt;2. 또한 다수의 자바파일에 프로파일을 적용하려면 패키지 탐색기에서 패키지를 선택한 후 소스 -&gt; 형식화를 선택하면 된다.&lt;BR&gt;3. 환경설정 -&gt; 자바 -&gt; 코드 스타일 -&gt; 코드 템플리트 -&gt; 가져오기 -&gt; 템플리트.xml 을 불러다가 쓰면 된다.&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=verdana&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=verdana&gt;===== 에디터 변환 =====&lt;BR&gt;1. 에디터가 여러 파일을 열어서 작업중일때 Ctrl + F6 키를 누르면 여러파일명이 나오고 F6키를 계속 누르면 아래로&lt;BR&gt;2. Ctrl + Shift + F6 키를 누르면 위로 커서가 움직인다.&lt;BR&gt;3. Ctrl + F7 : 뷰간 전환&lt;BR&gt;4. Ctrl + F8 : 퍼스펙티브간 전환&lt;BR&gt;5. F12 : 에디터로 포커스 위치&lt;/FONT&gt;&lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
	    </content>
	    	</entry>
    	<entry>
	    <title>[script] String 문자열 byte 값 계산하기.</title>
		<link rel="alternate" type="text/html" href="http://blog.daum.net/best_time/12682396"/>
		<id>tag:blog.daum.net,2009:best_time.12682396</id>
	    <author>
		    <name>서니</name>
	    </author>
	    <updated>2009-05-01T16:15:45Z</updated>
	    <published>2009-05-01T16:15:45Z</published>
	    <content type="html">
	    	&lt;p&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(102, 102, 102); font-family: 'Lucida Grande'; &quot;&gt;가끔 사이트에서 덧글 같은 걸 쓰다보면 문자를 입력하면 조금한 Box에 byte값이 계산되어서 나타나게 된다.&lt;br&gt;어떻게 하는 것 일까...여러 가지 방법이 있을 수 있겠지만...나는 Script를 이용해서 만들어 보았다.&lt;br&gt;아래 그림은 다음 카페에서 사용하고 있는 덧글쓰는 부분이다.&lt;div class=&quot;imageblock center&quot; style=&quot;clear: both; text-align: center; &quot;&gt;&lt;img height=&quot;106&quot; alt=&quot;사용자 삽입 이미지&quot; src=&quot;http://cfs5.tistory.com/image/2/tistory/2008/03/11/22/33/47d68a3ec4798&quot; width=&quot;560&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; &quot;&gt;&lt;/div&gt;&lt;br&gt;위 그림에서 &quot;&lt;strong&gt;안녕하세요~!&lt;/strong&gt;&quot;가 &lt;font color=&quot;#d41a01&quot;&gt;&lt;strong&gt;12byte &lt;/strong&gt;&lt;/font&gt;라고 나와 있네~!^^&lt;br&gt;&lt;br&gt;위 그림과 똑같은 디자인은 아니지만 간단하게 Textbox 2개를 만들어서 위와 같이 표현하도록 만들어 보았다.&lt;br&gt;에디터플러스를 실행을 해서 아래와 같은 코드를 입력 했다. 간단한 디자인(?!)이다.ㅋ&lt;br&gt;&lt;br&gt;&lt;table class=&quot;MsoNormalTable&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; width=&quot;100%&quot; border=&quot;1&quot; style=&quot;width: 100%; &quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;border-right-color: rgb(224, 223, 227); border-right-width: 1pt; border-right-style: inset; padding-right: 3.75pt; border-top-color: rgb(224, 223, 227); border-top-width: 1pt; border-top-style: inset; padding-left: 3.75pt; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(239, 239, 239); padding-bottom: 3.75pt; border-left-color: rgb(224, 223, 227); border-left-width: 1pt; border-left-style: inset; padding-top: 3.75pt; border-bottom-color: rgb(224, 223, 227); border-bottom-width: 1pt; border-bottom-style: inset; background-position: initial initial; &quot;&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;center&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; line-height: 19.2pt; text-align: center; &quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(102, 102, 102); font-family: 굴림; &quot;&gt;HTML 코드&lt;/span&gt;&lt;/b&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-size: 12pt; color: rgb(102, 102, 102); font-family: 굴림; &quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;border-right-color: rgb(224, 223, 227); border-right-width: 1pt; border-right-style: inset; padding-right: 3.75pt; border-top-color: rgb(224, 223, 227); border-top-width: 1pt; border-top-style: inset; padding-left: 3.75pt; padding-bottom: 3.75pt; border-left-color: rgb(224, 223, 227); border-left-width: 1pt; border-left-style: inset; padding-top: 3.75pt; border-bottom-color: rgb(224, 223, 227); border-bottom-width: 1pt; border-bottom-style: inset; background-color: transparent; &quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: blue; font-family: 돋움체; &quot;&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: blue; font-family: 돋움체; &quot;&gt;&lt;!&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: maroon; font-family: 돋움체; &quot;&gt;DOCTYPE&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: 돋움체; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: red; &quot;&gt;HTML&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: red; &quot;&gt;PUBLIC&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: blue; &quot;&gt;&quot;-//W3C//DTD HTML 4.0 Transitional//EN&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: blue; font-family: 돋움체; &quot;&gt;&lt;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: maroon; font-family: 돋움체; &quot;&gt;HTML&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: blue; font-family: 돋움체; &quot;&gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: blue; font-family: 돋움체; &quot;&gt;&lt;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: maroon; font-family: 돋움체; &quot;&gt;HEAD&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: blue; font-family: 돋움체; &quot;&gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: blue; font-family: 돋움체; &quot;&gt;&lt;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: maroon; font-family: 돋움체; &quot;&gt;TITLE&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: blue; font-family: 돋움체; &quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 돋움체; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;문자열&lt;span lang=&quot;EN-US&quot;&gt; byte&lt;/span&gt;표현&lt;/font&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: blue; &quot;&gt;&lt;/&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: maroon; &quot;&gt;TITLE&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: blue; &quot;&gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: blue; font-family: 돋움체; &quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: blue; font-family: 돋움체; &quot;&gt;&lt;/&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: maroon; font-family: 돋움체; &quot;&gt;HEAD&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: blue; font-family: 돋움체; &quot;&gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: blue; font-family: 돋움체; &quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: blue; font-family: 돋움체; &quot;&gt;&lt;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: maroon; font-family: 돋움체; &quot;&gt;BODY&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: blue; font-family: 돋움체; &quot;&gt;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: blue; font-family: 돋움체; &quot;&gt;&lt;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: maroon; font-family: 돋움체; &quot;&gt;input&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: 돋움체; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: red; &quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: blue; &quot;&gt;=&quot;text&quot;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: red; &quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: blue; &quot;&gt;=&quot;Text1&quot;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: red; &quot;&gt;onkeyUp&lt;/span&gt;&lt;span style=&quot;color: blue; &quot;&gt;=&quot;OntextCheck(this);&quot;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: red; &quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color: blue; &quot;&gt;=&quot;width:300px;&quot;&gt;&lt;&lt;/span&gt;&lt;span style=&quot;color: maroon; &quot;&gt;br&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: blue; &quot;&gt;/&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: blue; font-family: 돋움체; &quot;&gt;&lt;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: maroon; font-family: 돋움체; &quot;&gt;input&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: 돋움체; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: red; &quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: blue; &quot;&gt;=&quot;text&quot;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: red; &quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: blue; &quot;&gt;=&quot;txtbyte&quot;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: red; &quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color: blue; &quot;&gt;=&quot;width:50px;&quot;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: red; &quot;&gt;readonly&lt;/span&gt;&lt;span style=&quot;color: blue; &quot;&gt;&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;/600byte&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: blue; font-family: 돋움체; &quot;&gt;&lt;/&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: maroon; font-family: 돋움체; &quot;&gt;BODY&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: blue; font-family: 돋움체; &quot;&gt;&gt;&lt;o:p&gt;&lt;/o:p&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; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: blue; font-family: 돋움체; &quot;&gt;&lt;/&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: maroon; font-family: 돋움체; &quot;&gt;HTML&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: blue; font-family: 돋움체; &quot;&gt;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/font&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;위 코드를 실행 브라우저로 보면 간단한 textbox 2개가 나타날 것이다. 여기에서 글을 입력할 textbox에 onKeyUp이벤트를 주고, Scripte 함수를 호출해서 문자의 byte 값을 나타낸 다음에 readonly로 되어있는 textbox에 표현해 주면 될 것 이다. 스크립트 합수는&lt;strong&gt;&lt;font color=&quot;#0000ff&quot;&gt;OntextCheck()&lt;/font&gt;&lt;/strong&gt; 이다.&lt;br&gt;&lt;br&gt;아래 스크립트 함수를 &lt;HEAD&gt;&lt;/HEAD&gt;사이에 입력한다. &lt;br&gt;&lt;br&gt;&lt;table class=&quot;MsoNormalTable&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; width=&quot;100%&quot; border=&quot;1&quot; style=&quot;width: 100%; &quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;border-right-color: rgb(224, 223, 227); border-right-width: 1pt; border-right-style: inset; padding-right: 3.75pt; border-top-color: rgb(224, 223, 227); border-top-width: 1pt; border-top-style: inset; padding-left: 3.75pt; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(239, 239, 239); padding-bottom: 3.75pt; border-left-color: rgb(224, 223, 227); border-left-width: 1pt; border-left-style: inset; padding-top: 3.75pt; border-bottom-color: rgb(224, 223, 227); border-bottom-width: 1pt; border-bottom-style: inset; background-position: initial initial; &quot;&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;center&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; line-height: 19.2pt; text-align: center; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-size: 12pt; color: rgb(102, 102, 102); font-family: 굴림; &quot;&gt;Scirpt 함수&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;border-right-color: rgb(224, 223, 227); border-right-width: 1pt; border-right-style: inset; padding-right: 3.75pt; border-top-color: rgb(224, 223, 227); border-top-width: 1pt; border-top-style: inset; padding-left: 3.75pt; padding-bottom: 3.75pt; border-left-color: rgb(224, 223, 227); border-left-width: 1pt; border-left-style: inset; padding-top: 3.75pt; border-bottom-color: rgb(224, 223, 227); border-bottom-width: 1pt; border-bottom-style: inset; background-color: transparent; &quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: blue; font-family: 돋움체; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: blue; font-family: 돋움체; &quot;&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: blue; font-family: 돋움체; &quot;&gt;&lt;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: maroon; font-family: 돋움체; &quot;&gt;script&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: 돋움체; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: red; &quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: blue; &quot;&gt;=&quot;text/javascript&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: 돋움체; &quot;&gt;&lt;span&gt;&lt;font color=&quot;#000000&quot;&gt;        &lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;color: blue; &quot;&gt;function&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; OntextCheck(obj)&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: 돋움체; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span&gt;        &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: 돋움체; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;color: blue; &quot;&gt;var&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; str = &lt;/font&gt;&lt;span style=&quot;color: blue; &quot;&gt;new&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; String(obj.value);&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: 돋움체; &quot;&gt;&lt;span&gt;&lt;font color=&quot;#000000&quot;&gt;               &lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;color: blue; &quot;&gt;var&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; _byte = 0;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: 돋움체; &quot;&gt;&lt;span&gt;&lt;font color=&quot;#000000&quot;&gt;                       &lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;color: blue; &quot;&gt;if&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;(str.length != 0)&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: 돋움체; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span&gt;                       &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: 돋움체; &quot;&gt;&lt;span&gt;&lt;font color=&quot;#000000&quot;&gt;                              &lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;color: blue; &quot;&gt;for&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; (&lt;/font&gt;&lt;span style=&quot;color: blue; &quot;&gt;var&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; i=0; i &lt; str.length; i++)&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: 돋움체; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span&gt;                              &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: 돋움체; &quot;&gt;&lt;span&gt;&lt;font color=&quot;#000000&quot;&gt;                                     &lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;color: blue; &quot;&gt;var&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; str2 = str.charAt(i);&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: 돋움체; &quot;&gt;&lt;span&gt;&lt;font color=&quot;#000000&quot;&gt;                                      &lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;color: blue; &quot;&gt;if&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;(escape(str2).length &gt; 4)&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: 돋움체; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span&gt;                                      &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: 돋움체; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span&gt;                                             &lt;/span&gt;_byte += 2;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: 돋움체; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span&gt;                                      &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: 돋움체; &quot;&gt;&lt;span&gt;&lt;font color=&quot;#000000&quot;&gt;                                      &lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;color: blue; &quot;&gt;else&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: 돋움체; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span&gt;                                      &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: 돋움체; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span&gt;                                             &lt;/span&gt;_byte++;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: 돋움체; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span&gt;                                      &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: 돋움체; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span&gt;                              &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: 돋움체; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span&gt;                       &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: 돋움체; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span&gt;               &lt;/span&gt;document.getElementById(&lt;/font&gt;&lt;span style=&quot;color: maroon; &quot;&gt;&quot;txtbyte&quot;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;).value = _byte;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: 돋움체; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span&gt;        &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;p class=&quot;MsoNormal&quot; align=&quot;left&quot; style=&quot;margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-align: left; &quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: blue; font-family: 돋움체; &quot;&gt;&lt;/&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: maroon; font-family: 돋움체; &quot;&gt;script&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: blue; font-family: 돋움체; &quot;&gt;&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;위 스트립트 함수중에 중요한 메소드는 &lt;strong&gt;&lt;font color=&quot;#d41a01&quot; size=&quot;4&quot;&gt;escape&lt;/font&gt;&lt;/strong&gt; 일 것이다.&lt;br&gt;&lt;font color=&quot;#d41a01&quot;&gt;escape&lt;/font&gt; 함수는 &lt;strong&gt;&lt;font color=&quot;#0000ff&quot;&gt;String&lt;/font&gt;&lt;/strong&gt; 개체를 모든 컴퓨터에서 읽을 수 있도록 인코딩(encoding) 해 준다.(&lt;span class=&quot;mark&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://ko.wikipedia.org/wiki/ASCII&quot; target=&quot;_blank&quot; style=&quot;color: rgb(204, 103, 20); text-decoration: none; &quot;&gt;&lt;span class=&quot;mark&quot;&gt;&lt;b&gt;&lt;font color=&quot;#cc6714&quot;&gt;ASCII&lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;img class=&quot;snap_preview_icon&quot; id=&quot;snap_com_shot_link_icon&quot; src=&quot;http://i.ixnp.com/images/v3.54.0.1/t.gif&quot; style=&quot;padding-right: 0px; min-width: 0px; display: inline; padding-left: 0px; font-weight: normal; min-height: 0px; left: auto; float: none; background-image: url(http://i.ixnp.com/images/v3.54.0.1/theme/silver/palette.gif); visibility: visible; max-width: 2000px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; vertical-align: top; width: 14px; max-height: 2000px; line-height: normal; padding-top: 1px; background-repeat: no-repeat; font-style: normal; font-family: 'trebuchet ms', arial, helvetica, sans-serif; position: static; top: auto; height: 12px; background-color: transparent; text-decoration: none; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; background-position: -1142px 0px; &quot;&gt;&lt;/a&gt;&lt;/b&gt; 글자로 접속할 수 있도록 &lt;b&gt;인코딩&lt;/b&gt;&lt;/span&gt;한다)&lt;br&gt;예를 들어 &quot;abcd&quot;는 인코딩하면 &quot;abcd&quot;로 나타나고, &quot;글&quot;은 &quot;%uAE00&quot; 인코딩이 된다. &lt;br&gt;ASCII 코드를 인코딩 된 것을 다시 디코딩(decoding)하려면 &lt;span class=&quot;function&quot;&gt;&lt;font color=&quot;#d41a01&quot; size=&quot;4&quot;&gt;&lt;strong&gt;unescape&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt; 를 사용하면 된다.&lt;br&gt;이렇게 인코딩 된 값의 문자 길이를 알아서 ++ 시켜주면 되는 것이다. &lt;br&gt;&lt;br&gt;자 그럼 테스트 해보자~!&lt;br&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;clear: both; text-align: center; &quot;&gt;&lt;img height=&quot;200&quot; alt=&quot;사용자 삽입 이미지&quot; src=&quot;http://cfs4.tistory.com/image/12/tistory/2008/03/11/23/42/47d69a3e62767&quot; width=&quot;480&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; &quot;&gt;&lt;/div&gt;&lt;br&gt;음~~ 잘되는 군~!^^&lt;br&gt;스크립트도 나름 잼있는 것 같다~^^&lt;/span&gt;&lt;/p&gt;
	    </content>
	    	</entry>
    	<entry>
	    <title>PNG ==&gt; ICO 컨버터</title>
		<link rel="alternate" type="text/html" href="http://blog.daum.net/best_time/12682395"/>
		<id>tag:blog.daum.net,2009:best_time.12682395</id>
	    <author>
		    <name>서니</name>
	    </author>
	    <updated>2009-04-29T13:40:00Z</updated>
	    <published>2009-04-29T13:40:00Z</published>
	    <content type="html">
	    	&lt;p&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(138, 138, 138); font-family: 돋움; line-height: 15px; &quot;&gt;&lt;strong 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.3; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;좋은점&amp;nbsp;&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.3; 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.3; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;1. 무설치 프로그램이다.&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.3; 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.3; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;2. 가볍다.&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.3; 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.3; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;3. 따로 저장하지 않아도 temp파일에 저장된다.&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.3; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;A href=&quot;http://cfile213.uf.daum.net/attach/155B960C49F7D9FEE42EA0&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://icon.daum-img.net/editor/p_zip_s.gif&quot;/&gt; AveIconefier.zip&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(138, 138, 138); font-family: 돋움; line-height: 15px; &quot;&gt;&lt;strong 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.3; 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.3; 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.3; 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.3; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;1. 많이 써보지 못하여 잘 모르겠다&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.3; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&lt;/strong&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.3; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&lt;strong 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.3; 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.3; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&lt;/strong&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.3; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&lt;strong 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.3; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;요긴하게 쓰시길 바래요 ㅎ&lt;/strong&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.3; 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.3; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;margin-top: 5px; margin-right: 0px; margin-bottom: 5px; 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.3; font-family: 돋움, Dotum, AppleGothic, sans-serif; text-align: center; clear: both; &quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/175B501C49D36CD29812F0&quot; alt=&quot;&quot; height=&quot;322&quot; width=&quot;401&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.3; font-family: 돋움, Dotum, AppleGothic, sans-serif; &quot;&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
	    </content>
	    	</entry>
    	<entry>
	    <title>MutipartRequest 사용하기</title>
		<link rel="alternate" type="text/html" href="http://blog.daum.net/best_time/12682394"/>
		<id>tag:blog.daum.net,2009:best_time.12682394</id>
	    <author>
		    <name>서니</name>
	    </author>
	    <updated>2009-04-28T16:37:40Z</updated>
	    <published>2009-04-28T16:37:40Z</published>
	    <content type="html">
	    	&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;- MultipartRequest 파일 업로드르 위한 설정.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;1. 사이트 servlets.com 접속.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;2. com.oreilly.servlet클릭 -&gt; cos파일을 다운로드.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;3. 압축을 푼후 [lib폴더] 안의 [cos.jar파일]을 import한 후 사용.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;▶ 업로드 할때&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;1. cos.jar 파일을 프로젝트에&amp;nbsp;import 한 후&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;2. 아래 Source 처럼 저장 경로를 설정해주면 파일이 바로 저장 된다.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; background-color: rgb(238, 238, 238); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(238, 238, 238); border-right-color: rgb(238, 238, 238); border-bottom-color: rgb(238, 238, 238); border-left-color: rgb(238, 238, 238); &quot;&gt;&lt;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; &quot;&gt;MultipartRequest multi &amp;nbsp;= &amp;nbsp;new MultipartRequest(request, savePath, sizeLimit, &quot;EUC-KR&quot;, new DefaultFileRenamePolicy());&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;
	    </content>
	    	</entry>
    	<entry>
	    <title>property 파일 만들기.</title>
		<link rel="alternate" type="text/html" href="http://blog.daum.net/best_time/12682393"/>
		<id>tag:blog.daum.net,2009:best_time.12682393</id>
	    <author>
		    <name>서니</name>
	    </author>
	    <updated>2009-04-28T16:30:43Z</updated>
	    <published>2009-04-28T16:30:43Z</published>
	    <content type="html">
	    	&lt;p&gt;&lt;p&gt;-property파일 만들기&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;1. [변수명]=[입력될내용] &amp;nbsp; &amp;nbsp;&lt;== 각각 변수를&amp;nbsp;쌍으로 입력하여 파일 생성.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;1) 파일 확장자는 [propterties]&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;2. 입력된 글자를 아스키 코드로 변환하기.(다른 외국어를 이용할 때 사용)&lt;/p&gt;&lt;p&gt;- jdk bin폴더 안에서&lt;/p&gt;&lt;p&gt;==&gt;&gt; native2ascii [원본파일명] [생성될파일명]&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;▶ JSP에서 서블릿으로 바뀐 파일이 있는 곳.(경로가 복잡하긴 하지만 error 코드를 찾아내어 수정할 때 용이하다.)&lt;/p&gt;&lt;p&gt;C:\eclipse-jee-ganymede-SR1-win32\eclipse\workspace\.metadata\&lt;/p&gt;&lt;p&gt;.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost&lt;/p&gt;&lt;/p&gt;
	    </content>
	    	</entry>
    	<entry>
	    <title>JSP 사용시 알아두어야 할 설정들</title>
		<link rel="alternate" type="text/html" href="http://blog.daum.net/best_time/12682390"/>
		<id>tag:blog.daum.net,2009:best_time.12682390</id>
	    <author>
		    <name>서니</name>
	    </author>
	    <updated>2009-04-21T16:31:45Z</updated>
	    <published>2009-04-21T16:31:45Z</published>
	    <content type="html">
	    	&lt;P&gt;//form전송시 method 방시을 get으로 설정하였을 때 받을 값을 한글로 처리하는 방법&lt;/P&gt;
&lt;P&gt;//(tomcat 5.0은 자동으로 한글 처리를 해주지만 6.0은 그렇지 못하다 프로그래머가 직접 한글 사용시 마다 바꾸어주어야함)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style=&quot;MARGIN-LEFT: 4em&quot;&gt;search = new String(search.getBytes(&quot;ISO-8859-1&quot;), &quot;EUC_KR&quot;); &amp;nbsp;//get방식일때 처리 방법(tomcat 6.0)&lt;/P&gt;
	    </content>
	    	</entry>
    	<entry>
	    <title>MBC 앵커 교채 논란.</title>
		<link rel="alternate" type="text/html" href="http://blog.daum.net/best_time/12682388"/>
		<id>tag:blog.daum.net,2009:best_time.12682388</id>
	    <author>
		    <name>서니</name>
	    </author>
	    <updated>2009-04-14T13:22:04Z</updated>
	    <published>2009-04-14T13:22:04Z</published>
	    <content type="html">
	    	&lt;p&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(102, 102, 102); font-family: 굴림; line-height: 18px; &quot;&gt;&lt;h3 class=&quot;articleSubecjt&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 15px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font: normal normal bold 18pt/normal 돋움, Dotum; color: rgb(0, 0, 0); letter-spacing: -1px; &quot;&gt;MBC 앵커들도 제작거부&lt;/h3&gt;&lt;p class=&quot;articleInfo&quot; style=&quot;padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 7px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;span class=&quot;link&quot; style=&quot;font: normal normal normal 8pt/normal 돋움, Dotum; color: rgb(119, 119, 119); padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 2px; &quot;&gt;&lt;a href=&quot;http://news.nate.com/mediaList?cp=yt&quot; class=&quot;medium&quot; onclick=&quot;ndrclick('RMV00');&quot; style=&quot;font: normal normal normal 8pt/normal 돋움, Dotum; text-decoration: none; letter-spacing: 0px; font-size: 8pt !important; color: rgb(184, 148, 148) !important; &quot;&gt;연합뉴스&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;firstDate&quot; style=&quot;font: normal normal normal 8pt/normal 돋움, Dotum; color: rgb(119, 119, 119); padding-top: 0px; padding-right: 8px; padding-bottom: 0px; padding-left: 10px; background-image: url(http://nimg.nate.com/etc/ui/images/icon/bul_line.gif); background-repeat: no-repeat; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: 0% 1px; &quot;&gt;기사전송&amp;nbsp;&lt;em style=&quot;font-style: normal; color: rgb(153, 153, 153); &quot;&gt;2009-04-14 11:01&lt;/em&gt;&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;lastDate&quot; style=&quot;font: normal normal normal 8pt/normal 돋움, Dotum; color: rgb(119, 119, 119); &quot;&gt;최종수정&amp;nbsp;&lt;em style=&quot;font-style: normal; color: rgb(153, 153, 153); &quot;&gt;2009-04-14 11:16&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;articleControl f_clear&quot; style=&quot;position: relative; z-index: 2; width: 100%; margin-top: 9px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; &quot;&gt;&lt;dl class=&quot;concernCount&quot; style=&quot;position: absolute; right: 96px; top: 3px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;&lt;dt id=&quot;rankTit&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; font: normal normal normal 8pt/normal 돋움, Dotum; float: left; color: rgb(119, 119, 119); letter-spacing: -1px; &quot;&gt;&lt;a href=&quot;javascript:ndrclick('RMV02');rankDisplay(595,%20199,%20318,%201,%20true);&quot; style=&quot;color: rgb(119, 119, 119) !important; text-decoration: underline !important; &quot;&gt;관심지수&lt;/a&gt;&lt;/dt&gt;&lt;dd id=&quot;loadingBar&quot; class=&quot;&quot; style=&quot;padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font: normal normal normal 8pt/normal 돋움, Dotum; position: relative; display: inline; float: left; width: 48px; height: 6px; margin-top: 2px; margin-right: 0px; margin-bottom: 0px; margin-left: 5px; background-image: url(http://nimg.nate.com/etc/ui/images/common/bg_smallgauge.gif); background-repeat: no-repeat; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: 0% 100%; &quot;&gt;&lt;span style=&quot;width: 55%; float: left; height: 6px; background-image: url(http://nimg.nate.com/etc/ui/images/common/bg_smallgauge.gif); background-repeat: no-repeat; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 1px; background-position: 0% 0%; &quot;&gt;&lt;em style=&quot;font-style: normal; position: absolute; right: -16px; top: -1px; color: rgb(254, 132, 2); line-height: 1; &quot;&gt;55&lt;/em&gt;&lt;/span&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;p class=&quot;articleSize&quot; style=&quot;float: right; margin-top: 0px; margin-right: 1px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 9px; background-image: url(http://nimg.nate.com/etc/ui/images/icon/bul_line.gif); background-repeat: no-repeat; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: 0% 4px; &quot;&gt;&lt;a href=&quot;http://news.nate.com/view/20090414n06260?mid=n0408#&quot; class=&quot;articleLarge&quot; onclick=&quot;ndrclick('RMV03');fontPlus(); return false;&quot; title=&quot;기사 내용 크게 보기&quot; style=&quot;color: rgb(102, 102, 102); text-decoration: none; display: inline; float: left; width: 28px; height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 2px; font-size: 0px; line-height: 0; text-indent: -99999px; background-image: url(http://nimg.nate.com/etc/ui/images/button/btn_txtbigsmall.gif); background-repeat: no-repeat; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; overflow-x: hidden; overflow-y: hidden; background-position: 0% 0%; &quot;&gt;글씨 확대&lt;/a&gt;&lt;a href=&quot;http://news.nate.com/view/20090414n06260?mid=n0408#&quot; class=&quot;articleSmall&quot; onclick=&quot;ndrclick('RMV04');fontMinus(); return false;&quot; title=&quot;기사 내용 작게 보기&quot; style=&quot;color: rgb(102, 102, 102); text-decoration: none; display: inline; float: left; width: 28px; height: 16px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 2px; font-size: 0px; line-height: 0; text-indent: -99999px; background-image: url(http://nimg.nate.com/etc/ui/images/button/btn_txtbigsmall.gif); background-repeat: no-repeat; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; overflow-x: hidden; overflow-y: hidden; background-position: 100% 0%; &quot;&gt;글씨 축소&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div id=&quot;articleContetns&quot; class=&quot;article medium&quot; style=&quot;font: normal normal normal 8pt/normal 돋움, Dotum; color: rgb(184, 148, 148) !important; letter-spacing: -1px; &quot;&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; border=&quot;0&quot; width=&quot;100%&quot; style=&quot;table-layout: fixed; font-size: 10.5pt !important; &quot;&gt;&lt;tbody style=&quot;font-size: 10.5pt !important; &quot;&gt;&lt;tr style=&quot;font-size: 10.5pt !important; &quot;&gt;&lt;td style=&quot;line-height: 1.5; font-family: 굴림, Gulim, 돋움, Dotum, AppleGothic, sans-serif; color: rgb(34, 34, 34) !important; font: normal normal normal 10.5pt/1.7 굴림, Gulim; font-size: 10.5pt !important; &quot;&gt;&lt;div id=&quot;articleImage0&quot; class=&quot;articleMedia mediaImageZoom mediaImage&quot; style=&quot;font-size: 10.5pt !important; display: inline; float: right; padding-top: 0px; padding-right: 0px; padding-bottom: 15px; padding-left: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 32px; margin-left: 0px; text-align: center; &quot;&gt;&lt;span class=&quot;imageZoom&quot; style=&quot;font-size: 10.5pt !important; position: relative; display: inline-block; &quot;&gt;&lt;img src=&quot;http://nimg.nate.com/orgImg/yt/2009/04/14/AKR20090414066100005_01_i.jpg&quot; onerror=&quot;blankImg(this,0,0);&quot; onclick=&quot;GoImg(this.src)&quot; alt=&quot;&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; font-size: 10.5pt !important; vertical-align: middle; &quot;&gt;&lt;/span&gt;&lt;/div&gt;(서울=연합뉴스) 김영현 기자 = MBC '뉴스24'의 김주하 앵커를 비롯한 일부 앵커도 '뉴스데스크' 신경민 앵커 교체에 항의해 제작거부에 나섰다.&amp;nbsp;&lt;br style=&quot;font-size: 10.5pt !important; &quot;&gt;&lt;br style=&quot;font-size: 10.5pt !important; &quot;&gt;지난 9일부터 제작거부에 들어간 MBC 기자회 차장ㆍ평기자 비상대책위원회(이하 비대위) 측은 14일 &quot;비대위 소속 앵커와 편집부 기자의 경우 뉴스의 파행을 최소화하기 위해 그동안 제작에 참여해 왔다&quot;면서 &quot;하지만 이들도 오늘 오전 9시부터 제작거부에 돌입하기로 했다&quot;고 밝혔다.&lt;br style=&quot;font-size: 10.5pt !important; &quot;&gt;&lt;br style=&quot;font-size: 10.5pt !important; &quot;&gt;이에 따라 김주하 앵커를 비롯해 '뉴스투데이'의 박상권, 현원섭, 신기원 앵커 등이 진행석에서 물러난다. MBC는 이들 대신 아나운서 등을 투입하는 방안을 놓고 검토하고 있다.&amp;nbsp;&lt;br style=&quot;font-size: 10.5pt !important; &quot;&gt;&lt;br style=&quot;font-size: 10.5pt !important; &quot;&gt;비대위는 이날 오전 11시30분 여의도 MBC방송센터 로비에서 피켓 시위를 펼치고 오후에는 총회를 열 예정이다. MBC 노동조합 조합원들도 이날 오전 8시부터 MBC경영센터 10층 임원실 앞 복도에서 피켓 시위를 벌이고 있다.&amp;nbsp;&lt;br style=&quot;font-size: 10.5pt !important; &quot;&gt;&lt;br style=&quot;font-size: 10.5pt !important; &quot;&gt;한편 비대위는 13일 총회 후 발표한 성명에서 &quot;과연 앵커교체가 경쟁력 강화를 위한 것인가? 정치적 압력은 없었는가?&quot;라고 되물으면서 &quot;보도국장조차 지난 7일 보도본부 기별 대표들과의 면담에서 '청와대의 압력이 있다는 것을 나도 안다'고 답변한 바 있다&quot;고 주장했다.&amp;nbsp;&lt;br&gt;&lt;br&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5C7FB0&quot;&gt;청와대 압력이 있었다니.... 언론의 자유는 이미 없어진걸까요???&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/span&gt;&lt;/p&gt;&lt;br&gt;&lt;br&gt;tag : &lt;a href=&quot;/_blog/tagArticleList.do?BLOGID=0EpNI&amp;amp;tagName=mbc&quot; rel=&quot;tag&quot; target=&quot;_blank&quot;&gt;mbc&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;/_blog/tagArticleList.do?BLOGID=0EpNI&amp;amp;tagName=청와대 압력&quot; rel=&quot;tag&quot; target=&quot;_blank&quot;&gt;청와대 압력&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;/_blog/tagArticleList.do?BLOGID=0EpNI&amp;amp;tagName=앵커 교체&quot; rel=&quot;tag&quot; target=&quot;_blank&quot;&gt;앵커 교체&lt;/a&gt;
	    </content>
	    	</entry>
    	<entry>
	    <title>apache tomcat 설치 및 이클립스 세팅</title>
		<link rel="alternate" type="text/html" href="http://blog.daum.net/best_time/12682385"/>
		<id>tag:blog.daum.net,2009:best_time.12682385</id>
	    <author>
		    <name>서니</name>
	    </author>
	    <updated>2009-04-10T17:18:48Z</updated>
	    <published>2009-04-10T17:18:48Z</published>
	    <content type="html">
	    	&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5C7FB0&quot;&gt;1. Tomcat을 설치해보자.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em; &quot;&gt;- http://tomcat.apache.org&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;---- tomcat을 다운 받을 수 있다.&lt;/p&gt;&lt;p style=&quot;margin-left: 4em; &quot;&gt;&lt;br&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em; &quot;&gt;- 파일 압축을 풀어 원하는 위치에 놓고 사용하면 된다.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5C7FB0&quot;&gt;2. 환경변수 만들기&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5C7FB0&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em; &quot;&gt;- 내컴퓨터(우클릭) -&gt; 속성 -&gt; 고급(탭) -&gt; 환경변수&lt;/p&gt;&lt;p style=&quot;margin-left: 4em; &quot;&gt;&lt;br&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em; &quot;&gt;- CATALINA_HOME&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;/&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;C:\apache-tomcat-6.0.18&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5C7FB0&quot;&gt;3. tomcat 서버 실행&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5C7FB0&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em; &quot;&gt;- cmd창에서 'C:\apache-tomcat-6.0.18\bin'로 이동 후&lt;/p&gt;&lt;p style=&quot;margin-left: 4em; &quot;&gt;&lt;br&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em; &quot;&gt;C:\apache-tomcat-6.0.18\bin\catalina start&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#801FBF&quot;&gt;&lt;b&gt;&lt;--- tomcat 실행&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em; &quot;&gt;C:\apache-tomcat-6.0.18\bin\catalina stop&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#801FBF&quot;&gt;&lt;b&gt;&lt;--- tomcat 정지.&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#7293FA&quot;&gt;4. 웹브라우저에서 접근(tomcat 초기화면이 뜸)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#7293FA&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt; - 익스플로러에서  &lt;/p&gt;&lt;p style=&quot;margin-left: 4em; &quot;&gt;http://localhost:8080 &lt;/p&gt;&lt;p style=&quot;margin-left: 4em; &quot;&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#7293FA&quot;&gt;5. 웹브라우저에서 접근 방법 변경.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#7293FA&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em; &quot;&gt;- C:\apache-tomcat-6.0.18\conf\server.xml 파일을 연다.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em; &quot;&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#8E8E8E&quot;&gt;&lt;Connector port=&quot;8080&quot; protocol=&quot;HTTP/1.1&quot; &lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em; &quot;&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#8E8E8E&quot;&gt;               connectionTimeout=&quot;20000&quot; &lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em; &quot;&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#8E8E8E&quot;&gt;               redirectPort=&quot;8443&quot; /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em; &quot;&gt;- 위의 소스 부분을 찾아 port=&quot;8080&quot; 을 port=&quot;80&quot;으로 바꾸어 주면 브라우저에서 &lt;/p&gt;&lt;p style=&quot;margin-left: 4em; &quot;&gt;http://localhost 으로 접근 가능하다.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt; &quot;&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#112A75&quot;&gt;********************이클립스 tomcat 세팅*************************&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;이클립스 실행!&lt;/p&gt;&lt;p&gt;//이클립스 tomcat 환경설정.&lt;/p&gt;&lt;p&gt;- window -&gt; Preferences -&gt; Server(좌측 트리에서) -&gt; Runtime Environments -&gt; Add(우측) 클릭 -&gt; 설치한 Apache Tomcat 버전을 선택&lt;/p&gt;&lt;p&gt;-&gt; Finish(tomcat 환경 설정됨)&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;//Tomcat 구동할 프로젝트 만들기.&lt;/p&gt;&lt;p&gt;- File -&gt; New -&gt; Other -&gt; Server(트리에서) -&gt; Server 선택 -&gt; Next 클릭 -&gt; Finish 클릭(서버 프로젝트가 생성됨)&lt;/p&gt;&lt;p&gt;- 이제 아래 작업창의 Server 탭에서 tomcat을 자유로이 실행하고 멈출 수 있다.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;//서버에 연동시킬 수 있는 프로젝트 만들기.&lt;/p&gt;&lt;p&gt;- File -&gt; New -&gt; Other -&gt; Web -&gt; Dynamic Web Project 선택 -&gt; Next 클릭 -&gt; Project name 입력 -&gt; &lt;/p&gt;&lt;p&gt;Target Runtime에서 New 클릭 -&gt; Tomcat 버전 선택 -&gt; Finish 클릭 -&gt; Next 클릭 -&gt; Context Root 값을 없앰(브라우저에서 접근시 뒤에 아무런 접근 변수 없이 접근하기 위해) -&gt; Finish 클릭(서버에 연동시킬 수 있는 프로젝트가 생성됨)&lt;/p&gt;&lt;p&gt;- 생성된프로젝트 -&gt; WebContent에 JSP파일을 하나 생성한다.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;- 아래 작업창에서 Server 탭을 선택한 후 마우스우클릭을 하면 Add and Remove Projects을 선택해 Server에 프로젝트를 추가 삭제 할 수 있다.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;- 이제 http://localhost/first.jsp 이런 식으로 서버파일에 접근 할 수 있다.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;br&gt;&lt;br&gt;tag : &lt;a href=&quot;/_blog/tagArticleList.do?BLOGID=0EpNI&amp;amp;tagName=tomcat 설치&quot; rel=&quot;tag&quot; target=&quot;_blank&quot;&gt;tomcat 설치&lt;/a&gt;
	    </content>
	    	</entry>
    	<entry>
	    <title>가장 기본적인 태그들</title>
		<link rel="alternate" type="text/html" href="http://blog.daum.net/best_time/12682384"/>
		<id>tag:blog.daum.net,2009:best_time.12682384</id>
	    <author>
		    <name>서니</name>
	    </author>
	    <updated>2009-04-09T14:38:51Z</updated>
	    <published>2009-04-09T14:38:51Z</published>
	    <content type="html">
	    	&lt;p&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(68, 68, 68); font-family: 굴림; font-size: 13px; line-height: 22px; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;br&gt;&lt;br&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: 돋움; font-size: 12px; line-height: 14px; &quot;&gt;&lt;a href=&quot;javascript:void(0);&quot; onclick=&quot;javascript:show_id_layer(this,'ssepal','KIN','109','1722560');&quot; style=&quot;text-decoration: none; &quot;&gt;&lt;a href=&quot;javascript:void(0);&quot; onclick=&quot;javascript:show_id_layer(this,'ssepal','KIN','109','1722560');&quot; style=&quot;text-decoration: none; &quot;&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#E31600&quot;&gt;네이버 지식인 &lt;/font&gt;&lt;/a&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#E31600&quot;&gt;ssepal님 글 발췌.&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt;&lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; width=&quot;460&quot; border=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width=&quot;552&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;#065176&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;◈ 가장 기본적인 태그들&lt;br&gt;&lt;/b&gt;&lt;font face=&quot;돋움&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;black&quot; size=&quot;2&quot;&gt;HTML 문서의 구조는 헤더(Header)와 본문(Body)의 두 개 부분으로 구분할 수 있습니다. 물론 이 두 개의 부분을 구분하는 것도 역시 태그의 역할입니다. 아래의 HTML 문서는 가장 단순한 문서를 예로 보여주고 있습니다.&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;/p&gt;&lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; width=&quot;98%&quot; style=&quot;border-collapse: collapse; &quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;border-right-color: black; border-right-width: 1px; border-right-style: solid; border-top-color: black; border-top-width: 1px; border-top-style: solid; border-left-color: black; border-left-width: 1px; border-left-style: solid; border-bottom-color: black; border-bottom-width: 1px; border-bottom-style: solid; color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;div style=&quot;margin-left: 2em; font-family: 돋움, Dotum, AppleGothic, sans-serif; font-size: 12px; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;&lt;br&gt;&lt;HTML&gt;&lt;br&gt;&lt;HEAD&gt;&lt;br&gt;&lt;TITLE&gt;홈페이지 제목&lt;/TITLE&gt;&lt;br&gt;&lt;/HEAD&gt;&lt;br&gt;&lt;BODY&gt;홈페이지 본문&lt;/BODY&gt;&lt;br&gt;&lt;/HTML&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;#065176&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;&lt;/b&gt;&lt;/font&gt;&lt;/font&gt; &lt;/p&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;#065176&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;▶ &lt;HTML&gt; &lt;/HTML&gt; :&lt;/b&gt;&lt;/font&gt;&lt;/font&gt; &lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;현재 파일이 HTML 문서임을 브라우저에 알려주는 Tag로 HTML 문서 안에서 가장 처음과 끝에 써주어야 합니다. 그러나 대부분의 브라우저에서는 이 태그가 없어도 제대로 인식을 합니다. 그러나 표준을 지키는 의미에서 가급적 사용하도록 합시다.&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font face=&quot;돋움&quot; color=&quot;#065176&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;▶ &lt;HEAD&gt; &lt;/HEAD&gt; :&lt;/b&gt;&lt;/font&gt; &lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;HTML 문서에 대한 일반적인 정보를 표시하는 일종의 머리말로서 실제 브라우저 화면에는 출력되지 않습니다. (이 부분에 자바스크립트, 스타일시트 등의 소스를 넣을 수도 있다.)&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font face=&quot;돋움&quot; color=&quot;#065176&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;▶ &lt;TITLE&gt; &lt;/TITLE&gt; :&lt;/b&gt;&lt;/font&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt; HTML 문서의 제목을 정의하는 곳으로 여기서 쓴 제목은 브라우저의 제목 표시줄에 출력됩니다. (head 속에 포함된다.)&lt;br&gt;&lt;/font&gt;&lt;font face=&quot;돋움&quot; color=&quot;#065176&quot; size=&quot;2&quot;&gt; &lt;br&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;▶ &lt;BODY&gt; &lt;/BODY&gt; :&lt;/b&gt; &lt;/font&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;HTML 문서의 실제적인 내용이 들어가는 곳으로, 브라우저 화면에 곧바로 나타나게 됩니다. 이 태그에는 6개의 속성이 있습니다. (아래의 표를 참조하세요.)&lt;br&gt;&lt;/font&gt;&lt;font face=&quot;돋움&quot; color=&quot;#065176&quot; size=&quot;2&quot;&gt; &lt;/font&gt;&lt;/p&gt;&lt;table bordercolor=&quot;black&quot; width=&quot;98%&quot; border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;center&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;속성&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;center&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;설명&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;center&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;예제&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;center&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;BACKGROUND&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt; 배경 이미지 지정&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt; &lt;body background=&quot;back.gif&quot;&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;center&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;BGCOLOR&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt; 배경색 지정&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt; &lt;body bgcolor=&quot;white&quot;&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;center&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;TEXT&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt; 글자 색 지정&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt; &lt;body text=&quot;black&quot;&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;center&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;LINK&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt; 링크된 글자의 색 지정&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt; &lt;body link=&quot;blue&quot;&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;center&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;VLINK&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt; 방문한 링크 색 지정&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt; &lt;body vlink=&quot;purple&quot;&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;center&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;ALINK&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt; 클릭했을 때 링크 색 지정&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt; &lt;body alink=&quot;red&quot;&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt; &lt;/p&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt; &lt;body background=&quot;back.gif&quot; text=&quot;black&quot; link=&quot;blue&quot; vlink=&quot;purple&quot; alink=&quot;red&quot;&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;br&gt;&lt;/p&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;&lt;/b&gt; &lt;/p&gt;&lt;/font&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;#065176&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;▶ &lt;Hn&gt; &lt;/Hn&gt; :&lt;/b&gt; &lt;/font&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;문서의 제목을 위해 사용되는 것으로 n은 1에서 6까지 총 6가지의 종류가 있습니다.&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;/p&gt;&lt;table bordercolor=&quot;black&quot; cellpadding=&quot;0&quot; width=&quot;98%&quot; border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&quot;middle&quot; bgcolor=&quot;#065176&quot; colspan=&quot;2&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;center&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;예제&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;center&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;&lt;H1&gt; 문서의 제목 &lt;/H1&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;h1 align=&quot;center&quot;&gt;&lt;font face=&quot;돋움&quot;&gt;문서의 제목&lt;/font&gt;&lt;/h1&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;center&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;&lt;H2&gt; 문서의 제목 &lt;/H2&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;h2 align=&quot;center&quot;&gt;&lt;font face=&quot;돋움&quot;&gt;문서의 제목&lt;/font&gt;&lt;/h2&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;center&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;&lt;H3&gt; 문서의 제목 &lt;/H3&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;h3 align=&quot;center&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; font-size: 12px; &quot;&gt;&lt;font face=&quot;돋움&quot;&gt;문서의 제목&lt;/font&gt;&lt;/h3&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;center&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;&lt;H4&gt; 문서의 제목 &lt;/H4&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;h4 align=&quot;center&quot; style=&quot;padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 12px; margin-top: -16px; margin-right: 26px; margin-bottom: 0px; margin-left: 26px; &quot;&gt;&lt;font face=&quot;돋움&quot;&gt;문서의 제목&lt;/font&gt;&lt;/h4&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;center&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;&lt;H5&gt; 문서의 제목 &lt;/H5&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;h5 align=&quot;center&quot;&gt;&lt;font face=&quot;돋움&quot;&gt;문서의 제목&lt;/font&gt;&lt;/h5&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;center&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;&lt;H6&gt; 문서의 제목 &lt;/H6&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;h6 align=&quot;center&quot;&gt;&lt;font face=&quot;돋움&quot;&gt;문서의 제목&lt;/font&gt;&lt;/h6&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;br&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;속성 :&lt;/b&gt; LEFT : &lt;Hn align=&quot;left&quot;&gt;제목&lt;Hn&gt; : 제목을 왼쪽으로 정열합니다.&lt;br&gt;         CENTER : &lt;Hn align=&quot;center&quot;&gt;제목&lt;Hn&gt; : 제목을 가운데 정열합니다.&lt;br&gt;         RIGHT : &lt;Hn align=&quot;right&quot;&gt;제목&lt;Hn&gt; : 제목을 오른쪽으로 정열합니다.&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;#065176&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;&lt;/b&gt;&lt;/font&gt; &lt;/p&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;#065176&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;▶ &lt;P&gt; &lt;/P&gt; :&lt;/b&gt;&lt;/font&gt; &lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;단락이 시작하는 곳이나 단락이 끝나는 곳에 넣어서 단락을 구분하는 역할을 합니다. &lt;P&gt;태그는 &lt;/P&gt;태그를 사용하지 않아도 상관 없다.&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;/p&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;&lt;/font&gt;&lt;table bordercolor=&quot;black&quot; width=&quot;98%&quot; border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;center&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;예제&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;div style=&quot;margin-left: 2em; font-family: 돋움, Dotum, AppleGothic, sans-serif; font-size: 12px; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;&lt;HTML&gt;&lt;br&gt;&lt;HEAD&gt;&lt;br&gt;&lt;TITLE&gt; HTML 단락 테스트&lt;/TITLE&gt;&lt;br&gt;&lt;/HEAD&gt;&lt;br&gt;&lt;BODY&gt;&lt;br&gt;&lt;H2&gt;단락&lt;/H2&gt;&lt;br&gt;&lt;P&gt;첫번째 단락&lt;br&gt;&lt;P&gt;두번째 단락&lt;br&gt;&lt;/BODY&gt;&lt;br&gt;&lt;/HTML&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;&lt;br&gt; &lt;예제 실행화면&gt;&lt;br&gt;&lt;img name=&quot;resize_img_1&quot; onload=&quot;img_auto_resize(1)&quot; onclick=&quot;img_original(1)&quot; height=&quot;231&quot; src=&quot;http://bestfamily.pe.kr/images/html_2_1.gif&quot; width=&quot;458&quot; border=&quot;0&quot; style=&quot;border-width: initial; border-color: initial; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; &quot;&gt;&lt;br&gt;&lt;br&gt;속성 :&lt;/b&gt; LEFT : &lt;p align=&quot;left&quot;&gt;단락&lt;/p&gt; : 단락을 왼쪽으로 정열한다.&lt;br&gt;         CENTER : &lt;p align=&quot;center&quot;&gt;단락&lt;/p&gt; : 단락을 가운데 정열한다.&lt;br&gt;         RIGHT : &lt;p align=&quot;right&quot;&gt;단락&lt;/p&gt; : 단락을 오른쪽으로 정열한다.&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;#065176&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;&lt;/b&gt;&lt;/font&gt; &lt;/p&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;#065176&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;▶ &lt;BR&gt; :&lt;/b&gt;&lt;/font&gt; &lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;문서의 줄을 바꿀 때 이용하는 태그입니다.. (한 줄을 바꿀 때 사용합니다. 두 줄 이상 바꿀 때는 &lt;p&gt;태그를 사용하도록 하세요.)&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;&lt;/font&gt; &lt;/p&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;#065176&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;▶ &lt;CENTER&gt; &lt;/CENTER&gt; :&lt;/b&gt;&lt;/font&gt; &lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;문단을 가운데로 정렬시키는 기능을 합니다. &lt;/CENTER&gt;태그를 만날 때까지 모두 가운데로 정렬됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;#065176&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;▶ &lt;HR&gt; :&lt;/b&gt;&lt;/font&gt; &lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;수평선을 만들어 줍니다.&lt;br&gt;&lt;br&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;속성 :&lt;/b&gt; SIZE, WIDTH, ALIGN=LEFT, CENTER, RIGHT&lt;br&gt; &lt;/font&gt;&lt;/p&gt;&lt;table bordercolor=&quot;black&quot; cellpadding=&quot;0&quot; width=&quot;98%&quot; border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#065176&quot; colspan=&quot;2&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;center&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;SIZE 속성의 변화&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width=&quot;82&quot; bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;&lt;HR SIZE=1&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width=&quot;85%&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;hr size=&quot;1&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width=&quot;82&quot; bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;&lt;HR SIZE=3&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width=&quot;85%&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;hr&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width=&quot;82&quot; bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;&lt;HR SIZE=5&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width=&quot;85%&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;hr size=&quot;5&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;br&gt;&lt;/p&gt;&lt;table bordercolor=&quot;#666666&quot; cellpadding=&quot;0&quot; width=&quot;98%&quot; border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#065176&quot; colspan=&quot;2&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;center&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;NOSHADE :&lt;/b&gt; 속이 찬 수평선을 그려준다.&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width=&quot;142&quot; bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;&lt;HR SIZE=3&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width=&quot;80%&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;hr width=&quot;90%&quot; size=&quot;3&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width=&quot;142&quot; bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;&lt;HR NOSHADE SIZE=3&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width=&quot;80%&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;hr width=&quot;90%&quot; noshade=&quot;&quot; size=&quot;3&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; width=&quot;460&quot; border=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;#065176&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;&lt;/b&gt;&lt;/font&gt; &lt;/p&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;#065176&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;◈ 표 만들기&lt;/b&gt;&lt;font face=&quot;돋움&quot;&gt;&lt;br&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;웹페이지를 만드는데 가장 중요한 요소는 테이블입니다. 테이블에 대한 내용을 배우기 전에 이 사실을 명심하시길 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;#065176&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;&lt;/b&gt;&lt;/font&gt; &lt;/p&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;#065176&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;▶&lt;/b&gt; &lt;b style=&quot;letter-spacing: -1px; &quot;&gt;&lt;TABLE&gt;&lt;/TABLE&gt; :&lt;/b&gt;&lt;/font&gt;&lt;font face=&quot;돋움&quot; color=&quot;black&quot; size=&quot;2&quot;&gt; 이 태그들은 테이블의 영역을 선언하는 태그로서 테이블의 처음과 끝을 지정합니다. 실제로 테이블의 모양을 만드는 태그들은 이 블록의 내부에 포함되어야 합니다.&lt;br&gt; &lt;/font&gt;&lt;/p&gt;&lt;table bordercolor=&quot;black&quot; width=&quot;100%&quot; border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&quot;middle&quot; width=&quot;591&quot; bgcolor=&quot;#065176&quot; colspan=&quot;2&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;&lt;TABLE &gt; 태그의 속성&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;middle&quot; width=&quot;98&quot; bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;BORDER&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td align=&quot;middle&quot; width=&quot;489&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;left&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;표의 테두리를 결정한다. 숫자를 할당하면 해당 숫자의 테두리가 그려진다.&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;middle&quot; width=&quot;98&quot; bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;CELLSPACING&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td align=&quot;middle&quot; width=&quot;489&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;left&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;셀과 셀 사이의 간격을 바꾸고 싶을 때 사용한다.&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;middle&quot; width=&quot;98&quot; bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;CELLPADDING&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td align=&quot;middle&quot; width=&quot;489&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;left&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;셀 내부에서의 간격을 바꾸고 싶을 때 사용한다.&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;middle&quot; width=&quot;98&quot; bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;WIDTH&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td align=&quot;middle&quot; width=&quot;489&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;left&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;가로 넓이를 지정한다.&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;middle&quot; width=&quot;98&quot; bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;HEIGHT&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td align=&quot;middle&quot; width=&quot;489&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;left&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;세로 높이를 지정한다.&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;middle&quot; width=&quot;98&quot; bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;ALIGN&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td align=&quot;middle&quot; width=&quot;489&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;left&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;표의 정렬 방식을 지정한다.&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;#065176&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;&lt;/b&gt;&lt;/font&gt; &lt;/p&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;#065176&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;▶&lt;/b&gt; &lt;b style=&quot;letter-spacing: -1px; &quot;&gt;&lt;TD&gt;&lt;/TD&gt; :&lt;/b&gt;&lt;/font&gt; &lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;테이블의 열을 만듭니다.&lt;br&gt; &lt;/font&gt;&lt;/p&gt;&lt;table bordercolor=&quot;black&quot; width=&quot;100%&quot; border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&quot;middle&quot; width=&quot;591&quot; bgcolor=&quot;#065176&quot; colspan=&quot;2&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;&lt;TD&gt;태그의 속성&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;middle&quot; width=&quot;77&quot; bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;ALIGN&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td align=&quot;middle&quot; width=&quot;510&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;left&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;헤더의 셀에 들어가는 제목의 정렬방식.&lt;br&gt;디폴트값은 CENTER이다.&lt;br&gt;속성: LEFT, RIGHT, CENTER&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;middle&quot; width=&quot;77&quot; bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;VALIGN&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td align=&quot;middle&quot; width=&quot;510&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;left&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;헤더의 셀에 들어가는 제목의 수직정렬방식으로, 네가지 값이 있다.&lt;br&gt;디폴트값은 TOP 이다.&lt;br&gt;속성: TOP, MIDDLE, BOTTOM, BASELINE&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;middle&quot; width=&quot;77&quot; bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;ROWSPAN&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td align=&quot;middle&quot; width=&quot;510&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;left&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;헤더의 셀이 몇개의 행에 걸쳐 있는지를 정하는 곳&lt;br&gt;디폴트값은 1이다.&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;middle&quot; width=&quot;77&quot; bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;COLSPAN&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td align=&quot;middle&quot; width=&quot;510&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;left&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;헤더의 셀이 몇개의 열에 걸쳐 있는지를 정하는 곳&lt;br&gt;디폴트값은 1이다.&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;middle&quot; width=&quot;77&quot; bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;WIDTH&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td align=&quot;middle&quot; width=&quot;510&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;left&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;셀의 가로 넓이를 지정한다.&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;middle&quot; width=&quot;77&quot; bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;HEIGHT&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td align=&quot;middle&quot; width=&quot;510&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;left&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;셀의 세로 높이를 지정한다.&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;middle&quot; width=&quot;77&quot; bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;NOWRAP&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td align=&quot;middle&quot; width=&quot;510&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;left&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;셀의 끝에서 다음 줄로 자동으로 내려가는을 금지한다.&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;#065176&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;&lt;/b&gt;&lt;/font&gt; &lt;/p&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;#065176&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;▶&lt;/b&gt; &lt;b style=&quot;letter-spacing: -1px; &quot;&gt;&lt;TR&gt;&lt;/TR&gt; :&lt;/b&gt;&lt;/font&gt; &lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;테이블의 열을 만듭니다. 이 태그가 나오지 않으면 모든 셀이 한 줄로 나타나게 됩니다.&lt;br&gt; &lt;/font&gt;&lt;/p&gt;&lt;table bordercolor=&quot;black&quot; width=&quot;100%&quot; border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;center&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;예제&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;div style=&quot;margin-left: 2em; font-family: 돋움, Dotum, AppleGothic, sans-serif; font-size: 12px; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;&lt;HTML&gt;&lt;br&gt;&lt;HEAD&gt;&lt;br&gt;&lt;TITLE&gt;복잡한 표 작성 &lt;/TITLE&gt;&lt;br&gt;&lt;/HEAD&gt;&lt;br&gt;&lt;BODY&gt;&lt;br&gt;&lt;table border bordercolor=&quot;#78B0D0&quot;&gt;&lt;br&gt;&lt;tr&gt;&lt;br&gt;&lt;td width=&quot;486&quot; colspan=&quot;5&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/td&gt;&lt;br&gt;&lt;/tr&gt;&lt;br&gt;&lt;tr&gt;&lt;br&gt;&lt;td width=&quot;71&quot; rowspan=&quot;4&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/td&gt;&lt;br&gt;&lt;td width=&quot;101&quot; rowspan=&quot;2&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/td&gt;&lt;br&gt;&lt;td width=&quot;199&quot; colspan=&quot;2&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/td&gt;&lt;br&gt;&lt;td width=&quot;97&quot; rowspan=&quot;2&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/td&gt;&lt;br&gt;&lt;/tr&gt;&lt;br&gt;&lt;tr&gt;&lt;br&gt;&lt;td width=&quot;99&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/td&gt;&lt;br&gt;&lt;td width=&quot;94&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/td&gt;&lt;br&gt;&lt;/tr&gt;&lt;br&gt;&lt;tr&gt;&lt;br&gt;&lt;td width=&quot;101&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/td&gt;&lt;br&gt;&lt;td width=&quot;99&quot; rowspan=&quot;2&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/td&gt;&lt;br&gt;&lt;td width=&quot;94&quot; rowspan=&quot;2&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/td&gt;&lt;br&gt;&lt;td width=&quot;97&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/td&gt;&lt;br&gt;&lt;/tr&gt;&lt;br&gt;&lt;tr&gt;&lt;br&gt;&lt;td width=&quot;101&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/td&gt;&lt;br&gt;&lt;td width=&quot;97&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/td&gt;&lt;br&gt;&lt;/tr&gt;&lt;br&gt;&lt;/table&gt;&lt;br&gt;&lt;/body&gt;&lt;br&gt;&lt;/html&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;&lt;br&gt;&lt;예제 실행 화면&gt;&lt;br&gt;&lt;/b&gt;&lt;/font&gt;&lt;img name=&quot;resize_img_2&quot; onload=&quot;img_auto_resize(2)&quot; onclick=&quot;img_original(2)&quot; height=&quot;239&quot; src=&quot;http://bestfamily.pe.kr/images/html_7_1.gif&quot; width=&quot;458&quot; border=&quot;0&quot; style=&quot;border-width: initial; border-color: initial; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; &quot;&gt;&lt;/p&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;※ 표의 빈칸 처리방법 :&lt;/b&gt; &lt;p&gt;&amp;nbsp;을 셀의 빈칸에 넣어주면 됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;#065176&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;▶&lt;/b&gt; &lt;b style=&quot;letter-spacing: -1px; &quot;&gt;&lt;TH&gt;&lt;/TH&gt; :&lt;/b&gt;&lt;/font&gt; &lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;거의 모든 면에서 &lt;TD&gt;&lt;/TD&gt; 태그와 동일하지만 이 태그로 만들어진 셀은 텍스트가 볼드체로, 중앙 정렬해서 보여준다는 것이 다릅니다..&lt;br&gt; &lt;/font&gt;&lt;/p&gt;&lt;table bordercolor=&quot;black&quot; width=&quot;100%&quot; border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&quot;middle&quot; width=&quot;591&quot; bgcolor=&quot;#065176&quot; colspan=&quot;2&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;&lt;b style=&quot;letter-spacing: -1px; &quot;&gt;&lt;TH&gt;태그의 속성&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;middle&quot; width=&quot;79&quot; bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;ALIGN&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td align=&quot;middle&quot; width=&quot;508&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;left&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;헤더의 셀에 들어가는 제목의 정렬방식.&lt;br&gt;디폴트값은 CENTER이다.&lt;br&gt;속성: LEFT, RIGHT, CENTER&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;middle&quot; width=&quot;79&quot; bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;VALIGN&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td align=&quot;middle&quot; width=&quot;508&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;left&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;헤더의 셀에 들어가는 제목의 수직정렬방식으로, 네가지 값이 있다.&lt;br&gt;디폴트값은 TOP 이다.&lt;br&gt;속성: TOP, MIDDLE, BOTTOM, BASELINE&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;middle&quot; width=&quot;79&quot; bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;ROWSPAN&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td align=&quot;middle&quot; width=&quot;508&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;left&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;헤더의 셀이 몇개의 행에 걸쳐 있는지를 정하는 곳&lt;br&gt;디폴트값은 1이다.&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;middle&quot; width=&quot;79&quot; bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;COLSPAN&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td align=&quot;middle&quot; width=&quot;508&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;left&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;헤더의 셀이 몇개의 열에 걸쳐 있는지를 정하는 곳&lt;br&gt;디폴트값은 1이다.&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;middle&quot; width=&quot;79&quot; bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;WIDTH&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td align=&quot;middle&quot; width=&quot;508&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;left&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;셀의 가로 넓이를 지정한다.&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;middle&quot; width=&quot;79&quot; bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;HEIGHT&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td align=&quot;middle&quot; width=&quot;508&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;left&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;셀의 세로 높이를 지정한다.&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;middle&quot; width=&quot;79&quot; bgcolor=&quot;#065176&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; color=&quot;white&quot; size=&quot;2&quot;&gt;NOWRAP&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;td align=&quot;middle&quot; width=&quot;508&quot; style=&quot;color: rgb(68, 68, 68); font-family: 돋움; font-size: 12px; line-height: 1.3; &quot;&gt;&lt;p align=&quot;left&quot; style=&quot;font-size: 10pt; margin-top: 2px; margin-bottom: 2px; line-height: 1.5; &quot;&gt;&lt;font face=&quot;돋움&quot; size=&quot;2&quot;&gt;셀의 끝에서 다음 줄로 자동으로 내려가는을 금지한다.&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;/span&gt;&lt;/p&gt;&lt;br&gt;&lt;br&gt;tag : &lt;a href=&quot;/_blog/tagArticleList.do?BLOGID=0EpNI&amp;amp;tagName=기본 html&quot; rel=&quot;tag&quot; target=&quot;_blank&quot;&gt;기본 html&lt;/a&gt;
	    </content>
	    	</entry>
      </feed>
