<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>담비의 개발블로그</title>
    <link>https://dambi1224.tistory.com/</link>
    <description>개발 관련된 공부들을 주제로 글을 씁니다.</description>
    <language>ko</language>
    <pubDate>Thu, 4 Jun 2026 11:40:28 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>담비12</managingEditor>
    <image>
      <title>담비의 개발블로그</title>
      <url>https://tistory1.daumcdn.net/tistory/6764354/attach/309e2efe91a2410cbfbcca09bb63ae9a</url>
      <link>https://dambi1224.tistory.com</link>
    </image>
    <item>
      <title>[C#]C#기초이론</title>
      <link>https://dambi1224.tistory.com/126</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이직성공 후 교육을 받고 있는 중입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;교육받고 있는 내용들을 토대로 정리한 내용입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;&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: 'Nanum Gothic';&quot;&gt;◆&amp;nbsp;JS와&amp;nbsp;C#의&amp;nbsp;차이점 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;JS는&amp;nbsp;인터프리터&amp;nbsp;언어이며&amp;nbsp;C#은&amp;nbsp;컴파일러&amp;nbsp;언어이다. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;인터프리터&amp;nbsp;:&amp;nbsp;프로그램을&amp;nbsp;한&amp;nbsp;줄씩&amp;nbsp;읽으며&amp;nbsp;즉시&amp;nbsp;실행한다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;컴파일러&amp;nbsp;:&amp;nbsp;소스&amp;nbsp;코드를&amp;nbsp;기계어로&amp;nbsp;번역하는&amp;nbsp;컴파일&amp;nbsp;과정을&amp;nbsp;거친&amp;nbsp;후&amp;nbsp;소스&amp;nbsp;코드&amp;nbsp;전체를&amp;nbsp;한번에&amp;nbsp;분석하고&amp;nbsp;최적화를&amp;nbsp;수행한&amp;nbsp;후&amp;nbsp;실행&amp;nbsp;파일을&amp;nbsp;생성한다. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;인터프리터와&amp;nbsp;컴파일러의&amp;nbsp;차이점 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;실행속도&amp;nbsp;:&amp;nbsp;느림&amp;nbsp;vs&amp;nbsp;빠름 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;보안&amp;nbsp;:&amp;nbsp;취약&amp;nbsp;vs&amp;nbsp;안전&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 34px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;종류&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;인터프리터&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;컴파일러&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;실행속도&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;느림&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;빠름&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;보안&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;취약&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&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;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;◆&amp;nbsp;변수&amp;nbsp;:&amp;nbsp;값을&amp;nbsp;담아&amp;nbsp;놓을&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;역할 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;◆&amp;nbsp;자료형&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;gt;&amp;nbsp;C#의&amp;nbsp;모든&amp;nbsp;자료형은&amp;nbsp;최상위&amp;nbsp;객체인&amp;nbsp;System.Object에서&amp;nbsp;파생된다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;gt;&amp;nbsp;값타입과&amp;nbsp;참조타입으로&amp;nbsp;나뉜다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1)&amp;nbsp;값타입 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;gt;&amp;nbsp;실제&amp;nbsp;데이터&amp;nbsp;값을&amp;nbsp;스택&amp;nbsp;영역에&amp;nbsp;직접&amp;nbsp;저장한다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;①&amp;nbsp;정수형&amp;nbsp;:&amp;nbsp;데이터&amp;nbsp;크기에&amp;nbsp;따라&amp;nbsp;선택한다.&amp;nbsp;(shor,&amp;nbsp;int,&amp;nbsp;long) &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;②&amp;nbsp;실수형&amp;nbsp;:&amp;nbsp;소수점이&amp;nbsp;포함된&amp;nbsp;데이터를&amp;nbsp;다룬다.&amp;nbsp;(float,&amp;nbsp;double,&amp;nbsp;decimal) &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;③&amp;nbsp;기타&amp;nbsp;:&amp;nbsp;bool&amp;nbsp;-&amp;nbsp;true&amp;nbsp;또는&amp;nbsp;false만&amp;nbsp;저장/char&amp;nbsp;-&amp;nbsp;유니코드&amp;nbsp;문자1개/enum&amp;nbsp;-&amp;nbsp;열거형/struct&amp;nbsp;-&amp;nbsp;사용자의&amp;nbsp;정의&amp;nbsp;구조체 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;2)&amp;nbsp;참조타입 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;①&amp;nbsp;object&amp;nbsp;:&amp;nbsp;모든&amp;nbsp;타입의&amp;nbsp;조상으로&amp;nbsp;어떤&amp;nbsp;타입의&amp;nbsp;데이터도&amp;nbsp;담을&amp;nbsp;수&amp;nbsp;있다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;②&amp;nbsp;string&amp;nbsp;:&amp;nbsp;문자열을&amp;nbsp;다룬다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;③&amp;nbsp;class&amp;nbsp;:&amp;nbsp;객체지향&amp;nbsp;프로그래밍의&amp;nbsp;기본&amp;nbsp;단위이다.&amp;nbsp;무언가를&amp;nbsp;실행하기&amp;nbsp;위한&amp;nbsp;틀로&amp;nbsp;생각하면&amp;nbsp;편하다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;④&amp;nbsp;interface&amp;nbsp;:&amp;nbsp;클래스가&amp;nbsp;구현해야&amp;nbsp;할&amp;nbsp;기능을&amp;nbsp;정의한다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;⑤&amp;nbsp;delegate&amp;nbsp;:&amp;nbsp;함수를&amp;nbsp;참조하는&amp;nbsp;타입이다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;⑥&amp;nbsp;array&amp;nbsp;:&amp;nbsp;동일한&amp;nbsp;타입의&amp;nbsp;데이터를&amp;nbsp;연속적으로&amp;nbsp;저장하는&amp;nbsp;집합이다. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;3)&amp;nbsp;특수타입 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;①&amp;nbsp;var타입&amp;nbsp;:&amp;nbsp;컴파일러가&amp;nbsp;대입되는&amp;nbsp;값을&amp;nbsp;보고&amp;nbsp;타입을&amp;nbsp;자동으로&amp;nbsp;결정한다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;②&amp;nbsp;Nullable타입&amp;nbsp;:&amp;nbsp;기본적으로&amp;nbsp;값&amp;nbsp;타입은&amp;nbsp;null을&amp;nbsp;가질&amp;nbsp;수&amp;nbsp;없지만&amp;nbsp;데이터베이스&amp;nbsp;연산&amp;nbsp;등에서&amp;nbsp;데이터가&amp;nbsp;비어있음을&amp;nbsp;표현하기&amp;nbsp;위해&amp;nbsp;사용한다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;③&amp;nbsp;dynamic&amp;nbsp;:&amp;nbsp;컴파일&amp;nbsp;시점이&amp;nbsp;아닌&amp;nbsp;런타임에&amp;nbsp;타입을&amp;nbsp;결정한다.&amp;nbsp;파이썬&amp;nbsp;같은&amp;nbsp;동적&amp;nbsp;언어와&amp;nbsp;통신하거나&amp;nbsp;리플렉션을&amp;nbsp;쓸&amp;nbsp;때&amp;nbsp;주로&amp;nbsp;사용하지만,&amp;nbsp;성능&amp;nbsp;저하와&amp;nbsp;런타임&amp;nbsp;에러&amp;nbsp;위험이&amp;nbsp;있어&amp;nbsp;주의가&amp;nbsp;필요하다. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;◆&amp;nbsp;형변환 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;gt;&amp;nbsp;각&amp;nbsp;자료형은&amp;nbsp;서로&amp;nbsp;변환이&amp;nbsp;가능할&amp;nbsp;수도&amp;nbsp;있고,&amp;nbsp;그렇지&amp;nbsp;않을&amp;nbsp;수도&amp;nbsp;있다. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1775633852505&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// string &amp;gt; int 로 변환
string a = &quot;123&quot;;
int b = int.Parse(a);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1775633861351&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// int &amp;gt; string 로 변환
int c = 123;
string d = c.ToString();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;◆&amp;nbsp;연산자 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1)&amp;nbsp;산술&amp;nbsp;연산자&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;gt;&amp;nbsp;숫자&amp;nbsp;데이터를&amp;nbsp;계산할&amp;nbsp;때&amp;nbsp;사용하며,&amp;nbsp;가장&amp;nbsp;기본이&amp;nbsp;되는&amp;nbsp;연산자이다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;+&amp;nbsp;더하기&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;-&amp;nbsp;빼기 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;*&amp;nbsp;곱하기 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;/&amp;nbsp;나누기 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;%&amp;nbsp;나머지 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;2)&amp;nbsp;증감연산자 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;gt;&amp;nbsp;변수의&amp;nbsp;값을&amp;nbsp;1씩&amp;nbsp;증가시키거나&amp;nbsp;감소시킬&amp;nbsp;때&amp;nbsp;사용한다.&amp;nbsp;위치의&amp;nbsp;따라&amp;nbsp;실행&amp;nbsp;순서가&amp;nbsp;달라진다.(아래&amp;nbsp;i는&amp;nbsp;임의의&amp;nbsp;값이다.) &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;++i&amp;nbsp;:&amp;nbsp;값을&amp;nbsp;1&amp;nbsp;증가시킨&amp;nbsp;후에&amp;nbsp;문장을&amp;nbsp;실행한다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;i++&amp;nbsp;:&amp;nbsp;문장을&amp;nbsp;실행한&amp;nbsp;후에&amp;nbsp;값을&amp;nbsp;1증가시킨다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;--i,i--&amp;nbsp;:&amp;nbsp;1감소 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;3)&amp;nbsp;비교&amp;nbsp;연산자 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;gt;&amp;nbsp;두&amp;nbsp;값을&amp;nbsp;비교하여&amp;nbsp;결과로&amp;nbsp;bool값(true&amp;nbsp;또는&amp;nbsp;false)을&amp;nbsp;반환한다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;==&amp;nbsp;:&amp;nbsp;같다 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;!=&amp;nbsp;:&amp;nbsp;다르다 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;gt;&amp;nbsp;/&amp;nbsp;&amp;lt;&amp;nbsp;:&amp;nbsp;크다&amp;nbsp;/&amp;nbsp;작다 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;gt;=&amp;nbsp;/&amp;nbsp;&amp;lt;=&amp;nbsp;:&amp;nbsp;크거나&amp;nbsp;같다&amp;nbsp;/&amp;nbsp;작거나&amp;nbsp;같다 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;4)&amp;nbsp;논리&amp;nbsp;연산자 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;gt;여러개의&amp;nbsp;조건을&amp;nbsp;조합할&amp;nbsp;때&amp;nbsp;사용한다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;amp;&amp;amp;&amp;nbsp;:&amp;nbsp;두&amp;nbsp;조건이&amp;nbsp;모두&amp;nbsp;참일&amp;nbsp;때만&amp;nbsp;true(AND) &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;||&amp;nbsp;:&amp;nbsp;두&amp;nbsp;조건&amp;nbsp;중&amp;nbsp;하나만&amp;nbsp;참이어도&amp;nbsp;true(OR) &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;!&amp;nbsp;:&amp;nbsp;true를&amp;nbsp;false로,&amp;nbsp;false를&amp;nbsp;true로&amp;nbsp;반전(NOT) &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;5)&amp;nbsp;대입연산자 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;gt;&amp;nbsp;변수에&amp;nbsp;값을&amp;nbsp;할당할&amp;nbsp;때&amp;nbsp;사용하며,&amp;nbsp;산술&amp;nbsp;연산과&amp;nbsp;결합된&amp;nbsp;복합&amp;nbsp;대입&amp;nbsp;연산자도&amp;nbsp;자주&amp;nbsp;쓰인다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;=&amp;nbsp;:&amp;nbsp;값을&amp;nbsp;대입(오른쪽&amp;nbsp;값을&amp;nbsp;왼쪽에&amp;nbsp;넣음) &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;+=,&amp;nbsp;-=,&amp;nbsp;*=,&amp;nbsp;/=,&amp;nbsp;%=&amp;nbsp;:&amp;nbsp;계산&amp;nbsp;후&amp;nbsp;바로&amp;nbsp;대입 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;6)&amp;nbsp;비트&amp;nbsp;연산자 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;데이터를&amp;nbsp;비트(0,1)&amp;nbsp;단위로&amp;nbsp;조작할&amp;nbsp;때&amp;nbsp;사용한다.&amp;nbsp;하드웨어&amp;nbsp;제어나&amp;nbsp;최적화&amp;nbsp;작업에서&amp;nbsp;주로&amp;nbsp;쓰인다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;amp;(AND),&amp;nbsp;|(OR),&amp;nbsp;^(XOR),&amp;nbsp;~(NOT) &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;lt;&amp;lt;,&amp;nbsp;&amp;gt;&amp;gt;(Shift)&amp;nbsp;:&amp;nbsp;비트를&amp;nbsp;왼쪽이나&amp;nbsp;오른쪽으로&amp;nbsp;이동시킨다. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;7)&amp;nbsp;C#전용&amp;nbsp;및&amp;nbsp;특수&amp;nbsp;연산자 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;gt;&amp;nbsp;C#에는&amp;nbsp;코드를&amp;nbsp;간결하게&amp;nbsp;만들어주는&amp;nbsp;유용한&amp;nbsp;특수&amp;nbsp;연산자들이&amp;nbsp;많다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;▷&amp;nbsp;삼항연산자&amp;nbsp;:&amp;nbsp;조건?&amp;nbsp;참일_때_값&amp;nbsp;:&amp;nbsp;거짓일_때_값 &lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1775633884025&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int score = 85;
string result = (score &amp;gt;= 60) ? &quot;Pass&quot; : &quot;Fail&quot;;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;▷&amp;nbsp;Null&amp;nbsp;관련&amp;nbsp;연산자 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;??&amp;nbsp;:&amp;nbsp;왼쪽&amp;nbsp;값이&amp;nbsp;null이면&amp;nbsp;오른쪽&amp;nbsp;값을&amp;nbsp;반환한다. &lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1775633893267&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;string name = inputName ?? &quot;Guest&quot;;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;?.&amp;nbsp;:&amp;nbsp;객체가&amp;nbsp;null이&amp;nbsp;아닐&amp;nbsp;때만&amp;nbsp;멤버에&amp;nbsp;접근한다.&amp;nbsp;null이면&amp;nbsp;에러&amp;nbsp;대신&amp;nbsp;null을&amp;nbsp;반환한다. &lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1775633900779&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int? length = list?.Count;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;◆&amp;nbsp;조건문(if,&amp;nbsp;switch) &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;if문 &lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1775633917095&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if(조건식)
{
구문
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;◆&amp;nbsp;필드(Field) &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;gt;&amp;nbsp;클래스&amp;nbsp;내부에서&amp;nbsp;데이터를&amp;nbsp;저장하는&amp;nbsp;진짜&amp;nbsp;변수 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;gt;&amp;nbsp;외부에서&amp;nbsp;이&amp;nbsp;변수에&amp;nbsp;직접&amp;nbsp;접근해서&amp;nbsp;값을&amp;nbsp;바꾸거나&amp;nbsp;가져올&amp;nbsp;수&amp;nbsp;있다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;gt;&amp;nbsp;데이터를&amp;nbsp;담는&amp;nbsp;그릇 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;◆&amp;nbsp;프로퍼티(Property&amp;nbsp;=&amp;nbsp;속성) &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;gt;&amp;nbsp;내부적으로는&amp;nbsp;데이터를&amp;nbsp;저장하지만,&amp;nbsp;외부에서는&amp;nbsp;메서드를&amp;nbsp;통해&amp;nbsp;접근하도록&amp;nbsp;감싸진&amp;nbsp;형태 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;gt;&amp;nbsp;자동&amp;nbsp;구현&amp;nbsp;프로퍼티라고&amp;nbsp;해서&amp;nbsp;C#이&amp;nbsp;내부적으로&amp;nbsp;숨겨진&amp;nbsp;필드를&amp;nbsp;자동으로&amp;nbsp;만들어준다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;①&amp;nbsp;데이터검증(유효성검사)&amp;nbsp;:&amp;nbsp;필드는&amp;nbsp;아무&amp;nbsp;값이나&amp;nbsp;넣는&amp;nbsp;것을&amp;nbsp;막을&amp;nbsp;수&amp;nbsp;없지만&amp;nbsp;프로퍼티는&amp;nbsp;제어가&amp;nbsp;가능하다. &lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1775633927603&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;private int _price;
public int price 
{
    get { return _price; }
    set 
    {
        if (value &amp;lt; 0) // 0보다 작으면 0으로 고정
            _price = 0;
        else
            _price = value;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;②&amp;nbsp;읽기&amp;nbsp;전용&amp;nbsp;/&amp;nbsp;쓰기&amp;nbsp;전용&amp;nbsp;설정&amp;nbsp;:&amp;nbsp;필드는&amp;nbsp;public으로&amp;nbsp;열어두면&amp;nbsp;누구나&amp;nbsp;수정할&amp;nbsp;수&amp;nbsp;있지만,&amp;nbsp;프로퍼티는&amp;nbsp;수정만&amp;nbsp;막거나&amp;nbsp;읽기만&amp;nbsp;막을&amp;nbsp;수&amp;nbsp;있다. &lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1775633937742&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 외부에서는 읽기만 가능하고, 클래스 내부에서만 수정 가능하게 설정
public string Writer { get; private set; }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;③&amp;nbsp;데이터&amp;nbsp;바인딩&amp;nbsp;(UI&amp;nbsp;연동)&amp;nbsp;:&amp;nbsp;나중에&amp;nbsp;WPF나&amp;nbsp;WinForms&amp;nbsp;같은&amp;nbsp;GUI&amp;nbsp;프로그램을&amp;nbsp;만들&amp;nbsp;때,&amp;nbsp;화면에&amp;nbsp;데이터를&amp;nbsp;뿌려주는&amp;nbsp;'데이터&amp;nbsp;바인딩'&amp;nbsp;기능은&amp;nbsp;필드가&amp;nbsp;아닌&amp;nbsp;프로퍼티에서만&amp;nbsp;작동하는&amp;nbsp;경우가&amp;nbsp;많다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>언어&amp;amp;프레임워크/C#</category>
      <category>c#</category>
      <category>C# CS</category>
      <category>C#이론</category>
      <author>담비12</author>
      <guid isPermaLink="true">https://dambi1224.tistory.com/126</guid>
      <comments>https://dambi1224.tistory.com/126#entry126comment</comments>
      <pubDate>Wed, 8 Apr 2026 20:40:08 +0900</pubDate>
    </item>
    <item>
      <title>[CS]Java JVM 구조</title>
      <link>https://dambi1224.tistory.com/124</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;Java Virtual Machine(JVM)은 자바 바이트코드(.class 파일)를 실행하기 위한 가상 환경&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;구성요소&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1. 클래스 로더 시스템&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;자바 컴파일러가 생성한 바이트코드를 읽어들여 메모리에 배치하는 역할을 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;로딩&amp;gt;링크&amp;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: 'Nanum Gothic';&quot;&gt;로딩(Loading): 클래스 파일을 읽어 메모리에 올린다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;링크(Linking): 코드의 유효성을 검증하고 필요한 메모리를 미리 할당한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;초기화(Initializaion): 클래스 변수들을 적절한 값으로 초기화 한다.&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: 'Nanum Gothic';&quot;&gt;&lt;b&gt;2. 런타임 데이터 영역&lt;/b&gt;&lt;br /&gt;JVM이 운영체제로부터 할당받은 메모리 공간이다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 131px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 21.5891%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;영역&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 45.0775%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;특징&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;공유여부&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 42px;&quot;&gt;
&lt;td style=&quot;width: 21.5891%; height: 42px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;메서드 영역&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 45.0775%; height: 42px; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;클래스 정보, 변수명, static 변수, 상수 등이 저장&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 42px; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;모든 스레드 공유&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 21.5891%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;힙 영역&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 45.0775%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;new 키워드로 생성된 객체와 배열이 저장&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt; 모든 스레드 공유 &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 21.5891%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;스택 영역&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 45.0775%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;메서드 호출시마다 프레임이 쌓이며, 지역변수, 매개변수 등이 저장&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;스레드별 개별 소유&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 21.5891%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;PC 레지스터&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 45.0775%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;현재 실행중인 JVM 명령의 주소를 기록&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt; 스레드별 개별 소유 &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 21.5891%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt; 네이티브 메서드 스택 &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 45.0775%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;자바 외의 언어로 작성된 코드를 실행하기 위한 메모리&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&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;font-family: 'Nanum Gothic';&quot;&gt;3. 실행엔진&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;메모리에 배치된 바이트코드를 실제로 실행하는 장치이다. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;- 인터프리터 (Interpreter) &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;바이트코드를 한 줄씩 읽어서 해석하고 실행한다. 한 줄씩 실행하기 때문에 초기 실행 속도는 빠르지만, 전체적인 실행 속도는 느리다는 단점이 있다. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;- JIT 컴파일러 (Just-In-Time Compiler) &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;인터프리터의 단점을 보완한다. 반복되는 코드(Hot Spot)를 발견하면 해당 전체 바이트코드를 네이티브 코드로 컴파일하여 직접 실행한다. 이후에는 컴파일된 코드를 바로 사용하므로 성능이 비약적으로 향상된다. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;- 가비지 컬렉터 (Garbage Collector, GC) &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;Heap 영역에서 더 이상 참조되지 않는 객체들을 찾아 메모리에서 해제한다. 개발자가 직접 메모리를 해제할 필요가 없게 만들어주는 자바의 가장 큰 특징 중 하나이다.&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: 'Nanum Gothic';&quot;&gt;&lt;b&gt;4. 네이티브 메서드 인터페이스 &amp;amp; 라이브러리&lt;/b&gt;&lt;br /&gt;자바 애플리케이션에서 C, C++ 등으로 작성된 라이브러리를 사용할 수 있게 해주는 통로이다. 하드웨어 제어나 성능 최적화가 필요한 특정 기능을 사용할 때 활용된다.&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>CS(컴퓨터과학)</category>
      <category>jvm구성요소</category>
      <category>JVM구조</category>
      <author>담비12</author>
      <guid isPermaLink="true">https://dambi1224.tistory.com/124</guid>
      <comments>https://dambi1224.tistory.com/124#entry124comment</comments>
      <pubDate>Mon, 2 Feb 2026 22:30:11 +0900</pubDate>
    </item>
    <item>
      <title>[CS]2026.02.01 면접준비(spring, spring boot의 비교)</title>
      <link>https://dambi1224.tistory.com/123</link>
      <description>&lt;h4 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;◆ 공통점&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1. 제어의 역전(Inversion of Control / IoC)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;- 개발자는 선언만 진행하고, 스프링과 스프링부트에서는 컴포넌트를 이용해 실제 객체를 만들어준다. 즉 객체 생성을 개발자 자신이 아닌 스프링과 스프링부트에게 넘기는 것이다. &lt;br /&gt;&lt;br /&gt;IoC의&amp;nbsp;장점&amp;nbsp;:&amp;nbsp;객체의&amp;nbsp;생명주기&amp;nbsp;관리를&amp;nbsp;개발자가&amp;nbsp;아닌&amp;nbsp;컨테이너가&amp;nbsp;담당함으로써,&amp;nbsp;객체&amp;nbsp;간의&amp;nbsp;결합도를&amp;nbsp;낮추고&amp;nbsp;유연한&amp;nbsp;코드를&amp;nbsp;작성할&amp;nbsp;수&amp;nbsp;있게&amp;nbsp;해준다.&amp;nbsp;덕분에&amp;nbsp;비즈니스&amp;nbsp;로직에만&amp;nbsp;집중할&amp;nbsp;수&amp;nbsp;있고,&amp;nbsp;테스트&amp;nbsp;코드를&amp;nbsp;작성할&amp;nbsp;때도&amp;nbsp;가짜&amp;nbsp;객체를&amp;nbsp;주입하기&amp;nbsp;쉬워져&amp;nbsp;테스트&amp;nbsp;용이성이&amp;nbsp;높아진다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;2. &lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;의존성 주입&lt;/span&gt;&lt;/b&gt; (Dependency Injection/ DI )&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;- IoC라는&amp;nbsp;큰&amp;nbsp;원칙을&amp;nbsp;실제로&amp;nbsp;구현하는&amp;nbsp;방법이&amp;nbsp;바로&amp;nbsp;DI다.&amp;nbsp;필요한&amp;nbsp;객체를&amp;nbsp;내가&amp;nbsp;직접&amp;nbsp;만드는&amp;nbsp;게&amp;nbsp;아니라,&amp;nbsp;외부(컨테이너)에서&amp;nbsp;&quot;주입&quot;받는&amp;nbsp;방식이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;3. 관점 지향 프로그래밍(Aspect Oriented Programming / AOP)&lt;/span&gt; &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;-&amp;nbsp;AOP는&amp;nbsp;여러&amp;nbsp;클래스에&amp;nbsp;흩어진&amp;nbsp;공통&amp;nbsp;로직을&amp;nbsp;따로&amp;nbsp;모아&amp;nbsp;모듈화하는&amp;nbsp;기술이다.&amp;nbsp;핵심&amp;nbsp;비즈니스&amp;nbsp;로직의&amp;nbsp;순수성을&amp;nbsp;유지하고&amp;nbsp;코드의&amp;nbsp;재사용성을&amp;nbsp;높일&amp;nbsp;수&amp;nbsp;있다.&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;예를 들어 공정설비를 위한 여러개의 로봇사용법에 대한 핵심 로직이 있다면, 이 로봇들의 사용시간이 어떻게 되는지 궁금할 때 사용할 수 있다. 사용시간을 모두 모아두어 따로 관리하는 것이 AOP인 것이다. 그리고 각 로봇의 보안을 위한 로직이 있다고 가정하면 그 보안로직도 부가 기능을 모아둔 [Aspect 클래스] 안에 작성할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;◆ 차이점&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 189px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 20.1938%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;구분&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 39.4961%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;스프링&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 40.31%; height: 21px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;스프링부트&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 42px;&quot;&gt;
&lt;td style=&quot;width: 20.1938%; height: 42px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;설정&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 39.4961%; height: 42px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;수동으로 설정이 필요(XML 또는 자바 설정)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 40.31%; height: 42px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;Auto Configuration(자동설정) 기능을 통해 빈(bean)을 자동으로 등록&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 42px;&quot;&gt;
&lt;td style=&quot;width: 20.1938%; height: 42px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;서버&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 39.4961%; height: 42px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;Tomcat같은 외장 WAS를 별로도 설치하고 WAR 파일을 배포해야함&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 40.31%; height: 42px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;내장서버를 포함하고있어 JAR 파일만으로 즉시 실행 가능&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 42px;&quot;&gt;
&lt;td style=&quot;width: 20.1938%; height: 42px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;의존성 관리&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 39.4961%; height: 42px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;버전 간 호환성을 직접 확인하며 라이브러리를 추가해야 함.&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 40.31%; height: 42px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;Starter 의존성을 통해 관련 라이브러리 묶음을 버전 호환 걱정 없이 한번에 가져옴.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 42px;&quot;&gt;
&lt;td style=&quot;width: 20.1938%; height: 42px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;운영지원&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 39.4961%; height: 42px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;모니터링이나 헬스 체크 기능을 직접 구현.&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 40.31%; height: 42px;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;Actuator를 통해 애플리케이션 상태 모니터링 기능을 기본 제공&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>spring spring boot 차이점 공통점</category>
      <category>스프링 스프링부트 차이점 공통점</category>
      <author>담비12</author>
      <guid isPermaLink="true">https://dambi1224.tistory.com/123</guid>
      <comments>https://dambi1224.tistory.com/123#entry123comment</comments>
      <pubDate>Sun, 1 Feb 2026 23:41:13 +0900</pubDate>
    </item>
    <item>
      <title>[CS]2026.01.31 면접준비</title>
      <link>https://dambi1224.tistory.com/122</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;◆ long의 필요이유&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;int는 32비트로 -21억~+21억 까지의 숫자가 표현이 가능함. 이전에 기억나는 큰 이슈로 유튜브에서 싸이의 강남스타일이 21억뷰가 넘어가면서 오류가 발생함. 실제로 int타입을 사용해서 마이너스로 표기되던 오버플로우가있던 사건으로 기억한다. 그래서 유튜브는 타입을 long으로 변경하여 쓰고 있다고 들음.long타입은 922경의 숫자가 표현될 수 있기에 앞으로의 오류는 없을거라고 본 기억이 있다. 이런것처럼 오버플로우나 치명적인 오류가 발생할 수 있기때문에 타입의 정확한 기획이 필요하다고 느껴진다.&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;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;◆&amp;nbsp;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt;PK(기본키)를&amp;nbsp;생성하면&amp;nbsp;왜&amp;nbsp;검색이&amp;nbsp;빨라지나요?&lt;/span&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: 'Nanum Gothic';&quot;&gt;클러스터드 인덱스는 실제 데이터가 정렬되어 저장되는 방식이고, 넌클러스터드는 데이터는 따로 있고 주소만 있는 색인 방식(Heap)이다. 즉 기본키는 클러스터드 방식인데 검색이 빨라지는 핵심 이유는 데이터가 물리적으로 정렬되기 때문이다. &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: 'Nanum Gothic';&quot;&gt;데이터가 순서대로 정렬되어 있으므로, 데이터가 100만 건이 있어도 단 몇 번의 비교만으로 원하는 값을 찾을 수 있다. 데이터가 모여 있기 때문에 범위 검색(Between, &amp;lt;, &amp;gt;)에 매우 강력한 장점이 있지만, 데이터의 삽입(Insert)이나 수정(Update) 시, 정렬 순서를 유지하기 위해 데이터를 밀어내거나 페이지를 분할하는 작업이 필요해 부하가 발생할 수 있다. 부하가 발생하는 경우는 DB의 저장 되는 방식 때문인데 저장되는 방식이 한곳에서 이루어지는게 아니라 페이지별로 기록되기 때문이다. 예를 들어 1페이지에 내용이 1,5,10의 인덱스만 있고 2페이지에는 11,13,17이 있다고 가정해보자. 그럴경우 무언가의 필요성에 의해 2라는 인덱스가 추가가 되어야 할경우는 10의 인덱스가 2페이지로 들어가야하고 17은 3페이지가 생겨야 하는 상황이 발생한다. 이럴 경우의 상태 때문에 오히려 데이터의 삽입과 수정시에는 부하가 발생할 수 있는 것이다. &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: 'Nanum Gothic';&quot;&gt;넌클러스터드 인덱스 방식으로 검색을 하면 오래걸리는 이유가 예를 들어 홍길동을 찾고 싶은데 우리가 살고 있는 집주소만 알려주고 그 안에 4명이 살고 있으면 그 4명중에 홍길동이란 사람을 또 찾아야해서 그렇다. 즉 데이터를 2번 조회해야해서 오래걸리는 단점이 있다면, 클러스터드 인덱스랑 반대로 힙 방식으로 정리되기 때문에 빈공간에 데이터를 삽입하면 끝이어서 데이터 삽입이 훨씬 용이하다.&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: 'Nanum Gothic';&quot;&gt;커버링 인덱스 개념도 있는데 내용이 너무 길어지므로 더 공부하고 싶으면 찾아보면 될듯하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;뭐 간단하게 설명하면&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1769875318331&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT   원하는_컬럼 
FROM     테이블_이름 
WHERE    조회할_컬럼 = '데이터_값';&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>CS(컴퓨터과학)</category>
      <category>Computer Science</category>
      <category>CS</category>
      <category>cs기술면접</category>
      <category>기술면접</category>
      <category>컴퓨터과학</category>
      <author>담비12</author>
      <guid isPermaLink="true">https://dambi1224.tistory.com/122</guid>
      <comments>https://dambi1224.tistory.com/122#entry122comment</comments>
      <pubDate>Sun, 1 Feb 2026 19:39:16 +0900</pubDate>
    </item>
    <item>
      <title>[CS]2026.01.30 면접준비</title>
      <link>https://dambi1224.tistory.com/121</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;◆ String과 string의 차이점&lt;/b&gt;&lt;/span&gt;&lt;/h3&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: 'Nanum Gothic';&quot;&gt;&lt;b&gt;▶ C#&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt; String : .NET 프레임워크의 클래스이다. (System.String)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt;string&amp;nbsp;:&amp;nbsp;키워드.&amp;nbsp;컴파일&amp;nbsp;시&amp;nbsp;System.String으로&amp;nbsp;변환&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&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: 'Nanum Gothic';&quot;&gt;string (키워드): 변수를 선언하거나 타입을 지정할 때 사용한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;String (클래스): 클래스의 정적(static) 메서드를 호출할 때 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;string.Format()이라고&amp;nbsp;써도&amp;nbsp;아무&amp;nbsp;문제&amp;nbsp;없이&amp;nbsp;작동하지만,&amp;nbsp;String이라고&amp;nbsp;쓰면&amp;nbsp;클래스를&amp;nbsp;쓰는&amp;nbsp;코드로&amp;nbsp;보기가&amp;nbsp;더&amp;nbsp;쉬워진다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt; ▶&amp;nbsp;JAVA&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;String : 클래스만 존재&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;string&amp;nbsp;:&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;◆ &lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt;스프링&amp;nbsp;부트의&amp;nbsp;장점&lt;/span&gt; &lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;br /&gt;&lt;b&gt; ▶ 설정의 자동화 &lt;/b&gt;:&amp;nbsp;&amp;nbsp;XML 설정이나 자바 설정 파일 없이, 프로젝트에 추가된 라이브러리를 보고 스프링이 알아서 필요한 빈(Bean)들을 등록해 준다. (예: DB 라이브러리가 있으면 알아서 DataSource 설정) &lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;여담이지만&amp;nbsp;Spring&amp;nbsp;쓰다가&amp;nbsp;Spring&amp;nbsp;Boot&amp;nbsp;쓰면서&amp;nbsp;편함의&amp;nbsp;신세계를&amp;nbsp;볼정도로&amp;nbsp;진짜&amp;nbsp;추천한다.&amp;nbsp;하지만&amp;nbsp;큰&amp;nbsp;서비스는&amp;nbsp;사정상&amp;nbsp;쓰지못할테니&amp;nbsp;여러가지&amp;nbsp;상황들을&amp;nbsp;충분히&amp;nbsp;고려해야한다고&amp;nbsp;생각한다. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;▶ 내장 서버 &lt;/b&gt;:&amp;nbsp;별도의&amp;nbsp;외장&amp;nbsp;WAS(Tomcat&amp;nbsp;등)를&amp;nbsp;설치하고&amp;nbsp;설정할&amp;nbsp;필요가&amp;nbsp;없다.&amp;nbsp;프로젝트&amp;nbsp;자체에&amp;nbsp;서버가&amp;nbsp;내장되어&amp;nbsp;있어&amp;nbsp;main&amp;nbsp;메서드만&amp;nbsp;실행하면&amp;nbsp;바로&amp;nbsp;웹&amp;nbsp;서버가&amp;nbsp;뜬다. &lt;br /&gt;&lt;br /&gt;&lt;b&gt; ▶ 의존성 관리의 단순화 &lt;/b&gt;:&amp;nbsp;spring-boot-starter-web&amp;nbsp;하나만&amp;nbsp;추가하면&amp;nbsp;웹&amp;nbsp;개발에&amp;nbsp;필요한&amp;nbsp;수십&amp;nbsp;개의&amp;nbsp;라이브러리&amp;nbsp;조합을&amp;nbsp;버전&amp;nbsp;충돌&amp;nbsp;없이&amp;nbsp;한&amp;nbsp;번에&amp;nbsp;가져온다. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;▶ 운영 편의성 &lt;/b&gt;:&amp;nbsp;애플리케이션의&amp;nbsp;상태,&amp;nbsp;힙&amp;nbsp;덤프,&amp;nbsp;로그&amp;nbsp;레벨&amp;nbsp;변경&amp;nbsp;등을&amp;nbsp;모니터링할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;기능을&amp;nbsp;기본으로&amp;nbsp;제공하여&amp;nbsp;운영&amp;nbsp;단계에서&amp;nbsp;매우&amp;nbsp;유리하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;◆&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt;스프링 부트의 단점&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt; ▶ 내부&amp;nbsp;작동의&amp;nbsp;불투명성&amp;nbsp;&lt;/b&gt;:&amp;nbsp;너무&amp;nbsp;많은&amp;nbsp;것을&amp;nbsp;자동으로&amp;nbsp;해주다&amp;nbsp;보니,&amp;nbsp;정확한&amp;nbsp;상태를&amp;nbsp;파악하기&amp;nbsp;어렵다.&amp;nbsp;예를들어&amp;nbsp;이게&amp;nbsp;왜&amp;nbsp;실행되는지&amp;nbsp;왜&amp;nbsp;안되는지&amp;nbsp;여부파악이&amp;nbsp;힘든것이다.&amp;nbsp;내부&amp;nbsp;구조를&amp;nbsp;깊이&amp;nbsp;모르면&amp;nbsp;에러가&amp;nbsp;났을&amp;nbsp;때&amp;nbsp;디버깅이&amp;nbsp;매우&amp;nbsp;힘들다. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;▶ 무거운 애플리케이션 사이즈&amp;nbsp;&lt;/b&gt;:&amp;nbsp;사용하지&amp;nbsp;않는&amp;nbsp;라이브러리까지&amp;nbsp;'Starter'&amp;nbsp;묶음에&amp;nbsp;포함되어&amp;nbsp;배포&amp;nbsp;파일의&amp;nbsp;용량이&amp;nbsp;커진다.&amp;nbsp;이는&amp;nbsp;클라우드&amp;nbsp;환경에서&amp;nbsp;배포&amp;nbsp;속도에&amp;nbsp;영향을&amp;nbsp;줄&amp;nbsp;수&amp;nbsp;있다. &lt;br /&gt;&lt;br /&gt;&lt;b&gt; ▶ 설정의&amp;nbsp;복잡성&lt;/b&gt;&amp;nbsp;:&amp;nbsp;자동&amp;nbsp;설정을&amp;nbsp;커스터마이징(개별설정)하려고&amp;nbsp;하면,&amp;nbsp;스프링&amp;nbsp;부트&amp;nbsp;내부의&amp;nbsp;@Conditional&amp;nbsp;같은&amp;nbsp;복잡한&amp;nbsp;어노테이션&amp;nbsp;구조를&amp;nbsp;이해해야&amp;nbsp;하므로&amp;nbsp;공부량이&amp;nbsp;급격히&amp;nbsp;많아집니다. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;▶ 메모리 사용량&amp;nbsp;&lt;/b&gt;:&amp;nbsp;단순한&amp;nbsp;기능을&amp;nbsp;구현하더라도&amp;nbsp;스프링&amp;nbsp;프레임워크&amp;nbsp;자체의&amp;nbsp;무게&amp;nbsp;때문에&amp;nbsp;Node.js나&amp;nbsp;Go&amp;nbsp;같은&amp;nbsp;가벼운&amp;nbsp;런타임에&amp;nbsp;비해&amp;nbsp;메모리&amp;nbsp;점유율이&amp;nbsp;높다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt; &lt;br /&gt;&lt;br /&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;&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;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>CS(컴퓨터과학)</category>
      <category>CS</category>
      <category>기술면접</category>
      <category>면접준비</category>
      <category>스프링부트 단점</category>
      <category>스프링부트 장점</category>
      <category>스프링부트의 장단점</category>
      <category>컴퓨터과학</category>
      <author>담비12</author>
      <guid isPermaLink="true">https://dambi1224.tistory.com/121</guid>
      <comments>https://dambi1224.tistory.com/121#entry121comment</comments>
      <pubDate>Sat, 31 Jan 2026 00:53:28 +0900</pubDate>
    </item>
    <item>
      <title>[C#]OPC-UA 장비 없이 집에서 해보기 03</title>
      <link>https://dambi1224.tistory.com/120</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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이제 Visual Studio 2022를 키고 새프로젝트 만들기 클릭하기&lt;/span&gt;&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;1004&quot; data-origin-height=&quot;664&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DYhwx/dJMcadtLbDh/3hOzZevp7CAUlSCC7i4YK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DYhwx/dJMcadtLbDh/3hOzZevp7CAUlSCC7i4YK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DYhwx/dJMcadtLbDh/3hOzZevp7CAUlSCC7i4YK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDYhwx%2FdJMcadtLbDh%2F3hOzZevp7CAUlSCC7i4YK0%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;1004&quot; height=&quot;664&quot; data-origin-width=&quot;1004&quot; data-origin-height=&quot;664&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;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;그리고 콘솔앱 검색해서 아래의 이미지의 콘솔앱 누르고 다음!버튼 누르기&lt;/span&gt;&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;657&quot; data-origin-height=&quot;659&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BYmmp/dJMcagqwEqV/WG26HNy8tfwVOObcL02aT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BYmmp/dJMcagqwEqV/WG26HNy8tfwVOObcL02aT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BYmmp/dJMcagqwEqV/WG26HNy8tfwVOObcL02aT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBYmmp%2FdJMcagqwEqV%2FWG26HNy8tfwVOObcL02aT0%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;657&quot; height=&quot;659&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;659&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;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;프로젝트 이름이랑 솔루션이름 정해주면 됨&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;둘다 똑같이 해도되는데&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;솔루션이름은 이 프로그램을 만드는 총괄 이름으로 생각해주면 될것같고 그 안에 어떤화면이나 어떤기능들을 구성할지에 따른것들을 프로젝트 이름으로 보면 된다.&lt;/span&gt;&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;993&quot; data-origin-height=&quot;667&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfJwu9/dJMcahprKgD/lc69Me22LScDtLNr2uICkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfJwu9/dJMcahprKgD/lc69Me22LScDtLNr2uICkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfJwu9/dJMcahprKgD/lc69Me22LScDtLNr2uICkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfJwu9%2FdJMcahprKgD%2Flc69Me22LScDtLNr2uICkk%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;993&quot; height=&quot;667&quot; data-origin-width=&quot;993&quot; data-origin-height=&quot;667&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;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;그렇게 해서 만들기 하면 됨!&lt;/span&gt;&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;991&quot; data-origin-height=&quot;591&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lH4jE/dJMcafZsacs/wfKNsDMKoxLWr1RJDZJqgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lH4jE/dJMcafZsacs/wfKNsDMKoxLWr1RJDZJqgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lH4jE/dJMcafZsacs/wfKNsDMKoxLWr1RJDZJqgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlH4jE%2FdJMcafZsacs%2FwfKNsDMKoxLWr1RJDZJqgk%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;991&quot; height=&quot;591&quot; data-origin-width=&quot;991&quot; data-origin-height=&quot;591&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;그리고 그냥 코드를 작성하면 호환이 안되는 문제 때문에 설치해줘야할게 있는데&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;솔루션 탐색기 안의 내가 만든 프로젝트 이름을 보고 오른쪽마우스 버튼으로 클릭하여&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;NuGet 패키지 관리에 들어간다&lt;/span&gt;&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;372&quot; data-origin-height=&quot;832&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6eVbw/dJMb99LHFP7/TUHWFtxCK34hKp5cixBkB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6eVbw/dJMb99LHFP7/TUHWFtxCK34hKp5cixBkB1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6eVbw/dJMb99LHFP7/TUHWFtxCK34hKp5cixBkB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6eVbw%2FdJMb99LHFP7%2FTUHWFtxCK34hKp5cixBkB1%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;372&quot; height=&quot;832&quot; data-origin-width=&quot;372&quot; data-origin-height=&quot;832&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;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;그리고 찾아보기 탭에서 [OPCFoundation.NetStandard.Opc.Ua] 검색해서 다운로드 받기&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;1006&quot; data-origin-height=&quot;211&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kXRZt/dJMcafE9SFY/Mofqaneo8CXcID0tGvmuH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kXRZt/dJMcafE9SFY/Mofqaneo8CXcID0tGvmuH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kXRZt/dJMcafE9SFY/Mofqaneo8CXcID0tGvmuH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkXRZt%2FdJMcafE9SFY%2FMofqaneo8CXcID0tGvmuH1%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;1006&quot; height=&quot;211&quot; data-origin-width=&quot;1006&quot; data-origin-height=&quot;211&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;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;UaExpert 에서 Address Space 탭에서 DATA &amp;gt; Dynamic &amp;gt;DoubleValue 클릭을 하면&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;Attributes 탭에서 NodeId의 Value에서 본인의 저 값을 기억해둬야한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;본인은 ns=3;i=2813이다.&lt;/span&gt;&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;1369&quot; data-origin-height=&quot;668&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/K8CJv/dJMcafZsaIX/ugFDzMVf4uJkURnmZvPu1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/K8CJv/dJMcafZsaIX/ugFDzMVf4uJkURnmZvPu1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/K8CJv/dJMcafZsaIX/ugFDzMVf4uJkURnmZvPu1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FK8CJv%2FdJMcafZsaIX%2FugFDzMVf4uJkURnmZvPu1k%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;1369&quot; height=&quot;668&quot; data-origin-width=&quot;1369&quot; data-origin-height=&quot;668&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;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;그리고 내가 만든 프로젝트에다가 program.cs에 있던 코드 다 지우고 코드를 작성한다!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;아래 코드에 보면 주석에 별표가있는데 NodeId 꼭 본인것으로 바꿔서 작성한다!&lt;/span&gt;&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;269&quot; data-origin-height=&quot;97&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dbCn9u/dJMb99ZeG5W/WUZfQvZsMazP0H7oB7Kl71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dbCn9u/dJMb99ZeG5W/WUZfQvZsMazP0H7oB7Kl71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dbCn9u/dJMb99ZeG5W/WUZfQvZsMazP0H7oB7Kl71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdbCn9u%2FdJMb99ZeG5W%2FWUZfQvZsMazP0H7oB7Kl71%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;269&quot; height=&quot;97&quot; data-origin-width=&quot;269&quot; data-origin-height=&quot;97&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;pre id=&quot;code_1765888417169&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using Opc.Ua;
using Opc.Ua.Client;
using System;
using System.Linq;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        Console.WriteLine(&quot;1. OPC UA 클라이언트 시작...&quot;);

        // 1. 설정 만들기
        var config = new ApplicationConfiguration()
        {
            ApplicationName = &quot;MyClient&quot;,
            ApplicationUri = Utils.Format(@&quot;urn:{0}:MyClient&quot;, System.Net.Dns.GetHostName()),
            ApplicationType = ApplicationType.Client,
            SecurityConfiguration = new SecurityConfiguration
            {
                ApplicationCertificate = new CertificateIdentifier { StoreType = @&quot;Directory&quot;, StorePath = @&quot;%CommonApplicationData%\OPC Foundation\CertificateStores\MachineDefault&quot;, SubjectName = &quot;MyClient&quot; },
                TrustedIssuerCertificates = new CertificateTrustList { StoreType = @&quot;Directory&quot;, StorePath = @&quot;%CommonApplicationData%\OPC Foundation\CertificateStores\UA Certificate Authorities&quot; },
                TrustedPeerCertificates = new CertificateTrustList { StoreType = @&quot;Directory&quot;, StorePath = @&quot;%CommonApplicationData%\OPC Foundation\CertificateStores\UA Applications&quot; },
                RejectedCertificateStore = new CertificateTrustList { StoreType = @&quot;Directory&quot;, StorePath = @&quot;%CommonApplicationData%\OPC Foundation\CertificateStores\RejectedCertificates&quot; },
                AutoAcceptUntrustedCertificates = true,
                AddAppCertToTrustedStore = true
            },
            TransportConfigurations = new TransportConfigurationCollection(),
            TransportQuotas = new TransportQuotas { OperationTimeout = 15000 },
            ClientConfiguration = new ClientConfiguration { DefaultSessionTimeout = 60000 }
        };

        await config.ValidateAsync(ApplicationType.Client);

        if (config.SecurityConfiguration.AutoAcceptUntrustedCertificates)
        {
            config.CertificateValidator.CertificateValidation += (s, e) =&amp;gt; { e.Accept = (e.Error.StatusCode == StatusCodes.BadCertificateUntrusted); };
        }

        // 2. 서버 주소
        string serverUrl = &quot;opc.tcp://localhost:62541/Quickstarts/ReferenceServer&quot;;
        Console.WriteLine($&quot;2. 서버({serverUrl}) 찾는 중...&quot;);

        try
        {
            EndpointDescription endpointDescription = null;
            var uri = new Uri(serverUrl);

            using (var discoveryClient = DiscoveryClient.Create(uri))
            {
                var endpoints = await discoveryClient.GetEndpointsAsync(null);
                endpointDescription = endpoints.FirstOrDefault(e =&amp;gt; e.SecurityMode == MessageSecurityMode.None &amp;amp;&amp;amp; e.TransportProfileUri == Profiles.UaTcpTransport);
            }

            if (endpointDescription == null)
            {
                Console.WriteLine(&quot;오류: '보안 없음(None)' 접속 모드를 찾을 수 없습니다.&quot;);
                return;
            }

            var endpointConfiguration = EndpointConfiguration.Create(config);
            var endpoint = new ConfiguredEndpoint(null, endpointDescription, endpointConfiguration);

            Console.WriteLine(&quot;3. 세션 생성 중...&quot;);

            var sessionTask = Session.Create(config, endpoint, false, &quot;MySession&quot;, 60000, new UserIdentity(new AnonymousIdentityToken()), null);
            using (var session = await sessionTask)
            {
                Console.WriteLine(&quot;4. 연결 성공! 데이터 읽는 중...&quot;);

                Console.WriteLine(&quot;------------------------------------------------&quot;);
                Console.WriteLine(&quot;ESC 키를 누르면 종료합니다.&quot;);
                Console.WriteLine(&quot;------------------------------------------------&quot;);

                // ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
                // 값을 읽어올 주소 (NodeId)
                // 본인의 Value값으로 꼭 넣기!!!!!!!!
                // ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
                NodeId nodeId = new NodeId(&quot;ns=3;i=2813&quot;); 

                // 무한 루프
                while (true)
                {
                    // 키보드 입력 확인 (ESC 누르면 탈출)
                    if (Console.KeyAvailable &amp;amp;&amp;amp; Console.ReadKey(true).Key == ConsoleKey.Escape) break;

                    // 데이터 읽기
                    DataValue value = await session.ReadValueAsync(nodeId);

                    // 화면 출력
                    Console.WriteLine($&quot;[{DateTime.Now.ToLongTimeString()}] 현재 값: {value.Value}&quot;);

                    // 1초 대기
                    await Task.Delay(1000);
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(&quot;오류 발생 ㅠㅠ : &quot; + ex.Message);
            Console.WriteLine(ex.StackTrace);
        }

        Console.WriteLine(&quot;종료되었습니다. 엔터를 누르세요.&quot;);
        Console.ReadLine();
    }
}&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;font-family: 'Nanum Gothic';&quot;&gt;그리고 F5누르면 실행되서 엄청 멋진 성과를 볼 수 있음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&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;669&quot; data-origin-height=&quot;621&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tZtip/dJMcai9FDNR/nhl7ahTPEp5spcaeHPMN6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tZtip/dJMcai9FDNR/nhl7ahTPEp5spcaeHPMN6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tZtip/dJMcai9FDNR/nhl7ahTPEp5spcaeHPMN6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtZtip%2FdJMcai9FDNR%2Fnhl7ahTPEp5spcaeHPMN6k%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;669&quot; height=&quot;621&quot; data-origin-width=&quot;669&quot; data-origin-height=&quot;621&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;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이제 이 코드 하나하나를 해석해보자!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;왜냐하면 난 C#을 하나도 모르니까!&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: 'Nanum Gothic';&quot;&gt;일단 내일 출근해야하니까 오늘도 여기까지!!&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&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;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;■ 앞으로 해야할 것&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1. WPF로 바로 가기&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;- 검정색 콘솔창을 보지않고 윈도우 프로그램을 만들어서 예쁘게 볼 수 있음(프론트 화면구성)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;2. '쓰기(Write)' 기능 배우기&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;- 현재는 서버의 값을 읽어오는 것인데 C#에서 숫자를 쏴서 서버의 값을 바꿔보기&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;3. '구독(Subscription)' 방식 배우기&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;- &lt;span style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot;&gt;while(true) 무한반복은 공부할때 쓰는 용도. 실무에선 &lt;/span&gt;&lt;b&gt;&quot;값이 변할 때만 알려줘!&quot;&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot;&gt; 하는 방식을 사용. &quot;저 폴링(Polling) 말고 섭스크립션(Subscription) 쓸 줄 압니다&quot; 라는 말을 하면 좋음!!&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;</description>
      <category>언어&amp;amp;프레임워크/C#</category>
      <category>OPC-UA</category>
      <category>통신프로토콜</category>
      <author>담비12</author>
      <guid isPermaLink="true">https://dambi1224.tistory.com/120</guid>
      <comments>https://dambi1224.tistory.com/120#entry120comment</comments>
      <pubDate>Tue, 16 Dec 2025 22:11:13 +0900</pubDate>
    </item>
    <item>
      <title>[C#]OPC-UA 장비 없이 집에서 해보기 02</title>
      <link>https://dambi1224.tistory.com/119</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&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: 'Nanum Gothic';&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: 'Nanum Gothic';&quot;&gt;&lt;a href=&quot;https://www.unified-automation.com/downloads/opc-ua-clients.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.unified-automation.com/downloads/opc-ua-clients.html&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1765369976476&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;OPC UA Clients&amp;nbsp;-&amp;nbsp;Unified Automation&quot; data-og-description=&quot;UaExpert is a full-featured OPC UA Client which is capable of several OPC UA Profiles and features.&quot; data-og-host=&quot;www.unified-automation.com&quot; data-og-source-url=&quot;https://www.unified-automation.com/downloads/opc-ua-clients.html&quot; data-og-url=&quot;https://www.unified-automation.com/downloads/opc-ua-clients.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.unified-automation.com/downloads/opc-ua-clients.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.unified-automation.com/downloads/opc-ua-clients.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;OPC UA Clients&amp;nbsp;-&amp;nbsp;Unified Automation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;UaExpert is a full-featured OPC UA Client which is capable of several OPC UA Profiles and features.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.unified-automation.com&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: 'Nanum Gothic';&quot;&gt;회원가입 후 로그인하시면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;어려우시면 다들 크롬으로 구글번역 쓰시면 편한거 아시죠?!&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;365&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6WSOY/dJMcah30gYg/YOV2oCvpk31P10oRIvClxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6WSOY/dJMcah30gYg/YOV2oCvpk31P10oRIvClxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6WSOY/dJMcah30gYg/YOV2oCvpk31P10oRIvClxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6WSOY%2FdJMcah30gYg%2FYOV2oCvpk31P10oRIvClxK%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;768&quot; height=&quot;365&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;365&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;819&quot; data-origin-height=&quot;550&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DS5zn/dJMcagquwxr/oIFOCzFYUSVePmNZjDzAA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DS5zn/dJMcagquwxr/oIFOCzFYUSVePmNZjDzAA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DS5zn/dJMcagquwxr/oIFOCzFYUSVePmNZjDzAA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDS5zn%2FdJMcagquwxr%2FoIFOCzFYUSVePmNZjDzAA0%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;819&quot; height=&quot;550&quot; data-origin-width=&quot;819&quot; data-origin-height=&quot;550&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1066&quot; data-origin-height=&quot;442&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCyxmF/dJMcabvXcmU/jZRfwKmY3j0KEyjtfTxb9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCyxmF/dJMcabvXcmU/jZRfwKmY3j0KEyjtfTxb9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCyxmF/dJMcabvXcmU/jZRfwKmY3j0KEyjtfTxb9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCyxmF%2FdJMcabvXcmU%2FjZRfwKmY3j0KEyjtfTxb9K%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;1066&quot; height=&quot;442&quot; data-origin-width=&quot;1066&quot; data-origin-height=&quot;442&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;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이렇게 다운 다 받고 압축까지 풀어서 아래사진에 있는 msi파일을 더블클릭!&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;305&quot; data-origin-height=&quot;131&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tI7iK/dJMcabJu0f6/usn2iM76TJKPpOj2S2h9MK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tI7iK/dJMcabJu0f6/usn2iM76TJKPpOj2S2h9MK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tI7iK/dJMcabJu0f6/usn2iM76TJKPpOj2S2h9MK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtI7iK%2FdJMcabJu0f6%2Fusn2iM76TJKPpOj2S2h9MK%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;305&quot; height=&quot;131&quot; data-origin-width=&quot;305&quot; data-origin-height=&quot;131&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;489&quot; data-origin-height=&quot;379&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKxVYc/dJMcacuRIeI/i9uokGn0xGs7riwNCv0iIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKxVYc/dJMcacuRIeI/i9uokGn0xGs7riwNCv0iIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKxVYc/dJMcacuRIeI/i9uokGn0xGs7riwNCv0iIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKxVYc%2FdJMcacuRIeI%2Fi9uokGn0xGs7riwNCv0iIk%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;489&quot; height=&quot;379&quot; data-origin-width=&quot;489&quot; data-origin-height=&quot;379&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;491&quot; data-origin-height=&quot;381&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HcLBA/dJMcadUMQhM/Ser0iKclynIA3xcACNS8NK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HcLBA/dJMcadUMQhM/Ser0iKclynIA3xcACNS8NK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HcLBA/dJMcadUMQhM/Ser0iKclynIA3xcACNS8NK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHcLBA%2FdJMcadUMQhM%2FSer0iKclynIA3xcACNS8NK%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;491&quot; height=&quot;381&quot; data-origin-width=&quot;491&quot; data-origin-height=&quot;381&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;490&quot; data-origin-height=&quot;384&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UyyQt/dJMcahJIqxB/KQKQvqwPQZo7AKMzdwX4m1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UyyQt/dJMcahJIqxB/KQKQvqwPQZo7AKMzdwX4m1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UyyQt/dJMcahJIqxB/KQKQvqwPQZo7AKMzdwX4m1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUyyQt%2FdJMcahJIqxB%2FKQKQvqwPQZo7AKMzdwX4m1%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;490&quot; height=&quot;384&quot; data-origin-width=&quot;490&quot; data-origin-height=&quot;384&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;483&quot; data-origin-height=&quot;385&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciUefo/dJMcagjIOOm/6Kx7UADBSkCZRIq1G5T1kk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciUefo/dJMcagjIOOm/6Kx7UADBSkCZRIq1G5T1kk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciUefo/dJMcagjIOOm/6Kx7UADBSkCZRIq1G5T1kk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciUefo%2FdJMcagjIOOm%2F6Kx7UADBSkCZRIq1G5T1kk%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;385&quot; data-origin-width=&quot;483&quot; data-origin-height=&quot;385&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;&lt;span style=&quot;font-family: 'Nanum Gothic';&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;91&quot; data-origin-height=&quot;83&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oKSVM/dJMcaiaL5A0/htF7KVO4a1sGlKreLDTo7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oKSVM/dJMcaiaL5A0/htF7KVO4a1sGlKreLDTo7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oKSVM/dJMcaiaL5A0/htF7KVO4a1sGlKreLDTo7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoKSVM%2FdJMcaiaL5A0%2FhtF7KVO4a1sGlKreLDTo7K%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;91&quot; height=&quot;83&quot; data-origin-width=&quot;91&quot; data-origin-height=&quot;83&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;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;실행하면 아래 이미지처럼 뜰건데 그냥 알림일뿐이니 당황하지말고 OK!&lt;/span&gt;&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;483&quot; data-origin-height=&quot;211&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Fhwrj/dJMb995YUG7/zcAun3kGS3DmP48RGzD2U0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Fhwrj/dJMb995YUG7/zcAun3kGS3DmP48RGzD2U0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Fhwrj/dJMb995YUG7/zcAun3kGS3DmP48RGzD2U0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFhwrj%2FdJMb995YUG7%2FzcAun3kGS3DmP48RGzD2U0%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;211&quot; data-origin-width=&quot;483&quot; data-origin-height=&quot;211&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;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;그리고 Organization에 test나 study입력! 나는 study로 했음.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;그리고 오른쪽 아래에 있는 OK버튼 클&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;607&quot; data-origin-height=&quot;719&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ou4SR/dJMcagRyAx9/l1q3Fpkny5wadUhVVhXtg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ou4SR/dJMcagRyAx9/l1q3Fpkny5wadUhVVhXtg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ou4SR/dJMcagRyAx9/l1q3Fpkny5wadUhVVhXtg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fou4SR%2FdJMcagRyAx9%2Fl1q3Fpkny5wadUhVVhXtg1%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;607&quot; height=&quot;719&quot; data-origin-width=&quot;607&quot; data-origin-height=&quot;719&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;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;자동업데이트 할 것이냐 묻는거고, 사용자정보는 수집하지 않는다고 함.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;그래서 그냥 OK 눌러도됨&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;477&quot; data-origin-height=&quot;229&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2nEtl/dJMcai9DrxR/KoUApwyXGh9CBxgc95l8X0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2nEtl/dJMcai9DrxR/KoUApwyXGh9CBxgc95l8X0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2nEtl/dJMcai9DrxR/KoUApwyXGh9CBxgc95l8X0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2nEtl%2FdJMcai9DrxR%2FKoUApwyXGh9CBxgc95l8X0%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;477&quot; height=&quot;229&quot; data-origin-width=&quot;477&quot; data-origin-height=&quot;229&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://dambi1224.tistory.com/118&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://dambi1224.tistory.com/118&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1765370937834&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[C#]OPC-UA 장비 없이 집에서 해보기 01&quot; data-og-description=&quot;오늘은 간단하게 환경구성부터 해볼 예정! 1. 가상 서버 설치(Prosys OPC UA Simulation Server) - 내PC를 공장설비로 만들어주는 프로그램을 사용 https://prosysopc.com/products/opc-ua-simulation-server/ OPC UA Simulation S&quot; data-og-host=&quot;dambi1224.tistory.com&quot; data-og-source-url=&quot;https://dambi1224.tistory.com/118&quot; data-og-url=&quot;https://dambi1224.tistory.com/118&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/9LUUN/hyZOGARsKn/TDdG5GWos2xmv8qmPqXGZK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/b269ur/hyZOG8H4Q3/Fa3ULCEYRkMzXpTGXMszHK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/D3bXQ/hyZOCLZtCY/OCDqlLSnBuk89muvsKrr10/img.png?width=1200&amp;amp;height=726&amp;amp;face=0_0_1200_726&quot;&gt;&lt;a href=&quot;https://dambi1224.tistory.com/118&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dambi1224.tistory.com/118&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/9LUUN/hyZOGARsKn/TDdG5GWos2xmv8qmPqXGZK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/b269ur/hyZOG8H4Q3/Fa3ULCEYRkMzXpTGXMszHK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/D3bXQ/hyZOCLZtCY/OCDqlLSnBuk89muvsKrr10/img.png?width=1200&amp;amp;height=726&amp;amp;face=0_0_1200_726');&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;[C#]OPC-UA 장비 없이 집에서 해보기 01&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;오늘은 간단하게 환경구성부터 해볼 예정! 1. 가상 서버 설치(Prosys OPC UA Simulation Server) - 내PC를 공장설비로 만들어주는 프로그램을 사용 https://prosysopc.com/products/opc-ua-simulation-server/ OPC UA Simulation S&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dambi1224.tistory.com&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;&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;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;OPC-UA 장비 없이 집에서 해보기 01&amp;nbsp;에서 F5로 프로젝트 실행하면 아래와같은 cmd창이 뜨는데 저기서 아래에서 세번째줄 opc.tcp://???92541/Quickstarts/ReferenceServer&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;복사해서 입력해주면 됨&lt;/span&gt;&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;612&quot; data-origin-height=&quot;252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wPvuD/dJMcaajvx8T/XVKptPF5DqgPCC32ubMO50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wPvuD/dJMcaajvx8T/XVKptPF5DqgPCC32ubMO50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wPvuD/dJMcaajvx8T/XVKptPF5DqgPCC32ubMO50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwPvuD%2FdJMcaajvx8T%2FXVKptPF5DqgPCC32ubMO50%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;612&quot; height=&quot;252&quot; data-origin-width=&quot;612&quot; data-origin-height=&quot;252&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;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;+버튼 누르고&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;Custom Discovery 아래에 있는 Double click to Add Server를 더블클릭해서 위에 복사한 주소를 입력해주기!&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;857&quot; data-origin-height=&quot;496&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ejcBs6/dJMcabvXcwE/mNvGqcaiuB9joKEFP1yR1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ejcBs6/dJMcabvXcwE/mNvGqcaiuB9joKEFP1yR1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ejcBs6/dJMcabvXcwE/mNvGqcaiuB9joKEFP1yR1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FejcBs6%2FdJMcabvXcwE%2FmNvGqcaiuB9joKEFP1yR1K%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;857&quot; height=&quot;496&quot; data-origin-width=&quot;857&quot; data-origin-height=&quot;496&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;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;그다음 아래 이미지처럼 None-None 클릭하고 OK!&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: 'Nanum Gothic';&quot;&gt;보안설정없이 로그인하겠다는 의미임! 일단 공부니까 이렇게 해보자!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;실제 업계에서는 [Basic256Sha256 - Sign &amp;amp; Encrypt]이걸로 주로 쓴다고 함.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;근데 나도 공부중이니 정확한건 아니니까 참고용으로만 알고있으면 좋을것 같다!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;Anonymous 익명으로 접속!&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: 'Nanum Gothic';&quot;&gt;실무에선 &lt;span style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot;&gt;username이나 Certificate씀&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;username은 말그대로 아이디 비밀번호 느낌이고,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;Certificate는 인증서여서 디지털 인증서를 만들어서 등록함.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;&quot;&gt;C#코드를 짤때는 인증서 파일을 자동으로 만들어 경로를 설정해줌.&lt;/span&gt;&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;623&quot; data-origin-height=&quot;612&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJUMIA/dJMcabvXcEz/EqMsSpCKnxMyhwxlSmhb7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJUMIA/dJMcabvXcEz/EqMsSpCKnxMyhwxlSmhb7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJUMIA/dJMcabvXcEz/EqMsSpCKnxMyhwxlSmhb7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJUMIA%2FdJMcabvXcEz%2FEqMsSpCKnxMyhwxlSmhb7K%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;623&quot; height=&quot;612&quot; data-origin-width=&quot;623&quot; data-origin-height=&quot;612&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;&lt;span style=&quot;font-family: 'Nanum Gothic';&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: 'Nanum Gothic';&quot;&gt;여담이지만 .net10다운로드 받았다가 다 오류생겨서 .net10삭제하고 다시 시작했음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;어려운 과정이지만 매우 재밌음!!&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>언어&amp;amp;프레임워크/C#</category>
      <category>OPC-UA</category>
      <category>UaExpert download</category>
      <category>UaExpert다운로드</category>
      <author>담비12</author>
      <guid isPermaLink="true">https://dambi1224.tistory.com/119</guid>
      <comments>https://dambi1224.tistory.com/119#entry119comment</comments>
      <pubDate>Wed, 10 Dec 2025 22:03:01 +0900</pubDate>
    </item>
    <item>
      <title>[C#]OPC-UA 장비 없이 집에서 해보기 01</title>
      <link>https://dambi1224.tistory.com/118</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&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: 'Nanum Gothic';&quot;&gt;1. 가상&amp;nbsp;서버&amp;nbsp;설치(Prosys&amp;nbsp;OPC&amp;nbsp;UA&amp;nbsp;Simulation&amp;nbsp;Server)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;- 내PC를 공장설비로 만들어주는 프로그램을 사용&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: 'Nanum Gothic';&quot;&gt;&lt;a href=&quot;https://prosysopc.com/products/opc-ua-simulation-server/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://prosysopc.com/products/opc-ua-simulation-server/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1765278551181&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;OPC UA Simulation Server - Prosys OPC&quot; data-og-description=&quot;Optimize your testing with the OPC UA Simulation Server. Simulate data models, ensure compliance, and enhance learning with this versatile, cross-platform tool.&quot; data-og-host=&quot;prosysopc.com&quot; data-og-source-url=&quot;https://prosysopc.com/products/opc-ua-simulation-server/&quot; data-og-url=&quot;https://prosysopc.com/products/opc-ua-simulation-server/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://prosysopc.com/products/opc-ua-simulation-server/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://prosysopc.com/products/opc-ua-simulation-server/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;OPC UA Simulation Server - Prosys OPC&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Optimize your testing with the OPC UA Simulation Server. Simulate data models, ensure compliance, and enhance learning with this versatile, cross-platform tool.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;prosysopc.com&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: 'Nanum Gothic';&quot;&gt;아래 이미지에 있는 [Get Free Download] 진행하기!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;Country는 Korea South로 되어있으니 영어 순서대로 찾으면 된다.&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;1323&quot; data-origin-height=&quot;547&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baSVy6/dJMcafkOufB/TJpobkuwLG8ePxdSB50tLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baSVy6/dJMcafkOufB/TJpobkuwLG8ePxdSB50tLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baSVy6/dJMcafkOufB/TJpobkuwLG8ePxdSB50tLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaSVy6%2FdJMcafkOufB%2FTJpobkuwLG8ePxdSB50tLK%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;1323&quot; height=&quot;547&quot; data-origin-width=&quot;1323&quot; data-origin-height=&quot;547&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;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;그러면 이런거 회원가입뜰텐데 잘 가입해서 다운받으면 됨&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;gt;&amp;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;1200&quot; data-origin-height=&quot;726&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d74cyB/dJMcabpaL5t/lBLKQ0QYgVcF3hy06ibVeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d74cyB/dJMcabpaL5t/lBLKQ0QYgVcF3hy06ibVeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d74cyB/dJMcabpaL5t/lBLKQ0QYgVcF3hy06ibVeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd74cyB%2FdJMcabpaL5t%2FlBLKQ0QYgVcF3hy06ibVeK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1200&quot; height=&quot;726&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;726&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;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;a href=&quot;https://github.com/OPCFoundation/UA-.NETStandard&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/OPCFoundation/UA-.NETStandard&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1765279111166&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - OPCFoundation/UA-.NETStandard: OPC Unified Architecture .NET Standard&quot; data-og-description=&quot;OPC Unified Architecture .NET Standard. Contribute to OPCFoundation/UA-.NETStandard development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/OPCFoundation/UA-.NETStandard&quot; data-og-url=&quot;https://github.com/OPCFoundation/UA-.NETStandard&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bzskKo/hyZPbtAloq/mYDIbWQCcXnMiWFqFWzsn1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/cO8MIf/hyZPi0x2o5/UfK8d0f0rid2ybEgQTql30/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/OPCFoundation/UA-.NETStandard&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/OPCFoundation/UA-.NETStandard&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bzskKo/hyZPbtAloq/mYDIbWQCcXnMiWFqFWzsn1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/cO8MIf/hyZPi0x2o5/UfK8d0f0rid2ybEgQTql30/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;GitHub - OPCFoundation/UA-.NETStandard: OPC Unified Architecture .NET Standard&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;OPC Unified Architecture .NET Standard. Contribute to OPCFoundation/UA-.NETStandard development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&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: 'Nanum Gothic';&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;958&quot; data-origin-height=&quot;487&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WU3jN/dJMcahiCW64/wqVpoG3x3n1REmhKW1WKm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WU3jN/dJMcahiCW64/wqVpoG3x3n1REmhKW1WKm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WU3jN/dJMcahiCW64/wqVpoG3x3n1REmhKW1WKm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWU3jN%2FdJMcahiCW64%2FwqVpoG3x3n1REmhKW1WKm1%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;958&quot; height=&quot;487&quot; data-origin-width=&quot;958&quot; data-origin-height=&quot;487&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;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;그리고 압축을 푼 다음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;Visual Studio 2022를 접속(없으면 다운로드해주세요) 후 프로젝트 또는 솔루션 열기를 클릭!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;(참고로 .Net이 없으면 다운로드 필요 &amp;gt; .Net10으로 해야함 / .Net10 다운이 어려우면 다른방법도 있으니 아래로 스크롤 내려보시길)&lt;/span&gt;&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;960&quot; data-origin-height=&quot;486&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vsIRv/dJMb99ZcbUe/WkJ6xjGRSVTuNRgaAYs3FK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vsIRv/dJMb99ZcbUe/WkJ6xjGRSVTuNRgaAYs3FK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vsIRv/dJMb99ZcbUe/WkJ6xjGRSVTuNRgaAYs3FK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvsIRv%2FdJMb99ZcbUe%2FWkJ6xjGRSVTuNRgaAYs3FK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;960&quot; height=&quot;486&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;486&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;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;압축해제한 폴더로 접속해서 [UA Reference.sln]을 클릭하여 열기!&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;684&quot; data-origin-height=&quot;377&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dprJFz/dJMcafkOuAZ/nCSLQB8FOib5vG0g4FKkU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dprJFz/dJMcafkOuAZ/nCSLQB8FOib5vG0g4FKkU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dprJFz/dJMcafkOuAZ/nCSLQB8FOib5vG0g4FKkU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdprJFz%2FdJMcafkOuAZ%2FnCSLQB8FOib5vG0g4FKkU1%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;684&quot; height=&quot;377&quot; data-origin-width=&quot;684&quot; data-origin-height=&quot;377&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;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;솔루션탐색기 열기~!&lt;/span&gt;&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;1102&quot; data-origin-height=&quot;480&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGvGAs/dJMcacBC4CM/hz8XccrIppmaNZJscnTKv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGvGAs/dJMcacBC4CM/hz8XccrIppmaNZJscnTKv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGvGAs/dJMcacBC4CM/hz8XccrIppmaNZJscnTKv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGvGAs%2FdJMcacBC4CM%2Fhz8XccrIppmaNZJscnTKv1%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;1102&quot; height=&quot;480&quot; data-origin-width=&quot;1102&quot; data-origin-height=&quot;480&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;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;Applications폴더에 ConsoleReferenceServer&amp;nbsp;이친구를 이제 오른쪽 마우스 눌러서! [프로젝트 다시 로드 눌러주기]&lt;/span&gt;&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;367&quot; data-origin-height=&quot;435&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9RYkv/dJMb99SrgcR/VNds1qpJ6fKjnC7opsqwh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9RYkv/dJMb99SrgcR/VNds1qpJ6fKjnC7opsqwh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9RYkv/dJMb99SrgcR/VNds1qpJ6fKjnC7opsqwh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9RYkv%2FdJMb99SrgcR%2FVNds1qpJ6fKjnC7opsqwh0%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;367&quot; height=&quot;435&quot; data-origin-width=&quot;367&quot; data-origin-height=&quot;435&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;351&quot; data-origin-height=&quot;272&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cT7ppv/dJMcahCVnl9/ZVd4ZDN12aRyW3isDKFaU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cT7ppv/dJMcahCVnl9/ZVd4ZDN12aRyW3isDKFaU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cT7ppv/dJMcahCVnl9/ZVd4ZDN12aRyW3isDKFaU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcT7ppv%2FdJMcahCVnl9%2FZVd4ZDN12aRyW3isDKFaU0%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;351&quot; height=&quot;272&quot; data-origin-width=&quot;351&quot; data-origin-height=&quot;272&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;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;그러면 로드가 되었고 다시 똑같이 오른쪽 마우스버튼 클릭하면 [시작 프로젝트로 설정] 후에 [F5]누르면 됨&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;F5는 디버깅시작임!&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;348&quot; data-origin-height=&quot;483&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqJH53/dJMcacn5zrl/dIKP0UeHMCPcIlHf9WF48K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqJH53/dJMcacn5zrl/dIKP0UeHMCPcIlHf9WF48K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqJH53/dJMcacn5zrl/dIKP0UeHMCPcIlHf9WF48K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqJH53%2FdJMcacn5zrl%2FdIKP0UeHMCPcIlHf9WF48K%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;348&quot; height=&quot;483&quot; data-origin-width=&quot;348&quot; data-origin-height=&quot;483&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;슬프게도 .Net10이 아니어서 안댐..그래서 그냥 릴리즈에서 다른 버전 다운받아서 사용함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;분명 다운 받은것 같은데도 안되서 포기하고 다른 버전으로 슝슝~&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;a href=&quot;https://github.com/OPCFoundation/UA-.NETStandard/releases&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/OPCFoundation/UA-.NETStandard/releases&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1765283963841&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;Releases &amp;middot; OPCFoundation/UA-.NETStandard&quot; data-og-description=&quot;OPC Unified Architecture .NET Standard. Contribute to OPCFoundation/UA-.NETStandard development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/OPCFoundation/UA-.NETStandard/releases&quot; data-og-url=&quot;https://github.com/OPCFoundation/UA-.NETStandard/releases&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/qdfxf/hyZPaBtkcx/LQO1Mo8kP0syqSJUs48kA0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/ftUEc/hyZO9o1S7x/a1p3VmLdIqkADTGnjNmUo0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/OPCFoundation/UA-.NETStandard/releases&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/OPCFoundation/UA-.NETStandard/releases&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/qdfxf/hyZPaBtkcx/LQO1Mo8kP0syqSJUs48kA0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/ftUEc/hyZO9o1S7x/a1p3VmLdIqkADTGnjNmUo0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;Releases &amp;middot; OPCFoundation/UA-.NETStandard&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;OPC Unified Architecture .NET Standard. Contribute to OPCFoundation/UA-.NETStandard development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&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: 'Nanum Gothic';&quot;&gt;해당 링크 들어가서 아래로 스크롤 하다보면 1.5.377.22 버전 있음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;거기서 Source code.zip 다운로드 하면 됨&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: 'Nanum Gothic';&quot;&gt;그래서 암튼 다운받은 후&amp;nbsp;&amp;nbsp; &lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&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;&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;1143&quot; data-origin-height=&quot;848&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qqtwC/dJMcabJuCcC/aIyXibJgetKfqjvtjt1DKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qqtwC/dJMcabJuCcC/aIyXibJgetKfqjvtjt1DKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qqtwC/dJMcabJuCcC/aIyXibJgetKfqjvtjt1DKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqqtwC%2FdJMcabJuCcC%2FaIyXibJgetKfqjvtjt1DKK%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;1143&quot; height=&quot;848&quot; data-origin-width=&quot;1143&quot; data-origin-height=&quot;848&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt;오늘은 여기까지!!&lt;/span&gt;&lt;/p&gt;</description>
      <category>언어&amp;amp;프레임워크/C#</category>
      <category>OPC-UA Download</category>
      <category>opc-ua 다운로드</category>
      <category>prosys opc-ua</category>
      <category>Prosys Opc-ua 다운로드</category>
      <author>담비12</author>
      <guid isPermaLink="true">https://dambi1224.tistory.com/118</guid>
      <comments>https://dambi1224.tistory.com/118#entry118comment</comments>
      <pubDate>Tue, 9 Dec 2025 21:53:35 +0900</pubDate>
    </item>
    <item>
      <title>자바(Java)란 무엇인가?</title>
      <link>https://dambi1224.tistory.com/116</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;자바는 객체지향프로그래밍 언어이다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;자바의 핵심 슬로건은 &quot;한 번 작성하면, 어디서든 실행된다&quot;(Write Once, Rnu Anywhere)이다.&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;font-family: 'Nanum Gothic';&quot;&gt;1. 운영 체제에 독립적(플랫폼 독립성)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;자바는 컴파일러가 소스코드(.java 확장자 파일)를 특정 운영체제나 하드웨어의 기계어가 아닌, 바이트 코드(.class 확장자 파일)라는 중간 언어로 변환한다. 이 바이트 코드는 각 운영체제에(OS) 맞게 설치된 JVM에 의해 해석되고 실행된다. JVM은 하드웨어와 운영체제에 맞는 가상의 컴퓨터 역할을 한다. 개발자는 코드를 한번만 작성하면 Windows, Linux, macOS 등 어떤 환경에서도 동일하게 실행할 수 있다.&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: 'Nanum Gothic';&quot;&gt;※ JVM(Java Virtual Machine) :&amp;nbsp; JVM은 자바 바이트 코드를 해당 운영 체제(OS)가 이해할 수 있는 기계어로 변환하고 실행하는 소프트웨어 기반의 가상 컴퓨터&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;font-family: 'Nanum Gothic';&quot;&gt;2. 객체 지향 언어&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&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: 'Nanum Gothic';&quot;&gt;①&amp;nbsp; 상속은 이미 정의된 클래스의 속성(변수)과 기능(메서드)을 새로운 클래스가 물려받아 재사용할 수 있도록 하는 개념이다.&lt;/span&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1764246854626&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 부모 클래스 (Superclass)
class Animal {
    String name;
    
    public Animal(String name) {
        this.name = name;
    }
    
    public void eat() {
        System.out.println(name + &quot;가 먹이를 먹습니다.&quot;);
    }
}

// 자식 클래스 (Subclass) - Animal 클래스를 상속받음
class Dog extends Animal {
    public Dog(String name) {
        // 부모 클래스의 생성자 호출
        super(name); 
    }
    
    // Dog만의 고유한 기능
    public void bark() {
        System.out.println(name + &quot;가 멍멍 짖습니다.&quot;);
    }
}

public class InheritanceExample {
    public static void main(String[] args) {
        Dog myDog = new Dog(&quot;바둑이&quot;);
        
        // Dog 클래스에는 eat() 메서드가 정의되어 있지 않지만, Animal로부터 상속받아 사용 가능
        myDog.eat();  // 출력: 바둑이가 먹이를 먹습니다. 
        myDog.bark(); // 출력: 바둑이가 멍멍 짖습니다.
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style=&quot;&quot;&gt;② 캡슐화는 데이터(변수)와 그 데이터를 처리하는 함수(메서드)를 하나의 단위(클래스로 묶고, 외부에서의 접근으로부터 데이터를 보호하는 개념이다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1764246872227&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Account {
    // 1. 데이터를 private으로 보호 (정보 은닉)
    private double balance; 

    // 생성자
    public Account(double initialBalance) {
        // 내부 메서드를 통해 초기화 (유효성 검사 적용 가능)
        setBalance(initialBalance); 
    }

    // 2. Getter (데이터 읽기 전용 메서드)
    public double getBalance() {
        return balance;
    }

    // 3. Setter (데이터 쓰기/변경용 메서드)
    public void setBalance(double newBalance) {
        // Setter 내부에서 유효성 검사 로직 추가 가능
        if (newBalance &amp;gt;= 0) {
            this.balance = newBalance;
        } else {
            System.out.println(&quot;잔액은 음수가 될 수 없습니다.&quot;);
        }
    }
}

public class EncapsulationExample {
    public static void main(String[] args) {
        Account myAccount = new Account(10000.0);
        
        // 직접 접근 불가능 (컴파일 에러 발생: myAccount.balance = -5000.0;)
        
        // Getter를 통한 안전한 값 확인
        System.out.println(&quot;현재 잔액: &quot; + myAccount.getBalance()); // 출력: 현재 잔액: 10000.0
        
        // Setter를 통한 안전한 값 변경 (유효성 검사 통과)
        myAccount.setBalance(15000.0);
        System.out.println(&quot;변경 후 잔액: &quot; + myAccount.getBalance()); // 출력: 변경 후 잔액: 15000.0
        
        // Setter를 통한 잘못된 값 변경 시도 (유효성 검사 실패)
        myAccount.setBalance(-500.0); // 출력: 잔액은 음수가 될 수 없습니다.
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style=&quot;&quot;&gt;③ 다형성은&amp;nbsp;여러&amp;nbsp;가지&amp;nbsp;형태를&amp;nbsp;가질&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;성질'이라는&amp;nbsp;의미로,&amp;nbsp;하나의&amp;nbsp;메서드나&amp;nbsp;객체가&amp;nbsp;상황에&amp;nbsp;따라&amp;nbsp;다르게&amp;nbsp;동작하는&amp;nbsp;것을&amp;nbsp;말한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1764246975798&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 부모 클래스
class Vehicle {
    public void run() {
        System.out.println(&quot;탈것이 달립니다.&quot;);
    }
}

// 자식 클래스 1: run() 메서드를 오버라이딩(재정의)
class Car extends Vehicle {
    @Override
    public void run() {
        System.out.println(&quot;자동차가 쌩쌩 달립니다.&quot;);
    }
}

// 자식 클래스 2: run() 메서드를 오버라이딩(재정의)
class Bicycle extends Vehicle {
    @Override
    public void run() {
        System.out.println(&quot;자전거가 천천히 달립니다.&quot;);
    }
}

public class PolymorphismExample {
    public static void main(String[] args) {
        // 부모 타입(Vehicle)의 참조 변수가 
        // 자식 타입(Car, Bicycle)의 객체를 참조합니다.
        
        Vehicle v1 = new Car();
        Vehicle v2 = new Bicycle();
        
        // run()을 호출하지만, 실제 객체의 타입에 따라 다른 결과가 나옴 (다형성)
        v1.run(); // 출력: 자동차가 쌩쌩 달립니다.
        v2.run(); // 출력: 자전거가 천천히 달립니다.
        
        Vehicle[] vehicles = {new Car(), new Bicycle()};
        for (Vehicle v : vehicles) {
            v.run(); // 동일한 코드가 다른 동작을 수행
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style=&quot;&quot;&gt;④ 추상화는&amp;nbsp;객체들의&amp;nbsp;공통적인&amp;nbsp;특징을&amp;nbsp;파악하여&amp;nbsp;하나의&amp;nbsp;개념으로&amp;nbsp;묶는&amp;nbsp;과정이며,&amp;nbsp;사용자가&amp;nbsp;복잡한&amp;nbsp;내부&amp;nbsp;구현은&amp;nbsp;숨기고&amp;nbsp;필요한&amp;nbsp;핵심&amp;nbsp;기능(인터페이스)만&amp;nbsp;제공하는&amp;nbsp;개념이다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1764246985552&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 인터페이스를 이용한 추상화
interface RemoteControl {
    // 규격만 정의 (public abstract 메서드)
    void turnOn();
    void turnOff();
}

// 실제 구현 클래스 (TV)
class Television implements RemoteControl {
    @Override
    public void turnOn() {
        System.out.println(&quot;TV가 켜집니다.&quot;);
    }

    @Override
    public void turnOff() {
        System.out.println(&quot;TV가 꺼집니다.&quot;);
    }
}

public class AbstractionExample {
    public static void main(String[] args) {
        // RemoteControl 타입으로만 객체를 다룸 (구현 세부 정보 숨김)
        RemoteControl tvRemote = new Television(); 
        
        // 사용자는 turnOn(), turnOff() 인터페이스만 알면 됨
        tvRemote.turnOn();  // 출력: TV가 켜집니다.
        tvRemote.turnOff(); // 출력: TV가 꺼집니다.
        
        // 나중에 Radio 클래스가 추가되어도 RemoteControl 타입으로 처리 가능
    }
}&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;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;3.&amp;nbsp;자동&amp;nbsp;메모리&amp;nbsp;관리&amp;nbsp;(Garbage&amp;nbsp;Collection,&amp;nbsp;GC)&lt;/b&gt; &lt;br /&gt;C나 C++과 같은 언어에서는 프로그래머가 사용하지 않는 메모리를 직접 해제해야 하지만, 자바에서는 가비지 컬렉터(Garbage Collector)가 이 역할을 자동으로 수행한다.&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: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt;※&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt;Garbage Collector : JVM의 기능중 하나이다. 가비지 컬렉터가 힙 영역을 주기적으로 검사하여, 더 이상 프로그램에서 접근할 수 없는 &quot;쓰레기(Garbage)&quot; 객체들을 자동으로 찾아내어 메모리를 해제한다.&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: 'Nanum Gothic'; color: #333333; text-align: start;&quot;&gt; &lt;br /&gt;&lt;b&gt;4.&amp;nbsp;멀티스레드&amp;nbsp;지원&lt;/b&gt; &lt;br /&gt;자바는 하나의 프로그램이 여러 작업을 동시에 처리할 수 있도록 멀티스레드 기능을 지원한다. &lt;br /&gt;운영 체제와 독립적으로 멀티스레드 구현이 가능하며, 이를 통해 대규모 서버 애플리케이션이나 고성능 환경에서 효율적으로 자원을 활용할 수 있다. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;5.&amp;nbsp;강력한&amp;nbsp;생태계와&amp;nbsp;안정성&lt;/b&gt; &lt;br /&gt;자바는 오랜 기간 동안 광범위하게 사용되어 왔기 때문에 방대한 양의 API 라이브러리와 개발 도구, 그리고 활발한 개발자 커뮤니티를 갖추고 있다. 이는 개발 과정에서 발생하는 문제 해결이 용이하며, 안정적이고 효율적인 개발 환경을 제공한다. &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>CS(컴퓨터과학)</category>
      <category>java</category>
      <category>JAVA란</category>
      <category>java란 무엇인가</category>
      <category>java란?</category>
      <author>담비12</author>
      <guid isPermaLink="true">https://dambi1224.tistory.com/116</guid>
      <comments>https://dambi1224.tistory.com/116#entry116comment</comments>
      <pubDate>Thu, 27 Nov 2025 21:36:34 +0900</pubDate>
    </item>
    <item>
      <title>[개발관련이야기]인메모리 DB / RDBMS / NoSQL  용도차이</title>
      <link>https://dambi1224.tistory.com/97</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt; 인메모리 DB&lt;/span&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;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;주요 특징&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1. 압도적인 속도: 디스크 I/O(입출력)를 건너뛰고 메모리에서 직접 데이터를 읽고 쓰기 때문에 기존 디스크 기반 DB보다 훨씬 빠른다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;2. 휘발성: 메모리에 데이터를 저장하므로, 시스템 종료나 오류 시 데이터가 손실될 수 있어, 보통 백업 및 복구를 위해 디스크 로깅을 병행한다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;3. 데이터 모델: RDBMS 모델을 따르는 것도 있고(예: SAP HANA, VoltDB), NoSQL 모델(주로 Key-Value 형태, 예: Redis, Memcached)을 따르는 것도 있다.&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;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;주요 용도&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1. 캐싱(Caching): 자주 접근하는 데이터를 메모리에 저장하여 DB 부하를 줄이고 응답 속도를 높인다.&lt;br /&gt;2. 실시간&amp;nbsp;데이터&amp;nbsp;처리:&amp;nbsp;금융&amp;nbsp;거래&amp;nbsp;시스템,&amp;nbsp;게임&amp;nbsp;랭킹,&amp;nbsp;실시간&amp;nbsp;광고&amp;nbsp;입찰&amp;nbsp;등&amp;nbsp;극도의&amp;nbsp;성능과&amp;nbsp;짧은&amp;nbsp;응답&amp;nbsp;시간이&amp;nbsp;요구되는&amp;nbsp;작업. &lt;br /&gt;3. 세션&amp;nbsp;관리:&amp;nbsp;웹&amp;nbsp;서비스에서&amp;nbsp;사용자&amp;nbsp;세션&amp;nbsp;정보를&amp;nbsp;빠르게&amp;nbsp;저장하고&amp;nbsp;조회할&amp;nbsp;때.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;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;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt; RDBMS (관계형 데이터베이스 관리 시스템)&lt;/span&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;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;주요 특징&lt;/b&gt;&lt;br /&gt;1. 정형 데이터/스키마: 데이터의 구조(스키마)가 명확하게 정의되어 있어야 합니다. 행과 열이 고정된 테이블에 데이터를 저장한다.&lt;br /&gt;2. ACID 준수: 트랜잭션의 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), **지속성(Durability)**을 보장하여 데이터 무결성과 정확성이 매우 높다. &lt;br /&gt;3. SQL 사용: 데이터를 질의하고 조작하기 위해 구조화된 질의 언어인 SQL(Structured Query Language)을 사용합니다. &lt;br /&gt;4. 확장성 한계: 일반적으로 Scale-up (더 좋은 서버로 교체) 방식에 의존하며, 대규모 분산 환경에서의 Scale-out (서버 증설)이 NoSQL에 비해 복잡하다. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;주요 용도&lt;/b&gt;&lt;br /&gt;1. 정확성과 무결성이 중요할 때: 전자상거래 주문, 은행 거래, 재고 관리 등 데이터의 변경이 잦고 ACID 트랜잭션 보장이 필수적인 시스템. &lt;br /&gt;2. 데이터&amp;nbsp;간&amp;nbsp;관계가&amp;nbsp;복잡할&amp;nbsp;때:&amp;nbsp;여러&amp;nbsp;테이블&amp;nbsp;간의&amp;nbsp;JOIN이&amp;nbsp;필요한&amp;nbsp;복잡한&amp;nbsp;보고서&amp;nbsp;생성이나&amp;nbsp;비즈니스&amp;nbsp;로직&amp;nbsp;처리.&amp;nbsp;(예:&amp;nbsp;고객,&amp;nbsp;주문,&amp;nbsp;상품&amp;nbsp;정보&amp;nbsp;등)&lt;/span&gt;&lt;/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;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;NoSQL&amp;nbsp;(Not&amp;nbsp;Only&amp;nbsp;SQL)&lt;/span&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;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;주요 특징&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1. 유연한&amp;nbsp;스키마:&amp;nbsp;스키마가&amp;nbsp;미리&amp;nbsp;정해져&amp;nbsp;있지&amp;nbsp;않아(Schema-less),&amp;nbsp;데이터&amp;nbsp;구조&amp;nbsp;변경이나&amp;nbsp;필드&amp;nbsp;추가가&amp;nbsp;자유롭고&amp;nbsp;유연합니다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;2. 다양한&amp;nbsp;모델:&amp;nbsp;Key-Value,&amp;nbsp;Document,&amp;nbsp;Column-Family,&amp;nbsp;Graph&amp;nbsp;등&amp;nbsp;다양한&amp;nbsp;방식으로&amp;nbsp;데이터를&amp;nbsp;저장합니다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;3. 확장성:&amp;nbsp;데이터를&amp;nbsp;여러&amp;nbsp;서버에&amp;nbsp;분산하여&amp;nbsp;저장하는&amp;nbsp;Scale-out이&amp;nbsp;용이하여&amp;nbsp;대규모&amp;nbsp;데이터&amp;nbsp;처리와&amp;nbsp;분산&amp;nbsp;환경에&amp;nbsp;강력합니다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;4. CAP 이론: RDBMS처럼 엄격한 ACID를 모두 만족하기보다, 보통 가용성(Availability)이나 분할 내성(Partition Tolerance)을 우선시하는 경우가 많습니다. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;주요 용도&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1. 대용량&amp;nbsp;및&amp;nbsp;비정형&amp;nbsp;데이터:&amp;nbsp;로그&amp;nbsp;데이터,&amp;nbsp;소셜&amp;nbsp;미디어&amp;nbsp;피드,&amp;nbsp;실시간&amp;nbsp;사용자&amp;nbsp;데이터&amp;nbsp;등&amp;nbsp;데이터&amp;nbsp;양이&amp;nbsp;방대하고&amp;nbsp;구조가&amp;nbsp;유동적인&amp;nbsp;빅데이터&amp;nbsp;환경. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;2. 빠른&amp;nbsp;읽기/쓰기&amp;nbsp;성능이&amp;nbsp;중요할&amp;nbsp;때:&amp;nbsp;콘텐츠&amp;nbsp;관리&amp;nbsp;시스템(CMS),&amp;nbsp;실시간&amp;nbsp;분석,&amp;nbsp;모바일&amp;nbsp;및&amp;nbsp;웹&amp;nbsp;애플리케이션의&amp;nbsp;사용자&amp;nbsp;프로필&amp;nbsp;저장&amp;nbsp;등. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;3. 수평적&amp;nbsp;확장:&amp;nbsp;서버를&amp;nbsp;계속&amp;nbsp;추가하며&amp;nbsp;성능을&amp;nbsp;선형적으로&amp;nbsp;늘려야&amp;nbsp;하는&amp;nbsp;서비스.&lt;/span&gt;&lt;/p&gt;</description>
      <category>개발관련이야기</category>
      <category>nosql</category>
      <category>RDBMS</category>
      <category>인메모리db</category>
      <author>담비12</author>
      <guid isPermaLink="true">https://dambi1224.tistory.com/97</guid>
      <comments>https://dambi1224.tistory.com/97#entry97comment</comments>
      <pubDate>Tue, 11 Nov 2025 20:59:10 +0900</pubDate>
    </item>
  </channel>
</rss>