<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>그냥저냥</title>
    <link>https://bluenoa.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Thu, 9 Apr 2026 17:39:01 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>BlueNoa</managingEditor>
    <item>
      <title>[Spark] 스파크(Spark) - (1)</title>
      <link>https://bluenoa.tistory.com/102</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;[목차]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;a class=&quot;smooth-scroll&quot; href=&quot;#text1&quot;&gt;Spark란?&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a class=&quot;smooth-scroll&quot; href=&quot;#text2&quot;&gt;스파크의 장/단점&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#mtext1&quot;&gt;압도적인 속도&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#mtext2&quot;&gt;통합 엔진(Unified Engine)&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#mtext3&quot;&gt;사용 편의성&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#mtext4&quot;&gt;높은 메모리 요구량과 비용&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#mtext5&quot;&gt;실시간 처리의 미세한 한계&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#mtext6&quot;&gt;복잡한 튜닝&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;&lt;b&gt;&lt;a class=&quot;smooth-scroll&quot; href=&quot;#text3&quot;&gt;스파크의 주요 특징&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#mtext7&quot;&gt;데이터 분산(Data Distribution)&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#mtext8&quot;&gt;병렬 처리(Parallel Processing)&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#mtext9&quot;&gt;장애 내성(Fault Tolerance)&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;text1&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; Spark란?&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아파치 &lt;b&gt;스파크(Spark)&lt;/b&gt;는 하둡의 맵리듀스를 빠르게 대체하는 &lt;b&gt;빅데이터 처리 플랫폼&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아파치 &lt;b&gt;하둡&lt;/b&gt;은 &lt;b&gt;분산 컴퓨팅용 자바 기반 오픈소스 프레임워크&lt;/b&gt;로 &lt;b&gt;하둡 분산 파일 시스템&lt;/b&gt;(Hadoop Distributed File System, &lt;b&gt;HDFS&lt;/b&gt;)과 &lt;u&gt;&lt;b&gt;맵리듀스&lt;/b&gt;&lt;/u&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;color: #ee2323;&quot;&gt; &lt;b&gt;*맵리듀스란?&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;*맵리듀스&lt;/b&gt;&lt;/span&gt; : 큰 문제는 작게 나누고(Map), 결과를 다시 합치는(Reduce) 방식으로 맵 단계에서는 입력 데이터를 (키-값) 쌍으로 변환하고 셔플 및 정렬을 통해 같은 키(Key)를 가진 것끼리 모아서 리듀스로 전달한다. 이후 중복된 키를 합치고 값들을 집계하여 최종 결과물을 만드는 것(Reduce)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예를 들어)&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;사과, 바나나, 사과 &amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Map&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;: (사과, 1), (바나나, 1), (사과, 1)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Suffle&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 사과 : [1, 1], 바나나 [1]&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Reduce&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 사과: 2, 바나나: 1&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스파크는 메모리를 보다 효율적으로 활용해 하둡의 맵리듀스 보다 10~100배는 더 빠른 속도로 같은 작업을 수행할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;스파크의 컬렉션&lt;/b&gt;(자료 구조, 예로 List, Dict 또는 Scala의 Seq 등)은 로컬에서 자바와 파이썬의 자료 구조를 사용하는 느낌을 주지만 실제로는 여러 노드(네트워크에 연결된 개별 컴퓨터)에 분산된 데이터를 참조한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-v72SQxEabMoPSKqa&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;text2&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; 스파크의 장/단점&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 id=&quot;mtext1&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;압도적인 속도&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서도 언급했듯 데이터를 디스크에 매번 I/O 하여 저장하는 맵리듀스와 달리, 데이터를 메모리(RAM)에 올려두고 처리하기 때문에 맵리듀스보다 최대 100배 빠르다. 메모리가 부족하여 디스크를 사용하더라도 약 10배 정도의 속도를 낼 수 있으며 같은 데이터를 여러 번 반복해서 계산해야 하는 머신러닝 알고리즘에서 좋은 성능을 발휘한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;mtext2&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;통합 엔진(Unified Engine)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 프레임워크 내에서 SQL, 실시간 스트리밍, 머신러닝, 그래프 분석을 모두 처리할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 도구를 배울 필요 없이 스파크 하나로 데이터 파이프라인 전체를 구축할 수 있어 개발 효율이 매우 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;mtext3&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;사용 편의성&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Java, Scala, Python(PySpark), 최근에는 R 언어까지 지원하기 시작했다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h4 id=&quot;mtext4&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;높은 메모리 요구량과 비용&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인메모리 방식이다 보니 대용량 데이터를 처리하려면 그만큼 많은 양의 RAM이 필요로 하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구축 비용이 하둡보다 비쌀 수 있으며, 메모리 관리를 잘못하면 OOM(Out Of Memory) 에러로 시스템이 멈추는 경우가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;mtext5&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;실시간 처리의 미세한 한계&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스파크는 분산 아키텍처 때문에 처리 사간에 약간의 오버헤드(Overhead, 별도의 컴퓨팅 리소스)가 필연적으로 발생한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0.1초 미만의 초저지연이 필수적인 서비스에서는 Apache Flink 같은 전문 스트리밍 엔진에 비해 불리하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 온라인 트랜잭션 처리(OnLine Transaction Processing, OLTP) 애플리케이션을 염두하지 않았기 때문에 대량의 원자성(Atomicity) 트랜잭션을 빠르게 처리해야 하는 작업에는 스파크는 적합하지 않다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면 일괄 처리 작업이나 데이터 마이닝 같은 온라인 분석 처리(OnLine Analytical Processing, OLAP)에 적합하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;mtext6&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;복잡한 튜닝&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정해야 할 파라미터가 매우 많다. (파티션의 개수, 메모리 할당 비율, 직렬화 방식 등)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;

&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 id=&quot;text3&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; 스파크의 주요 특징&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 id=&quot;mtext7&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;데이터 분산(Data Distribution)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스파크는 거대한 데이터를 파티션(Partition)이라는 작은 단위로 쪼개어 클러스터 내의 여러 노드에 나누어 저장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 노드에 흩어져 있는 데이터 조각들을 마치 하나의 리스트처럼 다룰 수 있게 해주는 것이 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;RDD(분산 컬렉션)&lt;/b&gt;&lt;/span&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자는 데이터가 어디에 있는지 신경 쓰지 않고 하나의 데이터 셋처럼 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;*RDD에 대한 설명은 다음 내용(2)에 한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;mtext8&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;병렬 처리(Parallel Processing)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터가 여러 노드에 있기 때문에, 각 노드는 자신이 가진 데이터 조각(파티션)을 동시에 계산할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;mtext9&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;장애 내성(Fault Tolerance)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분산 환경에서 특정 노드가에 에러가 발생하였다 가정하면 스파크는 이를 &lt;b&gt;계보(Lineage)&lt;/b&gt;라는 개념으로 해결한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;계보란 데이터가 만들어진 과정을 기록하여 파일을 복원하는 것이 아닌 &lt;b&gt;파일을 만드는 레시피를 이용해 복구하는 개념&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 특정 노드가 죽어서 파티션이 유실되면, 스파크는 기록된 계보를 통해 유실된 조각만 다시 계산하여 복구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 RDD의 탄력성이라 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Spark</category>
      <category>Hadoop</category>
      <category>spark</category>
      <category>스파크</category>
      <author>BlueNoa</author>
      <guid isPermaLink="true">https://bluenoa.tistory.com/102</guid>
      <comments>https://bluenoa.tistory.com/102#entry102comment</comments>
      <pubDate>Wed, 7 Jan 2026 20:55:10 +0900</pubDate>
    </item>
    <item>
      <title>파킨슨 병, 관리부터 예방까지</title>
      <link>https://bluenoa.tistory.com/101</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;[목차]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;a class=&quot;smooth-scroll&quot; href=&quot;#text1&quot;&gt;파킨슨 병이란?&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a class=&quot;smooth-scroll&quot; href=&quot;#text2&quot;&gt;파킨슨 병의 주요 증상&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a class=&quot;smooth-scroll&quot; href=&quot;#text3&quot;&gt;파킨슨 진단 방법&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a class=&quot;smooth-scroll&quot; href=&quot;#text4&quot;&gt;치료 방법&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a class=&quot;smooth-scroll&quot; href=&quot;#text5&quot;&gt;관리와 예방&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-v72SQxEabMoPSKqa&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;text1&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; 파킨슨 병이란?&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;파킨슨병은&amp;nbsp;뇌의&amp;nbsp;특정&amp;nbsp;부위인&amp;nbsp;'중뇌&amp;nbsp;흑질'에&amp;nbsp;있는&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;도파민&amp;nbsp;신경세포가&amp;nbsp;서서히&amp;nbsp;소실되면서&amp;nbsp;발생하는&amp;nbsp;진행성&amp;nbsp;퇴행성&amp;nbsp;뇌&amp;nbsp;질환&lt;/b&gt;&lt;/span&gt;입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;우리&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;&lt;span style=&quot;color: #000000;&quot;&gt;주로&lt;b&gt;&amp;nbsp;60세&amp;nbsp;이상&lt;/b&gt;에서&amp;nbsp;&lt;b&gt;1~2%&amp;nbsp;정도&amp;nbsp;발생&lt;/b&gt;하며,&amp;nbsp;&lt;u&gt;치매&amp;nbsp;다음으로&amp;nbsp;흔한&amp;nbsp;대표적인&amp;nbsp;신경&amp;nbsp;퇴행성&amp;nbsp;질환&lt;/u&gt;으로&amp;nbsp;알려져&amp;nbsp;있습니다. &lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 id=&quot;text2&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; 파킨슨 병의 주요 증상&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;파킨슨병은&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;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;초기&lt;/b&gt;에는&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;비운동&amp;nbsp;증상&lt;/span&gt;이&amp;nbsp;먼저&amp;nbsp;나타나는&amp;nbsp;경우가&amp;nbsp;많아&amp;nbsp;다른&amp;nbsp;질환으로&amp;nbsp;오인&lt;/b&gt;하기&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%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%; text-align: center;&quot; colspan=&quot;2&quot;&gt;&lt;b&gt;&amp;lt;비운동 증상&amp;gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.5116%; text-align: center;&quot;&gt;&lt;b&gt;무표정한 얼굴(가면 얼굴)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.4884%;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;u&gt;얼굴 근육&lt;/u&gt;의 움직임이 줄어들어 &lt;b&gt;표정이 굳어집니다.&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.5116%; text-align: center;&quot;&gt;&lt;b&gt;정신적 증상&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.4884%;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;우울증, 불안, 무감동 등이 흔하게 동반됩니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.5116%; text-align: center;&quot;&gt;&lt;b&gt;수면 장애&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.4884%;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;불면증, &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;렘수면 행동 장애(REM sleep behavior disorder)&lt;/b&gt;&lt;/span&gt; 등으로 잠꼬대나 과격한 행동을 보일 수 있습니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.5116%; text-align: center;&quot;&gt;&lt;b&gt;기타&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.4884%;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&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;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%; text-align: center;&quot; colspan=&quot;2&quot;&gt;&lt;b&gt;&amp;lt;운동 증상&amp;gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.2791%; text-align: center;&quot;&gt;&lt;b&gt;떨림(떨림증, Tremor)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.7209%;&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;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.2791%; text-align: center;&quot;&gt;&lt;b&gt;경직(경직증,&amp;nbsp;Rigidity)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.7209%;&quot;&gt;근육이&amp;nbsp;뻣뻣해지고&amp;nbsp;굳어지는&amp;nbsp;현상입니다.&amp;nbsp;목,&amp;nbsp;팔,&amp;nbsp;다리가&amp;nbsp;뻣뻣해져&amp;nbsp;움직임이&amp;nbsp;부자연스러워지고&amp;nbsp;통증을&amp;nbsp;유발하기도&amp;nbsp;합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.2791%; text-align: center;&quot;&gt;&lt;b&gt;느린&amp;nbsp;행동&lt;/b&gt;&lt;br /&gt;&lt;b&gt;(운동&amp;nbsp;완서증,&amp;nbsp;Bradykinesia)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.7209%;&quot;&gt;모든&amp;nbsp;동작이&amp;nbsp;느려지는&amp;nbsp;증상입니다.&amp;nbsp;걸음이&amp;nbsp;느려지고,&amp;nbsp;표정이&amp;nbsp;무표정해지며,&amp;nbsp;글씨체가&amp;nbsp;작아지는&amp;nbsp;소서증(micrographia)&amp;nbsp;등이&amp;nbsp;나타납니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.2791%; text-align: center;&quot;&gt;&lt;b&gt;자세&amp;nbsp;불안정&lt;/b&gt;&lt;br /&gt;&lt;b&gt;(자세반사&amp;nbsp;소실,&amp;nbsp;Postural&amp;nbsp;Instability)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.7209%;&quot;&gt;균형을&amp;nbsp;잡기&amp;nbsp;어려워져&amp;nbsp;걸을&amp;nbsp;때&amp;nbsp;몸이&amp;nbsp;앞으로&amp;nbsp;구부러지고,&amp;nbsp;넘어지기&amp;nbsp;쉽습니다.&amp;nbsp;&lt;br /&gt;보폭이&amp;nbsp;좁고&amp;nbsp;종종걸음을&amp;nbsp;걷게&amp;nbsp;되며,&amp;nbsp;한번&amp;nbsp;시작한&amp;nbsp;걸음을&amp;nbsp;멈추기&amp;nbsp;어렵거나&amp;nbsp;방향을&amp;nbsp;전환하기&amp;nbsp;힘들어합니다.&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;ChatGPT Image 2025년 9월 3일 오후 05_40_14.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3W0pT/btsQjhjLCdn/plmRS5Maw65LryKsqdOSKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3W0pT/btsQjhjLCdn/plmRS5Maw65LryKsqdOSKK/img.png&quot; data-alt=&quot;파킨슨 병의 대표 증상&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3W0pT/btsQjhjLCdn/plmRS5Maw65LryKsqdOSKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3W0pT%2FbtsQjhjLCdn%2FplmRS5Maw65LryKsqdOSKK%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;1536&quot; height=&quot;1024&quot; data-filename=&quot;ChatGPT Image 2025년 9월 3일 오후 05_40_14.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;파킨슨 병의 대표 증상&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 id=&quot;text3&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; 파킨슨 진단 방법&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&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;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 156px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 100%; text-align: center; height: 21px;&quot; colspan=&quot;2&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&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: 24.6512%; text-align: center; height: 42px;&quot;&gt;&lt;b&gt;임상 증상 확인&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 75.3488%; height: 42px;&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;중요합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 24.6512%; text-align: center; height: 21px;&quot;&gt;&lt;b&gt;신경학적 검진&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 75.3488%; height: 21px;&quot;&gt;근력,&amp;nbsp;감각,&amp;nbsp;반사&amp;nbsp;등을&amp;nbsp;포함한&amp;nbsp;포괄적인&amp;nbsp;신경학적&amp;nbsp;검사를&amp;nbsp;시행합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 100%; text-align: center; height: 17px;&quot; colspan=&quot;2&quot;&gt;&lt;b&gt;+&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 100%; text-align: center; height: 21px;&quot; colspan=&quot;2&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;다른 질환과의 감별을 위한 추가 검사&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 24.6512%; text-align: center; height: 17px;&quot;&gt;&lt;b&gt;영상 검사&lt;/b&gt;&lt;br /&gt;&lt;b&gt;(뇌 MRI, PET-CT)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 75.3488%; height: 17px;&quot;&gt;파킨슨병과&amp;nbsp;유사한&amp;nbsp;증상을&amp;nbsp;보이는&amp;nbsp;다른&amp;nbsp;질환(예:&amp;nbsp;뇌졸중,&amp;nbsp;뇌종양)을&amp;nbsp;감별하기&amp;nbsp;위해&amp;nbsp;뇌&amp;nbsp;MRI를&amp;nbsp;촬영합니다.&amp;nbsp;&lt;br /&gt;도파민&amp;nbsp;대사&amp;nbsp;이상을&amp;nbsp;확인하는&amp;nbsp;PET-CT(도파민&amp;nbsp;운반체&amp;nbsp;PET)&amp;nbsp;검사는&amp;nbsp;파킨슨병을&amp;nbsp;진단하는&amp;nbsp;데&amp;nbsp;큰&amp;nbsp;도움을&amp;nbsp;줍니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 24.6512%; text-align: center; height: 17px;&quot;&gt;&lt;b&gt;약물&amp;nbsp;반응&amp;nbsp;확인&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 75.3488%; height: 17px;&quot;&gt;파킨슨병&amp;nbsp;치료&amp;nbsp;약물인&amp;nbsp;'레보도파'에&amp;nbsp;대한&amp;nbsp;환자의&amp;nbsp;반응을&amp;nbsp;관찰하는&amp;nbsp;것도&amp;nbsp;진단에&amp;nbsp;중요한&amp;nbsp;단서가&amp;nbsp;됩니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 id=&quot;text4&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; 치료 방법&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%; text-align: center;&quot; colspan=&quot;2&quot;&gt;&lt;b&gt;약물 치료&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 24.8837%; text-align: center;&quot;&gt;&lt;b&gt;레보도파(Levodopa)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 75.1163%;&quot;&gt;가장&amp;nbsp;효과적인&amp;nbsp;치료&amp;nbsp;약물로,&amp;nbsp;뇌에서&amp;nbsp;도파민으로&amp;nbsp;전환되어&amp;nbsp;운동&amp;nbsp;기능을&amp;nbsp;개선합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 24.8837%; text-align: center;&quot;&gt;&lt;b&gt;도파민&amp;nbsp;효현제&lt;/b&gt;&lt;br /&gt;&lt;b&gt;(Dopamine&amp;nbsp;Agonist)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 75.1163%;&quot;&gt;도파민과&amp;nbsp;비슷한&amp;nbsp;작용을&amp;nbsp;하여&amp;nbsp;증상을&amp;nbsp;완화합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 24.8837%; text-align: center;&quot;&gt;&lt;b&gt;기타&amp;nbsp;약물&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 75.1163%;&quot;&gt;다른&amp;nbsp;약물과&amp;nbsp;병용하여&amp;nbsp;효과를&amp;nbsp;높이는&amp;nbsp;약물들도&amp;nbsp;사용됩니다.&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;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%; text-align: center;&quot; colspan=&quot;2&quot;&gt;&lt;b&gt;재활 치료&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 24.8837%; text-align: center;&quot;&gt;&lt;b&gt;규칙적인&amp;nbsp;운동&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 75.1163%;&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;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 24.8837%; text-align: center;&quot;&gt;&lt;b&gt;물리&amp;nbsp;치료,&amp;nbsp;작업&amp;nbsp;치료,&amp;nbsp;언어&amp;nbsp;치료&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 75.1163%;&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;있습니다.&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;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%; text-align: center;&quot; colspan=&quot;2&quot;&gt;&lt;b&gt;수술 치료&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.0233%; text-align: center;&quot;&gt;&lt;b&gt;뇌심부&amp;nbsp;자극술&lt;/b&gt;&lt;br /&gt;&lt;b&gt;(DBS,&amp;nbsp;Deep&amp;nbsp;Brain&amp;nbsp;Stimulation)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 71.9767%;&quot;&gt;뇌에&amp;nbsp;전극을&amp;nbsp;삽입하여&amp;nbsp;전기&amp;nbsp;자극을&amp;nbsp;주는&amp;nbsp;수술로,&amp;nbsp;떨림,&amp;nbsp;경직,&amp;nbsp;서동증&amp;nbsp;등&amp;nbsp;운동&amp;nbsp;증상&amp;nbsp;개선에&amp;nbsp;큰&amp;nbsp;효과를&amp;nbsp;보입니다.&lt;/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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 id=&quot;text5&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; 관리와 예방&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&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;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 169px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 64px;&quot;&gt;
&lt;td style=&quot;width: 28.6047%; text-align: center; height: 64px;&quot;&gt;&lt;b&gt;약물&amp;nbsp;복용&amp;nbsp;시간&amp;nbsp;엄수&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 71.3953%; height: 64px;&quot;&gt;처방된&amp;nbsp;약물을&amp;nbsp;정해진&amp;nbsp;시간에&amp;nbsp;맞춰&amp;nbsp;규칙적으로&amp;nbsp;복용하는&amp;nbsp;것이&amp;nbsp;증상&amp;nbsp;관리에&amp;nbsp;필수적입니다. &lt;br /&gt;&lt;span&gt;&lt;span&gt;특히 단백질이 많은 음식은 '&lt;b&gt;레보도파&lt;/b&gt;' 흡수를 방해할 수 있으므로,&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt; 약 복용 전후 30분~1시간 동안은 단백질 섭취를 피하는 것&lt;/b&gt;&lt;/span&gt;이 좋습니다.&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 42px;&quot;&gt;
&lt;td style=&quot;width: 28.6047%; text-align: center; height: 42px;&quot;&gt;&lt;b&gt;꾸준한&amp;nbsp;운동&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 71.3953%; height: 42px;&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;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 28.6047%; text-align: center; height: 21px;&quot;&gt;&lt;b&gt;안전한&amp;nbsp;생활&amp;nbsp;환경&amp;nbsp;조성&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 71.3953%; height: 21px;&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;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 28.6047%; text-align: center; height: 21px;&quot;&gt;&lt;b&gt;균형&amp;nbsp;잡힌&amp;nbsp;식단&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 71.3953%; height: 21px;&quot;&gt;충분한&amp;nbsp;수분&amp;nbsp;섭취와&amp;nbsp;섬유질이&amp;nbsp;풍부한&amp;nbsp;음식으로&amp;nbsp;변비를&amp;nbsp;예방하는&amp;nbsp;것이&amp;nbsp;좋습니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 28.6047%; text-align: center; height: 21px;&quot;&gt;&lt;b&gt;정기적인&amp;nbsp;진료&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 71.3953%; height: 21px;&quot;&gt;증상&amp;nbsp;변화를&amp;nbsp;의료진과&amp;nbsp;상의하며&amp;nbsp;약물&amp;nbsp;용량을&amp;nbsp;조절하고&amp;nbsp;관리&amp;nbsp;계획을&amp;nbsp;점검해야&amp;nbsp;합니다.&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>건강관련</category>
      <category>파킨슨</category>
      <category>파킨슨 병</category>
      <category>파킨슨 병 관리</category>
      <category>파킨슨 병 증상</category>
      <category>파킨슨 예방</category>
      <category>파킨슨 증상</category>
      <category>파킨슨 치료</category>
      <author>BlueNoa</author>
      <guid isPermaLink="true">https://bluenoa.tistory.com/101</guid>
      <comments>https://bluenoa.tistory.com/101#entry101comment</comments>
      <pubDate>Wed, 3 Sep 2025 23:27:19 +0900</pubDate>
    </item>
    <item>
      <title>[DB] DataBase</title>
      <link>https://bluenoa.tistory.com/100</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;[목차]&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text1&quot;&gt;DB(DataBase, 데이터베이스)&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#mtext1&quot;&gt;DBMS 종류&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#mtext2&quot;&gt;DBMS 특징&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text2&quot;&gt;DBMS 분류&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#mtext3&quot;&gt;망형 데이터베이스(Network Database)&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#mtext4&quot;&gt;계층형 데이터베이스(Hierarchical Database)&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#mtext5&quot;&gt;관계형 데이터베이스(Relational Database)&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#mtext6&quot;&gt;객체 - 관계형 데이터베이스(Object-Relational Database)&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#mtext7&quot;&gt;객체 - 지향형 데이터베이스(Object-Oriented Database)&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text3&quot;&gt;SQL(Structured Query Language) 개요&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#mtext8&quot;&gt;SQL의 특징&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h2 id=&quot;text1&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; DB(DataBase, 데이터베이스)&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;데이터베이스는 '데이터의 집합'&lt;/b&gt;이며 이를 &lt;b&gt;관리하는 시스템을 DBMS(DataBase Management System)&lt;/b&gt;라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DBMS는 데이터베이스를 관리/운영하는 역할을 한다. 이는 정보의 중복을 줄이고, 효율적인 검색과 업데이트가 가능하도록 하는 역할을 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한, 여러 명의 사용자나 응용프로그램이 공유하고 동시에 접근이 가능해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DBMS에 데이터를 구축하고 관리하고 활용하기 위해서 사용되는 언어가 SQL이다.&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;1098&quot; data-origin-height=&quot;697&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/betDYI/btsLztwzjTE/GtA8aIDwB3KmZwgLXkrZw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/betDYI/btsLztwzjTE/GtA8aIDwB3KmZwgLXkrZw1/img.png&quot; data-alt=&quot;DBMS 개념도&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/betDYI/btsLztwzjTE/GtA8aIDwB3KmZwgLXkrZw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbetDYI%2FbtsLztwzjTE%2FGtA8aIDwB3KmZwgLXkrZw1%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;656&quot; height=&quot;416&quot; data-origin-width=&quot;1098&quot; data-origin-height=&quot;697&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DBMS 개념도&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DBMS에는 여러가지 종류가 있다.&lt;/p&gt;
&lt;h4 id=&quot;mtext1&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;[DBMS 종류]&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 177px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style3&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;&lt;b&gt;DBMS&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;&lt;b&gt;제작사&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;&lt;b&gt;운영체제&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;&lt;b&gt;기타&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;MariaDB&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;MariaDB&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;Unix, Linux, Windows&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;오픈 소스(무료)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;MySQL&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;Oracle&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;Unix, Linux, Windows, Mac&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;오픈 소스(무료) or 상용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;PostgreSQL&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;PostgreSQL&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;Unix, Linux, Windows, Mac&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;오픈 소스(무료)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;Oracle&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;Oracle&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;Unix, Linux, Windows&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;상용 (시장 점유율 1위)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 17px;&quot;&gt;SQL Server&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 17px;&quot;&gt;MS&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 17px;&quot;&gt;Windows&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;DB2&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;IBM&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;Unix, Linux, Windows&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;메인 프레임 시장 점유율 1위&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;Access&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;MS&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;Windows&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;PC용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;SQLite&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;SQLite&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;Android, IOS&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&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;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;mtext2&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;DBMS의 특징&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 중복제거&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터베이스는 동일한 데이터를 여러 번 저장하는 것을 방지한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 공간 절약과 데이터의 일관성을 유지하는 데 도움이 된다.&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;2. 효율적인 검색&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터베이스는 복잡한 질의를 빠르게 처리할 수 있다. 이를 위해 인덱싱, 쿼리 최적화 등의 기술이 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 데이터 무결성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터베이스 안에 있는 데이터는 오류가 있어서는 안 된다. 그렇기 때문에 무결성을 위해 '제약조건(Constraint)'이라는 특성을 가진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어서 우리가 주민등록증을 통해 어떤 문서를 조회할 때 중복이 있어서는 안되는 것처럼 중복 방지의 제약 조건 등을 통해 정확한 데이터를 찾을 수 있다는 것이다. 그 외에도 여러 제약 조건이 있을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 데이터 일관성 유지&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 베이스는 '&lt;b&gt;트랜잭션&lt;/b&gt;' 이라는 개념을 통해 데이터의 일관성을 유지한다. 이는 여러 작업이 동시에 이루어질 때에도 데이터가 일관된 상태를 유지하도록 한다.&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;트랜잭션이란?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;데이터베이스에서 &lt;b&gt;하나 이상의 작업 단위를 의미&lt;/b&gt;한다.&lt;br /&gt;이 작업들은 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속성(Durability)이라는 ACID 속성을 갖는다.&lt;br /&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.7093%; text-align: center;&quot;&gt;원자성&lt;/td&gt;
&lt;td style=&quot;width: 81.2907%;&quot;&gt;&lt;span style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot;&gt;트랜잭션 내의 모든 작업이 성공적으로 완료되어야만 전체 트랜잭션이 성공으로 간주. 하나라도 실패하면, 롤백을 통해 원래 상태로 복구된다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.7093%; text-align: center;&quot;&gt;일관성&lt;/td&gt;
&lt;td style=&quot;width: 81.2907%;&quot;&gt;트랜잭션이 실행되기 전과 후 데이터베이스는 항상 일관된 상태를 유지해야 한다.&lt;br /&gt;예를 들어, 외래 키 제약 조건이나 고유한 값의 중복을 방지하는 등의 규칙 적용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.7093%; text-align: center;&quot;&gt;격리성&lt;/td&gt;
&lt;td style=&quot;width: 81.2907%;&quot;&gt;여러 트랜잭션이 동시에 실행될 때 각각의 트랜잭션은 다른 트랜잭션의 작업에 영향을 받지 않아야 한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.7093%; text-align: center;&quot;&gt;지속성&lt;/td&gt;
&lt;td style=&quot;width: 81.2907%;&quot;&gt;트랜잭션이 성공적으로 완료되면 그 결과는 영구적으로 저장되어야 한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&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;5. 확장성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터베이스는 많은 양의 데이터를 저장하고 처리할 수 있으며, 시스템의 성능을 향상시키기 위해 분산 데이터베이스 등의 기술을 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;6. 보안&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터베이스는 데이터에 대한 접근을 제어하고 보호하는 기능을 제공한다. 데이터를 소유한 사람, 데이터 접근이 허가된 사람많이 데이터에 접근할 수 있다. 이는 권한 관리, 암호화 등 다양한 방법으로 이루어진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;7. 데이터 공유 및 통합&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 사용자와 애플리케이션 간에 데이터를 쉽게 공유하고 통합할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;8. 백업 및 복구&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터베이스는 데이터 손실을 방지하기 위해 백업과 복구 기능을 제공한다. 이를 통해 중요한 데이터를 안전하게 보호할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-v72SQxEabMoPSKqa&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 id=&quot;text2&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; DBMS 분류&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 id=&quot;mtext3&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;망형 데이터베이스(Network Database)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터를 복잡한 네트워크 형태로 저장한다. 각 레코드(행)는 다른 레코드와 여러 개의 관계를 가질 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구조는 부모 - 자식 또는 형제 - 형제 관계를 가지며, 이들 간의 연결을 통해 데이터를 구현한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항공편 예약이나 도서관 시스템 등이 예시로 있지만 구현하기 어렵고 복잡하기 때문에 관계형 데이터베이스를 더 많이 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;mtext4&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;계층형 데이터베이스(Hierarchical Database)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터를 계층(트리) 구조로 저장한다. 각 레코드(행)는 부모 - 자식 관계를 가지며, 이들 간의 연결을 통해 데이터를 조직한다. 하나의 레코드가 여러 개의 자식 레코드를 가질 수 있으며, 계층 구조로 데이터를 표현한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가계도, 조직도 또는 파일 구조에 대한 표현을 할 때 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순한 계층적인 관계를 효율적으로 처리할 수 있으며, 성능이 우수하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 다대다의 관계 표현에 제약이 있어 복잡한 데이터 모델링이 어려울 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;mtext5&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;관계형 데이터베이스(Relational Database)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터를 테이블 형태로 저장하며, 각 테이블 간의 관계를 통해 데이터를 조직한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테이블은 행(레코드)과 열(칼럼 또는 필드)로 구성되며, 기본 키와 외래 키를 사용하여 레코드 간의 관계를 정의한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대부분의 데이터베이스는 관계형 데이터베이스를 위주로 사용하며 MySQL, Oracle 등도 관계형 데이터베이스이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 모델링이 직관적이고 표준 SQL을 통해 쿼리 작성 및 관리가 용이하며 ACID 특성을 지니어 데이터 일관성을 보장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;복잡한 쿼리를 처리할 때 성능 저하가 발생할 수 있으며, 대용량 데이터 처리에 어려움이 있을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;mtext6&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;객체 - 관계형 데이터베이스(Object-Relational Database)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;객체 지향 프로그래밍의 개념을 데이터베이스 모델링에 도입하여, 객체와 그 속성, 메서드를 테이블로 저장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;객체와 클래스를 기반으로 데이터를 조직하며, &lt;b&gt;관계형 데이터베이스의 장점을 유지&lt;/b&gt;하면서 객체 지향 프로그램의 특성을 활용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;mtext7&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;객체 - 지향형 데이터베이스(Object-Oriented Database)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;객체 - 관계형 데이터베이스와 마찬가지로 객체와 그 속성, 메서드를 직접 저장하지만 클래스와 객체로 데이터를 조직하며, 상속과 다형성 등의 객체 지향 특성을 지원하여 관계형 데이터베이스의 테이블과 열을 기반으로 하는 구조와 달리, 객체의 속성과 메서드를 직접 저장하고 처리한다.&lt;/p&gt;

&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 id=&quot;text3&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; SQL(Structured Query Language) 개요&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SQL은 데이터베이스를 관리하고 조작하기 위한 표준화된 언어이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적인 프로그래밍 언어인 C, C++, JAVA 등 비교하면 좀 다른 특성을 갖는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SQL은 데이터베이스에 저장된 데이터를 검색, 삽입, 업데이트 및 삭제하는 데 주로 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;mtext8&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;SQL의 특징&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. DBMS 제작 회사와 독립적&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DBMS는 표준 SQL을 기본으로 맞춰서 DBMS를 개발한다. 그러므로 표준 SQL은 대부분의 DBMS 제품에서 공통적으로 호환이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단, 주의할 점이 모든 DBMS 제작 회사들이 표준 SQL을 지키려고 하지만 각 제품마다 전부 동일하지는 않는다.&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;2. 호환성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SQL 표준은 서버, 개인, 휴대용 장비에서 운영되는 DBMS마다 상호 호환성이 좋다. 그러므로 어떤 시스템에 이식을 해도 별 문제가 없다.&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;3. 분산형 클라이언트 / 서버 구조&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라이언트 - 서버 구조를 지원하기 때문에 클라이언트에서 질의를 하면 서버에서 그 질의를 받아 서버에서 처리한 후 다시 클라이언트에게 전달한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DB</category>
      <category>Database</category>
      <category>dbms</category>
      <category>sql</category>
      <category>sql 개요</category>
      <category>sql의 특징</category>
      <category>데이터베이스</category>
      <author>BlueNoa</author>
      <guid isPermaLink="true">https://bluenoa.tistory.com/100</guid>
      <comments>https://bluenoa.tistory.com/100#entry100comment</comments>
      <pubDate>Tue, 7 Jan 2025 16:42:54 +0900</pubDate>
    </item>
    <item>
      <title>ERP(Enterprise Resource Planning)</title>
      <link>https://bluenoa.tistory.com/99</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[목차]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text1&quot;&gt;EPR란?&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#mtext1&quot;&gt;ERP의 역사와 발전&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#mtext2&quot;&gt;ERP의 주요 기능&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#mtext3&quot;&gt;ERP 도입 필요성과 기대 효과&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#mtext4&quot;&gt;ERP 시스템 종류&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text2&quot;&gt;ERP 선택 방법&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#mtext5&quot;&gt;ERP 도입 전 고려해야 할 사항&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#mtext6&quot;&gt;기업 규모, 업종에 따른 ERP 선택 기준&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#mtext7&quot;&gt;ERP 벤더 선정 시 고려해야 할 점&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text3&quot;&gt;ERP 구축 및 운영 시 주의해야 할 점&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#mtext8&quot;&gt;ERP 구축 프로젝트의 단계별 진행 과정&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#mtext9&quot;&gt;데이터 마이그레이션 및 시스템 테스트&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#mtext10&quot;&gt;사용자 교육 및 변화 관리&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#mtext11&quot;&gt;ERP 시스템의 안정적인 운영을 위한 유지보수&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#mtext12&quot;&gt;ERP와 관련된 최신 트렌드(클라우드 ERP, 모바일 ERP)&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h2 id=&quot;text1&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; EPR(전사적 자원 관리 시스템, Enterprise Resource Planning)&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ERP&lt;/b&gt;는 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;기업의 모든 자원을 통합적으로 관리&lt;/span&gt;&lt;/b&gt;하는 시스템입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;재무, 생산, 인사, 고객관계관리 등 기업 운영에 필요한 모든 기능을 하나의 시스템으로 연결하여 업무 효율성을 높이고, 정확한 의사결정을 지원합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;mtext1&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;ERP의 역사와 발전&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ERP는 1960년대 후반 MRP(Material Requirements Planning, 자재 요구 계획) 시스템에서 시작되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 MRP II, MRP III를 거쳐 90년대 들어 ERP란 용어가 일반화되었습니다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초기 ERP 시스템은 주로 제조업 중심으로 개발되었지만, 현재는 서비스업 및 유통업 등 다양한 산업 분야에서 활용되고 있으며, 클라우드 기술의 발달과 함께 ERP 시스템도 클라우드 기반으로 제공되어 도입 비용과 관리 부담을 줄일 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;mtext2&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;ERP의 주요 기능&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;EPR 시스템은 모든 기능을 통합적으로 관리하지만, 주요 기능은 다음과 같습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;재무&lt;/b&gt; : 회계, 자금 관리, 예산 관리 등 기업의 재무 활동을 통합적으로 관리합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;생산&lt;/b&gt; : 생산 계획, 재고 관리, 품질 관리 등 생산 관련 모든 프로세스를 관리합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;인사&lt;/b&gt; : 인사 관리, 급여 관리, 교육 관리 등 인적 자원 관리를 효율적으로 지원합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;고객 관계 관리(CRM)&lt;/b&gt; : 고객 정보 관리, 영업 지원, 마케팅 활동 등 고객과의 관계를 강화합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;공급망 관리(SCM)&lt;/b&gt; : 구매, 물류, 재고 관리 등 공급망 전반을 관리하여 원활한 제품 공급을 보장합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;mtext3&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;ERP 도입 필요성과 기대 효과&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;정보 통합&lt;/b&gt; : 모든 비즈니스 프로세스를 통합하여 정보를 한 곳에서 관리할 수 있게 합니다. 이로 인해 &lt;span style=&quot;color: #ee2323;&quot;&gt;정보의 일관성&lt;/span&gt;이 유지됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;효율성 향상&lt;/b&gt; : 자동화된 시스템을 통해 반복적인 작업을 줄이고, &lt;span style=&quot;color: #ee2323;&quot;&gt;시간과 비용을 절약&lt;/span&gt;할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;비즈니스 의사결정&lt;/b&gt; : 실시간 데이터 분석을 가능하게 하여 기업의 &lt;span style=&quot;color: #ee2323;&quot;&gt;성과를 즉각적으로 평가&lt;/span&gt;하고, &lt;span style=&quot;color: #ee2323;&quot;&gt;비즈니스 전략을 개선&lt;/span&gt;하는 데 도움이 됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;규모 확장성&lt;/b&gt; : ERP 시스템은 &lt;span style=&quot;color: #ee2323;&quot;&gt;클라우드 기반&lt;/span&gt;으로도 제공되므로, &lt;span style=&quot;color: #ee2323;&quot;&gt;기업의 규모가 확장될 때도 쉽게 확장이 가능&lt;/span&gt;합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;안전성과 보안성&lt;/b&gt; : ERP는 강력한 보안 기능을 갖추어 중요한 &lt;span style=&quot;color: #ee2323;&quot;&gt;데이터를 안전하게 관리하고 보호&lt;/span&gt;할 수 있습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;mtext4&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;ERP 시스템 종류&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;SAP(Systems, Applications, and Products in Data Processing)&lt;/b&gt; : SAP는 세계적으로 잘 알려진 ERP 시스템 중 하나로, 다양한 산업 분야의 기업들이 사용하고 있습니다. 모듈화된 설계로 각각의 비즈니스 프로세스를 독립적으로 관리할 수 있으며, 또한 클라우드와 온프레미스 두 가지 구동 방식을 지원합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Oracle&lt;/b&gt; : 글로벌 기업들이 많이 사용하고 있으며, Oracle의 ERP 솔루션은 MRP II, SCM, CRM, HRM 등 다양한 모듈을 제공하며, 또한 클라우드와 온프레미스 두 가지 구동 방식을 지원합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Microsoft Dynamics 365&lt;/b&gt; : D365라고 하는 Microsoft가 개발한 ERP 시스템으로, Office 365와 통합되어 사용할 수 있습니다. D365는 클라우드 기반의 솔루션으로, 비즈니스 프로세스를 즉각적으로 업데이트하고 관리하는 데 도움이 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-v72SQxEabMoPSKqa&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 id=&quot;text2&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; ERP 선택 방법&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 id=&quot;mtext5&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;ERP 도입 전 고려해야 할 사항&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 비즈니스 목표 정의&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ERP 도입의 주요 목적과 기대 효과를 명확히 파악해야 합니다. 예를 들어, 생산성 향상, 재고 관리 개선, 고객 서비스 개선 등이 있습니다.&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;2. 현재 상태 분석&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 비즈니스 프로세스와 IT 시스템을 평가하여 현재의 문제점을 파악합니다. 이는 기존 시스템의 제한사항과 개선 방향성을 이해하는 데 도움이 됩니다.&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;3. 예산 및 시간 계획&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ERP 구축 프로젝트의 예산과 시간 계획을 세웁니다. 이를 통해 프로제그틩 실현 가능성과 리스크를 평가할 수 있습니다.&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;4. 인력 및 교육 계획&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ERP 시스템을 사용하기 위한 인력을 준비하고, 필요한 교육과 훈련을 계획해야 합니다. 이는 ERP 시스템의 적응성과 성공적인 도입을 보장하는 데 중요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;mtext6&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;기업 규모, 업종에 따른 ERP 선택 기준&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 기업 규모&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;소규모 기업&lt;/b&gt; : 비용 효율성이 중요하며, 클라우드 기반 ERP가 적합할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;중소기업&lt;/b&gt; : 다양한 ERP 솔루션을 고려할 수 있으며, 클라우드와 온프레미스 시스템 모두 선택 가능합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;대기업&lt;/b&gt; : 복잡한 비즈니스 프로세스를 관리해야 하므로, 전문적인 ERP 시스템과 자동화가 필요합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 업종&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;제조업&lt;/b&gt; : 생산 계획, 재고 관리, 품질 관리 등이 중요합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;서비스업&lt;/b&gt; : 고객 관계 관리, 서비스 제공 및 지원이 중요합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;IT/소프트웨어 개발&lt;/b&gt; : 소프트웨어 개발 프로세스를 효율적으로 관리해야 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;mtext7&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;ERP 벤더 선정 시 고려해야 할 점&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 기술적 능력&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;시스템 요구사항 충족 가능성&lt;/b&gt; : 선택한 ERP 시스템이 기업의 비즈니스 요구를 충족하는지 확인해야 합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;확장성&lt;/b&gt; : 향후 규모 확장을 고려하여 시스템의 확장성을 평가합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 지원 및 서비스&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;기술 지원&lt;/b&gt; : ERP 시스템 사용 중 발생할 수 있는 문제에 대한 지원이 충분한지 확인합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;교육 및 트레이닝&lt;/b&gt; : ERP 시스템을 적응하기 위한 교육과 훈련 프로그램이 제공되는지 확인합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 비용&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;총비용 계산&lt;/b&gt; : 초기 구축비, 유지보수비, 교육비 등을 포함한 전체적인 비용을 계산하여 비교합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;프로젝트 예산&lt;/b&gt; : ERP 구축 프로젝트의 예산과 일치하는지 확인합니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 id=&quot;text3&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; ERP 구축 및 운영 시 주의해야 할 점&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 id=&quot;mtext8&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;ERP 구축 프로젝트의 단계별 진행 과정&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 요구 분석&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;비즈니스 목표 정의&lt;/b&gt; : ERP 도입 주요 목적과 기대 효과를 명확히 파악&lt;/li&gt;
&lt;li&gt;&lt;b&gt;현재 상태 분석&lt;/b&gt; : 기존 비즈니스 프로세스와 IT 시스템을 평가하여 현재의 문제점을 파악&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 계획 및 설계&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;프로젝트 계획&lt;/b&gt; : 예산, 시간, 리소스 등을 포함한 전체적인 프로젝트 계획&lt;/li&gt;
&lt;li&gt;&lt;b&gt;시스템 설계&lt;/b&gt; : ERP 시스템의 구조와 구성 요소를 설계&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 구현 및 설치&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;시스템 구축&lt;/b&gt; : 설계된 ERP 시스템을 구축하고, 필요한 소스트웨어와 하드웨어를 설치&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 마이그레이션&lt;/b&gt; : 기존 데이터를 새로운 ERP 시스템으로 이전&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 테스트 및 검증&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;시스템 테스트&lt;/b&gt; : ERP 시스템의 모든 기능을 테스트하여 정상적으로 작동 여부 확인&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사용자 교육&lt;/b&gt; : ERP 시스템을 사용하기 위한 교육과 훈련을 진행&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5. 출시 및 운영&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;시스템 출시&lt;/b&gt; : ERP 시스템을 실무에 적용하여 비즈니스를 시작합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;변화 관리&lt;/b&gt; : 시스템의 변경사항을 관리하고, 필요한 업데이트와 유지보수를 진행&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;mtext9&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;데이터 마이그레이션 및 시스템 테스트&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 데이터 마이그레이션&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;데이터 분석&lt;/b&gt; : 기존 데이터의 구조와 내용을 분석하여 새로운 ERP 시스템에 적합하게 변환&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 이전&lt;/b&gt; : 기존 데이터를 새로운 ERP 시스템으로 이전하며, 필요한 데이터 전처리 작업을 수행&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 시스템 테스트&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;단위 테스트&lt;/b&gt; : 각 모듈의 기능을 개별적으로 테스트하여 오류를 확인&lt;/li&gt;
&lt;li&gt;&lt;b&gt;통합 테스트&lt;/b&gt; : 모든 모듈이 통합되어 동작하는지 확인&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사용자 테스트&lt;/b&gt; : 실제 사용자들이 시스템을 활용할 때 발생할 수 있는 문제점을 파악하고 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;mtext10&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;사용자 교육 및 변화 관리&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 사용자 교육&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;교육 계획&lt;/b&gt; : ERP 시스템을 적응하기 위한 교육과 훈련 프로그램을 계획&lt;/li&gt;
&lt;li&gt;&lt;b&gt;교육 진행&lt;/b&gt; : 실제 사용자들이 시스템을 활용할 수 있도록 교육을 진행&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 변화 관리&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;변경 사항 관리&lt;/b&gt; : ERP 시스템의 변경사항을 관리하고, 필요한 업데이트와 유지보수를 진행&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사용자 피드백&lt;/b&gt; : 사용자가 시스템에 대한 피드백을 제공하여 지속적인 개선이 이루어질 수 있도록 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;mtext11&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;ERP 시스템의 안정적인 운영을 위한 유지보수&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 유지보수 계획&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;유지보수 계획&lt;/b&gt; : ERP 시스템의 유지보수를 위한 계획을 세웁니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;예산 및 리소스 할당&lt;/b&gt; : 유지보수 비용과 필요한 리소스를 할당합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 정기적인 업데이트&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;시스템 업데이트&lt;/b&gt; : 시스템에 대한 새로운 기능이나 보안 패치 등을 주기적으로 적용합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사용자 피드백 반영&lt;/b&gt; : 사용자가 시스템에 대한 피드백을 제공하여 지속적인 개선이 이루어 질 수 있도록 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 문제 해결&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;문제 진단 및 해결&lt;/b&gt; : ERP 시스템에서 발생하는 문제를 신속하게 진단하고 해결&lt;/li&gt;
&lt;li&gt;&lt;b&gt;고객 지원&lt;/b&gt; : 사용자가 시스템에 대한 질문이나 문제를 해결할 수 있도록 고객 지원을 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;mtext12&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;ERP와 관련된 최신 트렌드(클라우드 ERP, 모바일 ERP)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 클라우드 ERP&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;장점 : 비용 절감, 확장성, 유연성 등&lt;/li&gt;
&lt;li&gt;적합 시나리오 : 중소기업, 비즈니스 규모가 크지 않은 경우&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 모바일 ERP&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;장점 : 어디서든 접근 가능, 편리한 작업 가능&lt;/li&gt;
&lt;li&gt;단점 : 적합 시나리오 : 필드 근무자, 고객 서비스 담당자 등이 자주 이동하는 경우&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 인공지능 및 머신러닝 기반의 ERP&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;장점 : 예측 분석, 자동화된 결정 지원 등&lt;/li&gt;
&lt;li&gt;적합 시나리오 : 데이터를 활용하여 비즈니스 의사결정을 보다 효과적으로 수행해야 하는 경우&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>ERP</category>
      <category>Enterprise Resource Planning</category>
      <category>ERP</category>
      <category>erp 주의사항</category>
      <category>전사적 자원 관리 시스템</category>
      <author>BlueNoa</author>
      <guid isPermaLink="true">https://bluenoa.tistory.com/99</guid>
      <comments>https://bluenoa.tistory.com/99#entry99comment</comments>
      <pubDate>Sat, 7 Dec 2024 02:22:18 +0900</pubDate>
    </item>
    <item>
      <title>[취미] 자전거의 종류</title>
      <link>https://bluenoa.tistory.com/95</link>
      <description>&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text1&quot;&gt;자전거 종류&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text2&quot;&gt;로드 자전거(Road Bike)&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text3&quot;&gt;산악 자전거(MTB, Mountain Bike)&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text4&quot;&gt;시티 자전거(City Bike)&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text5&quot;&gt;하이브리드 자전거(Hybrid Bike)&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text6&quot;&gt;접이식 자전거(Folding Bkie)&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text7&quot;&gt;BMX 바이크(BMX Bike)&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text8&quot;&gt;전기 자전거 종류&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text9&quot;&gt;전기 로드 자전거&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text10&quot;&gt;전기 산악 자전거(eMTB)&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text11&quot;&gt;전기 도심형 자전거&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text12&quot;&gt;전기 미니벨로&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;

&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 id=&quot;text1&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; 자전거 종류&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 일상 생활에서 자주 접하는 자전거에도 여러 가지 형태가 존재한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자전거를 선물 받아 자가 수리를 도전해보면서 자전거에도 종류가 다양하다는 것을 알게 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;text2&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;1. 로드 자전거(Road Bike)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;66mU7J24.png&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;800&quot;&gt;&lt;a href=&quot;https://www.daejinkr.com/shop/item.php?it_id=1661323565&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMSjvQ/btsEb9KLhmw/eEueIqXGayrK4W5DpwCxE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMSjvQ%2FbtsEb9KLhmw%2FeEueIqXGayrK4W5DpwCxE0%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;585&quot; height=&quot;390&quot; data-filename=&quot;66mU7J24.png&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;800&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;출처 :&amp;amp;nbsp;https://www.daejinkr.com/shop/item.php?it_id=1661323565&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로드 바이크는 포장 도로와 같이 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;고속 주행에 유리한 환경에서 달리기 위해 경량으로 디자인된 자전거&lt;/b&gt;&lt;/span&gt;다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두께가 얇고 단단한 타이어와 경량 프레임(몸체)가 특징이며, 길 위에서 빠른 속도를 경험하고 싶은 사람들에게 적합하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 밖에도 로드 바이크는 힘을 잘 전달할 수 있어 에너지 손실을 줄일 수 있다. 또 핸들의 형태가 드롭바이기 때문에 다양한 자세를 취할 수 있어 장시간 라이딩 중에 피로를 줄일 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로드 바이크도 세분화된 종류가 있는데 간단하게 정리하면 평지에 유리한 에어로 타입, 언덕에서는 올라운드 타입 등 자신이 라이딩 하는 환경에 따라 선택하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;단점&lt;/b&gt;으로 로드 바이크는 전반적으로 꽤 비싼 가격대를 형성하고 있다. 또 타이어가 얇고, 고압의 공기를 넣기 때문에 노면이 고르지 못한 곳에선 자주 타이어 펑크를 겪을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;text3&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;2. 산악 자전거(MTB, Mountain Bike)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20230215_161353.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YLyON/btsD8zKwGI7/OviZk0Jlk5xvp1SMZHHcoK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YLyON/btsD8zKwGI7/OviZk0Jlk5xvp1SMZHHcoK/img.jpg&quot; data-alt=&quot;출처 : 내꺼&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YLyON/btsD8zKwGI7/OviZk0Jlk5xvp1SMZHHcoK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYLyON%2FbtsD8zKwGI7%2FOviZk0Jlk5xvp1SMZHHcoK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;520&quot; height=&quot;390&quot; data-filename=&quot;20230215_161353.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : 내꺼&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;산악 자전거는 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;비포장 도로와 산악 지형에 특화된 자전거로, 두꺼운 타이어와 튼튼한 프레임 바디가 특징&lt;/b&gt;&lt;/span&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자전거의 형태가 일반적인 생활형 자전고와 똑같기 때문에 탑승하는 데 큰 지장이 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사진에서도 보면 알 수 있는만 MTB는 기본적으로 앞바퀴에 서스펜션 또는 쇼바(충격을 흡수해주는 기능)라고 불리는 장치가 장착되어 있기 때문에 노면의 홀이나 균열을 넘어갈때 발생하는 충격에 강하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또 범용성이 좋아서 가파른 오르막길에도 쉽게 올라갈 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MTB의 종류로는 &lt;b&gt;하드테일&lt;/b&gt;과 &lt;b&gt;풀샥&lt;/b&gt;으로 나눠진다. 사진에 있는 내 자전거가 하드테일이며, 뒷바퀴 쪽에 서스펜션(쇼바)이 추가적으로 설계되어 생산된 자전거를 풀샥이라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;단점&lt;/b&gt;으로는 평지 도로에서 매우 느리다... 또한 자전거 자체의 무게도 무거운 편이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;장시간 주행을 하게 되면 손바닥과 손목에 통증이 온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;흔히 깍두기 타이어라고 불리는 산악 타이어를 사용하면 포장도로에서는 금방 닳아 없어질 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;text4&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;3. 시티 자전거(City Bike)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;mH1hBkmht5rIk014DLj9to2xXxgyPXC5KiYgaVbicDJH8w5tmwN3SMyBKd5HfOuFeCIs1LUvXuOfCKpztENlfA.webp&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;654&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckzSL9/btsEdKqwIfP/RAlp7Z7OuYTCYEYuhvZSs0/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckzSL9/btsEdKqwIfP/RAlp7Z7OuYTCYEYuhvZSs0/img.webp&quot; data-alt=&quot;출처 : 나무위키 &amp;quot;따릉이&amp;quot;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckzSL9/btsEdKqwIfP/RAlp7Z7OuYTCYEYuhvZSs0/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckzSL9%2FbtsEdKqwIfP%2FRAlp7Z7OuYTCYEYuhvZSs0%2Fimg.webp&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;557&quot; height=&quot;455&quot; data-filename=&quot;mH1hBkmht5rIk014DLj9to2xXxgyPXC5KiYgaVbicDJH8w5tmwN3SMyBKd5HfOuFeCIs1LUvXuOfCKpztENlfA.webp&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;654&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : 나무위키 &quot;따릉이&quot;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도시형 자전거는 우리가 길에서 흔히 접하는 &quot;따릉이&quot;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도시 환경에서 편안하게 이동하기 위해 디자인된 자전거로 안정적이고 편안한 라이딩을 제공하며, 바구니와 함께 짐을 싣기 편하게 되어 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;text5&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;4. 하이브리드 자전거(Hybrid Bike)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3603&quot; data-origin-height=&quot;2157&quot;&gt;&lt;a href=&quot;https://www.google.com/url?sa=i&amp;amp;url=https%3A%2F%2Fko.wikipedia.org%2Fwiki%2F%25ED%2595%2598%25EC%259D%25B4%25EB%25B8%258C%25EB%25A6%25AC%25EB%2593%259C_%25EC%259E%2590%25EC%25A0%2584%25EA%25B1%25B0&amp;amp;psig=AOvVaw2IRAjlcWgASHmMnq0J96pm&amp;amp;ust=1706713727257000&amp;amp;source=images&amp;amp;cd=vfe&amp;amp;opi=89978449&amp;amp;ved=0CBIQjRxqFwoTCPju5J2yhYQDFQAAAAAdAAAAABAF&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/K77ZC/btsEfugm7Ra/mg3SzHFqg3FEyJkSvPydxK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FK77ZC%2FbtsEfugm7Ra%2Fmg3SzHFqg3FEyJkSvPydxK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;578&quot; height=&quot;346&quot; data-origin-width=&quot;3603&quot; data-origin-height=&quot;2157&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;출처 : 위키백과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하이브리드 자전거는 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;로드 바이크와 MTB의 특징을 혼합한 자전거&lt;/b&gt;&lt;/span&gt;다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로드 자전거의 장점인 공기 저항을 줄이면서 힘을 덜 쓰게 하는 얇은 두께의 타이어와 MTB의 일자 핸들이 특징이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일상 생활에서 간편하게 타기 좋게 설계되어 있으며, 각종 악세사리 예를 들어서 짐받이 등을 부착하기 좋아 출퇴근 및 장보기 등에 활용하기 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이외에도 초보자가 접하기 좋은 자전거이기도 한데 로드 자전거처럼 주행에 특화된 자세를 유지할 필요도 없고, MTB처럼 핸들이 일자형태이기 때문에 전방 시야를 넓게 보기 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;단점&lt;/b&gt;은 하이브리드 제품들이 겪는 문제를 포함한다는 것이다. 즉, 이도저도 아니라는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로드만큼 쾌적하고 빠른 주행 성능이 나오는 것도 아니며, MTB처럼 서스펜션(쇼바)이 존재해서 험지 주행이 가능한 것도 아니기 때문에 찬밥 신세가 되기도 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;(솔직히 MTB 자전거의 휠을 얇은 것으로 바꿔서 고속주행용 타이어를 사용하는 것이 더 좋다고 개인적으로 생각한다.)&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;text6&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;5. 접이식 자전거(Folding Bike)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1000&quot;&gt;&lt;a href=&quot;https://www.google.com/url?sa=i&amp;amp;url=https%3A%2F%2Fnbsports.co.kr%2Fproduct%2F%25EC%2582%25BC%25EC%25B2%259C%25EB%25A6%25AC-%25EB%25A0%2588%25EC%25B2%25B4-20-%25EB%25AF%25B8%25EB%258B%2588%25EB%25B2%25A8%25EB%25A1%259C-%25EC%2595%258C%25EB%25AF%25B8%25EB%258A%2584-%25ED%258F%25B4%25EB%2594%25A9-7%25EB%258B%25A8-%25EC%25A0%2591%25EC%259D%25B4%25EC%258B%259D%25EC%259E%2590%25EC%25A0%2584%25EA%25B1%25B0%2F5485%2F&amp;amp;psig=AOvVaw0MeJaLUxw2SYGHjI2sULkZ&amp;amp;ust=1706714500099000&amp;amp;source=images&amp;amp;cd=vfe&amp;amp;opi=89978449&amp;amp;ved=0CBIQjRxqFwoTCLCOoY61hYQDFQAAAAAdAAAAABAI&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wGZvJ/btsEfmQaCmD/T5Y4SsaZkYLy121X2VtMt1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwGZvJ%2FbtsEfmQaCmD%2FT5Y4SsaZkYLy121X2VtMt1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;455&quot; height=&quot;455&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1000&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;출처 : 엔비 스포츠&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;접이식 자전거는 미니벨로와는 다르다는 점을 강조&lt;/b&gt;&lt;/span&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;미니벨로는 '작은 자전거'라는 뜻으로 휠의 크기가 24인치 미만의 자전거&lt;/b&gt;를 통칭한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 본론으로 들어가서 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;접이식 자전거는 MTB와 미니벨로 등을 포함하여 자전거의 프레임(몸체)을 접을 수 있는 형태의 자전거&lt;/b&gt;&lt;/span&gt;들을 말한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자전거를 접을 수 있다는 것은 공간의 활용성이 높다는 것을 말한다. 그렇기 때문에 미니벨로에 속하는 16인치, 20인치 바퀴 휠을 가진 자전거들은 대중교통과 함께 도심에서 사용하기 쾌적하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아니면 26인치 이상의 큰 휠을 가진 MTB도 접이식 프레임이라면 자동차와 지하철 그리고 고속버스 및 KTX같은 기차에도 탑승할 수 있기 때문에 현대인들에게 가장 적합한 자전거라고 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(단, 산악 주행을 자주 하면 접이식은 비추다. 관절이 많으면 부러질 확률도 큰 법..)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;단점&lt;/b&gt;으로는 접이식 구조에 필요한 부품과 충격을 견뎌야 하는 프레임의 강도 때문에 부피는 작아도 무게는 나갈 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 주행 시 들어가는 힘이 늘어날 수 있다는 것이다. (단, 브롬톰 같은 브랜드 자전거는 무게도 가볍다... 가격은....)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바로 위에서 설명했지만 접이식 구조로 인해 프레임의 내구성이 약해질 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;text7&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;6. BMX 바이크(BMX Bike)&lt;/b&gt;&lt;/span&gt;&lt;/h4&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;720&quot; data-origin-height=&quot;540&quot;&gt;&lt;a href=&quot;https://www.google.com/url?sa=i&amp;amp;url=https%3A%2F%2Fshreddbikes.com%2Fproduct%2F%25ED%2592%2588%25EC%25A0%2588-we-the-people-buck-%25EC%258A%2588%25ED%258D%25BC-%25EC%25BB%25A4%25EC%258A%25A4%25ED%2585%2580-bmx-a%25EA%25B8%2589-%25EC%25A4%2591%25EA%25B3%25A0%2F652%2F&amp;amp;psig=AOvVaw0jJa3_tu0n4Id3mpqdeC5o&amp;amp;ust=1706715352739000&amp;amp;source=images&amp;amp;cd=vfe&amp;amp;opi=89978449&amp;amp;ved=0CBIQjRxqFwoTCKjO8qS4hYQDFQAAAAAdAAAAABBT&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nEazs/btsEbAa3tmx/IFEC1eFzSd5KFXDc1Glvk0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnEazs%2FbtsEbAa3tmx%2FIFEC1eFzSd5KFXDc1Glvk0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;464&quot; height=&quot;348&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;540&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;출처 : 슈레드&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BMX 바이크는 흔히 우리가 예능이나 서양 배경의 영화에서 자주 등장하는 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;트릭이나 점프를 위해 특별 제작된 짧은 프레임의 튼튼한 내구성을 가진 자전거&lt;/b&gt;&lt;/span&gt;다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단, BMX는 휠이 작지만 미니벨로에는 속하지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반 도로에서는 기어가 고정되어 있어서 보통 일어서서 주행하는 경우가 많으며, 경량화를 위해서 브레이크를 모두 제거하는 경우가 많다. (하나만 장착하던가... 참고로 픽시 자전거도 마찬가지다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BMX 자전거의 단점은 구지 서술하진 않겠다. 일반적인 자전거와는 거리가 멀기 때문에 묘기를 즐기는 사람들에게 추천할만하다.&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-v72SQxEabMoPSKqa&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 id=&quot;text8&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; 전기 자전거 종류&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전기 자전거의 형태는 바로 위에서 다룬 자전거의 종류에서 크게 벗어나지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대부분이 기존의 자전거에 전기 모터 구동장치를 추가한 형태이기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기 때문에 전기 자전거의 종류는 크게 보면 &lt;b&gt;전기 로드 자전거, eMTB, 전기 도심형 자전거, 전기 미니벨로&lt;/b&gt; 등으로 구별지을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전기 자전거를 구매할 경우에는 자전거 종류 외에도 &lt;b&gt;구동 방식, 배터리 형태/용량, 접이식 가능 여부, 모터 종류와 출력&lt;/b&gt; 등을 확인하는 것이 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;[전기 자전거 필수 숙지 용어]&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;페달 어시스트(PAS)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라이더가 페달을 밟으면 전동 모터가 전기의 힘으로 도움을 주는 방식이다. 페달을 밟으면 주기적으로 전기 모터가 활성화 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;스토틀(Throttle)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;페달을 밟지 않고도 전동 모터를 직접 사용할 수 있는 방식이다. 오토바이처럼 핸들에 있는 스토를을 당기면 자전거가 작동한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;허브모터&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바퀴 휠(보통 뒷바퀴) 자체에 모터가 장착된 형태로 구동계(스프라켓이나 체인 등)에 무리를 주지 않지만 무게가 많이 증가한다. 허브 모터 내부에는 유성 기어가 탑재되는데 모터의 출력이 500w 이상인 경우 '유성기어 파손'이 자주 발생한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;중앙구동(미드 방식) 모터&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;e-MTB 자전거에서 채택하는 방식이다. 자연스러운 구동감과 허브모터보다 강한 토크 출력을 낼 수 있기 때문에 오르막길과 산악 지형에 강하다. 단, 스프라켓과 체인 같은 구동계가 강한 힘을 버티지 못하고 마모되고 망가질 확률이 크기 때문에 기어 변속에 신경써야 한다. 가장 큰 단점은 가격이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;[전기 자전거 필수 상식]&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 모터 구동 시 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;최고 속력이 25km/h로 제한&lt;/b&gt;&lt;/span&gt;이 되어 있어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 자전거 전체 중량이 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;30kg 미만&lt;/b&gt;&lt;/span&gt;이어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 전기로 구동되는 자전거 및 킥보드 등의 원동기장치는 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;헬멧을 착용하지 않을 경우 범칙금 2만원&lt;/b&gt;&lt;/span&gt;이 부과된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;자전거 도로를 주행&lt;/b&gt;&lt;/span&gt;하기 위해서는 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;PAS방식&lt;/b&gt;&lt;/span&gt; 또는 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;PAS, 스로틀 겸용&lt;/b&gt;&lt;/span&gt;으로 작동되는 자전거만 주행 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 전기 자전거가 자전거 도로에서 주행하기 위해서는 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;모터 출력은 500w이하로 제한&lt;/b&gt;&lt;/span&gt;된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;text9&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;1. 전기 로드 자전거&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;1200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmVImP/btsEdI7sqil/8FYE63Wig44nHYABDZ7eh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmVImP/btsEdI7sqil/8FYE63Wig44nHYABDZ7eh0/img.png&quot; data-alt=&quot;출처 : 다나와&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmVImP/btsEdI7sqil/8FYE63Wig44nHYABDZ7eh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcmVImP%2FbtsEdI7sqil%2F8FYE63Wig44nHYABDZ7eh0%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;492&quot; height=&quot;492&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;1200&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : 다나와&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전기 로드는 내장형 배터리를 사용한다. 아무래도 바람의 저항 등등 생각해보면 프레임 바디 내부에 배터리를 넣는 것이 가장 효율이 좋을 것이다. 그렇기 때문에 배터리 용량에는 한계가 존재한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;솔직히 외관으로만 보면 일반 로드와 구별이 힘들다. 뒷바퀴에 있는 모터를 확인하지 않으면 전기 로드는 정말 구별하기 어렵다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구동 방식은 &lt;b&gt;PAS&lt;/b&gt; 형태다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;text10&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;2. 전기 산악 자전거(eMTB)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;426&quot;&gt;&lt;a href=&quot;https://ebiketips.road.cc/content/advice/buyers-guide/best-electric-mountain-bikes-2023-boost-your-trail-riding-with-an-emtb&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfEVRT/btsEbEEv18x/nwWGAPRsGNrjwYhcbA5D2k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfEVRT%2FbtsEbEEv18x%2FnwWGAPRsGNrjwYhcbA5D2k%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;640&quot; height=&quot;426&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;426&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;출처 : ebiketips&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;풀샥 eMTB는 직접 탑승해보면 정말 최고의 승차감을 느낄 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존의 MTB를 전기 자전거 개조 키트&lt;u&gt;(추천하지 않는다. 전기 자전거는 일반 자전거에 비해 프레임이 튼튼하게 나오기 때문에 처음부터 전기 자전거를 구매하는 것을 추천한다.)&lt;/u&gt; 등을 이용해서 eMTB로 개조하는 방법이 있지만, 처음부터 완성형 eMTB를 구매하면 모터가 페달 쪽에 있는 &lt;b&gt;미드 모터&lt;/b&gt;다. 미드 모터가 토크의 힘을 더 많이 발휘할 수 있기 때문에 뒷바퀴에 모터가 있는 허브 모터에 비해 오르막길과 비포장 도로에서 강한 힘을 낼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단, 스프라켓과 체인은 강한 토크의 힘이 가해지면 박살날 수 있으니 항상 기어 변속을 신경 써야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배터리는 &lt;b&gt;내장형과 외장형 형태를 둘 다 판매&lt;/b&gt;하고 있기 때문에 개인 취향에 맞는 제품을 고르면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;text11&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;3. 전기 도심형 자전거&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;330&quot; data-origin-height=&quot;330&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTQF1U/btsEfsQoIee/WPu2xvI7cQedN7yeKOQBZk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTQF1U/btsEfsQoIee/WPu2xvI7cQedN7yeKOQBZk/img.jpg&quot; data-alt=&quot;출처 : 다나와 - 팬텀 페리아2023&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTQF1U/btsEfsQoIee/WPu2xvI7cQedN7yeKOQBZk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTQF1U%2FbtsEfsQoIee%2FWPu2xvI7cQedN7yeKOQBZk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;330&quot; height=&quot;330&quot; data-origin-width=&quot;330&quot; data-origin-height=&quot;330&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : 다나와 - 팬텀 페리아2023&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도심형 자전거에 허브 모터와 배터리를 장착한 모습이다. 주로 아이를 키우는 어머니들이 이용하기 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뒤에 있는 짐받이를 아이를 태우는 용도의 의자로 개조하거나 가방을 장착하여 장보기 등에 활용하기 좋으며 기본적으로 바구니가 있기 때문에 일상 생활의 범용성은 매우 넓다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단, 대부분의 도심형 전기 자전거(삼천리 자전거 등)는 의자에 배터리가 있기 때문에 매번 충전을 하기 위해서는 안장을 분리해야 한다는 단점이 존재한다. (매번 의자 높이를 다시 조절하는 것은...)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;구동 방식은 PAS 또는 쓰로틀을 지원하거나 둘 다 동시 지원하기도 한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;text12&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;4. 전기 미니벨로&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;330&quot; data-origin-height=&quot;330&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xFeBq/btsEfs3VJDw/2doDMIK5bCAns3anIkwGQ0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xFeBq/btsEfs3VJDw/2doDMIK5bCAns3anIkwGQ0/img.jpg&quot; data-alt=&quot;출처 : 다나와 - 타이탄 700&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xFeBq/btsEfs3VJDw/2doDMIK5bCAns3anIkwGQ0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxFeBq%2FbtsEfs3VJDw%2F2doDMIK5bCAns3anIkwGQ0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;330&quot; height=&quot;330&quot; data-origin-width=&quot;330&quot; data-origin-height=&quot;330&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : 다나와 - 타이탄 700&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미니벨로 자전거에 전기 모터와 배터리를 장착한 형태다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;국내에선 배달용 자전거로 많이 사용되는 제품 라인업이다. 그렇기 때문에 배터리 교체도 외장형으로 간편하며 구동 방식도 PAS와 쓰로틀 모두 지원하고 접이식인 경우가 대부분이기 때문에 일반적인 도시와 흙길 등을 달리기에 적합하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일부 모델은 뒤쪽에도 서스펜션을 장착하기 때문에 승차감까지 확보할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(산악 라이딩을 즐기는 것이 아니라면 전기 미니벨로면 어디든 갈 수 있기 때문에 가장 추천하는 자전거 종류다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;gtx-trans&quot; style=&quot;position: absolute; left: 48px; top: 274.583px;&quot;&gt;
&lt;div class=&quot;gtx-trans-icon&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;</description>
      <category>취미 생활/자전거</category>
      <category>자전거</category>
      <category>자전거 상식</category>
      <category>자전거 종류</category>
      <category>전기 자전거</category>
      <category>전기 자전거 종류</category>
      <category>종류</category>
      <author>BlueNoa</author>
      <guid isPermaLink="true">https://bluenoa.tistory.com/95</guid>
      <comments>https://bluenoa.tistory.com/95#entry95comment</comments>
      <pubDate>Wed, 31 Jan 2024 02:02:56 +0900</pubDate>
    </item>
    <item>
      <title>머신러닝 - 분류(Classification)와 퍼셉트론(Perceptron)</title>
      <link>https://bluenoa.tistory.com/94</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;목차&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text1&quot;&gt;분류(Classification)란?&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text2&quot;&gt;퍼셉트론(Perceptron)&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text3&quot;&gt;퍼셉트론의 구조&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text4&quot;&gt;퍼셉트론의 요소&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text5&quot;&gt;퍼셉트론의 특성&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text6&quot;&gt;가중치 결정(1) - 경사하강법과 손실함수, 힌지 손실&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text7&quot;&gt;가중치 결정(2) - 확률적 경사하강법&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 id=&quot;text1&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; 분류(Classification)란?&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분류는 주어진 &lt;b&gt;입력 데이터를 미리 정의된 클래스 또는 범주로 구분하는 작업&lt;/b&gt;을 의미한다. 즉 &lt;b&gt;비연속적인 값을 예측&lt;/b&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지도학습의 한 유형으로, 모델을 훈련시키기 위해 레이블(정답)이 지정된 훈련 데이터를 사용한다. 각 입력 데이터 포인트는 특징(feature)으로 구성되어 있고, 모델은 이러한 특징을 기반으로 해당 데이터가 어떤 크랠스에 속하는지 예측한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스 또는 범주의 수가 2개면 이진 분류라고 하며, 3개 이상이면 다중클래스 분류(Multiclass Classification)라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;이진 분류(Binary Classification)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 개의 클래스 중 하나로 분류하는 문제다. 예를 들어, 이메일이 스팸인지 아닌지를 판별하는 문제가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;다중 클래스 분류(Multiclass Classification)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세 개 이상의 클래스 중 하나로 분류하는 문제다. 손글씨 숫자를 인식하거나 동물 종을 분류하는 문제가 다중 클래스 분류에 해당한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분류가 사용되는 분야는 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;금융&lt;/b&gt; : 고객의 신용 위험을 평가하는 데 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;의료&lt;/b&gt; : 질병을 진단하는 데 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;보안&lt;/b&gt; : 침입을 감지하는 데 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;소비자&lt;/b&gt; : 제품의 선호도를 예측하는 데 사용&amp;nbsp;&lt;/p&gt;

&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;NOTE : 앞으로 다룰 퍼셉트론, 로지스틱 회귀, SVM과 신경망은 두 클래스의 경계면에 대한 함수(경계면을 나타내는 수식)를 학습한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 id=&quot;text2&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; 퍼셉트론(Perceptron)&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;퍼셉트론은 &lt;b&gt;인공 신경망의 기초를 이루는 간단한 형태의 인공 뉴런&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기 때문에 다중 퍼셉트론은 신경망까지의 개념으로 확장될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프랑크 로젠블라트(Frank Rosenblatt)에 의해 1957년에 제안되었으며, 이는 선형 분류 문제를 위한 간단한 모델이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;text3&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;퍼셉트론의 구조&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%; text-align: left;&quot;&gt;입력층 -&amp;gt; 가중치 -&amp;gt; 편향 -&amp;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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20231228-011826.jpg&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;999&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YpSUJ/btsCG452ZUv/6KKCY1QMKWrpI0z4KydYX0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YpSUJ/btsCG452ZUv/6KKCY1QMKWrpI0z4KydYX0/img.jpg&quot; data-alt=&quot;퍼셉트론 구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YpSUJ/btsCG452ZUv/6KKCY1QMKWrpI0z4KydYX0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYpSUJ%2FbtsCG452ZUv%2F6KKCY1QMKWrpI0z4KydYX0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;999&quot; data-filename=&quot;20231228-011826.jpg&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;999&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;퍼셉트론 구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;손글씨가 악필인 것은... 아쉽다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f89009;&quot;&gt;동작 원리&lt;/span&gt;를 보면 &lt;u&gt;입력층에서 입력값을 받은 후 가중치와 계산 후 합산하여 활성화 함수를 통해서 임계값을 구한다.&lt;/u&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;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;z = w1*x1 + w2*x2 + ..., wn-1 * xn-1 + wn * xn&lt;br /&gt;&lt;br /&gt;y = step(z)&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;text4&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;퍼셉트론의 요소&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.7442%; text-align: center;&quot;&gt;&lt;b&gt; 입력(input)&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.2558%;&quot;&gt;각각의 입력은 하나의 특성(feature)을 나타내며, 이 특성은 실제 데이터에서 추출된 값이다. &lt;br /&gt;위 그림을 참고하면 'x1, x2, ..., xn-1, xn'까지의 값들이 입력층에 해당하는 입력값이다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.7442%; text-align: center;&quot;&gt;&lt;b&gt;가중치(Weight)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.2558%;&quot;&gt;가중치는 해당 입력값에 대한 중요도를 나타내며, 모델이 학습하는 파라미터다.&amp;nbsp;&lt;br /&gt;위 그림을 참고하면 'w0, w1, w2, ..., wn-1, wn' 값들이 가중치에 해당한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.7442%; text-align: center;&quot;&gt;&lt;b&gt;활성화 함수&lt;/b&gt;&lt;br /&gt;&lt;b&gt;(Activation Function)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.2558%;&quot;&gt;가중치를 곱한 입력값들의 합에 활성화 함수를 적용하여 출력값을 생성한다.&lt;br /&gt;활성화 함수는 일반적으로 계단 함수(Step Function)를 사용하며, 출력이 특정 임계값을 넘으면 1, 그렇지 않으면 0을 출력한다.&lt;br /&gt;&lt;br /&gt;활성화 함수에는 'Sign, Sigmoid, Tanh, ReLU, Leaky ReLU' 함수 등이 있다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.7442%; text-align: center;&quot;&gt;&lt;b&gt;임계값(Threshold)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.2558%;&quot;&gt;활성화 함수의 출력이 결정되는 임계값이다.&lt;br /&gt;임계값을 초과하면 1, 아니면 0을 출력한다. 이를 통해서 분류를 한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.7442%; text-align: center;&quot;&gt;&lt;b&gt;편향(Bias Node)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.2558%;&quot;&gt;편향 또는 바이어스 노드라고 불리는 해당 값은 입력 데이터의 평균값을 조절하는 역할을 한다.&lt;br /&gt;편향의 역할은 입력값이 모두 0일 때에도 퍼셉트론이 활성화 되도록 하는 것이다.&lt;br /&gt;즉, 편향을 통해 원점을 지나도록 하여 더 다양한 패턴을 학습할 수 있다.&lt;br /&gt;위 그림을 통해 보면 x0의 값에 해당한다.&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-v72SQxEabMoPSKqa&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 id=&quot;text5&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;퍼셉트론의 특성&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. 선형 분류&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;퍼셉트론은 &lt;b&gt;선형 분리 가능(Linearly Separable)한 문제만을 풀 수 있다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 입력 공간에서 클래스를 구분하는 &lt;span style=&quot;color: #ee2323; background-color: #dddddd;&quot;&gt;&lt;b&gt;초평면(Hyperplane)&lt;/b&gt;&lt;/span&gt;이 존재하는 경우에 효과적으로 작동할 수 있다.&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;NOTE 초평면(Hyperplane)이란?&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초평면이란 &lt;b&gt;결정 경계(Decision Boundary)&lt;/b&gt;를 나타내는 용어다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 2차원 입력 공간에서는 직선이 초평면이 될 수 있다. 해당 &lt;u&gt;&lt;b&gt;직선은 두 클래스(카테고리, 범주)를 나누는 경계를 형성&lt;/b&gt;&lt;/u&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;/b&gt;이 되고, 퍼셉트론은 이러한 초평면을 학습하여 데이터를 분류한다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;퍼셉트론 초평면 시각화.png&quot; data-origin-width=&quot;1800&quot; data-origin-height=&quot;1275&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cr930Q/btsCQ3NfbxE/fBk6Ik5v5ac047TgSIKRaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cr930Q/btsCQ3NfbxE/fBk6Ik5v5ac047TgSIKRaK/img.png&quot; data-alt=&quot;초평면 또는 결정 경계&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cr930Q/btsCQ3NfbxE/fBk6Ik5v5ac047TgSIKRaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcr930Q%2FbtsCQ3NfbxE%2FfBk6Ik5v5ac047TgSIKRaK%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;1800&quot; height=&quot;1275&quot; data-filename=&quot;퍼셉트론 초평면 시각화.png&quot; data-origin-width=&quot;1800&quot; data-origin-height=&quot;1275&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;초평면 또는 결정 경계&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;R - 결정 경계&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1704190717609&quot; class=&quot;r&quot; data-ke-language=&quot;r&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 필요한 라이브러리 로드
library(ggplot2)

# 데이터 생성을 위한 시드 설정
set.seed(123)

# 무작위로 2차원 데이터 생성
data &amp;lt;- data.frame(
  x1 = runif(100, 0, 10),  # 0에서 10까지의 무작위 x1 값
  x2 = runif(100, 0, 10)  # 0에서 10까지의 무작위 x2 값
)

# 퍼셉트론의 초평면을 기준으로 클래스 레이블 생성
data$label = factor(ifelse(2 * data$x1 - 1.5 * data$x2 + 5 + rnorm(100) &amp;gt; 0, 1, 0))

# 초평면을 나타내는 함수 정의
perceptron_hyperplane &amp;lt;- function(x1) {
  return(1.5 * x1 - 5) / 2
}

# 산점도와 퍼셉트론 초평면 시각화
ggplot(data, aes(x = x1, y = x2, color = label)) +
  geom_point() +
  geom_abline(slope = 1.5, intercept = 5/2, linetype = &quot;dashed&quot;, color = &quot;blue&quot;) +
  labs(title = &quot;Perceptron Hyperplane Example&quot;,
       x = &quot;X1&quot;,
       y = &quot;X2&quot;,
       color = &quot;Label&quot;) +
  theme_minimal()&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. 단일 뉴런&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;퍼셉트론은 하나의 뉴런으로 이루어져 있다. 이는 입력과 가중치의 선형 조합을 계산하고 그 결과를 활성화 함수에 통과시켜 출력을 생성한다. 다만 여러 퍼셉트론을 결합하여 다중 퍼셉트론(MLP)과 같은 복잡한 신경망을 생성할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3. AND, OR, NOT 연산&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;퍼셉트론은 선형 분리가 가능한 문제에만 적용이 가능하기 때문에 XOR 같은 비선형 문제를 해결하기에는 한계가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기 때문에 AND, OR, NOT 연산만을 지원하며 XOR 연산을 해결하기 위해 다중 퍼셉트론이 등장했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;&amp;lt;퍼셉트론의 AND, OR, NOT 연산 자세한 내용 + XOR 연산&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;AND 연산 : 논리곱&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력된 값이 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;모두 참일 경우&lt;/span&gt;&lt;/b&gt;에만 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;참이 출력&lt;/b&gt;&lt;/span&gt;되는 논리 연산을 수행한다.&lt;/p&gt;
&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;453&quot; data-origin-height=&quot;237&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWgC8p/btsC4pB579i/xQFDoiIkfhmXX8qXsR8gtk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWgC8p/btsC4pB579i/xQFDoiIkfhmXX8qXsR8gtk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWgC8p/btsC4pB579i/xQFDoiIkfhmXX8qXsR8gtk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWgC8p%2FbtsC4pB579i%2FxQFDoiIkfhmXX8qXsR8gtk%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;262&quot; height=&quot;137&quot; data-origin-width=&quot;453&quot; data-origin-height=&quot;237&quot;/&gt;&lt;/span&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;&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;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1704618412797&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import numpy as np
# AND 연산자
def AND_gate(x1, x2):
    inputs = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.7
    result = np.sum(inputs * w) + b
    # return 1 if result &amp;gt; 0 else 0
    if result &amp;gt; 0:
        print(1)
        return 1
    else:
        print(0)
        return 0

print(&quot;and 연산자&quot;)
AND_gate(0, 0) # 0
AND_gate(1, 0) # 0
AND_gate(0, 1) # 0
AND_gate(1, 1) # 1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;b&gt;&amp;lt;OR 연산자 : 논리합&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력 중 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;하나 이상이 참이면 참이 출력&lt;/b&gt;&lt;/span&gt;되는 논리 연산이다.&lt;/p&gt;
&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;453&quot; data-origin-height=&quot;239&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMjU0B/btsC38HijKJ/CSHsF5f0W7hXTR1b3kDKLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMjU0B/btsC38HijKJ/CSHsF5f0W7hXTR1b3kDKLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMjU0B/btsC38HijKJ/CSHsF5f0W7hXTR1b3kDKLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMjU0B%2FbtsC38HijKJ%2FCSHsF5f0W7hXTR1b3kDKLK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;278&quot; height=&quot;147&quot; data-origin-width=&quot;453&quot; data-origin-height=&quot;239&quot;/&gt;&lt;/span&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;&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;pre id=&quot;code_1704704678510&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# OR 연산자
def OR_gate(x1, x2):
    inputs = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.2
    result = np.sum(inputs * w) + b
    if result &amp;gt; 0:
        print(1); return 1
    else:
        print(0); return 0

print(&quot;OR 연산자&quot;)
OR_gate(0, 0) # 0
OR_gate(1, 0) # 1
OR_gate(0, 1) # 1
OR_gate(1, 1) # 1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;NOT 연산자 : 부정&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1704705712162&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def NOT_gate(x):
    w = -0.5
    b = 0.5
    result = x * w + b
    if result &amp;gt; 0:
        print(1); return 1
    else:
        print(0); return 0

# AND, OR 함수에서 if문의 print 결과를 주석처리한 후 출력하면 깔끔하다.
print(&quot;NOT AND 연산자&quot;)
NOT_gate(AND_gate(0, 0)) # 1
NOT_gate(AND_gate(1, 0)) # 1
NOT_gate(AND_gate(0, 1)) # 1
NOT_gate(AND_gate(1, 1)) # 0
print(&quot;NOT OR 연산자&quot;)
NOT_gate(OR_gate(0, 0)) # 1
NOT_gate(OR_gate(1, 0)) # 0
NOT_gate(OR_gate(0, 1)) # 0
NOT_gate(OR_gate(1, 1)) # 0&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;size18&quot;&gt;&lt;b&gt;&amp;lt;XOR 연산자 : 배타적 논리합&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 입력 값이 서로 다를 때만 결과가 참이 되고, 두 입력 값이 같으면 결과가 거짓이 되는 연산이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 퍼셉트론으로는 구현이 불가능하며 다중 퍼셉트론을 이용하여 구현할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 개의 은닉층을 사용하며 활성화 함수로는 시그모이드 함수를 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 코드는 위에서 사용한 AND, OR, NOT 연산자들을 이용하여 구현하였다.&lt;/p&gt;
&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;452&quot; data-origin-height=&quot;235&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bm7XZ8/btsDivJhSwM/kYZGkqPoWV1oOhom9h3o40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bm7XZ8/btsDivJhSwM/kYZGkqPoWV1oOhom9h3o40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bm7XZ8/btsDivJhSwM/kYZGkqPoWV1oOhom9h3o40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbm7XZ8%2FbtsDivJhSwM%2FkYZGkqPoWV1oOhom9h3o40%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;327&quot; height=&quot;170&quot; data-origin-width=&quot;452&quot; data-origin-height=&quot;235&quot;/&gt;&lt;/span&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;&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;pre id=&quot;code_1704985805013&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def XOR_gate(x1, x2):
    result = OR_gate(AND_gate(x1, NOT_gate(x2)), AND_gate(NOT_gate(x1), x2))
    print(result)
    return result
    
print(&quot;XOR 연산자&quot;)
XOR_gate(0, 0) # 0
XOR_gate(1, 0) # 1
XOR_gate(0, 1) # 1
XOR_gate(1, 1) # 0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;4. 빠른 학습&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;퍼셉트론은 단일 뉴런으로 간단하면서도 학습이 빠르다. 결정경계를 통해서 선형 분리 가능한 문제를 처리하기 때문에 보통의 성능으로 빠른 학습이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;5. 과적합(Overfitting)에 취약&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;과적합이란 간단히 말해서 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;학습 데이터(Traning Data)에서는 높은 성능을 보이지만 처음 보는 데이터에는 낮은 성능을 보이는 현상&lt;/b&gt;&lt;/span&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;과적합은 머신러닝에서 자주 발생하는 현상으로 특징의 수를 줄이거나 여러 제한 사항을 넣거나, 간단한 알고리즘을 사용하여 해결하는 등 여러 방법을 사용할 수 있다. 전통적인 단일 퍼셉트론에는 과적합을 억제하는 기능이 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;과적합의 원인으로는 학습 데이터 양 부족, 모델이 너무 복잡하거나, 특성의 과다 활용, 지나친 학습 시간과 반복, 드롭아웃(정규화), 데이터 불균형 등이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;&amp;lt;TIP : 과소적합(Underfitting)이란?&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;과소적합&lt;/b&gt;&lt;/span&gt;은 학습 데이터에 대해 너무 과하게 학습하여 생기는 과적합과는 반대되는 현상으로 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;학습 데이터에 대해 너무 단순하게 학습되어, 학습 데이터와 테스트 데이터 모두 성능이 낮게 나타나는 현상&lt;/b&gt;&lt;/span&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델이 너무 단순하거나, (다양한)학습 데이터의 양이 적거나 훈련 방법에 문제(너무 과도한 정규화, 잘못된 특징 선택, 클래스 불균형 등)가 있을 경우 발생한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;6. 온라인 학습 방식(Online Learning)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;퍼셉트론은 온라인 학습 방식이다.&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt; 온라인 학습은 데이터를 한 번에 하나씩 순차적으로 학습하며, 새로운 데이터가 도착할 때마다 실시간으로 모델을 업데이트 한다.&lt;/b&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특징을 나열하면 모델은 즉시 데이터를 사용하여 가중치를 업데이트하고 적응한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메모리 효율이 좋고, 실시간으로 변하는 데이터에 대해 유용하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빠른 학습이 가능하지만 노이즈나 이상치에 민감할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터가 끝없이 생성되는 스트리밍 데이터와 같은 경우 유용하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;&amp;lt;TIP : 배치 학습(Batch Learning)이란?&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배치 학습은 온라인 학습과는 상반되는 개념으로 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;전체 데이터 세트를 한 번에 모델에 제공하고, 모델은 전체 데이터에 대한 학습을 수행한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특징으로는 전체 데이터 세트에 대한 핵습을 한 번에 진행하므로 높은 계산 비용을 필요로 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더 안정적이고 일관된 학습 결과를 제공한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대량의 데이터를 모아 한 번에 처리하는 데 유리하며, 학습이 완료된 후에만 모델을 업데이트한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 id=&quot;text6&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; 가중치 결정(1) - 경사하강법과 손실함수, 힌지 손실&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;퍼셉트론에 대해 공부를 하면서 의문이 생기기 시작했다. 가중치는 어떤 원리로 부여하는 건가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;경사 하강법(Gradient Descent)&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;에 대해 숙지해야 한다.&lt;/span&gt;&lt;/span&gt;&amp;nbsp;경사 하강법은 &lt;b&gt;비용 함수(손실 함수, Loss Function) 또는 오차 함수(Error Function)를 최소화하는 방향으로 가중치를 조정하는 최적의 알고리즘&lt;/b&gt; 중 하나이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비용 함수는 실제 출력과 기대 출력 간의 차이를 측정하는 함수로 이 차이를 최소화하기 위해 가중치를 조정하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 같은 용어인 세 개의 함수는 이렇게 구성되어 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;[비용함수 = 손실함수 = 오차 함수] = (실제값 - 예측값)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 가중치 벡터를 w, 입력된 값의 벡터를 x, 정답 레이블(분류될 범주)을 t(1 OR -1)이라고 표현하면 퍼셉트론에서 사용하는 손실 함수인 힌지 손실(Hinge Loss)를 다음과 같이 표현할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;[TIP : 손실 함수(Loss Function)의 종류]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 게시글에서 설명하고 있는 힌지 함수는 퍼셉트론과 SVM(서포트 벡터 머신)에서 주로 사용하는 손실 함수다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각의 손실 함수에 대해 설명하면 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. 힌지 손실(Hinge Loss)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분류 모델에서 사용되며, 마진을 최대화하도록 하는 데 중점을 둔다. 여기서 마진이란 결정 경계와 가장 가까운 데이터의 위치 사이의 거리를 가르키며, 마진이 클수록 결정 경계가 더 안정적이며, 새로운 데이터에 대한 일반화 성능이 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. 평균 제곱 오차(Means Squared Error, MSE)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회귀 문제에서 사용된다. &lt;a href=&quot;https://bluenoa.tistory.com/category/%ED%86%B5%EA%B3%84/%ED%9A%8C%EA%B7%80%EB%B6%84%EC%84%9D%20-%20R%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;회귀 분석에 대한 게시글&lt;/a&gt;에도 잘 정리되어 있으므로 참고하면 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 값과 예측 값 간의 제곱 오차의 평균을 계산한 값이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3. 교차 엔트로피 손실(Corss-Entropy Loss)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분류 문제에서 사용되며, 예측된 확률 분포와 실제 분포 간의 차이를 측정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;4. 로그 손실(Log Loss 또는 Binary Cross-Entropy Loss)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이진 분류에서 사용되며, 예측된 확률과 실제 레이블 간의 로그 변환을 사용하여 손실을 계산한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;885&quot; data-origin-height=&quot;476&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bo1EyT/btsDGI7tVAN/2LqK1DQygHa8ry0QtbURh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bo1EyT/btsDGI7tVAN/2LqK1DQygHa8ry0QtbURh1/img.png&quot; data-alt=&quot;힌지 손실 공식&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bo1EyT/btsDGI7tVAN/2LqK1DQygHa8ry0QtbURh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbo1EyT%2FbtsDGI7tVAN%2F2LqK1DQygHa8ry0QtbURh1%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;885&quot; height=&quot;476&quot; data-origin-width=&quot;885&quot; data-origin-height=&quot;476&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;힌지 손실 공식&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 &lt;b&gt;'y'는 't'&lt;/b&gt;, '&lt;b&gt;w * x = f(x)'&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 위의 식 중 퍼셉트론의 힌지 함수를 기준으로 해석하면 아래와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #781b33;&quot;&gt;&lt;b&gt;-t * w * x &amp;gt; 1 인 경우 &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;값의 결과가 1을 초과한 경우 0을 반환한다. 이는 곧 손실이 없다는 뜻이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #781b33;&quot;&gt; &lt;b&gt;-t * w * x &amp;lt;= 1 인 경우&lt;/b&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1 - t * w * x 이므로 여유가 부족하거나 오분류된 경우로 1과 같거나 작다면 손실이 발생했다는 뜻이다.&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;u&gt;만약 이해가 안된다면 일반식의 y 또는 퍼셉트론 식의 t에 분류가 되는 1 또는 -1의 값을 대입해서 계산해보면 된다.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;[TIP : 힌지 손실 그래프]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;힌지 손실 그래프.png&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;480&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nJzlB/btsDQf5j9zz/znqVG6wkVyWpx4GzR0z2KK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nJzlB/btsDQf5j9zz/znqVG6wkVyWpx4GzR0z2KK/img.png&quot; data-alt=&quot;힌지 손실 그래프&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nJzlB/btsDQf5j9zz/znqVG6wkVyWpx4GzR0z2KK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnJzlB%2FbtsDQf5j9zz%2FznqVG6wkVyWpx4GzR0z2KK%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;448&quot; height=&quot;336&quot; data-filename=&quot;힌지 손실 그래프.png&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;480&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;힌지 손실 그래프&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;힌지 손실은 그래프를 보면 경첩(힌지)처럼 생겼기 때문에 이름이 붙여졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;값이 0보다 작을 때 즉, 잘못 분류하였을 때 y축 loss(손실) 값은 증가하는 것을 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면 제대로 분류한 경우에는 0이 된다. 예측값이 크게 틀릴수록 손실값은 선형으로 증가하는 특성이 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1705903938903&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import numpy as np
import matplotlib.pyplot as plt

def hinge_function(t, w, x_values):
    return np.maximum(0, -t * w * x_values)

# 가중치와 편향을 설정
t = 1
w = 1 # 가중치
b = -0.5 # 임의로 정한 편향, 계산식에는 추가하지 않았다.

# 입력 데이터 생성
x_values = np.linspace(-3, 3, 300) # 라인 범위 -3 ~ 3까지 300개의 값을 지정.

# 힌지 함수 값 계산
hinge_values = hinge_function(t, w, x_values) # 편의상 편향값(b)을 제외했다

# 그래프 그리기
plt.plot(x_values, hinge_values, label='Hinge Function')
plt.axhline(0, color='black', linewidth=0.5, linestyle='--', label='y=0')
plt.axvline(0, color='black', linewidth=0.5, linestyle='--', label='x=0')
plt.xlabel('x_value')
plt.ylabel('max(0, -t * w * x)')
plt.title('Perceptron Hinge Function')
plt.legend()
plt.grid(False)
plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잘못 분류된 데이터의 수가 되도록 작아지는 loss값을 찾아 가중치를 적용하면 이 전체 데이터에 대한 손실값의 합도 최소가 된다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 id=&quot;text7&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; 가중치 결정(2) - 확률적 경사하강법&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가중치 결정(1) 마지막 결론에서도 언급하였지만 &lt;u&gt;손실 함수 loss 즉, 손실값이 최소가 될 때 가장 좋다&lt;/u&gt;고 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 평가하기 위해 일반화 되어 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;모델이 데이터에 부합한지를 나타내는 것이 목적 함수(Objective Function)&lt;/b&gt;&lt;/span&gt;이다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;목적 함수 = 모든 데이터에 대한 손실 함수값의 합&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리하면 목적 함수가 최소라면 가장 최적의 상태라고 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 상태를 만들어 주는 &lt;b&gt;가중치 w값을 구하는 것이 '모델 학습'&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최적의 파라미터(w) 최적화에는 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;확률적 경사하강법(Stochastic Gradient Descent)&lt;/b&gt;&lt;/span&gt;을 많이 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;SGD&lt;/b&gt;는 &lt;u&gt;최적의 목적 함수 값을 구하기 위해 경사가 심한 부분(골짜기)을 조금씩 내려가면서 최적의 파라미터 값을 구한다.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현실 문제에서는 해당 골짜기가 어디에 있는지 모르기 때문에 경사가 가장 심한 곳에서부터 파라미터를 수정해 나간다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 과정에서 목적 함수의 값이 가장 작은 지점에 도달하면 해당 지점의 파라미터 값을 최적값으로 지정한다.&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;학습률(Learning Rate)&lt;/b&gt;이라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파라미터 수정 폭을 &lt;b&gt;'학습률 * 경사'&lt;/b&gt;로 표현하는 데 학습률을 높게 주면 골짜기를 지나쳐 버릴 수 있다. 반대로 너무 적게 지정하면 계산하는 횟수가 증가하므로 학습 속도가 느리다는 단점이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 간단한 방법에서는 학습률은 고정되어 있지만 신경망에서는 해당 값의 선택을 동적으로 수정하는 다양한 방법이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;[TIP : 확률적 경사하강법은 양의 기울기를 가진 2차함수의 기울기를 하나하나 계산한다고 생각하면 된다.]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 최적의 값으로 구해진 가중치 값은 퍼셉트론의 예상값을 계산하는데 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핵심 내용을 요약하면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;퍼셉트론 예상값은 가중치 벡터(w)와 입력 벡터(x)의 곱셈합의 부호에 따라 결정된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 해당 곱셈합을 계단 함수(Step Function)에 통과시킨 것과 같다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜냐하면 계단 함수는 입력값을 +1 또는 -1로 바꿔준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;계단 함수 같은 활성화 함수는 출력값을 비선형 변환해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단, 일반적으로 계단 함수는 0과 1을 출력하지만 퍼셉트론 이진 분류에서는 편의를 위해 1과 -1로 표현한다.&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>파이썬(Python)/머신러닝 공부</category>
      <category>classification</category>
      <category>perceptron</category>
      <category>경사하강법</category>
      <category>머신러닝</category>
      <category>분류 알고리즘</category>
      <category>손실 함수</category>
      <category>퍼셉트론</category>
      <category>확률적 경사하강법</category>
      <category>힌지 손실</category>
      <author>BlueNoa</author>
      <guid isPermaLink="true">https://bluenoa.tistory.com/94</guid>
      <comments>https://bluenoa.tistory.com/94#entry94comment</comments>
      <pubDate>Mon, 22 Jan 2024 16:10:26 +0900</pubDate>
    </item>
    <item>
      <title>머신 러닝(Machine Learning) 알고리즘의 선택</title>
      <link>https://bluenoa.tistory.com/93</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;목차&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text1&quot;&gt;알고리즘 선택 방법 종류&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text2&quot;&gt;알고리즘을 선택 요령&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 id=&quot;text1&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; 알고리즘 선택 방법 종류&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝에 사용되는 알고리즘은 각각의 특성에 따라 사용하는 종류가 달라진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;큰 범주로 보면 세 가지로 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;지도 학습(Supervised Learning), 비지도 학습(Unsupervised Learning), 강화 학습(Reinforcement Learning)&lt;/b&gt;이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;(각 범주에 속해 있는 알고리즘에 대해서는 따로 자세히 다룰 것이다.)&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서도 각 특성으로 정리가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;지도 학습(Supervised Learning)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;레이블(정답)이 있는 데이터로 모델을 훈련하고 예측한다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 20px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 20px;&quot;&gt;&lt;b&gt;회귀(&lt;span style=&quot;background-color: #fdfdfd; color: #000000; text-align: start;&quot;&gt;Regression&lt;/span&gt;)&lt;/b&gt; : 정답과 입력 데이터 변수 간의 관계를 학습하여 새로운 데이터를 통해 연속적인(Continuous) 값을 예측한다.&lt;br /&gt;&lt;b&gt;분류(Classification)&lt;/b&gt; : 데이터가 비연속적(이산형, Discrete) 클래스(범주)로 분류하여 새로운 데이터의 클래스를 예측한다.&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;size18&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;비지도 학습(Unsupervised Learning)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;레이블(정답)이 없는 데이터로 모델을 훈련한다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;군집화(Clustering)&lt;/b&gt; : 데이터의 유사한 특성이나 패턴을 가진 그룹으로 나눈다.&lt;br /&gt;&lt;b&gt;차원 축소(Dimensionality Reduction)&lt;/b&gt; : 고차원의 데이터를 저차원으로 변환하는 과정을 통해 시각화 또는 계산량 절감을 목적으로 매핑한다.&lt;br /&gt;&lt;b&gt;이상 탐지(Anomaly Detection)&lt;/b&gt; : 데이터 집합에서 일반적인 패턴과는 다른 패턴을 갖는 비정상적인 사례를 탐지하는 과정을 의미한다. 정상적인 데이터의 패턴을 학습한 후, 새로운 데이터가 학습된 패턴과 얼마나 다른지를 평가하여 데이터를 식별한다.&lt;br /&gt;&lt;b&gt;고빈도 패턴 마이닝(High-Frequency Pattern Mining)&lt;/b&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;size18&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;강화 학습(Reinforcement Learning)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;에이전트(Agent : 의사 결정을 하는 주체, 강화 학습의 대상이되는 주체)&lt;/b&gt;가 &lt;b&gt;환경(Environment : 에이전트가 상호 작용하는 대상이며, 에이전트의 행동에 반응하여 상태가 변하고, 보상을 제공한다.)&lt;/b&gt;과 상호작용하며 어떤 작업을 수행 후, 그 결과로 얻은 &lt;b&gt;보상(Reward : 에이전트의 행동 후 환경으로부터 받는 피드백, 목표는 누적된 보상을 최대화 하는 것)&lt;/b&gt;을 최대화하기 위해 학습하는 방법이다.&lt;/p&gt;

&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 id=&quot;text2&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; 알고리즘 선택 요령&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://scikit-learn.org/stable/tutorial/machine_learning_map/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;사이킷런 튜토리얼 홈페이지&lt;/a&gt;에서는 각 상황에 선택할 수 있는 컨닝 페이퍼(Cheat-Sheet)를 제공해주고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 사이트의 표를 보기 편하게 임의로 정리해보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(작은 글씨로 써놓은 설명 글이 안보인다면 Ctrl + 마우스 휠로 확대/축소 해서 볼 수 있다.)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_2152.jpg&quot; data-origin-width=&quot;1055&quot; data-origin-height=&quot;965&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzyOZ3/btsCxBwL0K1/f9ZKpXIwVWOXQ2zSzy2WdK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzyOZ3/btsCxBwL0K1/f9ZKpXIwVWOXQ2zSzy2WdK/img.jpg&quot; data-alt=&quot;알고리즘 선택 요령&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzyOZ3/btsCxBwL0K1/f9ZKpXIwVWOXQ2zSzy2WdK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzyOZ3%2FbtsCxBwL0K1%2Ff9ZKpXIwVWOXQ2zSzy2WdK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1055&quot; height=&quot;965&quot; data-filename=&quot;IMG_2152.jpg&quot; data-origin-width=&quot;1055&quot; data-origin-height=&quot;965&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;알고리즘 선택 요령&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-v72SQxEabMoPSKqa&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>파이썬(Python)/머신러닝 공부</category>
      <category>머신러닝</category>
      <category>알고리즘</category>
      <category>알고리즘 선택 방법</category>
      <category>알고리즘 선택 요령</category>
      <category>알고리즘 종류</category>
      <author>BlueNoa</author>
      <guid isPermaLink="true">https://bluenoa.tistory.com/93</guid>
      <comments>https://bluenoa.tistory.com/93#entry93comment</comments>
      <pubDate>Tue, 26 Dec 2023 15:06:55 +0900</pubDate>
    </item>
    <item>
      <title>머신러닝(Machine Learning) - 개요 / 시작</title>
      <link>https://bluenoa.tistory.com/92</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;목차&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text1&quot;&gt;머신러닝이란?&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text2&quot;&gt;머신러닝의 작동 원리&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text3&quot;&gt;프로젝트 생성 과정&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text4&quot;&gt;머신러닝 적용 문제 대처&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text5&quot;&gt;머신러닝 프로젝트 역할군&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text6&quot;&gt;머신러닝 프로젝트와 일반적인 프로젝트의 유사점과 차이점&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 id=&quot;text1&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; 머신러닝이란?&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝은 컴퓨터 시스템이 데이터를 학습하며 학습 과정의 내용을 기반으로 판단, 예측, 결정을 내리는 인공 지능(AI)의 한 분야다. 이는 명시적(쉽게 관찰되거나, 명확한)인 &lt;b&gt;프로그래밍 없이&lt;/b&gt;도 &lt;b&gt;컴퓨터가 경험을 통해 학습하고 새로운 데이터에 대한 판단을 수행할 수 있도록 하는 기술&lt;/b&gt;이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;

&lt;h2 id=&quot;text2&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; 머신러닝의 작동 원리&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝은 과거의 경험(데이터)을 기반으로 예측을 하는 데 주로 사용된다. 과거 우리 조상들은 관측 도구(측우기 등)를 통해 매일매일 날씨를 기록하여 &quot;내년 7월 20일엔 비가 올 확률이 높다.&quot; 같은 기록 예측을 하였다. 현대에는 '스팸 메일 필터링'이나 '상품 추천 서비스' 등이 대량의 과거 데이터를 기반으로 예측을 수행하는 원리와 비슷하다.&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;'지도학습(Supervised Learning)'&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 자료를 이용하여 도출된 결과(&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;모델*&lt;/b&gt;&lt;/span&gt;)로 예측을 수행하는 데 여기서 입력되는 데이터로는 이미지의 RGB 값들이나 기온이나 속도 등의 수치(벡터화한 것)들이 있다. 출력 데이터는 수치 또는 유형이 될 수 있다.&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;- 모델이란?&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주어진 입력에서 출력을 예측하는 데 사용되는 수학적인 관계를 수식이나 규칙을 통해 표현한 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델은 훈련 데이터로 학습되며, 이를 기반으로 새로운 데이터에 대한 예측을 수행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주로 매개변수와 특징(알고리즘)으로 구성된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;- 모델의 종류&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 회귀 모델(Regression Model)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출력이 연속적인 값을 가지는 경우 사용. 예를 들어 주택 가격과 같은 문제에 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 분류 모델(Classification Model)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출력이 이산적인 클래스 또는 레이블을 가지는 경우 사용. 스팸 여부 판별, 이미지 분류 등에 해당된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3 .신경망(Neural Network)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인공 신경망은 머신러닝에서 널리 사용되는 모델 중 하나로, 생물학적 뉴런의 작동을 모방한 구조를 갖고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 결정 트리(Decision Tree)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;의사 결정 규칙을 트리 구조로 표현한 모델로, 해석이 쉽고 설명력이 높다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&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;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;제목 없는 다이어그램.drawio.png&quot; data-origin-width=&quot;421&quot; data-origin-height=&quot;291&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WD2gs/btsBfwg72Ys/k6t6H80Tl9eIB5KLUOkLw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WD2gs/btsBfwg72Ys/k6t6H80Tl9eIB5KLUOkLw1/img.png&quot; data-alt=&quot;학습 단계와 에측 단계의 과정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WD2gs/btsBfwg72Ys/k6t6H80Tl9eIB5KLUOkLw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWD2gs%2FbtsBfwg72Ys%2Fk6t6H80Tl9eIB5KLUOkLw1%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;421&quot; height=&quot;291&quot; data-filename=&quot;제목 없는 다이어그램.drawio.png&quot; data-origin-width=&quot;421&quot; data-origin-height=&quot;291&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;학습 단계와 에측 단계의 과정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;▶ 학습 단계(Training)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 데이터 수집&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;모델 학습을 위한 레이블이 지정된 훈련 데이터를 수집하며, 데이터는 특징(feature)과 그에 대응하는 정답(label or target)으로 이루어져 있다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 특징 추출&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;훈련 데이터에서 모델이 학습할 수 있는 특징을 추출한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 모델 선택&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;적절한 머신 러닝 알고리즘과 모델 아키텍처를 선택한다. 예측해야 되는 데이터의 성격과 특성을 고려해야 한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 손실 함수(평균 제곱 오차 MSE 등)와 최적화&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;모델의 성능을 측정하기 위해 손실 함수를 정의하고, 함수를 최소화하도록 모델을 학습시키는 최적화 알고리즘을 사용한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5. 모델 학습&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;훈련 데이터를 사용하여 모델의 가중치(Weight)와 편향(Bias)을 조정하여 손실 함수를 최소화하는 방향으로 학습&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt; &lt;b&gt;▶ 예측 단계(Inference or Prediction)&lt;/b&gt; &lt;/span&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 새로운 데이터 입력&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학습된 모델로부터 새로운 즉, 이전에는 입력하지 않은 데이터를 제공한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 특징 추출&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 데이터에서도 모델이 학습한 것과 유사한 특징을 추출한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 모델 예측&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추출된 특징을 사용하여 모델은 새로운 입력에 대한 예측을 수행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 평가&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델이 새로운 데이터에서 얼마나 정확한 예측을 했는지 평가한다. 지표로는 정확도, 정밀도, 재현율 등이 포함된다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-v72SQxEabMoPSKqa&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 id=&quot;text3&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; 프로젝트 생성 과정&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝 프로젝트는 일련의 과정을 거쳐야 한다.&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 문제 정의 및 이해&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트의 &lt;b&gt;목표를 명확히 이해하고 정의&lt;/b&gt;해야 한다. 어떤 문제를 해결하려고 하는지, 어떤 유형의 모델을 필요로 하는지 등을 결정해야 하며, 해당 문제가 비즈니스나 실제 응용 분야와 어떻게 연결되는지 이해해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 머신러닝을 사용하는 방법이 적절한지 검토하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝에 대한 글을 작성하는 데 머신러닝을 사용하지 않아야 하는 경우를 생각해야 한다는 것이 아이러니 하지만 모든 문제에 대해 머신러닝 기술을 사용하면 또 다른 문제가 발생할 수 있기 때문이다. 예를 들어 다음과 같다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;2-1. 확률적인 부분이 존재하여 테스트가 어려운 경우&lt;br /&gt;2-2. 오랜 시간 사용하면 사용자의 의견이 바뀌어서 데이터에 영향이 가는 경우&lt;br /&gt;2-3. 처리 파이프라인이 복잡해지는 경우&lt;br /&gt;2-4. 데이터 의존관계가 복잡한 경우&lt;br /&gt;2-5. 실험 코드 또는 파라미터가 포함되는 경우&lt;br /&gt;2-6. 개발 시스템과 운영 시스템 간의 언어 또는 프레임워크가 다른 경우&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;3. 시스템 설계&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템 설계는 &lt;b&gt;예측 결과를 어떤 방법으로 사용할 것인지를 결정&lt;/b&gt;하는 단계다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 &lt;b&gt;RDB(관계형 데이터베이스)를 통해 배포하는 방법&lt;/b&gt;, &lt;b&gt;웹서비스나 애플리케이션에서 사용자 액션마다 비동기적으로 예측하는 방법&lt;/b&gt; 등이 있다. 또 필연적으로 존재하는 오류를 어떻게 대처할 것인지를 고려해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 설계 기간의 목표 &quot;일정 기간 안에 정확도 90%를 달성한다.&quot; 등을 구성해두는 것이 좋다.&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;4. 데이터 수집과 전처리&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 해결에 필요한 데이터를 수집하고, 데이터의 양과 품질은 모델의 성능에 큰 영향을 미친다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;수집한 데이터&lt;/b&gt;는 시각화하여 &lt;b&gt;데이터 특성을 이해&lt;/b&gt;하거나 &lt;b&gt;이상치&lt;/b&gt; 또는&lt;b&gt; 패턴&lt;/b&gt;을 &lt;b&gt;발견하여 데이터 전처리&lt;/b&gt;를 해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;데이터 전처리&lt;/b&gt;는 불필요한 정보를 제외하고, 데이터를 머신러닝에 사용할 수 있는 형태로 바꾸는 과정이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(1) 결측치 처리&lt;/b&gt; : 수치 데이터의 누락값이나 정상 범위를 벗어난 이상값을 처리한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(2) 특징 공학&lt;/b&gt; : 모델에 사용할 수 있는 적절한 특징을 추출하거나 변형한다. 여기서 특징은 모델에 입력될 정보를 뜻한다. 범주형 데이터인 경우 더미 변수를 사용하여 수치화한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(3) 정규화 및 표준화&lt;/b&gt; : 텍스트 데이터는 단어별 빈도를 세어 빈도가 낮은 단어를 제거하는 등의 조치를 취한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5. 모델 선택(알고리즘 선택)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(1) 모델 선택&lt;/b&gt; : 과거에 비슷한 유형의 자료를 어떻게 풀었는지 조사해서 적합한 회귀, 분류, 클러스터링 등의 모델 또는 스캐터플롯 매트릭스로 시각화하여 모델을 선택한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(2) 학습 데이터 분할&lt;/b&gt; : 전체 데이터를 학습 데이터와 테스트 데이터로 나누어 모델을 훈련하고 검증한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(3) 모델 훈련&lt;/b&gt; : 선택한 모델을 학습 데이터에 맞게 훈련시킨다. 손실 함수를 최소화하도록 매개변수를 조정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;6. 모델 평가&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;테스트 데이터 평가&lt;/b&gt; : 모델을 테스트 데이터에 적용하여 성능을 평가한다. 정확도, 정밀도, 재현율 등의 지표를 사용하여 모델의 성능을 측정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;결과 해석&lt;/b&gt; : 모델의 결과를 해석하고, 비즈니스 요구 사항과 얼마나 일치하는지 확인한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;7. 모델 개선(파라미터 튜닝)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예측 모델에서 99.9%와 같이 아주 높은 성능이 나온다면 의심을 해야 한다. 이런 경우 테스트 데이터에서만 성능이 좋고 처음 보는 데이터에서는 예측을 못하는 '과적합'이거나 테스트 데이터가 일부 섞여 발생하는 '데이터 유출'이 생긴 것이다.&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;교차검증(Cross Validation)&lt;/b&gt;'을 사용하여 평균 성능이 높은 하이퍼파라미터를 선택한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;하이퍼파라미터&lt;/b&gt;&lt;/span&gt;란 &lt;u&gt;신경망의 은닉층 개수&lt;/u&gt;나 &lt;u&gt;로지스틱 회귀의 문턱값&lt;/u&gt;처럼 모델의 &lt;i&gt;&lt;u&gt;성능을 좌우&lt;/u&gt;&lt;/i&gt;할 수 있는 값이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;교차검증에 대해 작성했던 이전 게시글&quot; href=&quot;https://bluenoa.tistory.com/55&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://bluenoa.tistory.com/55&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1701495791221&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;교차 검증(Cross Validation)&quot; data-og-description=&quot;&amp;middot; 교차검증(Cross Validation) 일반적으로 데이터를 사용할 때 dataset에는 Train과 Test로 나눌 데이터(독립변수 또는 Feature)와 Label(종속변수 또는 결과)로 구성되어 있다. ※ 참고로 scikit learn에선 default &quot; data-og-host=&quot;bluenoa.tistory.com&quot; data-og-source-url=&quot;https://bluenoa.tistory.com/55&quot; data-og-url=&quot;https://bluenoa.tistory.com/55&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ySWlj/hyUFeW2pU7/uETZanrUVjlWttUB6y4A8k/img.png?width=800&amp;amp;height=160&amp;amp;face=0_0_800_160,https://scrap.kakaocdn.net/dn/dWftoR/hyUICBWEYr/qB2pbh5eHKLPfx72rNtyv0/img.png?width=800&amp;amp;height=160&amp;amp;face=0_0_800_160,https://scrap.kakaocdn.net/dn/rRDpD/hyUIET34NB/m8nl0y0Wo23M5p4pKhLm2K/img.png?width=1321&amp;amp;height=964&amp;amp;face=0_0_1321_964&quot;&gt;&lt;a href=&quot;https://bluenoa.tistory.com/55&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bluenoa.tistory.com/55&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ySWlj/hyUFeW2pU7/uETZanrUVjlWttUB6y4A8k/img.png?width=800&amp;amp;height=160&amp;amp;face=0_0_800_160,https://scrap.kakaocdn.net/dn/dWftoR/hyUICBWEYr/qB2pbh5eHKLPfx72rNtyv0/img.png?width=800&amp;amp;height=160&amp;amp;face=0_0_800_160,https://scrap.kakaocdn.net/dn/rRDpD/hyUIET34NB/m8nl0y0Wo23M5p4pKhLm2K/img.png?width=1321&amp;amp;height=964&amp;amp;face=0_0_1321_964');&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;교차 검증(Cross Validation)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;middot; 교차검증(Cross Validation) 일반적으로 데이터를 사용할 때 dataset에는 Train과 Test로 나눌 데이터(독립변수 또는 Feature)와 Label(종속변수 또는 결과)로 구성되어 있다. ※ 참고로 scikit learn에선 default&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;bluenoa.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;과적합에 대한 이전 게시글&quot; href=&quot;https://bluenoa.tistory.com/46&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://bluenoa.tistory.com/46&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1701495835086&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;회귀분석의 과적합(Overfitting)&quot; data-og-description=&quot;&amp;middot; 과적합(Overfitting) 과적합이란 데이터 분석을 진행함에 있어 모델 학습을 과하게 한 경우를 말한다. 학습 데이터에 대한 분석을 과하게 해서 실제 데이터에 대한 적중률이 떨어져서 오차가 증&quot; data-og-host=&quot;bluenoa.tistory.com&quot; data-og-source-url=&quot;https://bluenoa.tistory.com/46&quot; data-og-url=&quot;https://bluenoa.tistory.com/46&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/2hKmz/hyUItrtaJ9/IkRBktoWfs8ztYOiTVGNPk/img.jpg?width=800&amp;amp;height=455&amp;amp;face=0_0_800_455,https://scrap.kakaocdn.net/dn/iDW4B/hyUFc5Yf5b/Km5bQCr8IeisNUbP0zlx1k/img.jpg?width=800&amp;amp;height=455&amp;amp;face=0_0_800_455,https://scrap.kakaocdn.net/dn/hG2Kc/hyUE5MwrMK/5AQ1WQdxu3OjAkgBzACOd1/img.jpg?width=1753&amp;amp;height=999&amp;amp;face=0_0_1753_999&quot;&gt;&lt;a href=&quot;https://bluenoa.tistory.com/46&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bluenoa.tistory.com/46&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/2hKmz/hyUItrtaJ9/IkRBktoWfs8ztYOiTVGNPk/img.jpg?width=800&amp;amp;height=455&amp;amp;face=0_0_800_455,https://scrap.kakaocdn.net/dn/iDW4B/hyUFc5Yf5b/Km5bQCr8IeisNUbP0zlx1k/img.jpg?width=800&amp;amp;height=455&amp;amp;face=0_0_800_455,https://scrap.kakaocdn.net/dn/hG2Kc/hyUE5MwrMK/5AQ1WQdxu3OjAkgBzACOd1/img.jpg?width=1753&amp;amp;height=999&amp;amp;face=0_0_1753_999');&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;회귀분석의 과적합(Overfitting)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;middot; 과적합(Overfitting) 과적합이란 데이터 분석을 진행함에 있어 모델 학습을 과하게 한 경우를 말한다. 학습 데이터에 대한 분석을 과하게 해서 실제 데이터에 대한 적중률이 떨어져서 오차가 증&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;bluenoa.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;또는 규제화를 사용하거나 학습곡선으로 시각화하여 살펴보는 방법이 존재한다.&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;8. 배포 및 유지보수&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;모델 배포&lt;/b&gt; : 최종 모델을 실제 운영 환경에 배포한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;모니터링 및 유지보수&lt;/b&gt; : 모델의 성능을 모니터링하고 필요에 따라 업데이트와 유지보수를 한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 id=&quot;text4&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; 머신러닝 적용 문제 대처&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바로 위에서 설명한 &lt;u&gt;&lt;b&gt;프로젝트 생성 과정의 2번(&lt;span style=&quot;color: #ee2323;&quot;&gt;표 참고&lt;/span&gt;)&lt;/b&gt;&lt;/u&gt;에서 머신러닝을 적용하기 적절한지 검토해야 되는 경우에 대해 정리했었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 문제에 대해 대응하는 방법을 정리하려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;1. 황금 기준을 적용하여 모니터링한다.(2-1, 2-2, 2-4)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확률적인 문제, 응답자의 의견이 바뀌는 경우, 데이터 간의 의존관계가 존재할 때 황금 기준을 적용하여 사람이 모니터링을 해야 한다. 여기서 '&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;황금 기준&lt;/b&gt;&lt;/span&gt;'이란 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;모델의 성능을 평가하고 비교하는 데 사용되는 기준&lt;/b&gt;&lt;/span&gt;을 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 모델이 얼마나 효과적으로 작동하는지 측정하고 다른 모델이나 방법과 비교할 때 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다양한 문제와 모델에 따라 사용되는 황금 기준도 다르기 때문에 이를 적절히 잘 검토해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대표적인 황금 기준의 예시는 다음과 같다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 364px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 364px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 364px;&quot;&gt;&lt;b&gt;(1) 정확도(Accuracy)&lt;/b&gt;&lt;br /&gt;가장 기본적이고 널리 사용되는 평가 기준이기도 하다. &lt;u&gt;전체 샘플 중에 올바르게 예측한 비율&lt;/u&gt;을 나타낸다.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;(2) 정밀도(Precision)와 재현율(Recall)&lt;/b&gt;&lt;br /&gt;&lt;u&gt;이진 분류&lt;/u&gt; 문제에서 사용되며, 양성 클래스(관심을 가지고 예측하려는 대상)의 대한 &lt;u&gt;정확성&lt;/u&gt;과 해당 클래스의 &lt;u&gt;실제 존재율을 측정&lt;/u&gt;한다. 미세 조정이 필요한 상황에서 황금 기준으로 사용된다.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;(3) F1 스코어&lt;/b&gt;&lt;br /&gt;&lt;u&gt;정밀도와 재현율의 조화 평균&lt;/u&gt;(역수들의 산순 평균)으로, 두 지표 사이의 균형을 나타낸다.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;(4) 평균 제곱 오차(MSE, Mean Squared Error) 또는 평균 절댓값 오차(MAE, Mean Absolute Error)&lt;/b&gt;&lt;br /&gt;&lt;u&gt;회귀 문제&lt;/u&gt;에서 사용되며, 예측 값의 실제 값 간의 차이를 나타낸다.&lt;br /&gt;&lt;br /&gt;(5) ROC-AUC(Receiver Operating Characteristic - Area Under the Curve)&lt;br /&gt;이진 분류 문제에서 모데르이 성능을 시각화하고 측정하는 데 사용되는 방법 중 하나다.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;(6) 특정 도메인에 따른 특별한 메트릭&lt;/b&gt;&lt;br /&gt;&lt;u&gt;특정 응용 분야&lt;/u&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;2. 예측 모델의 알고리즘에 대한 A/B 테스트를 실시한다.(2-2)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;과거 응답자의 응답과 시간이 지나 동일한 응답자의 응답 결과가 바뀌는 경우가 존재하거나 모듈의 개선 전/후 등이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기 때문에 'A/B 테스트'를 사용하는 데 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;A/B 테스트&lt;/span&gt;란 두 가지 또는 그 이상의 변형을 비교하여 어떤 변형이 더 효과적이었는지를 판단하는 실험적인 방법&lt;/b&gt;이다. 이를 모듈화한 알고리즘에 대입해서 보면 여러 모델을 두고 병렬로 A/B 테스트를 진행할 수 있다.&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;A/B 테스트로는 &lt;b&gt;랜덤화&lt;/b&gt;(참가자들을 랜덤으로 할당),&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;변형&lt;/b&gt;(Variations : A그룹과 B그룹으로 전/후 비교),&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;목표 지표&lt;/b&gt;(Metric : 실험 목적에 따라 성과 지표를 선택하고 측정한다. 대표적으로 크릭률, 구매율, 이용자 유입 등),&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;통계적 검정&lt;/b&gt;(실험이 통계적으로 유의미한지 확인),&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;실시간 모니터링&lt;/b&gt;(실험 중에는 지속적으로 결과를 모니터링하고, 언제든지 중간에 실험을 중단하거나 수정하는 것) 등이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;3. 모델을 버전 관리하여 언제든 원하는 시점으로 롤백(2-4, 2-5)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 사이의 의존 관계 또는 코드나 파라미터 등의 수정 또는 데이터 형식 변경, 처리 과정 중 문제 발생으로 인해 예측 성능이 떨어지거나 예측 불가한 상황이 올 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기 때문에 이전 버전의 모델로 언제든지 롤백할 수 있도록 해야만 한다. &lt;b&gt;소스 코드, 모델, 데이터 전부 버전별로 관리&lt;/b&gt;하는 것이 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;4. 데이터 처리 파이프라인 저장(2-3, 2-5)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 처리 파이프라인이란 &lt;b&gt;데이터를 수집하고, 정제, 저장, 분석하는 일련의 작업 단계&lt;/b&gt;를 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 과정을 저장하기 때문에 하이퍼 파라미터, 전처리 과정, 예측 모델 구축 등 파라미터의 수가 많아지고 데이터가 복잡해지는 경우 저장한 파이프라인을 조정하여 사용할 수 있다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 데이터를 비즈니스나 분석 목적에 맞게 효과적으로 처리하고 활용하기 위한 구조적인 체계를 제공한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사이킷런(파이썬 머신 러닝 라이브러리)이 추상화가 잘 되어 있어 데이터 처리를 파이프라인으로 만들기 수월하다. 또 이에 영향을 받은 스파크 등의 라이브러리 역시 파이프라인을 통해 재사용이 가능하다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;※ 파이프라인 과정&lt;/b&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. 데이터 수집(Data Collection)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 원천 데이터 수집&lt;/b&gt; : 외부 소스, 로그 파일, 센서 등에서 원천 데이터를 수집한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 이벤트 추적&lt;/b&gt; : 웹사이트 또는 응용 프로그램에서 발생하는 이벤트를 추적하고 수집한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- API 호출&lt;/b&gt; : 외부 서비스나 데이터베이스에서 데이터를 가져오기 위해 API를 호출한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. 데이터 전처리(Data Preprecessing)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 데이터 정제 :&lt;/b&gt; 불완전하거나 오류가 있는 데이터를 정제하고 처리한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 변환 및 통합&lt;/b&gt; : 데이터를 필요한 형식으로 변환하고 여러 소스의 데이터를 통합한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 데이터 샘플링&lt;/b&gt; : 대규모 데이터셋에서 불필요한 부분만을 추출하여 처리한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3. 데이터 저장(Data Storage)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 데이터베이스 저장&lt;/b&gt; : 구조화된 데이터를 DB에 저장하여 검색과 분석을 용이하게 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 분산 저장 시스템&lt;/b&gt; : 대용량의 데이터를 효과적으로 저장하기 위해 분산 저장 시스템을 활용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 클라우드 스토리지&lt;/b&gt; : 클라우드 기반의 스토리지 서비스를 사용하여 저장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;4. 데이터 처리(Data Processing)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 배치 처리&lt;/b&gt; : 주기적으로 일관적으로 데이터를 처리하는 방식으로 대용량 데이터를 처리한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 스트리밍 처리&lt;/b&gt; : 실시간으로 데이터를 처리하고 분석하여 실시간 통찰력을 제공한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 머신 러닝 모델 적용&lt;/b&gt; : 데이터를 기반으로 머신 러닝 모델을 훈련하고 적용하여 예측, 분류 작업을 수행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;5. 결과 제공 및 시각화(Result Delivery &amp;amp; Visualization)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 대시보드 및 리포트&lt;/b&gt; : 데이터의 요약된 정보를 제공하는 대시보드 및 리포트를 생성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 시각화 도구 활용&lt;/b&gt; : 데이터를 시각적으로 표현하여 이해하기 쉽고 의사 결정에 도움이 되는 시각화를 제공한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;6. 모니터링 및 유지보수(Monitoring &amp;amp; Maintenance)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 성능 모니터링&lt;/b&gt; : 데이터 처리 파이프라인의 성능을 지속적으로 모니터링하고 병목 현상을 확인한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 오류 처리&lt;/b&gt; : 데이터 품질이나 파이프라인 실행 중 발생하는 오류를 식별하고 처리한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 유지보수&lt;/b&gt; : 변경된 데이터 소스, 새로운 요구 사항 등에 대응하기 위해 파이프라인을 유지보수한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;제목 없는 다이어그램.drawio (2)-enhance-4x.png&quot; data-origin-width=&quot;2284&quot; data-origin-height=&quot;1680&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfi5F4/btsBFKgk5qq/k2PQsAX36uUMvGq2OUKncK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfi5F4/btsBFKgk5qq/k2PQsAX36uUMvGq2OUKncK/img.png&quot; data-alt=&quot;데이터 처리 파이프라인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfi5F4/btsBFKgk5qq/k2PQsAX36uUMvGq2OUKncK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbfi5F4%2FbtsBFKgk5qq%2Fk2PQsAX36uUMvGq2OUKncK%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;2284&quot; height=&quot;1680&quot; data-filename=&quot;제목 없는 다이어그램.drawio (2)-enhance-4x.png&quot; data-origin-width=&quot;2284&quot; data-origin-height=&quot;1680&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;데이터 처리 파이프라인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;5. 개발 시스템과 운영 시스템 간의 언어/프레임워크 일치(2-6)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예측 모델을 파이썬 또는 R을 이용해서 제작했지만 배포를 위한 애플리케이션은 자바로 해야 되는 경우를 생각해보면 해당 문제의 상황을 이해하기 쉽다. 기존의 모델 개발에 사용한 알고리즘을 변경해야 되므로 비용과 시간이 소요되고 최악의 경우 구현할 수 없는 상황이 발생할 수 있다.&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기 때문에 처음부터 별도의 API 서버를 통해 머신러닝 학습을 수행하는 방법도 좋다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 id=&quot;text5&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; 머신러닝 프로젝트 역할군&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝 프로젝트를 진행하기 위해서는 참여자들이 맡는 각각의 역할이 매우 중요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹 서비스처럼 개발 주기를 자주 가질 수 없는 데이터 형태도 있기 때문에 길게는 수개월이 걸리는 프로젝트가 있을 수 있다. 다음은 범주별로 구성한 역할이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;1. 도메인 전문가(Domain Expert)&lt;/b&gt;&lt;br /&gt;&lt;b&gt;2. 통계 및 머신러닝 전문가(Statistics and Machine Learning experts)&lt;/b&gt;&lt;br /&gt;&lt;b&gt;3. 엔지니어(Engineer)&lt;/b&gt;&lt;br /&gt;&lt;b&gt;4. 책임자 또는 관리자(Director or Administrator)&lt;/b&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;size18&quot;&gt;&lt;b&gt;1. 도메인 전문가(Domain Expert)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;캐글을 통해서 올라오는 머신러닝 자료들을 보면 전문적인 문제 해결 능력을 요구로 하는 자료들이 올라온다. 그렇기 때문에 해당 분야의 전문가는 빼놓을 수 없는 필수요소다. 전반적인 프로젝트의 방향을 결정하고, 비즈니스 프로세스, 기술적 측면의 폭넓은 지식(문제 해결을 위한 전문 분야 지식)을 기반으로 도메인 전문가의 통찰력은 프로젝트의 길잡이라고 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. 통계 및 머신러닝 전문가(Statistics and Machine Learning experts)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도메인 전문가가 전문 지식을 소유한 프로젝트 매니저라는 느낌이면 통계와 머신러닝을 다루는 전문가는 데이터 과학자라고 보면 된다. 데이터를 탐색하고 모델을 개발하여 비즈니스 문제를 해결하는 주체이자 통계, 머신러닝, 딥러닝 등의 기술을 활용하여 모델을 구축하는 역할을 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3. 엔지니어(Engineer)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;엔지니어는 간단히 말해서 인프라를 구축하는 역할이다. 데이터 수집, 저장, 전처리 등의 관련된 기술적인 부분을 담당하는 데이터 엔지니어, 머신러닝 기술을 실제 서비스에 통합하는 소프트웨어 엔지니어, 클라우드 기술을 이용한 클라우드 엔지니어, 품질 보증을 위한 QA 엔지니어, 보안 등의 관리를 전반적으로 맡는 역할을 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;4. 책임자 또는 관리자(Director&amp;nbsp;or&amp;nbsp;Administrator)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트 전반을 책임을 담당하는 사람이다. 머신 러닝 프로젝트의 실패 확률을 책임지고 성공을 해야 하기 때문에 머신 러닝과 데이터 분석 경험이 풍부한 사람이 해당 역할을 맡아 위험 요소들을 잘 파악하여 팀원들을 이끌어 나갈 수 있는 사람이어야 한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 id=&quot;text6&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; 머신러닝 프로젝트와 일반적인 프로젝트의 유사점과 차이점&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝 프로젝트와 일반적인 프로젝트(회사에서 진행하는 프로젝트 등) 관리에는 유사한 점과 차이점이 존재한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;유사점&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 프로젝트의 수명 주기가 존재하며 목표 달성과 품질 향상을 위해 팀 단위의 프로젝트가 진쟁된다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;차이점&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 데이터 중심&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신 러닝 프로젝트는 데이터에 중점을 둔다. 데이터의 품질, 양, 다양성이 모델의 성능에 크게 영향을 주며 일반적인 프로젝트는 데이터가 중요하긴 하나 머신러닝 프로젝트만큼 중점적이진 않다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 모델 구축과 평가&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝 프로젝트는 모델의 구축과 평가가 핵심 단계이다. 적절한 알고리즘과 모델 아키텍처 선택, 학습 데이터를 기반으로 한 모델 훈련, 평가 지표를 통한 성능 평가 등이 중요한 요소이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 불확실성과 실험&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝에서는 불확실성이 상대적으로 더 높다. 예측 모델이나 분류 모델은 항상 일정 수준의 불확실성을 포함하고 있으며, 실험과 검증을 통해 모델의 예측 불확실성을 평가한다. 일반적인 프로젝트에서는 보기 힘든 특징이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 커뮤니케이션의 중요성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝 프로젝트에서는 결과의 해석과 모델의 의미를 이해하기 위한 커뮤니케이션이 특히 중요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도메인 전문가, 비전문가 간의 원활한 소통이 필요하다. 일반적인 프로젝트도 커뮤니케이션이 중요하지만, 머신러닝은 모델의 작동 방식, 예측의 근거 등을 이해하고 설명해야 하는 경우가 많다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&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;/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>파이썬(Python)/머신러닝 공부</category>
      <category>머신러닝</category>
      <category>머신러닝 역할</category>
      <category>머신러닝 적용 문제</category>
      <category>머신러닝 프로젝트 과정</category>
      <category>머신러닝의 작동 원리</category>
      <category>머신러닝이란</category>
      <category>프로젝트 역할</category>
      <author>BlueNoa</author>
      <guid isPermaLink="true">https://bluenoa.tistory.com/92</guid>
      <comments>https://bluenoa.tistory.com/92#entry92comment</comments>
      <pubDate>Thu, 14 Dec 2023 15:37:45 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬] 자막 파일 번역해보기</title>
      <link>https://bluenoa.tistory.com/91</link>
      <description>&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/rr7aE/btsB0fl2pdX/h20O1Pkp0O2OkzgsIBM521/%5BSubsPlease%5D%20Mobile%20Suit%20Gundam%20-%20The%20Witch%20from%20Mercury%20-%2006.ass?attach=1&amp;amp;knm=tfile.ass&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;[SubsPlease] Mobile Suit Gundam - The Witch from Mercury - 06.ass&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.03MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;목차&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text1&quot;&gt;서론&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text1&quot;&gt;네이버 파파고 API 소개&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text1&quot;&gt;자막 파일 직접 번역해보기&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 id=&quot;text1&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; 서론&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가끔씩 애니메이션이나 영화 파일을 소장하고 싶을 때 자막 파일을 구하기 어렵거나 구할 수 있어도 외국어 자막 파일만 존재하는 경험을 한 적이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;직접 자막 파일을 하나하나 번역해서 만들거나 타임라인을 설정해서 만드는 과정을 본 적이 있는데 적지 않은 피로감을 주는 것 같았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기 때문에 완벽하거나 대체 가능한 수준은 아니지만 자동으로 자막이 되는 코드를 한 번 만들어 보고 싶다는 생각이 들어서 작성해보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;

&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 id=&quot;text2&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; 네이버 파파고 API 소개&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;번역이라는 것은 정말 많이 축척된 데이터를 통해서 이뤄지는 과정이다. 기본적으로 번역 대상이 되는 언어 데이터와 언어 간의 번역이 포함된 데이터(병렬 코퍼스, Parallel Corpora)가 쌍을 이루며 존재해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또 통계적인 기계 번역을 통해서 번역 모델을 만들어야 하며, 신경망을 이용한 기계 번역이 있다. 대표적으로 순환 신경망(RNN), 장단기 기억망(LSTM), 트랜스포머와 같은 모델 아키텍처가 그 예시이다.&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;직접 사용하려고 하는 파파고 Open API 같은 경우 대규모로 사전 훈련된 언어 모델을 사용하여 번역 성능을 향상시키는 방법으로 개인이 접근하기에 가장 손쉬운 방법 중 하나일 거라 생각한다.&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;물론 네이버 외에도 무료 번역 Open API는 여러 곳에서 지원하고 있다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;1. &lt;a href=&quot;https://cloud.google.com/translate&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;구글 클라우드 번역 API&lt;/a&gt;&lt;br /&gt;기본적으로 무료로 제공하고 있으며, 월별로 일정한 양의 무료 번역을 사용할 수 있고 할당량을 초과하면 유료로 전환해야 한다.&lt;br /&gt;&lt;br /&gt;2. &lt;a href=&quot;https://www.microsoft.com/en-us/translator/translatorapi.aspx&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;MS 번역 API&lt;/a&gt;&lt;br /&gt;마이크로 사에서도 번역 서비스를 지원한다. 구글과 마찬가지로 무료로 제공되며 초과 시에는 요금이 부과되는 방식이다.&lt;br /&gt;텍스트와 음성 번역을 지원한다.&lt;br /&gt;&lt;br /&gt;3. &lt;a href=&quot;https://translate.yandex.com/developers&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Yandex API&lt;/a&gt;&lt;br /&gt;다소 생소할 수 있다. 얀덱스는 러시아에서 주로 사용하는 즉, 우리나라의 네이버 같은 존재다. 기본적으로는 무료로 제공되나 사용한 문장의 양에 따라 요금을 부과한다.&lt;br /&gt;&lt;br /&gt;4. &lt;a href=&quot;https://cloud.ibm.com/apidocs/language-translator?code=python&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;IBM 언어 번역 API&lt;/a&gt;&lt;br /&gt;IBM Watson의 언어 번역 서비스로 무료 플랜이 제공된다. 다양한 언어 번역을 지원하며 텍스트 및 HTML 문서 번역이 가능하다고 한다. 하지만 &lt;span style=&quot;background-color: #fdfdfd; color: #000000; text-align: start;&quot;&gt;2023년 6월 10일부로 신규 가입자 대상으로 서비스를 제공을 중단하고, 기존 가입자만 접근할 수 있다.&lt;br /&gt;2024년 6월 10일부로 서비스 중단 절차가 진행되어 2024년 12월 10일 완전 중단된다고 한다.&lt;br /&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;이렇게 여러가지 무료 API들이 존재하지만 접근성이 좋은 네이버 서비스를 이용하기로 결정했다.(카카오도 있다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developers.naver.com/products/papago/nmt/nmt.md&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://developers.naver.com/products/papago/nmt/nmt.md&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1702374159147&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;Neural Machine Translation - INTRO&quot; data-og-description=&quot;Neural Machine Translation NAVER Developers - Papago 소개 NMT는 Neural Machine Translation(인공신경망 기반 기계번역)의 약어입니다. 파파고의 NMT 기술은 입력 문장을 문장벡터로 변환하는 신경망(encoder)과 문장벡&quot; data-og-host=&quot;developers.naver.com&quot; data-og-source-url=&quot;https://developers.naver.com/products/papago/nmt/nmt.md&quot; data-og-url=&quot;https://developers.naver.com/products/papago/nmt/nmt.md&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://developers.naver.com/products/papago/nmt/nmt.md&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developers.naver.com/products/papago/nmt/nmt.md&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;Neural Machine Translation - INTRO&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Neural Machine Translation NAVER Developers - Papago 소개 NMT는 Neural Machine Translation(인공신경망 기반 기계번역)의 약어입니다. 파파고의 NMT 기술은 입력 문장을 문장벡터로 변환하는 신경망(encoder)과 문장벡&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developers.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 위 사이트에 들어가서 로그인 후 '&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Open API 이용 신청&lt;/b&gt;&lt;/span&gt;'을 통해 &lt;b&gt;신청&lt;/b&gt;하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;애플리케이션 이름&lt;/b&gt;은 대충 지어도 되고, 사용 API는 '&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;파파고&lt;/b&gt;&lt;/span&gt;'를 선택&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;비로그인 서비스 환경&lt;/b&gt;은 '&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;WEB&lt;/b&gt;&lt;/span&gt;' 선택 후 주소는 '&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;http://localhost&lt;/b&gt;&lt;/span&gt;'로 입력해주면 된다.&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-v72SQxEabMoPSKqa&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 id=&quot;text3&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; 자막 파일 직접 번역해보기&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬을 이용해서 파파고 API를 직접 사용해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자막 파일은 팟플레이어를 이용해서 외국어 자막 파일을 받아왔다. 자막은 건담 -수성의 마녀- 6화를 사용했다.&lt;b&gt;(첨부파일)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 프로그램 실행 시 바탕화면에 번역본 파일이 생성 후 잘 작동하다 오류가 발생할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오류의 내용이 &quot;&lt;b&gt;&amp;lt;urlopen error [WinError 10060] 연결된 구성원으로부터 응답이 없어 연결하지 못했거나, 호스트로부터 응답이 없어 연결이 끊어졌습니다&amp;gt;&lt;/b&gt;&quot;라면 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;일일 사용 할당량을 소진&lt;/b&gt;&lt;/span&gt;해서 그런 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기 때문에 해당 코드를 이용해서 자막 파일들을 자동으로 번역하는 것은 크게 기대하기는 어렵다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(번역 퀄리티도 솔직히 기대에 미치지는 않았다. 개인적으로는 애니나 영화는 카카오 번역이 더 좋은 것 같았다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혹시나 자막 파일이 &lt;b&gt;아래와 같은 양식일 경우&lt;/b&gt; 코드 내용 중에 있는 중괄호를 인식하는 코드를 변형해서 꺽새로 수정하고, 문장 시작 줄의 숫자를 수정해서 실행하면 될 것이다.&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1 &lt;br /&gt;00:00:44,790&amp;nbsp;--&amp;gt;&amp;nbsp;00:00:59,790 &lt;br /&gt;&amp;lt;font&amp;nbsp;color=&quot;#ffff80&quot;&amp;gt;&amp;lt;b&amp;gt;Fixed&amp;nbsp;&amp;amp;&amp;nbsp;Synced&amp;nbsp;by&amp;nbsp;bozxphd.&amp;nbsp;Enjoy&amp;nbsp;The&amp;nbsp;Flick&amp;lt;/b&amp;gt;.&amp;lt;/font&amp;gt; &lt;br /&gt;&lt;br /&gt;2 &lt;br /&gt;00:01:00,920&amp;nbsp;--&amp;gt;&amp;nbsp;00:01:06,370 &lt;br /&gt;&amp;lt;i&amp;gt;Fear. &lt;br /&gt;Treachery.&amp;nbsp;Bloodlust.&amp;lt;/i&amp;gt; &lt;br /&gt;&lt;br /&gt;3 &lt;br /&gt;00:01:06,600&amp;nbsp;--&amp;gt;&amp;nbsp;00:01:08,409 &lt;br /&gt;&amp;lt;i&amp;gt;Thousands&amp;nbsp;of&amp;nbsp;years&amp;nbsp;ago...&amp;lt;/i&amp;gt; &lt;br /&gt;&lt;br /&gt;4 &lt;br /&gt;00:01:08,520&amp;nbsp;--&amp;gt;&amp;nbsp;00:01:11,808 &lt;br /&gt;&amp;lt;i&amp;gt;these&amp;nbsp;were&amp;nbsp;the&amp;nbsp;forces &lt;br /&gt;that&amp;nbsp;ruled&amp;nbsp;our&amp;nbsp;world.&amp;lt;/i&amp;gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;자막 번역 파이썬 코드&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1702457227237&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import os
import urllib.request
import json
import time

# 메모 : 파파고 api를 이용해서 작성할 것, 바탕화면에 있는 메모장 내용을 토대로 중괄호 문제 해결할 것
# 네이버 api : https://developers.naver.com/apps/#/myapps/

try:
    # 위치
    location = &quot;C:/Users/Jo/OneDrive/Desktop/&quot;
    # file 이름
    names = &quot;[SubsPlease] Mobile Suit Gundam - The Witch from Mercury - 06.ass&quot;
    
    # 파일 생성
    with open(os.path.join(location, &quot;번역본 &quot; + names), mode=&quot;w&quot;, encoding=&quot;UTF-8&quot;) as cr_file:
        cr_file.write(&quot;&quot;)
    
    # 번역 기능(구글 번역 -&amp;gt; 파파고 번역으로 변경)
    def translate_text(text, source_lang, target_lang):
        # ------------------------------------------------------------------------
        &quot;&quot;&quot;
        api_url = &quot;https://openapi.naver.com/v1/papago/n2mt&quot;
        headers = {
            &quot;Content-Type&quot;: &quot;application/x-www-form-urlencoded; charset=UTF-8&quot;,
            &quot;X-Naver-Client-Id&quot;: &quot;&quot;,  #발급받은 클라이언트 아이디 입력
            &quot;X-Naver-Client-Secret&quot;: &quot;&quot;,  #발급받은 클라이언트 시크릿 입력
        }
        data = {
            &quot;source&quot; : source_lang,
            &quot;target&quot; : target_lang,
            &quot;text&quot; : text,
        }
        &quot;&quot;&quot;
        # response = requests.post(api_url, headers = headers, data = data)
        # ------------------------------------------------------------------------
        client_id = &quot;R1Mww6ge4KiNQEQV4I63&quot; # 개발자센터에서 발급받은 Client ID 값
        client_secret = &quot;1FH8pXekin&quot; # 개발자센터에서 발급받은 Client Secret 값
        encText = urllib.parse.quote(text) # URL에서 특수 문자나 공백 같은 문자열을 사용하기 위한 인코딩
        data = &quot;source=&quot; + source_lang + &quot;&amp;amp;target=&quot; + target_lang + &quot;&amp;amp;text=&quot; + encText
        url = &quot;https://openapi.naver.com/v1/papago/n2mt&quot;
        request = urllib.request.Request(url)
        request.add_header(&quot;X-Naver-Client-Id&quot;, client_id)
        request.add_header(&quot;X-Naver-Client-Secret&quot;, client_secret)
        response = urllib.request.urlopen(request, data=data.encode(&quot;utf-8&quot;))
        rescode = response.getcode()
        
        # json 처리 문장 넣기
        if(rescode == 200):
            response_body = response.read().decode('utf-8')
            output_dict = json.loads(response_body)
            output_text = output_dict[&quot;message&quot;][&quot;result&quot;][&quot;translatedText&quot;]
            # print(output_text)
            return output_text
        else:
            print(&quot;Error Code : &quot; + rescode)
            
        
    # 중괄호 내의 내용 추출
    def extract_brackets(text):
        brackets_contents = [] # 중괄호 내용을 저장할 곳
        in_brackets = False # 중괄호 존재 여부
        current_content = &quot;&quot;
        for char in text:
            if char == '{':
                in_brackets = True
                if current_content: # 내용이 존재하면
                    brackets_contents.append(current_content)
                    print(current_content)
                current_content = &quot;&quot;
            elif char == '}':
                in_brackets = False
            elif in_brackets: # True라면
                current_content += char # 문자열을 하나씩 더해간다.
        return brackets_contents
        
    # 파일 읽기
    with open(os.path.join(location, names), mode=&quot;r&quot;, encoding=&quot;UTF-8&quot;) as file:
        original = [] # 자막 파일의 원본 파일 정보를 담을 리스트(1~19줄의 내용을 저장)
        count_1 = 0 # 전체 줄 개수를 카운트할 변수
        count_2 = 0 # 구분점과 번역 내용을 다룰 줄 개수 카운터
        after_subtitle_1 = []; after_subtitle_2 = []; after_subtitle_3 = []
        
        for line in file:
            line = line.strip() # 개행 문자 제거
            # print(line)
            if count_1 &amp;lt;=17: # !!시작 위치는 자막 파일마다 다를 수 있음 확인해야함!!
                original.append(line)
                with open(os.path.join(location, &quot;번역본 &quot; + names), mode=&quot;a&quot;, encoding=&quot;UTF-8&quot;) as new_file:
                    new_file.write(original[count_1] + &quot;\n&quot;)
                # print(original[count_1], &quot;줄 개수 : &quot; + str(count_1))
            count_1 += 1
            
            if &quot;,,&quot; in line: # &quot;,,&quot;이 존재한다면 -&amp;gt; split으로 구분 지어줘서 나중에 합칠 땐 ',' 추가해야함
                after_subtitle_1.append(line.split(&quot;,,&quot;, 2)[0]) # 자막 시간 정보
                after_subtitle_2.append(line.split(&quot;,,&quot;, 2)[1]) # 자막 색상 정보
                after_subtitle_3.append(line.split(&quot;,,&quot;, 2)[2]) # 번역할 문자열
                # print(after_subtitle_3[count_2])
                
                input_text = after_subtitle_3[count_2] # 번역할 문자열
                cleaned_text = input_text
                bracket_contents = extract_brackets(input_text)
                # print(bracket_contents)
                # count_2 += 1
                
                time.sleep(1)           
                # 번역
                lang = {&quot;한국어&quot;:&quot;ko&quot;, &quot;영어&quot;:&quot;en&quot;, &quot;일본어&quot;:&quot;ja&quot;, &quot;중국어_간체&quot;:&quot;zh-CN&quot;, &quot;중국어_번체&quot;:&quot;zh-TW&quot;,
                        &quot;베트남어&quot;:&quot;vi&quot;, &quot;인도네시아어&quot;:&quot;id&quot;, &quot;독일어&quot;:&quot;de&quot;, &quot;러시아어&quot;:&quot;ru&quot;, &quot;스페인어&quot;:&quot;es&quot;, &quot;이탈리아어&quot;:&quot;it&quot;,
                        &quot;프랑스어&quot;:&quot;fr&quot;}
                source_lang = lang.get(&quot;영어&quot;) # 원본 언어
                target_lang = lang.get(&quot;한국어&quot;) # 번역하고자 하는 언어
                translated_text = translate_text(cleaned_text, source_lang, target_lang)
                print(&quot;번역할 내용 : &quot; + str(cleaned_text))
                print(&quot;번역된 내용 : &quot; + str(translated_text) + &quot;\n&quot;)

                # 번역된 텍스트와 중괄호 내용 다시 합치기
                output_text = translated_text
                # print(output_text)
                
                for content in bracket_contents:
                    output_text = output_text.replace('{}', '{' + content + '}')
                # 파일 내용 추가
                with open(os.path.join(location, &quot;번역본 &quot; + names), mode=&quot;a&quot;, encoding=&quot;UTF-8&quot;) as new_file:
                    new_file.write(after_subtitle_1[count_2] + &quot;,,&quot; + after_subtitle_2[count_2] + &quot;,,&quot; + str(output_text) + &quot;\n&quot;)
                count_2 += 1
                    
    print(&quot;작업 완료&quot;)
    
except Exception as e:
    print(&quot;에러 발생 : &quot; + str(e))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>잡동사니</category>
      <author>BlueNoa</author>
      <guid isPermaLink="true">https://bluenoa.tistory.com/91</guid>
      <comments>https://bluenoa.tistory.com/91#entry91comment</comments>
      <pubDate>Wed, 13 Dec 2023 17:53:51 +0900</pubDate>
    </item>
    <item>
      <title>자바 - Thread / Lambda / Stream</title>
      <link>https://bluenoa.tistory.com/90</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;목차&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text1&quot;&gt;Tread란?&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text2&quot;&gt;Thread의 작동 원리&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text3&quot;&gt;Lambda&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;#text4&quot;&gt;Stream&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 id=&quot;text1&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; Tread란?&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴퓨터에 대해 잘 아는 사람이라면 스레드에 대해 들어봤을 것이다. 보통 CPU에서 작업을 할 때 '프로세스'라고 하는 데 이를 나눠서 병렬 처리 하는 것을 스레드라고 한다. 자바를 비롯한 다른 언어에서 사용하는 스레드도 이와 마찬가지로 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;두 가지 이상의 일을 동시에 처리하는 것을 'Tread'&lt;/b&gt;&lt;/span&gt;라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바에서 스레드를 생성하고 관리하는 주요 클래스는&lt;b&gt; 'java.lang.Thread'&lt;/b&gt; 클래스다. 일반적으로 메인 스레드에서 시작하며, 이후에 필요한 경우 추가 스레드를 생성하여 병렬 작업을 수행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스레드를 생성하려면 'Thread' 클래스의 하위 클래스를 만들거나 'Runnable' 인터페이스를 구현하는 클래스를 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스레드 객체를 생성한 후에는 'start()' 메서드를 호출하여 실행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;※ 참고로 파이썬에서의 스레드도 해당 개념 및 원리가 동일하다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;예제 - 간단한 스레드 예시&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1697088878454&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.lang.Thread;

public class sample extends Thread {
    public void run() {
        for (int i = 1; i &amp;lt;= 10; i++) {
            System.out.println(&quot;스레드 : &quot; + i);
        }
    }
    public static void main (String[] args) {
        sample sm = new sample();
        sm.start();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;결과&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;스레드&amp;nbsp;:&amp;nbsp;1 &lt;br /&gt;스레드&amp;nbsp;:&amp;nbsp;2 &lt;br /&gt;스레드&amp;nbsp;:&amp;nbsp;3 &lt;br /&gt;스레드&amp;nbsp;:&amp;nbsp;4 &lt;br /&gt;스레드&amp;nbsp;:&amp;nbsp;5 &lt;br /&gt;스레드&amp;nbsp;:&amp;nbsp;6 &lt;br /&gt;스레드&amp;nbsp;:&amp;nbsp;7 &lt;br /&gt;스레드&amp;nbsp;:&amp;nbsp;8 &lt;br /&gt;스레드&amp;nbsp;:&amp;nbsp;9 &lt;br /&gt;스레드&amp;nbsp;:&amp;nbsp;10 &lt;br /&gt;&lt;br /&gt;Process&amp;nbsp;finished&amp;nbsp;with&amp;nbsp;exit&amp;nbsp;code&amp;nbsp;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 id=&quot;text2&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; Thread의 작동 원리&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;예시1 - 작동 원리&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 예시는 교재 '점프 투 자바'의 예시를 사용하였습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1697091283758&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.lang.Thread;

public class sample extends Thread {
    int count;

    public sample(int count) {
        this.count = count;
    }

    public void run() {
        System.out.println(&quot;작업 시작 : &quot; + this.count);
        try {
            Thread.sleep(1000);
        } catch (Exception e) {
            e.getStackTrace();
        } System.out.println(&quot;작업 종료 : &quot;+ this.count);
    }
    public static void main (String[] args) {
        for (int i = 1; i&amp;lt;=10; i++) {
            sample sm = new sample(i);
            sm.start();
        }
        System.out.println(&quot;main end&quot;);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;결과&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시작과 종료가 순차적이지 않고 제각각이다. 즉 순서와는 관계없이 작업이 진행된다는 것을 알 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 파이썬(Python)에서 스레드를 구현해도 동일하게 작동한다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;작업&amp;nbsp;시작&amp;nbsp;:&amp;nbsp;3 &lt;br /&gt;작업&amp;nbsp;시작&amp;nbsp;:&amp;nbsp;6 &lt;br /&gt;작업&amp;nbsp;시작&amp;nbsp;:&amp;nbsp;2 &lt;br /&gt;작업&amp;nbsp;시작&amp;nbsp;:&amp;nbsp;8 &lt;br /&gt;작업&amp;nbsp;시작&amp;nbsp;:&amp;nbsp;4 &lt;br /&gt;작업&amp;nbsp;시작&amp;nbsp;:&amp;nbsp;1 &lt;br /&gt;작업&amp;nbsp;시작&amp;nbsp;:&amp;nbsp;5 &lt;br /&gt;작업&amp;nbsp;시작&amp;nbsp;:&amp;nbsp;10 &lt;br /&gt;작업&amp;nbsp;시작&amp;nbsp;:&amp;nbsp;9 &lt;br /&gt;main&amp;nbsp;end &lt;br /&gt;작업&amp;nbsp;시작&amp;nbsp;:&amp;nbsp;7 &lt;br /&gt;작업&amp;nbsp;종료&amp;nbsp;:&amp;nbsp;9 &lt;br /&gt;작업&amp;nbsp;종료&amp;nbsp;:&amp;nbsp;1 &lt;br /&gt;작업&amp;nbsp;종료&amp;nbsp;:&amp;nbsp;10 &lt;br /&gt;작업&amp;nbsp;종료&amp;nbsp;:&amp;nbsp;4 &lt;br /&gt;작업&amp;nbsp;종료&amp;nbsp;:&amp;nbsp;8 &lt;br /&gt;작업&amp;nbsp;종료&amp;nbsp;:&amp;nbsp;5 &lt;br /&gt;작업&amp;nbsp;종료&amp;nbsp;:&amp;nbsp;7 &lt;br /&gt;작업&amp;nbsp;종료&amp;nbsp;:&amp;nbsp;3 &lt;br /&gt;작업&amp;nbsp;종료&amp;nbsp;:&amp;nbsp;6 &lt;br /&gt;작업&amp;nbsp;종료&amp;nbsp;:&amp;nbsp;2 &lt;br /&gt;&lt;br /&gt;Process&amp;nbsp;finished&amp;nbsp;with&amp;nbsp;exit&amp;nbsp;code&amp;nbsp;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&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;&amp;lt;예시2 - 작동 원리(배열과 join)&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1697709800258&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.lang.Thread;
// 배열 생성
class Create {
    public int[] array = new int[10];
    public void Array() {
        for (int i = 0; i &amp;lt; 10; i++) {
            array[i] = i+1;
        }
    }
}

// 스레드 작업
public class sample extends Thread {
    public static void main(String[] args) {
        Create cr = new Create();
        cr.Array();
        int mid = cr.array.length / 2;
        int[] sum = new int[2];
        // 1~10까지의 값을 반으로 나눈 후 각자 더하여 합산을 구한는 스레드
        
        // 1~5까지 합산
        Thread th1 = new Thread() {
            public void run() { // 스레드는 'run' 메서드 안에서 코드를 작성해야 한다.
                for (int j = 0; j &amp;lt; mid; j++) {
                    sum[0] += cr.array[j];
                }
                System.out.println(&quot;1번 스레드 완료&quot;);
            }
        };
        // 6~10까지 합산
        Thread th2 = new Thread() {
            public void run() {
                for (int k = mid; k &amp;lt; cr.array.length; k++) {
                    sum[1] += cr.array[k];
                }
                System.out.println(&quot;2번 스레드 완료&quot;);
            }
        };
        // 스레드 실행
        th1.start();
        th2.start();

        try {
            th1.join(); // join은 해당 스레드가 끝나야지만 다음 스레드가 작동하게끔 해줌
            th2.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        int total = sum[0] + sum[1];
        System.out.println(&quot;총 합 : &quot; + total);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;join은 작동 중인 스레드가 종료되어야만 다음 스레드가 실행되게끔 해준다. 일종의 작업 '순서'를 부여해 준다고 보면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;결과&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;1번&amp;nbsp;스레드&amp;nbsp;완료 &lt;br /&gt;2번&amp;nbsp;스레드&amp;nbsp;완료 &lt;br /&gt;총&amp;nbsp;합&amp;nbsp;:&amp;nbsp;55&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&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;&amp;lt;예시3 - Runnable&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Thread 클래스를 상속하여 사용하기도 하지만 Runnable 인터페이스를 사용하여 구현하기도 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜냐하면 Thread 클래스를 상속하면 다른 클래스를 상속할 수가 없기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 해당 방법은 클래스가 다른 클래스를 상속해야 하는 경우 유용하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 코드는 예시2를 변형하여 Runnable을 사용하였다.&lt;/p&gt;
&lt;pre id=&quot;code_1698661294026&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.lang.Thread;

// 배열 생성
class Create {
    public int[] array = new int[10];
    public void Array() {
        for (int i = 0; i &amp;lt; 10; i++) {
            array[i] = i+1;
        }
    }
}

// 스레드 작업
public class sample implements Runnable {
    private Create cr;
    private int mid;
    private int[] sum;

    public sample(Create cr, int mid, int[] sum) {
        this.cr = cr;
        this.mid = mid;
        this.sum = sum;
    }

    @Override
    public void run() {
        if (mid == 0) {
            System.out.println(&quot;mid(중간) 값이 제대로 설정되지 않았습니다.&quot;);
            return; // 중단
        }

        // 1~5 까지 합산
        if (Thread.currentThread().getName().equals(&quot;Thread-0&quot;)) {
            for (int j = 0; j &amp;lt; mid; j++) {
                sum[0] += cr.array[j];
            }
            System.out.println(&quot;1번 스레드 완료&quot;);
        }
        // 6~10 합산
        else if (Thread.currentThread().getName().equals(&quot;Thread-1&quot;)) {
            for (int k = mid; k &amp;lt; cr.array.length; k++) {
                sum[1] += cr.array[k];
            }
            System.out.println(&quot;2번 스레드 완료&quot;);
        }
    }

        public static void main(String[] args) {
            Create cr = new Create();
            cr.Array();
            // 확인용 System.out.println(Arrays.toString(cr.array));
            int mid = cr.array.length / 2;
            int[] sum = new int[2];

            Thread thread1 = new Thread(new sample(cr, mid, sum));
            Thread thread2 = new Thread(new sample(cr, mid, sum));

            thread1.start();
            thread2.start();

            try {
                thread1.join();
                thread2.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            int total = sum[0] + sum[1];
            System.out.println(&quot;총 합 : &quot; + total);
        }
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;결과&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;1번&amp;nbsp;스레드&amp;nbsp;완료 &lt;br /&gt;2번&amp;nbsp;스레드&amp;nbsp;완료 &lt;br /&gt;총&amp;nbsp;합&amp;nbsp;:&amp;nbsp;55&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-v72SQxEabMoPSKqa&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 id=&quot;text3&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; Lambda&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;람다(Lambda) 표현식은 &lt;b&gt;함수형 프로그래밍 기법&lt;/b&gt;을 지원하는 기능 중 하나다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;람다 표현식은 간결하고 읽기 쉬운 방식으로 &lt;b&gt;익명 함수(무명 함수)&lt;/b&gt;를 표현할 수 있게 해 준다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, &lt;u&gt;&lt;b&gt;함수를 변수처럼 다룰 수 있게 해 주어 코드를 간결하게 만들어 준다.&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;※ 람다 표현식은 Python에서도 지원한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;람다 표현식은 함수형 인터페이스와 함께 사용되는 것이 일반적이다. 함수형 인터페이스는 하나의 추상 메서드만 가지는 인터페이스를 말하며, 스트림(Stream) API와 병렬 프로그래밍 및 함수형 프로그래밍의 기본 요소로 활용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;일반적인 람다 표현식 구문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1698665387481&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;(parameter) -&amp;gt; expression&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;parameter&lt;/b&gt; : 람다 함수의 매개변수, 필요한 경우 생략이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;-&amp;gt;&lt;/b&gt; : 람다 연산자, 매개변수와 함수 본문을 구분을 구분한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;expression&lt;/b&gt; : 람다 함수의 본문으로, 작동할 코드를 나타낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;예제1 - 일반 코드 vs 람다 사용&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 일반 코드&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1698815361706&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.Arrays;
import java.util.List;
import java.util.Collections;
import java.util.Comparator;

public class sample {
    public static void main(String[] args) {
        List&amp;lt;String&amp;gt; names = Arrays.asList(&quot;김철수&quot;, &quot;조준&quot;, &quot;다람이&quot;, &quot;판다&quot;, &quot;나람단&quot;);
        // 정렬하기 위해 Collections, Comparator 사용
        Collections.sort(names, new Comparator&amp;lt;String&amp;gt;() {
            @Override
            public int compare(String s1, String s2) { // 두 문자열을 비교
                return s1.compareTo(s2);
            }
        });
        for (String name : names) {
            System.out.println(name);
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 람다 사용&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1698819624631&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.Arrays;
import java.util.List;
import java.util.Collections;
import java.util.Comparator;

public class sample {
    public static void main(String[] args) {
        List&amp;lt;String&amp;gt; names = Arrays.asList(&quot;김철수&quot;, &quot;조준&quot;, &quot;다람이&quot;, &quot;판다&quot;, &quot;나람단&quot;);
        // compare 객체를 생성한 것과 같은 역할을 한다.
        Collections.sort(names, (s1, s2) -&amp;gt; s1.compareTo(s2));

        for (String name : names) {
            System.out.println(name);
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 코드의 실행 결과는 동일하다. 하지만 람다를 사용함으로써 코드를 간소화시킬 수 있었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;결과&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;김철수 &lt;br /&gt;나람단 &lt;br /&gt;다람이 &lt;br /&gt;조준 &lt;br /&gt;판다&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 인터페이스(interface)를 사용하는 경우 메서드가 1개 이상이라면 람다 함수를 사용할 수 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기 때문에 &lt;b&gt;람다 함수를 사용할 인터페이스는 '&lt;span style=&quot;color: #ee2323;&quot;&gt;@FunctionalInterface&lt;/span&gt;'라는 어노테이션을 사용&lt;/b&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 어노테이션을 사용하면 &lt;b&gt;2개 이상의 메서드를 가진 인터페이스를 작성하는 것은 불가능&lt;/b&gt;하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;예시2 - @FunctionalInterface&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1698820713999&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@FunctionalInterface
interface Calculator {
    // 메소드를 하나만 작성 가능하게 해준다.
    int operation(int a, int b);
}

public class sample {
    public static void main(String[] args) {
        Calculator add = (a,b) -&amp;gt; a+b;
        Calculator sub = (a,b) -&amp;gt; a-b;

        System.out.println(&quot;합 : &quot;  + add.operation(4, 5));
        System.out.println(&quot;차 : &quot;  + sub.operation(10, 2));
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;결과&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;합&amp;nbsp;:&amp;nbsp;8 &lt;br /&gt;차&amp;nbsp;:&amp;nbsp;8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&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;&amp;lt;예제3 - 축약함수 : 리스트 반복문&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;람다를 사용하면 반복문도 간편하게 작성할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 일반 코드&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1698822677965&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.Arrays;
import java.util.List;



public class sample {
    public static void main(String[] args) {
        List&amp;lt;String&amp;gt; names = Arrays.asList(&quot;김두한&quot;, &quot;송하나&quot;, &quot;한지우&quot;);
        for (String name : names) {
            System.out.println(&quot;안녕하세요. &quot; + name + &quot;님&quot;);
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 축약 함수 사용&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1698822786599&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.Arrays;
import java.util.List;



public class sample {
    public static void main(String[] args) {
        List&amp;lt;String&amp;gt; names = Arrays.asList(&quot;김두한&quot;, &quot;송하나&quot;, &quot;한지우&quot;);
        names.forEach (name -&amp;gt; System.out.println(&quot;안녕하세요. &quot; + name + &quot;님&quot;));
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;결과&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;안녕하세요.&amp;nbsp;김두한님 &lt;br /&gt;안녕하세요.&amp;nbsp;송하나님 &lt;br /&gt;안녕하세요.&amp;nbsp;한지우님&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 id=&quot;text4&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;bull; Stream&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스트림이란 &lt;b&gt;'흐름'&lt;/b&gt;이라는 뜻을 가지고 있으며 &lt;b&gt;데이터 요소의 시퀀스&lt;/b&gt;(순차적으로 나열되어 있는 것을 의미)&lt;b&gt;를 처리하기 위한 시퀀셜 한 요소의 모음&lt;/b&gt;을 나타내는 개념이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스트림은 람다와 같이 Java8부터 소개되었다. &lt;b&gt;컬렉션, 배열, I/O 등 다양한 데이터 소스를 처리하는 데 사용&lt;/b&gt;된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 데이터를 다루는 &lt;b&gt;함수형 스타일의 연산을 지원하여 코드를 간결하고 가독성 있게 만들어준다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;스트림의 주요 특징 및 개념&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 시퀀셜 한 데이터 처리&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 요소를 연속적으로 처리하고 연속적으로 연산을 수행할 수 있음을 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 데이터 소스&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스트림은 다양한 데이터 소스로부터 생성될 수 있다. 예를 들어 컬렉션과 배열, 파일과 함수 등이 스트림 데이터 소스가 될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 중간 연산과 최종 연산&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스트림의 연산은 중간 연산과 최종 연산으로 구분된다. 중간 연산은 스트림을 다른 스트림으로 변환하거나 필터링하며, 최종 연산은 스트림의 처리를 시작하고 결과를 반환하는 연산이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 지연 연산&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스트림은 지연 연산을 지원한다. 최종 연산을 호출하기 전까지 중간 연산이 실제로 수행되지 않았을 경우 필요한 연산만을 수행하게 되어 효율적인 처리를 가능하게 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5. 함수형 프로래밍&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스트림은 함수형 프로그래밍 스타일을 지원하며, 람다 표현식과 함께 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스트림을 사용하면 데이터 처리 코드를 간결하게 작상할 수 있으며, 병렬 처리를 간단하게 수행할 수 있어 멀티코어 프로세서에서의 성능을 향상할 수 있다. 데이터 필터링, 매핑, 정렬, 그룹화 및 집계를 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;예시1 - 문자열 필터링 매핑 후 반환&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1698988235635&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;


public class sample {
    public static void main(String[] args) {
        List&amp;lt;String&amp;gt; animals = Arrays.asList(&quot;dog&quot;, &quot;cat&quot;, &quot;pig&quot;, &quot;horse&quot;, &quot;rabbit&quot;);
        // 'r'로 시작하는 동물을 필터링하고, 대문자로 변환한다.
        List&amp;lt;String&amp;gt; filteredAnimal = animals.stream()
                .filter(animal -&amp;gt; animal.startsWith(&quot;r&quot;)) // 필터 메서드 사용
                .map(animal -&amp;gt; animal.toUpperCase()) // 일치하는 문자열을 변환
                .collect(Collectors.toList()); // collect 메서드로 최종 결과를 리스트로 수집

        System.out.println(filteredAnimal);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;결과&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;[RABBIT]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;예시2 - 짝수 필터링&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1698989327945&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.util.stream.Collectors;

class Create {
    public List&amp;lt;Integer&amp;gt; Create() {
        List&amp;lt;Integer&amp;gt; numbers = new ArrayList&amp;lt;&amp;gt;();
        for (int i = 1; i &amp;lt;= 10; i++) {
            numbers.add(i);
        }
        // System.out.println(numbers);
        return numbers;
    }
}


public class sample {
    public static void main(String[] args) {
        Create cr = new Create();
        List&amp;lt;Integer&amp;gt; num = cr.Create();

        List&amp;lt;Integer&amp;gt; filteredNumbers = num.stream()
                .filter(n -&amp;gt; n % 2 == 0) // 중간 연산 : 짝수
                .sorted() // 정렬 : 오름차순
                .collect(Collectors.toList()); // 최종 연산 : 리스트화

        System.out.println(filteredNumbers);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;결과&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;[2,&amp;nbsp;4,&amp;nbsp;6,&amp;nbsp;8,&amp;nbsp;10]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;예시3 - 중복 값을 제거하여 출력 비교하기&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 일반 코드&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1699180847423&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;


class Create {
    public List&amp;lt;Integer&amp;gt; Create() {
        int numberCount = 10; // 원하는 랜덤 값의 개수
        int minValue = 2; // 랜덤 값의 최소값
        int maxValue = 8; // 랜덤 값의 최대값

        Random random = new Random();
        List&amp;lt;Integer&amp;gt; randomList = new ArrayList&amp;lt;&amp;gt;();

        for (int i = 0; i &amp;lt; numberCount; i++) {
            // 0 ~ n-1까지 값 생성, 예를 들어 최대 8, 최소 2라고 하면 8-2+1 = 7
            // 0 ~ 6까지 생성하므로 최소값인 2를 더해줘서 2~8 범위가 된다.
            int randomValue = random.nextInt((maxValue - minValue) + 1) + minValue;
            randomList.add(randomValue);
        }
        System.out.println(&quot;랜덤 리스트 : &quot; + randomList);
        return randomList;
    }
}


public class sample {
    public static void main(String[] args) {
        Create cr = new Create();
        List&amp;lt;Integer&amp;gt; randomSet = cr.Create();
        // 중복을 제거()
        HashSet&amp;lt;Integer&amp;gt; numSet = new HashSet&amp;lt;&amp;gt;(randomSet);
        // Set -&amp;gt; List 변경
        ArrayList&amp;lt;Integer&amp;gt; distinctList = new ArrayList&amp;lt;&amp;gt;(numSet);

        // 역순 정렬
        distinctList.sort(Comparator.reverseOrder());
        
        // 정수 배열 변환
        int[] result = new int[distinctList.size()]; // 크기 설정
        for (int i = 0; i &amp;lt; distinctList.size(); i++) {
            result[i] = distinctList.get(i);
        }
        System.out.println(&quot;결과 : &quot; + Arrays.toString(result));
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 스트림을 이용한 축약 함수&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1699182592318&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.stream.Collectors;
import java.util.*;


class Create {
    // 생성 개수, 최소값, 최대값을 받아온다.
    public List&amp;lt;Integer&amp;gt; Create(int numberCount, int minValue, int maxValue) {
        Random random = new Random();
        // 생성값, 최소값, 최대값(n-1) 범위에 +1
        List&amp;lt;Integer&amp;gt; randomList = random.ints(numberCount, minValue, maxValue + 1)
                .boxed() // int, double, float -&amp;gt; Integer 형태로 박싱
                .collect(Collectors.toList());
        System.out.println(&quot;랜덤 리스트 : &quot; + randomList);
        return randomList;
    }
}


public class sample {
    public static void main(String[] args) {
        Create cr = new Create();
        List&amp;lt;Integer&amp;gt; randomSet = cr.Create(10, 2, 8);

        int[] result = randomSet.stream()
                .distinct() // 중복제거
                .sorted(Comparator.reverseOrder()) // 정렬(오름차순)
                .mapToInt(Integer::intValue) // 스트림 요소를 정수 변환, Stream&amp;lt;Integer&amp;gt; -&amp;gt; IntStream
                .toArray(); // 배열로 반환

        System.out.println(&quot;결과 : &quot; + Arrays.toString(result));
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;단, 결과는 매번 다를 수 있다. 매 순간 랜덤으로 생성되는 값이 고정되어 있지 않기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;결과&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;랜덤&amp;nbsp;리스트&amp;nbsp;:&amp;nbsp;[7,&amp;nbsp;3,&amp;nbsp;5,&amp;nbsp;7,&amp;nbsp;5,&amp;nbsp;3,&amp;nbsp;2,&amp;nbsp;2,&amp;nbsp;6,&amp;nbsp;3] &lt;br /&gt;결과&amp;nbsp;:&amp;nbsp;[7,&amp;nbsp;6,&amp;nbsp;5,&amp;nbsp;3,&amp;nbsp;2]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&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;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자바(JAVA)</category>
      <category>lambda</category>
      <category>Runnable</category>
      <category>Thread</category>
      <category>스레드</category>
      <category>자바</category>
      <category>함수형 프로그래밍</category>
      <author>BlueNoa</author>
      <guid isPermaLink="true">https://bluenoa.tistory.com/90</guid>
      <comments>https://bluenoa.tistory.com/90#entry90comment</comments>
      <pubDate>Sun, 5 Nov 2023 20:20:13 +0900</pubDate>
    </item>
  </channel>
</rss>