<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Woody Blog</title>
    <link>https://dev-woody.tistory.com/</link>
    <description>안녕하세요. 
Woody의 개발 Blog입니다.</description>
    <language>ko</language>
    <pubDate>Sun, 5 Apr 2026 17:04:12 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>dev.Woody</managingEditor>
    <image>
      <title>Woody Blog</title>
      <url>https://tistory1.daumcdn.net/tistory/5065307/attach/d83ed4e3b98a4deebc0122f012d4df4f</url>
      <link>https://dev-woody.tistory.com</link>
    </image>
    <item>
      <title>TDD(Test-Driven-Development) 방법론이란?</title>
      <link>https://dev-woody.tistory.com/87</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;1.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;TDD&lt;/span&gt;&lt;span&gt;에 관한 조사&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;A.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;테스트 주도 개발이란&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;?&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;테스트 주도 개발&lt;/span&gt;&lt;span&gt;(test-driven development,&amp;nbsp;TDD)&lt;/span&gt;&lt;span&gt;은 소프트웨어 개발 방법론 중의 하나로&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;선 개발 후 테스트 방식이 아닌 선 테스트 후 개발 방식의&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;프로그래밍&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;방법을 말한다&lt;/span&gt;&lt;span&gt;.&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다시 말해 먼저 자동화된 테스트 코드를 작성한 후 테스트를 통과하기 위한 코드를 개발하는 방식의 개발 방식을 말한다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;a href=&quot;applewebdata://12FB4B0A-E709-4D2D-B661-F3F521B24133#_ftn1&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[1]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;TDD&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;에서는 제품의 기능 구현을 위한 코드와 별개로&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해당 기능이 정상적으로 움직이는지 검증하기 위한 테스트 코드를 작성한다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이를 통해 테스트가 실패할 경우&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트를 통과하기 위한 최소한으로 코드를 개선한다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;최종적으로 테스트에 성공한 코드를 리팩토링 하는 과정을 거친다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;a href=&quot;applewebdata://12FB4B0A-E709-4D2D-B661-F3F521B24133#_ftn2&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[2]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;TDD&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 잘 사용하면&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;전체 코드를 완성하기 전에 기능 단위로 문제를 개선할 수 있게끔 피드백이 오기 때문에&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;버그를 보다 빠르고 효과적으로 개선할 수 있다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;B.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TDD&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;개발의 장단점&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TDD&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;는 객체지향적인 코드 개발이 가능하다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;. TDD&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;는 모듈테스트 기반으로 개발해 나가므로 각 기능별로 모듈화가 이루어진다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;각 테스트 코드를 작성하기 위해서 각 모듈들은 의존성과 종속성이 낮아지는 모듈로 구성되게 된다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;. TDD&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;는 설계 수정시간 또한 단축된다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 코드를 먼저 작성하기 때문에&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;최초의 설계안을 만족하게 되며&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;입출력의 구조와 기능을 보다 명확하게 정의하게 된다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이에 따라 계획하지 않았던 코드가 추가 되는 오버 엔지니어링을 방지한다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;. TDD&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;는 테스트를 통과할 최소한의 기능만 요구하기 때문이다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이렇게 단위 테스트 기반으로 테스트 코드를 작성하게 되면 리팩토링이 용이하다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 과정이 모두 남기때문에 테스트 문서를 대체할 수 있다는 장점이 있다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;C.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TDD&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;와 전통적인 테스팅의 차이&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TDD&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;와 전통적인 테스트 모두 테스트에서 하나이상의 결함을 찾아 문제를 발견한다는 점에서 동일하지만&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;, TDD&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;는 테스트가 제대로 작동하는지 확인하는 코드에 더 중점을 두게 되고&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기존의 테스트는 테스트 케이스 테스트가 정상적으로 작동하는지 안하는지에 관해서 테스트 케이스 디자인에 더 초점을 맞춘다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;, TDD&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;는 모든 테스트를 달성해야 하고&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기존 테스트는 단일 코드별로 테스트가 진행된다는 점에서 차이가 있다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;D.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TDD&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;의 세가지 법칙&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TDD&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 만족하기 위해서는 다음 세가지 법칙을 만족해야 한다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;1.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실패한 단위 테스트를 통과하기 위한 경우를 제외하고는 코드를 작성해서는 안된다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;2.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실패할 때까지 충분한 테스트 코드를 작성해야 한다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컴파일 오류도 실패이다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;3.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;단위 테스트를 통과하기 위한 코드이외의 추가 코드는 작성해서 안된다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;E.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TDD&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;개발 과정&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TDD&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 개발하기 위해서는 테스트를 만들고 그에 맞는 코드를 쓰기 위해서 반복해야 한다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이를 간단하게 도식화 하여 나타내면 다음과 같다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;1.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트를 만든다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;2.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실패할때까지 모든 테스트를 실행한다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;3.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실패하면 코드를 작성한다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;4.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;반복한다&lt;/span&gt;&lt;span style=&quot;color: #000000;&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;407&quot; data-origin-height=&quot;508&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dofKiW/btrBhv4ejIa/EABSDbW98LOEMDLAKKbez0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dofKiW/btrBhv4ejIa/EABSDbW98LOEMDLAKKbez0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dofKiW/btrBhv4ejIa/EABSDbW98LOEMDLAKKbez0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdofKiW%2FbtrBhv4ejIa%2FEABSDbW98LOEMDLAKKbez0%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;292&quot; height=&quot;364&quot; data-origin-width=&quot;407&quot; data-origin-height=&quot;508&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이러한 과정을 흔히&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TDD&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;주기라고 부르며 세가지의 단계로 나눈다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;. Red&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;는 테스트 실패를 의미하고&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;, Green&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;은 테스트 성공&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;, Refactor&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;은 리팩토링이라고 부른다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&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-origin-width=&quot;688&quot; data-origin-height=&quot;324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RkQxj/btrBgEt45FM/gp0ktjjkA0Bkmvd8HkZ6u1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RkQxj/btrBgEt45FM/gp0ktjjkA0Bkmvd8HkZ6u1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RkQxj/btrBgEt45FM/gp0ktjjkA0Bkmvd8HkZ6u1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRkQxj%2FbtrBgEt45FM%2Fgp0ktjjkA0Bkmvd8HkZ6u1%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;522&quot; height=&quot;246&quot; data-origin-width=&quot;688&quot; data-origin-height=&quot;324&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Red&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;의 경우 테스트 실패를 의미한다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;. TDD&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;에서는 실패하는 것이 확인 되어야&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트가 검증력을 가진다고 신뢰할 수 있다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실패의 이유는 아직 코드가 변경되지 않았기 때문이다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이때는 구체적인 하나의 요구사항을 검증하는 하나의 테스트를 추가하고 추가된 테스트가 실패하는지 확인한다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;. Green&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;의 경우 테스트 성공을 의미한다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;. TDD&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;에서 추가된 테스트를 포함하여 모든 테스트가 성공하게끔 운영코드를 변경한다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 성공은 모든 요구사항 만족을 의미한다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트를 성공하기 위한 코드만 작성하여 오버엔지니어링을 방지한다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;. Refactor&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;의 경우 코드 베이스를 정리하고 인터페이스 뒤에 숨어있는 구현 설계를 개선하게 된다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가독성&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;적용성&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;성능등을 고려하여&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;코드를 수정한다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;세부흐름으로 보면 아래와 같다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;a href=&quot;applewebdata://12FB4B0A-E709-4D2D-B661-F3F521B24133#_ftn3&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[3]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&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-origin-width=&quot;344&quot; data-origin-height=&quot;172&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chK62j/btrBgV99P8L/os2E9davpT5wFLrGvmERM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chK62j/btrBgV99P8L/os2E9davpT5wFLrGvmERM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chK62j/btrBgV99P8L/os2E9davpT5wFLrGvmERM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchK62j%2FbtrBgV99P8L%2Fos2E9davpT5wFLrGvmERM1%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;483&quot; height=&quot;242&quot; data-origin-width=&quot;344&quot; data-origin-height=&quot;172&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&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-origin-width=&quot;1024&quot; data-origin-height=&quot;2001&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbXyb1/btrBgWnIqmd/7K4EyDK5rv5QHI5iupS9w1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbXyb1/btrBgWnIqmd/7K4EyDK5rv5QHI5iupS9w1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbXyb1/btrBgWnIqmd/7K4EyDK5rv5QHI5iupS9w1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbXyb1%2FbtrBgWnIqmd%2F7K4EyDK5rv5QHI5iupS9w1%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;494&quot; height=&quot;965&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;2001&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;[TDD&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;의 상세 흐름&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;]&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;F.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TDD&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 기법&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;i.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;수동 테스트&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;회사에서는 보통&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;QA&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;라고 부르는 전문 담당자들이&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;UI&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 활용해 기능을 검증한다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사람이 검증하기 때문에&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용자와 가장 가까운 관점에서 테스트가 가능하며&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;단위 테스트 보다는 전체 코드를 검증할때 주로 이용된다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하지만&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;비용이 높고 결과 변동이 크다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;ii.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 자동화&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사람이 직접 테스트 하지 않고&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기능을 검증하는 코드를 작성하여 이용하는 방식이다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실행비용이 낮고 결과의 신뢰도가 높다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하지만&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 코드를 작성하는 프로그래머의 역량에 따라 신뢰도가 달라진다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;iii.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;단위 테스트&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하위 시스템을 대상으로 기능을 검증하는 테스트이다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;일반적으로 클래스 또는 메소드&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;함수 수준으로 정해진다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;전체 시스템을 배치해놓고 진행하지 않으므로&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;비용이 상대적으로 낮은 편이다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;단위 안에서 버그가 있다는 걸 상대적으로 자세히 알 수 있다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서 프로그래머 입장에서는 문제 해결을 위해 필요한 피드백을 적절하게 받을 수 있다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하지만 전체 시스템의 이상 여부를 판단하는 신뢰도는 낮아진다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;iv.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;통합 테스트&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;단위 테스트와 달리 외부 라이브러리와 같이 개발자가 변경할 수 없는 부분까지 묶어 검증할 때 사용한다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이는&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;DB&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;에 접근하거나 전체 코드와 다양한 환경이 제대로 작동하는지 확인하는데 필요한 모든 작업을 수행할 수 있다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;단위 테스트보다 테스트 단위가 커지므로 어디서 에러가 발생했는 지 확인하기는 어렵다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;v.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인수 테스트&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인수 테스트는 비즈니스 관점에서의 테스트이다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;배치된 시스템을 대상으로 검증하는 방식으로&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;주로 클라이언트가 의뢰한 소프트웨어를 최종적으로 사용할 수 있는 수준인지 점검하는 테스트이다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;전체 시스템의 이상 여부가 없는지 확인하며&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용자 관점으로 체크하기 때문에 신뢰도가 높은 테스트 방법이다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하지만&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;비용이 높고 개발자 입장에서 피드백을 받기 어렵다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;b&gt;&lt;/b&gt;&lt;a href=&quot;applewebdata://12FB4B0A-E709-4D2D-B661-F3F521B24133#_ftn4&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[4]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&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;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;G.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TDD&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;활용 툴&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;574&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width=&quot;137&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;xUnit&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이름&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;139&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해당 언어&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;299&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;관련 사이트&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;137&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CUnit&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;139&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;C&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;299&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;http://cunit.sourceforge.net/&quot;&gt;http://cunit.sourceforge.net/&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;137&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CppUnit&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;139&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;C++&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;299&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://sourceforge.net/projects/cppunit/&quot;&gt;https://sourceforge.net/projects/cppunit/&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;137&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;PyUnit&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;139&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Python&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;299&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;http://pyunit.sourceforge.net/&quot;&gt;http://pyunit.sourceforge.net/&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;137&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;JUnit&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;139&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Java&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;299&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;http://junit.org/&quot;&gt;http://junit.org/&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&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;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;H.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TDD&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;는 옳은가&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;?&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2014&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;년&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Ruby on Rails&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;의 개발자로 유명한&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;David Heinemeier Hansson&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lsquo;TDD is dead. Long live testing.'&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;관한 논쟁이 제기되었다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;주요 쟁점을 정리해보면&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;, TDD&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가 설계를 망친다는 것이다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트를 먼저 작성하고 코드를 작성하는 것은 시간에 쫓기는 개발자에게&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;단순히 유닛 테스트를 통과하기 쉬운 설계를 하게 만든다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;. Mock&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이란&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TDD&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;에서 비용과 시간이 많이 들거나 의존성이 높아 실제 객체를 만들기 어려울떄 사용하는 가상 객체이다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;, TDD&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;에서 유닛 테스트만 너무 강조되는 나머지&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;, mock&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;에만 의존한&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;형식적인 테스트로 이용된다는 것이다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;유닛테스트 외에도 통합 테스트나 시스템 테스트가 필요하다고 이야기 한다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;I.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TDD&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;와&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;BDD&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;BDD&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;는&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;Behaviour Driven Development&quot;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;. BDD&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;는 시나리오를 기반으로 테스트 케이스를 작성하며 함수 단위 테스트를 권장하지 않는다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 시나리오는 개발자가 아닌 사람이 봐도 이해할 수 있을 정도의 레벨을 권장한다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;a href=&quot;applewebdata://12FB4B0A-E709-4D2D-B661-F3F521B24133#_ftn6&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[6]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;두 방식의 차이를 간단하게 표로 정리하면 다음과 같다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&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 width=&quot;91&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;구분&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;262&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TDD(&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 주도 개발&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;262&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;BDD(&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;행동 주도 개발&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;91&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;중점&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;262&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;소프트웨어 기능이 어떻게 작동해야 하는지에 대한 개발자의 의견에 중점&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;262&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;애플리케이션이 어떻게 작동하기를 원하는지에 대한 사용자의 의견에 중점&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;91&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;관점&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;262&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;프로그래머의 관점&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;262&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;고객의 관점&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;91&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;접근&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;262&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;저수준 접근&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;262&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;고수준 접근&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용자 접근 방식&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;91&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;확인사항&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;262&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기능 구현이 올바른지 확인&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;262&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;원하는 방식으로 작동하는지 확인&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&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;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;J.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TDD&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;에 관한 고찰&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TDD&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;방법론에 대해서 반대하는 입장에서는 검증하기 위해 테스트 코드를 짰는데&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 코드를 검증하는 테스트 코드는 필요하지 않느냐의 순환 논리를 지적한다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트도 사람이 만드는 것이기에 다양한 환경에서의 아웃풋은 모두 동일하지 않을 것이다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하지만&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TDD&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 이용하게 되면&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;전체 코드를 완성하기 전에 기능 단위로 문제를 개선할 수 있게끔 빠른 피드백을 받을 수 있어&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;특정상황에서는 좋은 전략이 될 수 있을 것이라 생각한다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;br /&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;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;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;참고자료&lt;/b&gt;&lt;/h3&gt;
&lt;div id=&quot;ftn1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;applewebdata://12FB4B0A-E709-4D2D-B661-F3F521B24133#_ftnref1&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[1]'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&lt;a href=&quot;http://www.incodom.kr/%ED%85%8C%EC%8A%A4%ED%8A%B8_%EC%A3%BC%EB%8F%84_%EA%B0%9C%EB%B0%9C?openLinerExtension=true&quot;&gt;http://www.incodom.kr/%ED%85%8C%EC%8A%A4%ED%8A%B8_%EC%A3%BC%EB%8F%84_%EA%B0%9C%EB%B0%9C?openLinerExtension=true&lt;/a&gt;&amp;rsquo; 2021. 10. 11.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;확인함&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;ftn2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;applewebdata://12FB4B0A-E709-4D2D-B661-F3F521B24133#_ftnref2&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[2]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;a href=&quot;https://media.fastcampus.co.kr/knowledge/dev/tdd/?openLinerExtension=true&quot;&gt;https://media.fastcampus.co.kr/knowledge/dev/tdd/?openLinerExtension=true&lt;/a&gt;&amp;rsquo; 2021. 10. 11.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;확인함&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;ftn3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;applewebdata://12FB4B0A-E709-4D2D-B661-F3F521B24133#_ftnref3&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[3]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;a href=&quot;https://fastcampus.co.kr/story_article_tdd&quot;&gt;https://fastcampus.co.kr/story_article_tdd&lt;/a&gt;&amp;rsquo; 2021. 10. 11.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;확인함&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;ftn4&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;applewebdata://12FB4B0A-E709-4D2D-B661-F3F521B24133#_ftnref4&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[4]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;a href=&quot;https://fastcampus.co.kr/story_article_tdd&quot;&gt;https://fastcampus.co.kr/story_article_tdd&lt;/a&gt;&amp;rsquo; 2021. 10. 11.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;확인함&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;ftn5&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;applewebdata://12FB4B0A-E709-4D2D-B661-F3F521B24133#_ftnref5&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[5]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;a href=&quot;https://nesoy.github.io/articles/2017-02/JUnit#3-junit-function-flow&quot;&gt;https://nesoy.github.io/articles/2017-02/JUnit#3-junit-function-flow&lt;/a&gt;&amp;rsquo; 2021. 10. 11.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;확인함&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;ftn6&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;applewebdata://12FB4B0A-E709-4D2D-B661-F3F521B24133#_ftnref6&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[6]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lsquo;&lt;a href=&quot;https://www.popit.kr/bdd-behaviour-driven-development&quot;&gt;https://www.popit.kr/bdd-behaviour-driven-development&lt;/a&gt;&lt;/span&gt;&lt;span&gt;에&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;대한&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;간략한&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;정리&lt;/span&gt;&lt;span&gt;/&amp;rsquo; 2021. 10. 11.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;확인함&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Computer Science/Software Engineering</category>
      <author>dev.Woody</author>
      <guid isPermaLink="true">https://dev-woody.tistory.com/87</guid>
      <comments>https://dev-woody.tistory.com/87#entry87comment</comments>
      <pubDate>Wed, 4 May 2022 17:56:42 +0900</pubDate>
    </item>
    <item>
      <title>IPFS(InterPlanetary File System)란?</title>
      <link>https://dev-woody.tistory.com/80</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;IPFS란?&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;IPFS는 파일, 웹 사이트, 응용 프로그램 및 데이터를 저장하고 액세스하기 위한 분산 시스템이다. 먼저,&amp;nbsp;&lt;/span&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;&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;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Aardvark&quot;&gt;https://en.wikipedia.org/wiki/Aardvark&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1649790092608&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;Aardvark - Wikipedia&quot; data-og-description=&quot;Medium-sized, burrowing, nocturnal mammal native to Africa The aardvark ( ARD-vark; Orycteropus afer) is a medium-sized, burrowing, nocturnal mammal native to Africa.[2][3] It is the only living species of the order Tubulidentata,[4][5] although other preh&quot; data-og-host=&quot;en.wikipedia.org&quot; data-og-source-url=&quot;https://en.wikipedia.org/wiki/Aardvark&quot; data-og-url=&quot;https://en.wikipedia.org/wiki/Aardvark&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/iG2S9/hyN1FlOQY9/eTBGvmWn3ZG8PKJrxbmFQ0/img.jpg?width=1200&amp;amp;height=800&amp;amp;face=0_0_1200_800,https://scrap.kakaocdn.net/dn/GIhgE/hyN1BX2qqa/HNPS6lowRGReVANAX6ArC0/img.jpg?width=800&amp;amp;height=533&amp;amp;face=0_0_800_533,https://scrap.kakaocdn.net/dn/cprV10/hyN1J2QsRA/ticYdpgY12kVcLd8mzaBKK/img.jpg?width=640&amp;amp;height=427&amp;amp;face=0_0_640_427&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Aardvark&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://en.wikipedia.org/wiki/Aardvark&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/iG2S9/hyN1FlOQY9/eTBGvmWn3ZG8PKJrxbmFQ0/img.jpg?width=1200&amp;amp;height=800&amp;amp;face=0_0_1200_800,https://scrap.kakaocdn.net/dn/GIhgE/hyN1BX2qqa/HNPS6lowRGReVANAX6ArC0/img.jpg?width=800&amp;amp;height=533&amp;amp;face=0_0_800_533,https://scrap.kakaocdn.net/dn/cprV10/hyN1J2QsRA/ticYdpgY12kVcLd8mzaBKK/img.jpg?width=640&amp;amp;height=427&amp;amp;face=0_0_640_427');&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;Aardvark - Wikipedia&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Medium-sized, burrowing, nocturnal mammal native to Africa The aardvark ( ARD-vark; Orycteropus afer) is a medium-sized, burrowing, nocturnal mammal native to Africa.[2][3] It is the only living species of the order Tubulidentata,[4][5] although other preh&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;en.wikipedia.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;font-family: 'Noto Sans Light';&quot;&gt;이 URL을 브라우저의 주소 표시줄에 넣으면 컴퓨터가 나라 반대편(혹은 지구) 어딘가에 있는 위키피디아의 서버 &amp;nbsp;중 하나에 땅돼지 페이지를 요청하게 된다. 다음 요청에 대한 페이지를 받아서 정보를 획득할 수 있다. 하지만 이렇게 지구 반대편에 있는 서버에 요청하는 것이외에 IPFS에 있는 미러된 파일을 가져오는 것도 가능하다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt; IPFS에 저장된 위키피디아의 미러된 파일이 있는데, 대신 그걸 사용할 수 있다. IPFS를 사용하는 경우 아래와 같은 링크를 통해 위의 위키피디아 문서를 가져올 수 있다.&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;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki/Aardvark.html&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;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;위의 링크를 보는 가장 쉬운 방법은 IPFS 게이트웨이를 통해 브라우저에서 링크를 여는 것이다. 위의 링크 시작 부분에&amp;nbsp;&lt;a href=&quot;https://ipfs.io을&quot;&gt;https://ipfs.io&lt;/a&gt;&amp;nbsp;을&amp;nbsp;추가하기만 하면 페이지를 바로 볼 수 있다.&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;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;IPFS는 웹 페이지의 위치가 아닌 콘텐츠를 기반으로 찾는 방법을 알고 있다. 따라서, &amp;nbsp;IPFS로 분류된 땅돼지 정보는 URL 중간에 있는 숫자(QmXo&amp;hellip;)로 표시되며, 위키피디아의 서버중 하나에 페이지를 요청하는 대신 IPFS를 사용하여 전세계 많은 컴퓨터에 페이지를 공유하도록 요청한다. 따라서 위키피디아 서버뿐만 아니라 동일한 웹페이지를 가진 사람에게서 페이지를 받아볼 수 있다.&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;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;또한, IPFS를 사용하면 다른 사람이 보낸 파일만 다운로드하는 것이 아니라 컴퓨터가 배포하도록 한다. 근처에 있는 다른 사용자가 위키피디아 페이지를 필요로 할 때, IPFS를 사용하는 다른 누군가로부터와 마찬가지로 내 컴퓨터에서의 파일을 보낼 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;IPFS는 웹 페이지뿐만 아니라 문서, 이메일, 심지어 데이터베이스 레코드 등 컴퓨터가 저장할 수 있는 모든 파일에서 사용이 가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;분산처리&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;만약 누군가가 위키피디아의 웹 서버가 공격받아 서버가 동작하지도 않아도, IPFS를 사용하면 언제나 웹 페이지를 얻는 것이 가능하다. IPFS는 여러곳에서 파일을 가져오기 때문에, 콘텐츠를 검열하거나 차단하는 것이 더 어렵다. 웹 서버가 멀리 있는 경우 근처에 있는 사용자로 부터 정보를 받아오는 것이 가능하므로 웹 서버 속도를 높이는 것도 가능하다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;내용 주소 지정&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;a href=&quot;https://proto.school/content-addressing/&quot;&gt;ProtoSchool의 튜토리얼인 분산형 웹 상의 콘텐츠 주소 지정&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1649790571028&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;DWeb Tutorial | Content Addressing on the Decentralized Web&quot; data-og-description=&quot;Learn how hashing and content addressing enable verifiable data sharing with peers on the decentralized web.&quot; data-og-host=&quot;proto.school&quot; data-og-source-url=&quot;https://proto.school/content-addressing/&quot; data-og-url=&quot;https://proto.school/content-addressing/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/hRXd2/hyN1Km8Ysk/ZnIFTAVRuJVt1pjDIHymC1/img.jpg?width=1199&amp;amp;height=674&amp;amp;face=0_0_1199_674,https://scrap.kakaocdn.net/dn/xbZU4/hyN1DhdYv2/RKkljyQEk97VN8aTZQNm1K/img.jpg?width=1199&amp;amp;height=674&amp;amp;face=0_0_1199_674&quot;&gt;&lt;a href=&quot;https://proto.school/content-addressing/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://proto.school/content-addressing/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/hRXd2/hyN1Km8Ysk/ZnIFTAVRuJVt1pjDIHymC1/img.jpg?width=1199&amp;amp;height=674&amp;amp;face=0_0_1199_674,https://scrap.kakaocdn.net/dn/xbZU4/hyN1DhdYv2/RKkljyQEk97VN8aTZQNm1K/img.jpg?width=1199&amp;amp;height=674&amp;amp;face=0_0_1199_674');&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;DWeb Tutorial | Content Addressing on the Decentralized Web&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Learn how hashing and content addressing enable verifiable data sharing with peers on the decentralized web.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;proto.school&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;font-family: 'Noto Sans Light';&quot;&gt;위&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;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki/Aardvark.html&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;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;/ipfs/ 뒤에 이렇게 문자가 뒤섞여 있는 것을 콘텐츠 식별자라고 하며 IPFS가 여러 곳에서 콘텐츠를 가져올 수 있는 방법이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;다음과 같은 기존 URL 및 파일 경로는&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Aardvark&quot;&gt;https://en.wikipedia.org/wiki/Aardvark&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;/Users/Alice/Documents/term_paper.doc&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;C:\\Users\\Joe\\My Documents\\project_sprint_presentation.ppt&lt;/span&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;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&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;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;따라서,&amp;nbsp;&lt;b&gt;IPFS는 위치 기반인 대신 파일 내용이나 내용에 따라 파일의 주소를 지정&lt;/b&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;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;  분산된 파일 처리 시스템으로 주소의 위치가 아닌 콘텐츠를 기준으로 여러 컴퓨터에서 위치를 찾아간다는 점이 차별점이고, &amp;nbsp;일부 Torrent와 유사한 점이 존재한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>dev.Woody</author>
      <guid isPermaLink="true">https://dev-woody.tistory.com/80</guid>
      <comments>https://dev-woody.tistory.com/80#entry80comment</comments>
      <pubDate>Wed, 13 Apr 2022 04:10:39 +0900</pubDate>
    </item>
    <item>
      <title>Mac Mysql root계정 비밀번호 분실 해결하기</title>
      <link>https://dev-woody.tistory.com/75</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;MySQL 로고.png&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;2000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TxDuN/btrqvVevd5H/IJQE5stvv6EY7ORUD5Mdk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TxDuN/btrqvVevd5H/IJQE5stvv6EY7ORUD5Mdk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TxDuN/btrqvVevd5H/IJQE5stvv6EY7ORUD5Mdk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTxDuN%2FbtrqvVevd5H%2FIJQE5stvv6EY7ORUD5Mdk0%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;3000&quot; height=&quot;2000&quot; data-filename=&quot;MySQL 로고.png&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;2000&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;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;brew unistall mysql을 통해서 Mysql을 지우고 다시 깔았지만, 비밀번호는 그대로 남아있어서 사용이 불가능했었다.&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;우선 실행중인 상태의 Mysql 서버를 종료시켜준다.&lt;/p&gt;
&lt;pre id=&quot;code_1641911641750&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql.server stop&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;size16&quot;&gt;다음 비밀번호 없이 mysql에 접속하기 위하여, 아래 명령어를 입력해준다.&lt;/p&gt;
&lt;pre id=&quot;code_1641911681486&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysqld_safe --skip-grant-tables&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 root유저로 Mysql에 접속하여 준다.&lt;/p&gt;
&lt;pre id=&quot;code_1641911760968&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql -u root&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 mysql db를 사용하도록 설정한다.&lt;/p&gt;
&lt;pre id=&quot;code_1641911850299&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;use mysql;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 비밀번호를 null로 초기화 시켜준다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;UPDATE user SET authentication_string=null WHERE User='root';&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 권한을 업데이트해준다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;FLUSH PRIVILEGES;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 exit 명령어를 통해 나갔다가 다시 접속하면 문제 없이 초기화 되어있는 것을 확인 할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1641911954823&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;exit;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Database/MySQL</category>
      <author>dev.Woody</author>
      <guid isPermaLink="true">https://dev-woody.tistory.com/75</guid>
      <comments>https://dev-woody.tistory.com/75#entry75comment</comments>
      <pubDate>Tue, 11 Jan 2022 23:40:30 +0900</pubDate>
    </item>
    <item>
      <title>Mac에서 Mysql 설치하고 실행하기</title>
      <link>https://dev-woody.tistory.com/74</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;MySQL 로고.png&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;2000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tHD8D/btrqu1eXFGT/BqFmF1WujWKHva0IOkfQX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tHD8D/btrqu1eXFGT/BqFmF1WujWKHva0IOkfQX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tHD8D/btrqu1eXFGT/BqFmF1WujWKHva0IOkfQX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtHD8D%2Fbtrqu1eXFGT%2FBqFmF1WujWKHva0IOkfQX1%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;3000&quot; height=&quot;2000&quot; data-filename=&quot;MySQL 로고.png&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;2000&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;size16&quot;&gt;RDB를 너무 오랫만에 사용하다보니 비밀번호와 세팅을 모두 까먹어버렸다. &amp;nbsp;찾는거 보다 지우고 다시 까는 것이 빠를 것 같아서, mysql을 재설치 해보려고 한다. M1 mac에 설치할 예정이다.&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;당연히 맥북을 사용하면, brew를 통해서 mysql을 설치해준다.&lt;/p&gt;
&lt;pre id=&quot;code_1641910666104&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;brew instll mysql&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-01-11 오후 11.18.21.png&quot; data-origin-width=&quot;1620&quot; data-origin-height=&quot;1106&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OhZKM/btrquiuCXYc/GLE41oVPOK3rqIwuQwtSfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OhZKM/btrquiuCXYc/GLE41oVPOK3rqIwuQwtSfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OhZKM/btrquiuCXYc/GLE41oVPOK3rqIwuQwtSfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOhZKM%2FbtrquiuCXYc%2FGLE41oVPOK3rqIwuQwtSfk%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;1620&quot; height=&quot;1106&quot; data-filename=&quot;스크린샷 2022-01-11 오후 11.18.21.png&quot; data-origin-width=&quot;1620&quot; data-origin-height=&quot;1106&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&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;size16&quot;&gt;다음으로 설치가 잘 되었는지를 확인하기 위해서, mysql을 실행시켜보자.&lt;/p&gt;
&lt;pre id=&quot;code_1641910965902&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql.server start&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-01-11 오후 11.20.00.png&quot; data-origin-width=&quot;1532&quot; data-origin-height=&quot;1018&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DP1Kw/btrquiOVLco/anesn0ulXWQk4daDvXfxT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DP1Kw/btrquiOVLco/anesn0ulXWQk4daDvXfxT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DP1Kw/btrquiOVLco/anesn0ulXWQk4daDvXfxT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDP1Kw%2FbtrquiOVLco%2Fanesn0ulXWQk4daDvXfxT1%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;1532&quot; height=&quot;1018&quot; data-filename=&quot;스크린샷 2022-01-11 오후 11.20.00.png&quot; data-origin-width=&quot;1532&quot; data-origin-height=&quot;1018&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&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;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Database/MySQL</category>
      <author>dev.Woody</author>
      <guid isPermaLink="true">https://dev-woody.tistory.com/74</guid>
      <comments>https://dev-woody.tistory.com/74#entry74comment</comments>
      <pubDate>Tue, 11 Jan 2022 23:26:14 +0900</pubDate>
    </item>
    <item>
      <title>MDE, MBD: Model-Based Development)의 사례 및 지원도구</title>
      <link>https://dev-woody.tistory.com/71</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;MDE&lt;/span&gt;&lt;span&gt;를 활용한 사례 중&lt;span&gt;, Lockheed Martin&lt;/span&gt;의 항공 소프트웨어 사례를 분석해보면&lt;span&gt;, F-16&lt;/span&gt;을 개발하기 위해서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;OMG&lt;/span&gt;의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;MDA&lt;/span&gt;를 활용하여&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;여러 플랫폼에 사용이 가능하고 생산성과 품질을 높이는 소프트웨어 개발을 하였다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;이때&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;사용한 툴은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Kennedy Carter&amp;rsquo;s iCCG, UML, MDA(OMG)&lt;/span&gt;를 사용했다&lt;span&gt;. F-16&lt;/span&gt;은 다음과 같은 소프트 웨어 아키텍처를 가지고 있었다&lt;span&gt;.&lt;a href=&quot;applewebdata://D8809E6B-41E8-415A-8548-88B602162929#_ftn1&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[1]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&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-origin-width=&quot;142&quot; data-origin-height=&quot;152&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqGb2q/btroZFc9iIk/JRaEc0BnNyDfVMTPCcE6oK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqGb2q/btroZFc9iIk/JRaEc0BnNyDfVMTPCcE6oK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqGb2q/btroZFc9iIk/JRaEc0BnNyDfVMTPCcE6oK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqGb2q%2FbtroZFc9iIk%2FJRaEc0BnNyDfVMTPCcE6oK%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;356&quot; height=&quot;381&quot; data-origin-width=&quot;142&quot; data-origin-height=&quot;152&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이때&lt;span&gt;, Application Software&lt;/span&gt;가 전체 소프트웨어의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;80~90%&lt;/span&gt;를 차지하고 있었고&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;아래&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Hardware, Software Execution Platform, Application Software Interface&lt;/span&gt;는 자주 변경되는 부분이였다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;따라서&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;하위의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Application Software Interface&lt;/span&gt;의 변경에도&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Application Software&lt;/span&gt;는 변경이 없는 소프트 웨어 개발을 원하였다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;기존에 객체지향 방법론을 이용한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;CASE&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;도구를 사용하다가&lt;span&gt;, Kennedy Carter&amp;rsquo;s iUML tool&lt;/span&gt;을 적용하였다&lt;span&gt;. Carter&amp;rsquo;s iUML tool&lt;/span&gt;을 통해&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;UML&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;모델을 실행할 수 있는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;UML action language&lt;/span&gt;를 사용할 수 있었고&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;하드코딩을 통한 테스트에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;UML&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;모델을 통해 동작 상태를 확인 할 수 있었다&lt;a href=&quot;applewebdata://D8809E6B-41E8-415A-8548-88B602162929#_ftn2&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[2]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;사용자 요구사항&lt;span&gt;(Requirements Definetions)&lt;/span&gt;을 모델링&lt;span&gt;(eXecutable UML Modeling)&lt;/span&gt;하고&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;하드웨어 관련 사항&lt;span&gt;(Platform Specfic Mapping)&lt;/span&gt;을 추가 하여 개발하였다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;실행가능한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;xUML&lt;/span&gt;&lt;span&gt;의 시뮬레이션과 디버깅툴을 이용하여 초기에 테스팅을 수행하고 시스템의 상세화를 통해서 어플리케이션이 수행하는 바를 정의하여 어플리케이션 개발&lt;/span&gt;&lt;span&gt;하였다&lt;/span&gt;&lt;span&gt;.&lt;a href=&quot;applewebdata://D8809E6B-41E8-415A-8548-88B602162929#_ftn3&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[3]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&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;687&quot; data-origin-height=&quot;401&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dHTG6I/btroT5jCi06/vGE2EJfmicu2TsWFFqRQ71/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dHTG6I/btroT5jCi06/vGE2EJfmicu2TsWFFqRQ71/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dHTG6I/btroT5jCi06/vGE2EJfmicu2TsWFFqRQ71/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdHTG6I%2FbtroT5jCi06%2FvGE2EJfmicu2TsWFFqRQ71%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;639&quot; height=&quot;374&quot; data-origin-width=&quot;687&quot; data-origin-height=&quot;401&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;MDE&lt;/span&gt;&lt;span&gt;의&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;PIM&lt;/span&gt;에서&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;PSM,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;소스코드 변환 단계와 각 단계의 컴포넌트는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;아래와 같다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;Level1&lt;/span&gt;&lt;span&gt;은 사용자 요구 수집 단계이며&lt;/span&gt;&lt;span&gt;, Level2&lt;/span&gt;&lt;span&gt;는 플랫폼에 연관이 없는 메타모델 단계&lt;/span&gt;&lt;span&gt;(PIM), Level3&lt;/span&gt;&lt;span&gt;는 플랫폼에 종속된 모델 단계&lt;/span&gt;&lt;span&gt;(PSM)&lt;/span&gt;&lt;span&gt;이다&lt;/span&gt;&lt;span&gt;.&lt;a href=&quot;applewebdata://D8809E6B-41E8-415A-8548-88B602162929#_ftn4&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[4]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&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;833&quot; data-origin-height=&quot;481&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dktr2T/btroT5YecOS/hlVndQlk4AT5JOTJYg15IK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dktr2T/btroT5YecOS/hlVndQlk4AT5JOTJYg15IK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dktr2T/btroT5YecOS/hlVndQlk4AT5JOTJYg15IK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdktr2T%2FbtroT5YecOS%2FhlVndQlk4AT5JOTJYg15IK%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;590&quot; height=&quot;341&quot; data-origin-width=&quot;833&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;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 과정을 통해&lt;span&gt;, Lockheed Martin&lt;/span&gt;사는 어플리케이션 개발 시간이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;20%&lt;/span&gt;가량 감소되고&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;다중 플랫폼에서 사용이 가능한 소프트웨어를 개발할 수 있었다&lt;span&gt;. UML&lt;/span&gt;을 사용하는 해당 분야의 도메인 전문가는 하드웨어랑 소프트웨어를 분리하여 작업할 수 있게 되었다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;하드웨어와 소프트웨어 플랫폼이 항공기 어플리케이션에 영향을 주지 않고 업그레이드가 가능해졌다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;또한&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;코드 자동생산에 의해 코드 수작업이 감소되어 생산성 향상을 이뤘다&lt;a href=&quot;applewebdata://D8809E6B-41E8-415A-8548-88B602162929#_ftn5&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[5]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;다음 카카오뱅크의 시스템의 기반이 된 국내의 전북은행의 은행 계정계 시스템을 분석하면&lt;span&gt;, LG CNS&lt;/span&gt;는 계정계 시스템 전체 업무&lt;span&gt;(&lt;/span&gt;분석&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;설계&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;개발&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;통합테스트&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;이행&lt;span&gt;)&lt;/span&gt;를&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;JAVA&lt;/span&gt;언어 기반의&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;MDD&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;방법론으로 구축하였다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;기존 은행 시스템은 주로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;COBOL&lt;/span&gt;이나&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;C&lt;/span&gt;언어로 구축되어 있는 경우가 많기 때문에&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;새로운 언어로 구축하려면 큰 리스크가 존재하였다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;또한&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;해당 프로젝트에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;JAVA&lt;/span&gt;를 경험한 인력은 약&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;15%&lt;/span&gt;에 불과해 자체 개발도구&lt;span&gt;(DevOn MDD)&lt;/span&gt;를 활용한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;FULL MDE&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;방식을 적용하였다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;프로그램 코드와 산출물 문서는 수작업으로 작성하지 않고 자체 개발한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;MDE&lt;/span&gt;도구를 통해 모델로부터 자동 생성하였다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;또한&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;영문 텍스트 기반의 프로그램 코드 보다는 한글로 작성된 그래픽 모델 중심으로 프로젝트를 진행하였다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;자체개발한 표준화된 논리표현식을 사용하여 개발언어와 플랫폼에 대한 종속성을 줄였다&lt;span&gt;.&lt;a href=&quot;applewebdata://D8809E6B-41E8-415A-8548-88B602162929#_ftn6&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[6]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&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-origin-width=&quot;600&quot; data-origin-height=&quot;330&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1abj6/btroTm0eRwy/1pigwNODNlijgOK2RAa7h0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1abj6/btroTm0eRwy/1pigwNODNlijgOK2RAa7h0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1abj6/btroTm0eRwy/1pigwNODNlijgOK2RAa7h0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1abj6%2FbtroTm0eRwy%2F1pigwNODNlijgOK2RAa7h0%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;737&quot; height=&quot;405&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;330&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 과정을 통해&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;기존 프로젝트 대비&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;6.6%&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;생산성 증대 효과를 가져왔으며&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;모델과 논리표현식을 활용한 개발로 초급 개발자도 중급 개발자와 비슷한 정도의 생산성의 확보하였다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;또한&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;개발 경력 의존도가 높은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;ISD(Information System Development)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;프로젝트에서 개발 경력 의존도를 낮추었다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;은행 프로젝트를 분석부터 이행까지&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;MDD&lt;/span&gt;를 이용하여 수행하였으며&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;은행 업무 프로세스에 대한 지식이 축적되었다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;이러한 지식을 활용해&lt;span&gt;, LG CNS&lt;/span&gt;는 추후 카카오뱅크와 토스뱅크의 시스템 구축을 맡았다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;applewebdata://D8809E6B-41E8-415A-8548-88B602162929#_ftn7&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[7]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;가.&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;지원도구&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;DevOn MDD&lt;/span&gt;&lt;span&gt;는 모델중심개발&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(Model-Driven Development)&lt;/span&gt;&lt;span&gt;을 지원하기 위해 소스코드를 자동으로 생성하고&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;즉각적인 품질 검사를 수행할 수 있으며&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;다양한 산출물을 실시간으로 제공하는 자동화 도구이다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;또한&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;개발 생산성 향상을 위한 다양한 편의 기능&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;시퀀스 자동생성&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;논리편집기&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;개발도구연계 등&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;을 제공한다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;다음과 같이 모델을 이용하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;100%&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;실행 가능한 코드를 자동 생성한다&lt;/span&gt;&lt;span&gt;.&lt;a href=&quot;applewebdata://D8809E6B-41E8-415A-8548-88B602162929#_ftn8&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[8]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&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-origin-width=&quot;707&quot; data-origin-height=&quot;432&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/viZtF/btroSVhrQaO/1Lfmr8O3nweyYZxOVty4T0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/viZtF/btroSVhrQaO/1Lfmr8O3nweyYZxOVty4T0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/viZtF/btroSVhrQaO/1Lfmr8O3nweyYZxOVty4T0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FviZtF%2FbtroSVhrQaO%2F1Lfmr8O3nweyYZxOVty4T0%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;699&quot; height=&quot;426&quot; data-origin-width=&quot;707&quot; data-origin-height=&quot;432&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Reverse Engineering&lt;/span&gt;&lt;span&gt;은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;DevOn Reverse&lt;/span&gt;도구를 이용하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;C,COBOL&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;소스 코드로 부터&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;JAVA&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;산출물과 업무 모델을 자동 생성한다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;그리고&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Forward Engineering&lt;/span&gt;은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;DevOn MDA&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;도구를 이용하여 모델로 부터&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;100%&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;실행 가능한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;JAVA&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;코드를 생성한다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;아래와 같은 도구 구성을 가진다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;applewebdata://D8809E6B-41E8-415A-8548-88B602162929#_ftn9&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[9]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&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-origin-width=&quot;978&quot; data-origin-height=&quot;427&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QsRiY/btroStesAG6/Vq9HLFeQm1ZhqdwiDFliS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QsRiY/btroStesAG6/Vq9HLFeQm1ZhqdwiDFliS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QsRiY/btroStesAG6/Vq9HLFeQm1ZhqdwiDFliS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQsRiY%2FbtroStesAG6%2FVq9HLFeQm1ZhqdwiDFliS1%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;695&quot; height=&quot;303&quot; data-origin-width=&quot;978&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;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;ProcessBuilder&lt;/span&gt;&lt;span&gt;CL&lt;/span&gt;&lt;span&gt;은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;MDD&lt;/span&gt;&lt;span&gt;기반의 통합개발환경인&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;ProcessBuilder CL&lt;/span&gt;&lt;span&gt;은 웹 기반의 개발환경을 제공하여 누구나 언제 어디서든 쉽게 프로그램 개발이 가능할 뿐만 아니라 개발과 동시에&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;WAS&lt;/span&gt;&lt;span&gt;로 배포되어 바로 실행이 가능한 실시간 엔터프라이즈&lt;/span&gt;&lt;span&gt;(RTE)&lt;/span&gt;&lt;span&gt;를 구현하는 시스템이다&lt;/span&gt;&lt;span&gt;.&lt;a href=&quot;applewebdata://D8809E6B-41E8-415A-8548-88B602162929#_ftn10&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[10]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&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;641&quot; data-origin-height=&quot;384&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxso6A/btroVkt5PoW/zDcsBKaKkehJwqLiRGoOnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxso6A/btroVkt5PoW/zDcsBKaKkehJwqLiRGoOnk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxso6A/btroVkt5PoW/zDcsBKaKkehJwqLiRGoOnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbxso6A%2FbtroVkt5PoW%2FzDcsBKaKkehJwqLiRGoOnk%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;766&quot; height=&quot;459&quot; data-origin-width=&quot;641&quot; data-origin-height=&quot;384&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div&gt;
&lt;div id=&quot;ftn1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Computer Science/Software Engineering</category>
      <author>dev.Woody</author>
      <guid isPermaLink="true">https://dev-woody.tistory.com/71</guid>
      <comments>https://dev-woody.tistory.com/71#entry71comment</comments>
      <pubDate>Sun, 26 Dec 2021 15:42:00 +0900</pubDate>
    </item>
    <item>
      <title>ISO/IEC 9126-1 - Software Product Quality 표준</title>
      <link>https://dev-woody.tistory.com/70</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;924&quot; data-origin-height=&quot;319&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/S3Bdi/btroZFxoGj6/QZ7pShChCuhOdoVwF4hj0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/S3Bdi/btroZFxoGj6/QZ7pShChCuhOdoVwF4hj0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/S3Bdi/btroZFxoGj6/QZ7pShChCuhOdoVwF4hj0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FS3Bdi%2FbtroZFxoGj6%2FQZ7pShChCuhOdoVwF4hj0K%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;693&quot; height=&quot;239&quot; data-origin-width=&quot;924&quot; data-origin-height=&quot;319&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;위의 그림은 소프트웨어 품질 생명주기를 나타낸 그림이다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;소프트웨어 제품 품질을 달성하기 위해 소프트웨어 제품을 평가하는 것은 소프트웨어 개발 생명주기의 한 과정이다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;소프트웨어 제품 품질은 내부 속성을 측정함으로써&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;혹은 외부 속성에 의해 평가될 수 있으며&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;그 목적은 특정한 사용용도에서 요구한 효과를 내도록 하는 것이다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;프로세스 품질 개선은 제품 품질의 개선을 가져오고&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;제품 품질은 사용 품질의 개선을 가져온다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;그러므로&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;프로세스를 평가하고 개선하는 것이 중요하다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;따라서&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;적절한 품질 평가 프로세스는 개발 동안에 품질측정하는데 필요하다&lt;span&gt;. ISO/IEC 9126&lt;/span&gt;의 이 부분은 품질과 관련된 문제점에 대한 점검표를 제시한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&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-origin-width=&quot;483&quot; data-origin-height=&quot;294&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bt03UI/btroXMjeL0s/fGgBDdiUkykYpkEDkLkUBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bt03UI/btroXMjeL0s/fGgBDdiUkykYpkEDkLkUBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bt03UI/btroXMjeL0s/fGgBDdiUkykYpkEDkLkUBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbt03UI%2FbtroXMjeL0s%2FfGgBDdiUkykYpkEDkLkUBK%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;619&quot; height=&quot;377&quot; data-origin-width=&quot;483&quot; data-origin-height=&quot;294&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;ISO/IEC 9126&lt;/span&gt;&lt;span&gt;은 총&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;4&lt;/span&gt;개의 부분으로 나누어져 있으며&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;ISO/IEC 9126-1&lt;/span&gt;에서는 전체적인&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;S/W&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;품질평가에 대해서 설명하고 있고&lt;span&gt;, ISO/IEC 9126-2&lt;/span&gt;에서는&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;S/W&lt;/span&gt;의 외부 품질에 대한 평가 메트릭을 제시하고 있다&lt;span&gt;. ISO/IEC 9126-3&lt;/span&gt;의 내부 메트릭은 설계나 코딩 도중에 실행할 수 없는&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;S/W&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;제품에 대하여 적용할 수 있는 것으로 개발 단계에서 그 중간 제품에 대한 모의실험을 통해 추출 가능한 속성들을 측정하기 위한 것이다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;마지막으로&lt;span&gt;, ISO/IEC 9126-4&lt;/span&gt;에서는&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;S/W&lt;/span&gt;를 사용한 결과의 관점에서 품질을 정의하는 사용 품질 메트릭을 정의하고 있다&lt;span&gt;.&lt;a href=&quot;applewebdata://093C2830-FC98-477F-BDAA-2FE3C3A7B7D7#_ftn1&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[1]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&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-origin-width=&quot;496&quot; data-origin-height=&quot;281&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dTH5hL/btroRFfkivD/BF6pJwHmanB1KkylGKY3KK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dTH5hL/btroRFfkivD/BF6pJwHmanB1KkylGKY3KK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dTH5hL/btroRFfkivD/BF6pJwHmanB1KkylGKY3KK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdTH5hL%2FbtroRFfkivD%2FBF6pJwHmanB1KkylGKY3KK%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;529&quot; height=&quot;300&quot; data-origin-width=&quot;496&quot; data-origin-height=&quot;281&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;품질특성의 메트릭 체계는 내부 메트릭과 외부 메트릭으로 구분된다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;내부 메트릭은 내부속성 측정시 사용된다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;설계나 코딩도중에 실행할 수 없는 소프트웨어 제품에 적용할 수 있다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;내부 메트릭은 사용자&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;평가자&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;시험자 및 개발자가 소프트웨어 제품 품질을 평가할 수 있도록 도와주며&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;해당 소프트웨어 제품을 만들기 전에 미리 품질에 문제점들을 지적해 준다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;내부메트릭은 중간 제품이나 인도된 소프트웨어 제품의 정적인 성질을 분석함으로써 내부 속성을 측정하거나 외부 속성을 보여준다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;내부 메트릭의 측정은 예를들어&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;원시코드 명령문&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;제어 그래프 및 상태 전이 표현등에 나타나는 소프트웨어 구성 요소들의 개수나 빈도수를 사용한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;내부 메트릭의 주된 목적은 요구된 외부 품질이 성취되었는가를 확인하는 것이 며 그 예는&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;ISO/IEC 9126-3&lt;/span&gt;에 나와 있다&lt;span&gt;.&lt;a href=&quot;applewebdata://093C2830-FC98-477F-BDAA-2FE3C3A7B7D7#_ftn2&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[2]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;외부 메트릭은 시스템 측정치에서 추출되는 소프트웨어 제품의 측정치를 위해 사용된다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;외부 메트릭은 사용자&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;평가자&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;시험자 및 개발자가 시험 수행이나 운영 중에 소프트웨어 제품 품질을 평가할 수 있도록 도와준다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;특정한 조직이나 기술적 환경에서 제품의 사용&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;개발 및 관리와 관련된 기업 목적을 토대로 메트릭을 사용하여 평가 하는 것이 외부 메트릭이다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;이러한 외부 메트릭의 예는&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;ISO/IEC 9126-2&lt;/span&gt;에 나와있다&lt;span&gt;.&lt;a href=&quot;applewebdata://093C2830-FC98-477F-BDAA-2FE3C3A7B7D7#_ftn3&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[3]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;소프트웨어 품질 요구사항이 정의되면&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;품질 요구사항을 표현하는 소프트웨어 품질 특성이나 부특성이 열거된다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;그 다음은&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;그 소프트웨어가 사용자 요구를 만족하는 지를 확인하는 품질 기준을 정량화하기 위해 적절한 외부 메트릭 및 수용 가능한 범위가 명시된다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;그 다음은&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;요구된 외부 품 질과 사용 품질이 성취될 수 있도록 계획하고&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;개발 도중에 중간 제품에 그 품질을 구축할 수 있도록 소프트웨어에 대한 내부 품질 속성이 정의되고 명시된다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;내부 품질 특성의 정량화를 위해 적절한 내부 메트릭 및 수용 가능한 범위를 명시하여 개발 도중에 중간 제품이 내부 품질 명세를 만족하는 지를 검증하는 데 사용될 수 있도록 한다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;따라 목표하는 외부 메트릭과 밀접한 관계를 가지는 내부 메트릭의 사용을 권장하며&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;외부 메트릭의 값을 예측하는 데도 사용할 수 있다&lt;a href=&quot;applewebdata://093C2830-FC98-477F-BDAA-2FE3C3A7B7D7#_ftn4&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[4]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;사용 품질 메트릭은 제품이 사용될 경우에 정해진 목표를 달성하기 위하여 효율성&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;생산성 및 만족도 측면에서 특정 사용자의 요구를 충족하는가를 측정한다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;사용품질을 평가하는 것은 특정 사용자 작업 시나리오 내용에서 소프트웨어 품질을 확인하는 것이다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;소프트웨어 자체의 성질보다는 소프트웨어를 사용한 결과의 관점에서 측정한다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;예를 들어&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;최종사용자에 있어서 사용 품질은 기능성&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;신뢰성&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;사용성 및 효율성의 결과이지만&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;소프트웨어 유지보수 담당자에 있어서 사용 품질은 유지보수성의 결과이다&lt;span&gt;.&lt;a href=&quot;applewebdata://093C2830-FC98-477F-BDAA-2FE3C3A7B7D7#_ftn5&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[5]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&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-origin-width=&quot;850&quot; data-origin-height=&quot;383&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boEhZg/btroXNWKXEu/kB6cyAGRpoCG7Zunrl04ok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boEhZg/btroXNWKXEu/kB6cyAGRpoCG7Zunrl04ok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boEhZg/btroXNWKXEu/kB6cyAGRpoCG7Zunrl04ok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboEhZg%2FbtroXNWKXEu%2FkB6cyAGRpoCG7Zunrl04ok%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;654&quot; height=&quot;294&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;383&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;ISO/IEC 9126-1&lt;/span&gt;&lt;span&gt;은 품질 특성으로 주특성&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;6&lt;/span&gt;개와 부특성&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;27&lt;/span&gt;개로 나뉜다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;우선 주특성 중&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Functionality (&lt;/span&gt;기능성&lt;span&gt;)&lt;/span&gt;은 소프트웨어가 특정 조건에서 사용될 때&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;명시된 요구와 내재된 요구를 만족하는 기능을 제공하는 소프트웨어 제품의 능력이다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;다른 특성들은 주로 소프트웨어가 언제&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;그리고 어떻게 동작하는가에 초점을 맞추는 방면&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;이 특성은 요구를 충족하기 위해서 소프트웨어가 무엇을 하는가에 주로 관심을 둔다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;이와 관련한 부특성은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Suitability (&lt;/span&gt;적합성&lt;span&gt;), Accuricy (&lt;/span&gt;정확성&lt;span&gt;), Interoperability (&lt;/span&gt;상호운영성&lt;span&gt;), Security (&lt;/span&gt;보안성&lt;span&gt;), Functionality compliance (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;준수&lt;/span&gt;&lt;span&gt;성&lt;span&gt;)&lt;/span&gt;로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;개의 부특성이 있다&lt;span&gt;. &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;Suitability (&lt;/span&gt;적합성&lt;span&gt;)&lt;/span&gt;은 지정된 작업과 사용자 목적을 위한 적절한 기능들을 제공하는 능력이다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;이러한 적합성은 운영성에 영향을 준다&lt;span&gt;. Accuricy (&lt;/span&gt;정확성&lt;span&gt;)&lt;/span&gt;은 올바른 혹은 동의된 효능 결과를 제공할 수 있는 능력이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;Interoperability (&lt;/span&gt;상호운영성&lt;span&gt;)&lt;/span&gt;은 하나 이상의 명세된 시스템과 상호 작용할 수 있는 능력이다&lt;span&gt;. Security (&lt;/span&gt;보안성&lt;span&gt;)&lt;/span&gt;은 권한이 없는 사람 혹은 시스템은 정보를 읽거나 변경하지 못하게 하도록 정보를 보호하는 능력이다&lt;span&gt;. Functionality compliance (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;준수&lt;/span&gt;&lt;span&gt;성&lt;span&gt;)&lt;/span&gt;은 응용과 관련된 표준&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;관례 또는 법적 규제 및 유사한 규정을 고수하는 능력이다&lt;a href=&quot;applewebdata://093C2830-FC98-477F-BDAA-2FE3C3A7B7D7#_ftn6&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[6]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt;.&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;size16&quot;&gt;&lt;span&gt;다음&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;주특성으로는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Reliability (&lt;/span&gt;신뢰성&lt;span&gt;)&lt;/span&gt;는 명세된 조건에서 사용될 때&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;성능 수준을 유지할 수 있는 소프트웨어 제품의 능력이다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;이와 관련한 부특성은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Maturity (&lt;/span&gt;성숙성&lt;span&gt;), Faulty tolerance (&lt;/span&gt;오류 허용성&lt;span&gt;), Recoverability (&lt;/span&gt;복구성&lt;span&gt;), Reliability compliance (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;준수&lt;/span&gt;&lt;span&gt;성&lt;span&gt;)&lt;/span&gt;로 총&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;4&lt;/span&gt;가지의 부특성이 있다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Maturity(&lt;/span&gt;&lt;span&gt;성숙성&lt;span&gt;)&lt;/span&gt;은 소프트웨어 내의 결함으로 인한 고장을 피해 가는 능력이다&lt;span&gt;. Faulty tolerance (&lt;/span&gt;오류 허용성&lt;span&gt;)&lt;/span&gt;은 소프트웨어 결합이 발생했을 때 명세된 성능 수준을 유지할 수 있는 능력이다&lt;span&gt;. Recoverability (&lt;/span&gt;복구성&lt;span&gt;)&lt;/span&gt;은 고장 발생시 명세된 성능 수준을 재유지하고 직접적으로 영향받은 데이터를 복구하는 능력이다&lt;span&gt;. Reliability compliance (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;준수&lt;/span&gt;&lt;span&gt;성&lt;span&gt;)&lt;/span&gt;은 신뢰성과 관련된 표준&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;관례 또는 규제를 고수하는 소프트웨어 제품의 능력이다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;applewebdata://093C2830-FC98-477F-BDAA-2FE3C3A7B7D7#_ftn7&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[7]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&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;size16&quot;&gt;&lt;span&gt;세번째 주특성인&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Usability (&lt;/span&gt;사용성&lt;span&gt;)&lt;/span&gt;은 명시된 조건에서 사용될 경우&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;사용자에 의해 이해되고&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;학습되고&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;사용되고 선호될 수 있는 제품의 능력이다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;이때&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;사용자에는 소프트웨어 사용에 영향을 받거나 의존하는 운영자&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;최종 사용자&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;그리고 간접 사용자 등이 포함된다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;사용성은 사용 준비나 결과 평가 등 소프트웨어가 영향을 줄 수 있는 모든 사용자 환경에 대처해야 한다&lt;span&gt;. Understandability (&lt;/span&gt;이해성&lt;span&gt;), Learnability(&lt;/span&gt;학습성&lt;span&gt;), Operablilt(&lt;/span&gt;운용성&lt;span&gt;), Attractiveness(&lt;/span&gt;친밀성&lt;span&gt;), Usability Compliance(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;준수&lt;/span&gt;&lt;span&gt;성&lt;span&gt;)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;총&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;개의 부특성이 있다&lt;span&gt;. Understandability (&lt;/span&gt;이해성&lt;span&gt;)&lt;/span&gt;은 특정 작업과 사용 조건에서 어떻게 사용될 수 있는지를 사용자가 이해할 수 있도록 하는 능력이다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;특히 소프트웨어 문서의 중요도가 높다&lt;span&gt;. Learnability(&lt;/span&gt;학습성&lt;span&gt;)&lt;/span&gt;은 사용자가 그 응용을 학습할 수 있도록 하는 능력이다&lt;span&gt;. Operablilty(&lt;/span&gt;운용성&lt;span&gt;)&lt;/span&gt;은 사용자가 소프트웨어 제품을 운영하고 제어할 수 있도록 하는 능력이다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;이때&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;적합성&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;변경성&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;적응성&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;설치성 등의 특징들은 운영성에 영향을 미칠 수 있다&lt;span&gt;. Attractiveness(&lt;/span&gt;친밀성&lt;span&gt;)&lt;/span&gt;은 사용자에 의해 선호되는 소프트웨어 제품의 능력이다&lt;span&gt;. Usability Compliance(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;준수&lt;/span&gt;&lt;span&gt;성&lt;span&gt;)&lt;/span&gt;은 사용성과 관련된 표준&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;관례&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;유형 안내 및 규제를 고수하는 능력이다&lt;span&gt;.&lt;a href=&quot;applewebdata://093C2830-FC98-477F-BDAA-2FE3C3A7B7D7#_ftn8&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[8]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&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;size16&quot;&gt;&lt;span&gt;네 번째 주특성인&amp;nbsp;&lt;span&gt;Efficiency (&lt;/span&gt;효율성&lt;span&gt;)&lt;/span&gt;은 명시된 조건에서 사용되는 자원의 양에 따라 요구된 성능을 제공하는 소프트웨어 제품의 능력을 의미한다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;이때&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;자원은 다른 소프트웨어 제품&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;하드웨어 장비&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;재료&lt;span&gt;(&lt;/span&gt;예&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;인쇄 용지&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;저장장치&lt;span&gt;)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;등을 포함하는 개념이다&lt;span&gt;. Time behaviour (&lt;/span&gt;시간 반응성&lt;span&gt;), Resource utilization (&lt;/span&gt;자원 활용성&lt;span&gt;), Efficiency compliance (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;준수&lt;/span&gt;&lt;span&gt;성&lt;span&gt;)&lt;/span&gt;로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;가지의 부특성이 존재한다&lt;span&gt;. Time behaviour (&lt;/span&gt;시간 반응성&lt;span&gt;)&lt;/span&gt;은 명시된 조건에서 그 기능을 수행할 때 적절한 반응 및 처리시간과 처리율을 제공하는 능력이다&lt;span&gt;. Resource utilization (&lt;/span&gt;자원 활용성&lt;span&gt;)&lt;/span&gt;은 명시된 조건에서 그 기능을 수행할 때 적절한 양과 종류의 자원을 사용하는 능력이다&lt;span&gt;. Efficiency compliance (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;준수&lt;/span&gt;&lt;span&gt;성&lt;span&gt;)&lt;/span&gt;은 효율성과 관련된 표준 및 관례를 고수하는 능력이다&lt;span&gt;.&lt;a href=&quot;applewebdata://093C2830-FC98-477F-BDAA-2FE3C3A7B7D7#_ftn9&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[9]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&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;size16&quot;&gt;&lt;span&gt;다섯 번째 주특성인&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Maintainability (&lt;/span&gt;유지보수성&lt;span&gt;)&lt;/span&gt;는 추후에 소프트웨어 제품이 소프트웨어 제품을 변경할 수 잇는 능력을 의미하고&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;변경에는 운영환경과 요구사항 및 기능적 사양에 따름 소프트웨어의 수정&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;개선&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;혹은 개작 등이 포함된다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Analysability (&lt;/span&gt;&lt;span&gt;분석성&lt;span&gt;), Changeability (&lt;/span&gt;변경성&lt;span&gt;), Stability (&lt;/span&gt;안정성&lt;span&gt;), Testability (&lt;/span&gt;시험성&lt;span&gt;), Maninability compliace (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;준수&lt;/span&gt;&lt;span&gt;성&lt;span&gt;)&lt;/span&gt;로 총&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;개의 부특성을 가지고 있다&lt;span&gt;. Analysability (&lt;/span&gt;분석성&lt;span&gt;)&lt;/span&gt;은 소프트웨어의 결함이나 고장의 원인 혹은 변경될 부분들의 식별에 대한 진단을 가능하게 하는 소프트웨어 제품의 능력이다&lt;span&gt;. Changeability (&lt;/span&gt;변경성&lt;span&gt;)&lt;/span&gt;은 변경 명세가 구현될 수 있도록 하는 능력이다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;소프트웨어가 최종 사용자에 의해 변경된다면 변경성은 운영성에 영향을 미칠 수 있다&lt;span&gt;. Stability (&lt;/span&gt;안정성&lt;span&gt;)&lt;/span&gt;은 소프트웨어가 변경으로 인한 예상치 않은 결과를 최소화하는 능력이다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;Testability (&lt;/span&gt;시험성&lt;span&gt;)&lt;/span&gt;은 변경된 소프트웨어가 확인될 수 있는 능력이다&lt;span&gt;. Maninability compliace (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;준수&lt;/span&gt;&lt;span&gt;성&lt;span&gt;)&lt;/span&gt;은 유지보수성과 관련된 표준 및 관례를 고수하는 능력이다&lt;a href=&quot;applewebdata://093C2830-FC98-477F-BDAA-2FE3C3A7B7D7#_ftn10&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[10]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt;.&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;size16&quot;&gt;&lt;span&gt;마지막 주특성으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Portability (&lt;/span&gt;이식성&lt;span&gt;)&lt;/span&gt;은 한 환경에서 다른 환경으로 전이될 수 있는 소프트웨어 제품의 능력이다&lt;span&gt;. Adaptability (&lt;/span&gt;적응성&lt;span&gt;), Installability (&lt;/span&gt;설치성&lt;span&gt;), Co-existance (&lt;/span&gt;공존성&lt;span&gt;), Replaceability (&lt;/span&gt;대체성&lt;span&gt;), Portability compliace (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;준수&lt;/span&gt;&lt;span&gt;성&lt;span&gt;)&lt;/span&gt;로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;개의 부특성을 가진다&lt;span&gt;. Adaptability (&lt;/span&gt;적응성&lt;span&gt;)&lt;/span&gt;은 고려 대상인 소프트웨어에서 이 목적으로 제공되는 것 이외의 활동 혹은 수단을 적용하지 않고 다른 명세된 환경으로 변경될 수 있는 능력이다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;적응성은 내부 용량&lt;span&gt;(&lt;/span&gt;예&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;화면 영역&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;테이블&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;트랜잭션 크기&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;보고서 형식 등&lt;span&gt;)&lt;/span&gt;의 확장성을 포함한다&lt;span&gt;. Installability (&lt;/span&gt;설치성&lt;span&gt;)&lt;/span&gt;은 명세된 환경에 설치될 수 있는 소프트웨어 제품의 능력이다&lt;span&gt;. Co-existance (&lt;/span&gt;공존성&lt;span&gt;)&lt;/span&gt;은 공통 자원을 공유하는 공동환경에서 다른 독립적인 소프트웨어와 공존할 수 있는 능력이다&lt;span&gt;. Replaceability (&lt;/span&gt;대체성&lt;span&gt;)&lt;/span&gt;은 동일한 환경에서 동일한 목적으로 다른 지정된 소프트웨어 제품을 대&lt;/span&gt;&lt;span&gt;신&lt;/span&gt;&lt;span&gt;하여 사용될 수 있는 능력이다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;특히&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;대체성은 사용자가 소프트웨어 제품을 새로운 버전으로 업그레이드할 때 중요하다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;대체성은 설치성과 적합성 두 가지 속성을 모두 포함한다&lt;span&gt;.Portability compliace (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;준수&lt;/span&gt;&lt;span&gt;성&lt;span&gt;)&lt;/span&gt;은 이식성과 관련된 표준 및 관례를 고수하는 능력이다&lt;span&gt;.&lt;a href=&quot;applewebdata://093C2830-FC98-477F-BDAA-2FE3C3A7B7D7#_ftn11&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[11]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 550px;&quot; border=&quot;1&quot; width=&quot;670&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 72px;&quot;&gt;
&lt;td style=&quot;height: 72px; width: 13.953488372093023%;&quot; width=&quot;76&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;주특성&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 72px; width: 71.3953488372093%;&quot; width=&quot;458&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;주특성&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;내용&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 72px; width: 14.534883720930234%;&quot; width=&quot;80&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;부특성&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 90px; width: 13.953488372093023%;&quot; rowspan=&quot;5&quot; width=&quot;76&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;Functionality&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;기능성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 90px; width: 71.3953488372093%;&quot; rowspan=&quot;5&quot; width=&quot;458&quot;&gt;&lt;span&gt;&lt;span&gt;소프트웨어가&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;특정&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;조건에서&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;사용될&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;때&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span&gt;명시된&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;요구와&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;내재된&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;요구를&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;만족하는&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;기능을&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;만족하는&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;기능을&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;제공하는&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;소프트웨어&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;제품의&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;능력&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 18px; width: 14.534883720930234%;&quot; width=&quot;80&quot;&gt;&lt;span&gt;&lt;span&gt;적&lt;/span&gt;&lt;span&gt;합&lt;/span&gt;&lt;span&gt;성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; width: 14.534883720930234%;&quot; width=&quot;80&quot;&gt;&lt;span&gt;&lt;span&gt;정확&lt;/span&gt;&lt;span&gt;성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; width: 14.534883720930234%;&quot; width=&quot;80&quot;&gt;&lt;span&gt;&lt;span&gt;상호&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;운용성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; width: 14.534883720930234%;&quot; width=&quot;80&quot;&gt;&lt;span&gt;&lt;span&gt;보안성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; width: 14.534883720930234%;&quot; width=&quot;80&quot;&gt;&lt;span&gt;&lt;span&gt;준수성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 72px; width: 13.953488372093023%;&quot; rowspan=&quot;4&quot; width=&quot;76&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;Reliability&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;신뢰성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 72px; width: 71.3953488372093%;&quot; rowspan=&quot;4&quot; width=&quot;458&quot;&gt;&lt;span&gt;&lt;span&gt;소프트웨어가&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;규정된&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;조건에서&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;사용될&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;때&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;규정된&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;성능수준을&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;유지하거나&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;사용자로&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;하여금&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;오류를&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;방지할&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;있도록&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;하는&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;소프트웨어&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;제품의&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;능력&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 18px; width: 14.534883720930234%;&quot; width=&quot;80&quot;&gt;&lt;span&gt;&lt;span&gt;성숙성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; width: 14.534883720930234%;&quot; width=&quot;80&quot;&gt;&lt;span&gt;&lt;span&gt;오류&lt;/span&gt;&lt;span&gt;허용성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; width: 14.534883720930234%;&quot; width=&quot;80&quot;&gt;&lt;span&gt;&lt;span&gt;복구성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; width: 14.534883720930234%;&quot; width=&quot;80&quot;&gt;&lt;span&gt;&lt;span&gt;준수성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 90px; width: 13.953488372093023%;&quot; rowspan=&quot;5&quot; width=&quot;76&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;Usability&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;사용성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 90px; width: 71.3953488372093%;&quot; rowspan=&quot;5&quot; width=&quot;458&quot;&gt;&lt;span&gt;&lt;span&gt;소프트웨어가&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;규정된&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;조건에서&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;사용될&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;때&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span&gt;사용자에&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;의해&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;이해되고&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span&gt;학습되며&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;선호될&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;있게&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;하는&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;소프트웨어&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;제품의&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;능력&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 18px; width: 14.534883720930234%;&quot; width=&quot;80&quot;&gt;&lt;span&gt;&lt;span&gt;이해성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; width: 14.534883720930234%;&quot; width=&quot;80&quot;&gt;&lt;span&gt;&lt;span&gt;학습성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; width: 14.534883720930234%;&quot; width=&quot;80&quot;&gt;&lt;span&gt;&lt;span&gt;운용성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; width: 14.534883720930234%;&quot; width=&quot;80&quot;&gt;&lt;span&gt;&lt;span&gt;친밀성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; width: 14.534883720930234%;&quot; width=&quot;80&quot;&gt;&lt;span&gt;&lt;span&gt;준수성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 54px; width: 13.953488372093023%;&quot; rowspan=&quot;3&quot; width=&quot;76&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;Efficiency&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;효율성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 54px; width: 71.3953488372093%;&quot; rowspan=&quot;3&quot; width=&quot;458&quot;&gt;&lt;span&gt;&lt;span&gt;규정된&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;조건에서&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;사용되는&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;자원의&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;양에&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;따라&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;요구된&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;성능을&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;제공하는&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;소프트웨어&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;제품의&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;능력&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 18px; width: 14.534883720930234%;&quot; width=&quot;80&quot;&gt;&lt;span&gt;&lt;span&gt;시간행동&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; width: 14.534883720930234%;&quot; width=&quot;80&quot;&gt;&lt;span&gt;&lt;span&gt;자원이용&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; width: 14.534883720930234%;&quot; width=&quot;80&quot;&gt;&lt;span&gt;&lt;span&gt;준수성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 90px; width: 13.953488372093023%;&quot; rowspan=&quot;5&quot; width=&quot;76&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;Maintainability&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;유지보수성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 90px; width: 71.3953488372093%;&quot; rowspan=&quot;5&quot; width=&quot;458&quot;&gt;&lt;span&gt;&lt;span&gt;소프트웨어&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;제품을&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;변경할&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;잇는&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;능력&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span&gt;변경에는&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;운영환경과&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;요구사항&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;및&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;기능적&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;사양에&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;따름&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;소프트웨어의&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;수정&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span&gt;개선&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span&gt;혹은&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;개작&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;등이&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;포함된다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 18px; width: 14.534883720930234%;&quot; width=&quot;80&quot;&gt;&lt;span&gt;&lt;span&gt;분석성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; width: 14.534883720930234%;&quot; width=&quot;80&quot;&gt;&lt;span&gt;&lt;span&gt;변경성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; width: 14.534883720930234%;&quot; width=&quot;80&quot;&gt;&lt;span&gt;&lt;span&gt;안정성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; width: 14.534883720930234%;&quot; width=&quot;80&quot;&gt;&lt;span&gt;&lt;span&gt;시험성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; width: 14.534883720930234%;&quot; width=&quot;80&quot;&gt;&lt;span&gt;&lt;span&gt;준수성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;height: 82px; width: 13.953488372093023%;&quot; rowspan=&quot;5&quot; width=&quot;76&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;Portability&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;이식성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 82px; width: 71.3953488372093%;&quot; rowspan=&quot;5&quot; width=&quot;458&quot;&gt;&lt;span&gt;&lt;span&gt;다양한&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;환경에서&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;운영될&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;있는&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;소프트웨어&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;제품의&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;능력&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 10px; width: 14.534883720930234%;&quot; width=&quot;80&quot;&gt;&lt;span&gt;&lt;span&gt;적응성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; width: 14.534883720930234%;&quot; width=&quot;80&quot;&gt;&lt;span&gt;&lt;span&gt;설치성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; width: 14.534883720930234%;&quot; width=&quot;80&quot;&gt;&lt;span&gt;&lt;span&gt;공존성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; width: 14.534883720930234%;&quot; width=&quot;80&quot;&gt;&lt;span&gt;&lt;span&gt;대체성&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; width: 14.534883720930234%;&quot; width=&quot;80&quot;&gt;&lt;span&gt;&lt;span&gt;준수성&lt;/span&gt;&lt;span&gt;&lt;/span&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;</description>
      <category>Computer Science/Software Engineering</category>
      <author>dev.Woody</author>
      <guid isPermaLink="true">https://dev-woody.tistory.com/70</guid>
      <comments>https://dev-woody.tistory.com/70#entry70comment</comments>
      <pubDate>Sun, 26 Dec 2021 13:43:07 +0900</pubDate>
    </item>
    <item>
      <title>Cunit Test Code 작성하기</title>
      <link>https://dev-woody.tistory.com/69</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;i.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트를 위한 함수 작성하기&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;ii.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스위트 선언&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;iii.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 레지스터리를 초기화&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;iv.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 레지스터리에 스위트를 추가&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;v.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스위트에 테스트 추가&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;vi.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;적절한 인터페이스 선택후 실행 테스트&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;vii.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 레지스터 정리&lt;/span&gt;&lt;/b&gt;&lt;b&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 진행할 코드&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;두 값을 더하는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;함수의 테스트를 진행해보자&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1640493185550&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int add(int a,int b){
   return a+b
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;1.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트를 위한 함수 작성하기&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;-&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;간단하게 더하기 함수를 작성하였다&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CU_ASSERT_EQUAL([&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;함수&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(,)], [&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;예측값&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;])&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 이용하여 함수와 예측값을 넣어준다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot;&gt;&lt;code&gt;void testAdd(void){
      CU_ASSERT_EQUAL(add(1,1),2);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스위트 선언하기&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CU_Psuite&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 통해서 스위트를 선언해준다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1640493226141&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CU_pSuite suite = NULL;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 레지스터리 초기화 하기&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CU_initialize_registry()&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 활용해서 테스트 레지스터리를 초기화 해줄 수 있다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot;&gt;&lt;code&gt;if(CUE_SUCCESS != CU_initialize_registry())  //레지스터리 초기화
         return CU_get_error();&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;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 레지스터리에 스위트를 추가&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CU_add_suite&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 통해 테스트 레지스터리에 스위트를 추가한다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;pSuite = CU_add_suite(&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스위트 이름&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;, [&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 시작 전 함수&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;], [&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 시작 후 함수&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;]);&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot;&gt;&lt;code&gt;pSuite = CU_add_suite(&quot;suite&quot;, NULL, NULL);
if(NULL = pSuite){
      CU_cleanup_registry();
      retrun CU_get_error();
}&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;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스위트에 태스트 추가&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;CU_add_test(suite, &quot;&lt;/span&gt;&lt;span&gt;테스트 제목&lt;/span&gt;&lt;span&gt;&quot;, [&lt;/span&gt;&lt;span&gt;테스트함수&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot;&gt;&lt;code&gt;if ((NULL == CU_add_test(pSuite, &quot;test add&quot;, testAdd))){
      CU_cleanup_registry();
      return CU_get_error();
}&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;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;6.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;적절한 인터페이스 선택 후 실행 테스트&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CU_basic_set_mode&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 통해 모드를 선택하고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CU_basic_run_tests&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 통해 테스트를 실행한다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이때&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용가능한 인테퍼이스는 총&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;개가 있다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Automated : xml&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;파일 출력&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;. Basic :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;표준 출력&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Console :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;콘솔입력&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;표준출력&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Curses : GUI (UNIX)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot;&gt;&lt;code&gt;CU_basic_set_mode(CU_BRM_VERBOSE);
CU_basic_run_tests();&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;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;7.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 레지스터 정리&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CU_cleanup_registry&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 통해 테스트 레지스터를 정리한다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;abnf&quot;&gt;&lt;code&gt;CU_cleanup_registry();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;A.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Cunit&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;각 인터페이스별 출력&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&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;625&quot; data-origin-height=&quot;237&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0PhM9/btroVkgrPam/Wj4hPbfJbUX8Bk2O0l42y0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0PhM9/btroVkgrPam/Wj4hPbfJbUX8Bk2O0l42y0/img.gif&quot; data-alt=&quot;[Basic]&amp;amp;nbsp;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0PhM9/btroVkgrPam/Wj4hPbfJbUX8Bk2O0l42y0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/b0PhM9/btroVkgrPam/Wj4hPbfJbUX8Bk2O0l42y0/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;553&quot; height=&quot;210&quot; data-origin-width=&quot;625&quot; data-origin-height=&quot;237&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[Basic]&amp;nbsp;&lt;/figcaption&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;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;706&quot; data-origin-height=&quot;742&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xDD1N/btroStZKZop/emVLNvmk2O1zPuATR6Ds40/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xDD1N/btroStZKZop/emVLNvmk2O1zPuATR6Ds40/img.gif&quot; data-alt=&quot;[Automated]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xDD1N/btroStZKZop/emVLNvmk2O1zPuATR6Ds40/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/xDD1N/btroStZKZop/emVLNvmk2O1zPuATR6Ds40/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;304&quot; height=&quot;319&quot; data-origin-width=&quot;706&quot; data-origin-height=&quot;742&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[Automated]&lt;/figcaption&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;size16&quot;&gt;&lt;span&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-origin-width=&quot;568&quot; data-origin-height=&quot;360&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DxSFE/btroREU2nI8/L3cuDn1sOsWXlujwVsj7i0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DxSFE/btroREU2nI8/L3cuDn1sOsWXlujwVsj7i0/img.gif&quot; data-alt=&quot;[Console]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DxSFE/btroREU2nI8/L3cuDn1sOsWXlujwVsj7i0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/DxSFE/btroREU2nI8/L3cuDn1sOsWXlujwVsj7i0/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;316&quot; height=&quot;199&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;360&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[Console]&lt;/figcaption&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;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&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;1024&quot; data-origin-height=&quot;738&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/T09hn/btroSuqThpN/kt3iWhpz3Ie6jxdWmqea40/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/T09hn/btroSuqThpN/kt3iWhpz3Ie6jxdWmqea40/img.gif&quot; data-alt=&quot;[Curses]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/T09hn/btroSuqThpN/kt3iWhpz3Ie6jxdWmqea40/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/T09hn/btroSuqThpN/kt3iWhpz3Ie6jxdWmqea40/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;344&quot; height=&quot;248&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;738&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[Curses]&lt;/figcaption&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;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Computer Science/Software Engineering</category>
      <author>dev.Woody</author>
      <guid isPermaLink="true">https://dev-woody.tistory.com/69</guid>
      <comments>https://dev-woody.tistory.com/69#entry69comment</comments>
      <pubDate>Sun, 26 Dec 2021 13:37:39 +0900</pubDate>
    </item>
    <item>
      <title>C Unit Test Automation(Framework) - TDD</title>
      <link>https://dev-woody.tistory.com/68</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;가장 기본적인 실행 단위&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;는&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;C&lt;/span&gt;&lt;span&gt;언어에서 함수&lt;/span&gt;&lt;span&gt;(Function)&lt;/span&gt;&lt;span&gt;에 해당한다&lt;/span&gt;&lt;span&gt;.Unit Test Automation&lt;/span&gt;&lt;span&gt;은 두가지로 구분된다&lt;/span&gt;&lt;span&gt;. Blackbox Testing&lt;/span&gt;&lt;span&gt;과&lt;/span&gt;&lt;span&gt;Whitebox Testing&lt;/span&gt;&lt;span&gt;으로 나뉜다&lt;/span&gt;&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;size16&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;Black box testing&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;블랙박스 검사는 소프트웨어 검사 방법 중 하나로 어떤 소프트웨어를 내부 구조나 작동 원리&lt;/span&gt;&lt;span&gt;를 모르는 상태에서 소프트웨어의 동작을 검사하는 방법을 이르는 말이다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;주로 올바른 입력&lt;/span&gt;&lt;span&gt;과 올바르지 않은 입력을 일일이 다 동원하여 올바른 출력을 판별하는 방식으로 검사가 이루&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;어지기 때문에 검사의 진행에 있어 대상이 되는 소프트웨어의 코드나 내부 구조 및 개발 노&lt;/span&gt;&lt;span&gt;하우에 대한 정보는 기본적으로 필요로 하지 않는다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;필요한 것은 특징&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;요구 사항&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;검사를&amp;nbsp;&lt;/span&gt;&lt;span&gt;위해 공개된 설계도 등 대외적으로 공개된 사항들이며&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;'&lt;/span&gt;&lt;span&gt;이 소프트웨어는 무슨 역할을 수행해&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;야 되는가&lt;/span&gt;&lt;span&gt;'&lt;/span&gt;&lt;span&gt;와 같이 대상이 되는 소프트웨어의 특징이나 요구 사항 등에 초점을 맞춰 검사가&lt;/span&gt;&lt;span&gt;이루어진다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;검사 자체는 기능에 관한 것일 수도 있고 기능 외의 것에 관한 것일 수도 있다&lt;/span&gt;&lt;span&gt;.&lt;a href=&quot;applewebdata://7F261401-9D2D-4F98-92AE-E2A1E2B2C7FB#_ftn1&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[1]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;White box testing&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;화이트박스 검사는 소프트웨어 내부 소스 코드를 테스트하는 기법이다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;소프트웨어를 테스트&lt;/span&gt;&lt;span&gt;하는 방법은 크게 블랙박스 검사&lt;/span&gt;&lt;span&gt;(Black-Box Test)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;기법과 화이트박스 검사&lt;/span&gt;&lt;span&gt;(White-Box Test)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;기&lt;/span&gt;&lt;span&gt;법이 있다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;블랙박스 검사 기법은 소프트웨어의 내부를 보지 않고&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;입력과 출력 값을 확인하&lt;/span&gt;&lt;span&gt;여&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;기능의 유효성을 판단하는 테스트 기법이며&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;화이트박스 검사 기법은 소프트웨어 내부 소&lt;/span&gt;&lt;span&gt;스코드를 확인하는 기법이다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;화이트박스 테스트를 하는 이유는 내부 소스코드의 동작을 개&lt;/span&gt;&lt;span&gt;발자가 추적 할 수 있기 때문에&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;동작의 유효성뿐만 아니라 실행 되는 과정을 살펴봄으로써&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;코드가 어떤 경로로 실행되며&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;불필요한 코드 혹은 테스트 되지 못한 부분을 살펴볼 수 있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;화이트박스 테스트를 하는 부분은 대개 코드의 실행 경로를 확인해야 하기때문에 시중에 나&lt;/span&gt;&lt;span&gt;와 있는 커버리지 분석도구를 많이 활용한다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;화이트박스 검사 기법은 블랙박스 검사 기법에&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;비해 많은 시간과 분석을 필요로 하지만 오류가 발생 되는 결함의 위치 등을 파악하는데 매&lt;/span&gt;&lt;span&gt;우 유용하게 사용 할 수 있다&lt;/span&gt;&lt;span&gt;.&lt;a href=&quot;applewebdata://7F261401-9D2D-4F98-92AE-E2A1E2B2C7FB#_ftn2&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[2]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;Unit Test Automation(Framework)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&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 width=&quot;136&quot;&gt;&lt;span&gt;&lt;span&gt;CMOCK&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;136&quot;&gt;&lt;span&gt;&lt;span&gt;BMOCK&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;136&quot;&gt;&lt;span&gt;&lt;span&gt;CuTest&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;136&quot;&gt;&lt;span&gt;&lt;span&gt;Cfix&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;136&quot;&gt;&lt;span&gt;&lt;span&gt;Check&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;136&quot;&gt;&lt;span&gt;&lt;span&gt;API Sanity AutoTest&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;136&quot;&gt;&lt;span&gt;&lt;span&gt;CUnit&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;136&quot;&gt;&lt;span&gt;&lt;span&gt;AceUnit&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;136&quot;&gt;&lt;span&gt;&lt;span&gt;GNU Autounit&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;136&quot;&gt;&lt;span&gt;&lt;span&gt;embUnit&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;136&quot;&gt;&lt;span&gt;&lt;span&gt;MinUnit&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;136&quot;&gt;&lt;span&gt;&lt;span&gt;HWUT&lt;a href=&quot;applewebdata://37B67E44-2C97-4DFF-B838-3886FFCDFF8A#_ftn1&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[3]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&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;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Cunit&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이란&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;?&lt;/span&gt;&lt;/b&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CUnit&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;은&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;C&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;로 작성된 소스에 대해서&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Unit Test&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 지원해주는 라이브러리이다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;. . C unit&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;은 어떤 함수의 리턴값이 예상한 값과 맞는지 블랙박스 테스트를 하기 용이하다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.CUnit&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;의 테스트 구조는&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Registry&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;있고&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Registry&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;안에&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Suite&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가 있고 그 내부에&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Test&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;들이 존재하는 구조를 가진다&lt;/span&gt;&lt;span style=&quot;color: #000000;&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;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Cunit&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;에서 사용되는 헤더 파일&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.41860465116278%; height: 173px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 36px;&quot;&gt;
&lt;td style=&quot;height: 36px;&quot; width=&quot;146&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;#include&amp;lt;&amp;nbsp;CUnit/CUnit.h&amp;nbsp;&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 36px;&quot; width=&quot;151&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 케이스에 사용하기 위한&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;ASSERT&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;매크로&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 36px;&quot; width=&quot;151&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;#include &amp;lt;CUnit/Automated.h &amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 36px;&quot; width=&quot;135&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;xml&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;출력이 있는 자동화된 인터페이스&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 36px;&quot;&gt;
&lt;td style=&quot;height: 36px;&quot; width=&quot;146&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;#include &amp;lt;CUnit/CUError.h &amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 36px;&quot; width=&quot;151&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;함수 및 데이터 유형 오류 처리&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 36px;&quot; width=&quot;151&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;#include &amp;lt; CUnit/Basic.h &amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 36px;&quot; width=&quot;135&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;stdout&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;에 대한 비대화형 출력이 있는 기본 인터페이스&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 36px;&quot;&gt;
&lt;td style=&quot;height: 36px;&quot; width=&quot;146&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;#include &amp;lt; CUnit/TestDB.h &amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 36px;&quot; width=&quot;151&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 레지스트리&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;제품군 및 테스트에 대한 데이터 조작&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 36px;&quot; width=&quot;151&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;#include &amp;lt; CUnit/Console.h &amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 36px;&quot; width=&quot;135&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;대화형 콘솔 인터페이스&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 36px;&quot;&gt;
&lt;td style=&quot;height: 36px;&quot; width=&quot;146&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;#include &amp;lt; CUnit/TestRun.h &amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 36px;&quot; width=&quot;151&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트를 실행하고 결과를 검색하기 위한 데이터 함수&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 36px;&quot; width=&quot;151&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;#include &amp;lt; CUnit/CUCurses.h &amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 36px;&quot; width=&quot;135&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;대화형 콘솔 인터페이스&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(*nix).&lt;/span&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;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Computer Science/Software Engineering</category>
      <author>dev.Woody</author>
      <guid isPermaLink="true">https://dev-woody.tistory.com/68</guid>
      <comments>https://dev-woody.tistory.com/68#entry68comment</comments>
      <pubDate>Sun, 26 Dec 2021 13:30:33 +0900</pubDate>
    </item>
    <item>
      <title>CMMI와 유사한 국내외 평가모델-SP인증</title>
      <link>https://dev-woody.tistory.com/67</link>
      <description>&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&gt;&lt;b&gt;CMMI&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #202122;&quot;&gt;는 소프트웨어와 시스템 공학의 역량 성숙도를 평가하는 모델이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;CMMi&lt;/span&gt;&lt;span&gt;와 유사한 국내의 평가모델로는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;SP&lt;/span&gt;&lt;span&gt;인증이 있다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;소프트웨어 프로세스 품질인증&lt;/span&gt;&lt;span&gt;(SP&lt;/span&gt;&lt;span&gt;인증&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;은 소프트웨어산업진흥법 제&lt;/span&gt;&lt;span&gt;23&lt;/span&gt;&lt;span&gt;조에 근거하여 국내 소프트웨어 기업의 소프트웨어 사업 수행능력을 강화하고 소프트웨어 사업의 부실방지를 목적으로 기업의 소프트웨어 개발단계별 작업절차 및 산출물 관리 역량 등을 분석하여 소프트웨어 개발 프로세스 역량 수준을 평가 및 인증하는 제도이다&lt;/span&gt;&lt;span&gt;. SP&lt;/span&gt;&lt;span&gt;인증은 대기업에 비해 상대적으로 열악한 환경에 처해있는 중소기업의 소프트웨어 품질개선 활동을 지원하고자 만들어진 제도로&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;CMMI&lt;/span&gt;&lt;span&gt;를 참조하여 개발되었으나&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;중소기업에서 보다 수월하게 활용할 수 있도록 내용을 축약하였다&lt;/span&gt;&lt;span&gt;.&lt;a href=&quot;applewebdata://B4270EB9-B0D8-4D30-A999-43CF40060EA3#_ftn1&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[1]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;과학기술정보통신부에서 정책을 지원&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;관리&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;감독하고 있으며 인증기관인 정보통신산업진흥원&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;nipa&lt;/span&gt;&lt;span&gt;에서 인증심사원과 인증심의회를 관리한다&lt;/span&gt;&lt;span&gt;. SP&lt;/span&gt;&lt;span&gt;가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;CMMi&lt;/span&gt;&lt;span&gt;인증을 받기 어려운 중소기업을 대상으로 만들어진 만큼&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;상세한 품질인증 기준&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;품질 인증 등급간에 여러 차이점이 존재한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;우선&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;가장 큰 차이점은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;CMMi&lt;/span&gt;&lt;span&gt;는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;SW&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;개발 성숙도 및 품질 개선을 위한 평가 모델이며&lt;/span&gt;&lt;span&gt;, SP&lt;/span&gt;&lt;span&gt;는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;SW&lt;/span&gt;&lt;span&gt;개발 성숙도 평가 및 인증제도이다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;따라 컨설팀과 심사를 분리하지 않고&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;프로세스 효율 개선을 중시하는&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;CMMi&lt;/span&gt;&lt;span&gt;와 달리&lt;/span&gt;&lt;span&gt;, SP&lt;/span&gt;&lt;span&gt;인증은 심사가 컨실팅과 독립적으로 진행되어 심사결과의 객관성을 중시한다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;또한&lt;/span&gt;&lt;span&gt;, SP&lt;/span&gt;&lt;span&gt;가 국내의 인증 제도이므로&lt;/span&gt;&lt;span&gt;, SW&lt;/span&gt;&lt;span&gt;기술 평가시 우대하거나&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;국방분야 연구개발 사업선정 또는 소프트웨어 사업 선정시 가산점을 부여하는 등의 국가적인 제도적 혜택이 제공된다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;이 부분에 있어도&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;CMMi&lt;/span&gt;&lt;span&gt;모델과의 차이점이 있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;품질인증 등급과 관련하여&lt;/span&gt;&lt;span&gt;, CMMi&lt;/span&gt;&lt;span&gt;는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;개의 단계로 구성되며&lt;/span&gt;&lt;span&gt;, SP&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;인증은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;개의 등급으로 분류된다&lt;/span&gt;&lt;span&gt;. CMMi&lt;/span&gt;&lt;span&gt;에서 성숙도 레벨&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;단계는 레벨&lt;/span&gt;&lt;span&gt;1(Initial)&lt;/span&gt;&lt;span&gt;은 조직보다는 개인의 역량에 따라서 프로젝트의 성공과 실패가 좌우되는 경우를 의미한다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;소프트웨어 개발 프로세서는 거의 없는 상태를 의미한다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;레벨&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;2(Managed)&lt;/span&gt;&lt;span&gt;는 프로세스 하에서 프로젝트가 통제되는 수준으로 조직은 프로세서의 어느 정도 훈련이 되었다고 볼 수 있지만&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;일정이나 비용같은 프로세스 중심적이고&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;기존의 사례를 응용하는 정도이다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;레벨&lt;/span&gt;&lt;span&gt;3(Defined)&lt;/span&gt;&lt;span&gt;는 조직을 위한 표준 프로세스가 존재하며&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;모든 프로젝트는 조직의 프로세서에 따라 조정할 수 있는 레벨이다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;레벨&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;4(Quantitatively Managed)&lt;/span&gt;&lt;span&gt;는 소프트웨어 프로세스와 소프트웨어 품질에 대한 정량적인 측정이 가능한 정도이다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;프로젝트의 성과를 정량적으로 측정하고 분석할 수 있는 레벨이다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;레벨&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;5(Optimizing)&lt;/span&gt;&lt;span&gt;는 기존 레벨을 모두 만족하고 지속적인 개선에 치중하는 레벨이다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;다음으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;sp&lt;/span&gt;&lt;span&gt;인증에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;등급은 프로젝트 성공 여부와 관계없이 특정 프로젝트를 수행할 수 있는 수준이나&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;프로젝트 수행을 위 한 기본적인 활동들이 안정적으로 수행되지 못해 품질&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;비용&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;납기 측면에서 기대되는 목표를 충 족시키지 못할 확률이 높은 상태로 프로젝트 수행을 위한 프로세스 역량 개선이 필요한 수준&lt;/span&gt;&lt;a href=&quot;applewebdata://B4270EB9-B0D8-4D30-A999-43CF40060EA3#_ftn2&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[2]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt;이다&lt;/span&gt;&lt;span&gt;. CMMi&lt;/span&gt;&lt;span&gt;와 동일하게&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;단계는 아무 인증도 받지 못한 등급이므로&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;결과적으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;등급&lt;/span&gt;&lt;span&gt;, 3&lt;/span&gt;&lt;span&gt;등급으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;개의 등급으로 구성된다&lt;/span&gt;&lt;span&gt;. 2&lt;/span&gt;&lt;span&gt;단계는 개별 프로젝트를 수행하기 위해 필요한 프로젝트 차원의 프로세스가 수립되고&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;이를 기반으로 프로젝트를 통제하여 성공적으로 프로젝트를 수행할 수 있는 역량 수준이다&lt;/span&gt;&lt;span&gt;. 3&lt;/span&gt;&lt;span&gt;등급은 조직의 프로세스 체계를 정의하고 정량적인 데이터 관리를 통해 조직 차원의 프로세스를 개선하고 발생되는 문제의 근본 원인을 해결함으로써 일관된 품질수준의 프로젝트 수행이 가능하며&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;지속적으로 프로세스를 개선할 수 있는 역량 수준 이다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;applewebdata://B4270EB9-B0D8-4D30-A999-43CF40060EA3#_ftn3&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[3]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span&gt;간단하게 말하자면&lt;/span&gt;&lt;span&gt;, 2&lt;/span&gt;&lt;span&gt;등급은 프로젝트 차원&lt;/span&gt;&lt;span&gt;, 3&lt;/span&gt;&lt;span&gt;등급은 조직차원의 품질역량 수준이 인정된 경우를 의미한다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;평가 방식과 목적이 다르기 때문에 둘을 비교하는데에 다소 어려움이 있지만&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;조달청 무기계약서에서 이용되는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;SW&lt;/span&gt;&lt;span&gt;프로세서 등급 환산비율을 확인하면&lt;/span&gt;&lt;span&gt;, SP&lt;/span&gt;&lt;span&gt;인증&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;등급은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;CMMi 4~5&lt;/span&gt;&lt;span&gt;레벨에 해당하며&lt;/span&gt;&lt;span&gt;, SP&lt;/span&gt;&lt;span&gt;인증&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;등급 같은 경우에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;CMMi&lt;/span&gt;&lt;span&gt;등급&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;2~3&lt;/span&gt;&lt;span&gt;레벨에 해당한다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;이전에는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;CMMi&lt;/span&gt;&lt;span&gt;는 목표레벨에 실패하였어도 하위 레벨에 성공하면 하위레벨을 부여하고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;SP&lt;/span&gt;&lt;span&gt;는 인증 실패로 구분하였지만&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;현재는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;등급을 신청하였으나&lt;/span&gt;&lt;span&gt;, 2&lt;/span&gt;&lt;span&gt;등급 영역만을 인정받은 경우에는&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;2&lt;/span&gt;&lt;span&gt;등급을 부여하는 것으로 변경되었다&lt;/span&gt;&lt;span&gt;.&lt;a href=&quot;applewebdata://B4270EB9-B0D8-4D30-A999-43CF40060EA3#_ftn4&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[4]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;CMMi&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;프로세스 영역은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;process management, project management, engineering, support&lt;/span&gt;&lt;span&gt;로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;가지로 구성되어 있으며&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;SP&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;인증의 프로세스 영역이 프로젝트 관리 영역&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;개발 영역&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;지원 영역&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;조직 관리 영역&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;프로세스 개선 영역으로 총&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;가지로 구분되어 있다는 점도 차이점이다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&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-origin-width=&quot;1278&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sY2XI/btroRZq55om/BPTqB50wxVu9XdvibNxjh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sY2XI/btroRZq55om/BPTqB50wxVu9XdvibNxjh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sY2XI/btroRZq55om/BPTqB50wxVu9XdvibNxjh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsY2XI%2FbtroRZq55om%2FBPTqB50wxVu9XdvibNxjh1%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;709&quot; height=&quot;416&quot; data-origin-width=&quot;1278&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt;년의 획득 현황 같은 경우에는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt;년 기준&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;SP&lt;/span&gt;&lt;span&gt;인증은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;등급으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;26&lt;/span&gt;&lt;span&gt;건 총&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;26&lt;/span&gt;&lt;span&gt;건 존재하였으며&lt;/span&gt;&lt;a href=&quot;applewebdata://B4270EB9-B0D8-4D30-A999-43CF40060EA3#_ftn5&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[5]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt;, CMMi&lt;/span&gt;&lt;span&gt;의 경우&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;level 2 7&lt;/span&gt;&lt;span&gt;건&lt;/span&gt;&lt;span&gt;, level3 63&lt;/span&gt;&lt;span&gt;건&lt;/span&gt;&lt;span&gt;, level4 11&lt;/span&gt;&lt;span&gt;건&lt;/span&gt;&lt;span&gt;, level5 7&lt;/span&gt;&lt;span&gt;건으로 총&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;88&lt;/span&gt;&lt;span&gt;건 존재하였다&lt;/span&gt;&lt;span&gt;.&lt;a href=&quot;applewebdata://B4270EB9-B0D8-4D30-A999-43CF40060EA3#_ftn6&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;[6]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;SP 2&lt;/span&gt;&lt;span&gt;등급 인증의 경우&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;주&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;케이티디에스&lt;/span&gt;&lt;span&gt;, (&lt;/span&gt;&lt;span&gt;주&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;위니텍&lt;/span&gt;&lt;span&gt;, (&lt;/span&gt;&lt;span&gt;주&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;오션정보기술등의 중소기업등이 많이 있었다&lt;/span&gt;&lt;span&gt;. CMMi level 5&lt;/span&gt;&lt;span&gt;의 경우 ㈜한화&lt;/span&gt;&lt;span&gt;(2&lt;/span&gt;&lt;span&gt;건&lt;/span&gt;&lt;span&gt;),&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;한화시스템&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;한국항공우주산업&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;휴니드테크놀러지스&lt;/span&gt;&lt;span&gt;, LIG&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;넥스원&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;국방과학연구소등의 주로 대기업등이 포진되어 있었다&lt;/span&gt;&lt;span&gt;. SP&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;인증의 경우 중소 기업을 위한 인증제도로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;등급 기준&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;700&lt;/span&gt;&lt;span&gt;만원선이며&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;심사비의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;50%&lt;/span&gt;&lt;span&gt;지원 등의 다양한 지원제도가 존재한다는 점이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;SP&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;인증에 국내 중소기업이 많이 포진해있는 것으로 판단된다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;위의 내용을 표로 정리하면 다음과 같다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&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 width=&quot;60&quot;&gt;&lt;span&gt;&lt;span&gt;구분&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;190&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SP&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인증&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;190&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CMMi&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;190&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SPICE&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;60&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;국내외&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;190&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;국내기준&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;190&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시장표준&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;미국&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;190&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;국제표준&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;60&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;목적&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;190&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;조직의 프로세스 역량 수준을 평가하기 위한 모델&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;190&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;조직의 프로세스 역량 수준을 개선하기 위한 모델&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;190&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;조직의 프로세스 역량 수준을 개선하기 위한 모델&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;60&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;등급&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;190&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;단계&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(1, 2. 3&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;등급&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;190&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;단계&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(level 1~level 5)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;190&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;단계&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(level 0~level 5)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;60&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;구조&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;190&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;영역&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;평가항목&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;세부평가항목&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;190&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;process category&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;process area&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;goal&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;practice&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;190&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;process category&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;process group&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;process purpose&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;base practice&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;60&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;프로세스&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;190&quot;&gt;&lt;span&gt;&lt;span&gt;프로젝트 관리 영역&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;개발 영역&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;지원 영역&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;조직 관리 영역&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;프로세스 개선 영역&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;190&quot;&gt;&lt;span&gt;&lt;span&gt;process management&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;project management&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;engineering&lt;br /&gt;support&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;190&quot;&gt;&lt;span&gt;&lt;span&gt;primary life cycle&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;supporting life cycle&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;organizational life cycle&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;60&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;년&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;현황&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;190&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;26&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;건&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;190&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;88&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;건&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;190&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;60&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인증비용&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;190&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;700&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;만원&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(2&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;단계&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;190&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4000&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;만원&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(level2)[&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;추정&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;]&lt;a href=&quot;applewebdata://B4270EB9-B0D8-4D30-A999-43CF40060EA3#_ftn7&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[7]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td width=&quot;190&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;
&lt;div id=&quot;ftn1&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;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Computer Science/Software Engineering</category>
      <author>dev.Woody</author>
      <guid isPermaLink="true">https://dev-woody.tistory.com/67</guid>
      <comments>https://dev-woody.tistory.com/67#entry67comment</comments>
      <pubDate>Sun, 26 Dec 2021 13:23:12 +0900</pubDate>
    </item>
    <item>
      <title>Requirements Engineering</title>
      <link>https://dev-woody.tistory.com/65</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Requirements의 구분&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;-FR(Functional Requirement) : &lt;/b&gt;Statements of services the system should provide&lt;br /&gt;&lt;b&gt;-NFR(Non Functional Requirement)(Quality) : &lt;/b&gt;전체 시스템이 나왔을 때 판별이 가능하다. Quality가 대표적이며, 이외에는 Safetym Security, Reliablility등이 있다. NFR이 FR보다 중요한 경우가 존재한다. NFR은 전체 시스템의 아키텍처 디자인에 영향을 끼치며, NFR을 정의하는 과정에서 많은 FR들이 생겨난다.&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;&lt;b&gt;-User Requirements&lt;/b&gt;(User로 부터 도출되고 User-Level에서 정해진다, High-Level) : 다양한 Stackholder가 관여한다. 대체적으로 User Requirements는 Buisness Requirement로 불린다. User-Level에서 정의되기 때문에 Requirement가 다소 불분명하다는 특징이 존재한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;-System Requirements&lt;/b&gt;(Specified for Developers) : 개발자가 구현을 위해서 분석한 Requirement이다.&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;Requirement는 C&amp;amp;C(Complete &amp;amp; Consistent)를 확보하는 것이 중요하다. User-Leve의 Requirement가 다소 불분명하다는 특징을 해소하고, 그 사이의 Gap을 메꾸어야 한다.&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;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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>dev.Woody</author>
      <guid isPermaLink="true">https://dev-woody.tistory.com/65</guid>
      <comments>https://dev-woody.tistory.com/65#entry65comment</comments>
      <pubDate>Sat, 11 Dec 2021 17:55:19 +0900</pubDate>
    </item>
    <item>
      <title>특정 포트를 사용하는 프로세스 죽이기</title>
      <link>https://dev-woody.tistory.com/59</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Window11 Logo.png&quot; data-origin-width=&quot;3300&quot; data-origin-height=&quot;2063&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l4ATe/btrm9DW403y/08DSjEOZxWgg9VmONe3kHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l4ATe/btrm9DW403y/08DSjEOZxWgg9VmONe3kHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l4ATe/btrm9DW403y/08DSjEOZxWgg9VmONe3kHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl4ATe%2Fbtrm9DW403y%2F08DSjEOZxWgg9VmONe3kHk%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;3300&quot; height=&quot;2063&quot; data-filename=&quot;Window11 Logo.png&quot; data-origin-width=&quot;3300&quot; data-origin-height=&quot;2063&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222426;&quot;&gt;윈도우에서 개발 도중 특정 포트가 종료되지 않았을 때 다시 프로그램을 실행하면 에러가 발생한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222426;&quot;&gt;&lt;span style=&quot;caret-color: #222426;&quot;&gt;다음 명령어를 통해서 연결된 포트 확인이 가능하다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;netstat -ano&lt;/b&gt;&lt;br /&gt;-a&amp;nbsp;: 모든 포트를 표시&lt;br /&gt;-n&amp;nbsp;: &quot;IP주소:포트&quot; &amp;nbsp;ex) 192.168.0.100:8080&lt;br /&gt;-o&amp;nbsp;: PID 표시&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;&lt;b&gt;taskkill&amp;nbsp;/f&amp;nbsp;/pid&amp;nbsp;[PID]&lt;br /&gt;&lt;/b&gt;&lt;/b&gt;위의 명령어로 PID에 해당하는 프로세스를 죽일 수 있다. 이때 netstat -o 명령어를 통해 확인한 pid를 입력하여 죽일 수 있다.&lt;b&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/b&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;taskkill /f /im explorer.exe&lt;br /&gt;&lt;/b&gt;이 명령어를 통해서는 프로그램 이름으로 프로세서를 죽일 수 있다.&lt;/p&gt;
&lt;/blockquote&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;3000번 포트를 사용하는 프로세스를 죽이는 bat파일을 만든다면 다음과 같이 사용할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1638793156128&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;netstat -ano | findstr :3000
set /p str=What is pid:
taskkill /f /pid %str%
cmd /k&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;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;3000번 포트를 사용하는 프로세스를 죽이는 bat파일&lt;/b&gt;&lt;br /&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/JwwdH/btrm7MfEmeW/XfmsDSDvL1h28NDA5ZNm4K/killport3000.bat?attach=1&amp;amp;knm=tfile.bat&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;killport3000.bat&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/blockquote&gt;</description>
      <category>Operating System/Window</category>
      <author>dev.Woody</author>
      <guid isPermaLink="true">https://dev-woody.tistory.com/59</guid>
      <comments>https://dev-woody.tistory.com/59#entry59comment</comments>
      <pubDate>Mon, 6 Dec 2021 21:26:11 +0900</pubDate>
    </item>
    <item>
      <title>Cunit이란?</title>
      <link>https://dev-woody.tistory.com/58</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;C Logo.png&quot; data-origin-width=&quot;732&quot; data-origin-height=&quot;497&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AFDdH/btrnd4sqXvb/eHUl6OqnOuhiuU1uhNkjy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AFDdH/btrnd4sqXvb/eHUl6OqnOuhiuU1uhNkjy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AFDdH/btrnd4sqXvb/eHUl6OqnOuhiuU1uhNkjy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAFDdH%2Fbtrnd4sqXvb%2FeHUl6OqnOuhiuU1uhNkjy1%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;732&quot; height=&quot;497&quot; data-filename=&quot;C Logo.png&quot; data-origin-width=&quot;732&quot; data-origin-height=&quot;497&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CUnit&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;은&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;C&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;로 작성된 소스에 대해서&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Unit Test&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 지원해주는 라이브러리이다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;. . C unit&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;은 어떤 함수의 리턴값이 예상한 값과 맞는지 블랙박스 테스트를 하기 용이하다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.CUnit&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;의 테스트 구조는&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Registry&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;있고&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Registry&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;안에&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Suite&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가 있고 그 내부에&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Test&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;들이 존재하는 구조를 가진다&lt;/span&gt;&lt;span style=&quot;color: #000000;&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;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Cunit&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;에서 사용되는 헤더 파일&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 98.48837209302323%; height: 221px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 36px;&quot;&gt;
&lt;td style=&quot;height: 36px; width: 25%;&quot; width=&quot;146&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;#include&amp;lt;&amp;nbsp;CUnit/CUnit.h&amp;nbsp;&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 36px; width: 25.813953488372093%;&quot; width=&quot;151&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 케이스에 사용하기 위한&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;ASSERT&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;매크로&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 36px; width: 25.813953488372093%;&quot; width=&quot;151&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;#include &amp;lt;CUnit/Automated.h &amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 36px; width: 23.372093023255815%;&quot; width=&quot;135&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;xml&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;출력이 있는 자동화된 인터페이스&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 36px;&quot;&gt;
&lt;td style=&quot;height: 36px; width: 25%;&quot; width=&quot;146&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;#include &amp;lt;CUnit/CUError.h &amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 36px; width: 25.813953488372093%;&quot; width=&quot;151&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;함수 및 데이터 유형 오류 처리&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 36px; width: 25.813953488372093%;&quot; width=&quot;151&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;#include &amp;lt; CUnit/Basic.h &amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 36px; width: 23.372093023255815%;&quot; width=&quot;135&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;stdout&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;에 대한 비대화형 출력이 있는 기본 인터페이스&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 36px;&quot;&gt;
&lt;td style=&quot;height: 36px; width: 25%;&quot; width=&quot;146&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;#include &amp;lt; CUnit/TestDB.h &amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 36px; width: 25.813953488372093%;&quot; width=&quot;151&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 레지스트리&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;제품군 및 테스트에 대한 데이터 조작&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 36px; width: 25.813953488372093%;&quot; width=&quot;151&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;#include &amp;lt; CUnit/Console.h &amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 36px; width: 23.372093023255815%;&quot; width=&quot;135&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;대화형 콘솔 인터페이스&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 36px;&quot;&gt;
&lt;td style=&quot;height: 36px; width: 25%;&quot; width=&quot;146&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;#include &amp;lt; CUnit/TestRun.h &amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 36px; width: 25.813953488372093%;&quot; width=&quot;151&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트를 실행하고 결과를 검색하기 위한 데이터 함수&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 36px; width: 25.813953488372093%;&quot; width=&quot;151&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;#include &amp;lt; CUnit/CUCurses.h &amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 36px; width: 23.372093023255815%;&quot; width=&quot;135&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;대화형 콘솔 인터페이스&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(*nix).&lt;/span&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;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Cunit Test Code&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;작성하기&lt;/span&gt;&lt;/b&gt;&lt;b&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;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 진행할 코드&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;두 값을 더하는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;함수의 테스트를 진행해보자&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1638792698079&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int add(int a,int b){
   return a+b
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트를 위한 함수 작성하기&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;-&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;간단하게 더하기 함수를 작성하였다&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CU_ASSERT_EQUAL([&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;함수&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(,)], [&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;예측값&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;])&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 이용하여 함수와 예측값을 넣어준다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot;&gt;&lt;code&gt;void testAdd(void){
      CU_ASSERT_EQUAL(add(1,1),2);
}&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;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스위트 선언하기&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CU_Psuite&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 통해서 스위트를 선언해준다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1638792759732&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CU_pSuite suite = NULL;&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;size16&quot;&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 레지스터리 초기화 하기&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CU_initialize_registry()&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 활용해서 테스트 레지스터리를 초기화 해줄 수 있다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1638792780784&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if(CUE_SUCCESS != CU_initialize_registry())  //레지스터리 초기화
         return CU_get_error();&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;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 레지스터리에 스위트를 추가&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CU_add_suite&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 통해 테스트 레지스터리에 스위트를 추가한다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;pSuite = CU_add_suite(&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스위트 이름&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;, [&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 시작 전 함수&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;], [&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 시작 후 함수&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;]);&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot;&gt;&lt;code&gt;pSuite = CU_add_suite(&quot;suite&quot;, NULL, NULL);
      if(NULL = pSuite){
            CU_cleanup_registry();
            retrun CU_get_error();
      }&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;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스위트에 테스트 추가&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;CU_add_test(suite, &quot;&lt;/span&gt;&lt;span&gt;테스트 제목&lt;/span&gt;&lt;span&gt;&quot;, [&lt;/span&gt;&lt;span&gt;테스트함수&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot;&gt;&lt;code&gt;if ((NULL == CU_add_test(pSuite, &quot;test add&quot;, testAdd))){
      CU_cleanup_registry();
      return CU_get_error();
   }&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;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;적절한 인터페이스 선택 후 실행 테스트&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CU_basic_set_mode&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 통해 모드를 선택하고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CU_basic_run_tests&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 통해 테스트를 실행한다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이때&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용가능한 인테퍼이스는 총&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;개가 있다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Automated : xml&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;파일 출력&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;. Basic :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;표준 출력&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Console :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;콘솔입력&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;표준출력&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Curses : GUI (UNIX)&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot;&gt;&lt;code&gt;CU_basic_set_mode(CU_BRM_VERBOSE);
CU_basic_run_tests();&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;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 레지스터 정리&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CU_cleanup_registry&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 통해 테스트 레지스터를 정리한다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;abnf&quot;&gt;&lt;code&gt;CU_cleanup_registry();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Cunit&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;각 인터페이스별 출력&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&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;625&quot; data-origin-height=&quot;237&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ACSxb/btrnfBKbctf/JNmkiKJcATXcgOrRCTyhWk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ACSxb/btrnfBKbctf/JNmkiKJcATXcgOrRCTyhWk/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ACSxb/btrnfBKbctf/JNmkiKJcATXcgOrRCTyhWk/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/ACSxb/btrnfBKbctf/JNmkiKJcATXcgOrRCTyhWk/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;491&quot; height=&quot;186&quot; data-origin-width=&quot;625&quot; data-origin-height=&quot;237&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&gt;[Basic]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&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-origin-width=&quot;706&quot; data-origin-height=&quot;742&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byCiRw/btrm1h8dLTs/BMzZFdLuzveKB0RZyn1Vf1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byCiRw/btrm1h8dLTs/BMzZFdLuzveKB0RZyn1Vf1/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byCiRw/btrm1h8dLTs/BMzZFdLuzveKB0RZyn1Vf1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/byCiRw/btrm1h8dLTs/BMzZFdLuzveKB0RZyn1Vf1/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;274&quot; height=&quot;288&quot; data-origin-width=&quot;706&quot; data-origin-height=&quot;742&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&gt;[Automated]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&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-origin-width=&quot;568&quot; data-origin-height=&quot;360&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkpW45/btrnc9Oy2db/QjckmY7o3r0Xn3KPRLp751/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkpW45/btrnc9Oy2db/QjckmY7o3r0Xn3KPRLp751/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkpW45/btrnc9Oy2db/QjckmY7o3r0Xn3KPRLp751/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bkpW45/btrnc9Oy2db/QjckmY7o3r0Xn3KPRLp751/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;389&quot; height=&quot;247&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;360&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&gt;[Console]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&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;1024&quot; data-origin-height=&quot;738&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBa98q/btrm5y22qh8/he7pshwgKSUfjgp9fBLBX1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBa98q/btrm5y22qh8/he7pshwgKSUfjgp9fBLBX1/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBa98q/btrm5y22qh8/he7pshwgKSUfjgp9fBLBX1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/cBa98q/btrm5y22qh8/he7pshwgKSUfjgp9fBLBX1/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;494&quot; height=&quot;356&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;738&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&gt;[Curses]&lt;/span&gt;&lt;/p&gt;</description>
      <category>Computer Science/Software Engineering</category>
      <author>dev.Woody</author>
      <guid isPermaLink="true">https://dev-woody.tistory.com/58</guid>
      <comments>https://dev-woody.tistory.com/58#entry58comment</comments>
      <pubDate>Mon, 6 Dec 2021 21:17:12 +0900</pubDate>
    </item>
    <item>
      <title>맥북 Google Test 설치하기</title>
      <link>https://dev-woody.tistory.com/57</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Google 테스트(gtest라고도 함)는 xUnit 아키텍처를 기반으로 하는 C 프로그래밍 언어용 단위 테스트 라이브러리이다.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;가이드는 이곳을 참고하면 된다.&lt;br /&gt;https://google.github.io/googletest/&lt;br /&gt;&lt;br /&gt;설치의 같은 경우 아래 링크를 참고해서 설치하였다.&lt;br /&gt;https://github.com/google/googletest/tree/main/googletest&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1638790455716&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git clone https://github.com/google/googletest.git -b release-1.11.0
cd googletest        # Main directory of the cloned repository.
mkdir build          # Create a directory to hold the build output.
cd build
cmake ..             # Generate native build scripts for GoogleTest.
make
sudo make install&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2021-12-06 오후 8.37.46.png&quot; data-origin-width=&quot;1812&quot; data-origin-height=&quot;1358&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NY8ZP/btrnevwFS0K/JWdmfaOkn6ALAK3ldhLtCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NY8ZP/btrnevwFS0K/JWdmfaOkn6ALAK3ldhLtCk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NY8ZP/btrnevwFS0K/JWdmfaOkn6ALAK3ldhLtCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNY8ZP%2FbtrnevwFS0K%2FJWdmfaOkn6ALAK3ldhLtCk%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;1812&quot; height=&quot;1358&quot; data-filename=&quot;스크린샷 2021-12-06 오후 8.37.46.png&quot; data-origin-width=&quot;1812&quot; data-origin-height=&quot;1358&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2021-12-06 오후 8.39.png&quot; data-origin-width=&quot;2084&quot; data-origin-height=&quot;1484&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czX0gA/btrnevDpm3j/ZjkfdRt1XZfJHgZhyyUKR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czX0gA/btrnevDpm3j/ZjkfdRt1XZfJHgZhyyUKR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czX0gA/btrnevDpm3j/ZjkfdRt1XZfJHgZhyyUKR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FczX0gA%2FbtrnevDpm3j%2FZjkfdRt1XZfJHgZhyyUKR0%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;2084&quot; height=&quot;1484&quot; data-filename=&quot;스크린샷 2021-12-06 오후 8.39.png&quot; data-origin-width=&quot;2084&quot; data-origin-height=&quot;1484&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2021-12-06 오후 8.45.54.png&quot; data-origin-width=&quot;2084&quot; data-origin-height=&quot;1484&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mI32i/btrm7M0W3gx/c3ZQyNcOpeLvvLyncsB5AK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mI32i/btrm7M0W3gx/c3ZQyNcOpeLvvLyncsB5AK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mI32i/btrm7M0W3gx/c3ZQyNcOpeLvvLyncsB5AK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmI32i%2Fbtrm7M0W3gx%2Fc3ZQyNcOpeLvvLyncsB5AK%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;2084&quot; height=&quot;1484&quot; data-filename=&quot;스크린샷 2021-12-06 오후 8.45.54.png&quot; data-origin-width=&quot;2084&quot; data-origin-height=&quot;1484&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Computer Science/Software Engineering</category>
      <category>M1 google Test</category>
      <category>Mac google test</category>
      <category>Mac unit test</category>
      <category>MacBook</category>
      <author>dev.Woody</author>
      <guid isPermaLink="true">https://dev-woody.tistory.com/57</guid>
      <comments>https://dev-woody.tistory.com/57#entry57comment</comments>
      <pubDate>Mon, 6 Dec 2021 20:46:28 +0900</pubDate>
    </item>
    <item>
      <title>[단축어] 학교 공지사항 크롤링 하기</title>
      <link>https://dev-woody.tistory.com/52</link>
      <description>&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Gnp1A/btrmmdFnUz2/zneYJ3YpD0KTETU66MDIr0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Gnp1A/btrmmdFnUz2/zneYJ3YpD0KTETU66MDIr0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Gnp1A/btrmmdFnUz2/zneYJ3YpD0KTETU66MDIr0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGnp1A%2FbtrmmdFnUz2%2FzneYJ3YpD0KTETU66MDIr0%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;300&quot; height=&quot;200&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모바일로 학교 홈페이지 들어가면 공지사항 맨날 잘린다.&lt;span&gt;&amp;nbsp;&lt;/span&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;126&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNEuAT/btrmwQP1YaP/Itrik70oYUHUxvg4WrfbhK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNEuAT/btrmwQP1YaP/Itrik70oYUHUxvg4WrfbhK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNEuAT/btrmwQP1YaP/Itrik70oYUHUxvg4WrfbhK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNEuAT%2FbtrmwQP1YaP%2FItrik70oYUHUxvg4WrfbhK%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;518&quot; height=&quot;126&quot; data-origin-width=&quot;518&quot; data-origin-height=&quot;126&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;들어가서 일일이 확인하기도 귀찮고, 눈에도 잘 안들어와서 아이폰 단축어로 학교 공지사항을 가져올 수 있도록 만들었다.&lt;/p&gt;
&lt;h3 id=&quot;단축어-공유&quot; data-ke-size=&quot;size23&quot;&gt;단축어 공유&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;링크를 연결하여 해당 공지사항을 상세히 볼 수 있도록 하였다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;건국대학교 공지사항 단축어&lt;br /&gt;&lt;a href=&quot;https://www.icloud.com/shortcuts/16998bd521a1492dbcb0c02ba0ab212a&quot;&gt;https://www.icloud.com/shortcuts/16998bd521a1492dbcb0c02ba0ab212a&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;922&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beCjLo/btrmjHUbMdk/Wb9DtrQ3ZFc8iL8ge5bOgk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beCjLo/btrmjHUbMdk/Wb9DtrQ3ZFc8iL8ge5bOgk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beCjLo/btrmjHUbMdk/Wb9DtrQ3ZFc8iL8ge5bOgk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeCjLo%2FbtrmjHUbMdk%2FWb9DtrQ3ZFc8iL8ge5bOgk%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;1280&quot; height=&quot;922&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;922&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;학교 웹사이트 Html을 가져와서 정규표현식으로 파싱해서 만들었다.&lt;/p&gt;
&lt;h3 id=&quot;단축어-만들기&quot; data-ke-size=&quot;size23&quot;&gt;단축어 만들기&lt;/h3&gt;
&lt;h4 id=&quot;1-학교-공지사항-url-가져오기&quot; data-ke-size=&quot;size20&quot;&gt;1. 학교 공지사항 URL 가져오기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학교 공지중에서 크게 의미 있는 공지는 학사공지, 장학공지, 취/창업 공지, 학생공지, 국제공지 정도 였기에 우선적으로 각각 개별 목록으로 만들고 크롬을 통해서 각각의 공지마다 URL을 찾았다.&lt;/p&gt;
&lt;pre class=&quot;nix&quot;&gt;&lt;code&gt;	iframe = document.getElementById(&quot;iframe_main&quot;);
	if(i == 5) {
		iframe.src = &quot;https://www.konkuk.ac.kr:443&quot;+&quot;/jsp/Plaza/plaza_01_09_list.jsp&quot;; 

	} else if (i == 1 || i == 2 || i == 3 || i == 6 ) {
		iframe.src = &quot;https://www.konkuk.ac.kr:443&quot;+&quot;/do/MessageBoard/ArticleList.do?forum=notice&amp;amp;cat=000030000&quot;+i; 
	} else if (i == 4)	{
		iframe.src = &quot;https://www.konkuk.ac.kr:443&quot;+&quot;/do/MessageBoard/ArticleList.do?forum=65659&amp;amp;cat=0010300001&quot;; 
	}else if (i == 7)	{
		iframe.src = &quot;https://www.konkuk.ac.kr:443&quot;+&quot;/do/MessageBoard/ArticleList.do?forum=11688412&quot;; 
	}else if (i == 8)	{
		iframe.src = &quot;https://www.konkuk.ac.kr:443&quot;+&quot;/do/MessageBoard/ArticleList.do?forum=11731332&quot;; 
	}else if (i == 9)	{
		//iframe.src = &quot;http://www.konkuk.ac.kr/do/MessageBoard/ArticleList.do?forum=11771557&quot;; 
		iframe.src = &quot;https://www.konkuk.ac.kr:443&quot;+&quot;/do/MessageBoard/ArticleList.do?forum=11782906&quot;;
	}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 URL을 단순히 가져오는 것이므로 GET메소드를 이용해서 가져오고 이를 기반으로 HTML을 만들었다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1119&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bF1jDO/btrmroGobXA/GJmHbPPeEcv5zh9QJhTnhk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bF1jDO/btrmroGobXA/GJmHbPPeEcv5zh9QJhTnhk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bF1jDO/btrmroGobXA/GJmHbPPeEcv5zh9QJhTnhk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbF1jDO%2FbtrmroGobXA%2FGJmHbPPeEcv5zh9QJhTnhk%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;1280&quot; height=&quot;1119&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1119&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;h4 id=&quot;2-가져온-html-파싱하기&quot; data-ke-size=&quot;size20&quot;&gt;2. 가져온 HTML 파싱하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정규표현식을 이용해서 일일이 파싱해줘야 하니 생각보다 오래걸렸다.&lt;br /&gt;우선적으로 단축어의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;텍스트 훑어보기&lt;/b&gt;를 이용해서 가져온 HTML을 확인해보았다.&lt;/p&gt;
&lt;pre class=&quot;dts&quot;&gt;&lt;code&gt;&amp;lt;td class=&quot;subject&quot;&amp;gt;

&amp;lt;a href=&quot;ArticleRead.do?forum=notice&amp;amp;sort=6&amp;amp;cat=0000300001&amp;amp;id=5b46fc0&quot;&amp;gt;
2021-2 힐링바이오공유대학 부전공 수강생 모집 연장 안내(7.21~27.)&amp;lt;/a&amp;gt;
				
&amp;lt;/td&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;td class=&quot;subject&quot; 로 링크와 공지가 연결되어 있었다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1260&quot; data-origin-height=&quot;1278&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p3fag/btrmpvlLYAy/7IqXfOzXhKHocX45YQxUU0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p3fag/btrmpvlLYAy/7IqXfOzXhKHocX45YQxUU0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p3fag/btrmpvlLYAy/7IqXfOzXhKHocX45YQxUU0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp3fag%2FbtrmpvlLYAy%2F7IqXfOzXhKHocX45YQxUU0%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;1260&quot; height=&quot;1278&quot; data-origin-width=&quot;1260&quot; data-origin-height=&quot;1278&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;텍스트 일치에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&amp;lt;td[^&amp;lt;&amp;gt;]class=&quot;subject&quot;[^&amp;lt;&amp;gt;]&amp;gt;[\s\S]*?&amp;lt;\/td&amp;gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;로 Class 내부의 내용을 가져온다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;텍스트 훑어보기&lt;/b&gt;를 이용해서 확인하면 다음과 같은 형태로 나타난다.&lt;/p&gt;
&lt;pre class=&quot;dts&quot;&gt;&lt;code&gt;&amp;lt;td class=&quot;subject&quot;&amp;gt;
	  		
			
					&amp;lt;a href=&quot;ArticleRead.do?forum=notice&amp;amp;sort=6&amp;amp;cat=0000300001&amp;amp;id=5b47065&quot;&amp;gt;
					
					
					수강바구니(수강신청) 방법 및 일정 안내&amp;lt;/a&amp;gt;
			
			
				&amp;lt;/td&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이중에서 텍스트 대치를 이용해서 글자 앞 부분에 스페이스를 ㅍㅅ변수로 변환하고(아무 변수나 변환해도 상관없다), 텍스트 일치를 이용해서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;(?&amp;lt;=[ㅍ][ㅅ]).*(?=[&amp;lt;][/][a][&amp;gt;])&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;로 공지글을 가져온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+)&amp;lt;와 &amp;gt;는 html을 가져올 때 일부 오류가 나서 추가하였다.&lt;/p&gt;
&lt;h4 id=&quot;3목록형태로-변환하고-링크와-연동하기&quot; data-ke-size=&quot;size20&quot;&gt;3.목록형태로 변환하고 링크와 연동하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 결과를 notifylist 변수에 추가하고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;목록에서 선택&lt;/b&gt;을 통해서 선택할 수 있도록 선택창을 띄워준다.&lt;br /&gt;다음 링크를 가져온 html파일에서 링크를 가져와준다. 아까&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&amp;lt;td[^&amp;lt;&amp;gt;]class=&quot;subject&quot;[^&amp;lt;&amp;gt;]&amp;gt;[\s\S]*?&amp;lt;\/td&amp;gt;&lt;/b&gt;가져온 텍스트를 다시 이용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(?&amp;lt;=[A][r][t][i][c][l][e][R][e][a][d][.][d][o][?]).*(?=[&quot;][&amp;gt;])&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;링크의 뒷자리를 가져와준다. 이 값을 urllist로 저장해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 목록에서 선택한 인덱스 값에 1을 더해 인덱스 값을 보정하고, urllist에서 해당 인덱스를 찾아 URL을 연동해준다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Others</category>
      <author>dev.Woody</author>
      <guid isPermaLink="true">https://dev-woody.tistory.com/52</guid>
      <comments>https://dev-woody.tistory.com/52#entry52comment</comments>
      <pubDate>Tue, 30 Nov 2021 00:32:32 +0900</pubDate>
    </item>
    <item>
      <title>MySQL 조건에 따라 그룹 묶기</title>
      <link>https://dev-woody.tistory.com/29</link>
      <description>&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;853&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/G9AgI/btrmveQ6Eqm/05xwrZKGCaFUZWKW1Walq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/G9AgI/btrmveQ6Eqm/05xwrZKGCaFUZWKW1Walq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/G9AgI/btrmveQ6Eqm/05xwrZKGCaFUZWKW1Walq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FG9AgI%2FbtrmveQ6Eqm%2F05xwrZKGCaFUZWKW1Walq1%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;1280&quot; height=&quot;853&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;853&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h4 id=&quot;mysql-if문&quot; data-ke-size=&quot;size20&quot;&gt;MySQL If문&lt;/h4&gt;
&lt;pre class=&quot;lsl&quot;&gt;&lt;code&gt;SELECT IF (1 &amp;gt; 2, '1는 2보다 크다.', '1은 2보다 작다.');&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;mysql-ifnull문&quot; data-ke-size=&quot;size20&quot;&gt;MySQL IFNULL문&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IFNULL(A,B)은 A가 NULL일 시 B를 출력한다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SELECT
  IFNULL('A', 'B'),
  IFNULL(NULL, 'B');&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;mysql-case문&quot; data-ke-size=&quot;size20&quot;&gt;MySQL CASE문&lt;/h4&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SELECT
CASE
  WHEN -1 &amp;gt; 0 THEN '-1은 양수다.'
  WHEN -1 = 0 THEN '-1은 0이다.'
  ELSE '-1은 음수다.'
END;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;mysql-조건에-따라-집계된-값-받아오기&quot; data-ke-size=&quot;size20&quot;&gt;MySQL 조건에 따라 집계된 값 받아오기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GROUP BY는 조건에 따라 집계된 값을 가져온다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;SELECT 
  Country, City,
  CONCAT_WS(', ', City, Country)
FROM Customers
GROUP BY Country, City;&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;286&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SMhut/btrmxlhRIUK/q1KrBkezkarjp1IIITeNaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SMhut/btrmxlhRIUK/q1KrBkezkarjp1IIITeNaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SMhut/btrmxlhRIUK/q1KrBkezkarjp1IIITeNaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSMhut%2FbtrmxlhRIUK%2Fq1KrBkezkarjp1IIITeNaK%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;1280&quot; height=&quot;286&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;286&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;GROUP BY는 다음과 같이, 해당 GROUP별로의 개수를 측정할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;SELECT
  COUNT(*), OrderDate
FROM Orders
GROUP BY OrderDate;&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;276&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNM5t7/btrmwRg4GyH/3t1xsy27cECkxQtuAlsfI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNM5t7/btrmwRg4GyH/3t1xsy27cECkxQtuAlsfI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNM5t7/btrmwRg4GyH/3t1xsy27cECkxQtuAlsfI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNM5t7%2FbtrmwRg4GyH%2F3t1xsy27cECkxQtuAlsfI0%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;1280&quot; height=&quot;276&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;276&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;GROUP BY를 통해서 다음과 같이 해당하는 위치에 값들을 셀 수 있다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;SELECT 
  CONCAT_WS(', ', City, Country) AS Location,
  COUNT(CustomerID)
FROM Customers
GROUP BY Country, City;&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;276&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/T7KuZ/btrmALs7tgZ/X6vgVknhK0QA22TE5cG0LK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/T7KuZ/btrmALs7tgZ/X6vgVknhK0QA22TE5cG0LK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/T7KuZ/btrmALs7tgZ/X6vgVknhK0QA22TE5cG0LK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FT7KuZ%2FbtrmALs7tgZ%2FX6vgVknhK0QA22TE5cG0LK%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;1280&quot; height=&quot;276&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;276&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;이 GROUP BY에서 WITH ROLLUP을 이용하면 전체의 집계값을 구할 수 있다. WITH ROLLUP을 이용하면, ORDER BY는 이용할 수 없다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;SELECT
  Country, COUNT(*)
FROM Suppliers
GROUP BY Country
WITH ROLLUP;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음과 같이 마지막 행에 집계값이 나온다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;174&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCwJpG/btrmvecwt1U/0qaOKqHbeuTmv8tO5UmMBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCwJpG/btrmvecwt1U/0qaOKqHbeuTmv8tO5UmMBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCwJpG/btrmvecwt1U/0qaOKqHbeuTmv8tO5UmMBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCwJpG%2Fbtrmvecwt1U%2F0qaOKqHbeuTmv8tO5UmMBK%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;1280&quot; height=&quot;174&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;174&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Database/MySQL</category>
      <author>dev.Woody</author>
      <guid isPermaLink="true">https://dev-woody.tistory.com/29</guid>
      <comments>https://dev-woody.tistory.com/29#entry29comment</comments>
      <pubDate>Mon, 29 Nov 2021 23:57:17 +0900</pubDate>
    </item>
    <item>
      <title>MySQL 시간/날짜 관련 함수 알아보기</title>
      <link>https://dev-woody.tistory.com/28</link>
      <description>&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;853&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eDqxfJ/btrmwRuA4T0/dzmHntGSCGSTNpunT6xlIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eDqxfJ/btrmwRuA4T0/dzmHntGSCGSTNpunT6xlIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eDqxfJ/btrmwRuA4T0/dzmHntGSCGSTNpunT6xlIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeDqxfJ%2FbtrmwRuA4T0%2FdzmHntGSCGSTNpunT6xlIk%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;1280&quot; height=&quot;853&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;853&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h4 id=&quot;현재-시간과-날짜-알아보기&quot; data-ke-size=&quot;size20&quot;&gt;현재 시간과 날짜 알아보기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NOW() 함수를 통해서 현재 시간을 확인할 수 있다. CURDATE(),CURTIME()함수를 이용시 각각 현재 날짜와 현재시간을 반환한다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SELECT CURDATE(), CURTIME(), NOW();&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;시간과-날짜-표현하기&quot; data-ke-size=&quot;size20&quot;&gt;시간과 날짜 표현하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시간과 날짜의 표현의 경우 각각 DATE()와 TIME()함수를 이용한다. 문자열을 넣어주면 문자열에 따른 날짜와 시간을 생성한다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SELECT
  '2021-6-1 1:2:3' = '2021-06-01 01:02:03',
  DATE('2021-6-1 1:2:3') = DATE('2021-06-01 01:02:03'),
  TIME('2021-6-1 1:2:3') = TIME('2021-06-01 01:02:03'),
  DATE('2021-6-1 1:2:3') = TIME('2021-06-01 01:02:03'),
  DATE('2021-6-1') = DATE('2021-06-01 01:02:03'),
  TIME('2021-6-1 1:2:3') = TIME('01:02:03');&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;datetime에서-년도-월-시-분-초-표현하기&quot; data-ke-size=&quot;size20&quot;&gt;DATETIME에서 년도, 월, 시, 분, 초 표현하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;YEAR()통해 해당 년도를 반환하고 MONTHNAME()은 July같은 월의 영문명을 반환하고 MONTH()는 월을 수로 반환한다. WEEKDAY는 월요일 0을 기준으로 한 요일값을 반환한다. DAYNAME은 요일명을 반환한다. DAY()는 주어진 일을 반환한다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SELECT
  OrderDate,
  CONCAT(
    CONCAT_WS(
      '/',
      YEAR(OrderDate), MONTH(OrderDate), DAY(OrderDate)
    ),
    ' ',
    UPPER(LEFT(DAYNAME(OrderDate), 3))
  )
FROM Orders;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HOUR을 통해서 시, MINUTE()을 통해서 분을 SECOND를 통해서 초를 반환한다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SELECT
  HOUR(NOW()), MINUTE(NOW()), SECOND(NOW());
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;시간과-날짜-연산하기&quot; data-ke-size=&quot;size20&quot;&gt;시간과 날짜 연산하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ADDDATE({날짜},INTERVAL {값} {단위}) 또는 DATE_ADD({날짜},INTERVAL {값} {단위})을 통해서 날짜에 시간과 날짜를 더할 수 있다. SUBDATE({날짜},INTERVAL {값} {단위}) , DATE_SUB({날짜},INTERVAL {값} {단위})을 통해서 날짜에 시간과 날짜를 뺄 수 있다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SELECT 
  ADDDATE('2021-06-20', INTERVAL 1 YEAR),
  ADDDATE('2021-06-20', INTERVAL -2 MONTH),
  ADDDATE('2021-06-20', INTERVAL 3 WEEK),
  ADDDATE('2021-06-20', INTERVAL -4 DAY),
  ADDDATE('2021-06-20', INTERVAL -5 MINUTE),
  ADDDATE('2021-06-20 13:01:12', INTERVAL 6 SECOND);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 날짜 또는 시간 간 차이를 계산하기 위해서는 DATE_DIFF({날짜1},{날짜2})를 이용하면 날짜1에서 날짜2를 뺀값을 반환한다. 시간을 계산하려면 TIME_DIFF({시간1},{시간2})를 이용해서 시간1 - 시간2 값을 구할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SELECT
  TIMEDIFF('2021-06-21 15:20:35', '2021-06-21 16:34:41');&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LAST_DAY({DATETIME})을 이용하면 해당 달의 마지막 날짜를 반환한다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SELECT
  OrderDate,
  LAST_DAY(OrderDate),
  DAY(LAST_DAY(OrderDate)),
  DATEDIFF(LAST_DAY(OrderDate), OrderDate)
FROM Orders;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;시간과-날짜-형식-지정하기&quot; data-ke-size=&quot;size20&quot;&gt;시간과 날짜 형식 지정하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DATE_FORMAT({DATETIME}, '{표시 형식}')으로 시간과 날짜의 형식을 지정할 수 있다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&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&gt;%Y&lt;/td&gt;
&lt;td&gt;년도(4자리)&lt;/td&gt;
&lt;td&gt;%y&lt;/td&gt;
&lt;td&gt;년도(2자리)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%M&lt;/td&gt;
&lt;td&gt;월(영문)&lt;/td&gt;
&lt;td&gt;%m&lt;/td&gt;
&lt;td&gt;월(숫자)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%D&lt;/td&gt;
&lt;td&gt;일(영문)&lt;/td&gt;
&lt;td&gt;%d, %e&lt;/td&gt;
&lt;td&gt;일(숫자)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%T&lt;/td&gt;
&lt;td&gt;hh:mm:ss&lt;/td&gt;
&lt;td&gt;%r&lt;/td&gt;
&lt;td&gt;hh:mm:ss AM/PM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%H, %k&lt;/td&gt;
&lt;td&gt;시(24시간제)&lt;/td&gt;
&lt;td&gt;%h, %l&lt;/td&gt;
&lt;td&gt;시(12시간제)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%i&lt;/td&gt;
&lt;td&gt;분&lt;/td&gt;
&lt;td&gt;%S, %s&lt;/td&gt;
&lt;td&gt;초&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%p&lt;/td&gt;
&lt;td&gt;AM/PM&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SELECT REPLACE(
  REPLACE(
    DATE_FORMAT(NOW(), '%Y년 %m월 %d일 %p %h시 %i분 %초'),
    'AM', '오전'
  ),
  'PM', '오후'
)&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;문자열을-특정형식으로-해석하여-시간과-날짜-생성하기&quot; data-ke-size=&quot;size20&quot;&gt;문자열을 특정형식으로 해석하여 시간과 날짜 생성하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;STR_TO_DATE({문자열},{형식})을 이용해서 문자열을 특정 형식으로 시간과 날짜를 생성할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SELECT
  OrderDate,
  DATEDIFF(
    STR_TO_DATE('1997-01-01 13:24:35', '%Y-%m-%d %T'),
    OrderDate
  ),
  TIMEDIFF(
    STR_TO_DATE('1997-01-01 13:24:35', '%Y-%m-%d %T'),
    STR_TO_DATE(CONCAT(OrderDate, ' ', '00:00:00'), '%Y-%m-%d %T')
  )
FROM Orders;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Database/MySQL</category>
      <author>dev.Woody</author>
      <guid isPermaLink="true">https://dev-woody.tistory.com/28</guid>
      <comments>https://dev-woody.tistory.com/28#entry28comment</comments>
      <pubDate>Mon, 29 Nov 2021 23:57:00 +0900</pubDate>
    </item>
    <item>
      <title>MySQL 문자열 관련 함수 알아보기</title>
      <link>https://dev-woody.tistory.com/27</link>
      <description>&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;853&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D3ZgH/btrmxkiY84T/JnK96VmaEkwNbQETNNpaak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D3ZgH/btrmxkiY84T/JnK96VmaEkwNbQETNNpaak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D3ZgH/btrmxkiY84T/JnK96VmaEkwNbQETNNpaak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD3ZgH%2FbtrmxkiY84T%2FJnK96VmaEkwNbQETNNpaak%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;1280&quot; height=&quot;853&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;853&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 MySQL에서는 문자를 1부터 센다. 조금 더 자세한 문자열 관련 함수에 관해서 알아보자.&lt;/p&gt;
&lt;h4 id=&quot;모두-대문자-소문자로-변경하기&quot; data-ke-size=&quot;size20&quot;&gt;모두 대문자, 소문자로 변경하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;UCASE(), UPPER()을 통해서 모두 대문자로 변경할 수 있고 LCASE(), LOWER()를 통해서 모두 소문자로 변경할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SELECT
  UCASE(CustomerName),
  LCASE(ContactName)
FROM Customers;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;문자열-합치기&quot; data-ke-size=&quot;size20&quot;&gt;문자열 합치기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적인 프로그래밍 언어에서는 +를 이용해서 문자열의 합칠 수 있지만, MySQL에서는 CONCAT()함수를 이용하여 문자열을 합친다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SELECT CONCAT('HELLO', ' ', 'THIS IS ', 2021);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CONCAT을 이용하여 데이터에 문자열을 추가로 더 붙여서 표현할 수도 있다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SELECT CONCAT('O-ID: ', OrderID) FROM Orders;&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjaroz/btrmALs7sPB/k3AyFyq7C9BQ9nbLr6tNi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjaroz/btrmALs7sPB/k3AyFyq7C9BQ9nbLr6tNi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjaroz/btrmALs7sPB/k3AyFyq7C9BQ9nbLr6tNi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbjaroz%2FbtrmALs7sPB%2Fk3AyFyq7C9BQ9nbLr6tNi1%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;1280&quot; height=&quot;270&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;270&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;CONCAT_WS(S, {문자1},{문자2})은 여러문자들을 S를 이용해서 연결해준다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SELECT
  CONCAT_WS(' ', FirstName, LastName) AS FullName
FROM Employees;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;문자열-자르기&quot; data-ke-size=&quot;size20&quot;&gt;문자열 자르기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LEFT({문자열},N)은 왼쪽부터 N글자를 자른다.RIGHT({문자열},N)은 오른쪽부터 N글자를 자른다.SUBSTR({문자열},N)은 주어진 값에 따라 문자열을 자른다. SUBSTRING으로 이용해도 된다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SELECT
  SUBSTR('ABCDEFG', 3), --앞의 세번째부터 읽어온다.
  SUBSTR('ABCDEFG', 3, 2), --세번째 글자부터 2개를 읽어온다.
  SUBSTR('ABCDEFG', -4), --뒤에서 4번째 글자부터 읽어온다.
  SUBSTR('ABCDEFG', -4, 2); --뒤에서 4번째 글자부터 2개를 읽어온다.
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;년도로 된 열을 분리할 떄, 이용할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SELECT
  OrderDate,
  LEFT(OrderDate, 4) AS Year,
  SUBSTR(OrderDate, 6, 2) AS Month,
  RIGHT(OrderDate, 2) AS Day
FROM Orders;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;문자열의-길이-세기&quot; data-ke-size=&quot;size20&quot;&gt;문자열의 길이 세기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CHAR_LENGTH(), CHARACTER_LEGNTH()을 이용해 문자열의 계산한다. LENGTH()를 이용시 문자열의 바이트 길이가 출력된다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SELECT
  LENGTH('ABCDE'),
  CHAR_LENGTH('ABCDE'),
  CHARACTER_LENGTH('ABCDE');&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;문자열의-공백-제거하기&quot; data-ke-size=&quot;size20&quot;&gt;문자열의 공백 제거하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TRIM()은 양쪽 공백을 제거한다.LTRIM()은 왼쪽 공백을 제거하고 RTRIM()은 오른쪽 공백을 제거한다.&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;SELECT * FROM Categories
WHERE CategoryName = TRIM(' Beverages ')&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;문자열-글자-이어-붙이기&quot; data-ke-size=&quot;size20&quot;&gt;문자열 글자 이어 붙이기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LPAD(S, N, P)는 S가 N글자가 될 때까지 P를 이어붙인다. RPAD(S, N, P)는 S가 N글자가 될 때까지 P를 이어붙인다. LPAD는 ABC-- RPAD는 --ABC과 같이 나타난다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;SELECT
  LPAD(SupplierID, 5, 0),
  RPAD(Price, 6, 0)
FROM Products;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;문자열-변경하기&quot; data-ke-size=&quot;size20&quot;&gt;문자열 변경하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;REPLACE(S, A, B)를 활용하여 S문자열에서 A를 B로 변경할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SELECT
  REPLACE(Description, ', ', ' and ')
FROM Categories;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;문자열-반환하기&quot; data-ke-size=&quot;size20&quot;&gt;문자열 반환하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;INSTR({문자열}, s)를 이용해서 문자열중 해당하는 s의 첫 위치 반환한다. 없을 경우 0을 반환하게 된다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SELECT * FROM Customers
WHERE INSTR(CustomerName, ' ') BETWEEN 1 AND 6;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Database/MySQL</category>
      <author>dev.Woody</author>
      <guid isPermaLink="true">https://dev-woody.tistory.com/27</guid>
      <comments>https://dev-woody.tistory.com/27#entry27comment</comments>
      <pubDate>Mon, 29 Nov 2021 23:56:44 +0900</pubDate>
    </item>
    <item>
      <title>MySQL 숫자 관련 함수 알아보기</title>
      <link>https://dev-woody.tistory.com/26</link>
      <description>&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;853&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEvu8W/btrmAJ9VnAx/VSF7icS2LfArxKxnisiiQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEvu8W/btrmAJ9VnAx/VSF7icS2LfArxKxnisiiQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEvu8W/btrmAJ9VnAx/VSF7icS2LfArxKxnisiiQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEvu8W%2FbtrmAJ9VnAx%2FVSF7icS2LfArxKxnisiiQ0%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;1280&quot; height=&quot;853&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;853&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h4 id=&quot;올림내림반올림절대값-함수-알아보기&quot; data-ke-size=&quot;size20&quot;&gt;올림,내림,반올림,절대값 함수 알아보기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ROUND는 반올림, CEIL은 올림, FLOOR은 내림을 의미한다.&lt;/p&gt;
&lt;pre class=&quot;excel&quot;&gt;&lt;code&gt;SELECT 
  Price,
  ROUND(price),
  CEIL(price),
  FLOOR(price)
FROM Products;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ABS는 절대값 함수이다.&lt;/p&gt;
&lt;pre class=&quot;n1ql&quot;&gt;&lt;code&gt;SELECT * FROM OrderDetails
WHERE ABS(Quantity - 10) &amp;lt; 5;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;최대값최소값-알아보기&quot; data-ke-size=&quot;size20&quot;&gt;최대값,최소값 알아보기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GREATEST는 (괄호 안에서) 가장 큰 값, LEAST (괄호 안에서) 가장 작은 값을 나타낸다.&lt;/p&gt;
&lt;pre class=&quot;n1ql&quot;&gt;&lt;code&gt;SELECT
  OrderDetailID, ProductID, Quantity,
  GREATEST(OrderDetailID, ProductID, Quantity),
  LEAST(OrderDetailID, ProductID, Quantity)
FROM OrderDetails;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용할 경우 결과 값은 다음과 같이 나온다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;446&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DcMNW/btrmpvF5c50/0QMoksomV9dKr8lwn0Dq3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DcMNW/btrmpvF5c50/0QMoksomV9dKr8lwn0Dq3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DcMNW/btrmpvF5c50/0QMoksomV9dKr8lwn0Dq3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDcMNW%2FbtrmpvF5c50%2F0QMoksomV9dKr8lwn0Dq3k%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;1280&quot; height=&quot;446&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;446&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;MAX 가장 큰 값, MIN 가장 작은 값, COUNT 갯수 (NULL값 제외), SUM 총합 ,AVG 평균 값을 의미한다. 이를 그룹함수라고 한다.&lt;/p&gt;
&lt;pre class=&quot;n1ql&quot;&gt;&lt;code&gt;SELECT
  MAX(Quantity),
  MIN(Quantity),
  COUNT(Quantity),
  SUM(Quantity),
  AVG(Quantity)
FROM OrderDetails
WHERE OrderDetailID BETWEEN 20 AND 30;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GREATEST,LEAST와 MAX와 MIN의 차이를 알아보기위해서 MAX,MIN의 결과를 확인하면 다음과 같다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;127&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n7R6m/btrmyjqmFYu/n9hzebpomcSrGcLzNpWNQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n7R6m/btrmyjqmFYu/n9hzebpomcSrGcLzNpWNQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n7R6m/btrmyjqmFYu/n9hzebpomcSrGcLzNpWNQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn7R6m%2FbtrmyjqmFYu%2Fn9hzebpomcSrGcLzNpWNQk%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;1280&quot; height=&quot;127&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;127&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;h4 id=&quot;제곱제곱근-함수&quot; data-ke-size=&quot;size20&quot;&gt;제곱,제곱근 함수&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;POW(A, B)는 A를 B만큼 제곱한다는 의미이며, POW 대신에 POWER을 이용하여도 된다.제곱근 함수로는 SQRT를 이용한다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;SELECT
  POW(2, 3),
  POWER(5, 2),
  SQRT(16);&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;소수점-선택-함수&quot; data-ke-size=&quot;size20&quot;&gt;소수점 선택 함수&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TRUNCATE(A, n)는 A의 소숫점 n자리까지 선택하라는 의미이다.&lt;/p&gt;
&lt;pre class=&quot;n1ql&quot;&gt;&lt;code&gt;SELECT Price FROM Products
WHERE TRUNCATE(Price, 0) = 12;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;자료형-변환-함수&quot; data-ke-size=&quot;size20&quot;&gt;자료형 변환 함수&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CAST(A, Type)는 A를 Type형태의 자료형으로 바꾸어준다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SELECT
  '01' = '1',
  CONVERT('01', DECIMAL) = CONVERT('1', DECIMAL);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;</description>
      <author>dev.Woody</author>
      <guid isPermaLink="true">https://dev-woody.tistory.com/26</guid>
      <comments>https://dev-woody.tistory.com/26#entry26comment</comments>
      <pubDate>Mon, 29 Nov 2021 23:56:22 +0900</pubDate>
    </item>
    <item>
      <title>MySQL 연산자 알아보기</title>
      <link>https://dev-woody.tistory.com/25</link>
      <description>&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;853&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wJehH/btrmxloDpQR/7ZdqT8b95j2J0bneCGukd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wJehH/btrmxloDpQR/7ZdqT8b95j2J0bneCGukd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wJehH/btrmxloDpQR/7ZdqT8b95j2J0bneCGukd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwJehH%2FbtrmxloDpQR%2F7ZdqT8b95j2J0bneCGukd0%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;1280&quot; height=&quot;853&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;853&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h4 id=&quot;mysql-연산자-이용하기&quot; data-ke-size=&quot;size20&quot;&gt;MySQL 연산자 이용하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL에서는 다른 프로그래밍 언어들 같이 + - * / % mod true false AND &amp;amp;&amp;amp; OR || 등의 연산을 지원한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음과 같이 AS를 이용해 연산한 값의 셀의 이름을 지정해줄 수 있다.&lt;/p&gt;
&lt;pre class=&quot;n1ql&quot;&gt;&lt;code&gt;SELECT
  ProductName,
  Price / 2 AS HalfPrice
FROM Products;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적인 문자열은 0을 취급하고 숫자로 된 문자열의 경우 자동으로 변환되어 계산된다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SELECT 'ABC' + 3;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SQL에서는 IS, IS NOT 연산자도 지원하는데 IS는 양쪽이 모두 TRUE 또는 FALSE, IS NOT은 한쪽은 TRUE, 한쪽은 FALSE을 의미한다.&lt;/p&gt;
&lt;h4 id=&quot;mysql-범위-내의-값-선택하기&quot; data-ke-size=&quot;size20&quot;&gt;MySQL 범위 내의 값 선택하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BETWEEN {MIN} AND {MAX}를 통해 범위 내 값을 선택할 수 있다. 이때, MIN과 MAX의 위치가 바뀌면 결과값이 제대로 출력되지 않는다. 앞에 NOT을 붙여 범위의 반대여부를 택할 수도 있다.&lt;/p&gt;
&lt;pre class=&quot;n1ql&quot;&gt;&lt;code&gt;SELECT * FROM OrderDetails
WHERE ProductID BETWEEN 1 AND 4;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IN ({값1},{값2},{값3})과 같이 IN의 괄호 안에 있는 값들만 추출할 수도 있다.&lt;/p&gt;
&lt;pre class=&quot;oxygene&quot;&gt;&lt;code&gt;SELECT * FROM Customers
WHERE City IN ('Torino', 'Paris', 'Portland', 'Madrid') &lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;mysql-패턴을-가진-문자-선택하기&quot; data-ke-size=&quot;size20&quot;&gt;MySQL 패턴을 가진 문자 선택하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LIKE '... % ...'를 통해 특정한 패턴을 가진 문자를 선택할 수 있다. %는 0~N개의 문자를 가진 패턴을 의미하고 %대신에&lt;span&gt;&amp;nbsp;&lt;/span&gt;를 쓰면&lt;span&gt;&amp;nbsp;&lt;/span&gt;의 개수만큼의 문자를 의미한다.&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;SELECT
  'HELLO' LIKE 'hel%',
  'HELLO' LIKE 'H%',
  'HELLO' LIKE 'H%O',
  'HELLO' LIKE '%O',
  'HELLO' LIKE '%HELLO%',
  'HELLO' LIKE '%H',
  'HELLO' LIKE 'L%'&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;SELECT
  'HELLO' LIKE 'HEL__',
  'HELLO' LIKE 'h___O',
  'HELLO' LIKE 'HE_LO',
  'HELLO' LIKE '_____',
  'HELLO' LIKE '_HELLO',
  'HELLO' LIKE 'HEL_',
  'HELLO' LIKE 'H_O'&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Database/MySQL</category>
      <author>dev.Woody</author>
      <guid isPermaLink="true">https://dev-woody.tistory.com/25</guid>
      <comments>https://dev-woody.tistory.com/25#entry25comment</comments>
      <pubDate>Mon, 29 Nov 2021 23:54:39 +0900</pubDate>
    </item>
    <item>
      <title>MySQL Select 기능 알아보기</title>
      <link>https://dev-woody.tistory.com/24</link>
      <description>&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;853&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dKzOao/btrmxlhRG4A/bvYjJPwCJoac7jtNNNajak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dKzOao/btrmxlhRG4A/bvYjJPwCJoac7jtNNNajak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dKzOao/btrmxlhRG4A/bvYjJPwCJoac7jtNNNajak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdKzOao%2FbtrmxlhRG4A%2FbvYjJPwCJoac7jtNNNajak%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;1280&quot; height=&quot;853&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;853&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h3 id=&quot;mysql-주석달기&quot; data-ke-size=&quot;size23&quot;&gt;MySQL 주석달기&lt;/h3&gt;
&lt;pre class=&quot;brainfuck&quot;&gt;&lt;code&gt;-- MySQL은 --을 통해서 주석들 달 수 있습니다.&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;mysql-테이블의-모든-내용-보기&quot; data-ke-size=&quot;size23&quot;&gt;MySQL 테이블의 모든 내용 보기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 모든 열의 내용을 보기 위해서는 * 전체 선택자를 이용해서 테이블의 모든 내용을 볼 수 있다.&lt;/p&gt;
&lt;pre class=&quot;n1ql&quot;&gt;&lt;code&gt;SELECT * FROM Customers;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;mysql-테이블에서-원하는-column열만-골라서-보기&quot; data-ke-size=&quot;size23&quot;&gt;MySQL 테이블에서 원하는 column(열)만 골라서 보기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음과 같이 원하는 열을 선택하거나 원하는 열들 여러개를 선택해서 내용을 볼 수 있다.&lt;/p&gt;
&lt;pre class=&quot;n1ql&quot;&gt;&lt;code&gt;SELECT CustomerName FROM Customers;
SELECT CustomerName, ContactName, Country FROM Customers;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;mysql-테이블에서-원하는-row행만-골라서-보기&quot; data-ke-size=&quot;size23&quot;&gt;MySQL 테이블에서 원하는 row(행)만 골라서 보기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WHERE뒤에 원하는 조건을 입력하여, 조건에 맞는 행을 확인할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;n1ql&quot;&gt;&lt;code&gt;SELECT * FROM Orders
WHERE EmployeeID = 3;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;mysql-테이블-정렬하기&quot; data-ke-size=&quot;size23&quot;&gt;MySQL 테이블 정렬하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ORDER BY 구문을 사용해서 데이터를 정렬할 수 있다. 이때, ASC는 오름차순을 의미하며, DESC는 내림차순을 의미한다. 기본값은 ASC이다.&lt;/p&gt;
&lt;pre class=&quot;n1ql&quot;&gt;&lt;code&gt;SELECT * FROM OrderDetails
ORDER BY ProductID ASC, Quantity DESC;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;mysql-테이블에서-원하는-만큼-데이터-가져오기&quot; data-ke-size=&quot;size23&quot;&gt;MySQL 테이블에서 원하는 만큼 데이터 가져오기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LIMIT {가져올 갯수} 또는 LIMIT {건너뛸 갯수}, {가져올 갯수} 를 사용하여, 원하는 위치에서 원하는 만큼만 데이터를 가져올 수 있다. 원하는 개수의 데이터를 가져와서 페이지를 구성하는 방법으로 많이 이용한다.&lt;/p&gt;
&lt;pre class=&quot;n1ql&quot;&gt;&lt;code&gt;SELECT * FROM Customers
LIMIT 10;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;mysql-테이블에서-원하는-명으로-데이터-가져오기&quot; data-ke-size=&quot;size23&quot;&gt;MySQL 테이블에서 원하는 명으로 데이터 가져오기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;alias의 줄임말 AS를 이용해 칼럼명을 변경할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;SELECT
  CustomerId AS '아이디',
  CustomerName AS '고객명',
  Address AS '주소'
FROM Customers;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Database/MySQL</category>
      <author>dev.Woody</author>
      <guid isPermaLink="true">https://dev-woody.tistory.com/24</guid>
      <comments>https://dev-woody.tistory.com/24#entry24comment</comments>
      <pubDate>Mon, 29 Nov 2021 23:54:18 +0900</pubDate>
    </item>
    <item>
      <title>MySQL 알아보기</title>
      <link>https://dev-woody.tistory.com/23</link>
      <description>&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;853&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/diPvAf/btrmxLULoNl/jKzgzIGVW4VWswcXCtBm5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/diPvAf/btrmxLULoNl/jKzgzIGVW4VWswcXCtBm5k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/diPvAf/btrmxLULoNl/jKzgzIGVW4VWswcXCtBm5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdiPvAf%2FbtrmxLULoNl%2FjKzgzIGVW4VWswcXCtBm5k%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;1280&quot; height=&quot;853&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;853&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL은 가장 널리쓰이는 RDBMS(Relational Database Management System)이다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL과 같은 방식에 속하는 데이터베이스들은 엑셀표와 유사한 형식으로 데이터를 저장한다. 이때, 들어갈 데이터와 들어갈 수 있는 데이터 형식 등을 지정할 수 있다. 즉, 데이터를 관리하는 방식으로 SQL(Structed Query Language)를 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;엑셀과 같이 데이터가 들어갈 경우, 일부 데이터가 겹치는 문제가 존재하게 된다, 이러한 문제를 해결하기 위해서, 각각 데이터를 분리해서 그 데이터 사이의 관계를 지어준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL과 같은 관계형 데이터베이스에서는 분리된 여러 테이블들을 이어주는 Join이라는 기능을 제공한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Database/MySQL</category>
      <author>dev.Woody</author>
      <guid isPermaLink="true">https://dev-woody.tistory.com/23</guid>
      <comments>https://dev-woody.tistory.com/23#entry23comment</comments>
      <pubDate>Mon, 29 Nov 2021 23:54:01 +0900</pubDate>
    </item>
    <item>
      <title>Node.js 호출 스택과 이벤트 루프</title>
      <link>https://dev-woody.tistory.com/18</link>
      <description>&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;892&quot; data-origin-height=&quot;626&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Dwni0/btrmyj4WgMe/AbMBr9KE87kRagJP5LcdYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Dwni0/btrmyj4WgMe/AbMBr9KE87kRagJP5LcdYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Dwni0/btrmyj4WgMe/AbMBr9KE87kRagJP5LcdYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDwni0%2Fbtrmyj4WgMe%2FAbMBr9KE87kRagJP5LcdYk%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;892&quot; height=&quot;626&quot; data-origin-width=&quot;892&quot; data-origin-height=&quot;626&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버로써 동작하기 위해서는 사용자에게 요청을 받아 응답을 기다려야 한다. Node.js는 이벤트 기반, Non blocking I/O 모델을 사용한다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바스크립트는 단일 스레드 기반의 언어이기 때문에, 한번에 하나의 작업만 진행한다.이떄 비동기 방식은 이벤트 루프를 이용해서 동시성을 지원한다. 자바스크립트 엔진은 단일 호출 스택을 사용하여 요청이 들어올 때마다 해당 요청을 순차적으로 호출 스택에 담아 처리한다. 이벤트 루프는 브라우저나 Node.js에서 지원되는 방식이다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이벤트 루프에 관한 설명&lt;br /&gt;&lt;a href=&quot;https://nodejs.org/ko/docs/guides/event-loop-timers-and-nexttick/&quot;&gt;Node.Js 공식문서&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://vimeo.com/96425312&quot;&gt;Philip Roberts: Help, I&amp;rsquo;m stuck in an event-loop.&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://latentflip.com/loupe/&quot;&gt;이벤트 루프 시각적으로 확인하기&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;687&quot; data-origin-height=&quot;301&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpK8fJ/btrmxkpI6iv/3GsASYasKQULM24Wet16EK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpK8fJ/btrmxkpI6iv/3GsASYasKQULM24Wet16EK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpK8fJ/btrmxkpI6iv/3GsASYasKQULM24Wet16EK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpK8fJ%2FbtrmxkpI6iv%2F3GsASYasKQULM24Wet16EK%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;687&quot; height=&quot;301&quot; data-origin-width=&quot;687&quot; data-origin-height=&quot;301&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;이벤트 루프는 호출 스택과 태스크 큐의 상태를 확인하며 호출 스택이 비어있을 경우, 태스크 큐의 작업을 호출스택으로 이동시킨다.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;function run() {
  console.log('동작');
}
console.log('시작');
setTimeout(run, 0);
console.log('끝');&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 경우 출력은 시작, 끝, 동작과 같은 형태로 나오게 된다. 우선 , 호출 스택에 main함수와 setTimeout함수가 쌓이게 된다. 이때, SetTimeout이 실행되면, run은 0초라는 정보와 함께, 태스크 큐로 이동하게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때, 이벤트 루프가 상태를 파악하며, 호출 스택이 비워있을 때, 태스크 큐의 작업을 하나씩 호출 스택으로 이동시킨다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Server/Node.js</category>
      <author>dev.Woody</author>
      <guid isPermaLink="true">https://dev-woody.tistory.com/18</guid>
      <comments>https://dev-woody.tistory.com/18#entry18comment</comments>
      <pubDate>Mon, 29 Nov 2021 23:51:14 +0900</pubDate>
    </item>
    <item>
      <title>Express 서버 시작하기</title>
      <link>https://dev-woody.tistory.com/17</link>
      <description>&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;892&quot; data-origin-height=&quot;626&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dF66bZ/btrmwQicoLd/hLkahi46wpZmvwhiw2ywtk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dF66bZ/btrmwQicoLd/hLkahi46wpZmvwhiw2ywtk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dF66bZ/btrmwQicoLd/hLkahi46wpZmvwhiw2ywtk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdF66bZ%2FbtrmwQicoLd%2FhLkahi46wpZmvwhiw2ywtk%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;892&quot; height=&quot;626&quot; data-origin-width=&quot;892&quot; data-origin-height=&quot;626&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h3 id=&quot;npm을-이용한-패키지-관리&quot; data-ke-size=&quot;size23&quot;&gt;npm을 이용한 패키지 관리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원하는 디렉토리로 이동한 뒤 npm init을 입력해준다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;coffeescript&quot;&gt;&lt;code&gt;npm init&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제부터 npm이 패키지 관리를 시작하게 된다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;358&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqYmWq/btrmvdLq9pn/EOJOsdP73KpekX9z7ws1l1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqYmWq/btrmvdLq9pn/EOJOsdP73KpekX9z7ws1l1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqYmWq/btrmvdLq9pn/EOJOsdP73KpekX9z7ws1l1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqYmWq%2FbtrmvdLq9pn%2FEOJOsdP73KpekX9z7ws1l1%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;619&quot; height=&quot;358&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;358&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help init` for definitive documentation on these fields
and exactly what they do.

Use `npm install &amp;lt;pkg&amp;gt;` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (express) server
version: (1.0.0)
description: server
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to D:\GoogleDrive\Program\Express\package.json:

{
  &quot;name&quot;: &quot;server&quot;,
  &quot;version&quot;: &quot;1.0.0&quot;,
  &quot;description&quot;: &quot;server&quot;,
  &quot;main&quot;: &quot;index.js&quot;,
  &quot;scripts&quot;: {
    &quot;test&quot;: &quot;echo \&quot;Error: no test specified\&quot; &amp;amp;&amp;amp; exit 1&quot;
  },
  &quot;author&quot;: &quot;&quot;,
  &quot;license&quot;: &quot;ISC&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 디렉토리에 package.json파일이 생성된 것을 확인할수 있다.&lt;/p&gt;
&lt;h3 id=&quot;express-서버-설치하기&quot; data-ke-size=&quot;size23&quot;&gt;Express 서버 설치하기&lt;/h3&gt;
&lt;pre class=&quot;maxima&quot;&gt;&lt;code&gt;npm install express --save&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 --save옵션은 외부 라이브러리 정보를 package.json안에 저장할 수 있도록 해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 app.js라는 파일을 생성하고 다음 내용을 입력해 서버를 열어보자.&lt;/p&gt;
&lt;pre class=&quot;typescript&quot;&gt;&lt;code&gt;//require을 통해 node_modules에 있는 express를 가져올 수 있다.
const express = require(&quot;express&quot;);

//express의 반환값을 저장한다.
const app = express();


app.get(&quot;/&quot;, (req, res) =&amp;gt; {
  res.send(&quot;Test&quot;);
});

//3000번 포트로 서버를 오픈한다.
app.listen(3000, () =&amp;gt; {
  console.log(&quot;Sever On&quot;);
})&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 터미널에 node app.js를 실행하면, app.listen(포트번호,콜백) 메서드가 실행된다.&lt;/p&gt;
&lt;pre class=&quot;crmsh&quot;&gt;&lt;code&gt;node app.js&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;브라우저를 열고 localhost:3000에 접속해 확인해보자.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2624&quot; data-origin-height=&quot;1736&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buNAh5/btrmxF8eiMF/QUQkumQbgFAYwB8LWDUL20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buNAh5/btrmxF8eiMF/QUQkumQbgFAYwB8LWDUL20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buNAh5/btrmxF8eiMF/QUQkumQbgFAYwB8LWDUL20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuNAh5%2FbtrmxF8eiMF%2FQUQkumQbgFAYwB8LWDUL20%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;2624&quot; height=&quot;1736&quot; data-origin-width=&quot;2624&quot; data-origin-height=&quot;1736&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Server/Node.js</category>
      <author>dev.Woody</author>
      <guid isPermaLink="true">https://dev-woody.tistory.com/17</guid>
      <comments>https://dev-woody.tistory.com/17#entry17comment</comments>
      <pubDate>Mon, 29 Nov 2021 23:46:31 +0900</pubDate>
    </item>
    <item>
      <title>Node.js 시작하기</title>
      <link>https://dev-woody.tistory.com/16</link>
      <description>&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;892&quot; data-origin-height=&quot;626&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ztWkQ/btrmALzSXUM/AReAbyH9XHvd0EGmO41HR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ztWkQ/btrmALzSXUM/AReAbyH9XHvd0EGmO41HR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ztWkQ/btrmALzSXUM/AReAbyH9XHvd0EGmO41HR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FztWkQ%2FbtrmALzSXUM%2FAReAbyH9XHvd0EGmO41HR1%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;892&quot; height=&quot;626&quot; data-origin-width=&quot;892&quot; data-origin-height=&quot;626&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h2 id=&quot;nodejs란&quot; data-ke-size=&quot;size26&quot;&gt;Node.js란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Node.js는 주로 서버 사이드 개발에 이용되는 소프트웨어 플랫폼이다.개발 언어는 자바스크립트를 활용하며 Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있다.일반적으로 Node.js로 서버를 개발하므로 Node.js가 서버로 혼동되기도 하는데, Node.js 자체가 서버를 의미하는 것은 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;google의 크롬 브라우저에서 사용하는 V8 자바스크립트 엔진을 사용하며 이벤트 기반의 비동기 방식을 사용하여 이벤트 처리에 있어 빠른 속도를 발휘한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Node.js 자체적으로 HTTP 서버 라이브러리를 포함하고 있어 웹서버에서 별도의 추가적인 소프트웨어 없이 동작이 가능하다.&lt;/p&gt;
&lt;h2 id=&quot;nodejs-설치하기&quot; data-ke-size=&quot;size26&quot;&gt;Node.js 설치하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공식 홈페이지에 들어가 LTS버전을 설치하자 어느 정도 안정성이 있는 것도 중요하다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;929&quot; data-origin-height=&quot;598&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KTDoi/btrmoqLa1w8/JMoJedFj3u4zQ424Q60WE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KTDoi/btrmoqLa1w8/JMoJedFj3u4zQ424Q60WE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KTDoi/btrmoqLa1w8/JMoJedFj3u4zQ424Q60WE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKTDoi%2FbtrmoqLa1w8%2FJMoJedFj3u4zQ424Q60WE0%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;929&quot; height=&quot;598&quot; data-origin-width=&quot;929&quot; data-origin-height=&quot;598&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;a href=&quot;https://nodejs.org&quot;&gt;https://nodejs.org&lt;/a&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일을 다운 받은 후 Next 버튼을 계속 눌러가며 설치해준다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;387&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qoTam/btrmAJ28T0W/2dBHpFLoPAXo3d6Gcpva2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qoTam/btrmAJ28T0W/2dBHpFLoPAXo3d6Gcpva2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qoTam/btrmAJ28T0W/2dBHpFLoPAXo3d6Gcpva2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqoTam%2FbtrmAJ28T0W%2F2dBHpFLoPAXo3d6Gcpva2K%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;495&quot; height=&quot;387&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;387&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;다음 cmd창을 키고 node -v를 입력해서 node.js가 잘 설치되었는지 확인해본다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;727&quot; data-origin-height=&quot;225&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/N8lLQ/btrmrvFPZcY/uusaJqFelXqIxX1urR4c1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/N8lLQ/btrmrvFPZcY/uusaJqFelXqIxX1urR4c1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/N8lLQ/btrmrvFPZcY/uusaJqFelXqIxX1urR4c1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FN8lLQ%2FbtrmrvFPZcY%2FuusaJqFelXqIxX1urR4c1K%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;727&quot; height=&quot;225&quot; data-origin-width=&quot;727&quot; data-origin-height=&quot;225&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;h2 id=&quot;패키지-관리자-npm이란&quot; data-ke-size=&quot;size26&quot;&gt;패키지 관리자 npm이란?&lt;/h2&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;455&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1YfpU/btrmxieeuO8/VkCX7UX2zKYW1aKcVhFlG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1YfpU/btrmxieeuO8/VkCX7UX2zKYW1aKcVhFlG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1YfpU/btrmxieeuO8/VkCX7UX2zKYW1aKcVhFlG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1YfpU%2FbtrmxieeuO8%2FVkCX7UX2zKYW1aKcVhFlG0%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;1280&quot; height=&quot;455&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;455&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;npm은 Node Packaged Manager의 약자로 Node.js의 패키지를 관리하는 패키지 관리자이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모듈들을 패키지화하여 모아둔 저장소 역할을 하며 설치/관리를 간편하게 할 수 있다. node.js 설치시 자동으로 설치되므로 추가로 설치할 필요는 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유사한 패키지 관리자로는 yarn이 있다. React나 React Native에 주로 사용된다.&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Server/Node.js</category>
      <author>dev.Woody</author>
      <guid isPermaLink="true">https://dev-woody.tistory.com/16</guid>
      <comments>https://dev-woody.tistory.com/16#entry16comment</comments>
      <pubDate>Mon, 29 Nov 2021 23:46:00 +0900</pubDate>
    </item>
    <item>
      <title>OpenCV 이진 이미지 만들기</title>
      <link>https://dev-woody.tistory.com/15</link>
      <description>&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;749&quot; data-origin-height=&quot;407&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciC5QP/btrmpxjDRcs/9xPVKMJboMHnt0U0h9unE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciC5QP/btrmpxjDRcs/9xPVKMJboMHnt0U0h9unE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciC5QP/btrmpxjDRcs/9xPVKMJboMHnt0U0h9unE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciC5QP%2FbtrmpxjDRcs%2F9xPVKMJboMHnt0U0h9unE1%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;749&quot; height=&quot;407&quot; data-origin-width=&quot;749&quot; data-origin-height=&quot;407&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미지를 검은색과 힌색으로만 표현한 것을 이진화 이미지라고 한다. 일반적으로 이진화 이미지를 만들기 위해서는 특정 값을 기준으로 두 가지로 나누는 것이 일반적이다.이는 Thresholding이라고 한다.이를 통해 이진(binary) 이미지를 생성할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전의 gray스케일로 변환한 값을 가지고 threshhoding 하면 다음과 같은 이진 이미지를 얻을 수 있다.&lt;/p&gt;
&lt;pre class=&quot;smali&quot;&gt;&lt;code&gt;import cv2

img_origin = cv2.imread('source.jpg')
gray = cv2.cvtColor(img_origin, cv2.COLOR_BGR2GRAY)
ret,img_thresh = cv2.threshold(gray,
                               100,255.0,
                               cv2.THRESH_BINARY_INV)
cv2.imshow(&quot;img_thresh&quot;,img_thresh)
cv2.imwrite(&quot;img_thresh.jpg&quot;, img_thresh)
cv2.waitKey()&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/di0qbQ/btrmyjKDR4I/lcc0KY5lbkDynGO9xN9k0K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/di0qbQ/btrmyjKDR4I/lcc0KY5lbkDynGO9xN9k0K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/di0qbQ/btrmyjKDR4I/lcc0KY5lbkDynGO9xN9k0K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdi0qbQ%2FbtrmyjKDR4I%2Flcc0KY5lbkDynGO9xN9k0K%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;1280&quot; height=&quot;720&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&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;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6oGTt/btrmxjYIgg9/Si7CwByUWUPE7ZpCnMx6tK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6oGTt/btrmxjYIgg9/Si7CwByUWUPE7ZpCnMx6tK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6oGTt/btrmxjYIgg9/Si7CwByUWUPE7ZpCnMx6tK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6oGTt%2FbtrmxjYIgg9%2FSi7CwByUWUPE7ZpCnMx6tK%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;1280&quot; height=&quot;720&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>dev.Woody</author>
      <guid isPermaLink="true">https://dev-woody.tistory.com/15</guid>
      <comments>https://dev-woody.tistory.com/15#entry15comment</comments>
      <pubDate>Mon, 29 Nov 2021 23:44:58 +0900</pubDate>
    </item>
    <item>
      <title>Stack Overflow 시작하기</title>
      <link>https://dev-woody.tistory.com/12</link>
      <description>&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1664&quot; data-origin-height=&quot;800&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6v4Xq/btrmtfCIZOf/wpLlKGF5ieB8kMpnUYc7b0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6v4Xq/btrmtfCIZOf/wpLlKGF5ieB8kMpnUYc7b0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6v4Xq/btrmtfCIZOf/wpLlKGF5ieB8kMpnUYc7b0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6v4Xq%2FbtrmtfCIZOf%2FwpLlKGF5ieB8kMpnUYc7b0%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;1664&quot; height=&quot;800&quot; data-origin-width=&quot;1664&quot; data-origin-height=&quot;800&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h3 id=&quot;stack-overflow란&quot; data-ke-size=&quot;size23&quot;&gt;Stack Overflow란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발자들이 프로그래밍을 할 때, 막히거나 궁금한 것이 있을 때, 프로그래밍에 관해서 질문하고 답변을 받는 사이트이다. 제일 규모가 크기 때문에, 빠르게 답변이 올라온다. 대부분 디버깅 하면서 구글 검색하면 들어가는 곳이, Stack Overflow이다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;614&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kzz6e/btrmziY1rd2/XrCJBmDzRok6Vo1naxswt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kzz6e/btrmziY1rd2/XrCJBmDzRok6Vo1naxswt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kzz6e/btrmziY1rd2/XrCJBmDzRok6Vo1naxswt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fkzz6e%2FbtrmziY1rd2%2FXrCJBmDzRok6Vo1naxswt0%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;1290&quot; height=&quot;614&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;614&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;h3 id=&quot;stack-overflow의-운영&quot; data-ke-size=&quot;size23&quot;&gt;Stack Overflow의 운영&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Stack Overflow는 점수 시스템을 기반으로 운영된다. 추천과 반대 투표제를 이용해서 질문의 퀄리티를 관리한다. 유익한 질문이거나 유익한 답변이면 Reputation을 얻고, 대충한 질문이거나 성의 없는 질문일 경우 반대 투표를 받아 Reputation을 잃게 된다.&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;262&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/F8OBt/btrmzjwSoj9/wfu0MMJ7ONwmE2xri1YFe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/F8OBt/btrmzjwSoj9/wfu0MMJ7ONwmE2xri1YFe0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/F8OBt/btrmzjwSoj9/wfu0MMJ7ONwmE2xri1YFe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF8OBt%2FbtrmzjwSoj9%2Fwfu0MMJ7ONwmE2xri1YFe0%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;262&quot; data-origin-width=&quot;787&quot; data-origin-height=&quot;262&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;점수 획득&lt;/b&gt;&lt;br /&gt;내가 다른 사용자의 질문을 채택한 경우: +2점&lt;br /&gt;내 질문이 다른 사용자의 찬성 투표를 받으면: +5점&lt;br /&gt;내 답변이 다른 사용자의 찬성 투표를 받으면: +10점&lt;br /&gt;내 답변을 질문자가 채택한 경우: +15점&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;점수 잃음&lt;/b&gt;&lt;br /&gt;내가 다른 사용자의 답변에 반대 투표를 하면: -1점&lt;br /&gt;내 질문이 다른 사용자의 반대 투표를 받으면: -2점&lt;br /&gt;내 답변이 다른 사용자의 반대 투표를 받으면: -2점&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;점수제가 생각보다 재미있다. 내가 반대 투표를 해도, 점수가 줄어들기 때문에 생각보다 고민을 많이하고 투표를 해야한다.또한, 평판 50점이 넘어야댓글을 달 수 있고, 투표에 참여할 수 있다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;여담&quot; data-ke-size=&quot;size23&quot;&gt;여담&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;영어공부도 할 겸, 디버깅 실력도 늘릴 겸 해서 오늘 가입을 시작했다. 오늘 간단하게 파이썬 질문에 답변을 달았다. 점수제가 있기 때문에, 가장 정확하고 좋은 답을 얻기 위해 경쟁하는데 여기서 생각보다 많이 배우는 것 같다. 이번달 명성 300을 목표로, 올해 말까지 1k를 목표로 해봐야겠다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1297&quot; data-origin-height=&quot;913&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dJsDXI/btrmziEIGLM/Dfqc9eLclkqwJkIiRc73kK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dJsDXI/btrmziEIGLM/Dfqc9eLclkqwJkIiRc73kK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dJsDXI/btrmziEIGLM/Dfqc9eLclkqwJkIiRc73kK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdJsDXI%2FbtrmziEIGLM%2FDfqc9eLclkqwJkIiRc73kK%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;1297&quot; height=&quot;913&quot; data-origin-width=&quot;1297&quot; data-origin-height=&quot;913&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Others</category>
      <author>dev.Woody</author>
      <guid isPermaLink="true">https://dev-woody.tistory.com/12</guid>
      <comments>https://dev-woody.tistory.com/12#entry12comment</comments>
      <pubDate>Mon, 29 Nov 2021 23:40:06 +0900</pubDate>
    </item>
    <item>
      <title>윈도우 배치 파일 만들기</title>
      <link>https://dev-woody.tistory.com/11</link>
      <description>&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;800&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wqyhv/btrmvdknx8V/RsAm4P7NvDEi8YcF7wLMr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wqyhv/btrmvdknx8V/RsAm4P7NvDEi8YcF7wLMr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wqyhv/btrmvdknx8V/RsAm4P7NvDEi8YcF7wLMr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fwqyhv%2Fbtrmvdknx8V%2FRsAm4P7NvDEi8YcF7wLMr1%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;1280&quot; height=&quot;800&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;800&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;윈도우에서의 명령 프롬프트에서 적는 명령어를 bat 파일로 만들어서 사용할 수 있습니다.&lt;/p&gt;
&lt;h4 id=&quot;화면에-메시지-출력&quot; data-ke-size=&quot;size20&quot;&gt;화면에 메시지 출력&lt;/h4&gt;
&lt;pre class=&quot;dos&quot;&gt;&lt;code&gt;ECHO Hello World&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;화면에-출력되는-텍스트-보이기&quot; data-ke-size=&quot;size20&quot;&gt;화면에 출력되는 텍스트 보이기&lt;/h4&gt;
&lt;pre class=&quot;aspectj&quot;&gt;&lt;code&gt;@ECHO ON&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;화면에-출력되는-텍스트-감추기&quot; data-ke-size=&quot;size20&quot;&gt;화면에 출력되는 텍스트 감추기&lt;/h4&gt;
&lt;pre class=&quot;aspectj&quot;&gt;&lt;code&gt;@ECHO OFF&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;문자열-줄바꿈&quot; data-ke-size=&quot;size20&quot;&gt;문자열 줄바꿈&lt;/h4&gt;
&lt;pre class=&quot;dos&quot;&gt;&lt;code&gt;ECHO.&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;파일-복사&quot; data-ke-size=&quot;size20&quot;&gt;파일 복사&lt;/h4&gt;
&lt;pre class=&quot;dockerfile&quot;&gt;&lt;code&gt;COPY&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;파일-삭제&quot; data-ke-size=&quot;size20&quot;&gt;파일 삭제&lt;/h4&gt;
&lt;pre class=&quot;dos&quot;&gt;&lt;code&gt;DEL&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;프로그램-바로-실행하기&quot; data-ke-size=&quot;size20&quot;&gt;프로그램 바로 실행하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;start /d 시작하고자 하는 주소 /b 파일명&lt;br /&gt;/b는 따로 새로운 창을 띄우지 않겠다는 것을 나타내는 옵션이다.&lt;/p&gt;
&lt;pre class=&quot;taggerscript&quot;&gt;&lt;code&gt;start /d &quot;C:\Program Files (x86)\Google\Chrome\Application&quot; /b chrome.exe&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;명령-실행-후-창-남겨두기&quot; data-ke-size=&quot;size20&quot;&gt;명령 실행 후 창 남겨두기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가적인 입력이 필요한 경우 매우 유용하다. 명령이 실행하고 종료되어도 cmd창이 바로 닫히지 않는다.&lt;/p&gt;
&lt;pre class=&quot;dockerfile&quot;&gt;&lt;code&gt;cmd /k&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Operating System/Window</category>
      <author>dev.Woody</author>
      <guid isPermaLink="true">https://dev-woody.tistory.com/11</guid>
      <comments>https://dev-woody.tistory.com/11#entry11comment</comments>
      <pubDate>Mon, 29 Nov 2021 23:39:24 +0900</pubDate>
    </item>
    <item>
      <title>Linux Command line 기본 명령어 정리</title>
      <link>https://dev-woody.tistory.com/5</link>
      <description>&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;480&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6N2kz/btrmruGWmw7/ROMwzid8bMKpvdgdrDgT0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6N2kz/btrmruGWmw7/ROMwzid8bMKpvdgdrDgT0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6N2kz/btrmruGWmw7/ROMwzid8bMKpvdgdrDgT0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6N2kz%2FbtrmruGWmw7%2FROMwzid8bMKpvdgdrDgT0k%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;720&quot; height=&quot;480&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;480&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h4 id=&quot;파일-또는-디렉토리-확인&quot; data-ke-size=&quot;size20&quot;&gt;파일 또는 디렉토리 확인&lt;/h4&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;ls
ls -al&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;옵션&lt;br /&gt;-a 숨긴 파일 및 디렉토리 까지 표시&lt;br /&gt;-l 상세정보 표시&lt;br /&gt;-s 크기별 정렬&lt;/p&gt;
&lt;h4 id=&quot;디렉토리-이동&quot; data-ke-size=&quot;size20&quot;&gt;디렉토리 이동&lt;/h4&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;cd /velog&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;현재-디렉토리-확인&quot; data-ke-size=&quot;size20&quot;&gt;현재 디렉토리 확인&lt;/h4&gt;
&lt;pre class=&quot;bash&quot;&gt;&lt;code&gt;pwd&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;신규-디렉토리-생성&quot; data-ke-size=&quot;size20&quot;&gt;신규 디렉토리 생성&lt;/h4&gt;
&lt;pre class=&quot;arduino&quot;&gt;&lt;code&gt;mkdir velog&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;디렉토리-삭제&quot; data-ke-size=&quot;size20&quot;&gt;디렉토리 삭제&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;rmdir은 파일이 없는 폴더만 삭제가 가능하다.&lt;/p&gt;
&lt;pre class=&quot;arduino&quot;&gt;&lt;code&gt;rmdir velog&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일이 있는 폴더를 삭제하고자 하면 rm 명령어를 이용해 삭제하면 된다.&lt;/p&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;rm -rf velog&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;파일-삭제&quot; data-ke-size=&quot;size20&quot;&gt;파일 삭제&lt;/h4&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;rm velog.txt&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;옵션&lt;br /&gt;-r 하위 디렉토리 삭제&lt;br /&gt;-f 강제로 삭제&lt;br /&gt;-i 파일 지울지 물어봄&lt;br /&gt;-v 삭제 정보 표시&lt;/p&gt;
&lt;h4 id=&quot;파일에서-단어-검색&quot; data-ke-size=&quot;size20&quot;&gt;파일에서 단어 검색&lt;/h4&gt;
&lt;pre class=&quot;gradle&quot;&gt;&lt;code&gt;grep -in 'hello' ./velog.txt&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 명령어는 대소문자를 구분하지 않고 velog.txt 내에서 hellow가 있는 행과 line 번호를 함께 출력하는 명령어이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;옵션&lt;br /&gt;-c 라인의 개수 출력&lt;br /&gt;-i 대소문자 구분 안함&lt;br /&gt;-n 라인 번호 출력&lt;br /&gt;-v 검색어가 없는 Line 보여달라&lt;/p&gt;
&lt;h4 id=&quot;명령어-별칭&quot; data-ke-size=&quot;size20&quot;&gt;명령어 별칭&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;alias로 지정 후 l을 입력하면 별명으로 지정한 해당 명령어가 실행된다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot;&gt;&lt;code&gt;alias l='ls -al'
unalias l&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Operating System/Linux</category>
      <author>dev.Woody</author>
      <guid isPermaLink="true">https://dev-woody.tistory.com/5</guid>
      <comments>https://dev-woody.tistory.com/5#entry5comment</comments>
      <pubDate>Mon, 29 Nov 2021 23:35:39 +0900</pubDate>
    </item>
    <item>
      <title>리눅스 C 컴파일러 : GCC 알아보기</title>
      <link>https://dev-woody.tistory.com/4</link>
      <description>&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;480&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCtjk6/btrmyjqmg60/nGk4qBFCYvJVRR4oKAT3pK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCtjk6/btrmyjqmg60/nGk4qBFCYvJVRR4oKAT3pK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCtjk6/btrmyjqmg60/nGk4qBFCYvJVRR4oKAT3pK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCtjk6%2Fbtrmyjqmg60%2FnGk4qBFCYvJVRR4oKAT3pK%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;720&quot; height=&quot;480&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;480&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;h3 id=&quot;1-컴파일-하기&quot; data-ke-size=&quot;size23&quot;&gt;1. 컴파일 하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gcc &amp;lt;컴파일할 파일&amp;gt; 으로 컴파일이 가능하다.&lt;/p&gt;
&lt;pre class=&quot;elixir&quot;&gt;&lt;code&gt;$ gcc main.c&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;2-컴파일한-파일-실행하기&quot; data-ke-size=&quot;size23&quot;&gt;2. 컴파일한 파일 실행하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴파일할때 출력 파일명을 지정하지 않을 경우 기본적으로 a.out이라는 파일명으로 파일이 나오게 된다.&lt;br /&gt;실행은 ./실행파일 명으로 실행이 가능하다. ./는 현재폴더내에서의 프로그램을 뜻한다. &quot;./명령&quot; 은 현재의 디렉토리에 있는 &quot;명령&quot; 을 실행하라는 것이다. 환경변수에 추가하면 ./없이 이용이 가능하지만 보안상 좋지 않다.&lt;/p&gt;
&lt;pre class=&quot;ada&quot;&gt;&lt;code&gt;$ ./a.out&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;3-컴파일한-결과-파일-지정&quot; data-ke-size=&quot;size23&quot;&gt;3. 컴파일한 결과 파일 지정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gcc 에서는 -o 옵션을 통해 컴파일 과정에서 만들어지는 실행 파일의 이름을 수정 할 수 있도록 지원한다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gcc -o &amp;lt;실행파일 이름&amp;gt; &amp;lt;컴파일할 파일&amp;gt;&lt;/p&gt;
&lt;pre class=&quot;elixir&quot;&gt;&lt;code&gt;$ gcc -o main main.c &lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음과 같은 방법으로 컴파일 할 파일 여러개를 지정할 수도 있다.&lt;br /&gt;gcc -o &amp;lt;실행파일 이름&amp;gt; &amp;lt;컴파일할 파일&amp;gt; &amp;lt;컴파일할 파일&amp;gt; &amp;lt;컴파일할 파일&amp;gt;&lt;/p&gt;
&lt;pre class=&quot;llvm&quot;&gt;&lt;code&gt;$ gcc -o main main.c main2.c main3.c&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;4-목적object-파일-만들기&quot; data-ke-size=&quot;size23&quot;&gt;4. 목적(Object) 파일 만들기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목적파일은 기계어로 구성된 파일이다. 컴파일러는 다음과 같은 과정을 통해서 컴파일을 진행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전처리기 &amp;gt; 컴파일(어셈블리 소스) &amp;gt; 어셈블(목적 파일 생성) &amp;gt; 링크(실행가능 파일)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 목적파일은 여러개의 파일이 있을 때 사용하기 유용하다. 위의 3과 같은 역할을 하지만, 변경사항이 없는 소스파일은 따로 변경할 필요가 없어 불필요한 컴파일 과정을 줄일 수 있다. 이와 관련해서는 make가 있다. 추후 설명할 예정이다.&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;gcc -c main.c
gcc -c main1.c
gcc -c main2.c
gcc -o main main.o fun1.o fun2.o&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;5-gcc-다른-옵션&quot; data-ke-size=&quot;size23&quot;&gt;5. Gcc 다른 옵션&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-e : 전처리 과정을 화면에 출력한다.&lt;br /&gt;-s : 어셈블리 파일 생성한다.&lt;br /&gt;-v : 컴파일 과정을 화면에 출력한다.&lt;br /&gt;--save-temps : 컴파일시 생성되는 중간 파일 저장한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Operating System/Linux</category>
      <author>dev.Woody</author>
      <guid isPermaLink="true">https://dev-woody.tistory.com/4</guid>
      <comments>https://dev-woody.tistory.com/4#entry4comment</comments>
      <pubDate>Mon, 29 Nov 2021 23:34:37 +0900</pubDate>
    </item>
  </channel>
</rss>