<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>QA Engineer Coding Blog</title>
    <link>https://parksh86.tistory.com/</link>
    <description>QA Engineer Coding Blog!!
QA이지만 자동화와 개발에 관심이 많고 업무에 접목하고 싶어하는 평범한 QA 입니다.</description>
    <language>ko</language>
    <pubDate>Mon, 27 Jul 2026 21:50:17 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>QA Engineer  - P군</managingEditor>
    <image>
      <title>QA Engineer Coding Blog</title>
      <url>https://tistory1.daumcdn.net/tistory/1874973/attach/09f9494d357e4b49a70dce7bdbd08b94</url>
      <link>https://parksh86.tistory.com</link>
    </image>
    <item>
      <title>[C#] Nullalbe 값 형식</title>
      <link>https://parksh86.tistory.com/191</link>
      <description>&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;[C#]&amp;nbsp;Nullalbe&amp;nbsp;값&amp;nbsp;형식&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Null&amp;nbsp;허용&amp;nbsp;값&amp;nbsp;형식&amp;nbsp;T?는&amp;nbsp;기본&amp;nbsp;값&amp;nbsp;형식&amp;nbsp;T의&amp;nbsp;모든&amp;nbsp;값과&amp;nbsp;추가&amp;nbsp;null&amp;nbsp;값을&amp;nbsp;나타냅니다.&amp;nbsp;예를&amp;nbsp;들어&amp;nbsp;bool?&amp;nbsp;변수에는&amp;nbsp;다음&amp;nbsp;세&amp;nbsp;가지&amp;nbsp;값&amp;nbsp;중&amp;nbsp;하나를&amp;nbsp;할당할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;true,&amp;nbsp;false,&amp;nbsp;null.&amp;nbsp;기본&amp;nbsp;값&amp;nbsp;형식&amp;nbsp;T는&amp;nbsp;null&amp;nbsp;허용&amp;nbsp;값&amp;nbsp;형식&amp;nbsp;자체일&amp;nbsp;수&amp;nbsp;없습니다. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Null&amp;nbsp;허용&amp;nbsp;값&amp;nbsp;형식은&amp;nbsp;제네릭&amp;nbsp;System.Nullable&amp;lt;T&amp;gt;&amp;nbsp;구조체의&amp;nbsp;인스턴스입니다.&amp;nbsp;서로&amp;nbsp;교환&amp;nbsp;가능한&amp;nbsp;형식인&amp;nbsp;Nullable&amp;lt;T&amp;gt;&amp;nbsp;또는&amp;nbsp;T?&amp;nbsp;중&amp;nbsp;하나에서&amp;nbsp;기본&amp;nbsp;값&amp;nbsp;형식&amp;nbsp;T의&amp;nbsp;null&amp;nbsp;허용&amp;nbsp;값&amp;nbsp;형식을&amp;nbsp;참조할&amp;nbsp;수&amp;nbsp;있습니다. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;기본 값 형식의 정의되지 않은 값을 표시해야 하는 경우 일반적으로 null 허용 값 형식을 사용합니다. 예를 들어 부울(bool) 변수는 true 또는 false만 가능합니다. 그러나 일부 애플리케이션에서는 변수 값이 정의되지 않았거나 누락될 수 있습니다. 예를 들어 데이터베이스 필드는 true 또는 false를 포함하거나 아무 값도 없을 수 있습니다(즉 NULL). 이러한 시나리오에서 bool? 형식을 사용할 수 있습니다. &lt;a href=&quot;https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/builtin-types/nullable-value-types&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[MSDN]&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1749056077252&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Nullable 값 형식 - C# reference&quot; data-og-description=&quot;C# nullable 값 형식 및 사용 방법 알아보기&quot; data-og-host=&quot;learn.microsoft.com&quot; data-og-source-url=&quot;https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/builtin-types/nullable-value-types&quot; data-og-url=&quot;https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/builtin-types/nullable-value-types&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/760Tm/hyY05olaEb/X3xsevhPUh6AgPMA9h85fK/img.png?width=72&amp;amp;height=72&amp;amp;face=0_0_72_72&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/builtin-types/nullable-value-types&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/builtin-types/nullable-value-types&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/760Tm/hyY05olaEb/X3xsevhPUh6AgPMA9h85fK/img.png?width=72&amp;amp;height=72&amp;amp;face=0_0_72_72');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Nullable 값 형식 - C# reference&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;C# nullable 값 형식 및 사용 방법 알아보기&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;learn.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #333333; text-align: start;&quot;&gt;MSDN에 말을 참고하려고 했으나 말이 매우 어렵습니다...&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;최근 회사에서 그렇고 사용하는 컴파일러가 너무 예전 버전이라 새로운 문법을 따라가기가 너무 힘들게 되었습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;C# 5.0(.Net 4.5.2) 버전을 사용하니 되는 것도 없고 문법도 안쓰다보니 다 까먹어서 문법을 한번 돌아보게 되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;u&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;쉽게 값(변수)에 null 체크가 가능하게 하는 것 입니다.&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;708&quot; data-origin-height=&quot;702&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbbzZW/btsOpKgSoyE/55YtkM9gBRACS7biafT6c0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbbzZW/btsOpKgSoyE/55YtkM9gBRACS7biafT6c0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbbzZW/btsOpKgSoyE/55YtkM9gBRACS7biafT6c0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbbzZW%2FbtsOpKgSoyE%2F55YtkM9gBRACS7biafT6c0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;307&quot; height=&quot;304&quot; data-origin-width=&quot;708&quot; data-origin-height=&quot;702&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;마치 더블유에요? 캐릭터에요? 인티저인가요? 이런 것 같지만 저기에 만약에 값이 안들어 가면 null 이 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;그래서 언제 쓰는건가? &lt;b&gt;HasValue&lt;/b&gt; 을 사용해도 되는데? 아래와 같은 예를 들어서 이해해 보면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;888&quot; data-origin-height=&quot;582&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFIaTg/btsOqeuZcg3/u2XgTpYNtXKKke4ywYZodK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFIaTg/btsOqeuZcg3/u2XgTpYNtXKKke4ywYZodK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFIaTg/btsOqeuZcg3/u2XgTpYNtXKKke4ywYZodK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFIaTg%2FbtsOqeuZcg3%2Fu2XgTpYNtXKKke4ywYZodK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;403&quot; height=&quot;264&quot; data-origin-width=&quot;888&quot; data-origin-height=&quot;582&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;기존대로 쓰면 되는데 그런데 실제로 출생연도가 00년도일 수도 있는데, 그러면 어떻게 되는걸까?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1012&quot; data-origin-height=&quot;902&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFbn9N/btsOpYTFcol/U48cecUPO77XPosLJfxsKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFbn9N/btsOpYTFcol/U48cecUPO77XPosLJfxsKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFbn9N/btsOpYTFcol/U48cecUPO77XPosLJfxsKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFbn9N%2FbtsOpYTFcol%2FU48cecUPO77XPosLJfxsKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;388&quot; height=&quot;346&quot; data-origin-width=&quot;1012&quot; data-origin-height=&quot;902&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;재고가 없는 것과 품절은 다르게 처리하고 싶다면?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1046&quot; data-origin-height=&quot;582&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mozdS/btsOpyVjdf7/UWBgHlZedg6dsnvaRzkkg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mozdS/btsOpyVjdf7/UWBgHlZedg6dsnvaRzkkg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mozdS/btsOpyVjdf7/UWBgHlZedg6dsnvaRzkkg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmozdS%2FbtsOpyVjdf7%2FUWBgHlZedg6dsnvaRzkkg1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;440&quot; height=&quot;245&quot; data-origin-width=&quot;1046&quot; data-origin-height=&quot;582&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;쿠폰이 있고 없고에 따라서 할인을 처리한다면?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;위와 같은 상황에서 &lt;/span&gt;Nullalbe 값 형식을 사용하면 될 것 같습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>프로그래밍/C#</category>
      <category>c#</category>
      <category>nullalbe 값 형식</category>
      <author>QA Engineer  - P군</author>
      <guid isPermaLink="true">https://parksh86.tistory.com/191</guid>
      <comments>https://parksh86.tistory.com/191#entry191comment</comments>
      <pubDate>Thu, 5 Jun 2025 02:06:30 +0900</pubDate>
    </item>
    <item>
      <title>C#으로 이해하는 Python - 클래스 (생성자, 소멸자)</title>
      <link>https://parksh86.tistory.com/190</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;처음 Python에서 클래스를 공부했을때 조금 다른 부분이 있어서 당황했는데 GPT 유료 결제 기념&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;나중에 참고 할 수 있게 C#으로 비교해보면서 다시 복습하는 시간을 가질 수 있게 되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;바로 본론 부터 하면 c#에서는 클래스 하나에서 생성하고 생성자와 소멸자를 설정하면 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #010101; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto; font-size: 9px;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #fafafa; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #e5e5e5;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #666; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%; font-size: 9px;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;2&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;3&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;4&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;5&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;6&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;7&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;8&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;9&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;10&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;11&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;12&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;13&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;14&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;15&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;16&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;17&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;18&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;19&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;20&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;21&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;22&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;23&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;24&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;25&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;26&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;27&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;28&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;29&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;30&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #010101; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px font-size:12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;using&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #066de2;&quot;&gt;System&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;class&lt;/span&gt;&amp;nbsp;MyClass&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;public&lt;/span&gt;&amp;nbsp;MyClass()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #066de2;&quot;&gt;Console&lt;/span&gt;.&lt;span style=&quot;color: #066de2;&quot;&gt;WriteLine&lt;/span&gt;(&lt;span style=&quot;color: #63a35c;&quot;&gt;&quot;Object&amp;nbsp;is&amp;nbsp;created.&quot;&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;~MyClass()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #066de2;&quot;&gt;Console&lt;/span&gt;.&lt;span style=&quot;color: #066de2;&quot;&gt;WriteLine&lt;/span&gt;(&lt;span style=&quot;color: #63a35c;&quot;&gt;&quot;Object&amp;nbsp;is&amp;nbsp;destroyed.&quot;&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;class&lt;/span&gt;&amp;nbsp;Program&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;void&lt;/span&gt;&amp;nbsp;Main()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;using&lt;/span&gt;&amp;nbsp;(MyClass&amp;nbsp;obj&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;new&lt;/span&gt;&amp;nbsp;MyClass())&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #066de2;&quot;&gt;Console&lt;/span&gt;.&lt;span style=&quot;color: #066de2;&quot;&gt;WriteLine&lt;/span&gt;(&lt;span style=&quot;color: #63a35c;&quot;&gt;&quot;Using&amp;nbsp;the&amp;nbsp;object.&quot;&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;color: #999999; font-family: 'Nanum Gothic';&quot;&gt;//&amp;nbsp;---&amp;nbsp;결과&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;color: #999999; font-family: 'Nanum Gothic';&quot;&gt;//&amp;nbsp;Object&amp;nbsp;is&amp;nbsp;created.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;color: #999999; font-family: 'Nanum Gothic';&quot;&gt;//&amp;nbsp;Using&amp;nbsp;the&amp;nbsp;object.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;color: #999999; font-family: 'Nanum Gothic';&quot;&gt;//&amp;nbsp;Object&amp;nbsp;is&amp;nbsp;disposed.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: bottom; padding: 0 2px 4px 0;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;a style=&quot;text-decoration: none; color: white;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: #e5e5e5; color: white; border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;그렇다면 파이썬에서는 생성자와 소멸자를 어떻게 사용할까?&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #010101; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #fafafa; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #e5e5e5;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #666; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;2&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;3&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;4&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;5&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;6&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;7&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;8&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;9&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;10&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;11&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;12&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;13&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;14&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;15&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #010101; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;class&lt;/span&gt;&amp;nbsp;MyClass:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;def&lt;/span&gt;&amp;nbsp;__new__(cls):&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #066de2;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #63a35c;&quot;&gt;&quot;Creating&amp;nbsp;instance&quot;&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #066de2;&quot;&gt;super&lt;/span&gt;().__new__(cls)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;def&lt;/span&gt;&amp;nbsp;__del__(&lt;span style=&quot;color: #066de2;&quot;&gt;self&lt;/span&gt;):&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #066de2;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #63a35c;&quot;&gt;&quot;Object&amp;nbsp;is&amp;nbsp;destroyed.&quot;&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;test&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;=&lt;/span&gt;&amp;nbsp;MyClass()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;del&lt;/span&gt;&amp;nbsp;test&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;color: #999999; font-family: 'Nanum Gothic';&quot;&gt;#&amp;nbsp;---&amp;nbsp;결과&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;color: #999999; font-family: 'Nanum Gothic';&quot;&gt;#&amp;nbsp;Creating&amp;nbsp;instance&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;color: #999999; font-family: 'Nanum Gothic';&quot;&gt;#&amp;nbsp;Initializing&amp;nbsp;instance&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: bottom; padding: 0 2px 4px 0;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;a style=&quot;text-decoration: none; color: white;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: #e5e5e5; color: white; border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;생성자는 _new_ 을 사용하고, 소멸자는 __del__을 사용하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;__init__ 도 있지만 초기화에 사용할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #010101; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #e5e5e5;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #666; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;2&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;3&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;4&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;5&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;6&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;7&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;8&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;9&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;10&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;11&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;12&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;13&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;14&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;15&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;16&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;17&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;18&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;19&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #010101; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;class&lt;/span&gt;&amp;nbsp;MyClass:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;def&lt;/span&gt;&amp;nbsp;__new__(cls):&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #066de2;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #63a35c;&quot;&gt;&quot;Creating&amp;nbsp;instance&quot;&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #066de2;&quot;&gt;super&lt;/span&gt;().__new__(cls)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;def&lt;/span&gt;&amp;nbsp;__init__(&lt;span style=&quot;color: #066de2;&quot;&gt;self&lt;/span&gt;):&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #066de2;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #63a35c;&quot;&gt;&quot;Initializing&amp;nbsp;instance&quot;&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;def&lt;/span&gt;&amp;nbsp;__del__(&lt;span style=&quot;color: #066de2;&quot;&gt;self&lt;/span&gt;):&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #066de2;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #63a35c;&quot;&gt;&quot;Object&amp;nbsp;is&amp;nbsp;destroyed.&quot;&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;test&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;=&lt;/span&gt;&amp;nbsp;MyClass()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;del&lt;/span&gt;&amp;nbsp;test&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;color: #999999; font-family: 'Nanum Gothic';&quot;&gt;#&amp;nbsp;--&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;color: #999999; font-family: 'Nanum Gothic';&quot;&gt;#&amp;nbsp;Creating&amp;nbsp;instance&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;color: #999999; font-family: 'Nanum Gothic';&quot;&gt;#&amp;nbsp;Initializing&amp;nbsp;instance&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%; font-size: 12px;&quot;&gt;&lt;span style=&quot;color: #999999; font-family: 'Nanum Gothic';&quot;&gt;#&amp;nbsp;Object&amp;nbsp;is&amp;nbsp;destroyed.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: bottom; padding: 0 2px 4px 0;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;a style=&quot;text-decoration: none; color: white;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: #e5e5e5; color: white; border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic'; font-size: 0.87em; letter-spacing: 0px;&quot;&gt;초기화 할 때는 &lt;/span&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt;__init__&lt;/span&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt;&amp;nbsp;을 사용하자.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;</description>
      <category>프로그래밍/Python</category>
      <author>QA Engineer  - P군</author>
      <guid isPermaLink="true">https://parksh86.tistory.com/190</guid>
      <comments>https://parksh86.tistory.com/190#entry190comment</comments>
      <pubDate>Wed, 15 Jan 2025 01:33:07 +0900</pubDate>
    </item>
    <item>
      <title>[Unity] ML-Agents 간단 프로젝트 제작 #2</title>
      <link>https://parksh86.tistory.com/185</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1025&quot; data-origin-height=&quot;427&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bilbvP/btsFPeb3T5d/noeeOQWHlj89isPVkXSA3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bilbvP/btsFPeb3T5d/noeeOQWHlj89isPVkXSA3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bilbvP/btsFPeb3T5d/noeeOQWHlj89isPVkXSA3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbilbvP%2FbtsFPeb3T5d%2FnoeeOQWHlj89isPVkXSA3k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;750&quot; height=&quot;312&quot; data-origin-width=&quot;1025&quot; data-origin-height=&quot;427&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이전 포스팅에서는 ML-Agents 관련 스트립트를 작성하였고 프로젝트를 완성해보겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;* 이 포스팅의 내용은 유니티에 대한 어느정도의 지식이 있다고 가정하여 작성하였습니다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;2. 프로젝트에 오브젝트 배치하기&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;화면에 임의의 오브젝트를 아래 스크린샷 같이 배치합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;타겟과 바닥 그리고 벽을 Sprite Renderer로 생성하여 배치해줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;518&quot; data-origin-height=&quot;408&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjHfFy/btsFODXxCzu/QjTTGRIko2mKYHvVB2dRj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjHfFy/btsFODXxCzu/QjTTGRIko2mKYHvVB2dRj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjHfFy/btsFODXxCzu/QjTTGRIko2mKYHvVB2dRj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjHfFy%2FbtsFODXxCzu%2FQjTTGRIko2mKYHvVB2dRj0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;518&quot; height=&quot;408&quot; data-origin-width=&quot;518&quot; data-origin-height=&quot;408&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Nanum Gothic';&quot;&gt;이후 임의의 Agent로 사용할 임의의 빈 오브젝트를 생성하고 작성한 MoveToTargetAgent 스크립트를 추가해줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;394&quot; data-origin-height=&quot;799&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/52zmh/btsFO0ydgrf/uODCx4jQNwhErgLXSKMiik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/52zmh/btsFO0ydgrf/uODCx4jQNwhErgLXSKMiik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/52zmh/btsFO0ydgrf/uODCx4jQNwhErgLXSKMiik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F52zmh%2FbtsFO0ydgrf%2FuODCx4jQNwhErgLXSKMiik%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;394&quot; height=&quot;799&quot; data-origin-width=&quot;394&quot; data-origin-height=&quot;799&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;그럼 Behavior Parameters와 Desicion Requester 스크립트도 자동으로 같이 추가됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;또한 타겟과 충돌 체크에 필요한 Collider와 Rigidbody를 추가하여 줍니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;* 벽으로 사용할 Sprite Renderer에는 Rigidbody없이 Collider만 있으면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;다른 부분은 수정할 필요없이 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;작성했던 OnActionReceived&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;함수와&amp;nbsp;&lt;/span&gt;Heuristic&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;함수에서&lt;/span&gt; ContinuousActions을 2개 지정했기 때문에&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;Actions 항목에에 Continuous Actions만 2로 바꾸어줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이제 게임을 실행시켜서 키보드로 움직여 의도된대로 행동하는지를 확인합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;3. ML-Agents로 학습시키기&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Nanum Gothic';&quot;&gt;가상환경이 설정된 상태에서 아래와 같이 학습 명령어를 CMD창에서 실행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1710434896909&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mlagents-learn --run-id=AI_TEST&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;481&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qPTzo/btsFNo7TG0M/Kcw3GGTPHlnLvepina4jSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qPTzo/btsFNo7TG0M/Kcw3GGTPHlnLvepina4jSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qPTzo/btsFNo7TG0M/Kcw3GGTPHlnLvepina4jSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqPTzo%2FbtsFNo7TG0M%2FKcw3GGTPHlnLvepina4jSK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;960&quot; height=&quot;481&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;481&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;그럼 위와같이 유니티에서 플레이 버튼을 누르라는 화면이 출력됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;그리고 실행하면 학습을 실행합니다. 하지만 하나만 가지고는 학습 데이터가 너무 적습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;ezgif-2-7fad216346.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LtPnE/btsFMLCuPjA/efHWfZg2kfCFIbfa9mOja0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LtPnE/btsFMLCuPjA/efHWfZg2kfCFIbfa9mOja0/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LtPnE/btsFMLCuPjA/efHWfZg2kfCFIbfa9mOja0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/LtPnE/btsFMLCuPjA/efHWfZg2kfCFIbfa9mOja0/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;338&quot; data-filename=&quot;ezgif-2-7fad216346.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;338&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;더 많은 학습을 하기 위해서 해당 오브젝트를 더 복사하고 &lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt; ONNX(Open Neural Network Exchange)를 추가로 설치하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;그러면 결과물이 &lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: left;&quot;&gt; 다양한 딥 러닝 프레임워크 간에 모델 이동, &lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;모델 이식 성능을 최적화하여 다양한 환경에서 딥 러닝 모델을 보다 &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;효율적으로 사용 할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1710435979110&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip install onnx&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;아래와 같이 무작위로 배치를 하고 한번에 학습을 실행시켜 봅시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;다시 학습 명령어를 통해 학습을 실행하면 됩니다. (--force 를 사용하면 덮어쓰게 됩니다.)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;ezgif-2-11f789d3a5.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;327&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1pBf7/btsFMrj2hbP/FZDrcT3nSmtbkJdwvpyQDk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1pBf7/btsFMrj2hbP/FZDrcT3nSmtbkJdwvpyQDk/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1pBf7/btsFMrj2hbP/FZDrcT3nSmtbkJdwvpyQDk/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/1pBf7/btsFMrj2hbP/FZDrcT3nSmtbkJdwvpyQDk/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;327&quot; data-filename=&quot;ezgif-2-11f789d3a5.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;327&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;대략 10만번의 학습을 40초 정도만에 완료한것을 확인 할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;962&quot; data-origin-height=&quot;478&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FuZVs/btsFMz95NVJ/O9XATxd9hfgqZHzbdhM9k0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FuZVs/btsFMz95NVJ/O9XATxd9hfgqZHzbdhM9k0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FuZVs/btsFMz95NVJ/O9XATxd9hfgqZHzbdhM9k0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFuZVs%2FbtsFMz95NVJ%2FO9XATxd9hfgqZHzbdhM9k0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;962&quot; height=&quot;478&quot; data-origin-width=&quot;962&quot; data-origin-height=&quot;478&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;학습된 데이터는 Result 폴더에 저장됩니다. 이제 해당 파일을 유니티 프로젝트 내에 추가하고 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Behavior Parameters에 Model에 추가해줍니다.&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;384&quot; data-origin-height=&quot;217&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bL7Ngn/btsFOlJuSXZ/gqlLc2fzkJsKQ2OKPrG8m0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bL7Ngn/btsFOlJuSXZ/gqlLc2fzkJsKQ2OKPrG8m0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bL7Ngn/btsFOlJuSXZ/gqlLc2fzkJsKQ2OKPrG8m0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbL7Ngn%2FbtsFOlJuSXZ%2FgqlLc2fzkJsKQ2OKPrG8m0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;384&quot; height=&quot;217&quot; data-origin-width=&quot;384&quot; data-origin-height=&quot;217&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt;이후 엔진에서 게임을 실행하면 학습된 데이터를 기반으로 움직이는 것을 확인 할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;ezgif-2-6f3888b8ec.gif&quot; data-origin-width=&quot;532&quot; data-origin-height=&quot;316&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/84NdL/btsFPbGq0hI/sMZPx0kiWI8os6QfM0dtO0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/84NdL/btsFPbGq0hI/sMZPx0kiWI8os6QfM0dtO0/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/84NdL/btsFPbGq0hI/sMZPx0kiWI8os6QfM0dtO0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/84NdL/btsFPbGq0hI/sMZPx0kiWI8os6QfM0dtO0/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;532&quot; height=&quot;316&quot; data-filename=&quot;ezgif-2-6f3888b8ec.gif&quot; data-origin-width=&quot;532&quot; data-origin-height=&quot;316&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;다음 포스팅에서는 다른 학습방법과 각 함수와 값을 보다 자세히 알아보겠습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>AI/ML-Agents</category>
      <category>ML-Agents</category>
      <author>QA Engineer  - P군</author>
      <guid isPermaLink="true">https://parksh86.tistory.com/185</guid>
      <comments>https://parksh86.tistory.com/185#entry185comment</comments>
      <pubDate>Tue, 27 Feb 2024 21:02:15 +0900</pubDate>
    </item>
    <item>
      <title>[Unity] ML-Agents 간단 프로젝트 제작 #1</title>
      <link>https://parksh86.tistory.com/184</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1025&quot; data-origin-height=&quot;427&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GD2LP/btsFOWCJWKh/xrA5EcFURB1DHz6flfRj3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GD2LP/btsFOWCJWKh/xrA5EcFURB1DHz6flfRj3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GD2LP/btsFOWCJWKh/xrA5EcFURB1DHz6flfRj3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGD2LP%2FbtsFOWCJWKh%2FxrA5EcFURB1DHz6flfRj3K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;750&quot; height=&quot;312&quot; data-origin-width=&quot;1025&quot; data-origin-height=&quot;427&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이전 포스팅에서는 ML-Agents 설치 및 세팅을 진행하였고 이제 간단한 Move To Target 프로젝트를 제작해보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;1. Agent 스크립트 만들기&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;프로젝트 안에 Agent용으로 사용할 임의의 스크립트 파일을 1개 생성합니다. (예 : MoveToTargetAgent)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;그리고 해당 클래스의 상속 받는 클래스를 MonoBehaviour에서 Agent로 변경하고 목표로할 대상의 Transform 하나를 선언해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;실패와 성공을 표시해주는 바닥의 SpriteRenderer 도 하나 선언해줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1710429557181&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using UnityEngine;
using Unity.MLAgents;
using Unity.MLAgents.Actuators;
using Unity.MLAgents.Sensors;

public class MoveToTargetAgent : Agent
{
  [SerializeField] private Transform target;
  [SerializeField] private SpriteRenderer backGroeund;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;- &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;OnActionReceived&lt;span&gt; 함수 작성&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;우선 에이전트를 제어할 수 있는 OnActionReceived 함수를 오버라이드해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;우선 행동 정보(입력 정보)를 액션 정보로 저장해줘야 합니다. 실제 움직이는 것을 가정하여 ActionBuffers를 구현해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;제작하려는 프로젝트는 2D프로젝트로 X축, Y축으로 움직이기 때문에 2개를 지정해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;그리고 기본적으로 움직이는 함수를 작성해줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1710430218291&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; public override void OnActionReceived(ActionBuffers actions)
{
    float moveX = actions.ContinuousActions[0]; // X축으로 움직이는 값
    float moveY = actions.ContinuousActions[1]; // Y축으로 움직이는 값

    float moveMentSpeed = 5f; // 이동 스피드

    transform.localPosition += new Vector3(moveX, moveY) * Time.deltaTime * moveMentSpeed;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;- Heuristic 함수 작성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;Heuristic 함수는 사용자의 의사 결정 로직을 제공하거나 입력 또는 스크립트를 사용하여 에이전트의 수동제어하기 위한 함수 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;위에서 제작한 OnActionReceived 함수에서 사용되는 것과 동일하게 작성하면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1710431145772&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public override void Heuristic(in ActionBuffers actionsOut)
{
    ActionSegment&amp;lt;float&amp;gt; continuousActions = actionsOut.ContinuousActions;

    continuousActions[0] = Input.GetAxisRaw(&quot;Horizontal&quot;); //Horizontal
    continuousActions[1] = Input.GetAxisRaw(&quot;Vertical&quot;); //Vertical
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;* &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;모방 학습을 수행하려면 Heuristic() 함수에서 에이전트의 수동 제어를 구현하여 모방 학습 알고리즘에 필요한 데모를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;Demonstration Recorder를 통해 기록할 수 있도있지만 이번 포스팅에서는 해당 항목을 제외합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;- CollectObservations 함수 작성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;CollectObservations&lt;span&gt; 함수는 에이전트가 목표를 달성하는 데 도움이 되는 모든 환경 정보를 전달합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;예를 들어, 전투 중인 아군 또는 적과의 거리 또는 현재 사용 가능한 탄약 수준이 관찰 대상에 포함될 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1710431864913&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public override void CollectObservations(VectorSensor sensor)
{
    sensor.AddObservation((Vector2)transform.localPosition); // 자기 자신 관찰
    sensor.AddObservation((Vector2)target.localPosition); // 타겟 관찰
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;- OnEpisodeBegin 함수 작성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;OnEpisodeBegin 함수는 각 에피소드가 시작할 때 마다 호출되는 함수로 초기화하는 정보를 담습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;타겟이 랜덤으로 나와야 하기 때문에 여기서 랜덤함수를 써서 매번 다른 곳에 출현하도록 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1710432104989&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public override void OnEpisodeBegin()
{
    transform.localPosition = new Vector3(Random.Range(-3.5f, 1.5f), Random.Range(-3.5f, 3.5f));
    target.localPosition = new Vector3(Random.Range(1.5f, 3.5f), Random.Range(-3.5f, 3.5f));
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;- OnTriggerEnter2D 충돌 로직 작성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;대상에게 다가갔을때는 보상을 주고 벽에 다가갔을때는 점수를 차감해서 Agent 에게 보상에 따라 학습할 수 있도록 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;또한 해당 보상을 획득하면 에피소드를 끝내고 다시 시작할 수 있도록 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1710432940171&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;private void OnTriggerEnter2D(Collider2D collision)
{
    if(collision.TryGetComponent(out Target target))
    {
        AddReward(10);
        backGroeund.color = Color.green;
        EndEpisode();
    }
    else if(collision.TryGetComponent(out Wall wall))
    {
        AddReward(-2f);
        backGroeund.color = Color.red;
        EndEpisode();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>AI/ML-Agents</category>
      <category>ML-Agents</category>
      <author>QA Engineer  - P군</author>
      <guid isPermaLink="true">https://parksh86.tistory.com/184</guid>
      <comments>https://parksh86.tistory.com/184#entry184comment</comments>
      <pubDate>Tue, 27 Feb 2024 21:02:04 +0900</pubDate>
    </item>
    <item>
      <title>[Unity] ML-Agents 설치 및 세팅</title>
      <link>https://parksh86.tistory.com/183</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1025&quot; data-origin-height=&quot;427&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwlEz0/btsFOkDPKzI/JYs0lz77yBDvIIWHi1Ycm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwlEz0/btsFOkDPKzI/JYs0lz77yBDvIIWHi1Ycm0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwlEz0/btsFOkDPKzI/JYs0lz77yBDvIIWHi1Ycm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwlEz0%2FbtsFOkDPKzI%2FJYs0lz77yBDvIIWHi1Ycm0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;750&quot; height=&quot;312&quot; data-origin-width=&quot;1025&quot; data-origin-height=&quot;427&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1. Python 설치&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;우선 파이썬을 설치해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt;아래 링크에서 파이썬을 설치합니다. 버전은 3.9.13을 설치합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;a href=&quot;https://www.python.org/downloads/release/python-3913/&quot;&gt;https://www.python.org/downloads/release/python-3913/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1710264805984&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Python Release Python 3.9.13&quot; data-og-description=&quot;The official home of the Python Programming Language&quot; data-og-host=&quot;www.python.org&quot; data-og-source-url=&quot;https://www.python.org/downloads/release/python-3913/&quot; data-og-url=&quot;https://www.python.org/downloads/release/python-3913/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/clgNZP/hyVAHP1Csf/GMBkUjVHwOiNCWaOh7JF8K/img.png?width=200&amp;amp;height=200&amp;amp;face=0_0_200_200&quot;&gt;&lt;a href=&quot;https://www.python.org/downloads/release/python-3913/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.python.org/downloads/release/python-3913/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/clgNZP/hyVAHP1Csf/GMBkUjVHwOiNCWaOh7JF8K/img.png?width=200&amp;amp;height=200&amp;amp;face=0_0_200_200');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Python Release Python 3.9.13&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The official home of the Python Programming Language&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.python.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;2. &lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;Python&lt;/span&gt; venv &amp;mdash; 가상 환경 생성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;해당 기능을 사용하면 기본 Python 환경의 패키지와 분리되어 개발 할 수 있고 실행되는 가상 환경에서 명시적으로 설치된 패키지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;사용할 수 있습니다.&amp;nbsp;아래 링크에서 자세한 설명을 확인 할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;a href=&quot;https://docs.python.org/3/library/venv.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.python.org/3/library/venv.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1710264797986&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;venv &amp;mdash; Creation of virtual environments&quot; data-og-description=&quot;Source code: Lib/venv/ The venv module supports creating lightweight &amp;ldquo;virtual environments&amp;rdquo;, each with their own independent set of Python packages installed in their site directories. A virtual en...&quot; data-og-host=&quot;docs.python.org&quot; data-og-source-url=&quot;https://docs.python.org/3/library/venv.html&quot; data-og-url=&quot;https://docs.python.org/3/library/venv.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/U14Wm/hyVxuY5G4u/3KhowtKeJ3yU0cwOox69K0/img.png?width=200&amp;amp;height=200&amp;amp;face=0_0_200_200&quot;&gt;&lt;a href=&quot;https://docs.python.org/3/library/venv.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.python.org/3/library/venv.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/U14Wm/hyVxuY5G4u/3KhowtKeJ3yU0cwOox69K0/img.png?width=200&amp;amp;height=200&amp;amp;face=0_0_200_200');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;venv &amp;mdash; Creation of virtual environments&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Source code: Lib/venv/ The venv module supports creating lightweight &amp;ldquo;virtual environments&amp;rdquo;, each with their own independent set of Python packages installed in their site directories. A virtual en...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.python.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이미 &lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;Python을 통해서 작업하고 있는 내용이 있다면 해당 기능을 사용하여 ML-Agent만을 작업하는 공간으로 활용할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;생성된 유니티 폴더로가서 해당 명령어를 실행하여 줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1710264300114&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;py -3.9 -m venv venv (기존 파이썬 버전이 중복으로 설치되어 있을 경우)
python -m venu venu&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;명령어에 성공하면 아래와 같이 프로젝트 폴더에 venv 폴더가 생성됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;668&quot; data-origin-height=&quot;287&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pz6gK/btsFK6SY6Pu/UdE4nSKdYHmNwBCDFvsK5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pz6gK/btsFK6SY6Pu/UdE4nSKdYHmNwBCDFvsK5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pz6gK/btsFK6SY6Pu/UdE4nSKdYHmNwBCDFvsK5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpz6gK%2FbtsFK6SY6Pu%2FUdE4nSKdYHmNwBCDFvsK5K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;668&quot; height=&quot;287&quot; data-origin-width=&quot;668&quot; data-origin-height=&quot;287&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;3.&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;가상 환경 환경에서 ML Agents 관련 사항 설치&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;우선 아래와 같이 가상환경을 실행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1710264613824&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;venv\Scripts\activate&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이후 아래 순서로 ML Agents와 관련 사항을 설치합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1710264737455&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python -m pip install --upgrade pip&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1710264777364&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip install mlagents&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1710264895980&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip install torch torchvision torchaudio&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1710264963349&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip install protobuf==3.20.3&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;마지막으로 정상적으로 설치되었는지 기본 명령어를 실행해봅니다.&lt;/p&gt;
&lt;pre id=&quot;code_1710265019855&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mlagents-learn -h&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;4. Unity 프로젝트에서&lt;/span&gt; ML Agents 패키지 설치&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;Window &amp;gt; Pacakge Manager &amp;gt; Package : Unity Registry &amp;gt; ML Agents 항목을 설치합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;796&quot; data-origin-height=&quot;302&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wW1ZI/btsFJ6MKHW5/cvE6WpoHRrEmstdJ6hgZr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wW1ZI/btsFJ6MKHW5/cvE6WpoHRrEmstdJ6hgZr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wW1ZI/btsFJ6MKHW5/cvE6WpoHRrEmstdJ6hgZr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwW1ZI%2FbtsFJ6MKHW5%2FcvE6WpoHRrEmstdJ6hgZr0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;796&quot; height=&quot;302&quot; data-origin-width=&quot;796&quot; data-origin-height=&quot;302&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이제 ML Agents를 실행할 모든 준비가 끝났습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;간단한 프로젝트를 시작해보겠습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>AI/ML-Agents</category>
      <category>ML-Agents</category>
      <author>QA Engineer  - P군</author>
      <guid isPermaLink="true">https://parksh86.tistory.com/183</guid>
      <comments>https://parksh86.tistory.com/183#entry183comment</comments>
      <pubDate>Tue, 27 Feb 2024 21:01:50 +0900</pubDate>
    </item>
    <item>
      <title>Project Ant - apk, ipa 정보 확인 툴</title>
      <link>https://parksh86.tistory.com/182</link>
      <description>&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;PROJECT - ANT&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;531&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ux6be/btsdZ34VVOo/e5tnBX6QigL49H3WyPls31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ux6be/btsdZ34VVOo/e5tnBX6QigL49H3WyPls31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ux6be/btsdZ34VVOo/e5tnBX6QigL49H3WyPls31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUx6be%2FbtsdZ34VVOo%2Fe5tnBX6QigL49H3WyPls31%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;456&quot; height=&quot;307&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;531&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;Project Ant는 기존에 개인적으로 WPF로 개발했던 Project ALPACA를 Windows Form으로 컨버팅한 프로그램입니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;제작 툴 :&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;SharpDevelop 5.1&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;사용 언어 :&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;C# (NetFramework 4.5)&lt;/span&gt;&lt;br /&gt;&lt;b&gt;개발&amp;nbsp;환경&amp;nbsp;:&amp;nbsp;&lt;/b&gt;SharpDevelop&amp;nbsp;5.1&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;핵심 기능 :&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;apk 파일 정보 확인, ipa 정보 확인, 정책 적용 확인, 앱 파일DIFF&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;br /&gt;&lt;a href=&quot;https://parksh86.tistory.com/173&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[링크]&amp;nbsp;Project&amp;nbsp;ALPACA&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1683456177766&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;PROJECT - A  (ALPACA) - apk, ipa 정보 확인 툴&quot; data-og-description=&quot;PROJECT - A (ALPACA) 이전 회사에서 근무할때 먼저 입사한 리더님의 권유로 만들게 된 툴 입니다. 테스트할때 사용할 수 있는 툴을 외부에만 의존해야하는 말도안되는 현실이 원동력이 되어 만들게 &quot; data-og-host=&quot;parksh86.tistory.com&quot; data-og-source-url=&quot;https://parksh86.tistory.com/173&quot; data-og-url=&quot;https://parksh86.tistory.com/173&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/o2Enm/hySypLxZDE/P8LRkz5146Cjki0KplVoZk/img.png?width=800&amp;amp;height=733&amp;amp;face=0_0_800_733,https://scrap.kakaocdn.net/dn/pNreg/hySwSV7gbQ/X1bKBu3AZCrkDhb9ClB2Ck/img.png?width=800&amp;amp;height=733&amp;amp;face=0_0_800_733,https://scrap.kakaocdn.net/dn/buwRcD/hySygOBKKn/DVKJFuxtVMmYu7KQvRBgy1/img.png?width=950&amp;amp;height=871&amp;amp;face=0_0_950_871&quot;&gt;&lt;a href=&quot;https://parksh86.tistory.com/173&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://parksh86.tistory.com/173&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/o2Enm/hySypLxZDE/P8LRkz5146Cjki0KplVoZk/img.png?width=800&amp;amp;height=733&amp;amp;face=0_0_800_733,https://scrap.kakaocdn.net/dn/pNreg/hySwSV7gbQ/X1bKBu3AZCrkDhb9ClB2Ck/img.png?width=800&amp;amp;height=733&amp;amp;face=0_0_800_733,https://scrap.kakaocdn.net/dn/buwRcD/hySygOBKKn/DVKJFuxtVMmYu7KQvRBgy1/img.png?width=950&amp;amp;height=871&amp;amp;face=0_0_950_871');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;PROJECT - A (ALPACA) - apk, ipa 정보 확인 툴&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;PROJECT - A (ALPACA) 이전 회사에서 근무할때 먼저 입사한 리더님의 권유로 만들게 된 툴 입니다. 테스트할때 사용할 수 있는 툴을 외부에만 의존해야하는 말도안되는 현실이 원동력이 되어 만들게&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;parksh86.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;기존에 작업했던 코드를 최적화 하고 만든 지 오래되어 동작하지 않거나 오작동 되는 부분이 발생하여&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;라이브러리를 교체하고 그 동안 더 공부한 지식을 활용하여 코드 최적화를 진행하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;원하는 기능들을 찾으면 그대로 나와있는 무한의 인터넷 시대에 안되는건 없는 것 같습니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #1a5490; text-align: start;&quot;&gt;수 많은 기능들을 미리 제작해 놓으시고 흔쾌히 공개를 해 놓으신 많은 프로그래머 분들에 지식에 다시 한번 &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;경외심과 감사함을 느낍니다. 저는 아직 먼 것 같습니다. ㅠ&lt;/span&gt;ㅁㅠ&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;|&amp;nbsp;APK&amp;nbsp;File&amp;nbsp;탭&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;APK 파일에 대한 기본 정보를 볼 수 있도록 해줍니다.&lt;br /&gt;주로 &amp;lsquo;AndroidManifest.xml&amp;rsquo; 파일에서 정보를 불러오며 표시해줍니다. &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;lsquo;AndroidManifest.xml&amp;rsquo;&lt;span&gt; 만으로는 APK의 모든 정보를&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;파악하기 어렵고 &lt;/span&gt;&lt;/span&gt;라이브러리, 함수 호출 등의 세부 정보를 추가해줘야 쓸모가 있을 것 같아 해당 부분은 연구 중 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;531&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cIiLrI/btsd5ZmDdB6/b7kEVj4psd5zGO8p5t6RUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cIiLrI/btsd5ZmDdB6/b7kEVj4psd5zGO8p5t6RUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cIiLrI/btsd5ZmDdB6/b7kEVj4psd5zGO8p5t6RUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcIiLrI%2Fbtsd5ZmDdB6%2Fb7kEVj4psd5zGO8p5t6RUk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;788&quot; height=&quot;531&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;531&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;AndroidManifest.xml 복호화 기능&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;841&quot; data-origin-height=&quot;577&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfP7co/btseh8we1ek/JSnQp2XMI2cm9A3KbmMwzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfP7co/btseh8we1ek/JSnQp2XMI2cm9A3KbmMwzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfP7co/btseh8we1ek/JSnQp2XMI2cm9A3KbmMwzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfP7co%2Fbtseh8we1ek%2FJSnQp2XMI2cm9A3KbmMwzK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;841&quot; height=&quot;577&quot; data-origin-width=&quot;841&quot; data-origin-height=&quot;577&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;AndroidManifest.xml 파일을 복호화 하여 확인 할 수 있는 기능입니다.&lt;br /&gt;따로&amp;nbsp;툴이&amp;nbsp;없이도&amp;nbsp;바로&amp;nbsp;확인&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;것이&amp;nbsp;장점&amp;nbsp;입니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;b&gt;복호화&amp;nbsp;전&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;b&gt;복호화&amp;nbsp;후&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;632&quot; data-origin-height=&quot;315&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqzXoJ/btsdZO1donL/6H2KzdSM1r6rJHBczMZkY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqzXoJ/btsdZO1donL/6H2KzdSM1r6rJHBczMZkY0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqzXoJ/btsdZO1donL/6H2KzdSM1r6rJHBczMZkY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqzXoJ%2FbtsdZO1donL%2F6H2KzdSM1r6rJHBczMZkY0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;632&quot; height=&quot;315&quot; data-origin-width=&quot;632&quot; data-origin-height=&quot;315&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;767&quot; data-origin-height=&quot;411&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3WMyN/btsdZ4QjKhv/SXg3GosEhKCBQlnBTCLZd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3WMyN/btsdZ4QjKhv/SXg3GosEhKCBQlnBTCLZd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3WMyN/btsdZ4QjKhv/SXg3GosEhKCBQlnBTCLZd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3WMyN%2FbtsdZ4QjKhv%2FSXg3GosEhKCBQlnBTCLZd0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;767&quot; height=&quot;411&quot; data-origin-width=&quot;767&quot; data-origin-height=&quot;411&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;|&amp;nbsp;iOS&amp;nbsp;File&amp;nbsp;탭&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;IPA 파일에 대한 기본 정보를 볼 수 있도록 해줍니다.&lt;br /&gt;주로 &amp;lsquo;Info.plist&amp;rsquo; 파일에서 정보를 불러오며 세부적인 앱 정보 자체를 확인하기 위한 작업을 진행 중 입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;531&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MjRPY/btselSfFsUd/CdW65YVODkBZVzo7bhrI10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MjRPY/btselSfFsUd/CdW65YVODkBZVzo7bhrI10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MjRPY/btselSfFsUd/CdW65YVODkBZVzo7bhrI10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMjRPY%2FbtselSfFsUd%2FCdW65YVODkBZVzo7bhrI10%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;788&quot; height=&quot;531&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;531&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;Info.plist&amp;nbsp;복호화&amp;nbsp;기능&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;Info.plist 파일을 복호화 하여 확인 할 수 있는 기능입니다.&lt;br /&gt;따로&amp;nbsp;다른&amp;nbsp;작업이&amp;nbsp;없이도&amp;nbsp;바로&amp;nbsp;확인&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;것이&amp;nbsp;장점&amp;nbsp;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;복호화&amp;nbsp;전&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;복호화&amp;nbsp;후&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;673&quot; data-origin-height=&quot;246&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tOcrH/btsd0uuuPWU/hceN4W5m4DCGmkKmJtkUyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tOcrH/btsd0uuuPWU/hceN4W5m4DCGmkKmJtkUyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tOcrH/btsd0uuuPWU/hceN4W5m4DCGmkKmJtkUyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtOcrH%2Fbtsd0uuuPWU%2FhceN4W5m4DCGmkKmJtkUyK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;673&quot; height=&quot;246&quot; data-origin-width=&quot;673&quot; data-origin-height=&quot;246&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;636&quot; data-origin-height=&quot;195&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chGIuQ/btsd15nuYg3/mvPDDMfIyi5CB6KTnlTE7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chGIuQ/btsd15nuYg3/mvPDDMfIyi5CB6KTnlTE7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chGIuQ/btsd15nuYg3/mvPDDMfIyi5CB6KTnlTE7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchGIuQ%2Fbtsd15nuYg3%2FmvPDDMfIyi5CB6KTnlTE7K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;636&quot; height=&quot;195&quot; data-origin-width=&quot;636&quot; data-origin-height=&quot;195&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;XMl 형식으로는 바로 보기가 어렵기 때문에 별도의 커스텀된 내용으로 보여주도록 작업되었습니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;Project&amp;nbsp;Ant&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;3utools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;294&quot; data-origin-height=&quot;573&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bq3pIv/btsd1hV71T9/timLoWsBYxRXHGVh6x449k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bq3pIv/btsd1hV71T9/timLoWsBYxRXHGVh6x449k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bq3pIv/btsd1hV71T9/timLoWsBYxRXHGVh6x449k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbq3pIv%2Fbtsd1hV71T9%2FtimLoWsBYxRXHGVh6x449k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;214&quot; height=&quot;417&quot; data-origin-width=&quot;294&quot; data-origin-height=&quot;573&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;312&quot; data-origin-height=&quot;559&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bazNnF/btselQWsko8/p3T2PCROwPS6VFedKvihT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bazNnF/btselQWsko8/p3T2PCROwPS6VFedKvihT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bazNnF/btselQWsko8/p3T2PCROwPS6VFedKvihT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbazNnF%2FbtselQWsko8%2Fp3T2PCROwPS6VFedKvihT0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;215&quot; height=&quot;385&quot; data-origin-width=&quot;312&quot; data-origin-height=&quot;559&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;Icon&amp;nbsp;확인&amp;nbsp;기능&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;IPA의 아이콘 파일 목록을 작성하고 해당 목록에 있는 아이콘이 있는지 여부 또한 확인 할 수 있습니다.&lt;br /&gt;특히 따로 다른 작업이 없이도 바로 확인 할 수 있는 것이 장점 입니다.&lt;br /&gt;또한&amp;nbsp;iOS전용&amp;nbsp;CGBI&amp;nbsp;포맷을&amp;nbsp;원본으로&amp;nbsp;볼&amp;nbsp;수&amp;nbsp;있다는&amp;nbsp;장점이&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;718&quot; data-origin-height=&quot;573&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XEUOY/btsd3eLEoA4/lrYeuIn07UQxBbKAFn6T8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XEUOY/btsd3eLEoA4/lrYeuIn07UQxBbKAFn6T8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XEUOY/btsd3eLEoA4/lrYeuIn07UQxBbKAFn6T8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXEUOY%2Fbtsd3eLEoA4%2FlrYeuIn07UQxBbKAFn6T8k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;548&quot; height=&quot;437&quot; data-origin-width=&quot;718&quot; data-origin-height=&quot;573&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;CgBI 파일 형식은 Apple의 독점 확장 PNG 이미지 형식입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;a href=&quot;https://iphonedevwiki.net/index.php/CgBI_file_format&quot;&gt;https://iphonedevwiki.net/index.php/CgBI_file_format&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1683467063454&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;CgBI file format - iPhone Development Wiki&quot; data-og-description=&quot;The CgBI file format, thus named for its extra header, is Apple's proprietary extension to the PNG[1] image format. Differences from PNG These modifications cause the generated images to be invalid as per the current version of the PNG standard. extra crit&quot; data-og-host=&quot;iphonedevwiki.net&quot; data-og-source-url=&quot;https://iphonedevwiki.net/index.php/CgBI_file_format&quot; data-og-url=&quot;https://iphonedevwiki.net/index.php/CgBI_file_format&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://iphonedevwiki.net/index.php/CgBI_file_format&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://iphonedevwiki.net/index.php/CgBI_file_format&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;CgBI file format - iPhone Development Wiki&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The CgBI file format, thus named for its extra header, is Apple's proprietary extension to the PNG[1] image format. Differences from PNG These modifications cause the generated images to be invalid as per the current version of the PNG standard. extra crit&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;iphonedevwiki.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;table style=&quot;border-collapse: collapse; width: 49.186%; height: 184px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 44px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 44px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;일반&amp;nbsp;압축&amp;nbsp;풀기&amp;nbsp;또는&amp;nbsp;윈도우에서&amp;nbsp;열었을때&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 44px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;CGBI&amp;nbsp;포맷의&amp;nbsp;png를&amp;nbsp;윈도우용으로&amp;nbsp;컨버팅&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 140px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 140px;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;120&quot; data-origin-height=&quot;120&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMr01Z/btsd9dygygY/1uWws3EO5nw3qTIHzqJP01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMr01Z/btsd9dygygY/1uWws3EO5nw3qTIHzqJP01/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMr01Z/btsd9dygygY/1uWws3EO5nw3qTIHzqJP01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMr01Z%2Fbtsd9dygygY%2F1uWws3EO5nw3qTIHzqJP01%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;120&quot; height=&quot;120&quot; data-origin-width=&quot;120&quot; data-origin-height=&quot;120&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 140px;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;120&quot; data-origin-height=&quot;120&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cXT6yo/btsd9eDUb6Y/bu0OVPu5muBCHGKkfDE6y1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cXT6yo/btsd9eDUb6Y/bu0OVPu5muBCHGKkfDE6y1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cXT6yo/btsd9eDUb6Y/bu0OVPu5muBCHGKkfDE6y1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcXT6yo%2Fbtsd9eDUb6Y%2Fbu0OVPu5muBCHGKkfDE6y1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;120&quot; height=&quot;120&quot; data-origin-width=&quot;120&quot; data-origin-height=&quot;120&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;|&amp;nbsp;Report&amp;nbsp;탭&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;2개의&amp;nbsp;파일을&amp;nbsp;비교하여&amp;nbsp;Diff를&amp;nbsp;해주고&amp;nbsp;해당&amp;nbsp;결과를&amp;nbsp;보고서&amp;nbsp;양식으로&amp;nbsp;작성하여&amp;nbsp;슬랙이나&amp;nbsp;이메일로&amp;nbsp;확인할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;기능입니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;531&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DlUdJ/btsd14WrEOS/wdD9hibinjAzLY4aOlpE7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DlUdJ/btsd14WrEOS/wdD9hibinjAzLY4aOlpE7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DlUdJ/btsd14WrEOS/wdD9hibinjAzLY4aOlpE7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDlUdJ%2Fbtsd14WrEOS%2FwdD9hibinjAzLY4aOlpE7k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;788&quot; height=&quot;531&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;531&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;br /&gt;&lt;b&gt;APK DIFF&lt;/b&gt;&lt;br /&gt;2개의 서로 다른 빌드를 비교하여 표시해줍니다.&lt;br /&gt;변경되거나 다른 부분이 있다면 좌측 APK를 기준으로 우측 정보에 표시해줍니다.&lt;br /&gt;하단에&amp;nbsp;[DIFF&amp;nbsp;MANIFEST]&amp;nbsp;버튼을&amp;nbsp;누르면&amp;nbsp;AndroidManifest.xml&amp;nbsp;파일도&amp;nbsp;DIFF&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;872&quot; data-origin-height=&quot;677&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xCKUp/btsd9c0qYvD/TEodo4TjDiktxJ8klKDKwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xCKUp/btsd9c0qYvD/TEodo4TjDiktxJ8klKDKwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xCKUp/btsd9c0qYvD/TEodo4TjDiktxJ8klKDKwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxCKUp%2Fbtsd9c0qYvD%2FTEodo4TjDiktxJ8klKDKwk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;872&quot; height=&quot;677&quot; data-origin-width=&quot;872&quot; data-origin-height=&quot;677&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;800&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uqQ4v/btsd1iALhmP/bpD7wAXyPK72TggyR7vd7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uqQ4v/btsd1iALhmP/bpD7wAXyPK72TggyR7vd7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uqQ4v/btsd1iALhmP/bpD7wAXyPK72TggyR7vd7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuqQ4v%2Fbtsd1iALhmP%2FbpD7wAXyPK72TggyR7vd7K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1200&quot; height=&quot;800&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;800&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;IPA DIFF&lt;/b&gt;&lt;br /&gt;2개의 서로 다른 빌드를 비교하여 표시해줍니다.&lt;br /&gt;변경되거나 다른 부분이 있다면 좌측 IPA를 기준으로 우측 정보에 표시해줍니다.&lt;br /&gt;하단에 [DIFF INFO.PLIST] 버튼을 누르면 Info.plist 파일도 DIFF 할 수 있습니다.&lt;br /&gt;또한&amp;nbsp;ICON도&amp;nbsp;목록을&amp;nbsp;비교하며&amp;nbsp;확인&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;872&quot; data-origin-height=&quot;702&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqEQW6/btseh8XqV9P/RVsuiqCCkOFFTdnV2xJZl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqEQW6/btseh8XqV9P/RVsuiqCCkOFFTdnV2xJZl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqEQW6/btseh8XqV9P/RVsuiqCCkOFFTdnV2xJZl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqEQW6%2Fbtseh8XqV9P%2FRVsuiqCCkOFFTdnV2xJZl0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;872&quot; height=&quot;702&quot; data-origin-width=&quot;872&quot; data-origin-height=&quot;702&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;800&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uBYnC/btsd4HfIPnD/rOLtymNGKhCycUNNk9AzV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uBYnC/btsd4HfIPnD/rOLtymNGKhCycUNNk9AzV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uBYnC/btsd4HfIPnD/rOLtymNGKhCycUNNk9AzV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuBYnC%2Fbtsd4HfIPnD%2FrOLtymNGKhCycUNNk9AzV1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1200&quot; height=&quot;800&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;800&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;714&quot; data-origin-height=&quot;607&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhmGpz/btsecuzTmZf/S8645WcGjjZ5iIW9PTbak1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhmGpz/btsecuzTmZf/S8645WcGjjZ5iIW9PTbak1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhmGpz/btsecuzTmZf/S8645WcGjjZ5iIW9PTbak1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhmGpz%2FbtsecuzTmZf%2FS8645WcGjjZ5iIW9PTbak1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;714&quot; height=&quot;607&quot; data-origin-width=&quot;714&quot; data-origin-height=&quot;607&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;| 추가 기능&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Convert&amp;nbsp;CgBI&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;CgBI 포맷의 png 파일을 윈도우용으로 변환하여 주는 추가 기능입니다.&lt;br /&gt;하지만 해당 기능으로 변환될 CgBI 포맷의 png 파일은 이미 윈도우용으로 변환되어 있으면&lt;br /&gt;동작하지&amp;nbsp;않습니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 69.0697%; height: 264px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;278&quot; data-origin-height=&quot;242&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BmYlt/btseh8b3eHx/FpsYhX7yK2qK3yoTbu1cw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BmYlt/btseh8b3eHx/FpsYhX7yK2qK3yoTbu1cw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BmYlt/btseh8b3eHx/FpsYhX7yK2qK3yoTbu1cw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBmYlt%2Fbtseh8b3eHx%2FFpsYhX7yK2qK3yoTbu1cw1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;278&quot; height=&quot;242&quot; data-origin-width=&quot;278&quot; data-origin-height=&quot;242&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;278&quot; data-origin-height=&quot;242&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qLRxw/btsegfCqsg4/5zAMwMwl3FqUe3Dp49DSkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qLRxw/btsegfCqsg4/5zAMwMwl3FqUe3Dp49DSkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qLRxw/btsegfCqsg4/5zAMwMwl3FqUe3Dp49DSkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqLRxw%2FbtsegfCqsg4%2F5zAMwMwl3FqUe3Dp49DSkK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;278&quot; height=&quot;242&quot; data-origin-width=&quot;278&quot; data-origin-height=&quot;242&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;.aab to .apk&lt;/b&gt;&lt;br /&gt;.abb 포맷 파일을 .apk 파일로 변환해주는 기능입니다.&lt;br /&gt;bundletool.jar 을 이용하여 변환해주며 cmd 명령어를 쓰는 불편함만 간소화된 기능입니다.&lt;br /&gt;* JAVA 설치가 필요하며 반드시 설치하여야 합니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 69.5349%; height: 282px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;274&quot; data-origin-height=&quot;273&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ng7gc/btseh9aWiOB/kp8JGPsxGCl2I6HmNB60NK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ng7gc/btseh9aWiOB/kp8JGPsxGCl2I6HmNB60NK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ng7gc/btseh9aWiOB/kp8JGPsxGCl2I6HmNB60NK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fng7gc%2Fbtseh9aWiOB%2Fkp8JGPsxGCl2I6HmNB60NK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;274&quot; height=&quot;273&quot; data-origin-width=&quot;274&quot; data-origin-height=&quot;273&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;274&quot; data-origin-height=&quot;273&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pQs41/btseda838Cf/qyH3oxy4acjkp6XzljcpT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pQs41/btseda838Cf/qyH3oxy4acjkp6XzljcpT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pQs41/btseda838Cf/qyH3oxy4acjkp6XzljcpT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpQs41%2Fbtseda838Cf%2FqyH3oxy4acjkp6XzljcpT1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;274&quot; height=&quot;273&quot; data-origin-width=&quot;274&quot; data-origin-height=&quot;273&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;UNIVERSAL&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;APKS&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wdY07/btsd1h9IT6u/xZ7F04NB0jFBqcN12QxVKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wdY07/btsd1h9IT6u/xZ7F04NB0jFBqcN12QxVKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wdY07/btsd1h9IT6u/xZ7F04NB0jFBqcN12QxVKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwdY07%2Fbtsd1h9IT6u%2FxZ7F04NB0jFBqcN12QxVKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;804&quot; height=&quot;400&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;604&quot; data-origin-height=&quot;403&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/da6iXJ/btsd4ekbE7x/SKZT3gAciJpWJ4DcWUTWA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/da6iXJ/btsd4ekbE7x/SKZT3gAciJpWJ4DcWUTWA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/da6iXJ/btsd4ekbE7x/SKZT3gAciJpWJ4DcWUTWA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fda6iXJ%2Fbtsd4ekbE7x%2FSKZT3gAciJpWJ4DcWUTWA0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;604&quot; height=&quot;403&quot; data-origin-width=&quot;604&quot; data-origin-height=&quot;403&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;SLACK &amp;amp; E- mail연동&lt;/b&gt;&lt;br /&gt;체크가 완료된 파일과 내용을 SLACK과 이메일로 발송해주는 기능입니다.&lt;br /&gt;결과에&amp;nbsp;대한&amp;nbsp;발송&amp;nbsp;기능은&amp;nbsp;정상적이지만&amp;nbsp;형식&amp;nbsp;작성&amp;nbsp;및&amp;nbsp;도입까지는&amp;nbsp;아직&amp;nbsp;지원되지&amp;nbsp;않는&amp;nbsp;기능입니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 84.3023%; height: 344px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;255&quot; data-origin-height=&quot;205&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/djBM8i/btseggBlVTw/s9gTiabhRr4Sz0AIfDYUvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/djBM8i/btseggBlVTw/s9gTiabhRr4Sz0AIfDYUvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/djBM8i/btseggBlVTw/s9gTiabhRr4Sz0AIfDYUvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdjBM8i%2FbtseggBlVTw%2Fs9gTiabhRr4Sz0AIfDYUvk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;255&quot; height=&quot;205&quot; data-origin-width=&quot;255&quot; data-origin-height=&quot;205&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;462&quot; data-origin-height=&quot;374&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bc1xH2/btsd0SCkJUu/ejeiP2aTzKhQDUeOXlaXJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bc1xH2/btsd0SCkJUu/ejeiP2aTzKhQDUeOXlaXJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bc1xH2/btsd0SCkJUu/ejeiP2aTzKhQDUeOXlaXJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbc1xH2%2Fbtsd0SCkJUu%2FejeiP2aTzKhQDUeOXlaXJK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;462&quot; height=&quot;374&quot; data-origin-width=&quot;462&quot; data-origin-height=&quot;374&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍 제작/완성 (툴)</category>
      <category>AAB to APK</category>
      <category>APK 정보</category>
      <category>CgBI 변환</category>
      <category>IPA정보</category>
      <category>앱 정보 확인</category>
      <author>QA Engineer  - P군</author>
      <guid isPermaLink="true">https://parksh86.tistory.com/182</guid>
      <comments>https://parksh86.tistory.com/182#entry182comment</comments>
      <pubDate>Sun, 7 May 2023 22:53:45 +0900</pubDate>
    </item>
    <item>
      <title>PROJECT - D - AOS, IOS 디바이스 성능 측정 툴</title>
      <link>https://parksh86.tistory.com/181</link>
      <description>&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;게임밴치 처럼 성능을 측정하는 툴을 만들어 보면 어떨까해서 한번 만들어 봤습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;pyside2로는 툴을 처음 구현해봤기 때문에 해당 GUI Control을 접근하고 다루는게 낯설어 생각 보다 시간이 많이 걸렸습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;굳이 파이썬으로 툴을 구현한 이유는 회사에서 사용할 수 있는 무료 컴파일러를 통해 제작할 수 있고 슬랙이랑도 연동도 가능해서 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;또한 많은 라이브러리가 있기 때문에 추후 확장 가능성도 존재해서 선택해봤습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;제작 툴 :&lt;/b&gt; VisualStudio Code&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;제작 환경 :&lt;/b&gt;&amp;nbsp;Python&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;핵심 기능 :&lt;/b&gt;&amp;nbsp;AOS 디바이스 성능 측정, IOS 디바이스 성능 측정(구현 중)&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;937&quot; data-origin-height=&quot;782&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2PREC/btr65rbSx7t/HRMDK1jcTHwC4QgNIbVq81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2PREC/btr65rbSx7t/HRMDK1jcTHwC4QgNIbVq81/img.png&quot; data-alt=&quot;'탕탕 특공대'로 테스트해본 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2PREC/btr65rbSx7t/HRMDK1jcTHwC4QgNIbVq81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2PREC%2Fbtr65rbSx7t%2FHRMDK1jcTHwC4QgNIbVq81%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;937&quot; height=&quot;782&quot; data-origin-width=&quot;937&quot; data-origin-height=&quot;782&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;'탕탕 특공대'로 테스트해본 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;특정 시간(1초)에 한번씩 CPU와 메모리를 측정하고 그래프로 그려주고 만약 병목현상(특정 값 이상이나 최고 수치 갱신)일 경우 스크린샷 출력해서 PC로 가져오게 제작하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;469&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCC1Tl/btr61TmXGEg/90vTnvsKN7Ck1xvXKmBGh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCC1Tl/btr61TmXGEg/90vTnvsKN7Ck1xvXKmBGh1/img.png&quot; data-alt=&quot;기록은 엑셀로 확인할 수 있게 이쁘게 남는다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCC1Tl/btr61TmXGEg/90vTnvsKN7Ck1xvXKmBGh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCC1Tl%2Fbtr61TmXGEg%2F90vTnvsKN7Ck1xvXKmBGh1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;458&quot; height=&quot;469&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;469&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;기록은 엑셀로 확인할 수 있게 이쁘게 남는다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;* 겪었던 부분과 추후 참고해야할 부분&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;1. 메인쓰레이드에서 생성한 UI에 접근 문제&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;gt; 멀티쓰레드로 실행을 하는데 메인 쓰레드에서 생성된 GUI에 다른 쓰레드로 접근(정보 갱신)을 할때 예외가 발생하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;C#에서도 겪었던 문제로 C#에서 멀티프로세스로 실행시에 Invoke 등으로 해결하였지만 파이썬에서는 난감하였지만&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;잘해결되었습니다. (스택 오버 플로우 짱)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;2. 파이썬에서 이벤트 넘기기&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;gt; 다른 언어와 다르게 자료형으로 매개변수를 받지 않기 때문에 클릭과 같은 이벤트에 함수를 연결할때 형식으로 넘어가 따로 처리해줘야 하는 부분이 있어 문법에서 약간의 혼동이 왔었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;nbsp;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;3. 자체제작한 툴의 결과가 올바른가?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;gt; 해당 부분은 디바이스에서 제공되는 개발자 옵션과 비교해봤을때 근사치인것을 확인했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;하지만 다른 전문 성능 측정 툴을 비교하여 조금 더 지켜봐야할 것 같습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;* 남은 연구 과제&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;gt; IOS의 디바이스 로그도 AOS 처럼 빠르게 가져올 수 있는가?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;gt; 실제 업무에 잘 활용할 수 있는가?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;gt; 결과를 리포트 형식으로 공유하거나 발송할 수 있는가? (슬랙 등)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍 제작/완성 (툴)</category>
      <category>게임 성능 측정</category>
      <category>게임 성능 측정 툴</category>
      <category>안드로이드 성능 측정</category>
      <author>QA Engineer  - P군</author>
      <guid isPermaLink="true">https://parksh86.tistory.com/181</guid>
      <comments>https://parksh86.tistory.com/181#entry181comment</comments>
      <pubDate>Fri, 31 Mar 2023 00:30:55 +0900</pubDate>
    </item>
    <item>
      <title>[C#] 리플렉션 - Reflection</title>
      <link>https://parksh86.tistory.com/180</link>
      <description>&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;[C#]&amp;nbsp;리플렉션&amp;nbsp;-&amp;nbsp;Reflection&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;리플렉션은 어셈블리, 모듈 및 형식을 설명하는 개체(Type 형식)를 제공합니다. 리플렉션을 사용하면 동적으로 형식 인스턴스를 만들거나, 형식을 기존 개체에 바인딩하거나, 기존 개체에서 형식을 가져와 해당 메서드를 호출하거나, 필드 및 속성에 액세스할 수 있습니다. 코드에서 특성을 사용하는 경우 리플렉션은 특성에 대한 액세스를 제공합니다.&lt;/span&gt; [MSDN]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;최근에&amp;nbsp;툴을&amp;nbsp;만들다가&amp;nbsp;꼭&amp;nbsp;필요한&amp;nbsp;기능에&amp;nbsp;대해서&amp;nbsp;떠올리다가&amp;nbsp;언제인가&amp;nbsp;오래전에&amp;nbsp;C#&amp;nbsp;책에서&amp;nbsp;봤던&amp;nbsp;Reflection&amp;nbsp;개념이&amp;nbsp;떠올라&amp;nbsp;사용하여&amp;nbsp;한번&amp;nbsp;작성해&amp;nbsp;보고&amp;nbsp;싶었습니다.&amp;nbsp;처음에&amp;nbsp;Reflection을&amp;nbsp;공부할때&amp;nbsp;이걸&amp;nbsp;그래서&amp;nbsp;어디다가&amp;nbsp;쓰지?&amp;nbsp;라는&amp;nbsp;생각을&amp;nbsp;많이&amp;nbsp;하였는데&amp;nbsp;막상&amp;nbsp;쓸때가&amp;nbsp;오기는&amp;nbsp;오더라구요. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;사용법은 여러가지가 있는데 일단 개체가 제공하는 Type을 이용하여 사용하게 되고 이에따라 여러가지가 가능합니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;우선&amp;nbsp;기본적인&amp;nbsp;사용법에&amp;nbsp;대해서&amp;nbsp;알아보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1655831142201&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Type type = typeof(int);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;기본적으로 위와 같이 Type이라고 하면 어떤 인스턴스의 정확한 런타임 형식을 나타냅니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(저기서 type은 보기만 해도 어떤 형식인지 알 수 있을 것만 같습니다만...)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;인스턴스의 정확한 런타임 형식을 알면 바로 해당 형식은 사용하여 여러가지를 할 수 있는데&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;우선 메서드 리스트를 알 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1655832235355&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Type type = typeof(int);
var methodsList = type.GetMethods();

foreach(var list in methodsList)
{
    Console.WriteLine(list);
}

//결과
Int32 CompareTo(System.Object)
Int32 CompareTo(Int32)
Boolean Equals(System.Object)
Boolean Equals(Int32)
Int32 GetHashCode()
System.String ToString()
System.String ToString(System.String)
System.String ToString(System.IFormatProvider)
System.String ToString(System.String, System.IFormatProvider)
Int32 Parse(System.String)
Int32 Parse(System.String, System.Globalization.NumberStyles)
Int32 Parse(System.String, System.IFormatProvider)
Int32 Parse(System.String, System.Globalization.NumberStyles, System.IFormatProvider)
Boolean TryParse(System.String, Int32 ByRef)
Boolean TryParse(System.String, System.Globalization.NumberStyles, System.IFormatProvider, Int32 ByRef)
System.TypeCode GetTypeCode()
System.Type GetType()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;또한 알아낸 메서드를 직접 호출하는 것도 가능하죠.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1655831254318&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;string numbers = &quot;12345&quot;;
object[] arg = { numbers, null };
var parse = typeof(int).GetMethod(&quot;TryParse&quot;, new[] { typeof(string), typeof(int).MakeByRefType() });
var result = parse.Invoke(null, arg);
Console.WriteLine(result);
//결과 : True&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;위와같이 int형식의 타입이 기본적으로 제공하는 &quot;TryParse&quot; 메서드를 가져와서 사용할 수 있게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;string 형식의 Trim이나 또는 다른 어떠한 형식의 메서드가 있다면 사용할 수 있게 되지요.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;하지만 여기까지는 그냥 int.TryParse를 쓰면 되는거 아닌가? 하는 생각이 들게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;사실 저도 그랬으니까요..그렇다면 임의의 커스텀한 클래스를 사용해보면 어떨까요?&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1655831474152&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; public static class Person
 {
     public static string name;

     public static  void Say()
     {
            Console.WriteLine(&quot;Hello Wolrd &quot;);
     }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;위와 같은 클래스가 있다고 가정을 하고&amp;nbsp;그리고 아래와 같은 코드를 실행한다면 어떻게 될까요.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1655831555534&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var t = typeof(Person);
var method1 = t.GetMethod(&quot;Say&quot;);
method1.Invoke(null, null);
//출력 결과 Hello Wolrd&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;신기하게도 함수만 가져와서 사용할 수 있게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;그래도 여기까지와서도 생각해보면 static 인데 그냥 호출하면 되는거 아니야? 라는 생각이 다시 듭니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1655831660272&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class TestClass
{
  public int number;     
}

public class TestClass2
{
   public int number;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;자 다시 위와같은 클래스가 2개가 있습니다. &lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그럼 위에 2가지의 클래스중 아무거나 넣어도 인스턴스를 생성하고 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;필드를 가져와서 값을 채우고 그 리스트를 반환해줄 수 있다면?&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1655831856665&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void CreateActivatorInstance&amp;lt;T&amp;gt;(Type type, List&amp;lt;T&amp;gt; n )
{
    FieldInfo[] dataFieldInfo;
    dataFieldInfo = type.GetFields(BindingFlags.NonPublic
        | BindingFlags.Instance
        | BindingFlags.Public);

    for ( int i = 0; i &amp;lt; 3; i++)
    {
        T data = (T)Activator.CreateInstance(typeof(T));

        dataFieldInfo[0].SetValue(data, i);
        n.Add(data);
    } 
}

List&amp;lt;TestClass&amp;gt; testList = new List&amp;lt;TestClass&amp;gt;();
List&amp;lt;TestClass2&amp;gt; testList2 = new List&amp;lt;TestClass2&amp;gt;();

CreateActivatorInstance(typeof(TestClass), testList);
CreateActivatorInstance(typeof(TestClass2), testList2);

foreach (var text in testList)
{
    Console.WriteLine(text.number);
}

foreach (var text in testList2)
{
    Console.WriteLine(text.number);
}

//결과
0
1
2
0
1
2&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;Reflection을 사용하면 &lt;span style=&quot;background-color: #ffffff;&quot;&gt;인스턴스의 정확한 런타임 형식을 사용하여 클래스의 변수 목록, 함수 호출, 인스턴스 생성 등의 다양한&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt; 프로그래밍이 가능해집니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;이런 기능들을 활용한다면 더 풍부하고 다양한 기능을 활용할 수 있을 것 같습니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;[참고] &lt;a href=&quot;https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/concepts/reflection&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/concepts/reflection&lt;/a&gt;&lt;/p&gt;</description>
      <category>프로그래밍/C#</category>
      <category>C# Reflection</category>
      <category>c# 클래스 변수 가져오기</category>
      <category>C# 클래스 함수 가져오기</category>
      <category>Reflection</category>
      <category>리플렉션</category>
      <author>QA Engineer  - P군</author>
      <guid isPermaLink="true">https://parksh86.tistory.com/180</guid>
      <comments>https://parksh86.tistory.com/180#entry180comment</comments>
      <pubDate>Wed, 22 Jun 2022 02:28:54 +0900</pubDate>
    </item>
    <item>
      <title>LinkedIn 기술 평가 통과 ?!</title>
      <link>https://parksh86.tistory.com/179</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;0.jpg&quot; data-origin-width=&quot;1315&quot; data-origin-height=&quot;240&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqxoQR/btrDeetsaC3/dh8QDjnLue7ZUhwUqKFXxK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqxoQR/btrDeetsaC3/dh8QDjnLue7ZUhwUqKFXxK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqxoQR/btrDeetsaC3/dh8QDjnLue7ZUhwUqKFXxK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqxoQR%2FbtrDeetsaC3%2Fdh8QDjnLue7ZUhwUqKFXxK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1315&quot; height=&quot;240&quot; data-filename=&quot;0.jpg&quot; data-origin-width=&quot;1315&quot; data-origin-height=&quot;240&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1.jpg&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;365&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkphVB/btrDeCt3JCH/OMKmI2FqukIyycr18iBU5k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkphVB/btrDeCt3JCH/OMKmI2FqukIyycr18iBU5k/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkphVB/btrDeCt3JCH/OMKmI2FqukIyycr18iBU5k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkphVB%2FbtrDeCt3JCH%2FOMKmI2FqukIyycr18iBU5k%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;780&quot; height=&quot;365&quot; data-filename=&quot;1.jpg&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;365&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;LinkedIn에 가입하고 틈틈히 기술 평가 시험을 보고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;유니티, C#, Python은 통과..C++은 아쉽게도 탈락.. 다음 기회에...&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;문제가 영어로 나와서 몇몇개는 찍을 수 밖에 없었다..코드로 말한다지만...문제나 보기가 영어인건 어쩔수가 없는듯..&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;C#의 경우 최근까지 많이 다루어 봤지만 너무 쉬운 툴만 만들다보니 Task 병행처리나 동기화 등 고급 문법을&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;거의 까먹어서인지 턱걸이로...그래서 최근에 C#을 출퇴근 시간에 공부하고 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;내 실력이 궁금하다면 어느정도 평가를 보면서 언어의 이해 평가를 받아보는것도 좋은거 같다..&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;트로피 수집욕구 +_+!&lt;/span&gt;&lt;/p&gt;</description>
      <category>기타/잡답</category>
      <author>QA Engineer  - P군</author>
      <guid isPermaLink="true">https://parksh86.tistory.com/179</guid>
      <comments>https://parksh86.tistory.com/179#entry179comment</comments>
      <pubDate>Fri, 27 May 2022 01:36:37 +0900</pubDate>
    </item>
    <item>
      <title>[Python] 변수</title>
      <link>https://parksh86.tistory.com/178</link>
      <description>&lt;p data-ke-size=&quot;size14&quot;&gt;Python에도 여느 언어와 마찬가지로 여러가지 변수를 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;특이하게도 명시적으로 형식을 지정하지 않아도 되는데요.. (Lua와 동일하네요..)&lt;/p&gt;
&lt;pre id=&quot;code_1648478678549&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#변수
intValue = 10 #정수 [INT형]
floatVlaue = 1.0 #소수 [FLOAT형]
stringValue = 'hello' #문자 &amp;amp; 문자열 [STRING 형]
boolvalue = False #Boolean 형식 [BOOL 형]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;아무래도 다른 언어에서 적응했던 분이라면 조금 당황하실수도 있지만 보이지 않은 뭔가가 있다고 생각하면 편할 것 같습니다.&amp;nbsp;(C#의 var 또는 C++의 auto 정도로 생각하면 될 듯?)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;별도의 형식을 지정하지 않아도 출력이나 더하기 등 기본적인 연산도 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;다른 언어의 문법인 ' &lt;b&gt;;&lt;/b&gt; ' 표시를 조심~!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;[코드]&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;#변수
intValue = 10
floatVlaue = 3.64
stringValue = 'hello'
boolvalue = False

print(intValue)
print(floatVlaue)
print(stringValue)
print(boolvalue)

print('----------')

print(intValue + floatVlaue)
print(intValue + boolvalue)
print(floatVlaue + boolvalue)
print(floatVlaue + boolvalue)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;[결과]&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648479295189&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;10
3.64
hello
False
----------
13.64
10
3.64
3.64&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;파이썬의 기본 변수는 Lua랑 동일하게 변수형을 명시적으로 쓰지 않고 기본적으로 지원하는 대부분의 형식을 지원합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍/Python</category>
      <category>Python</category>
      <category>python 기초</category>
      <category>python 변수</category>
      <category>파이썬 기초</category>
      <category>파이썬 변수</category>
      <category>피이썬</category>
      <author>QA Engineer  - P군</author>
      <guid isPermaLink="true">https://parksh86.tistory.com/178</guid>
      <comments>https://parksh86.tistory.com/178#entry178comment</comments>
      <pubDate>Tue, 29 Mar 2022 00:06:50 +0900</pubDate>
    </item>
    <item>
      <title>POSTMAN - API TEST [기본 사용법, 다운, 설치]</title>
      <link>https://parksh86.tistory.com/177</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1191&quot; data-origin-height=&quot;618&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dDZDXQ/btrvVAEzWxO/ww6M8HS86XZmfdDy1KYuxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dDZDXQ/btrvVAEzWxO/ww6M8HS86XZmfdDy1KYuxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dDZDXQ/btrvVAEzWxO/ww6M8HS86XZmfdDy1KYuxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdDZDXQ%2FbtrvVAEzWxO%2Fww6M8HS86XZmfdDy1KYuxk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1191&quot; height=&quot;618&quot; data-origin-width=&quot;1191&quot; data-origin-height=&quot;618&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;POST MAN&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Postman 이란?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Postman은 개발한 API를 테스트하고, 테스트 결과를 공유하여 API 개발의 생산성을 높여주는 플랫폼 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;a href=&quot;https://www.postman.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.postman.com/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1647274773421&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Postman API Platform | Sign Up for Free&quot; data-og-description=&quot;Postman is an API platform for building and using APIs. Postman simplifies each step of the API lifecycle and streamlines collaboration so you can create better APIs&amp;mdash;faster.&quot; data-og-host=&quot;www.postman.com&quot; data-og-source-url=&quot;https://www.postman.com/&quot; data-og-url=&quot;https://www.postman.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/gosgY/hyNIasR1UJ/IqVEUsRnfqcixUWvQayu41/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bSBPNI/hyNH7CTm78/dGYl6Fgco4kOO87HH7vKH0/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.postman.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.postman.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/gosgY/hyNIasR1UJ/IqVEUsRnfqcixUWvQayu41/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bSBPNI/hyNH7CTm78/dGYl6Fgco4kOO87HH7vKH0/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Postman API Platform | Sign Up for Free&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Postman is an API platform for building and using APIs. Postman simplifies each step of the API lifecycle and streamlines collaboration so you can create better APIs&amp;mdash;faster.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.postman.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;위 사이트에 가입 후&amp;nbsp; 하단에 윈도우 용으로 다운로드를 합니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;934&quot; data-origin-height=&quot;626&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JPxFP/btrvPKz1qqV/AhchkNn2PRgcfiv2iXf77k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JPxFP/btrvPKz1qqV/AhchkNn2PRgcfiv2iXf77k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JPxFP/btrvPKz1qqV/AhchkNn2PRgcfiv2iXf77k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJPxFP%2FbtrvPKz1qqV%2FAhchkNn2PRgcfiv2iXf77k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;934&quot; height=&quot;626&quot; data-origin-width=&quot;934&quot; data-origin-height=&quot;626&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;실제로 게임 QA로써 API 자체를 테스트하는 경우는 없지만 과연 게임이외에 다른 플랫폼에서는 어떠한 툴을 사용하는지 잠깐 파보기로 했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;(나중에 관련된 툴을 만들 수도 있을지도??)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;예전에 앱을 취미로 개발한 적도 있었기 때문에 다른 API자체를 불러오고 사용하는데는 큰 거부감은 없었고 (생각해보면 툴을 만들때 얼마나 많은 라이브러리와 제공 API를 보았는가..)다른 QA분들도 따라할 수 있도록 실제 API를 테스트하는 간단한 사용법을 쓰고자 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;1. 공용 오픈 API 신청&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;코시국이니 국가에서 제공하는 코로나 관련 공용 API를 신청하여 사용해보도록 합시다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;우선 아래 공공데이터 포털에 원하는 API를 찾아 활용 신청을 진행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;a href=&quot;https://www.data.go.kr/index.do&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.data.go.kr/index.do&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;그리고 원하는 오픈 API를 선택하고 활용신청을 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;저는 예방접종 센터 관련된 API를 선택하였습니다. (앱을 만들려고 했는데 이미 어느 천재분이 벌써 만드셨더군요..)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1247&quot; data-origin-height=&quot;746&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3M4Bx/btrv07f9iib/5ymkqCkHLO6kxIbqgPVMjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3M4Bx/btrv07f9iib/5ymkqCkHLO6kxIbqgPVMjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3M4Bx/btrv07f9iib/5ymkqCkHLO6kxIbqgPVMjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3M4Bx%2Fbtrv07f9iib%2F5ymkqCkHLO6kxIbqgPVMjK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1247&quot; height=&quot;746&quot; data-origin-width=&quot;1247&quot; data-origin-height=&quot;746&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;해당 활용신청을 완료하고 늦으면 몇일 정도 지나면 인증키를 확인 할 수 있게 같이 전달해 줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;아까와 같은 오픈 API 탭 하단으로 스크롤 하면 활용 명세 관련해서 가이드도 있고 API 목록으로 신청한&amp;nbsp;OpenAPI 호출관련 테스트도 해볼 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;거의 대부분 사용법과 결과를 알려주기 때문에 프로그래밍에 약간에 지식만 있다면 정보를 가져오고 사용하는데 큰 문제가 없을 것 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;(단, 여기서도 발급받은 인증키를 설정해야 합니다.)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1255&quot; data-origin-height=&quot;829&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GjSYX/btrvUCipMj7/K1Nap2eeuTOE6I00LJUauK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GjSYX/btrvUCipMj7/K1Nap2eeuTOE6I00LJUauK/img.png&quot; data-alt=&quot;다양한 API 목록을 제공해줍니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GjSYX/btrvUCipMj7/K1Nap2eeuTOE6I00LJUauK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGjSYX%2FbtrvUCipMj7%2FK1Nap2eeuTOE6I00LJUauK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1255&quot; height=&quot;829&quot; data-origin-width=&quot;1255&quot; data-origin-height=&quot;829&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;다양한 API 목록을 제공해줍니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1057&quot; data-origin-height=&quot;735&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhTCwh/btrvWGEzmBF/vbLu1b0yk1wOVX8ZkgdKGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhTCwh/btrvWGEzmBF/vbLu1b0yk1wOVX8ZkgdKGK/img.png&quot; data-alt=&quot;상단에 [Open API 명세 확인 가이드]를 누르면 보면 누구나 알 수 있는 가이드를 제공해줍니다. (나중에 PPT로 써도 될 듯..)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhTCwh/btrvWGEzmBF/vbLu1b0yk1wOVX8ZkgdKGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhTCwh%2FbtrvWGEzmBF%2FvbLu1b0yk1wOVX8ZkgdKGK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1057&quot; height=&quot;735&quot; data-origin-width=&quot;1057&quot; data-origin-height=&quot;735&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;상단에 [Open API 명세 확인 가이드]를 누르면 보면 누구나 알 수 있는 가이드를 제공해줍니다. (나중에 PPT로 써도 될 듯..)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;2. 포스트맨에 발급받은 API 테스트 인증키 설정&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1223&quot; data-origin-height=&quot;677&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d84Pvt/btrvUA5WMAu/g7rCrPu4nNbBYaKV4kEhQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d84Pvt/btrvUA5WMAu/g7rCrPu4nNbBYaKV4kEhQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d84Pvt/btrvUA5WMAu/g7rCrPu4nNbBYaKV4kEhQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd84Pvt%2FbtrvUA5WMAu%2Fg7rCrPu4nNbBYaKV4kEhQ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1223&quot; height=&quot;677&quot; data-origin-width=&quot;1223&quot; data-origin-height=&quot;677&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;우선 발급받은 API의 인증키를 설정해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;물론 다양한 API별 키가 있겠지만 여기서는 API Key로 설정합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;'Authorization' 탭으로 이동해서 Type을 'API Key'를 누르고 적절한 값을 입력합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1495&quot; data-origin-height=&quot;339&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/16C2e/btrv0Qsa2aL/jUKCXFvTyIRkqz1yYYzXbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/16C2e/btrv0Qsa2aL/jUKCXFvTyIRkqz1yYYzXbk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/16C2e/btrv0Qsa2aL/jUKCXFvTyIRkqz1yYYzXbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F16C2e%2Fbtrv0Qsa2aL%2FjUKCXFvTyIRkqz1yYYzXbk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1495&quot; height=&quot;339&quot; data-origin-width=&quot;1495&quot; data-origin-height=&quot;339&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;3. 필요한 EndPoint 와 파라미터 확인&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1180&quot; data-origin-height=&quot;676&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kQsHC/btrvLA50YgM/sisPHaYJIkSPOWFGze1kx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kQsHC/btrvLA50YgM/sisPHaYJIkSPOWFGze1kx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kQsHC/btrvLA50YgM/sisPHaYJIkSPOWFGze1kx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkQsHC%2FbtrvLA50YgM%2FsisPHaYJIkSPOWFGze1kx1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1180&quot; height=&quot;676&quot; data-origin-width=&quot;1180&quot; data-origin-height=&quot;676&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;현황을 확인하기 위해서는 활용신청 정보에 발급 현황에 End Point 와 page라는 파라미터와 perPage라는 파라미터가 필요합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;795&quot; data-origin-height=&quot;300&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJRD88/btrvMeIqa0I/riH3p28GNmwBSrG46jbxPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJRD88/btrvMeIqa0I/riH3p28GNmwBSrG46jbxPK/img.png&quot; data-alt=&quot;Params 항목에 Key를 입력하면 자동으로 GET을 테스트하는 부분에 주소가 작성 됩니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJRD88/btrvMeIqa0I/riH3p28GNmwBSrG46jbxPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJRD88%2FbtrvMeIqa0I%2FriH3p28GNmwBSrG46jbxPK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;795&quot; height=&quot;300&quot; data-origin-width=&quot;795&quot; data-origin-height=&quot;300&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Params 항목에 Key를 입력하면 자동으로 GET을 테스트하는 부분에 주소가 작성 됩니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;4. 테스트 호출&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1021&quot; data-origin-height=&quot;834&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wrX1h/btrvY5wAXMn/FGhfJPsrJKxR1jOyqBAm6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wrX1h/btrvY5wAXMn/FGhfJPsrJKxR1jOyqBAm6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wrX1h/btrvY5wAXMn/FGhfJPsrJKxR1jOyqBAm6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwrX1h%2FbtrvY5wAXMn%2FFGhfJPsrJKxR1jOyqBAm6k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1021&quot; height=&quot;834&quot; data-origin-width=&quot;1021&quot; data-origin-height=&quot;834&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;이제 SEND키를 눌러 정상적으로 호출 되는지 확인 해봅시다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;내용이 정상적으로 나온다면 인증과 추가 테스트를 하는 환경이 되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;(나중에 어플에서 Return값을 JSON으로 받아오기 때문에 적절하게 변환 및 가공한다면 활용할 수 있을 듯..)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;5. 테스트 스크립트 작성&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;791&quot; data-origin-height=&quot;508&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OBaAP/btrvYIOH03l/lE5HKEbYl2kwuyKjVKVbAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OBaAP/btrvYIOH03l/lE5HKEbYl2kwuyKjVKVbAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OBaAP/btrvYIOH03l/lE5HKEbYl2kwuyKjVKVbAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOBaAP%2FbtrvYIOH03l%2FlE5HKEbYl2kwuyKjVKVbAK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;791&quot; height=&quot;508&quot; data-origin-width=&quot;791&quot; data-origin-height=&quot;508&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;포스트맨은 API를 다양하게 테스트 할 수 있는 테스트 기능을 지원해줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;테스트 코드는 JAVA로 작성 가능하며 우측에 SNIPPETS 메뉴를 누르면 자동으로 해당 코드를 완성(예제)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;해주기 때문에 특별한 프로그맹 지식이 없어도 어느정도 작성이 가능합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;793&quot; data-origin-height=&quot;503&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dIC7fN/btrvY4kbLSz/kc5RjOkJfhOIBnOyXelxf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dIC7fN/btrvY4kbLSz/kc5RjOkJfhOIBnOyXelxf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dIC7fN/btrvY4kbLSz/kc5RjOkJfhOIBnOyXelxf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdIC7fN%2FbtrvY4kbLSz%2Fkc5RjOkJfhOIBnOyXelxf1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;793&quot; height=&quot;503&quot; data-origin-width=&quot;793&quot; data-origin-height=&quot;503&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;이후 Send 버튼을 통해 요청 정보에 대한 Response를 받으면 자동으로 작성한 테스트 코드가 실행되며 하단에 Test Results 탭에 결과가 표시됩니다.&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;물론 개발 언어를 알고 있다면 지원되는 함수와 문법을 확인하면서 직접 작성도 가능합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;821&quot; data-origin-height=&quot;830&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qcgDL/btrvZ2TUAuJ/OG9mHQrldIp4pBODilPaz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qcgDL/btrvZ2TUAuJ/OG9mHQrldIp4pBODilPaz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qcgDL/btrvZ2TUAuJ/OG9mHQrldIp4pBODilPaz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqcgDL%2FbtrvZ2TUAuJ%2FOG9mHQrldIp4pBODilPaz1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;821&quot; height=&quot;830&quot; data-origin-width=&quot;821&quot; data-origin-height=&quot;830&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;[코드]&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648565457222&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var maxcurrentCount = 10;

//SNIPPETS Ver
pm.test(&quot;TEST 1 : Status code is 200 : SNIPPETS&quot;, function () 
{ 
    pm.response.to.have.status(200);
});

pm.test(&quot;TEST 2 : Check currentCount : SNIPPETS&quot;, function()
{
    const responseData = pm.response.json().currentCount;
    pm.expect(responseData).to.above(maxcurrentCount);
});

//CODE Ver
pm.test(&quot;TEST 3 : Status code is 200&quot;, function () {    
    
    if(pm.response.code != 200)
        throw new Error(&quot;Status code is not &quot; + pm.response.code);    
});

pm.test(&quot;TEST 4 : Check currentCount&quot;, function()
{
    var currentCountData = pm.response.json().currentCount;

    if(currentCountData &amp;lt;= maxcurrentCount)
        throw new Error(&quot;currentCountData is Less .. Value Is &quot; + currentCountData); 
});

//CODE Ver
pm.test(&quot;TEST 5 : Status code is 201 for Fail&quot;, function () {    
    
    if(pm.response.code != 201)
        throw new Error(&quot;Status code is not &quot; + pm.response.code);    
})&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #010101; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;&lt;br /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;</description>
      <category>소프트웨어 테스팅/테스팅 툴</category>
      <category>Postman</category>
      <category>postman 사용법</category>
      <category>Postman 설치</category>
      <category>REST API</category>
      <category>restapi</category>
      <category>포스트맨</category>
      <category>포스트맨 사용법</category>
      <category>포스트맨 설치</category>
      <author>QA Engineer  - P군</author>
      <guid isPermaLink="true">https://parksh86.tistory.com/177</guid>
      <comments>https://parksh86.tistory.com/177#entry177comment</comments>
      <pubDate>Tue, 15 Mar 2022 02:13:24 +0900</pubDate>
    </item>
    <item>
      <title>PROJECT - A-2  (LOG) - AOS, IOS 디바이스 로그 툴</title>
      <link>https://parksh86.tistory.com/176</link>
      <description>&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;&quot;&gt;테스트 도중에 디바이스 로그 확인이 필요한 경우가 있어(결제 등) 로그캣 하나만 이용하자도 안드로이드 스튜디오를 이용하는것도 그렇고..IOS 로그를 볼 수 있는 방법이 당시에 3utools가 있었던 것도 아니기에 외부 프로세스로 돌려 로그를 가져오는 식으로 제작 하였습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;제작 툴 :&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;SharpDevelop 4.5&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;제작 환경 :&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;C# 4.5, Windows Form&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;제작 기간 :&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;약 20분&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;핵심 기능 :&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;AOS 디바이스 로그 확인, IOS 디바이스 로그 확인, 화면 녹화, 스크린샷 (AOS)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;구동 화면&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1219&quot; data-origin-height=&quot;638&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cINqeE/btrv0Pfu9c6/Pd8lkCikZPBOIYk2jE8VGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cINqeE/btrv0Pfu9c6/Pd8lkCikZPBOIYk2jE8VGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cINqeE/btrv0Pfu9c6/Pd8lkCikZPBOIYk2jE8VGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcINqeE%2Fbtrv0Pfu9c6%2FPd8lkCikZPBOIYk2jE8VGk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1219&quot; height=&quot;638&quot; data-origin-width=&quot;1219&quot; data-origin-height=&quot;638&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;딱히..이것 말고는 보여줄꼐 없...&lt;/span&gt;&lt;/p&gt;</description>
      <category>프로그래밍 제작/완성 (툴)</category>
      <category>AOS로그</category>
      <category>IOS 로그</category>
      <category>logcat</category>
      <category>로그캣</category>
      <author>QA Engineer  - P군</author>
      <guid isPermaLink="true">https://parksh86.tistory.com/176</guid>
      <comments>https://parksh86.tistory.com/176#entry176comment</comments>
      <pubDate>Mon, 14 Mar 2022 21:08:55 +0900</pubDate>
    </item>
    <item>
      <title>PROJECT - B  (BLACK SWAN) - 이미지 기반 자동화 매크로 툴</title>
      <link>https://parksh86.tistory.com/175</link>
      <description>&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;시쿠리나 guitar 이용하다가 프로세스 타겟팅도 안되고 내가 원하는 좌표만 탐색도 안되고&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;스크립트도 복잡해서 스크래치 처럼 직접 스크립트도 편집하고 녹화 이미지 기반 매크로 다중 프로세스, 타겟 프로세스 등&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;다양한 기능을 커스텀 하기 위해 제작을 시도했던 툴 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Dicrect로 제작한 게임에서도 돌아가도록 제작 되었으며 지금 당장은 테스트에 활용할 일이 없기 때문에 제작이 중도 포기되었지만 언젠가 맞는 프로젝트가 있다면 부활시켜서&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;완성할 예정입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;제작 툴 :&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;SharpDevelop 4.5&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;제작 환경 :&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;C# 4.5, Windows Form&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;제작 기간 :&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;약 40분 (제작 중)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;핵심 기능 :&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이미지 기반 매크로, 스크립트 수정 가능, Target Process&amp;nbsp; 지원, 다중 매크로 가능&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;구동 화면&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1045&quot; data-origin-height=&quot;823&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwOG46/btrvW4SsSAE/bhhWJb8g9V4K32tCAvyELk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwOG46/btrvW4SsSAE/bhhWJb8g9V4K32tCAvyELk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwOG46/btrvW4SsSAE/bhhWJb8g9V4K32tCAvyELk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwOG46%2FbtrvW4SsSAE%2FbhhWJb8g9V4K32tCAvyELk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1045&quot; height=&quot;823&quot; data-origin-width=&quot;1045&quot; data-origin-height=&quot;823&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;매크로 메뉴 지정 -&amp;nbsp;&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;이미지와&amp;nbsp;조작&amp;nbsp;녹화&amp;nbsp;등의&amp;nbsp;매크로를&amp;nbsp;작성하기&amp;nbsp;위한&amp;nbsp;기능을&amp;nbsp;제공해줍니다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;OpenCV의&amp;nbsp;이미지&amp;nbsp;검색과&amp;nbsp;전역&amp;nbsp;후킹&amp;nbsp;등을&amp;nbsp;통해&amp;nbsp;정보를&amp;nbsp;구성합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;매크로 스크립트 작성 - &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;매크로&amp;nbsp;메뉴에서&amp;nbsp;지정된&amp;nbsp;내용을&amp;nbsp;편집&amp;nbsp;및&amp;nbsp;작성할&amp;nbsp;수&amp;nbsp;있도록&amp;nbsp;해줍니다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;한글로 작성하거나 편집할 수 있도록 해줍니다. (예정)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;Target Process 지원 -&lt;/b&gt; &lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;기존에&amp;nbsp;모니터&amp;nbsp;화면&amp;nbsp;전체로만&amp;nbsp;매크로가&amp;nbsp;가능하던&amp;nbsp;부분에서 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;지정된 프로세스에만 동작하거나 병렬로 동시에 여러 개의 프로세스에 &lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;동일한&amp;nbsp;매크로가&amp;nbsp;사용되도록&amp;nbsp;합니다.&amp;nbsp;(예정)&lt;/span&gt; &lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;주요 기능&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;787&quot; data-origin-height=&quot;626&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JgbaB/btrvXTDbETR/2KQSo5QbeUgpdFoxgH2Vz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JgbaB/btrvXTDbETR/2KQSo5QbeUgpdFoxgH2Vz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JgbaB/btrvXTDbETR/2KQSo5QbeUgpdFoxgH2Vz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJgbaB%2FbtrvXTDbETR%2F2KQSo5QbeUgpdFoxgH2Vz0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;787&quot; height=&quot;626&quot; data-origin-width=&quot;787&quot; data-origin-height=&quot;626&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;실시간 캡쳐를 통한 이미지 지정&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;화면에 특정 지역을 지정하여&amp;nbsp;실시간으로 이미지를 캡쳐 및 관리 할 수 있습니다.&lt;/span&gt; &lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;799&quot; data-origin-height=&quot;629&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LQydk/btrvZ3E4c30/SyQhNi4KERKTK1ejrF2pf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LQydk/btrvZ3E4c30/SyQhNi4KERKTK1ejrF2pf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LQydk/btrvZ3E4c30/SyQhNi4KERKTK1ejrF2pf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLQydk%2FbtrvZ3E4c30%2FSyQhNi4KERKTK1ejrF2pf0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;799&quot; height=&quot;629&quot; data-origin-width=&quot;799&quot; data-origin-height=&quot;629&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;편집 가능한 한글 스크립트 제공&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;화면에 특정 지역을 지정하여&amp;nbsp;실시간으로 이미지를 캡쳐 및 관리 할 수 있습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>프로그래밍 제작/미완성(툴)</category>
      <category>C# 메크로</category>
      <category>이미지 기반 메크로</category>
      <category>자체제작 메크로</category>
      <category>프로세스 메크로</category>
      <author>QA Engineer  - P군</author>
      <guid isPermaLink="true">https://parksh86.tistory.com/175</guid>
      <comments>https://parksh86.tistory.com/175#entry175comment</comments>
      <pubDate>Mon, 14 Mar 2022 21:03:23 +0900</pubDate>
    </item>
    <item>
      <title>PROJECT - Z  (ZEBRA) - 모바일 대여 프로그램</title>
      <link>https://parksh86.tistory.com/174</link>
      <description>&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;이전 회사에서 단말기 대여 프로세스가 복잡하고 번거로워 개선하고자 만든 툴 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;서버만 붙히면 되었지만 복잡한 보안 정책과 적극적인 지원이 없어 혼자 로컬로 테스트만 진행하다 끝난 비운의 툴 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;제작 툴 :&lt;/b&gt; SharpDevelop 4.1&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;제작 환경 :&lt;/b&gt; C# 4.5, Windows Form&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;제작 기간 :&lt;/b&gt; 약 30분&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;핵심 기능 :&lt;/b&gt;&lt;span&gt; QR 코드를 통한 디바이스 대여, 반납, 현황 관리&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;구동 화면&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1045&quot; data-origin-height=&quot;805&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2bvpU/btrvYvvhn9Q/eKm3BCnyrIIVp4sQUq7h8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2bvpU/btrvYvvhn9Q/eKm3BCnyrIIVp4sQUq7h8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2bvpU/btrvYvvhn9Q/eKm3BCnyrIIVp4sQUq7h8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2bvpU%2FbtrvYvvhn9Q%2FeKm3BCnyrIIVp4sQUq7h8K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1045&quot; height=&quot;805&quot; data-origin-width=&quot;1045&quot; data-origin-height=&quot;805&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;대여 -&lt;/b&gt; 디바이스를 대여할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;반납 -&lt;/b&gt; 디바이스를 반납 할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;대여 현황 -&lt;/b&gt; 디바이스의 대여 현황을 볼 수 있습니다. (웹 지원)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;관리자 -&lt;/b&gt; 디바이스 등록, 삭제, 회원 등록 삭제를 할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;주요기능&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;635&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dueYZZ/btrvY5C7Vpv/Ni986C2COM85vfzYQgU6M1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dueYZZ/btrvY5C7Vpv/Ni986C2COM85vfzYQgU6M1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dueYZZ/btrvY5C7Vpv/Ni986C2COM85vfzYQgU6M1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdueYZZ%2FbtrvY5C7Vpv%2FNi986C2COM85vfzYQgU6M1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;783&quot; height=&quot;635&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;635&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;QA 코드를 통한 대여 및 반납&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;OpenCV&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;라이브러리를 통해 카메라로 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;QR&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;코드를 인식하고 해당 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;QR&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;코드를&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;기준으로 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;모바일&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; 디바이스를 대여 및 반납 할 수 있습니다&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;819&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yFkBG/btrv0PzMbbU/Z8nb9nWDUcZtIToiSBO9gk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yFkBG/btrv0PzMbbU/Z8nb9nWDUcZtIToiSBO9gk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yFkBG/btrv0PzMbbU/Z8nb9nWDUcZtIToiSBO9gk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyFkBG%2Fbtrv0PzMbbU%2FZ8nb9nWDUcZtIToiSBO9gk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;536&quot; height=&quot;262&quot; data-origin-width=&quot;819&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;디바이스 변경 관련 관리자 알림&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #3b3838; font-family: 'Noto Sans Light';&quot;&gt;대여기기의 웹 설치 및 OS 변경등이 있을 경우 관련 메일 발송&lt;/span&gt;&lt;/p&gt;</description>
      <category>프로그래밍 제작/완성 (툴)</category>
      <category>opencv</category>
      <category>모바일 대여 프로그램</category>
      <author>QA Engineer  - P군</author>
      <guid isPermaLink="true">https://parksh86.tistory.com/174</guid>
      <comments>https://parksh86.tistory.com/174#entry174comment</comments>
      <pubDate>Mon, 14 Mar 2022 20:53:52 +0900</pubDate>
    </item>
    <item>
      <title>PROJECT - A  (ALPACA) - apk, ipa 정보 확인 툴</title>
      <link>https://parksh86.tistory.com/173</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;PROJECT - A&amp;nbsp; (&lt;/b&gt;&lt;b&gt;ALPACA)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;이전 회사에서 근무할때 먼저 입사한 리더님의 권유로 만들게 된 툴 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;테스트할때 사용할 수 있는 툴을 외부에만 의존해야하는 말도안되는 현실이 원동력이 되어 만들게 되었고&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;같은 프로젝트 내에서 요긴하게 사용할 수 있었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;다른 회사의 경우 이미 지원되는 툴이 많기에 사용하는 경우가 없어 따로 실행파일을 올리지는 않습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;필요하신분의 경우 별도의 말씀주시면 공개하도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;제작 툴 :&lt;/b&gt; SharpDevelop 4.7&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;제작 환경 :&lt;/b&gt;&amp;nbsp;C#&amp;nbsp;4.5, WPF&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;제작 기간 :&lt;/b&gt;&amp;nbsp;약 1주일&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;핵심 기능 :&lt;/b&gt; apk 파일 정보 확인, ipa 정보 확인, 정책 적용 확인&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;구동 화면&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;947&quot; data-origin-height=&quot;868&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bujCiq/btrvX7nvPH6/fhsKhbOgvlpPSrWDYzoKeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bujCiq/btrvX7nvPH6/fhsKhbOgvlpPSrWDYzoKeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bujCiq/btrvX7nvPH6/fhsKhbOgvlpPSrWDYzoKeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbujCiq%2FbtrvX7nvPH6%2FfhsKhbOgvlpPSrWDYzoKeK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;947&quot; height=&quot;868&quot; data-origin-width=&quot;947&quot; data-origin-height=&quot;868&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;APK 정보 보기 기능&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;APK &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;&lt;b&gt;정보 표기 -&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;APK&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;의 기본 정보 및 해당 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;빌드가&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; 디버그 모드인지를 판별하여 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;표&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;시해 줍니다&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;APK&amp;nbsp; Permission &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;&lt;b&gt;정보 표기 -&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;APK&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; 설정된 모든 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;Permission&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;과 정보를 표시해 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;줍니다&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;64&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;비트 지원 여부 &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;&lt;b&gt;표시 -&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;APK&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;의 파일 구조를 분석하여 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;64&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;비트 지원 여부를 표시해 줍니다&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;Menifest&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; File &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;복호화&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; 표시 -&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;APK&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;의 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;Manifest &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;파일을 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;복호화&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; 하여 표시해 줍니다&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;어플리케이션 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;구글&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;&lt;b&gt; 정책 확인 -&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;APK&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;의 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;설정된 사양이 최신 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;구글&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; 정책에 부합하는지 확인합니다&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;.(&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;커스텀&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;APK &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;커스텀&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; 로그 -&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;APK&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;마다 각기 업무 관련 로그를 남길 수 있습니다&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;.(&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;로컬 저장&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;다음에 동일한 파일일 경우 해당 로그가 출력됩니다&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;Permssion&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;상세 로그 출력 -&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;APK &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;설정된 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;Permission &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;중&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;선택한 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;Permission&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;의 세부 정보를 표시해줍니다&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;950&quot; data-origin-height=&quot;871&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cn0hjZ/btrvYJfFRgH/47Y4gFr7xHq7PHqdvTvtQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cn0hjZ/btrvYJfFRgH/47Y4gFr7xHq7PHqdvTvtQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cn0hjZ/btrvYJfFRgH/47Y4gFr7xHq7PHqdvTvtQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcn0hjZ%2FbtrvYJfFRgH%2F47Y4gFr7xHq7PHqdvTvtQk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;950&quot; height=&quot;871&quot; data-origin-width=&quot;950&quot; data-origin-height=&quot;871&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;IPA 정보 보기 기능&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;IPA &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;&lt;b&gt;정보 표기 -&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;IPA &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;의 기본 정보를 표시해줍니다&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;IPA ICON &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;&lt;b&gt;정보 표기 -&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;CgBI&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; file &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;파일 형식의 이미지 파일의 목록을 확인하고 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;PNG &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;형식으로 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;Convert &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;합니다&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;각 항목별로 해당 아이콘이 존재하는지 체크하고 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;Export &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;할 수 있습니다&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;Provisioning &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;파일 유효성 체크 -&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;IPA&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;의 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;Provisioning &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;파일의 기간과 설정을 체크해 줍니다&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;Property List &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;&lt;b&gt;표기 -&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;IPA&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;에 설정된 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;Property List&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;를 표기해 줍니다&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;Plist&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;File &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;복호화&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; 표시 -&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;IPA&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;의 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;Manifest &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;파일을 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;복호화&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; 하여 표시해 줍니다&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;&lt;b&gt;어플리케이션 정책 확인 -&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;애플 최신 정책에 부합하는지 확인합니다&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;.(&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;커스텀&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;IPA &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;커스텀&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; 로그 -&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;&lt;b&gt;I&lt;/b&gt;PA&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;마다 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;각기 업무 관련 로그를 남길 수 있습니다&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;.(&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;로컬 저장&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;다음에 동일한 파일일 경우 해당 로그가 출력됩니다&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;Property &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;&lt;b&gt;상세 정보 출력 -&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;IPA&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;에&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;설정된 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;Property &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;중&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;선택한 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;Property&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;의 세부 정보를 표시해줍니다&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;주요기능&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;734&quot; data-origin-height=&quot;790&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZG0ro/btrv07mOr1h/HL6ycu8p5bWKuSa0xxHkTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZG0ro/btrv07mOr1h/HL6ycu8p5bWKuSa0xxHkTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZG0ro/btrv07mOr1h/HL6ycu8p5bWKuSa0xxHkTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZG0ro%2Fbtrv07mOr1h%2FHL6ycu8p5bWKuSa0xxHkTK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;551&quot; height=&quot;790&quot; data-origin-width=&quot;734&quot; data-origin-height=&quot;790&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;Menifest&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;File&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;복호화&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;난독화 되어 있는 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;Menifest&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;File&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;을 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;복호화하여&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;&amp;nbsp; 확인 할 수 있습니다&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;Menifest&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;File&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;을 보기 위해 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;안드로이드&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; 스튜디오나 별도의 툴을&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;설치할 필요 없고 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;APK &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;리스트에 있는 목록을 단순히 클릭만 해도&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;해당 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;APK &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;의 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;복호화된&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;Menifest&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;파일을 확인 할 수 있습니다&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;546&quot; data-origin-height=&quot;682&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DS83E/btrvS8hhImG/guKx9WtTrn3LkCRa0ZLVNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DS83E/btrvS8hhImG/guKx9WtTrn3LkCRa0ZLVNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DS83E/btrvS8hhImG/guKx9WtTrn3LkCRa0ZLVNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDS83E%2FbtrvS8hhImG%2FguKx9WtTrn3LkCRa0ZLVNK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;546&quot; height=&quot;682&quot; data-origin-width=&quot;546&quot; data-origin-height=&quot;682&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;64Bit &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;지원 확인&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;APK&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;를 구성하고 있는 파일 구조를 파악해서 설치 전에 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;CPU&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;별 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;64Bit &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;지&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;원&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; 여부를 확인 할 수 있습니다&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;ARM, x86 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;ChipSet&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;은 물론 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;Native Java&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;로 &lt;span style=&quot;color: #333333;&quot;&gt;제작되었는지도&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;리스트에 있는 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;목록을 단순히 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;클릭하는 것으로 확인 할 수 있습니다&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;539&quot; data-origin-height=&quot;591&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HHvIE/btrvYwAWZTm/qnFSJlvRjlbNaKs6bd1650/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HHvIE/btrvYwAWZTm/qnFSJlvRjlbNaKs6bd1650/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HHvIE/btrvYwAWZTm/qnFSJlvRjlbNaKs6bd1650/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHHvIE%2FbtrvYwAWZTm%2FqnFSJlvRjlbNaKs6bd1650%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;539&quot; height=&quot;591&quot; data-origin-width=&quot;539&quot; data-origin-height=&quot;591&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;Provisioning &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;파일 유효성 체크&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;Provisioning &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;파일의 생성일과 만료일을 비교하여 표시해줍니다&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;또한 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;Provisioning &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;파일의 정보를 시각화 하여 표시해줍니다&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;552&quot; data-origin-height=&quot;594&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dk3zEe/btrvY4Ebq2T/H8RLK7CHKTjmT6MyIwOhfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dk3zEe/btrvY4Ebq2T/H8RLK7CHKTjmT6MyIwOhfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dk3zEe/btrvY4Ebq2T/H8RLK7CHKTjmT6MyIwOhfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdk3zEe%2FbtrvY4Ebq2T%2FH8RLK7CHKTjmT6MyIwOhfK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;552&quot; height=&quot;594&quot; data-origin-width=&quot;552&quot; data-origin-height=&quot;594&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;Plist&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;&amp;nbsp;File &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;복호화&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;표시&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;난독화 되어 있는 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;PList&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;File&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;을 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;복호화하여&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;&amp;nbsp; 확인 할 수 있습니다&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;별도의 툴을 설치할 필요 없고 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;IPA &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;리스트에 있는 목록을 단순히 클릭만 해도 해당 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;IPA &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;의 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;복호화&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; 된 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;PList&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;파일을 확인 할 수 있습니다&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;909&quot; data-origin-height=&quot;430&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v2NH6/btrvWFk3Ulm/sjg0XluZ5aTo94iF11uHlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v2NH6/btrvWFk3Ulm/sjg0XluZ5aTo94iF11uHlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v2NH6/btrvWFk3Ulm/sjg0XluZ5aTo94iF11uHlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv2NH6%2FbtrvWFk3Ulm%2Fsjg0XluZ5aTo94iF11uHlK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;909&quot; height=&quot;430&quot; data-origin-width=&quot;909&quot; data-origin-height=&quot;430&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;IPA ICON &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;정보 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;체크&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;CgBI&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; file &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;파일 형식의 이미지 파일의 목록을 확인하고 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;PNG &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;형식으로 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;Convert &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;합니다&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;각 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;항목별로 해당 아이콘이 존재하는지 체크하고 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;Export &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;할 수 있습니다&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;615&quot; data-origin-height=&quot;920&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/do9A6g/btrvZ27b94c/Lb61rB7VnQJx9mBqPUKM50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/do9A6g/btrvZ27b94c/Lb61rB7VnQJx9mBqPUKM50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/do9A6g/btrvZ27b94c/Lb61rB7VnQJx9mBqPUKM50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdo9A6g%2FbtrvZ27b94c%2FLb61rB7VnQJx9mBqPUKM50%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;615&quot; height=&quot;920&quot; data-origin-width=&quot;615&quot; data-origin-height=&quot;920&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;정책 확인&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;APK, IPA&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;를 구성하고 꼭 필요한 파일 또는 권한&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;값 등을 &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;커스텀한&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; 테이블에&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;입력해 놓으면 해당 형식에 따라 정책 위반 여부를 표시해줍니다&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;누구나 쉽게 테이블에 입력하고 편집할 수 있어&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;변화된 정책에&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;즉시 대응 할 수 있습니다&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #3b3838;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>프로그래밍 제작/완성 (툴)</category>
      <category>APK 정보</category>
      <category>IPA정보</category>
      <category>모바일 테스트 툴</category>
      <category>앱 정보 보기</category>
      <category>테스트 툴</category>
      <author>QA Engineer  - P군</author>
      <guid isPermaLink="true">https://parksh86.tistory.com/173</guid>
      <comments>https://parksh86.tistory.com/173#entry173comment</comments>
      <pubDate>Mon, 14 Mar 2022 20:44:21 +0900</pubDate>
    </item>
    <item>
      <title>헤더 포함 문제(Header #include)</title>
      <link>https://parksh86.tistory.com/172</link>
      <description>&lt;p data-ke-size=&quot;size14&quot;&gt;이제 유니티가 아닌 언리얼 공부를 위해 공식 홈페이지에 있는 언리얼 튜토리얼을 따라하다&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;헤더 포함문제에 부딫혔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;아래는 공식 홈페이지에 있는 튜토리얼의 공식 코드&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #010101; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #fafafa; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #e5e5e5;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #666; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #010101; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;#pragma&lt;/span&gt;&amp;nbsp;once&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;#include&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #993333;&quot;&gt;&quot;GameFramework/Pawn.h&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;#include&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #993333;&quot;&gt;&quot;CollidingPawn.generated.h&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;UCLASS()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;class&lt;/span&gt;&amp;nbsp;HOWTO_COMPONENTS_API&amp;nbsp;ACollidingPawn&amp;nbsp;:&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;public&lt;/span&gt;&amp;nbsp;APawn&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GENERATED_BODY()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;public&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;Sets&amp;nbsp;default&amp;nbsp;values&amp;nbsp;for&amp;nbsp;this&amp;nbsp;pawn's&amp;nbsp;properties&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ACollidingPawn();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;protected&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;Called&amp;nbsp;when&amp;nbsp;the&amp;nbsp;game&amp;nbsp;starts&amp;nbsp;or&amp;nbsp;when&amp;nbsp;spawned&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;virtual&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;void&lt;/span&gt;&amp;nbsp;BeginPlay()&amp;nbsp;override;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;public&lt;/span&gt;:&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;Called&amp;nbsp;every&amp;nbsp;frame&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;virtual&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;void&lt;/span&gt;&amp;nbsp;Tick(&amp;nbsp;&lt;span style=&quot;color: #0099cc;&quot;&gt;float&lt;/span&gt;&amp;nbsp;DeltaSeconds&amp;nbsp;)&amp;nbsp;override;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;Called&amp;nbsp;to&amp;nbsp;bind&amp;nbsp;functionality&amp;nbsp;to&amp;nbsp;input&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;virtual&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;void&lt;/span&gt;&amp;nbsp;SetupPlayerInputComponent(&lt;span style=&quot;color: #ff3399;&quot;&gt;class&lt;/span&gt;&amp;nbsp;UInputComponent&lt;span style=&quot;color: #039c43;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;*&lt;/span&gt;&amp;nbsp;InputComponent)&amp;nbsp;override;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UParticleSystemComponent&lt;span style=&quot;color: #039c43;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;*&lt;/span&gt;&amp;nbsp;OurParticleSystem;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;};&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: right; margin-top: -13px; margin-right: 5px; font-size: 9px; font-style: italic;&quot;&gt;&lt;a style=&quot;color: #e5e5e5text-decoration:none;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: bottom; padding: 0 2px 4px 0;&quot;&gt;&lt;a style=&quot;text-decoration: none; color: white;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: #e5e5e5; color: white; border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #010101;&quot;&gt;UParticleSystemComponent&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #010101;&quot;&gt; OurParticleSystem; 구분만 추가하면 된다고 했지만 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #010101;&quot;&gt;어쩐일에선지 아래와 같은&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #010101;&quot;&gt;오류가 출력된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #010101;&quot;&gt;[E0020 식별자 &quot;UParticleSystemComponent&quot;이(가) 정의되어 있지 않습니다.]&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;625&quot; data-origin-height=&quot;446&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rVG6S/btrpU1OHyPk/A0CKZkAUjUrrx5o9kudQq0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rVG6S/btrpU1OHyPk/A0CKZkAUjUrrx5o9kudQq0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rVG6S/btrpU1OHyPk/A0CKZkAUjUrrx5o9kudQq0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrVG6S%2FbtrpU1OHyPk%2FA0CKZkAUjUrrx5o9kudQq0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;625&quot; height=&quot;446&quot; data-origin-width=&quot;625&quot; data-origin-height=&quot;446&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2.jpg&quot; data-origin-width=&quot;715&quot; data-origin-height=&quot;408&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dCmX48/btrp0ZWa9Lx/kf8XcogLxJ1tnq5Q77FtU0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dCmX48/btrp0ZWa9Lx/kf8XcogLxJ1tnq5Q77FtU0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dCmX48/btrp0ZWa9Lx/kf8XcogLxJ1tnq5Q77FtU0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdCmX48%2Fbtrp0ZWa9Lx%2Fkf8XcogLxJ1tnq5Q77FtU0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;715&quot; height=&quot;408&quot; data-filename=&quot;2.jpg&quot; data-origin-width=&quot;715&quot; data-origin-height=&quot;408&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;일단 해당 &lt;span style=&quot;background-color: #fafafa; color: #010101;&quot;&gt;UParticleSystemComponent 클래스가 ParticleSystemComponent.h에 속해있는걸 알았으니&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #010101;&quot;&gt;해당 헤더를 추가했다.&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #010101;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;3.jpg&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;465&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WuDnM/btrpUHiMFCe/KvkxmRArFJw1eHM0kuO5p1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WuDnM/btrpUHiMFCe/KvkxmRArFJw1eHM0kuO5p1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WuDnM/btrpUHiMFCe/KvkxmRArFJw1eHM0kuO5p1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWuDnM%2FbtrpUHiMFCe%2FKvkxmRArFJw1eHM0kuO5p1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;628&quot; height=&quot;465&quot; data-filename=&quot;3.jpg&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;465&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #010101;&quot;&gt;하지만 왜인지 아래와 같은 오류 메세지가 출력되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #010101;&quot;&gt;&quot;Error: #include found after .generated.h file - the .generated.h file should always be the last #include in a header&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #010101;&quot;&gt;그러던중 인터넷에서 해결 방법을 찾던 중에 헤더 순서에 대한 글을 발견 &quot;XXXX.generated.h&quot; 헤더의 경우&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #010101;&quot;&gt;컴파일 전에 생성된다는 것 때문에 순서를 헤더 순서를 &lt;span style=&quot;background-color: #fafafa; color: #010101;&quot;&gt;&quot;XXXX.generated.h&quot;&lt;span&gt; 보다 위에 선언해야 한다는 것.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;4.jpg&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;467&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baFgb0/btrpSkufDae/aqR5T2ZfGC451MkbUYW2z0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baFgb0/btrpSkufDae/aqR5T2ZfGC451MkbUYW2z0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baFgb0/btrpSkufDae/aqR5T2ZfGC451MkbUYW2z0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaFgb0%2FbtrpSkufDae%2FaqR5T2ZfGC451MkbUYW2z0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;619&quot; height=&quot;467&quot; data-filename=&quot;4.jpg&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;467&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #010101;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #010101;&quot;&gt;&lt;span&gt;위와 같이 헤더 위치를 바꾸고 이상 없이 진행 확인...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #010101;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #010101;&quot;&gt;&lt;span&gt;엔진 버전이 업데이트 되면서 튜토리얼도 확인해주었으면...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>엔진/Unreal</category>
      <category>Error: #include found after .generated.h file</category>
      <category>ue4</category>
      <category>Unreal</category>
      <category>UParticleSystemComponent</category>
      <category>UParticleSystemComponent error</category>
      <category>언리얼</category>
      <category>헤더문제</category>
      <category>헤더선언</category>
      <author>QA Engineer  - P군</author>
      <guid isPermaLink="true">https://parksh86.tistory.com/172</guid>
      <comments>https://parksh86.tistory.com/172#entry172comment</comments>
      <pubDate>Thu, 6 Jan 2022 18:27:07 +0900</pubDate>
    </item>
    <item>
      <title>렌더링(Rendering) 이란?</title>
      <link>https://parksh86.tistory.com/168</link>
      <description>&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;렌더링(Rendering)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;234&quot; data-origin-height=&quot;526&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cc6gvj/btquOGMjKsx/L2A2rEaxlBkEZInROBh9g1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cc6gvj/btquOGMjKsx/L2A2rEaxlBkEZInROBh9g1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cc6gvj/btquOGMjKsx/L2A2rEaxlBkEZInROBh9g1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcc6gvj%2FbtquOGMjKsx%2FL2A2rEaxlBkEZInROBh9g1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;218&quot; height=&quot;490&quot; data-origin-width=&quot;234&quot; data-origin-height=&quot;526&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;렌더링이란 3차원 공간에 객체(Object)를 2차원 화면인 하나의 장면(Scene)에 바꾸어 표현하는 것을 말한다. 즉 2차원에 표시된 물체를 3차원에 물체처럼 보이게 하는 것이라고 이해하면 쉽다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;렌더링 과정에는 크게 변환(Transformation)과 색칠(Color, Ligthing) 과정으로 구분할 수 있는데 변환 과정이란 3차원 모델 좌표계의 정점들을 2차원 모델 화면 좌표계로 바꾸는 것이고 색칠 과정이란 화면에 그려지는 객체의 색체와 조명 또는 매핑 등으로 원하는 효과 또는 실제 물체와 동일한 물체로 표현하는 것을 말한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;여기서 좌표 변환 과정에서의 내용을 조금 더 세부적으로 알아볼 수 있는데 이런 일련의 렌더링 과정이 진행되는 렌더링 파이프라인을 보며 알 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;렌더링 파이프 라인이란 3차원 공간의 오브젝트를 2D 이미지를 그려내는 일련의 과정을 말하며 기본적인 렌더링 파이프 라인의 과정 중 레스터라이즈 과정 이전에 오브젝트의 데이터를 받아오고 기본적인 정점 셰이더가 진행되며, 이후 픽셀 셰이더(프레그먼트 셰이더) 순으로 흐림이 흘러가게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;187&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csHGvg/btquQwWh5Oi/kSyv4y0pIMGtsqf4J0kso0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csHGvg/btquQwWh5Oi/kSyv4y0pIMGtsqf4J0kso0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csHGvg/btquQwWh5Oi/kSyv4y0pIMGtsqf4J0kso0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsHGvg%2FbtquQwWh5Oi%2FkSyv4y0pIMGtsqf4J0kso0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;660&quot; height=&quot;187&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;187&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;변환 (Transformation) 과정&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;로컬 스페이스 (로컬 좌표) &amp;ndash; Local Space&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;267&quot; data-origin-height=&quot;285&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/caS3Me/btquPL0G3Em/BUsGDrIpQo1kba6a1vfKqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/caS3Me/btquPL0G3Em/BUsGDrIpQo1kba6a1vfKqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/caS3Me/btquPL0G3Em/BUsGDrIpQo1kba6a1vfKqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcaS3Me%2FbtquPL0G3Em%2FBUsGDrIpQo1kba6a1vfKqK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;257&quot; height=&quot;275&quot; data-origin-width=&quot;267&quot; data-origin-height=&quot;285&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;모델링 스페이스라고도 불리는 로컬 스페이스는 하나의 객체(자기 자체)만 존재하는 좌표를 정의하는 데 이용하는 좌표 시스템이다. 로컬 스페이스는 모델링 과정을 쉽고 단순하게 만들어주며, 자체의 로컬 좌표 시스템을 이용하는 이 월드에서 직접 모델을 구성하는 것보다 훨씬 쉽다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;예를 들어，그래픽 작업이 이루어지는 환경을 이야기 할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;로컬 스페이스를 이용하면 위치나 크기, 월드 내의 다른 물체와의 관계 등을 고려하지 않고 구체적인 물체도 모델을 구성할 수 있다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;월드 스페이스 (월드 좌표) &amp;ndash; World Space&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;241&quot; data-origin-height=&quot;202&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MsFVd/btquOHkaHNN/7MSIKc9Ylh8tiLcVqX6FL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MsFVd/btquOHkaHNN/7MSIKc9Ylh8tiLcVqX6FL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MsFVd/btquOHkaHNN/7MSIKc9Ylh8tiLcVqX6FL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMsFVd%2FbtquOHkaHNN%2F7MSIKc9Ylh8tiLcVqX6FL0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;202&quot; data-origin-width=&quot;241&quot; data-origin-height=&quot;202&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;로컬 좌표는 각 물체 내부의 상대 좌표에 불과하므로,&amp;nbsp;다른 물체와의 상호 관계를 파악하고자 할 때는 사용할 수 없다.&amp;nbsp;다른 물체와 서로 비교하려면 단 하나만 존재하는 월드 좌표 상에서 각기 로컬좌표를 월드 좌표로 변환해야만 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;월드 좌표는 자체의 로컬 좌표 시스템 내에 다수의 모텔을 구성한 다음에는 이를 전역(월드)&amp;nbsp;좌표 시스템으로 옮겨 하나의 장면을 구성해야 한다.&amp;nbsp;로컬 스페이스의 물체들은 이동,&amp;nbsp;회전,&amp;nbsp;크기 변형 등을 포함하는 월드 변환이라는 작업을 거쳐 월드 스페이스로 옮겨 진다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;374&quot; data-origin-height=&quot;293&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OHEfN/btquPNqHmOj/9wnFCl53DfzCxlzAgyzypk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OHEfN/btquPNqHmOj/9wnFCl53DfzCxlzAgyzypk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OHEfN/btquPNqHmOj/9wnFCl53DfzCxlzAgyzypk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOHEfN%2FbtquPNqHmOj%2F9wnFCl53DfzCxlzAgyzypk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;293&quot; data-origin-width=&quot;374&quot; data-origin-height=&quot;293&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;월드 변환은 위치와 크기, 방위를 포함하는 각 물체 간의 관계를 정의함으로써 이루어진다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;예로 여러 곳에 흩어져있는 각각의 블록을 하나의 공간에 적절하게 배치한다고 생각할 수 있다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;로컬 스페이스에서 월드 스페이스로 변환하는 행렬의 값에 따라서, 이동, 회전, 크기 변경 등의 작업을 거치게 된다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;뷰 스페이스 (카메라 좌표) &amp;ndash; View Space&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;546&quot; data-origin-height=&quot;294&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chhvWY/btquOpD7iOQ/5CCQCZEg3fCUc6zCbEtKIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chhvWY/btquOpD7iOQ/5CCQCZEg3fCUc6zCbEtKIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chhvWY/btquOpD7iOQ/5CCQCZEg3fCUc6zCbEtKIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchhvWY%2FbtquOpD7iOQ%2F5CCQCZEg3fCUc6zCbEtKIK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;546&quot; height=&quot;294&quot; data-origin-width=&quot;546&quot; data-origin-height=&quot;294&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;월드 스페이스 내에서 기하물체와 카메라는 월드 좌표 시스템과 연계되어 정의된다. 카메라가 월드 내 임의의 위치나 방위를 가진다면 투영이나 그 밖의 작업이 어렵거나 덜 효율적이 된다. 따라서 작업의 수월 함을 위해 카메라를 월드 시스템의 원점으로 변환하고，카메라가 양의 z-축을 내려다 보도록 회전시켜야 한다. (이때 카메라의 축은 좌표계 설정에 따라서 달라진다)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이때 월드에 대한 관점이 바뀌지 않도록 하기 위해서는 카메라에 맞추어 월드 내의 모든 기하물체를 변환해야 하는데， 이와 같은 변환을 뷰 스페이스 변환이라 하며，이 변환을 거친 물체는 뷰 스페이스 내에 위치한 다고 말할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;예로 들어 카메라를 들고 어떤 장면을 찍는다고 생각할 수 있겠다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;보는 방향이 결정되면 해당 방향에 있는 객체들만 출력처리를 하기 위해 카메라가 존재하는 곳을 원점으로 하고, 카메라가 바라보는 방향을 기준으로 한 새로운 카메라 좌표계를 만든 뒤, 이 좌표계로 월드 좌표계를 변환하는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;후면 추려내기 - BackFace Culling&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;316&quot; data-origin-height=&quot;337&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TpovG/btquN6Y35uc/KPZkdq7asj0SMhIX6RR7Lk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TpovG/btquN6Y35uc/KPZkdq7asj0SMhIX6RR7Lk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TpovG/btquN6Y35uc/KPZkdq7asj0SMhIX6RR7Lk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTpovG%2FbtquN6Y35uc%2FKPZkdq7asj0SMhIX6RR7Lk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;316&quot; height=&quot;337&quot; data-origin-width=&quot;316&quot; data-origin-height=&quot;337&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;폴리곤은 두 개의 변을 가지고 있으며 하나의 변을 전면, 다른 면을 후면이라 부른다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;일반적으로 폴리곤의 후면은 절대 보여지지 않는데, 이는 장면 내의 물체들이 대부분 박스나 원기둥, 캐릭터 등과 같은 채워진 볼륨이며, 채워진 물체의 내부로 카메라를 넣는 것이 허용되지 않기 때문이다, 카메라는 절대로 폴리곤의 후면을 보지 못한다. 이와 같은 사실은 매우 중요하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;왜냐하면 폴리곤의 후면을 볼 수 있는 경우에는 후면 추려내기가 작동하지 않기 때문이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이 과정을 우선 이해하기 위해서는 객체의 앞면과 뒷면을 무엇으로 결정하느냐를 이해해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;기본적으로 두르기 순서&amp;nbsp;(winding order)라고 부르며 지정된 시계방향에(뷰 스페이스)&amp;nbsp;지정된 버텍스를 가진 폴리곤을 전면 폴리곤으로 취급하고 그 반대인 반 시계방향으로 그려져 있다면 그리지 않게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;만약 좌측에 그림의 사각형이 있을 때 시계방향으로 그릴 경우 각 버텍스는&amp;nbsp;0-&amp;gt;1-&amp;gt;2로 하나의 삼각형을 다른 하나의 삼각형을&amp;nbsp;0-&amp;gt;2-&amp;gt;3&amp;nbsp;순서로 그려 후면이 아닌 전면으로 인식하도록 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;436&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJUHqH/btquN8bstrl/Jg4NKuI3x3KKkPvPAG2CWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJUHqH/btquN8bstrl/Jg4NKuI3x3KKkPvPAG2CWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJUHqH/btquN8bstrl/Jg4NKuI3x3KKkPvPAG2CWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJUHqH%2FbtquN8bstrl%2FJg4NKuI3x3KKkPvPAG2CWK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;436&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;436&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;좌측에 그림을 보면 전면을 향하고 있는 폴리곤들이 뒤쪽의 후면 폴리곤들을 가리고 있음을 알 수 있다. 대부분 렌러딩 과정에서 후면 폴리곤을 추려냄으로서(이후의 처리에서 제거) 렌더링 과정에 비용을 줄일 수 있다. 이와 같은 과정을 후변 추려 내기(backface culling) 라고 하며 후면을 추려 낸 후 결과는 우측 그림과 같다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;생각을 조금 해본다면 당연히 카메라의 입장에서 후면은 어차피 가려져 보이지 않으므로 추려내기 전이나 후나 동일한 이미지가 만들어지고 보이지 않는 부분을 굳이 그려낼 필요가 없다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;조명 - Light&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;조명은 장면의 실감을 더하기 위해 사용되며， 입체의 형태와 물체의 부피를 표현 하는 데도 도움을 준다. 조명을 이용하면 물체의 색상이 자동적으로 계산되며, 조명 모델에 따라 계산된 컬러는 훨씬 자연스러운 장면을 연출한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;조명의 요소 즉 조명 모델에서 광원을 만들어내는 빛은 다음과 같은 세가지 요소로 구성된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;환경광&amp;nbsp;- Ambient Light&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;244&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cSae0M/btquPMZBpzy/NF6ShFtLFrGkUKGuEkdGUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cSae0M/btquPMZBpzy/NF6ShFtLFrGkUKGuEkdGUK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cSae0M/btquPMZBpzy/NF6ShFtLFrGkUKGuEkdGUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcSae0M%2FbtquPMZBpzy%2FNF6ShFtLFrGkUKGuEkdGUK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;602&quot; height=&quot;244&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;244&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;주변광, 환경광이라고도 불리며 씬 전체를 똑같이 비추는 것으로 광원의 위치를 가지지 않고&amp;nbsp;방향성만 가지며, 평평하게 발산되는 빛이라고 생각하면 쉽다. 다르게는 물체(표면)에 반사되어&amp;nbsp;전반적인 장면을 밝게 하는 빛을 말하며, 컴퓨터 그래픽스에서는 빛의 강도, 위치, 표면의&amp;nbsp;방향에 의해 그 색이 변하지 않고 단지 대상 물체의 주변 색상을 나타난다고 정의한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이상적인 형태의 광원이고, 실제 물질세계에는 존재하지 않는 수학적인 빛의 형태이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;보통 디퓨즈(Diffuse)컬러와 같이 사용하며, 단일사용의 경우 입체감을 느끼기 어렵다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;예를 들어 물체의 일부분은 광원의 직접적인 시야에서 가려져 있더라도 약간의 빛을 받는다 이런 부분은 다른 표면에서 반사된 빛을 받는 것이다 환경광은 이와 같이 반사된 빛을 비교적 저렴하고 간단 게 구현하는 방법이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;난반사광 - Diffuse Light&lt;/b&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;593&quot; data-origin-height=&quot;242&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/daZ5Yx/btquNEPc8D1/8ONN1qKUuM9DUrt6iixXVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/daZ5Yx/btquNEPc8D1/8ONN1qKUuM9DUrt6iixXVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/daZ5Yx/btquNEPc8D1/8ONN1qKUuM9DUrt6iixXVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdaZ5Yx%2FbtquNEPc8D1%2F8ONN1qKUuM9DUrt6iixXVk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;593&quot; height=&quot;242&quot; data-origin-width=&quot;593&quot; data-origin-height=&quot;242&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;난반사광 분산광이라고도 하며 특정한 고정적인 방향으로 진행하며, 표면에 닿으면 모든 방향으로 동일하게 반사된다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;모든 방향으로 동일하게 반사되므로 위치와는 관계없이 관찰자의 눈에 빛이 도달하고 관찰자의 위치를 고려할 필요가 없다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;즉 난반사광의 방정식에는 빛의 방향과 표면의 형태만을 고려하면 된다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;난반사광은 광원에서 발산되는 가장 일반적인 빛이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;표면이 거친 석고처럼 반짝이지 않고 윤기 없는 표면에서 반사하는 모습을 재현한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;정반사광 (Specular Light) &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;303&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dIwOCL/btquQvC8i51/9ZWVoj5LgdkHOBM3s3KeSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dIwOCL/btquQvC8i51/9ZWVoj5LgdkHOBM3s3KeSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dIwOCL/btquQvC8i51/9ZWVoj5LgdkHOBM3s3KeSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdIwOCL%2FbtquQvC8i51%2F9ZWVoj5LgdkHOBM3s3KeSK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;602&quot; height=&quot;303&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;303&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;정반사광은 특정한 방향으로 진행하며, 표면에 닿으면 한 방향으로 강하게 반사하여 특정한 각도에서만 관찰할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 한 방향으로만 빛을 반사하기 때문에 정반사광의 방정식 에는 빛의 방향과 표면의 형태 그리고 관찰자의 시점을 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;모두 고려해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 정반사광은 반짝이는 표면 에 빛이 반사하는 효과를 모델링하는데 이용된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;클리핑 -Clipping&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;카메라의 시야 외부의 물체를 추려 내어 그리지 않도록 하는 과정을 클리핑이라 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;카메라의 시야범위를 표현할 수 있는 절두체라고 하는데 해당 영역에 어느 정도 포함되느냐에 따라서 카메라 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시야범위 내에 물체를 세 가지로 분류할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;377&quot; data-origin-height=&quot;388&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OUsmc/btquNvLIkzl/HjJLZTAZP1Qn3OEJVf7nBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OUsmc/btquNvLIkzl/HjJLZTAZP1Qn3OEJVf7nBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OUsmc/btquNvLIkzl/HjJLZTAZP1Qn3OEJVf7nBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOUsmc%2FbtquNvLIkzl%2FHjJLZTAZP1Qn3OEJVf7nBK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;377&quot; height=&quot;388&quot; data-origin-width=&quot;377&quot; data-origin-height=&quot;388&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;u&gt;완전한 내부&lt;/u&gt; - 삼각형이 완전히 절두체 내부에 위치하면 그대로 보존되어 다음 단계로 진행한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;u&gt;완전한 외부&lt;/u&gt; - 삼각형이 완전히 절두체 외부에 위치하면 추려내어진다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;u&gt;부분적 내부 (부분적 외부)&lt;/u&gt; - 삼각형이 부분적으로 절두체 내부에 위치하면 삼각형을 두 개의 부분으로 분리한다 절두체 내부의 부분은 보존되며，나머지는 추려내어진다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;투영 &amp;ndash; Projection&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;598&quot; data-origin-height=&quot;390&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bu0sEm/btquPNc9UcQ/Ac8eIoy8pXQSdzeMoSS2xk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bu0sEm/btquPNc9UcQ/Ac8eIoy8pXQSdzeMoSS2xk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bu0sEm/btquPNc9UcQ/Ac8eIoy8pXQSdzeMoSS2xk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbu0sEm%2FbtquPNc9UcQ%2FAc8eIoy8pXQSdzeMoSS2xk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;598&quot; height=&quot;390&quot; data-origin-width=&quot;598&quot; data-origin-height=&quot;390&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;n 차원 에서 n-1 차원을 얻는 과정을 투영(projection)이라고 하며, 뷰 스페이스에서는 3D 장면의 2D 표현을&amp;nbsp;얻는 과정을 말한다.&amp;nbsp;3차원에서 2차원으로 변환하는 핵심과정이며 렌더링 파이프 라인에서 가장 중요한&amp;nbsp;과정 중 하나이다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;투영을 수행하는 방법에는 여러 가지가 있지만 크게 두 가지로 하나는 직교 투영(orthographic projection)혹은 평행 투영(parallel projection)이라는 방법과 원근 투영(perspective projection) 이라는 방법이 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;직교 투영(평행 투영) - orthographic projection (parallel projection)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;278&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqvZWS/btquN7RdN4C/xa9YNQYG5NZkT8hWlbBee0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqvZWS/btquN7RdN4C/xa9YNQYG5NZkT8hWlbBee0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqvZWS/btquN7RdN4C/xa9YNQYG5NZkT8hWlbBee0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqvZWS%2FbtquN7RdN4C%2Fxa9YNQYG5NZkT8hWlbBee0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;601&quot; height=&quot;278&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;278&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;직교 투영법은 원근감을 배제하고, 수직 시점으로 위에서 내려다 보듯이 투영하는 방법으로 Z값의 거리에 따른 오차가 없기 때문에 정밀한 모델링이나 측량 등에 유리한 반면 현실감이 떨어지는 방법이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;원근 투영 - perspective projection&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;283&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0rlyf/btquNFtQ7KY/iFJXPOw8NJMeNVkCY1WUS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0rlyf/btquNFtQ7KY/iFJXPOw8NJMeNVkCY1WUS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0rlyf/btquNFtQ7KY/iFJXPOw8NJMeNVkCY1WUS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0rlyf%2FbtquNFtQ7KY%2FiFJXPOw8NJMeNVkCY1WUS0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;602&quot; height=&quot;283&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;283&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;원근 투영법은 원근법을 이용하여 물체를 투영하는 방법으로, 카메라 에서 멀리 떨어진 체는 가까운 물체에 비해 작게 나타난다. 원근 투영법은 3D 장면을 2D 이미지로 표현하는 데 가장 적합하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;뷰 포트 - View Port&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;420&quot; data-origin-height=&quot;189&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvbQos/btquN7RdO3R/m468NvvED8H41wkW6ZH7T1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvbQos/btquN7RdO3R/m468NvvED8H41wkW6ZH7T1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvbQos/btquN7RdO3R/m468NvvED8H41wkW6ZH7T1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvbQos%2FbtquN7RdO3R%2Fm468NvvED8H41wkW6ZH7T1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;420&quot; height=&quot;189&quot; data-origin-width=&quot;420&quot; data-origin-height=&quot;189&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;뷰포트 변환은 프로젝트 윈도우의 좌표를 뷰 포트라 불리는 화면의 직사각형으로 변환하는 과정을 말한다. 게임에서의 뷰 포트는 보통 직사각형의 전체 화면이 되지만, 윈도우 모드에서 실행하는 경우에는 클라이언트 영역이나 화면의 일부가 될 수도 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;207&quot; data-origin-height=&quot;177&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PVkMW/btquRcwwS1E/iCzeED0CsL9JH2ikwrfT60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PVkMW/btquRcwwS1E/iCzeED0CsL9JH2ikwrfT60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PVkMW/btquRcwwS1E/iCzeED0CsL9JH2ikwrfT60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPVkMW%2FbtquRcwwS1E%2FiCzeED0CsL9JH2ikwrfT60%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;295&quot; height=&quot;252&quot; data-origin-width=&quot;207&quot; data-origin-height=&quot;177&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;윈도우 클라이언트 영역과 상호작용을 통해, 실제로 출력될 위치를 맞추어주기 위한 과정을 말하며, 투영과정을 통해서 2차원의 변환은 끝난 상태이지만.&amp;nbsp;어느 영역에 어느 크기로 출력될 것인가의 정보를 설정하는 단계로 뷰포트 사각형은 이를 포함하고 있는 윈도우와 상대적이며, 윈도우 좌표를 이용해 지정된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;레스터라이즈 -Resterize&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;374&quot; data-origin-height=&quot;188&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/de0XPv/btquQvQB9H6/mJnKov0ywjm2TDnVxGxDGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/de0XPv/btquQvQB9H6/mJnKov0ywjm2TDnVxGxDGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/de0XPv/btquQvQB9H6/mJnKov0ywjm2TDnVxGxDGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fde0XPv%2FbtquQvQB9H6%2FmJnKov0ywjm2TDnVxGxDGK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;374&quot; height=&quot;188&quot; data-origin-width=&quot;374&quot; data-origin-height=&quot;188&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;스크린 좌표로 버텍스들을 변환한 다음에는 2D 삼각형들의 리스트를 가지게 된다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;래스터라이즈 단계는 각각의 삼각형을 그리는 데 필요한 픽셀 컬러들을 계산하는 과정이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이 과정을 거치게 되면 모니터에 출력할 수 있는 2D 이미지 상태가 된다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;레스터라이즈 이전 단계에서는 버텍스(정점) 단위로 연산이 이루어졌지만, 출력 전 필셀 컬러를 설정하는 과정을 거치기 때문에 연산치 많은 부하가 걸리게 되면 그래픽 하드웨어(GPU)를 통해 처리하게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;색칠 (Color &amp;amp; Lighting) 과정&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;셰이딩 - Shading&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;268&quot; data-origin-height=&quot;368&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJsgtV/btquP4eFglx/9lm8IPtOFMbixr9CxuFkEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJsgtV/btquP4eFglx/9lm8IPtOFMbixr9CxuFkEk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJsgtV/btquP4eFglx/9lm8IPtOFMbixr9CxuFkEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJsgtV%2FbtquP4eFglx%2F9lm8IPtOFMbixr9CxuFkEk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;268&quot; height=&quot;368&quot; data-origin-width=&quot;268&quot; data-origin-height=&quot;368&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3차원 오브젝트의 표면 처리를 할 때 조명의 위치와 물체의 기울기, 색깔, 밝기 등에 반응하여 오브젝트에 음영처리를 계산하여 적용해 주는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;단순히 물체에 텍스쳐를 입히는 것만으로는 입체감과 현실성이 떨어지게 된다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;오브젝트의 면 표면에 적절한 기법으로 처리를 해야 하는데 이 방법 또는 빛의 거리와 각도에 따라 물체의 표면을 변화시키켜 다양한 재질을 표한하는 기법을 말한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;여기서 변환 (Transformation) 과정에서 레스터라이즈 과정 부분 흔히 GPU가 처리하는 과정을 세분화 하면 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;정점(버텍스) 셰이더 &amp;ndash; Vertex Shader&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;403&quot; data-origin-height=&quot;191&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Jz7i1/btquPNxr44N/FkTSQYbKKn7gS0Qy5cXyWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Jz7i1/btquPNxr44N/FkTSQYbKKn7gS0Qy5cXyWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Jz7i1/btquPNxr44N/FkTSQYbKKn7gS0Qy5cXyWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJz7i1%2FbtquPNxr44N%2FFkTSQYbKKn7gS0Qy5cXyWk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;445&quot; height=&quot;211&quot; data-origin-width=&quot;403&quot; data-origin-height=&quot;191&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;버텍스 셰이더로 입력되는 버텍스가 지역 좌표를 가지며, 버텍스 셰이더는 조명(컬러)을 입힌 버텍스를 동종 클립 스페이스로 출력해야 로컬 스페이스의 버텍스를 동종 클립 스페이스로 변환하기 위해서는 월드 행렬，뷰 행렬， 영렬을 해 월드 변환, 뷰 변환, 투영 변환을 차례로 거쳐야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;단순하게 말해 먼저 앞서 렌더링 파이트라인 과정 중 레스터라이즈 이전에 실행되는 정점(버텍스 : Vertex) 쉐이더는 앞서 말한 정점이 가진 좌표, 색상, 텍스쳐, 등의 정보를 가진 값을 수학적 연산으로 효과를 주는 을 하는 것을 말하며, 정점의 좌표를 통해 좌표 변환을 하는 역할을 담당한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;하지만 이 정점(버텍스 : Vertex) 쉐이더만으로는 텍스쳐와 음영이 없는 폴리곤 덩어리만 출력되게 된다. 화면에는 출력될 수 있지만, 픽셀 쉐이더를 거치치 않았기 때문에 결과적으로는 단순한 결과만이 확인된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;여기서 정점 쉐이더와 조명만으로 연산을 하게 되면 버텍스 라이트라는 연산을 할 수 있지만 우측에 보이는 그림과 마찬가지로 부정확한 결과를 확인 할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;픽셀 셰이더 &amp;ndash; Pixel Shader&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;251&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NAvW4/btquO6RAyLw/hh7krFYPuYuW1hO5qpCBrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NAvW4/btquO6RAyLw/hh7krFYPuYuW1hO5qpCBrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NAvW4/btquO6RAyLw/hh7krFYPuYuW1hO5qpCBrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNAvW4%2FbtquO6RAyLw%2Fhh7krFYPuYuW1hO5qpCBrk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;601&quot; height=&quot;251&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;251&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;픽셀 셰이더는 각 픽셀의 레스터라이즈 과정을 위해 그래픽 카드의 GPU에서 각각의 셀을 직접 처리하고 픽셀의 텍스처 좌표에 접근하는 능력을 제공한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;픽셀과 텍스처 좌표에 대한 직접적인 접근은 멀티 텍스처링이나 픽셀 당 조명, 필드 깊이, 여러 시뮬레이션, 복잡한 그림자와 같은 특수 효과를 가능하게 해준다.&amp;nbsp;즉 화면 표시되는 픽셀의 최종적인 색상을 결정하는 것을 말한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;셰이딩의 종류 - Shading&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;셰이더를 사용하여 물체를 다향한 기법으로 표현하는 쉐이딩에는 여러 가지 기법이 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;105&quot; data-origin-height=&quot;100&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7K3If/btquN8CAavF/k15293VVvyxuJsCxWUxC30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7K3If/btquN8CAavF/k15293VVvyxuJsCxWUxC30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7K3If/btquN8CAavF/k15293VVvyxuJsCxWUxC30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7K3If%2FbtquN8CAavF%2Fk15293VVvyxuJsCxWUxC30%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;100&quot; height=&quot;100&quot; data-origin-width=&quot;105&quot; data-origin-height=&quot;100&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;스무스 쉐이딩&amp;nbsp;- smooth shading&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;스무스 셰이딩(Smooth shading)은 다각형 표면의 색깔을 부드럽게 바꾸어가며 다각형을 보여주는 것을 말한다. 이 때 다각형 내부의 색깔은 다각형을 구성하는 정점(vertex)들의 색깔 데이터를 내분(interpolation)하여 계산하기 때문에 각 정점들의 색깔을 각각 정의하고 있어야 한다.&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;97&quot; data-origin-height=&quot;100&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dkFN2N/btquPNqJkox/rhsO6CwxrIXOGofbhhkaI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dkFN2N/btquPNqJkox/rhsO6CwxrIXOGofbhhkaI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dkFN2N/btquPNqJkox/rhsO6CwxrIXOGofbhhkaI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdkFN2N%2FbtquPNqJkox%2FrhsO6CwxrIXOGofbhhkaI1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;100&quot; height=&quot;100&quot; data-origin-width=&quot;97&quot; data-origin-height=&quot;100&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;플랫 쉐이딩&amp;nbsp;- flat shading&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;플랫 셰이딩(flat shading)은 3차원 컴퓨터 그래픽스에 쓰이는 광원 기술이다. 다각형의 표면 정규와 광원 방향 간 각도, 개별 색상, 광원의 세기에 따라 한 물체의 각 다각형에 그림자를 넣는다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;103&quot; data-origin-height=&quot;100&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xfbM6/btquN7wUdP4/Qo9nJ5VeCwiLbgD2z7ItZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xfbM6/btquN7wUdP4/Qo9nJ5VeCwiLbgD2z7ItZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xfbM6/btquN7wUdP4/Qo9nJ5VeCwiLbgD2z7ItZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxfbM6%2FbtquN7wUdP4%2FQo9nJ5VeCwiLbgD2z7ItZ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;100&quot; height=&quot;100&quot; data-origin-width=&quot;103&quot; data-origin-height=&quot;100&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;퐁 쉐이딩&amp;nbsp;- Fhong Shading&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3차원 그래픽에서 각각의 화소 컬러와 조명에 기초하여 음영이 있는 표면 계산. 면 단위가 아닌 화소 단위로 오브젝트를 렌더링하므로 텍스처의 질감, 반사, 투명도, 범프(bump, 융기) 등의 효과를 정교하게 반영할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;103&quot; data-origin-height=&quot;101&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmKN80/btqvNHYnoAB/p2I4Fa8yKgcXUxuifIzt21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmKN80/btqvNHYnoAB/p2I4Fa8yKgcXUxuifIzt21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmKN80/btqvNHYnoAB/p2I4Fa8yKgcXUxuifIzt21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmKN80%2FbtqvNHYnoAB%2Fp2I4Fa8yKgcXUxuifIzt21%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;103&quot; height=&quot;101&quot; data-origin-width=&quot;103&quot; data-origin-height=&quot;101&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;고러드 쉐이딩 - Gouraud Dhading &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;컴퓨터 그래픽에서 생상과 다각형 면의 구석에서의 조명에 기초하여 그림자가 되는 면을 구해내는 기법으로, 오브젝트의 표면과 각 표면 사이의 교차부분의 색상이 급격하게 변하는 것을 막기 위해 두 평면색을 보간법으로 해석해서 표면의 중심에서 각 표면의 교차선까지 연속적으로 색을 부드럽게 변화시키는 방법&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;110&quot; data-origin-height=&quot;108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1SoEx/btqvRH3CVWr/JlhUURx9if93qZo5nzgdCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1SoEx/btqvRH3CVWr/JlhUURx9if93qZo5nzgdCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1SoEx/btqvRH3CVWr/JlhUURx9if93qZo5nzgdCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1SoEx%2FbtqvRH3CVWr%2FJlhUURx9if93qZo5nzgdCK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;101&quot; height=&quot;99&quot; data-origin-width=&quot;110&quot; data-origin-height=&quot;108&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;애니소트로픽 쉐이딩 - Anisotropic Shading&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;타원형, 방향성 하이라이트를 갖는 표면을 만든다. 머리카락이나 유리, 금속 등의 하이라이트를 표현하는 데 적합하며, 가장 밝은 부분 외에는 블린 또는 퐁 쉐이딩과 속성이 비슷하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;98&quot; data-origin-height=&quot;103&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/431y6/btqvNHjIY5O/UzXk7Fo4zQW8hzdKkucib0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/431y6/btqvNHjIY5O/UzXk7Fo4zQW8hzdKkucib0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/431y6/btqvNHjIY5O/UzXk7Fo4zQW8hzdKkucib0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F431y6%2FbtqvNHjIY5O%2FUzXk7Fo4zQW8hzdKkucib0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;98&quot; height=&quot;103&quot; data-origin-width=&quot;98&quot; data-origin-height=&quot;103&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;블린 쉐이딩&amp;nbsp;- Blinn Shading&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;퐁 쉐이딩과 거의 같은 방식으로 처리하지만 하이라이트가 맺히는 부분에서 광원을 보다 정확하게 반사해 주기 때문에 금속 질감의 표현에 적합하며, 퐁 쉐이딩과 가장 눈에 띄는 차이점은 오브젝트 둘레에 나타나는 하이라이트이다. 블린 쉐이딩을 사용하면 작은 각도로 표면에 입사하는 조명의 어긋난 반짝임에 의해 만들어지는 하이라이트를 얻을 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;103&quot; data-origin-height=&quot;98&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Wy2wI/btqvNkoJnuO/2onWSDowpk5SYlEfebrt6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Wy2wI/btqvNkoJnuO/2onWSDowpk5SYlEfebrt6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Wy2wI/btqvNkoJnuO/2onWSDowpk5SYlEfebrt6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWy2wI%2FbtqvNkoJnuO%2F2onWSDowpk5SYlEfebrt6K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;103&quot; height=&quot;98&quot; data-origin-width=&quot;103&quot; data-origin-height=&quot;98&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;메탈 쉐이딩 - Metal Shading&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;금속질감을 위한 응용쉐이딩으로 독특한 Specular 하이라이트 곡선을 보이는 메탈 쉐이딩은 실감나게 보이는 금속성 표면과 다양한 유기체 형태의 재질을 제공하며, 표면의 반짝이는 하이라이트 표현에 효과적이다. 금속 재질의 Specular 색상은 따로 설정할 수 없으며, 그 색상은 재질의 Diffuse 색상과 조명 색상에 따라 Specular 색상을 계산한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;98&quot; data-origin-height=&quot;133&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGywqM/btqvNH42Hqp/SSb1ow0KInI1bhWA9ohK4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGywqM/btqvNH42Hqp/SSb1ow0KInI1bhWA9ohK4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGywqM/btqvNH42Hqp/SSb1ow0KInI1bhWA9ohK4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGywqM%2FbtqvNH42Hqp%2FSSb1ow0KInI1bhWA9ohK4k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;98&quot; height=&quot;133&quot; data-origin-width=&quot;98&quot; data-origin-height=&quot;133&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;스킨 쉐이딩 - Skin Shading&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;많이 쓰이는 응용쉐이딩 중 하나로 사람의 피부에 가까운 효과를 내기 위한 쉐이딩이다. 특히 인간의 피부는 색감과 질감은 물론 반사와 투과에 있어서 독특하고 복잡한 구조를 가지고 있다. 반투명한 효과를 위해 SSS(Sub-Surface Scattering) 기술을 이용하는데, SSS는 피부나 종이 등 반투명 물체들의 표면에 빛이 닿아서 투과하지 못하고 산란되면서 이뤄지는 현상을 말한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;툰 쉐이딩&amp;nbsp;- Toon Shading&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;435&quot; data-origin-height=&quot;239&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/A5B15/btqvPbSpbg8/VP6NHgDUqMRS77Y89lk1L1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/A5B15/btqvPbSpbg8/VP6NHgDUqMRS77Y89lk1L1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/A5B15/btqvPbSpbg8/VP6NHgDUqMRS77Y89lk1L1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FA5B15%2FbtqvPbSpbg8%2FVP6NHgDUqMRS77Y89lk1L1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;435&quot; height=&quot;239&quot; data-origin-width=&quot;435&quot; data-origin-height=&quot;239&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3D 만화적으로 표현하기 위해 만들어졌으며, 음영을 단순화하여 표현하고, 실루엣의 아웃라인을 생성하며, 테두리를 갖는 평평한 음영을 제공한다. 만화적 표현이 가능해지면서 만화 애니메이션 작업의 많은 부분에 활용되고 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;셰이더와 텍스쳐를 통해서 다양한 표면 쉐이딩을 하는 부분에 대해서는 아래 링크를 통해 확인이 가능 하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;[유니티 매뉴얼 : 표면 쉐이더]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/kr/530/Manual/SL-SurfaceShaderExamples.html&quot;&gt;https://docs.unity3d.com/kr/530/Manual/SL-SurfaceShaderExamples.html&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1559658635242&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://docs.unity3d.com/kr/530/Manual/SL-SurfaceShaderExamples.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;https://docs.unity3d.com/kr/530/Manual/SL-SurfaceShaderExamples.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;유니티 - 매뉴얼: 표면 쉐이더의 예&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;서피스 쉐이더 작성 표면 쉐이더에서 사용자 정의 라이팅 모델 표면 쉐이더의 예 Surface Shaders](SL-SurfaceShaders.html)의 예입니다. 다음은 내장 라이팅 모델 사용에 집중하고 있습니다. 사용자 정의 라이팅 모델의 구현 방법은 Surface Shader Lighting Examples에 있습니다. Simple 아주 간단한 쉐이더를 작성 해 볼것입니다. 다음은 표면의 색상을 단순히 흰색 지정하는 쉐이더입니다. 이것은 내장 Lam&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.unity3d.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;맵핑 - Mapping&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3 차원 물체 위에 질감이나 2D 이미지를 부여하는 과정을 말한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;아무리 모델링이나 최신 셰이더를 사용하더라도 원하는 질감이나 물체를 표현하기란 어렵다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;물체 표면에 모델링만으로는 표현하기 힘든 디테일을 추가하기 위해 사용하는 방법으로 복잡한 모델링을 대체하는 방법 또한 맵핑 기법 중 하나이다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;즉, 셰이딩이 물체 자체의 질감 이나 색상 등의 표면의 느낌을 말하는 것 이라면 맵핑은 이러한 물체에 덮어 씌운 그림이나 무늬를 말한다. 폴리곤 매쉬 표면에 색을 칠하기 위해, 텍스쳐 이미지를 통한 텍스쳐 매핑이 대표적이며, 우선 기본적인 텍스쳐 맵핑은 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;텍스쳐 맵핑 &amp;ndash; Texture Mapping&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;189&quot; data-origin-height=&quot;192&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bv3fDz/btqvRaSuCLj/DKxSsIcBvj73eHRjpdJbG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bv3fDz/btqvRaSuCLj/DKxSsIcBvj73eHRjpdJbG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bv3fDz/btqvRaSuCLj/DKxSsIcBvj73eHRjpdJbG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbv3fDz%2FbtqvRaSuCLj%2FDKxSsIcBvj73eHRjpdJbG1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;189&quot; height=&quot;192&quot; data-origin-width=&quot;189&quot; data-origin-height=&quot;192&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;기본적으로 하나의 이미지 파일을 물체에 씌운다고 생각할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이때 3차원 환경에서의 물체이지만 텍스쳐는 일반적으로 2차원 텍스쳐를 사용하게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;일반적인 이미지는 픽셀 값으로 표현하지만 텍스쳐는 u축과 v축으로 이루어진 0.0부터 1.0 사이의 값을 가지는 u,v 좌표를 사용한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;즉, 텍스쳐의 크기와 관계없이 텍스쳐 좌표의 최대값은 1이며, 최소값은 0이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;또한 이미지 크기에 따라서는 실제 이미지가 가지는 좌표계가 존재하는데, 그걸을 텍셀 (texture + pixel) 좌표계라고 한다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;uv값에 의해 실제로 결정되는 텍스처 이미지의 픽셀 값을 말한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;물체에 텍스쳐 맵핑을 하게되면 텍스쳐의 크기에 따라 확대 및 축소를 하게 되고 이때 왜곡이 생기거나 계단현상이 발생하게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;219&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cg9GP6/btqvP46i00Y/NU2HszO3I65ysNFr4j9Es1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cg9GP6/btqvP46i00Y/NU2HszO3I65ysNFr4j9Es1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cg9GP6/btqvP46i00Y/NU2HszO3I65ysNFr4j9Es1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcg9GP6%2FbtqvP46i00Y%2FNU2HszO3I65ysNFr4j9Es1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;601&quot; height=&quot;219&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;219&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이 부분을 텍스쳐 필터(주변에 픽셀과 어우러지게 하는 작업)링이라는 작업을 통해 해결되고 이 때 사용하는 픽셀에 사용하는 좌표에 텍셀을 사용하게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;법선 맵핑 (노말 맵핑) &amp;ndash; Bump Mapping (Normal Mapping)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;339&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KTjDf/btqvRIaoq1X/M5tw1XsKm17AHzkCFoaVbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KTjDf/btqvRIaoq1X/M5tw1XsKm17AHzkCFoaVbk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KTjDf/btqvRIaoq1X/M5tw1XsKm17AHzkCFoaVbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKTjDf%2FbtqvRIaoq1X%2FM5tw1XsKm17AHzkCFoaVbk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;602&quot; height=&quot;339&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;339&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;울퉁불퉁한 표면을 처리하기 위한 특수한 텍스쳐를 사용하는 맵핑으로 움푹 들어간 곳의 빛을 왜곡시키는 기법이다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;많은 폴리곤을 사용하지 않고 세세한 부분을 추가하기 위해 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;하이 폴리곤 모델에서 노말 맵핑을 위한 텍스쳐를 추출하는 방식으로 제작하며&amp;nbsp;각 픽셀에서 빛의 방향을 계산하여 적용된 텍스쳐로 해당 텍스쳐를 같이 사용하게 된다면 보다 낮은 폴리곤 모델에도 고해상도 모델과 동일한 효과를 볼 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;239&quot; data-origin-height=&quot;119&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YeGgY/btqvNjwxQ4t/NKVN6b7xhzTfSiDWENnPy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YeGgY/btqvNjwxQ4t/NKVN6b7xhzTfSiDWENnPy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YeGgY/btqvNjwxQ4t/NKVN6b7xhzTfSiDWENnPy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYeGgY%2FbtqvNjwxQ4t%2FNKVN6b7xhzTfSiDWENnPy1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;239&quot; height=&quot;119&quot; data-origin-width=&quot;239&quot; data-origin-height=&quot;119&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;왼쪽에 일반 텍스쳐이고 오른쪽이 노말 맵이라고 불리는 텍스쳐의 형태이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;먼저 여기서 법선(노말)이란 곡면이나 어떠한 선에 접하는 평면에 수직하는 벡터(방향)로 물체 표면의 방향을 결정한다..&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;229&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/K6OyD/btqvNjwxRCn/dLIbwrAD1fMuiZ9LC0WTIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/K6OyD/btqvNjwxRCn/dLIbwrAD1fMuiZ9LC0WTIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/K6OyD/btqvNjwxRCn/dLIbwrAD1fMuiZ9LC0WTIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FK6OyD%2FbtqvNjwxRCn%2FdLIbwrAD1fMuiZ9LC0WTIk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;229&quot; height=&quot;200&quot; data-origin-width=&quot;229&quot; data-origin-height=&quot;200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;343&quot; data-origin-height=&quot;208&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/caczyR/btqvQEfd6nj/yHKtvVhyvLl8ssQ6esJBsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/caczyR/btqvQEfd6nj/yHKtvVhyvLl8ssQ6esJBsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/caczyR/btqvQEfd6nj/yHKtvVhyvLl8ssQ6esJBsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcaczyR%2FbtqvQEfd6nj%2FyHKtvVhyvLl8ssQ6esJBsK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;343&quot; height=&quot;208&quot; data-origin-width=&quot;343&quot; data-origin-height=&quot;208&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;하이 폴리곤 모델에서 노말 맵핑을 위한 텍스쳐를 추출하는 방식으로 제작하고, 로우 폴리곤 모델에 적용한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;시차 맵핑 - parallax mapping&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;236&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HUkKw/btqvRarsVOq/nvNanubTNJMZm4tXXXzfIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HUkKw/btqvRarsVOq/nvNanubTNJMZm4tXXXzfIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HUkKw/btqvRarsVOq/nvNanubTNJMZm4tXXXzfIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHUkKw%2FbtqvRarsVOq%2FnvNanubTNJMZm4tXXXzfIK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;602&quot; height=&quot;236&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;236&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;법선 맵핑 (노말 맵핑) 의 단점으로 가까운 거리에서 부자연스럽게 보인다거나, 굴곡의 높이를 고려할 수 없기 때문에 해당 현상을 해결하기 위해 높이 맵에 대해서 간단한 관선추적 알고리즘을 수행한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;법선 맵핑 (노말 맵핑) 보다 사실적으로 표현하는 방식이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;변위 맵핑 - Displacement mapping&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;265&quot; data-origin-height=&quot;166&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDA70W/btqvNIiEkFs/0wUTylty2CFOspH6QA0LU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDA70W/btqvNIiEkFs/0wUTylty2CFOspH6QA0LU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDA70W/btqvNIiEkFs/0wUTylty2CFOspH6QA0LU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDA70W%2FbtqvNIiEkFs%2F0wUTylty2CFOspH6QA0LU0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;265&quot; height=&quot;166&quot; data-origin-width=&quot;265&quot; data-origin-height=&quot;166&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;214&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bncuYc/btqvMIpPhrw/3kMAzeW5rTvD9c9K600zH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bncuYc/btqvMIpPhrw/3kMAzeW5rTvD9c9K600zH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bncuYc/btqvMIpPhrw/3kMAzeW5rTvD9c9K600zH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbncuYc%2FbtqvMIpPhrw%2F3kMAzeW5rTvD9c9K600zH1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;320&quot; height=&quot;214&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;214&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;법선 매핑과 시차 맵핑의 경우 실제 물체에 정보를 변환하지 않고 픽셀의 색상 정보만 변경하지만 변위 맵핑은 텍스쳐 또는 높이 맵을 사용하여 텍스처링 된 표면 위에 실제 물체를 변경시는 방법이다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;환경 맵핑 - &lt;/b&gt;&lt;b&gt;environment mapping&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;240&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfI5Oi/btqvPbdKNXk/EJE4xzkkUBDrmrwpxTmk91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfI5Oi/btqvPbdKNXk/EJE4xzkkUBDrmrwpxTmk91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfI5Oi/btqvPbdKNXk/EJE4xzkkUBDrmrwpxTmk91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfI5Oi%2FbtqvPbdKNXk%2FEJE4xzkkUBDrmrwpxTmk91%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;320&quot; height=&quot;240&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;240&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;212&quot; data-origin-height=&quot;212&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ih9lm/btqvRHJk6OP/dp5xNfaUoDVeBvjG8sY6k0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ih9lm/btqvRHJk6OP/dp5xNfaUoDVeBvjG8sY6k0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ih9lm/btqvRHJk6OP/dp5xNfaUoDVeBvjG8sY6k0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIh9lm%2FbtqvRHJk6OP%2Fdp5xNfaUoDVeBvjG8sY6k0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;212&quot; height=&quot;212&quot; data-origin-width=&quot;212&quot; data-origin-height=&quot;212&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;오브젝트 주변의 배경들이 반사되는 모습을 표현하는 기법이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;텍스쳐 6장을 정육면체로 사용하여 배경이나, 스카이 박스 등의 가상의 6면체 환경을 구성하는 Cubic Environment 맵핑에도 사용하며, 오브젝트가 움직일 때 특정 지점을 반사되어 보이거나 반사되는 부분을 바뀌게 되므로 해당 오브젝트 표면도 같이 바뀌는 특징을 가지고 있다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;PS. 오랜만에 블로그 포스팅을 하려고 했더니..&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;새로운 글쓰기..정말 이상하다..구버전으로 바꾸고 다음부터 써야겠다...&lt;/span&gt;&lt;/p&gt;</description>
      <category>프로그래밍 관련/DirectX</category>
      <category>rendering</category>
      <category>rendering pipeline</category>
      <category>렌더링</category>
      <category>렌더링 파이프라인</category>
      <category>렌더링이란?</category>
      <category>파이프라인</category>
      <author>QA Engineer  - P군</author>
      <guid isPermaLink="true">https://parksh86.tistory.com/168</guid>
      <comments>https://parksh86.tistory.com/168#entry168comment</comments>
      <pubDate>Wed, 5 Jun 2019 01:07:50 +0900</pubDate>
    </item>
    <item>
      <title>소프트웨어 테스팅 기법 (2) - 정적 테스팅의 종류</title>
      <link>https://parksh86.tistory.com/167</link>
      <description>&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;S/W 테스팅 기법 2&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;564&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border:none;border-collapse:collapse;;font-family:Gulim, 굴림;font-size:16px&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 187px; height: 61px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); background-color: rgb(189, 189, 189);&quot; colspan=&quot;1&quot; rowspan=&quot;2&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;정적 테스팅&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 376px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-top: 1px solid rgb(204, 204, 204); background-color: rgb(189, 189, 189);&quot; colspan=&quot;2&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;동적 테스팅&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 188px; height: 37px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); background-color: rgb(189, 189, 189);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;블랙 박스 테스팅&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;(명세 &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;기반)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 188px; height: 37px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); background-color: rgb(189, 189, 189);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;화이트 박스 테스팅&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;(구조 기반)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width:188;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;- Inspection&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;-&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Orthogonal Array Testing&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;- Prior Defect History Testing&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;- Risk-Based Testing&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;- Run Chart&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;- Statistical Profile Testing&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:188;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;- Boundary Value Testing&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;- Cause-Effect Graphing&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;- Control Flow Testing&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;- CRUD Testing&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;- Decision Tables Testing&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;- Equivalence Class Partitioning&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;- Exception Testing&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;- Finite State Testing&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;- Free Form Testing&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;- Positive and negative Testing&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;- Prototyping&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;- Random Testing&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;- Range Testing&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;- Regression Testing&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;- State Transition Testing&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;- Thread Testing &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:188;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;- Basis Path Testing&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;- Branch Coverage Testing&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;- Condition Coverage Testing&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;- Data Flow Testing&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;- Loop Testing&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;- Mutation Testing&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;- Sandwich Testing&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;-&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Statem&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;ent Coverage Testing &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;정적 테스팅의 종류&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;1. 익스펙션 (Inspection)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;가장 일반적으로 사용되는 동료검토 형식으로, 오류 탐지를 위하여 체
크리스트(checklist)를 사용하는 것이다. 체크리스트는 어떠한 오류 타입이 과거에 비해 더 혹
은 덜 빈번하게 발생하는지를 통계량으로 나타내주며, 일반적으로 inspection은 제품 설계와
코딩 단계에서 많이 수행된다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;50~100라인 정도의 명세나 설계의 inspection은 15분에서 한
시간 정도의 시간이 소요되며, 복잡한 컴포넌트는 2시간 이상이 소요되므로 이러한 경우 덜
효율적이기 때문에 inspection으로 검토하는 것은 피해야 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;일반적으로 inspection은 생명 주기에서 다음 단계의 해당 참가자, 즉 리더(reader)에 의해 수
행되고 inspection의 참가자들은 검토할 대상에 대해 미리 조사해야 한다. 예를 들어, 요구사
항 분석에 대한 검토는 설계자에 의해 이루어지고, 설계 단계에 대한 검토는 구현자에 의해
이루어지며, 예외적으로 코드 검토는 설계자에 의해 이루어진다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;리더는 표준을 왜곡하는 등
의 일반적인 오류 타입을 식별하기 위한 체크리스트를 사용하여, 제품 컴포넌트를 검토한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Inspection의 마지막 단계에서는 그룹에 의해 수용되거나 거부된 결정이 제시되며, 코디네이
터(coordinator)는 발견된 오류와 문제점을 요약하여 모든 참가자들에게 리스트 형태로 제공
한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;또한 inspection을 수행했던 참가자(설계자, 구현자, 테스터)는 이 리스트를 토대로 제
품에 대한 리비전(revision)을 코디네이터에게 제출하고, 코디네이터는 리비전 요약 보고서를
작성하며, 이 요약 보고서는 다음 inspection을 위한 체크리스트를 갱신하는데 사용된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;효율적인 inspection 체크리스트를 생성하기 위해 다음이 제안된다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;1. 체크리스트는 결함 분석에 기초해서 정규적으로 갱신되어야 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;: 정규적으로 갱신됨으로써,
검토자는 체크리스트를 쉽게 읽고 사용할 수 있을 것이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;2. 체크리스트는 한 페이지보다 길지 않아야 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;: 한 페이지 분량의 체크리스트는 책상에 놓여
져 프로덕트를 검토하는 동안 근접한 곳에서 읽혀질 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;3. 체크리스트 아이템은 질문의 형태로 표현되어야 한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;: 예)&amp;nbsp;각 변수는 처음 사용되기 전에
적절하게 초기화되었는가?&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;그 이유는 모든 질문 형태의 체크리스트 아이템은 명령문으로 재표현될 수
있기 때문이다 (예로, 각 변수가 처음 사용되기 전에 적절히 초기화된 것을 확인하라).&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;4. 체크리스트 아이템은 너무 일반적이지 않아야 한다. (예로, 모든 요구사항이 완전하고 일관성
있고 명백한가?)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;2. 직교배열 테스팅 (Orthogonal Array Testing)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 211px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99DD81435B3B841129&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99DD81435B3B841129&quot; width=&quot;211&quot; height=&quot;135&quot; filename=&quot;l4.gif&quot; filemime=&quot;image/gif&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;잠재적으로 조합 요소의 거대한 양을 처리하기 위한 테스트
케이스를 선정하는데 도움을 주는 통계적 테스팅 기법이다. 요구되는 테스트 케이스의 이상
적인 개수를 계산하고 입력값과 조건의 차를 식별하여 테스트 케이스 선정 프로세스에서 최
대 커버리지를 가지는 최소 개수의 테스트 케이스를 제공하는데 도움을 준다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Orthogonal array testing은 모든 선택된 변수의 pair-wise combination을 테스팅 하는 것을 보장
함으로써, 모든 변수의 모든 조합을 테스팅 하는 것보다 적은 수의 테스트 케이스로 효율적
이고 간결한 테스팅을 수행할 수 있게 해준다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;3. 사전결함 이력테스트 (&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Prior Defect History Testing)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 555px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99EC134D5B3B856F05&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99EC134D5B3B856F05&quot; width=&quot;555&quot; height=&quot;491&quot; filename=&quot;222.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;시스템에서 이전에 행하였던 모든 defect에 대한 테스트케이스가 다시 만들어져야 하며, 이에 대해 다시 테스팅을 수행하여야 한다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;defect가 밀
집되어 있고, 기존에 발생했던 문제점이 또다시 나타나기 쉬운 경향을 가진다는 점에 착안
하여 고안되었다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;이 기법은 defect matrix를 이용하는 것이 효율적인데, 이전 단계에서 해당
테스트케이스를 수행하는 동안 defect가 발견 되었으므로 다시 테스트 되어야 한다는 표시를
이 matrix안의 check entry에 표시함으로써 이를 이용하게 되며, Prior defect history testing에서
많은 수의 defect가 발견될 경우, 어떠한 단계에서의 defect는 이에 대한 테스트를 반복적으로 수행해야 하므로 경제적이지 않다. &lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;리스크 기반 테스트 (Risk-Based Testing)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;맑은 고딕, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 13.3333px; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;테스트 대상에 비해서 테스트 자원이 부족한 경우, 우선순위를 나눠서 테스트 자원을 효율적으로 분배하기 위한 전략으로 리스크를 정의하고, 정의된 리스크를 분석하고, 분석된 리스크에 대하여 회피 전략을 세우고, 전략에 따라 테스트를 수행하는 과정을 통하여 리스크 기반 테스팅을 할 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;font face=&quot;맑은 고딕, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 13.3333px; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;(RBT에서 리스크는 &quot;리스크 발생 가능성&quot; × &quot;발생했을 때 영향력&quot;으로 정의한다.)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;font face=&quot;맑은 고딕, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;risk에 기반 한 테스트를 수행함으로써 합리성을 갖고 가장 심각
한 결과를 초래할 수 있는 시스템의 일부를 선택할 수 있게 되어 risk에 주의를 집중시킬 수 있게 된다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;Risk-based testing은 높은 risk를 가지는 어플리케이션을 식별해낸 후, risk분석을 통
해 해당 어플리케이션에서 에러가 발생하기 쉬운 컴포넌트를 식별하여, 식별한 컴포넌트에
만 테스트를 집중시킨다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;이 때 잘못된 risk분석을 하게 되면, 우연적으로나 필연적으로 시스
템의 취약성을 증가시키게 되므로, 보다 엄격한 취약성 분석과 취약성 분석을 기반으로 한
테스팅이 요구된다.&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; &lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;런 차트 (Run Chart)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 600px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/993B1B485B3B882502&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F993B1B485B3B882502&quot; width=&quot;600&quot; height=&quot;411&quot; filename=&quot;SimpleRunChart.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;시간을 가지는 품질 특성에 대한 다양성을 그래프로 표현하는 것이다.
Run chart는 변화 기록과 패턴을 보여주고, 변화가 영구적인 개선을 가져왔는지를 보기 위한
변화 프로세스의 마지막 부분에서 사용되기도 한다.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;&lt;b&gt;통계 프로파일 테스트 (Statistical Profile Testing)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;시스템 profile의 사용 빈도에 기반 하여 자동적으로 테스트 세트를 생성해 주는 기법으로 같은 항목을 여러 번 수행하는 기존의 테스팅 기법의 약점을 보
완하는 하나의 방안이 될 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>소프트웨어 테스팅/테스트 기법</category>
      <author>QA Engineer  - P군</author>
      <guid isPermaLink="true">https://parksh86.tistory.com/167</guid>
      <comments>https://parksh86.tistory.com/167#entry167comment</comments>
      <pubDate>Tue, 3 Jul 2018 23:35:15 +0900</pubDate>
    </item>
    <item>
      <title>소프트웨어 테스트 기법 (1) - 기법 종류</title>
      <link>https://parksh86.tistory.com/166</link>
      <description>&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;S/W &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 14pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;테스트 기법&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;1. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;블랙박스 테스트&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; (Black-Box Test)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;프로그램의 외부 규격서에
의거하여&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;입력 데이터와 출력 데이터 관계가 규격서에 정해진 바와 같은 결과를 얻었는지 조사&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;시험하는 방법이다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;테스트 대상이 되는 구현물의 내부구조 및 소스코드에
대 한 접근이 필요하지 않는다는 점에서 블랙 박스 시험이라 부른다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;이 방식의 시험 사례를 설계하기
위해 결정표&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;(decision table)&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;가 이용 되기도 한다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;모듈이
요구에 맞게 잘 작동하는가에 초점을 두고&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;모 듈의 외형&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;입력&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;출력&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;과 모듈의 기능 위주의 검사가 진행된다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;2. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;화이트박스 테스트&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;
(White-Box Test)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;테스터가 프로그램의 코드나 모듈에 접근하여 요구에 맞게 잘 작 동하는가에 초점을 둔 테스트를 말한다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;프로그램 내부 구조의 타당성 여부를 시험하고&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;내부 구조를 해석
해서 프로그램의 모든 처리 루틴에 대해 시험하는 기본 사항이다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;가끔 발생하는 조건도 고려해서 처리
루틴을 검증하기 위한 시험 데 이터를 작성하여 시험을 실시할 필요가 있다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;3. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;단위 테스트&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; (Unit Test)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;모듈테스트&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;(Module Test)&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;라고도 하며&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;시스템에서 테스트 가능한 가장
작은 단위를 개별적으로 테스트를 수행한다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;일반적으로 개발 되는 제품이나 시스템의 단위 클래스나 함수들을
테스트 대상으로 본다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;4. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;통합 테스트&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; (Integration Test)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;프로그램 또는 그 구성 요소인 모듈 등의 정보 시스템 하나하나의
구성 요소를 결합하여 구성 요소간의 인터페이스와 각 결합 단계에 서의 기능을 확인하는 테스트이다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;컴포넌트나
서브시스템과 같은 통합 단위를 테스트한다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;5. 시스템 테스트&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; (System Test)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;구현된 시스템이 정해진 요건에 적합한지 여부를 평가하기 위하여 실제 운용과 같은 환경에서
시스템 전체에 대해서 행하는 테스트를 말하며 전체 응용프로그램 또는 시스템을 테스트한다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;6.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;인수 테스트&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; (Acceptance Test)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;계약상의 요구 사항이
만족되었는지 확인하기 위해&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;설치 후 구입 자의 현장에서 납품자도 참가하여 구입자에 의해 실시되는 시스템
또는 기능 단위의 테스트를 말한다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;배포여부를 결정하기 위해 최종 사용자에 의해 수행되는 완전한 시스템에
대한 테스트를 말한다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;7. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;벤치마크 테스트&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; (Benchmark Test)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;어떤 기계나 시스템을 실제로 사용될 것과 같은 여건에서 성능을 측정하기 위해 하는
여러 가지 테스트를 말한다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;통상적으로&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;개 또 는 여러
개의 대표적인 프로그램을 비교하고자 하는 컴퓨터들에 수 행시켜 성능을 측정함으로써 컴퓨터의 속도나 단위 시간당 일 처리 량 등을 비교할 수 있다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;널리 알려져 있는 워크로드 내지는 시스템 과 새로 생성한 테스트 대상의 성능 비교한다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;8. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;구성 테스트&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;
(Configuration Test)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;다양한 하드웨어와 소프트웨어를 구성시켜 테스트 대상이 제대로&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;동작하는가 검증한다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;하드웨어 및 소프트웨어를 구성하는데 시간이 많이 투입된다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;9. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;기능 테스트&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;
(Function test)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;대부분의 동작이 장비들의 제한된 종류의 기능들로 구성되어 있다는 점을 이용해서 수행하는 기능적인 테스트를
말한다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;. 10~15&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;개 기 능에 대한 전체 조합은 상당히 많은 분량이므로 단 몇몇 기능으로만 동작을 구성한다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;소프트웨어의 기능적 시험은 구조적 기능에 대해 서 어떤 프로그램의 기능에 대한 시험이다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;테스트 대상이 요구되는 기능을 제대로 수행하는가 검증한다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;10. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;설치 테스트&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; (Installation test)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;테스트 대상이 사용시스템에
제대로 설치되는가를 검증한다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;설치 되는&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; SW&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;의 기능에 따라
폴더 및 설치의 다양한 관리방법 그리고 제 거의 완벽성을 확인한다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;11. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;무결성 테스트&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; (Integrity test)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;프로그래밍 언어의 문법과
구문을 준수했는가&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;시스템 자원을 적 절히 사용했는가와 같은 코드의 신뢰도 및 코드의 견고성을 검증한다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;12. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;부하 테스트&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;
(Load test)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;다양한 워크로드로 테스트함으로서 테스트 대상의 운영상의 한계를 평가하는 테스트를 말하며 테스트 대상의 인수 여부를
판단할 수 있다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;13. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;스트레스 테스트&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;b&gt; (Stress test)&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;부하&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;메모리 부족&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;특정 서비스나 하드웨어가 사용 불가능할 때와 같은 비정상적인 조건에서 테스트 대상이 기능을 제대로 수행 하는가를
테스트한다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;프로그램이 비정상적인 상황에 처했을 때를 위해 설계되었으며 비정상적인양&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;밀도&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;크기&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;자원 등을
요구한다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;14. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;볼륨테스트&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;b&gt; (Volume Test)&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;서버등의 데이터 처리하는 프로그램에 대해 데이터 양의 취급능력 을 테스트한다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;15&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;성능테스트&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;b&gt;
(Performance Test)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;개발된 어플리케이션이 주어진 환경 하에서 응답속도&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;처리량&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;처 리속도 등의 항목에 대하여 요구 되어진 목표치를 달성하는지에 대 한 테스트이다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;통합시험 전후 단계에서&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; SW&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;의 실시간 성능을 시험하기 위해 실시
하고&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;강도시험과 함께 실시되기도 한다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;엄격한 형식으로
자원의 이 용율 측정이 필요하다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;16. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;신뢰성 테스트&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; (Reliability Test)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;프로그램&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;시스템&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;또는 하드웨어 장치가 얼마만큼 실패 없이 주어 진 기능을 수행할 수 있는가 하는 능력의 측정&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;또는 장비가 총 운 용시간에 대해 정상적인 기능을 수행한 시간이 어느 정도인지를 나 타내는 가동률을 측정한다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;기능에 대하여 시스템 및 어플리케이션 이&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; Down&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;되지 않고 안정적으로
수행되는지를 확인하는 테스트이다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;17. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;사용자 인터페이스
테스트&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;b&gt; (User-Interface Test)&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;사용자 인터페이스가 일관성을 유지하는지는 표준을 준수하여
적 절히 설계되고 개발되었는지를 확인하는 테스트이다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;18.
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;회귀 테스트&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; (Regression Test)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;어플리케이션에 대하여 변경&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;결함 수정 또는 기능개선 등과 같은 원인으로 프로그램 코드에 대하여 물리적인 변경이 발생했을 경우&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;새로운 결함에 대비하여 이미 실시했던 테스트케이스에 대하여 전체 또는 일부를 재시험하는 테스트이다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;19. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;기억용량 테스트&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;
(Data-Storage Test)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;대용량의 데이터를 시스템에 입력시키고 그 반응을 시험하고 데이 터의 양이나 파일 크기가 변함에
따라 시스템의 반응의 변화가 있는 가를 시험하여 일상적 작업을 수행하는데 충분한 기억용량을 추정가 능 하도록 도와주는 테스트이다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;20. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;복구테스트&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;
(Recovery Test)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;하드웨어적 오류&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;회로오류&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;,
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;정전&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;프로그램 오류 등으로 야기되는 여타의 장애로부터 정해진 시간 내에 시스템이 어떻게
복구되는가를 시험한다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;특히 회계시스템에서는 어떠한 자료도 처리 도중 상실되 어서는 안되기 때문에 불의의
모든 사고로부터 시스템이 복구되는 것이 절대적으로 중요하며 두 가지 복구 시스템으로 나눈다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;(1) &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;자동복구
시스템인 경우 재 초기화&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;체크포인팅 메커니즘&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;데이터 복구&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;재시작 등이 정확 하게 수행되는지 테스트한다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;(2) &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;수동적 복구
시스템인 경우 복구까지 소요되는 평균시간이 수용가능한지 테스트한다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;21&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;보안 테스트&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;(Security Test)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;최근 컴퓨터 시스템에 대한
각종 위협의 증가로 인하여 권한이 없는 사용자의 데이터 액세스 및 수정을 방지하기 위한 보안 기능은 필수적이므로 시스템상의 보안기능이 업무환경에
적절한가를 시험한 다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;특히 외부 컴퓨터 네트워크와 커뮤니케이션이 있는 시스템인 경 우 커뮤니케이션
메시지의 기밀성&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;무결성&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;사용자 인증&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;접근통제&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;부인봉쇄 등의 보안 기능이 적절하게 제공되고 있는지를
테스트한다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;22.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;호환성 테스트&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;(Compatibility Test)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;현 시스템을 다른 하드웨어와 시스템 소프트웨어로 전환하거나 현재의 시스템에
중요한 새로운 기능을 추가하는 경우에 적용하며 변경사항으로 인해 발생할지도 모르는 결점에 대비하여 시스템의 모 든 부분을 테스트한다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;이를 위해 새로운 시스템의 시험결과와 비교 할 수 있는 현재 시스템의 시험 결과의 보존이 필요하다&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;</description>
      <category>소프트웨어 테스팅/테스트 기법</category>
      <category>QA</category>
      <category>Software Test</category>
      <category>소프트웨어 테스팅</category>
      <category>테스팅</category>
      <author>QA Engineer  - P군</author>
      <guid isPermaLink="true">https://parksh86.tistory.com/166</guid>
      <comments>https://parksh86.tistory.com/166#entry166comment</comments>
      <pubDate>Tue, 3 Jul 2018 22:51:17 +0900</pubDate>
    </item>
    <item>
      <title>[행동 패턴] 반복자 패턴 - Iterator</title>
      <link>https://parksh86.tistory.com/157</link>
      <description>&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;[행동 패턴] 반복자 패턴 - Iterator&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 500px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/260E8847586D8D8E03&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F260E8847586D8D8E03&quot; width=&quot;500&quot; height=&quot;275&quot; filename=&quot;500px-Iterator_UML_class_diagram.svg.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;반복자 패턴은 리스트와 같은 집합 객체들이 내부 표현부를 노출하지 않고 어떤 집합 객체에 속한 원소들을 순차적으로 접근하는 패턴입니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;(C++ 에서는 기본적으로 STL 컨테이너를 순회하는 iterator를 기본으로 제공합니다.)&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;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;내부 표현부를 노출하지 않고 어떤 집합 객체의 속한 원소들을 순차적으로 접근할 수 있는 방법을 제공합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;활용&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;- 정의한 방법과 다른 방법으로 원소들을 순회하고자 할 때&lt;/p&gt;&lt;p&gt;- 동일한 리스트에 대해서 하나 이상의 순회방법을 정의하고 싶을 때&lt;/p&gt;&lt;p&gt;- 객체 내부 표현 방식을 모르고도 집합 객체의 원소에 접근하고 싶을 때&lt;/p&gt;&lt;p&gt;- 집합 객체를 순회하는 당양한 방법을 지원하고 싶을 때&lt;/p&gt;&lt;p&gt;- 서로 다른 집합 객체 구조에 대해서도 동일한 방법으로 순회하고 싶을 때&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;장점&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;- 집합 객체의 다양한 순회 방법을 제공합니다.&lt;/p&gt;&lt;p&gt;- 집합 객체에 따라 하나 이상의 순회 방법이 제공됩니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;단점&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;- 순회 알고리즘 구현 부분에 따라서 캡슐화 전략을 위배할 수 도 있습니다.&lt;/p&gt;&lt;p&gt;(구현 부분에 주의가 필요합니다.)&lt;/p&gt;&lt;p&gt;- 사용자가 직접 반복자를 삭제하는 책임을 가져야 합니다.&lt;/p&gt;&lt;p&gt;(힙 메모리를 삭제하지 않아 오류가 발생할 수 있습니다.)&lt;/p&gt;&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;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;리스트 객체에 접근해서 새로운 내용을 삽입 / 삭제하거나 순회하는 내용을 반복자 객체에 정의하는 것으로 구현될 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;우선 List 클래스를 구현합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important; overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0; padding:0; border:none; background-color:#272727; border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px; border-right:2px solid #4f4f4f&quot;&gt;&lt;div style=&quot;margin:0; padding:0; word-break:normal; text-align:right; color:#aaa; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0&quot;&gt;&lt;div style=&quot;margin:0; padding:0; color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;class&lt;/span&gt;&amp;nbsp;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;class&lt;/span&gt;&amp;nbsp;List&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;public&lt;/span&gt;&amp;nbsp;:&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List(&lt;span style=&quot;color:#4be6fa&quot;&gt;long&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;size&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;DEFAULT_LIST_CAPACITY);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;long&lt;/span&gt;&amp;nbsp;Count();&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;amp;&lt;/span&gt;&amp;nbsp;Get(&lt;span style=&quot;color:#4be6fa&quot;&gt;long&lt;/span&gt;&amp;nbsp;index)&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;const&lt;/span&gt;;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#999999&quot;&gt;//....&amp;nbsp;이상의&amp;nbsp;자세&amp;nbsp;구현은&amp;nbsp;책의&amp;nbsp;부록이므로&amp;nbsp;삭제..../&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align:right; margin-top:-13px; margin-right:5px; font-size:9px; font-style:italic&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color: rgb(79, 79, 79);&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom; padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color: white;&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: rgb(79, 79, 79); border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Iterator의 인터페이스를 구현합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important; overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0; padding:0; border:none; background-color:#272727; border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px; border-right:2px solid #4f4f4f&quot;&gt;&lt;div style=&quot;margin:0; padding:0; word-break:normal; text-align:right; color:#aaa; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0&quot;&gt;&lt;div style=&quot;margin:0; padding:0; color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;class&lt;/span&gt;&amp;nbsp;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;class&lt;/span&gt;&amp;nbsp;Iterator&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;public&lt;/span&gt;&amp;nbsp;:&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;virtual&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;void&lt;/span&gt;&amp;nbsp;First()&amp;nbsp;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;0&lt;/span&gt;;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;virtual&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;void&lt;/span&gt;&amp;nbsp;Next()&amp;nbsp;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;0&lt;/span&gt;;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;virtual&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;bool&lt;/span&gt;&amp;nbsp;IsDone()&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;const&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;0&lt;/span&gt;;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;virtual&lt;/span&gt;&amp;nbsp;Item&amp;nbsp;CurrentItem()&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;const&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;0&lt;/span&gt;;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;protected&lt;/span&gt;&amp;nbsp;:&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Iterator();&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align:right; margin-top:-13px; margin-right:5px; font-size:9px; font-style:italic&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color: rgb(79, 79, 79);&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom; padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color: white;&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: rgb(79, 79, 79); border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Iterator의 서브클래스를 구현합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important; overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0; padding:0; border:none; background-color:#272727; border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px; border-right:2px solid #4f4f4f&quot;&gt;&lt;div style=&quot;margin:0; padding:0; word-break:normal; text-align:right; color:#aaa; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;16&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;17&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;18&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;19&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;20&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;21&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;22&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;23&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;24&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;25&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;26&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;27&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;28&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;29&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;30&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;31&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;32&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;33&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;34&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;35&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;36&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;37&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;38&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;39&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;40&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;41&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;42&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;43&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;44&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;45&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;46&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;47&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;48&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;49&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;50&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;51&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;52&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;53&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;54&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;55&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;56&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;57&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;58&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;59&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;60&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;61&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;62&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;63&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;64&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;65&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;66&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;67&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;68&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;69&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;70&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;71&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;72&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;73&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;74&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;75&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;76&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;77&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;78&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;79&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;80&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;81&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;82&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;83&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;84&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;85&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;86&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;87&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;88&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;89&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;90&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;91&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;92&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;93&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;94&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;95&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;96&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;97&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;98&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;99&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;100&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;101&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;102&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;103&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;104&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;105&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0&quot;&gt;&lt;div style=&quot;margin:0; padding:0; color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;//--&amp;nbsp;정방향&amp;nbsp;반복자&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;class&lt;/span&gt;&amp;nbsp;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;class&lt;/span&gt;&amp;nbsp;ListIterator&amp;nbsp;:&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;public&lt;/span&gt;&amp;nbsp;Iterator&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;public&lt;/span&gt;:&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ListIterator(&lt;span style=&quot;color:#ff3399&quot;&gt;const&lt;/span&gt;&amp;nbsp;List&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;*&lt;/span&gt;&amp;nbsp;aList);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;virtual&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;void&lt;/span&gt;&amp;nbsp;First()&amp;nbsp;override;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;virtual&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;void&lt;/span&gt;&amp;nbsp;Next()&amp;nbsp;override;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;virtual&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;bool&lt;/span&gt;&amp;nbsp;IsDone()&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;const&lt;/span&gt;&amp;nbsp;override;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;virtual&lt;/span&gt;&amp;nbsp;Item&amp;nbsp;CurrentItem()&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;const&lt;/span&gt;&amp;nbsp;override;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;private&lt;/span&gt;&amp;nbsp;:&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;const&lt;/span&gt;&amp;nbsp;List&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;Item&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;*&lt;/span&gt;&amp;nbsp;_list;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;long&lt;/span&gt;&amp;nbsp;_current;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;};&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;class&lt;/span&gt;&amp;nbsp;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;ListIterator&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;::ListIterator&amp;nbsp;(&lt;span style=&quot;color:#ff3399&quot;&gt;const&lt;/span&gt;&amp;nbsp;List&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;*&lt;/span&gt;&amp;nbsp;aList)&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;_list(aList)&amp;nbsp;,&amp;nbsp;_current(&lt;span style=&quot;color:#c10aff&quot;&gt;0&lt;/span&gt;)&amp;nbsp;{}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;class&lt;/span&gt;&amp;nbsp;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;void&lt;/span&gt;&amp;nbsp;ListIterator&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;::First()&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_current&amp;nbsp;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;0&lt;/span&gt;;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;class&lt;/span&gt;&amp;nbsp;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;void&lt;/span&gt;&amp;nbsp;ListIterator&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;::Next()&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_current&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;+&lt;/span&gt;;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;class&lt;/span&gt;&amp;nbsp;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#4be6fa&quot;&gt;bool&lt;/span&gt;&amp;nbsp;ListIterator&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;::IsDone()&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;const&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;return&lt;/span&gt;&amp;nbsp;_current&amp;nbsp;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;_list&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;Count();&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;class&lt;/span&gt;&amp;nbsp;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;Item&amp;nbsp;ListIterator&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;::CurrentItem()&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;const&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;if&lt;/span&gt;&amp;nbsp;(IsDone())&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;throw&lt;/span&gt;&amp;nbsp;IteratorOutBounds;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;return&lt;/span&gt;&amp;nbsp;_list&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;Get(_current);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;///---&amp;nbsp;역방향&amp;nbsp;반복자&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;class&lt;/span&gt;&amp;nbsp;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;class&lt;/span&gt;&amp;nbsp;ReverseListIterator&amp;nbsp;:&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;public&lt;/span&gt;&amp;nbsp;Iterator&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;public&lt;/span&gt;:&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ReverseListIterator(&lt;span style=&quot;color:#ff3399&quot;&gt;const&lt;/span&gt;&amp;nbsp;List&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;*&lt;/span&gt;&amp;nbsp;aList);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;virtual&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;void&lt;/span&gt;&amp;nbsp;First()&amp;nbsp;override;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;virtual&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;void&lt;/span&gt;&amp;nbsp;Next()&amp;nbsp;override;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;virtual&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;bool&lt;/span&gt;&amp;nbsp;IsDone()&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;const&lt;/span&gt;&amp;nbsp;override;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;virtual&lt;/span&gt;&amp;nbsp;Item&amp;nbsp;CurrentItem()&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;const&lt;/span&gt;&amp;nbsp;override;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;private&lt;/span&gt;:&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;const&lt;/span&gt;&amp;nbsp;List&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;Item&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;*&lt;/span&gt;&amp;nbsp;_list;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;long&lt;/span&gt;&amp;nbsp;_current;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;};&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;class&lt;/span&gt;&amp;nbsp;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;ReverseListIterator&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;::ReverseListIterator(&lt;span style=&quot;color:#ff3399&quot;&gt;const&lt;/span&gt;&amp;nbsp;List&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;*&lt;/span&gt;&amp;nbsp;aList)&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_list&amp;nbsp;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;aList;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_current&amp;nbsp;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;_list&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;Count();&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;class&lt;/span&gt;&amp;nbsp;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;void&lt;/span&gt;&amp;nbsp;ReverseListIterator&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;::First()&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_current&amp;nbsp;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;_list&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;Count();&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;class&lt;/span&gt;&amp;nbsp;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;void&lt;/span&gt;&amp;nbsp;ReverseListIterator&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;::Next()&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_current&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;-&lt;/span&gt;;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;class&lt;/span&gt;&amp;nbsp;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#4be6fa&quot;&gt;bool&lt;/span&gt;&amp;nbsp;ReverseListIterator&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;::IsDone()&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;const&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;return&lt;/span&gt;&amp;nbsp;_current&amp;nbsp;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;0&lt;/span&gt;;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;class&lt;/span&gt;&amp;nbsp;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;Item&amp;nbsp;ReverseListIterator&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;::CurrentItem()&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;const&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;if&lt;/span&gt;&amp;nbsp;(IsDone())&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;throw&lt;/span&gt;&amp;nbsp;IteratorOutBounds;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;return&lt;/span&gt;&amp;nbsp;_list&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;Get(_current);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align:right; margin-top:-13px; margin-right:5px; font-size:9px; font-style:italic&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color: rgb(79, 79, 79);&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom; padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color: white;&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: rgb(79, 79, 79); border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이후 List를 제작하고 Iterator를 연산의 인자로 출력해봅니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important; overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0; padding:0; border:none; background-color:#272727; border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px; border-right:2px solid #4f4f4f&quot;&gt;&lt;div style=&quot;margin:0; padding:0; word-break:normal; text-align:right; color:#aaa; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0&quot;&gt;&lt;div style=&quot;margin:0; padding:0; color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;void&lt;/span&gt;&amp;nbsp;PrintEmployees(Iterator&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;Employee&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;amp;&lt;/span&gt;&amp;nbsp;_data)&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;for&lt;/span&gt;&amp;nbsp;(_data.First();&amp;nbsp;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;!&lt;/span&gt;_data.IsDone();&amp;nbsp;_data.Next())&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_data.CurrentItem()&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;Print();&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align:right; margin-top:-13px; margin-right:5px; font-size:9px; font-style:italic&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color: rgb(79, 79, 79);&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom; padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color: white;&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: rgb(79, 79, 79); border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important; overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0; padding:0; border:none; background-color:#272727; border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px; border-right:2px solid #4f4f4f&quot;&gt;&lt;div style=&quot;margin:0; padding:0; word-break:normal; text-align:right; color:#aaa; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0&quot;&gt;&lt;div style=&quot;margin:0; padding:0; color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;void&lt;/span&gt;&amp;nbsp;main()&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;Employee&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;*&lt;/span&gt;&amp;nbsp;employees;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ListIterator&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;Employee&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;foward(employees);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ReverseListIterator&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;Employee&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;backward(employees);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PrintEmployees(foward);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;cout&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;----------&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;endl&lt;/span&gt;;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PrintEmployees(backward);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align:right; margin-top:-13px; margin-right:5px; font-size:9px; font-style:italic&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color: rgb(79, 79, 79);&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom; padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color: white;&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: rgb(79, 79, 79); border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;[결과]&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 348px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/241B9245586DA6F242&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F241B9245586DA6F242&quot; width=&quot;348&quot; height=&quot;236&quot; filename=&quot;1.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이제 구현 표준을&amp;nbsp;벗어나는 상황을 방지하면서, List를 변형해봅니다.&lt;/p&gt;&lt;p&gt;바람직한 방법으로는 List 인터페이스를 표준화한 abstrctList 클래스를 만드는 것이 바람직합니다. 그리고 난후에 다양한 구현을 abstrctList&amp;nbsp;의 서브클래스로 만듭니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important; overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0; padding:0; border:none; background-color:#272727; border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px; border-right:2px solid #4f4f4f&quot;&gt;&lt;div style=&quot;margin:0; padding:0; word-break:normal; text-align:right; color:#aaa; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0&quot;&gt;&lt;div style=&quot;margin:0; padding:0; color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;template&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;class&lt;/span&gt;&amp;nbsp;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;class&lt;/span&gt;&amp;nbsp;AbstractList&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;public&lt;/span&gt;&amp;nbsp;:&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;virtual&lt;/span&gt;&amp;nbsp;Iterator&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;lt;&lt;/span&gt;Item&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;CreateIterator()&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;const&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#aaffaa&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;0&lt;/span&gt;;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#999999&quot;&gt;//..&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align:right; margin-top:-13px; margin-right:5px; font-size:9px; font-style:italic&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color: rgb(79, 79, 79);&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom; padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color: white;&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: rgb(79, 79, 79); border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;[후기]&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;책에 나와 있지도 않고&amp;nbsp;누락된 코드는 작성자가 직접 작성해야 했습니다.ㅠ_ㅠ..&lt;/p&gt;&lt;p&gt;혹시나 책을 사시는 분들은 참고해주세요..&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;[참고] -&amp;nbsp;&lt;/b&gt;GOF의 디자인 패턴&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>프로그래밍 관련/디자인 패턴</category>
      <category>Iterator</category>
      <category>디자인 패턴</category>
      <category>반복자 패턴</category>
      <author>QA Engineer  - P군</author>
      <guid isPermaLink="true">https://parksh86.tistory.com/157</guid>
      <comments>https://parksh86.tistory.com/157#entry157comment</comments>
      <pubDate>Thu, 5 Jan 2017 12:02:14 +0900</pubDate>
    </item>
  </channel>
</rss>