<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Dev. DA</title>
    <link>https://dadev.tistory.com/</link>
    <description>Deep Learning, Python, Database, SQL : Tip &amp;amp; Research</description>
    <language>ko</language>
    <pubDate>Fri, 8 May 2026 13:42:46 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>DS-9VM</managingEditor>
    <image>
      <title>Dev. DA</title>
      <url>https://tistory1.daumcdn.net/tistory/4112210/attach/504bb654eb5b45be8db2272a7867e23b</url>
      <link>https://dadev.tistory.com</link>
    </image>
    <item>
      <title>온톨로지와 게임 | 2편-몰입의 방해꾼을 찾아라: CS2 UX 도메인 온톨로지 설계</title>
      <link>https://dadev.tistory.com/entry/%EC%98%A8%ED%86%A8%EB%A1%9C%EC%A7%80%EC%99%80-%EA%B2%8C%EC%9E%84-2%ED%8E%B8-%EB%AA%B0%EC%9E%85%EC%9D%98-%EB%B0%A9%ED%95%B4%EA%BE%BC%EC%9D%84-%EC%B0%BE%EC%95%84%EB%9D%BC-CS2-UX-%EB%8F%84%EB%A9%94%EC%9D%B8-%EC%98%A8%ED%86%A8%EB%A1%9C%EC%A7%80-%EC%84%A4%EA%B3%84</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;지난 &lt;a href=&quot;https://dadev.tistory.com/entry/%EC%98%A8%ED%86%A8%EB%A1%9C%EC%A7%80%EC%99%80-%EA%B2%8C%EC%9E%84-1%ED%8E%B8-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A1%9C-%EA%B7%B8%EB%A6%AC%EB%8A%94-%EB%AA%B0%EC%9E%85%EC%9D%98-%EC%A7%80%EB%8F%84&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;1편&lt;/a&gt;에서는 CS2 분석에 온톨로지가 필요한 이유와 '디지털 트윈'을 통한 경험의 재구축에 대해 다뤘습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2편부터는 본격적으로 지식의 설계도를 슥슥 그려볼게요! 단순히 숫자만 쌓이는 '로그'를 넘어서, 유저가 뭘 하려 했는지 또 게임 속 사건들이 서로 어떻게 연결되는지 컴퓨터가 척척 이해할 수 있게 만드는 &lt;b&gt;도메인 모델링(Domain Modeling)&lt;/b&gt; 과정이랍니다!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;lt;관련 글&amp;gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://dadev.tistory.com/entry/%EC%98%A8%ED%86%A8%EB%A1%9C%EC%A7%80%EC%99%80-%EA%B2%8C%EC%9E%84-1%ED%8E%B8-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A1%9C-%EA%B7%B8%EB%A6%AC%EB%8A%94-%EB%AA%B0%EC%9E%85%EC%9D%98-%EC%A7%80%EB%8F%84&quot;&gt;2026.02.26 - [Data Science/Ontology] - 온톨로지와 게임 | 1편-데이터로 그리는 '몰입'의 지도&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://dadev.tistory.com/entry/Ontology-%EC%A7%80%EC%8B%9D%EC%9D%98-%EC%A7%80%EB%8F%84-%EC%98%A8%ED%86%A8%EB%A1%9C%EC%A7%80-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0&quot;&gt;2026.02.26 - [Data Science/Ontology] - Ontology | 지식의 지도 - 온톨로지 이해하기&lt;/a&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 도메인 모델링의 3대 핵심 클래스 상세 설계&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;온톨로지 설계는 &quot;누가(Actor)&quot;, &quot;어떤 환경에서(Context)&quot;, &quot;무엇을 위해(Intent)&quot; 행동했는지를 규정하는 것에서 시작합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;① Actor Class (행위자 객체)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순한 유저 ID를 넘어, 해당 유저의 &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;Role (역할군):&lt;/b&gt; EntryFragger(선입조), Support(지원), AWPer(저격수). 각 역할에 따라 기대되는 행동 패턴이 다릅니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Economic Status (자금 상태):&lt;/b&gt; FullBuy(최상급 장비), Eco(절약), ForceBuy(억지 구매). 자금 상태는 유저의 '심리적 압박감' 속성과 직결됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Combat Skill Meta:&lt;/b&gt; 에임 정확도, 반응 속도뿐만 아니라 '유틸리티 활용도'와 같은 소프트 스킬을 포함합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;② Environment &amp;amp; Context Class (맥락 객체)&lt;/h3&gt;
&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;Semantic Area (의미론적 구역):&lt;/b&gt; 단순 XYZ 좌표 대신 ChokePoint(병목 구간), PlantZone(설치 구역), RotationPath(백업 경로)로 정의합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Dynamic Obstacles (동적 장애물):&lt;/b&gt; * SmokeWall: 시야 차단 및 심리적 경계선 형성.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;FireZone: 이동 경로 차단 및 체력 소모 압박.&lt;/li&gt;
&lt;li&gt;FlashBlind: 일시적인 정보 단절 상태 유발.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;③ Action &amp;amp; UX State Class (행위 및 경험 상태)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;Tactical Intention (전술적 의도):&lt;/b&gt; FakePush(기만), AreaDenial(구역 거부), RetakePreparation(재탈환 준비).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;UX State (경험 상태):&lt;/b&gt; Flow(몰입), Hurdle(장애물), Overload(정보 과부하).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. [Case Study] 실전 상황으로 보는 온톨로지 추론 로직&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 게임 플레이 중 유저가 가장 큰 스트레스를 받는 &lt;b&gt;'정보 단절로 인한 측면 피격'&lt;/b&gt; 상황을 온톨로지 모델로 분석해 보겠습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;[상황 가정: 인페르노(Inferno) 맵 B 사이트 수비]&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유저 A는 '사이트 안쪽(New Box)'에서 정면을 주시하며 홀딩 중입니다. 아군 B는 '바나나(Banana)' 입구를 지키고 있었으나, 적의 압박에 못 이겨 소통 없이 뒤로 빠졌습니다. 잠시 후 유저 A는 옆에서 튀어나온 적에게 처치당합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;온톨로지 관계 매핑 및 추론 단계 (Step-by-Step)&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;초기 상태 설정 (Knowledge Graph):&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Player_B &amp;mdash; is_watching &amp;mdash;&amp;gt; Banana_Entrance&lt;/li&gt;
&lt;li&gt;Banana_Entrance &amp;mdash; protects &amp;mdash;&amp;gt; Player_A_Flank&lt;/li&gt;
&lt;li&gt;&lt;b&gt;추론:&lt;/b&gt; 시스템은 유저 A의 상태를 Safe_from_Flank로 인지합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;동적 상태 변화 탐지:&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Event: Player_B가 Banana_Entrance를 벗어남.&lt;/li&gt;
&lt;li&gt;System Check: Player_B가 Radio_Call 혹은 Voice_Activity를 수행했는가? &amp;rarr; &lt;b&gt;No.&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;장애물 인스턴스 생성 (Hurdle Identification):&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Broken_Relation: is_watching 관계가 사라짐에 따라 Player_A_Flank에 대한 보호 관계 해제.&lt;/li&gt;
&lt;li&gt;New_Instance: &lt;b&gt;InformationGap&lt;/b&gt; (정보 공백) 발생.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;UX 진단:&lt;/b&gt; 유저 A의 심리적 지도는 '안전'하지만 실제 데이터는 '위험'함. 이 괴리가 &lt;b&gt;Cognitive_Dissonance&lt;/b&gt;(인지 부조화) 장애물을 형성함.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;최종 전문 분석:&lt;/b&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;/b&gt; &quot;A가 옆을 체크하지 않아 죽음 (개인 과실)&quot;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;온톨로지 방식:&lt;/b&gt; &quot;&lt;b&gt;Structural_Hurdle&lt;/b&gt; 탐지. 아군 B의 이탈 정보가 A에게 전달되지 않은 '정보의 비대칭성'이 사망의 근본 원인임. A의 실력이 아닌 팀워크 인프라의 붕괴임.&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 왜 이 설계가 전문적인 분석의 핵심인가요?&lt;/h2&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;/b&gt; &quot;운이 없어서&quot;가 아니라 &quot;어떤 데이터 관계가 끊어져서&quot; 발생한 일인지 논리적으로 증명합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;고수준 전술 언어의 자동화:&lt;/b&gt; &quot;연막이 터졌다&quot;는 로우 데이터를 &quot;적의 진입로 확보 시도&quot;라는 전술적 언어로 변환하여 AI가 이해하게 합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;개인화된 솔루션 제공:&lt;/b&gt; 모든 유저에게 &quot;에임을 연습하라&quot;고 하는 대신, &quot;아군의 위치 변화에 따른 미니맵 인지 능력을 높이라&quot;는 맞춤형 처방이 가능해집니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 2편을 마치며: 데이터에 생명력을 불어넣는 지식의 틀&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 2편에서는 단순히 파편화되어 있던 CS2의 로그 데이터를 &lt;b&gt;'행위자', '맥락', '의도'&lt;/b&gt;라는 유기적인 온톨로지 구조로 재구축해 보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 설계한 이 도메인 모델링이 중요한 이유는, 기계가 게임 속의 비극(사망)을 단순히 '0과 1'의 결과로 보는 것이 아니라, &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;&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;585&quot; data-origin-height=&quot;390&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mI5i5/dJMcadVp5pV/SLJ1iuSgCxvOWGG79frKw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mI5i5/dJMcadVp5pV/SLJ1iuSgCxvOWGG79frKw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mI5i5/dJMcadVp5pV/SLJ1iuSgCxvOWGG79frKw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmI5i5%2FdJMcadVp5pV%2FSLJ1iuSgCxvOWGG79frKw1%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-origin-width=&quot;585&quot; data-origin-height=&quot;390&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;lt;관련 글&amp;gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://dadev.tistory.com/entry/%EC%98%A8%ED%86%A8%EB%A1%9C%EC%A7%80%EC%99%80-%EA%B2%8C%EC%9E%84-1%ED%8E%B8-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A1%9C-%EA%B7%B8%EB%A6%AC%EB%8A%94-%EB%AA%B0%EC%9E%85%EC%9D%98-%EC%A7%80%EB%8F%84&quot;&gt;2026.02.26 - [Data Science/Ontology] - 온톨로지와 게임 | 1편-데이터로 그리는 '몰입'의 지도&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://dadev.tistory.com/entry/Ontology-%EC%A7%80%EC%8B%9D%EC%9D%98-%EC%A7%80%EB%8F%84-%EC%98%A8%ED%86%A8%EB%A1%9C%EC%A7%80-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0&quot;&gt;2026.02.26 - [Data Science/Ontology] - Ontology | 지식의 지도 - 온톨로지 이해하기&lt;/a&gt;&lt;/p&gt;</description>
      <category>Data Science/Ontology</category>
      <category>CS2</category>
      <category>ux설계</category>
      <category>게임ai</category>
      <category>데이터엔지니어링</category>
      <category>도메인모델링</category>
      <category>온톨리지</category>
      <category>전술분석</category>
      <category>지식그래프</category>
      <category>추론엔진</category>
      <author>DS-9VM</author>
      <guid isPermaLink="true">https://dadev.tistory.com/197</guid>
      <comments>https://dadev.tistory.com/entry/%EC%98%A8%ED%86%A8%EB%A1%9C%EC%A7%80%EC%99%80-%EA%B2%8C%EC%9E%84-2%ED%8E%B8-%EB%AA%B0%EC%9E%85%EC%9D%98-%EB%B0%A9%ED%95%B4%EA%BE%BC%EC%9D%84-%EC%B0%BE%EC%95%84%EB%9D%BC-CS2-UX-%EB%8F%84%EB%A9%94%EC%9D%B8-%EC%98%A8%ED%86%A8%EB%A1%9C%EC%A7%80-%EC%84%A4%EA%B3%84#entry197comment</comments>
      <pubDate>Thu, 5 Mar 2026 23:42:25 +0900</pubDate>
    </item>
    <item>
      <title>온톨로지와 게임 | 1편-데이터로 그리는 '몰입'의 지도</title>
      <link>https://dadev.tistory.com/entry/%EC%98%A8%ED%86%A8%EB%A1%9C%EC%A7%80%EC%99%80-%EA%B2%8C%EC%9E%84-1%ED%8E%B8-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A1%9C-%EA%B7%B8%EB%A6%AC%EB%8A%94-%EB%AA%B0%EC%9E%85%EC%9D%98-%EC%A7%80%EB%8F%84</link>
      <description>&lt;h3 data-pm-slice=&quot;1 1 []&quot; data-ke-size=&quot;size23&quot;&gt;왜 온라인 게임에 온톨로지가 필요한가?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 분야에 학습을 시작해 보려고 해요. 주제는 바로 &lt;b&gt;온톨로지(Ontology)를 활용해서 게임 유저 경험(UX)을 멋지게 바꿔보는 것&lt;/b&gt;이 랍니다. 그리고 이 혁신적인 시도를 직접 보여드리기 위해, 우리에게 아주 친숙한 게임인 &lt;b&gt;카운터 스트라이크 2(CS2)&lt;/b&gt;를 무대로 골라봤어요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순히 데이터를 분석하는 수준을 넘어서, 우리가 게임을 하며 느꼈던 짜릿한 희열이나 답답했던 순간들이 실제로 어떤 데이터로 이뤄져 있는지 파헤쳐 볼 거예요. 더 깊이 몰입할 수 있도록 도와주는 '지식 지도'를 만드는 여정에 시작해보려 합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 시작하며: 게임 경험의 혁신, 왜 '지식'에 주목할까요?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요즘 게임 세상에서 유저 경험(UX)은 단순히 화려한 그래픽이나 매끄러운 조작감만을 말하지 않아요. 유저가 게임 속 세계관과 전술의 흐름에 완전히 &lt;b&gt;몰입(Flow)&lt;/b&gt;하고, 그 재미를 방해하는 장애물을 싹 치워버려서 '진짜 재미'를 느끼게 하는 게 핵심이죠!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 지금까지의 게임 분석은 &quot;누가 이겼나&quot;, &quot;몇 번이나 죽었나&quot; 같은 &lt;b&gt;단순한 숫자&lt;/b&gt;에만 매달려 있었어요. 이런 식으로는 유저가 왜 기분이 상했는지, 혹은 어느 지점에서 최고의 성취감을 느꼈는지 제대로 설명할 수가 없거든요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 저는 그 답을 &lt;b&gt;온톨로지(Ontology)&lt;/b&gt;에서 찾아냈습니다! 흩어져 있는 로그를 '지식'의 형태로 다시 조립해 보면, 비로소 유저가 겪은 경험의 인과관계가 선명하게 보이기 시작하거든요.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 핵심 키워드: '재구축'과 '디지털 트윈'&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;재구축(Reconstruction):&lt;/b&gt; 흩어진 조각(데이터)을 모아 당시의 상황을 다시 살려내는 과정이에요. 단순히 &quot;죽었다&quot;는 기록이 아니라, &quot;어떤 전술적 맥락에서 이런 일이 벌어졌나&quot;를 다시 그려보는 작업이죠.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;디지털 트윈(Digital Twin):&lt;/b&gt; 현실의 복사본을 가상 세계에 똑같이 만드는 기술이에요. 게임 플레이를 데이터로 완벽히 복제해 두면, &quot;만약 그때 다른 선택을 했다면?&quot; 같은 가정을 마음껏 테스트해 볼 수 있답니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 왜 하필 CS2인가요? : 전술적 인과관계의 끝판왕이니까요!&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 연재에서 CS2를 예로 드는 이유는 아주 확실해요. CS2는 그냥 총만 쏘는 게임이 아니라, 엄청난 정보전과 팀워크가 얽히고설킨 '전술 시뮬레이션'에 가깝기 때문이죠!&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;/b&gt; 제가 던진 연막탄 하나가 30초 뒤에 팀원을 살릴 수도, 승패를 가를 수도 있는 결정적인 역할을 해요.&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;b&gt;디지털 트윈&lt;/b&gt;으로서의 가치가 정말 높아요.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한마디로 CS2는 온톨로지를 통해 유저 경험을 새롭게 바꾸고 미래의 전술까지 예측해 보기에 더할 나위 없이 완벽한 실험실인 셈이죠!&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 결과 중심 분석 vs 유저 경험(UX) 중심 분석&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;온톨로지 기반 분석은 단순한 통계와는 가는 길이 아예 달라요.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 88.4883%; height: 182px;&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: 20.1816%;&quot;&gt;&lt;span&gt;&lt;b&gt; 분석 관점 &lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.7416%;&quot;&gt;&lt;span&gt; 전통적인 방식 (통계적) &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 46.9549%;&quot;&gt;&lt;span&gt; 온톨로지 방식 (의미론적 / UX) &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.1816%;&quot;&gt;&lt;span&gt;&lt;b&gt;데이터 형태&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.7416%;&quot;&gt;&lt;span&gt;단순한 숫자와 빈도 (표)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 46.9549%;&quot;&gt;&lt;span style=&quot;color: #953b34;&quot;&gt;데이터끼리의 관계망 (지식 그래프)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.1816%;&quot;&gt;&lt;span&gt;&lt;b&gt;주요 목적&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.7416%;&quot;&gt;&lt;span&gt;실력을 수치로 측정&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 46.9549%;&quot;&gt;&lt;span style=&quot;color: #953b34;&quot;&gt;&lt;b&gt;몰입의 방해 요소 제거와 재미 극대화&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.1816%;&quot;&gt;&lt;span&gt;&lt;b&gt;분석 대상&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.7416%;&quot;&gt;&lt;span&gt;킬, 데스, 승률&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 46.9549%;&quot;&gt;&lt;span style=&quot;color: #953b34;&quot;&gt;&lt;b&gt;유저의 의도, 협동심, 심리적 압박&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.1816%;&quot;&gt;&lt;span&gt;&lt;b&gt;혁신의 결과&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.7416%;&quot;&gt;&lt;span&gt;등급(Rank) 매기기&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 46.9549%;&quot;&gt;&lt;span style=&quot;color: #953b34;&quot;&gt;&lt;b&gt;개별 맞춤 전술 코칭과 성취감 뿜뿜!&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 온톨로지를 써서 플레이를 &lt;b&gt;재구축&lt;/b&gt;하는 이유는 분명해요. 유저가 게임에서 겪는 '억울한 패배'의 진짜 이유를 데이터로 증명해서 마음의 짐을 덜어주고, 다음 판에서는 '초몰입' 상태로 즐겁게 게임할 수 있도록 돕고 싶기 때문입니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 실전 사례&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;운이 나빴던 게 아니라, 정보가 끊겼던 거예요!&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CS2 유저들이 가장 자주 겪는 상황을 온톨로지 관점에서 한번 살펴볼까요?&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;/b&gt; 유저 A가 특정 구역을 지키다가 허무하게 죽고는 &quot;난 에임이 왜 이럴까&quot;라며 자책하고 있네요.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;온톨로지 분석 결과:&lt;/b&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;해 보니 유저 A의 에임 수치는 평소랑 다를 게 없었어요.&lt;/li&gt;
&lt;li&gt;그런데 알고 보니 2초 전, 아군 B가 보고 있던 구역의 정보를 공유(shareInformation)하지 않고 자리를 옮겨버렸네요!&lt;/li&gt;
&lt;li&gt;이 때문에 유저 A의 모델에서 '사각지대(Blind Spot)' 정보가 쏙 빠져버린 거죠.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;결론:&lt;/b&gt; 유저 A의 실수가 아니라, 팀의 '정보 공유'가 끊긴 게 몰입을 방해한 진짜 범인이었습니다!&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이처럼 온톨로지는 유저에게 &lt;b&gt;너의 잘못이 아니야(It's not your fault)&lt;/b&gt;라고 토닥여줄 수 있는 아주 든든하고 객관적인 근거가 되어준답니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. 1편을 마치며: 유저를 위한 지도를 그리는 여정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 연재의 목적은 아주 뚜렷합니다. &lt;b&gt;CS2라는 무대 위에서, 데이터를 통해 유저의 재미를 가로막는 돌멩이를 치워주고 더 큰 성취감을 향해 나아갈 수 있는 지도를 그리는 것이죠!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이어지는 2편에서는 몰입, 장애물, 시야 같은 유저 경험의 요소들을 어떻게 데이터로 정의할 수 있는지, &lt;b&gt;CS2 UX 도메인 모델링&lt;/b&gt;을 구체적으로 설계해 볼게요. 기술이 어떻게 우리의 '재미'를 든든하게 지원하는지 그 설계도를 함께 확인해 보시죠!&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-origin-width=&quot;585&quot; data-origin-height=&quot;390&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUm3J1/dJMb996xlaE/1Yd0lYg0XljXrPjJFUKCGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUm3J1/dJMb996xlaE/1Yd0lYg0XljXrPjJFUKCGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUm3J1/dJMb996xlaE/1Yd0lYg0XljXrPjJFUKCGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUm3J1%2FdJMb996xlaE%2F1Yd0lYg0XljXrPjJFUKCGK%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-origin-width=&quot;585&quot; data-origin-height=&quot;390&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Data Science/Ontology</category>
      <category>CS2</category>
      <category>UX혁신</category>
      <category>게임몰입</category>
      <category>데이터분석</category>
      <category>디지털트윈</category>
      <category>온톨로지</category>
      <category>유저경험</category>
      <category>재구축</category>
      <category>전술분석</category>
      <category>지식그래프</category>
      <author>DS-9VM</author>
      <guid isPermaLink="true">https://dadev.tistory.com/196</guid>
      <comments>https://dadev.tistory.com/entry/%EC%98%A8%ED%86%A8%EB%A1%9C%EC%A7%80%EC%99%80-%EA%B2%8C%EC%9E%84-1%ED%8E%B8-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A1%9C-%EA%B7%B8%EB%A6%AC%EB%8A%94-%EB%AA%B0%EC%9E%85%EC%9D%98-%EC%A7%80%EB%8F%84#entry196comment</comments>
      <pubDate>Fri, 27 Feb 2026 07:00:33 +0900</pubDate>
    </item>
    <item>
      <title>Ontology | 지식의 지도 - 온톨로지 이해하기</title>
      <link>https://dadev.tistory.com/entry/Ontology-%EC%A7%80%EC%8B%9D%EC%9D%98-%EC%A7%80%EB%8F%84-%EC%98%A8%ED%86%A8%EB%A1%9C%EC%A7%80-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0</link>
      <description>&lt;h1 data-pm-slice=&quot;1 1 []&quot;&gt;복잡한 데이터를 '진짜 지식'으로! 온톨로지(Ontology)랑 친해지기&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 분석이나 AI 공부를 하다 보면 '온톨로지'라는 단어를 가끔 만나게 되죠? 이름부터 뭔가 철학 책에나 나올 법해서 어렵게 느껴질 수도 있는데요. 알고 보면 정말 유용한 녀석이랍니다! 오늘은 우리가 좋아하는 게임 &lt;b&gt;카운터 스트라이크 2(CS2)&lt;/b&gt;를 예로 들어서, 이 온톨로지가 대체 뭔지 아주 쉽고 편하게 수다 떨듯이 풀어볼게요.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 온톨로지, 정체가 뭐야?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한마디로 말하면, 온톨로지는 &lt;b&gt;&quot;세상에 있는 것들이 서로 어떻게 연결되어 있는지 알려주는 지식 지도&quot;&lt;/b&gt;라고 생각하면 돼요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;개체(Individual):&lt;/b&gt; 실제 데이터 그 자체예요. (예: 프로게이머 's1mple', 아이템 'AK-47')&lt;/li&gt;
&lt;li&gt;&lt;b&gt;속성(Property):&lt;/b&gt; 그 데이터가 가진 특징이죠. (예: 총기 가격은 얼마인지, 데미지는 얼마나 센지)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;관계(Relationship):&lt;/b&gt; 데이터끼리 어떻게 연결되는지 보여줘요. (예: 유저가 총을 '샀다', 총으로 상대를 '잡았다')&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 그림으로 보는 온톨로지 (CS2 버전!)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;말로만 설명하면 심심하니까, CS2 전술을 분석할 때 온톨로지가 어떻게 생겼을지 그림으로 살짝 그려볼까요?&lt;/p&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;[ 유저 (Player) ] ───( 소속 )──▶ [ 팀 (CT / T) ]
       │
       │ ( 구매/장착 )
       ▼
[ 아이템 (Item) ] ───( 분류 )──▶ [ 무기 (Weapon) ] ───( 하위 분류 )──▶ [ 소총 (Rifle) ]
       │                                                                │
       │ ( 속성: 가격 )                                                  │ ( 속성: 데미지 )
       └───────────────────────────▶ [ 4,700$ ]                       └────▶ [ 아주 높음! ]

[ 행동 (Action) ] ───( 주체 )──▶ [ 유저 ]
       │          └──( 발생 위치 )─▶ [ 위치 (A 사이트, 바나나 등) ]
       │
       │ ( 대상 )
       ▼
[ 투척물 (Utility) ] ───( 효과 )──▶ [ 시야 차단 (눈뽕!) ]
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 지도 덕분에 컴퓨터는 &quot;음, 4700달러네?&quot; 하고 끝나는 게 아니라 &lt;b&gt;&quot;아! 이 유저가 지금 비싼 저격총을 들었으니 이번 라운드의 에이스구나!&quot;&lt;/b&gt; 하고 맥락을 딱 짚어낼 수 있게 된답니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 게임 로그, 온톨로지를 만나면 어떻게 바뀔까?&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;[비포(Before): 그냥 딱딱한 숫자들]&lt;/h4&gt;
&lt;pre class=&quot;json&quot;&gt;&lt;code&gt;{
  &quot;attacker&quot;: &quot;User_A&quot;,
  &quot;victim&quot;: &quot;User_B&quot;,
  &quot;weapon&quot;: &quot;M4A1-S&quot;,
  &quot;damage&quot;: &quot;100&quot;,
  &quot;hitgroup&quot;: &quot;head&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 보면 &quot;A가 B를 헤드샷으로 잡았네&quot; 정도만 알 수 있죠.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;[애프터(After): 의미가 살아난 지식 구조]&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;온톨로지가 개입하면 이 로그 뒤에 숨은 이야기가 보이기 시작해요!&lt;/p&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; M4A1-S는 소음기가 달린 총이고 방어력을 잘 뚫는 무기라는 걸 알아요.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;경제 상황:&lt;/b&gt; User_A가 지난 라운드에서 이겨서 번 돈으로 이 총을 샀다는 걸 연결하죠.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;위치 파악:&lt;/b&gt; 유저 B가 연막탄 안에 있었는데도 잡혔다면? &quot;와, User_A가 소리만 듣고 쐈구나!&quot; 같은 엄청난 맥락을 이해하게 되는 거예요.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순한 데이터가 온톨로지를 만나면 &lt;b&gt;살아있는 정보&lt;/b&gt;가 되는 셈이죠!&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 온톨로지, 왜 이렇게 중요할까요?&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;① 흩어진 데이터를 하나로 묶어줘요!&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그에 'AK-47', 'M4', 'Galil'처럼 이름이 다 달라도, 온톨로지는 &quot;얘네 다 &lt;b&gt;[소총]&lt;/b&gt;이야!&quot;라고 정리해 줘요. 덕분에 분석할 때 &quot;이번 라운드에서 소총 든 팀이 얼마나 이겼지?&quot; 같은 질문에 바로 답할 수 있죠.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;② 똑똑한 전술 추론이 가능해요&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 보면 '섬광탄 던지기'랑 '킬 하기'는 따로 노는 데이터 같지만, 온톨로지는 &lt;b&gt;[섬광탄] &amp;rarr; [시야 방해] &amp;rarr; [킬 기여]&lt;/b&gt; 관계를 이미 알고 있어요. 그래서 &quot;A가 섬광을 기가 막히게 던져서 B가 킬을 냈네!&quot;라고 전술적인 칭찬을 해줄 수 있답니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;③ 더 똑똑한 AI를 만들 수 있어요&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게임 봇이나 AI 코치가 &quot;지금은 돈이 없으니까 싼 무기를 사고 팀원이랑 뭉쳐서 가야 해!&quot;라고 판단하는 비결? 바로 온톨로지가 정의해둔 &lt;b&gt;[돈 아끼는 법]&lt;/b&gt;과 &lt;b&gt;[총기 가성비]&lt;/b&gt; 관계 덕분이에요.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 마무리하며&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;온톨로지는 단순히 데이터를 모으는 걸 넘어서, 데이터에 '&lt;b&gt;의미&lt;/b&gt;'와 '&lt;b&gt;순서&lt;/b&gt;'를 정해주는 아주 멋진 과정이에요. CS2처럼 복잡한 전술 게임을 데이터로 제대로 분석해 보고 싶다면, 숫자 너머의 관계를 그려보는 '온톨로지' 공부부터 시작해 보는 건 어떨까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음엔 조금 복잡해 보여도, 한 번 지도를 잘 그려두면 여러분의 데이터가 단순한 로그가 아닌 &lt;b&gt;진짜 보석 같은 지식&lt;/b&gt;으로 변할 거예요!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;585&quot; data-origin-height=&quot;390&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tI43i/dJMcaiblOSo/nQh8kTpL3JZ92FpEeyBKwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tI43i/dJMcaiblOSo/nQh8kTpL3JZ92FpEeyBKwk/img.png&quot; data-alt=&quot;source :https://unsplash.com/photos/n6B49lTx7NM / Ontology&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tI43i/dJMcaiblOSo/nQh8kTpL3JZ92FpEeyBKwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtI43i%2FdJMcaiblOSo%2FnQh8kTpL3JZ92FpEeyBKwk%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-origin-width=&quot;585&quot; data-origin-height=&quot;390&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;source :https://unsplash.com/photos/n6B49lTx7NM / Ontology&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Data Science/Ontology</category>
      <category>AI</category>
      <category>CS2</category>
      <category>Ontology</category>
      <category>게임데이터</category>
      <category>데이터분석</category>
      <category>온톨로지</category>
      <category>재미있는데이터이야기</category>
      <category>지식그래프</category>
      <category>지식맵</category>
      <author>DS-9VM</author>
      <guid isPermaLink="true">https://dadev.tistory.com/195</guid>
      <comments>https://dadev.tistory.com/entry/Ontology-%EC%A7%80%EC%8B%9D%EC%9D%98-%EC%A7%80%EB%8F%84-%EC%98%A8%ED%86%A8%EB%A1%9C%EC%A7%80-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0#entry195comment</comments>
      <pubDate>Thu, 26 Feb 2026 02:40:00 +0900</pubDate>
    </item>
    <item>
      <title>AI 바이브 코딩 도구와 특징</title>
      <link>https://dadev.tistory.com/entry/AI-%EB%B0%94%EC%9D%B4%EB%B8%8C-%EC%BD%94%EB%94%A9-%EB%8F%84%EA%B5%AC%EC%99%80-%ED%8A%B9%EC%A7%95</link>
      <description>&lt;p data-end=&quot;339&quot; data-start=&quot;235&quot; data-ke-size=&quot;size14&quot;&gt;바이브 코딩은 기존의 명확한 기능 명세나 요구사항 없이,&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;( 물론, 실제 AI 바이브 코딩 도구를 활용해서 무언가를 만들 때는 명세나 기능 정의가 필요하다)&lt;/span&gt;&lt;/i&gt; &lt;br /&gt;&lt;b&gt;&amp;lsquo;느낌(vibe)&amp;rsquo;과 &amp;lsquo;감성&amp;rsquo;, &amp;lsquo;스타일&amp;rsquo;, &amp;lsquo;컨셉&amp;rsquo;&lt;/b&gt; 같은 키워드만으로 AI에게 코드를 작성하게 하는 창작 방식이다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;blockquote data-end=&quot;467&quot; data-start=&quot;341&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;p data-end=&quot;351&quot; data-start=&quot;343&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;467&quot; data-start=&quot;354&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;390&quot; data-start=&quot;354&quot;&gt;&quot;애플 공식 홈페이지처럼 감각적인 첫 화면을 만들어 줘.&quot;&lt;/li&gt;
&lt;li data-end=&quot;424&quot; data-start=&quot;393&quot;&gt;&quot;사이버펑크 느낌의 로딩 애니메이션 만들어 줘.&quot;&lt;/li&gt;
&lt;li data-end=&quot;467&quot; data-start=&quot;427&quot;&gt;&quot;잔잔한 파도소리와 함께 시작하는 블로그 스플래시 화면 부탁해.&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p data-end=&quot;548&quot; data-start=&quot;469&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;548&quot; data-start=&quot;469&quot; data-ke-size=&quot;size16&quot;&gt;이처럼, 디자이너나 기획자, 혹은 개발자가 아닌 사람도 &lt;b&gt;자연어로 &amp;lsquo;느낌&amp;rsquo;을 입력&lt;/b&gt;하면 AI가 그에 맞는 코드를 만들어 주는 방식이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;548&quot; data-start=&quot;469&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;548&quot; data-start=&quot;469&quot; data-ke-size=&quot;size16&quot;&gt;&amp;lt;AI 바이브코딩 대표적인 도구&amp;gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 227px;&quot; border=&quot;1&quot; data-end=&quot;1191&quot; data-start=&quot;583&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt;도구명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;특징&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;사용 예시&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;장점&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;단점&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 42px;&quot; data-end=&quot;796&quot; data-start=&quot;657&quot;&gt;
&lt;td style=&quot;height: 42px;&quot; data-col-size=&quot;md&quot; data-end=&quot;715&quot; data-start=&quot;657&quot;&gt;&lt;b&gt;ChatGPT + Code Interpreter (Advanced Data Analysis)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 42px;&quot; data-end=&quot;743&quot; data-start=&quot;715&quot; data-col-size=&quot;sm&quot;&gt;자연어 기반 코딩 + 코드 실행 및 수정 가능&lt;/td&gt;
&lt;td style=&quot;height: 42px;&quot; data-end=&quot;756&quot; data-start=&quot;743&quot; data-col-size=&quot;sm&quot;&gt;웹, 분석, 시각화&lt;/td&gt;
&lt;td style=&quot;height: 42px;&quot; data-end=&quot;777&quot; data-start=&quot;756&quot; data-col-size=&quot;sm&quot;&gt;대화형 수정 가능, 설명이 상세함&lt;/td&gt;
&lt;td style=&quot;height: 42px;&quot; data-end=&quot;796&quot; data-start=&quot;777&quot; data-col-size=&quot;sm&quot;&gt;정확한 UI 스타일링엔 한계&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 42px;&quot; data-end=&quot;899&quot; data-start=&quot;797&quot;&gt;
&lt;td style=&quot;height: 42px;&quot; data-col-size=&quot;md&quot; data-end=&quot;822&quot; data-start=&quot;797&quot;&gt;&lt;b&gt;Replit Ghostwriter&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 42px;&quot; data-end=&quot;845&quot; data-start=&quot;822&quot; data-col-size=&quot;sm&quot;&gt;코드 생성 특화, 실제 IDE와 통합&lt;/td&gt;
&lt;td style=&quot;height: 42px;&quot; data-end=&quot;860&quot; data-start=&quot;845&quot; data-col-size=&quot;sm&quot;&gt;코드 뼈대 생성, 수정&lt;/td&gt;
&lt;td style=&quot;height: 42px;&quot; data-end=&quot;882&quot; data-start=&quot;860&quot; data-col-size=&quot;sm&quot;&gt;코드 생성 속도 빠름, 실시간 보완&lt;/td&gt;
&lt;td style=&quot;height: 42px;&quot; data-end=&quot;899&quot; data-start=&quot;882&quot; data-col-size=&quot;sm&quot;&gt;추상적 표현 해석은 약함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 42px;&quot; data-end=&quot;995&quot; data-start=&quot;900&quot;&gt;
&lt;td style=&quot;height: 42px;&quot; data-col-size=&quot;md&quot; data-end=&quot;921&quot; data-start=&quot;900&quot;&gt;&lt;b&gt;GitHub Copilot&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 42px;&quot; data-end=&quot;949&quot; data-start=&quot;921&quot; data-col-size=&quot;sm&quot;&gt;IDE 보조 도구로 개발자에게 추천 코드 제공&lt;/td&gt;
&lt;td style=&quot;height: 42px;&quot; data-end=&quot;962&quot; data-start=&quot;949&quot; data-col-size=&quot;sm&quot;&gt;코딩 중 자동 완성&lt;/td&gt;
&lt;td style=&quot;height: 42px;&quot; data-end=&quot;974&quot; data-start=&quot;962&quot; data-col-size=&quot;sm&quot;&gt;실무 활용도 높음&lt;/td&gt;
&lt;td style=&quot;height: 42px;&quot; data-end=&quot;995&quot; data-start=&quot;974&quot; data-col-size=&quot;sm&quot;&gt;&amp;lsquo;느낌&amp;rsquo;보단 명확한 입력이 유리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 42px;&quot; data-end=&quot;1097&quot; data-start=&quot;996&quot;&gt;
&lt;td style=&quot;height: 42px;&quot; data-col-size=&quot;md&quot; data-end=&quot;1021&quot; data-start=&quot;996&quot;&gt;&lt;b&gt;Uizard, Galileo AI&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 42px;&quot; data-end=&quot;1042&quot; data-start=&quot;1021&quot; data-col-size=&quot;sm&quot;&gt;UI/UX 기반의 감성 코드 생성&lt;/td&gt;
&lt;td style=&quot;height: 42px;&quot; data-end=&quot;1059&quot; data-start=&quot;1042&quot; data-col-size=&quot;sm&quot;&gt;화면 스케치 &amp;rarr; 코드 변환&lt;/td&gt;
&lt;td style=&quot;height: 42px;&quot; data-end=&quot;1080&quot; data-start=&quot;1059&quot; data-col-size=&quot;sm&quot;&gt;비개발자 접근 용이, 디자인 중심&lt;/td&gt;
&lt;td style=&quot;height: 42px;&quot; data-end=&quot;1097&quot; data-start=&quot;1080&quot; data-col-size=&quot;sm&quot;&gt;기능적 코드 생성엔 한계&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 42px;&quot; data-end=&quot;1191&quot; data-start=&quot;1098&quot;&gt;
&lt;td style=&quot;height: 42px;&quot; data-col-size=&quot;md&quot; data-end=&quot;1111&quot; data-start=&quot;1098&quot;&gt;&lt;b&gt;Cursor&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 42px;&quot; data-end=&quot;1143&quot; data-start=&quot;1111&quot; data-col-size=&quot;sm&quot;&gt;VSCode 기반 AI 에디터, 컨텍스트 이해력 우수&lt;/td&gt;
&lt;td style=&quot;height: 42px;&quot; data-end=&quot;1156&quot; data-start=&quot;1143&quot; data-col-size=&quot;sm&quot;&gt;소스코드 기반 보완&lt;/td&gt;
&lt;td style=&quot;height: 42px;&quot; data-end=&quot;1175&quot; data-start=&quot;1156&quot; data-col-size=&quot;sm&quot;&gt;코드 수정 및 의도 파악 우수&lt;/td&gt;
&lt;td style=&quot;height: 42px;&quot; data-end=&quot;1191&quot; data-start=&quot;1175&quot; data-col-size=&quot;sm&quot;&gt;바이브 중심보단 실무형&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&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;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bapziR/btsOPaFnvLo/4bUkwTIVPvVDVQ3iLrAzPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bapziR/btsOPaFnvLo/4bUkwTIVPvVDVQ3iLrAzPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bapziR/btsOPaFnvLo/4bUkwTIVPvVDVQ3iLrAzPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbapziR%2FbtsOPaFnvLo%2F4bUkwTIVPvVDVQ3iLrAzPK%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;1024&quot; height=&quot;1024&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Knowlege</category>
      <category>ai바이브코딩</category>
      <category>chatgpt code interpreter</category>
      <category>Cursor</category>
      <category>Github Copilot</category>
      <category>replit</category>
      <category>vive coding</category>
      <author>DS-9VM</author>
      <guid isPermaLink="true">https://dadev.tistory.com/194</guid>
      <comments>https://dadev.tistory.com/entry/AI-%EB%B0%94%EC%9D%B4%EB%B8%8C-%EC%BD%94%EB%94%A9-%EB%8F%84%EA%B5%AC%EC%99%80-%ED%8A%B9%EC%A7%95#entry194comment</comments>
      <pubDate>Tue, 24 Jun 2025 00:38:11 +0900</pubDate>
    </item>
    <item>
      <title>[Python] 대용량 데이터 처리 및 분석을 위한 Duck DB</title>
      <link>https://dadev.tistory.com/entry/Python-%EB%8C%80%EC%9A%A9%EB%9F%89-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%B2%98%EB%A6%AC-%EB%B0%8F-%EB%B6%84%EC%84%9D%EC%9D%84-%EC%9C%84%ED%95%9C-Duck-DB</link>
      <description>&lt;p data-ke-size=&quot;size14&quot;&gt;Duck DB + Python 코드를 이용해서 대용량 데이터를 처리하는 방법을 소개합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;DuckDB란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;DuckDB는 임베디드 분석 데이터베이스로, 대규모 데이터 처리를 로컬 환경에서도 빠르고 효율적으로 수행할 수 있도록 설계된 시스템입니다. SQLite와 비슷하게 작동하지만, 주로 데이터 분석 워크로드에 최적화되어 있습니다. 이 시스템은 파이썬, R 등 다양한 언어와 통합되며, OLAP(Online Analytical Processing) 쿼리에 특화되어 있어 데이터 사이언스와 분석에 적합합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;lt;관련 포스팅&amp;gt; &lt;a href=&quot;https://dadev.tistory.com/entry/DuckDB-what-is-duckDB&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[DuckDB] what is DuckDB&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kTPFn/btsJ26JhG8d/Rb5WnuFzqEl5kl8oZXXOD0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kTPFn/btsJ26JhG8d/Rb5WnuFzqEl5kl8oZXXOD0/img.jpg&quot; data-alt=&quot;(source : duckdb blog)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kTPFn/btsJ26JhG8d/Rb5WnuFzqEl5kl8oZXXOD0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkTPFn%2FbtsJ26JhG8d%2FRb5WnuFzqEl5kl8oZXXOD0%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;340&quot; height=&quot;340&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;(source : duckdb blog)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;사전준비&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1) 테스트용 대용량 데이터 생성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;다음 코드를 이용하여 테스트용 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;대용량&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; CSV을 생성합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이 코드는 실행하면 숫자값만 포함된 컬럼이 100개인 1천만 행의 데이터를 만들고, &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;약 3.6GB 의&lt;span&gt; &lt;/span&gt;&lt;/span&gt;크기의 CSV 파일로 저장합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;lt;CSV 파일 포맷&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;v1 ~ v99 의 100개 컬럼 : 각 컬럼에는 0~1000사이의 숫자가 랜덤으로 기록되어 있음.&lt;/p&gt;
&lt;pre id=&quot;code_1728717893611&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import math
import pandas
import os 

def generate_data(rows, cols):
    return pd.DataFrame(np.random.randint(0, 1000, size=(rows, cols)), columns=[f&quot;v{num}&quot; for num in range(cols)])

def generate_csv(output, rows=10, cols=1, chunksize=1000000):
    if rows &amp;gt; chunksize:
        # Pandas 메모리 이슈로 인해서 분할 처리함. 
        partitions = math.ceil(rows / chunksize)
        mod_rows = (rows % chunksize)
        for n in range(partitions):
            header = not os.path.exists(output)
            partition_rows = mod_rows if n == (partitions-1) and mod_rows&amp;gt;0 else chunksize
            print(f&quot;partition={n} / generation rows={partition_rows}&quot;)
            df = generate_data(partition_rows, cols)
            df.to_csv(output, mode=&quot;a&quot;, index=False, header=header)    
    else:
        header = not os.path.exists(output)
        df = generate_dumidata(rows, cols)
        df.to_csv(output, index=False, header=header)

ROWS = 10**7        # 생성할 행수
COLS = 100          # 생성할 데이터의 컬럼수.
CHUNKSIZE = 10**5   # 분할처리할 행수.
OUTPUT_FILE = &quot;./largedata.csv&quot;  # 출력한 CSV파일
if os.path.exists(OUTPUT_FILE):
    os.remove(OUTPUT_FILE)
    print(f&quot;`{OUTPUT_FILE}` removed.&quot;)
    
generate_csv(OUTPUT_FILE, ROWS, COLS, CHUNKSIZE)

file_size = os.path.getsize(OUTPUT_FILE) / 1024 / 1024 / 1024
print( f&quot;maked data : {OUTPUT_FILE} ({round(file_size,1)} GB)&quot; )&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2) duckdb 설치&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;duckdb를 모듈을 설치합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1728717823524&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip install duckdb&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;데이터 분석&amp;nbsp;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1) 데이터(csv) 불러오기&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;사전 준비 과정에서 생성한 python duckdb.sql 함수를 이용해서 duckdb SQL 문을 실행합니다. &lt;br /&gt;SELECT * FROM read_csv() 함수를 이용해서 csv 파일을 불러옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;pandas에서는 dataframe에서 큰 사이즈의 csv파일을 불러올 때 chucksize 지정해서 불러옵니다. 이렇게 하더라도 읽는데 소요되는 시간이나 메모리 문제가 발생할 수 있습니다. 하지만, duckdb에서는 큰 파일을 불러오는 방법이 아주 간편합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1728724443283&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import duckdb 
from time import time

start = time()
output_file = &quot;./largedata.csv&quot;
duck_df = duckdb.sql(f&quot;SELECT * FROM read_csv('{output_file}')&quot;)
end = time()

print(f&quot;durations : {end-start} s&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;해당 csv파일 일반적인 형식으로 별도에 옵션을 지정하지 않았습니다. 구분자나 특정 컬럼만 선택해서 불러오는 등의 특별한 케이스라면 Duckdb API문서를 참고해주시기 바랍니다.&amp;nbsp;&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;size14&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;duckdb 의 read_csv 함수에 대해서 문서를 참고 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;a href=&quot;https://duckdb.org/docs/data/csv/overview&quot;&gt;CSV Import &amp;ndash; DuckDB&lt;/a&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1728725744550&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * 
FROM read_csv( 'flights.csv', 
		delim = '|', 
                header = true, 
                columns = { 'FlightDate': 'DATE',
                            'UniqueCarrier': 'VARCHAR', 
                            'OriginCityName': 'VARCHAR', 
                            'DestCityName': 'VARCHAR' 
                          }
                );&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;b&gt;`read_csv` function Parameters&lt;/b&gt;&lt;br /&gt;
&lt;table style=&quot;background-color: #ffffff; color: #000000; text-align: left; border-collapse: collapse; width: 100%; height: 1122px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 34px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;Name&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;Description&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;Type&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;Default&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 34px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;all_varchar&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;Option to skip type detection for CSV parsing and assume all columns to be of type&lt;span&gt;&amp;nbsp;&lt;/span&gt;VARCHAR. This option is only supported by the&lt;span&gt;&amp;nbsp;&lt;/span&gt;read_csv&lt;span&gt;&amp;nbsp;&lt;/span&gt;function.&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;BOOL&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 51px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 51px;&quot;&gt;allow_quoted_nulls&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 51px;&quot;&gt;Option to allow the conversion of quoted values to&lt;span&gt;&amp;nbsp;&lt;/span&gt;NULL&lt;span&gt;&amp;nbsp;&lt;/span&gt;values&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 51px;&quot;&gt;BOOL&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 51px;&quot;&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 34px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;auto_detect&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;Enables&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://duckdb.org/docs/data/csv/auto_detection.html&quot;&gt;auto detection of CSV parameters&lt;/a&gt;.&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;BOOL&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 51px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 51px;&quot;&gt;auto_type_candidates&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 51px;&quot;&gt;This option allows you to specify the types that the sniffer will use when detecting CSV column types. The&lt;span&gt;&amp;nbsp;&lt;/span&gt;VARCHAR&lt;span&gt;&amp;nbsp;&lt;/span&gt;type is always included in the detected types (as a fallback option). See&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://duckdb.org/docs/data/csv/overview#auto_type_candidates-details&quot;&gt;example&lt;/a&gt;.&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 51px;&quot;&gt;TYPE[]&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 51px;&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://duckdb.org/docs/data/csv/overview#auto_type_candidates-details&quot;&gt;default types&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 51px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 51px;&quot;&gt;columns&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 51px;&quot;&gt;A struct that specifies the column names and column types contained within the CSV file (e.g.,&lt;span&gt;&amp;nbsp;&lt;/span&gt;{'col1': 'INTEGER', 'col2': 'VARCHAR'}). Using this option implies that auto detection is not used.&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 51px;&quot;&gt;STRUCT&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 51px;&quot;&gt;(empty)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 51px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 51px;&quot;&gt;compression&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 51px;&quot;&gt;The compression type for the file. By default this will be detected automatically from the file extension (e.g.,&lt;span&gt;&amp;nbsp;&lt;/span&gt;t.csv.gz&lt;span&gt;&amp;nbsp;&lt;/span&gt;will use gzip,&lt;span&gt;&amp;nbsp;&lt;/span&gt;t.csv&lt;span&gt;&amp;nbsp;&lt;/span&gt;will use&lt;span&gt;&amp;nbsp;&lt;/span&gt;none). Options are&lt;span&gt;&amp;nbsp;&lt;/span&gt;none,&lt;span&gt;&amp;nbsp;&lt;/span&gt;gzip,&lt;span&gt;&amp;nbsp;&lt;/span&gt;zstd.&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 51px;&quot;&gt;VARCHAR&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 51px;&quot;&gt;auto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 34px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;dateformat&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;Specifies the date format to use when parsing dates. See&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://duckdb.org/docs/sql/functions/dateformat.html&quot;&gt;Date Format&lt;/a&gt;.&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;VARCHAR&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;(empty)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 34px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;decimal_separator&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;The decimal separator of numbers.&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;VARCHAR&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 34px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;delimiter&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;Specifies the delimiter character that separates columns within each row (line) of the file. Alias for&lt;span&gt;&amp;nbsp;&lt;/span&gt;sep. This option is only available in the&lt;span&gt;&amp;nbsp;&lt;/span&gt;COPY&lt;span&gt;&amp;nbsp;&lt;/span&gt;statement.&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;VARCHAR&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;,&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 34px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;delim&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;Specifies the delimiter character that separates columns within each row (line) of the file. Alias for&lt;span&gt;&amp;nbsp;&lt;/span&gt;sep.&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;VARCHAR&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;,&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 34px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;escape&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;Specifies the string that should appear before a data character sequence that matches the&lt;span&gt;&amp;nbsp;&lt;/span&gt;quote&lt;span&gt;&amp;nbsp;&lt;/span&gt;value.&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;VARCHAR&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 17px;&quot;&gt;filename&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 17px;&quot;&gt;Whether or not an extra&lt;span&gt;&amp;nbsp;&lt;/span&gt;filename&lt;span&gt;&amp;nbsp;&lt;/span&gt;column should be included in the result.&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 17px;&quot;&gt;BOOL&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 17px;&quot;&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 51px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 51px;&quot;&gt;force_not_null&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 51px;&quot;&gt;Do not match the specified columns' values against the NULL string. In the default case where the&lt;span&gt;&amp;nbsp;&lt;/span&gt;NULL&lt;span&gt;&amp;nbsp;&lt;/span&gt;string is empty, this means that empty values will be read as zero-length strings rather than&lt;span&gt;&amp;nbsp;&lt;/span&gt;NULLs.&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 51px;&quot;&gt;VARCHAR[]&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 51px;&quot;&gt;[]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 34px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;header&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;Specifies that the file contains a header line with the names of each column in the file.&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;BOOL&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 34px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;hive_partitioning&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;Whether or not to interpret the path as a&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://duckdb.org/docs/data/partitioning/hive_partitioning.html&quot;&gt;Hive partitioned path&lt;/a&gt;.&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;BOOL&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 34px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;ignore_errors&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;Option to ignore any parsing errors encountered &amp;ndash; and instead ignore rows with errors.&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;BOOL&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 34px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;max_line_size&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;The maximum line size in bytes.&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;BIGINT&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;2097152&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 34px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;names&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;The column names as a list, see&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://duckdb.org/docs/data/csv/tips.html#provide-names-if-the-file-does-not-contain-a-header&quot;&gt;example&lt;/a&gt;.&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;VARCHAR[]&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;(empty)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 51px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 51px;&quot;&gt;new_line&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 51px;&quot;&gt;Set the new line character(s) in the file. Options are&lt;span&gt;&amp;nbsp;&lt;/span&gt;'\r','\n', or&lt;span&gt;&amp;nbsp;&lt;/span&gt;'\r\n'. Note that the CSV parser only distinguishes between single-character and double-character line delimiters. Therefore, it does not differentiate between&lt;span&gt;&amp;nbsp;&lt;/span&gt;'\r'&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;'\n'.&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 51px;&quot;&gt;VARCHAR&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 51px;&quot;&gt;(empty)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 34px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;normalize_names&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;Boolean value that specifies whether or not column names should be normalized, removing any non-alphanumeric characters from them.&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;BOOL&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 34px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;null_padding&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;If this option is enabled, when a row lacks columns, it will pad the remaining columns on the right with null values.&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;BOOL&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 51px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 51px;&quot;&gt;nullstr&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 51px;&quot;&gt;Specifies the string that represents a&lt;span&gt;&amp;nbsp;&lt;/span&gt;NULL&lt;span&gt;&amp;nbsp;&lt;/span&gt;value or (since v0.10.2) a list of strings that represent a&lt;span&gt;&amp;nbsp;&lt;/span&gt;NULL&lt;span&gt;&amp;nbsp;&lt;/span&gt;value.&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 51px;&quot;&gt;VARCHAR&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;VARCHAR[]&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 51px;&quot;&gt;(empty)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 17px;&quot;&gt;parallel&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 17px;&quot;&gt;Whether or not the parallel CSV reader is used.&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 17px;&quot;&gt;BOOL&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 17px;&quot;&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 17px;&quot;&gt;quote&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 17px;&quot;&gt;Specifies the quoting string to be used when a data value is quoted.&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 17px;&quot;&gt;VARCHAR&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 17px;&quot;&gt;&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 34px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;sample_size&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;The number of sample rows for&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://duckdb.org/docs/data/csv/auto_detection.html&quot;&gt;auto detection of parameters&lt;/a&gt;.&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;BIGINT&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;20480&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 34px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;sep&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;Specifies the delimiter character that separates columns within each row (line) of the file. Alias for&lt;span&gt;&amp;nbsp;&lt;/span&gt;delim.&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;VARCHAR&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;,&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 17px;&quot;&gt;skip&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 17px;&quot;&gt;The number of lines at the top of the file to skip.&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 17px;&quot;&gt;BIGINT&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 17px;&quot;&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 34px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;timestampformat&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;Specifies the date format to use when parsing timestamps. See&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://duckdb.org/docs/sql/functions/dateformat.html&quot;&gt;Date Format&lt;/a&gt;.&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;VARCHAR&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;(empty)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 51px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 51px;&quot;&gt;types&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;dtypes&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 51px;&quot;&gt;The column types as either a list (by position) or a struct (by name).&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://duckdb.org/docs/data/csv/tips.html#override-the-types-of-specific-columns&quot;&gt;Example here&lt;/a&gt;.&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 51px;&quot;&gt;VARCHAR[]&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;STRUCT&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 51px;&quot;&gt;(empty)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 34px;&quot;&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;union_by_name&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;Whether the columns of multiple schemas should be&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://duckdb.org/docs/data/multiple_files/combining_schemas.html#union-by-name&quot;&gt;unified by name&lt;/a&gt;, rather than by position. Note that using this option increases memory consumption.&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;BOOL&lt;/td&gt;
&lt;td style=&quot;text-align: left; height: 34px;&quot;&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Read multiple files&amp;nbsp;&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://duckdb.org/data/flights3.csv&quot;&gt;flights3.csv&lt;/a&gt;:&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;background-color: #f5f5f5; color: #000000; text-align: start;&quot;&gt;&lt;code&gt;FlightDate|OriginCityName|DestCityName
1988-01-01|New York, NY|Los Angeles, CA
1988-01-02|New York, NY|Los Angeles, CA
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://duckdb.org/data/flights4.csv&quot;&gt;flights4.csv&lt;/a&gt;:&lt;/p&gt;
&lt;pre class=&quot;coq&quot; style=&quot;background-color: #f5f5f5; color: #000000; text-align: start;&quot;&gt;&lt;code&gt;FlightDate|UniqueCarrier|OriginCityName|DestCityName
1988-01-03|AA|New York, NY|Los Angeles, CA&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1728728476608&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM read_csv(['flights3.csv', 'flights4.csv'], union_by_name = true);&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;Other case&lt;/p&gt;
&lt;pre id=&quot;code_1728728513083&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT *
FROM 'dir/*.csv';&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1728728534637&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT *
FROM '*/*/*.csv';&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1728728579894&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT *
FROM glob('*');&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2) 집계 쿼리 실행&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;duckdb.query() 함수를 이용하면 duckdb dataframe, pandas datafrarme, polars dataframe과 통합할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;duckdb python 모듈은 duckdb.sql(&quot;select * from read_csv(...)&quot;) 함수에서 반환된&amp;nbsp; duckdb dataframe(`duck_df`)를 FROM절에 그대로 사용하여 데이터를 조회할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;다음 코드는 v1 값이 0~500 인 행의 v2의 평균값의 구합니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1728727233152&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;start = time()
groupby_duck_df = duckdb.query(&quot;SELECT v1, avg(v2) v2 FROM duck_df WHERE v1 BETWEEN 0 AND 500 GROUP BY v1 &quot;)
end = time()
print(f&quot;durations : {end-start}s&quot;)
groupby_duck_df.show()&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;집계 결과를 pandas dataframe으로 변환합니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1728730533420&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;summary_df = groupby_duck_df.df()&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;pandas dataframe plot함수를 이용해 v2의 평균값의 분포를 확인합니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1728730570652&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;start = time()
summary_df[&quot;v2&quot;].plot.hist()
end = time()
print(f&quot;duration : {end-start}s&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;447&quot; data-origin-height=&quot;327&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/batcXj/btsJ2V9cvSr/jUdKQj0yNpK5GKGLg4JIZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/batcXj/btsJ2V9cvSr/jUdKQj0yNpK5GKGLg4JIZK/img.png&quot; data-alt=&quot;duckdb 대용량 처리 - v2 분포 확인.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/batcXj/btsJ2V9cvSr/jUdKQj0yNpK5GKGLg4JIZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbatcXj%2FbtsJ2V9cvSr%2FjUdKQj0yNpK5GKGLg4JIZK%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;447&quot; height=&quot;327&quot; data-origin-width=&quot;447&quot; data-origin-height=&quot;327&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;duckdb 대용량 처리 - v2 분포 확인.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;테스트 결과 &amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 테스트를 Kaggle에서 진행되었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.7gb 파일을 불러오는 것도 0.2초만 되고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;groupby 연산도 0.2초만에 결과를 확인할 수 있었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;duckdb dataframe을 pandas dataframe변환하거나, 데이터 표시할 때는 2.5초 가량이 시간이 소요되었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pandas datafame에서 할수 없는 것들이 가능했습니다.&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>Data Science/Python</category>
      <category>duckdb</category>
      <category>large csv</category>
      <category>large data process</category>
      <category>Python</category>
      <category>read large csv file</category>
      <category>read large data</category>
      <category>대용량 csv 읽기</category>
      <category>대용량 데이터 분석</category>
      <category>대용량 데이터처리</category>
      <author>DS-9VM</author>
      <guid isPermaLink="true">https://dadev.tistory.com/193</guid>
      <comments>https://dadev.tistory.com/entry/Python-%EB%8C%80%EC%9A%A9%EB%9F%89-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%B2%98%EB%A6%AC-%EB%B0%8F-%EB%B6%84%EC%84%9D%EC%9D%84-%EC%9C%84%ED%95%9C-Duck-DB#entry193comment</comments>
      <pubDate>Sat, 12 Oct 2024 20:09:12 +0900</pubDate>
    </item>
    <item>
      <title>gRPC와 REST API 의 차이점</title>
      <link>https://dadev.tistory.com/entry/gRPC%EC%99%80-REST-API-%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90</link>
      <description>&lt;h2 id=&quot;seo-faq-pairs#summary-of-differences-grpc-rest&quot; style=&quot;color: #232f3e; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;gRPC vs. REST&lt;/h2&gt;
&lt;div style=&quot;color: #333333; text-align: start;&quot;&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 457px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px; width: 11.9767%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 42.7907%;&quot;&gt;&lt;span&gt;&lt;b&gt;gRPC API&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 45%;&quot;&gt;&lt;span&gt;&lt;b&gt;REST API&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px; width: 11.9767%;&quot;&gt;&lt;span&gt;무엇인가요?&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px; width: 42.7907%;&quot;&gt;&lt;span&gt;원격 프로시저 호출(RPC) 클라이언트-서버 통신 모델을 기반으로 API를 만들고 사용하는 시스템입니다.&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px; width: 45%;&quot;&gt;&lt;span&gt;클라이언트와 서버 간의 정형 데이터 교환을 정의하는 일련의 규칙입니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 60px;&quot;&gt;
&lt;td style=&quot;height: 60px; width: 11.9767%;&quot;&gt;&lt;span&gt;설계 접근 방식&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 60px; width: 42.7907%;&quot;&gt;&lt;span&gt;서비스 지향 설계. 클라이언트는 서버에 서버 리소스에 영향을 줄 수도 있고 아닐 수도 있는 서비스 또는 기능을 수행해 줄 것을 요청합니다.&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 60px; width: 45%;&quot;&gt;&lt;span&gt;엔터티 지향 설계. 클라이언트에서 서버에 리소스의 생성, 공유 또는 수정을 요청합니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px; width: 11.9767%;&quot;&gt;&lt;span&gt;통신 모델&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px; width: 42.7907%;&quot;&gt;&lt;span&gt;단방향, 단일 서버-다중 클라이언트, 단일 클라이언트-다중 서버, 다중 클라이언트-다중 서버 등 다양한 옵션이 있습니다.&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px; width: 45%;&quot;&gt;&lt;span&gt;단방향. 단일 클라이언트가 단일 서버와 통신합니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 60px;&quot;&gt;
&lt;td style=&quot;height: 60px; width: 11.9767%;&quot;&gt;&lt;span&gt;구현&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 60px; width: 42.7907%;&quot;&gt;&lt;span&gt;작동하려면 클라이언트 측과 서버 측 모두에 gRPC 소프트웨어가 필요합니다.&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 60px; width: 45%;&quot;&gt;&lt;span&gt;공통 소프트웨어 없이 클라이언트 측과 서버 측에서 다양한 형식으로 구현할 수 있습니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px; width: 11.9767%;&quot;&gt;&lt;span&gt;데이터 액세스&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px; width: 42.7907%;&quot;&gt;&lt;span&gt;서비스(기능) 직접 호출&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px; width: 45%;&quot;&gt;&lt;span&gt;리소스를 정의하는 URL 형태의 여러 엔드포인트&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px; width: 11.9767%;&quot;&gt;&lt;span&gt;반환된 데이터&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px; width: 42.7907%;&quot;&gt;&lt;span&gt;Protocol Buffer 파일에 정의된 서비스의 고정된 반환 유형으로 반환됩니다.&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px; width: 45%;&quot;&gt;&lt;span&gt;서버에서 정의하는 고정 구조(일반적으로 JSON)로 반환됩니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px; width: 11.9767%;&quot;&gt;&lt;span&gt;클라이언트-서버 커플링&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px; width: 42.7907%;&quot;&gt;&lt;span&gt;긴밀하게 결합됩니다. 클라이언트와 서버 모두에 데이터 형식을 정의하는 동일한 Protocol Buffer 파일이 필요합니다.&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px; width: 45%;&quot;&gt;&lt;span&gt;느슨하게 결합됩니다. 클라이언트와 서버는 내부 세부 정보를 인식하지 못합니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px; width: 11.9767%;&quot;&gt;&lt;span&gt;자동 코드 생성&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px; width: 42.7907%;&quot;&gt;&lt;span&gt;기본 제공 기능&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px; width: 45%;&quot;&gt;&lt;span&gt;서드 파티 도구가 필요합니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px; width: 11.9767%;&quot;&gt;&lt;span&gt;양방향 스트리밍&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px; width: 42.7907%;&quot;&gt;&lt;span&gt;있음&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px; width: 45%;&quot;&gt;&lt;span&gt;없음&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px; width: 11.9767%;&quot;&gt;&lt;span&gt;가장 적합한 용도&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px; width: 42.7907%;&quot;&gt;&lt;span&gt;고성능 또는 데이터 사용량이 많은 마이크로서비스 아키텍처&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px; width: 45%;&quot;&gt;&lt;span&gt;리소스가 잘 정의되어 있는 단순한 데이터 소스&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #fbfbfb; color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;REST는 웹 서비스 및 &lt;a href=&quot;https://dadev.tistory.com/entry/Monolith-vs-Microservice&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;마이크로서비스 아키텍처&lt;/a&gt;에 가장 많이 이용됩니다. REST는 간단한 구현과 데이터 구조 매핑, 가독성 및 유연성이 장점입니다. 또한 개념이나 REST API 구현은 어렵지 않습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #fbfbfb; color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;REST API의 일반적인 사례&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #fbfbfb; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;웹 기반 아키텍처&lt;/li&gt;
&lt;li&gt;외부 사용자가 쉽게 이해할 수 있는 Open API&lt;/li&gt;
&lt;li&gt;간단한 데이터 통신&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #fbfbfb; color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;gRPC는 분산된 데이터 센터에서 &lt;a href=&quot;https://dadev.tistory.com/entry/Monolith-vs-Microservice&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;마이크로서비스 아키텍처&lt;/a&gt;를 위한 고성능 API를 구현하도록 설계되었습니다. 실시간 스트리밍과 대규모 데이터 로드가 필요한 내부 시스템에 더 적합한 gRPC는 API의 인터페이스가 변경될 가능성이 낮고, 여러 프로그래밍 언어로 구성된 마이크로서비스 아키텍처에도 적합합니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #fbfbfb; color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;gRPC API는 일반적인 사례&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #fbfbfb; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;고성능 시스템&lt;/li&gt;
&lt;li&gt;많은 양의 데이터 로드&lt;/li&gt;
&lt;li&gt;실시간 또는 스트리밍 애플리케이&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;552&quot; data-origin-height=&quot;327&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ct5KaW/btsJ4fko1tP/UKwwgKU9RlFqK2jtop1zp1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ct5KaW/btsJ4fko1tP/UKwwgKU9RlFqK2jtop1zp1/img.jpg&quot; data-alt=&quot;gRPC (source : https://grpc.io/docs/what-is-grpc/introduction/ )&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ct5KaW/btsJ4fko1tP/UKwwgKU9RlFqK2jtop1zp1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fct5KaW%2FbtsJ4fko1tP%2FUKwwgKU9RlFqK2jtop1zp1%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;552&quot; height=&quot;327&quot; data-origin-width=&quot;552&quot; data-origin-height=&quot;327&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;gRPC (source : https://grpc.io/docs/what-is-grpc/introduction/ )&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #232f3e; text-align: start;&quot;&gt;원문 :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a style=&quot;color: #0070d1; text-align: start;&quot; href=&quot;https://aws.amazon.com/ko/compare/the-difference-between-grpc-and-rest/&quot;&gt;gRPC와 REST 비교 - 애플리케이션 설계의 차이 - AWS (amazon.com)&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;lt;참고자료&amp;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;a href=&quot;https://grpc.io/docs/guides/&quot;&gt;Guides | gRPC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a style=&quot;background-color: #e6f5ff; color: #0070d1; text-align: start;&quot; href=&quot;https://grpc.io/docs/what-is-grpc/introduction/&quot;&gt;Introduction to gRPC | gRPC&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;lt;관련 포스팅&amp;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;a href=&quot;https://dadev.tistory.com/entry/Monolith-vs-Microservice&quot;&gt;Monolith vs. Microservice&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programming</category>
      <category>api architecture</category>
      <category>grpc</category>
      <category>IDL</category>
      <category>Microservice</category>
      <category>REST API</category>
      <category>RESTful API</category>
      <category>마이크로서비스</category>
      <category>원격 프로시저 호출</category>
      <category>클라이언트-서버 통신</category>
      <author>DS-9VM</author>
      <guid isPermaLink="true">https://dadev.tistory.com/192</guid>
      <comments>https://dadev.tistory.com/entry/gRPC%EC%99%80-REST-API-%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90#entry192comment</comments>
      <pubDate>Sat, 12 Oct 2024 02:19:46 +0900</pubDate>
    </item>
    <item>
      <title>[DBMS] 컬럼 기반(Column-oriented) vs. 로우 기반 (Row-oriented)</title>
      <link>https://dadev.tistory.com/entry/DBMS-%EC%BB%AC%EB%9F%BC-%EA%B8%B0%EB%B0%98Column-Oriented-vs-%EB%A1%9C%EC%9A%B0-%EA%B8%B0%EB%B0%98-Row-Oriented</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;Summary&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;컬럼 기반 저장소(Column Oriented Store)&amp;nbsp;&lt;/b&gt;&lt;br /&gt;: 집계/분석에 읽기 특화되어 OLAP에 활용&lt;br /&gt;&lt;br /&gt;&lt;b&gt;로우 기반 저장소(Row Oriented Store)&lt;/b&gt;&lt;br /&gt;: 등록/수정/삭제에 특화되어 OLTP에 활용&amp;nbsp;&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 아키텍쳐&amp;nbsp;&lt;/h3&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;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터를 컬럼 단위로 저장합니다. 각 컬럼은 데이터 타입에 따라 별도의 파일이나 블록에 저장되어, 같은 속성을 가진 데이터가 인접하게 위치합니다.&lt;br /&gt;대표적인 컬럼 기반 DBMS : Vertica, Paraccel (Actian Matrix and Amazon Redshift), Sybase IQ, Exasol, Infobright, InfiniDB, MonetDB (VectorWise and Actian Vector), LucidDB, SAP HANA, Google Dremel, Google PowerDrill, Druid, kdb+.&lt;/li&gt;
&lt;li&gt;예를 들어, 고객 데이터베이스가 있을 때, &quot;이름&quot;, &quot;주소&quot;, &quot;전화번호&quot; 등의 컬럼이 개별적으로 저장됩니다.&lt;/li&gt;
&lt;li&gt;쿼리 시 특정 컬럼만 읽어들이므로 필요한 데이터만 메모리에 로드합니다. 이로 인해 데이터 분석 및 집계 쿼리에 최적화되어 있습니다.&lt;/li&gt;
&lt;li&gt;예: &quot;모든 고객의 이름&quot;을 조회할 때, &quot;이름&quot; 컬럼만 읽어들이면 됩니다.&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;630&quot; data-origin-height=&quot;258&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dnYH7B/btsJLJUVdAV/40g60OjUYc7AjuxrNsrNfk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dnYH7B/btsJLJUVdAV/40g60OjUYc7AjuxrNsrNfk/img.gif&quot; data-alt=&quot;Column-oriented DBMS (source : clickhouse.com/docs)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dnYH7B/btsJLJUVdAV/40g60OjUYc7AjuxrNsrNfk/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/dnYH7B/btsJLJUVdAV/40g60OjUYc7AjuxrNsrNfk/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;630&quot; height=&quot;258&quot; data-origin-width=&quot;630&quot; data-origin-height=&quot;258&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Column-oriented DBMS (source : clickhouse.com/docs)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터를 행 단위로 저장합니다. 각 행은 모든 속성을 포함하고 있으며, 레코드가 순차적으로 저장됩니다.&amp;nbsp;&lt;br /&gt;대표적인 로우 기반 DBMS : SQL Server, MySQL, PostgreSQL&amp;nbsp;&lt;/li&gt;
&lt;li&gt;같은 고객 데이터베이스에서 &quot;고객ID&quot;, &quot;이름&quot;, &quot;주소&quot;, &quot;전화번호&quot;가 하나의 레코드로 저장됩니다.&lt;/li&gt;
&lt;li&gt;쿼리 시 모든 컬럼을 읽어들이는 경우가 많아, 데이터가 많을 경우 불필요한 데이터까지 로드하여 메모리와 I/O 성능에 영향을 줄 수 있습니다.&lt;/li&gt;
&lt;li&gt;예: &quot;고객ID와 이름을 가져오기&quot; 위해서는 고객 데이터의 모든 컬럼을 로드해야 할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;630&quot; data-origin-height=&quot;258&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5thT6/btsJLi4x5sW/oc47PCc0lWMi986jmI4W21/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5thT6/btsJLi4x5sW/oc47PCc0lWMi986jmI4W21/img.gif&quot; data-alt=&quot;Row-oriented DBMS (source : clickhouse.com/docs)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5thT6/btsJLi4x5sW/oc47PCc0lWMi986jmI4W21/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/5thT6/btsJLi4x5sW/oc47PCc0lWMi986jmI4W21/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;630&quot; height=&quot;258&quot; data-origin-width=&quot;630&quot; data-origin-height=&quot;258&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Row-oriented DBMS (source : clickhouse.com/docs)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예시 데이터 비교&amp;nbsp;&lt;br /&gt;고객 정보를 포함한 데이터베이스를 예로 들어보겠습니다. 데이터는 다음과 같이 구성되어 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;577&quot; data-origin-height=&quot;112&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buV5CA/btsJMzDLQpM/GYprTk0roEPVpR1VNeXc00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buV5CA/btsJMzDLQpM/GYprTk0roEPVpR1VNeXc00/img.png&quot; data-alt=&quot;컬럼 기반(Column Oriented) vs. 행 기반 (Row Oriented)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buV5CA/btsJMzDLQpM/GYprTk0roEPVpR1VNeXc00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuV5CA%2FbtsJMzDLQpM%2FGYprTk0roEPVpR1VNeXc00%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;577&quot; height=&quot;112&quot; data-origin-width=&quot;577&quot; data-origin-height=&quot;112&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;컬럼 기반(Column Oriented) vs. 행 기반 (Row Oriented)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;u&gt;&lt;b&gt;컬럼 기반 저장소&lt;/b&gt;&lt;/u&gt;에서는 각 컬럼이 별도로 저장됩니다. 데이터는 다음과 같이 구성될 수 있습니다:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;고객ID 컬럼:&lt;/b&gt;&lt;br /&gt;[1, 2, 3]&lt;br /&gt;&lt;br /&gt;&lt;b&gt;이름 컬럼:&lt;/b&gt;&lt;br /&gt;[&quot;홍길동&quot;, &quot;김철수&quot;, &quot;이영희&quot;]&lt;br /&gt;&lt;br /&gt;&lt;b&gt;주소 컬럼:&lt;/b&gt;&lt;br /&gt;[&quot;서울시 강남구 123로&quot;, &quot;부산시 해운대구 456로&quot;, &quot;대구시 수성구 789로&quot;]&lt;br /&gt;&lt;br /&gt;&lt;b&gt;전화번호 컬럼:&lt;/b&gt;&lt;br /&gt;[&quot;010-1234-5678&quot;, &quot;010-2345-6789&quot;, &quot;010-3456-7890&quot;]&lt;br /&gt;&lt;br /&gt;이러한 저장 방식은 데이터 조회 시 특정 컬럼만 로드할 수 있어, 예를 들어 전화번호만 필요할 경우 전화번호 컬럼만 메모리에 로드하면 됩니다.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;로우 기반 저장소&lt;/b&gt;&lt;/u&gt;에서 행 단위로 저장되게 됩니다. &lt;br /&gt;[1,&quot;홍길동&quot;, &quot;서울시 강남구 123로&quot;, &quot;010-1234-5678&quot;]&lt;br /&gt;[2,&quot;김철수&quot;, &quot;부산시 해운대구 456로&quot;, &quot;010-2345-6789&quot;]&lt;br /&gt;[3,&quot;이영희&quot;, &quot;대구시 수성구 789로&quot;, &quot;010-3456-7890&quot;]&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 성능&lt;/h3&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;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;대규모 데이터 집계 및 분석에 뛰어난 성능을 보입니다. 데이터가 컬럼 단위로 저장되어 있어, 같은 데이터 타입의 컬럼들끼리 압축률이 높습니다.&lt;/li&gt;
&lt;li&gt;쿼리 성능이 빠르며, OLAP(Online Analytical Processing) 환경에서 우수합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;로우 기반 저장소&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;일반적으로 트랜잭션 처리가 빈번한 OLTP(Online Transaction Processing) 시스템에서 성능이 좋습니다. 모든 컬럼을 포함한 한 번의 레코드를 읽기 때문에 데이터 삽입 및 수정 시 효율적입니다.&lt;/li&gt;
&lt;li&gt;삽입, 수정, 삭제가 빈번한 환경에서 뛰어난 성능을 제공합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 장단점&lt;/h3&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;/b&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;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;빠른 데이터 분석 및 집계 쿼리 성능.&lt;/li&gt;
&lt;li&gt;효율적인 데이터 압축과 I/O 절약.&lt;/li&gt;
&lt;li&gt;OLAP 및 데이터 웨어하우스에 최적화.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;단점&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 삽입, 수정 시 성능 저하.&lt;/li&gt;
&lt;li&gt;메모리 소비가 클 수 있음.&lt;/li&gt;
&lt;li&gt;복잡한 쿼리 작성 필요.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;로우 기반 저장소&lt;/b&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;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 삽입 및 수정이 용이하고 빠름.&lt;/li&gt;
&lt;li&gt;단순한 데이터 모델링과 쿼리 작성.&lt;/li&gt;
&lt;li&gt;OLTP에 최적화되어 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;단점&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;대량의 데이터 분석 시 성능 저하.&lt;/li&gt;
&lt;li&gt;비효율적인 데이터 압축.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 활용 사례&lt;/h3&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;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;대규모 데이터 분석, BI 보고서 작성, 데이터 웨어하우스, 실시간 분석 애플리케이션.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;로우 기반 저장소&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;트랜잭션 기반 애플리케이션, ERP 시스템, 웹 애플리케이션의 사용자 데이터 저장.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Data Science/DB+SQL</category>
      <category>column oriented store</category>
      <category>olap dbms</category>
      <category>oltp dbms</category>
      <category>row oriented store</category>
      <category>로우 기반 저장소</category>
      <category>컬럼 기반 저장소</category>
      <author>DS-9VM</author>
      <guid isPermaLink="true">https://dadev.tistory.com/191</guid>
      <comments>https://dadev.tistory.com/entry/DBMS-%EC%BB%AC%EB%9F%BC-%EA%B8%B0%EB%B0%98Column-Oriented-vs-%EB%A1%9C%EC%9A%B0-%EA%B8%B0%EB%B0%98-Row-Oriented#entry191comment</comments>
      <pubDate>Thu, 26 Sep 2024 03:06:44 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL] 대량의 테스트 데이터 생성 SQL</title>
      <link>https://dadev.tistory.com/entry/MySQL-%EB%8C%80%EB%9F%89%EC%9D%98-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%83%9D%EC%84%B1-SQL</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 테이블 생성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 생성할 데이터를 저장할 테이블을 생성합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1727284987860&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 대상 테이블 생성
CREATE TABLE IF NOT EXISTS performance_test (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    age TINYINT UNSIGNED,
    city VARCHAR(50),
    salary INT UNSIGNED,
    created_at DATETIME
);&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 순차 번호 테이블 생성.&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MariaDB에는 기본적으로 숫자 시퀀스를 생성하는 내장 기능이 없기 때문에, 순차 번호(1~1000만) 테이블을 만들어 사용할 수 있습니다. 다음 스크립트를 사용하여 연속된 숫자를 포함한 테이블을 만듭니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1727285007031&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 순차 번호(1~1000만) 테이블 생성 
CREATE TABLE IF NOT EXISTS seq_1000K AS 
WITH base as (
	SELECT 0 UNION ALL SELECT 1 UNION ALL 
	SELECT 2 UNION ALL SELECT 3 UNION ALL 
	SELECT 4 UNION ALL SELECT 5 UNION ALL 
	SELECT 6 UNION ALL SELECT 7 UNION ALL 
	SELECT 8 UNION ALL SELECT 9
)
SELECT 	@row := @row + 1 AS number 
FROM 	base t1, 
		base t2,
		base t3,
		base t4,
		base t5,
		base t6,
		base t7,
		(SELECT @row := 0) t99
;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 대량 데이터 삽입 반복&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한번 실행할 때마다 1000만 행씩 삽입합니다. 더 많은 데이터를 추가하려면 위의 INSERT INTO SELECT 구문을 여러 번 실행합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1727285359311&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 할번 실행할 때마다 1000만 행 삽입
INSERT INTO performance_test (name, age, city, salary, created_at)
SELECT 
    CONCAT('user_', number + 10000) AS name,                 -- 유일한 이름 생성
    FLOOR(RAND() * 100) AS age,                              -- 0~99 사이의 랜덤 나이
    ELT(FLOOR(RAND() * 5) + 1, 'Seoul', 'New York', 'Paris', 'Tokyo', 'Berlin') AS city,  -- 임의의 도시
    FLOOR(RAND() * 150000) + 30000 AS salary,                -- 30,000 ~ 180,000 사이의 랜덤 급여
    NOW() - INTERVAL FLOOR(RAND() * 3650) DAY AS created_at  -- 과거 10년 안의 임의 날짜
FROM  seq_1000K
;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1727285407247&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 데이터의 개수 확인
SELECT COUNT(*) FROM performance_test;&lt;/code&gt;&lt;/pre&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;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GV3r6/btsJLGqoIkQ/tJxS6PIrlQ6FaORCjvHWtk/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GV3r6/btsJLGqoIkQ/tJxS6PIrlQ6FaORCjvHWtk/img.webp&quot; data-alt=&quot;(source : chatgpt generation)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GV3r6/btsJLGqoIkQ/tJxS6PIrlQ6FaORCjvHWtk/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGV3r6%2FbtsJLGqoIkQ%2FtJxS6PIrlQ6FaORCjvHWtk%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;340&quot; height=&quot;340&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;(source : chatgpt generation)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Data Science/DB+SQL</category>
      <category>generate dumi data</category>
      <category>mariadb</category>
      <category>MySQL</category>
      <category>mysql 데이터 데이터 만들기</category>
      <category>SQL</category>
      <category>더미 데이터 만들기</category>
      <category>테스트 데이터 생성</category>
      <author>DS-9VM</author>
      <guid isPermaLink="true">https://dadev.tistory.com/190</guid>
      <comments>https://dadev.tistory.com/entry/MySQL-%EB%8C%80%EB%9F%89%EC%9D%98-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%83%9D%EC%84%B1-SQL#entry190comment</comments>
      <pubDate>Thu, 26 Sep 2024 02:30:23 +0900</pubDate>
    </item>
    <item>
      <title>WSL miniconda 설치 방법</title>
      <link>https://dadev.tistory.com/entry/WSL-minicodna-%EC%84%A4%EC%B9%98-%EB%B0%A9%EB%B2%95</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;WSL Ubuntu Miniconda 설치&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1727278360029&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 1. update os
sudo apt update   

# 2. upgrade os
sudo apt upgrade

# 3. download Miniconda
curl https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -o Miniconda3-latest-Linux-x86_64.sh

# 4. install Miniconda
sudo chmod +x Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh

# 5. export PATH
# export PATH=$PATH:(Miniconda가 설치된 path)
export PATH=$PATH:/home/user/miniconda3/bin&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;/p&gt;
&lt;pre id=&quot;code_1727278432099&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;conda --version&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Shell &amp;amp; Command</category>
      <category>miniconda</category>
      <category>miniconda설치</category>
      <category>Python</category>
      <category>WSL</category>
      <author>DS-9VM</author>
      <guid isPermaLink="true">https://dadev.tistory.com/189</guid>
      <comments>https://dadev.tistory.com/entry/WSL-minicodna-%EC%84%A4%EC%B9%98-%EB%B0%A9%EB%B2%95#entry189comment</comments>
      <pubDate>Thu, 26 Sep 2024 00:43:44 +0900</pubDate>
    </item>
    <item>
      <title>[OLAP] Open Source OLAP DBMS</title>
      <link>https://dadev.tistory.com/entry/OLAP-Open-Source-OLAP-DBMS</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. &lt;b&gt;DuckDB&lt;/b&gt;&lt;/h3&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;/b&gt;: DuckDB는 가볍고 로컬에서 실행 가능한 OLAP 데이터베이스로, 데스크탑 환경에서 대용량 데이터를 분석하는 데 최적화된 경량 OLAP 엔진입니다. 내장형 데이터베이스로 로컬 파일(CSV, Parquet 등)을 직접 쿼리하는 데 강점을 지니고 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;특징&lt;/b&gt;:&lt;/h4&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;/b&gt;: 데이터를 컬럼 단위로 저장하여, 대규모 데이터셋에 대해 빠른 분석 쿼리를 실행할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;내장형 DB&lt;/b&gt;: 파일 시스템에 저장되지 않고 메모리에서 처리되며, 별도의 서버가 필요 없습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;다양한 파일 형식 지원&lt;/b&gt;: CSV, Parquet, Arrow 등의 파일을 직접 쿼리할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데스크탑 환경 최적화&lt;/b&gt;: 데이터 분석에 최적화된 데스크탑 기반의 OLAP 솔루션.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;장점&lt;/b&gt;:&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;빠르고 경량화된 쿼리 처리.&lt;/li&gt;
&lt;li&gt;파이썬, R, Julia 등 여러 언어와 자연스럽게 통합 가능.&lt;/li&gt;
&lt;li&gt;CSV, Parquet 등의 파일을 로드하지 않고도 직접 쿼리 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;단점&lt;/b&gt;:&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;분산 처리 기능이 없어 대규모 분산 환경에서는 적합하지 않음.&lt;/li&gt;
&lt;li&gt;서버리스 모델이므로 클러스터 기반의 고가용성 지원 부족.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;사용 사례&lt;/b&gt;:&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;로컬 환경에서의 데이터 분석.&lt;/li&gt;
&lt;li&gt;CSV, Parquet 파일 기반의 분석 작업.&lt;/li&gt;
&lt;li&gt;머신러닝 및 데이터 사이언스 작업의 사전 데이터 처리.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. &lt;a href=&quot;https://clickhouse.com/docs/en/getting-started/quick-start&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;ClickHouse&lt;/b&gt;&lt;/a&gt;&lt;/h3&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;/b&gt;: ClickHouse는 고성능, 분산형 컬럼 기반 OLAP DB로 실시간 데이터 분석과 대규모 데이터 처리에 매우 효율적입니다. 주로 로그 분석, 웹 애플리케이션의 실시간 데이터 처리 등에 사용됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1213&quot; data-origin-height=&quot;577&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0UdM3/btsJKdNXOjf/cTbkTNurM0klZ20dAF33K0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0UdM3/btsJKdNXOjf/cTbkTNurM0klZ20dAF33K0/img.png&quot; data-alt=&quot;clickhouse&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0UdM3/btsJKdNXOjf/cTbkTNurM0klZ20dAF33K0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0UdM3%2FbtsJKdNXOjf%2FcTbkTNurM0klZ20dAF33K0%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;1213&quot; height=&quot;577&quot; data-origin-width=&quot;1213&quot; data-origin-height=&quot;577&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;clickhouse&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;특징&lt;/b&gt;:&lt;/h4&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;/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;대규모 데이터 처리&lt;/b&gt;: 수십 TB의 데이터까지 확장 가능하며, 주로 로그 분석 및 사용자 행동 데이터 분석에 활용됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;장점&lt;/b&gt;:&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;분산 아키텍처로 인해 뛰어난 확장성과 성능.&lt;/li&gt;
&lt;li&gt;대규모 데이터를 실시간으로 처리 가능.&lt;/li&gt;
&lt;li&gt;사용이 간단한 SQL 인터페이스 제공.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;단점&lt;/b&gt;:&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;복잡한 설정과 운영 요구.&lt;/li&gt;
&lt;li&gt;복잡한 분산 처리 시 성능 튜닝 필요.&lt;/li&gt;
&lt;li&gt;OLTP 작업에 적합하지 않음(분석에 최적화).&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;사용 사례&lt;/b&gt;:&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실시간 로그 분석(예: 웹 서버 로그).&lt;/li&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;lt;참고자료&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Click House Tutorial&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;a href=&quot;https://clickhouse.com/docs/en/getting-started/example-datasets/uk-price-paid&quot;&gt;The UK property prices dataset | ClickHouse Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. &lt;b&gt;Apache Druid&lt;/b&gt;&lt;/h3&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;/b&gt;: Apache Druid는 실시간 데이터 스트리밍 및 대규모 데이터 분석에 특화된 오픈 소스 분산형 OLAP 데이터베이스입니다. Druid는 빠른 질의 응답 시간과 높은 처리량을 제공하며, 로그 분석, 사용자 행동 추적, 대시보드 실시간 분석 등 대규모 실시간 데이터 처리와 분석에 자주 사용됩니다. 특히, 타임 시리즈 데이터를 처리하는 데 강점을 가지고 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;특징&lt;/b&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;: Druid는 실시간으로 데이터를 수집하고, 거의 실시간으로 쿼리가 가능하도록 데이터를 인덱싱하고 분석할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;분산형 아키텍처&lt;/b&gt;: Druid는 분산형으로 설계되어 있어, 대규모 클러스터에서 데이터 처리를 수행하고, 수평적으로 확장 가능합니다. 이는 대규모 데이터셋을 처리하는 데 매우 유용합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;타임 시리즈 데이터 최적화&lt;/b&gt;: Druid는 시간 기반의 데이터를 효율적으로 처리할 수 있도록 설계되어 있어, 타임 시리즈 데이터 분석에 매우 적합합니다. 예를 들어, 로그 데이터나 IoT 센서 데이터와 같은 대규모 연속 데이터의 분석에 사용됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;컬럼형 저장소&lt;/b&gt;: Druid는 컬럼 기반으로 데이터를 저장하며, 데이터 압축 및 빠른 검색 성능을 제공합니다. 컬럼 기반 저장 덕분에 대규모 데이터에 대한 집계 연산을 빠르게 수행할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;빠른 질의 성능&lt;/b&gt;: Druid는 고성능 질의 엔진을 제공하여 수백 테라바이트 이상의 데이터를 빠르게 쿼리할 수 있으며, 실시간 대시보드 같은 요구 사항에 적합합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;고가용성&lt;/b&gt;: 여러 노드를 활용해 데이터를 저장하고 처리할 수 있으며, 고가용성과 장애 복구를 지원합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ETL 기능&lt;/b&gt;: Druid는 ETL(Extract, Transform, Load) 기능을 제공하여 데이터를 효율적으로 처리하고, JSON, CSV, Apache Kafka와 같은 다양한 데이터 소스로부터 데이터를 수집합니다.&lt;/li&gt;
&lt;/ol&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;Druid는 &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;Historical Nodes&lt;/b&gt;: 오래된 데이터를 저장하고, 쿼리에 응답하는 노드입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Middle Manager Nodes&lt;/b&gt;: 실시간 데이터 수집, 처리, 인덱싱을 담당합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Broker Nodes&lt;/b&gt;: 사용자로부터 쿼리를 수신하고, 쿼리를 각 노드에 분배한 후 결과를 취합하여 반환합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Coordinator Nodes&lt;/b&gt;: 데이터 배포와 복제를 관리하며, Historical 노드의 메모리 관리를 돕습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;장점&lt;/b&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;: Druid는 스트리밍 데이터 분석에 특화되어 있어, 거의 실시간으로 데이터를 처리하고 분석할 수 있습니다.&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;타임 시리즈 데이터 최적화&lt;/b&gt;: 로그나 행동 분석과 같은 시계열 데이터를 처리하는 데 매우 효율적입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;풍부한 데이터 소스 지원&lt;/b&gt;: Kafka, Kinesis, HDFS, S3, HTTP 등 다양한 데이터 소스와의 통합을 지원합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;단점&lt;/b&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;: Druid의 분산형 아키텍처는 뛰어난 성능을 제공하지만, 설치와 관리가 복잡할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;OLTP에 부적합&lt;/b&gt;: OLAP 분석에 특화된 시스템이기 때문에, 트랜잭션 처리나 빠른 업데이트가 필요한 OLTP(Online Transaction Processing) 환경에는 적합하지 않습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;하드웨어 요구 사항&lt;/b&gt;: 고성능을 위해서는 상당한 하드웨어 자원이 필요할 수 있습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. &lt;b&gt;Apache Pinot&lt;/b&gt;&lt;/h3&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;/b&gt;: Apache Pinot는 실시간 데이터 분석에 최적화된 분산형 OLAP(Open-source, Real-time Distributed OLAP) 데이터베이스입니다. 원래 LinkedIn에서 개발되어 실시간 사용자 행동 분석, 애플리케이션 모니터링, 대시보드 생성 등에 사용되었으며, 현재는 다양한 실시간 분석 환경에서 사용되고 있습니다. &lt;b&gt;Apache Kafka&lt;/b&gt;와의 통합을 통해 스트리밍 데이터를 실시간으로 처리하고, 매우 낮은 지연 시간으로 데이터를 분석할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;특징&lt;/b&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;: Pinot는 실시간 스트리밍 데이터를 수집하고, 거의 실시간으로 쿼리할 수 있습니다. Apache Kafka, Apache Pulsar 등과 통합되어 스트리밍 데이터를 지속적으로 분석하는 데 적합합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;대용량 데이터 처리&lt;/b&gt;: Pinot는 수십억 건 이상의 대규모 데이터를 저장하고 분석할 수 있습니다. 특히 로그 분석, 사용자 이벤트 데이터 처리 등 대규모 데이터 셋에 특화되어 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;컬럼형 저장소&lt;/b&gt;: 데이터는 컬럼 단위로 저장되며, 이로 인해 대규모 데이터를 처리하는데 매우 효율적이고 빠른 분석 쿼리를 지원합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;분산형 아키텍처&lt;/b&gt;: Pinot는 분산 클러스터에서 실행되며, 수평 확장이 가능하여 대규모 트래픽과 데이터 증가에 유연하게 대응할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;빠른 쿼리 성능&lt;/b&gt;: 대규모 데이터를 빠르게 분석할 수 있으며, 초 단위 이하의 응답 시간을 제공합니다. 대시보드 및 실시간 애플리케이션에서 실시간으로 데이터를 조회하는 데 최적화되어 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;유연한 데이터 소스 지원&lt;/b&gt;: Pinot는 Apache Kafka, HDFS, S3, RDBMS, NoSQL과 같은 다양한 데이터 소스로부터 데이터를 수집할 수 있습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1160&quot; data-origin-height=&quot;444&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EcA3A/btsJItLxcuZ/mjtb47oLq4SKwJn8ZsDjU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EcA3A/btsJItLxcuZ/mjtb47oLq4SKwJn8ZsDjU1/img.png&quot; data-alt=&quot;apache Pinot: The real-time analytics open source platform (source : pinot.apache.org)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EcA3A/btsJItLxcuZ/mjtb47oLq4SKwJn8ZsDjU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEcA3A%2FbtsJItLxcuZ%2Fmjtb47oLq4SKwJn8ZsDjU1%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;1160&quot; height=&quot;444&quot; data-origin-width=&quot;1160&quot; data-origin-height=&quot;444&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;apache Pinot: The real-time analytics open source platform (source : pinot.apache.org)&lt;/figcaption&gt;
&lt;/figure&gt;
&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;Pinot는 크게 &lt;b&gt;Controller&lt;/b&gt;, &lt;b&gt;Broker&lt;/b&gt;, &lt;b&gt;Server&lt;/b&gt;, &lt;b&gt;Minion&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;Controller&lt;/b&gt;: 데이터 인제스팅(ingestion)과 클러스터 관리, 세그먼트 분배 등을 담당합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Broker&lt;/b&gt;: 쿼리를 수신하고, 여러 서버에 쿼리를 분배하여 병렬로 처리한 후 결과를 반환합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Server&lt;/b&gt;: 실제로 데이터를 저장하고, Broker가 보낸 쿼리를 처리하는 역할을 합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Minion&lt;/b&gt;: 데이터 세그먼트의 재처리나 데이터 압축, 인덱싱과 같은 비동기 작업을 수행합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;장점&lt;/b&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;: Pinot는 스트리밍 데이터로부터 실시간 분석을 지원하며, 낮은 지연 시간으로 매우 빠르게 쿼리를 실행할 수 있습니다.&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;다양한 데이터 소스 지원&lt;/b&gt;: 스트리밍, 배치 데이터를 모두 지원하며, Kafka, S3, HDFS 등 여러 데이터 소스와의 유연한 통합이 가능합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;유연한 쿼리&lt;/b&gt;: Pinot는 SQL-like 쿼리 언어를 지원하며, 고급 쿼리 기능을 제공하여 복잡한 데이터 분석에 적합합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;단점&lt;/b&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;/li&gt;
&lt;li&gt;&lt;b&gt;OLTP 지원 부족&lt;/b&gt;: Pinot는 실시간 데이터 분석에 특화되어 있지만, 트랜잭션 처리(OLTP) 환경에는 적합하지 않습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;메모리와 스토리지 요구 사항&lt;/b&gt;: 높은 성능을 유지하기 위해서는 메모리와 스토리지 요구 사항이 높을 수 있습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. &lt;b&gt;Apache Hive&lt;/b&gt;&lt;/h3&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;/b&gt;: Apache Hive는 대규모 데이터 웨어하우스를 구축하기 위한 SQL-like 쿼리 언어인 HiveQL을 제공하는 데이터 웨어하우스 솔루션입니다. Hadoop과 함께 사용되며, 대량의 데이터를 처리하는 데 최적화되어 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;특징&lt;/b&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;Hadoop과의 통합&lt;/b&gt;: Hadoop 분산 파일 시스템(HDFS)에 저장된 데이터를 쿼리할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SQL-like 쿼리 언어&lt;/b&gt;: HiveQL을 사용하여 친숙한 SQL 문법으로 쿼리 작성이 가능합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;대규모 데이터 처리&lt;/b&gt;: 병렬 처리를 통해 대량의 데이터를 효율적으로 처리할 수 있습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;장점&lt;/b&gt;:&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Hadoop 생태계와 잘 통합되어 있어 빅데이터 처리에 적합합니다.&lt;/li&gt;
&lt;li&gt;복잡한 데이터 분석 작업을 수행할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;단점&lt;/b&gt;:&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실시간 쿼리에 적합하지 않으며, 주로 배치 처리에 사용됩니다.&lt;/li&gt;
&lt;li&gt;성능이 다른 OLAP 솔루션에 비해 느릴 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. &lt;b&gt;TimescaleDB&lt;/b&gt;&lt;/h3&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;/b&gt;: TimescaleDB는 PostgreSQL을 기반으로 한 시계열 데이터베이스입니다. 시계열 데이터의 저장 및 쿼리를 최적화하여 실시간 데이터 분석을 지원합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;특징&lt;/b&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;PostgreSQL 호환성&lt;/b&gt;: SQL 표준을 준수하여 사용이 용이합니다.&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;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;장점&lt;/b&gt;:&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;PostgreSQL의 모든 기능을 활용할 수 있습니다.&lt;/li&gt;
&lt;li&gt;실시간 시계열 데이터 처리에 적합합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;단점&lt;/b&gt;:&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;OLAP 분석에 특화되어 있지는 않으며, 시계열 데이터에 최적화되어 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;8. Greenplum&lt;/b&gt;&lt;/h3&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;/b&gt;: Greenplum은 PostgreSQL을 기반으로 한 대규모 데이터 분석 플랫폼입니다. MPP(Massively Parallel Processing) 아키텍처를 사용하여 대규모 데이터 집합을 빠르게 분석할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;특징&lt;/b&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;: MPP 아키텍처 덕분에 대규모 데이터에 대한 병렬 처리를 지원합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SQL 지원&lt;/b&gt;: PostgreSQL의 SQL 문법을 사용하여 친숙하게 쿼리를 작성할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;고가용성 및 분산 저장&lt;/b&gt;: 데이터를 분산하여 저장하고, 고가용성을 제공합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;장점&lt;/b&gt;:&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;대규모 데이터에 대한 강력한 분석 성능.&lt;/li&gt;
&lt;li&gt;PostgreSQL과의 호환성으로 인한 높은 사용자 친화성.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;단점&lt;/b&gt;:&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;설정 및 운영이 복잡할 수 있습니다.&lt;/li&gt;
&lt;li&gt;높은 하드웨어 요구 사항.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;9. MariaDB ColumnStore&lt;/b&gt;&lt;/h3&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;/b&gt;: MariaDB ColumnStore는 MariaDB의 컬럼 기반 데이터베이스 엔진으로, 대규모 데이터 분석 및 OLAP(Online Analytical Processing) 작업을 위해 최적화되어 있습니다. MariaDB의 전통적인 로우 기반 스토리지 엔진과 함께 사용할 수 있으며, 데이터 분석에 필요한 빠른 쿼리 성능을 제공합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;특징&lt;/b&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;: 데이터를 컬럼 단위로 저장하여, 분석 쿼리 시 필요하지 않은 컬럼에 대한 I/O를 줄이고 쿼리 성능을 향상시킵니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SQL 지원&lt;/b&gt;: 표준 SQL을 사용하여 데이터에 접근할 수 있으며, 기존의 MariaDB 사용자에게 친숙한 환경을 제공합니다.&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;하이브리드 스토리지&lt;/b&gt;: 로우 기반 스토리지와 컬럼 기반 스토리지를 혼합하여 사용할 수 있어, 다양한 사용 사례에 유연하게 대응합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;장점&lt;/b&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;/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;다양한 데이터 소스 지원&lt;/b&gt;: MariaDB의 다른 엔진과 통합되어, 다양한 데이터 소스로부터 데이터를 가져올 수 있습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;단점&lt;/b&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;/li&gt;
&lt;li&gt;&lt;b&gt;트랜잭션 지원 부족&lt;/b&gt;: OLAP에 최적화되어 있기 때문에, OLTP(Online Transaction Processing) 작업에 대한 지원이 부족할 수 있습니다.&lt;/li&gt;
&lt;/ol&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;MariaDB ColumnStore는 &lt;b&gt;서버 노드&lt;/b&gt;, &lt;b&gt;프론트엔드 노드&lt;/b&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;/b&gt;: SQL 요청을 처리하고, 사용자와의 인터페이스 역할을 합니다.&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1034&quot; data-origin-height=&quot;430&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cD9bGq/btsJJSi27yS/8gKwrpEWfcURaiIocGxdL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cD9bGq/btsJJSi27yS/8gKwrpEWfcURaiIocGxdL0/img.png&quot; data-alt=&quot;Maria DB - CORE COMPONENTS For Analytics (source : mariadb.com)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cD9bGq/btsJJSi27yS/8gKwrpEWfcURaiIocGxdL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcD9bGq%2FbtsJJSi27yS%2F8gKwrpEWfcURaiIocGxdL0%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;1034&quot; height=&quot;430&quot; data-origin-width=&quot;1034&quot; data-origin-height=&quot;430&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Maria DB - CORE COMPONENTS For Analytics (source : mariadb.com)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;10. StarRocks&lt;/b&gt;&lt;/h3&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;StarRocks는 고성능의 분산형 OLAP 데이터베이스입니다. Apache Doris에서 파생된 이 프로젝트는 실시간 데이터 분석에 최적화되어 있으며, 대규모 데이터 처리와 높은 쿼리 성능을 제공하도록 설계되었습니다. StarRocks는 데이터 웨어하우스와 실시간 분석의 경계를 허물며, 복잡한 비즈니스 요구 사항을 지원합니다.&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;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;: StarRocks는 실시간 데이터 처리 및 분석을 지원하며, 짧은 쿼리 응답 시간을 제공합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;컬럼형 저장소&lt;/b&gt;: 데이터를 컬럼 기반으로 저장하여 쿼리 성능을 극대화하고, 데이터 압축 효율성을 높입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;MPP 아키텍처&lt;/b&gt;: Massively Parallel Processing (MPP) 아키텍처를 사용하여 대량의 데이터를 병렬로 처리할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SQL 지원&lt;/b&gt;: ANSI SQL을 지원하여 사용자가 친숙한 SQL 문법으로 데이터를 쿼리할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;높은 가용성 및 내결함성&lt;/b&gt;: 데이터 복제 및 자동 장애 조치 기능을 통해 시스템의 안정성과 가용성을 보장합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;장점&lt;/b&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;: StarRocks는 대규모 데이터에 대해 초고속 쿼리 성능을 제공합니다.&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;다양한 데이터 소스 지원&lt;/b&gt;: 다양한 데이터 소스에서 데이터를 가져오고 통합할 수 있습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;단점&lt;/b&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;: 아직 성숙하지 않은 프로젝트로, 다른 성숙한 OLAP 솔루션에 비해 커뮤니티와 지원이 제한적일 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;OLTP 지원 부족&lt;/b&gt;: OLAP에 최적화되어 있기 때문에, OLTP 작업에는 적합하지 않습니다.&lt;/li&gt;
&lt;/ol&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;StarRocks는 클러스터 기반 아키텍처로, 다음과 같은 주요 구성 요소로 이루어져 있습니다:&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;Frontend (FE)&lt;/b&gt;: 클라이언트와의 인터페이스 역할을 하며, 쿼리 파싱 및 최적화를 담당합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Backend (BE)&lt;/b&gt;: 실제 데이터를 저장하고 쿼리를 실행하는 데이터 저장소입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Meta Store&lt;/b&gt;: 데이터베이스 메타 정보를 관리합니다&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1263&quot; data-origin-height=&quot;722&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dEGSlX/btsJI4EyHJY/AfKPO6tPUmyFNQgRsMWA80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dEGSlX/btsJI4EyHJY/AfKPO6tPUmyFNQgRsMWA80/img.png&quot; data-alt=&quot;StarRocks enables a rapid journey from data to insight. ( source : starrock.io )&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dEGSlX/btsJI4EyHJY/AfKPO6tPUmyFNQgRsMWA80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdEGSlX%2FbtsJI4EyHJY%2FAfKPO6tPUmyFNQgRsMWA80%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;1263&quot; height=&quot;722&quot; data-origin-width=&quot;1263&quot; data-origin-height=&quot;722&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;StarRocks enables a rapid journey from data to insight. ( source : starrock.io )&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Data Science/DB+SQL</category>
      <category>Apache Druid</category>
      <category>apache pinot</category>
      <category>Clickhouse</category>
      <category>duckdb</category>
      <category>greenplum</category>
      <category>OLAP</category>
      <category>olap dbms</category>
      <category>starrocks</category>
      <category>timescaledb</category>
      <category>분석용db</category>
      <author>DS-9VM</author>
      <guid isPermaLink="true">https://dadev.tistory.com/188</guid>
      <comments>https://dadev.tistory.com/entry/OLAP-Open-Source-OLAP-DBMS#entry188comment</comments>
      <pubDate>Wed, 25 Sep 2024 03:32:00 +0900</pubDate>
    </item>
    <item>
      <title>[DuckDB] DuckDB Installation</title>
      <link>https://dadev.tistory.com/entry/duckdb-duckdb-installation</link>
      <description>&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;lt;관련글&amp;gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://dadev.tistory.com/entry/DuckDB-what-is-duckDB&quot;&gt;2024.09.24 - [Data Science/DB+SQL] - [DuckDB] what is duckDB&lt;/a&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;770&quot; data-origin-height=&quot;592&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bt72MO/btsJJO8XKwO/K3S9RiT8GnKLnad4BbgJH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bt72MO/btsJJO8XKwO/K3S9RiT8GnKLnad4BbgJH1/img.png&quot; data-alt=&quot;install duckdb&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bt72MO/btsJJO8XKwO/K3S9RiT8GnKLnad4BbgJH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbt72MO%2FbtsJJO8XKwO%2FK3S9RiT8GnKLnad4BbgJH1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;316&quot; height=&quot;243&quot; data-origin-width=&quot;770&quot; data-origin-height=&quot;592&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;install duckdb&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;Install duckdb&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;`duckdb cli` window Installation&lt;/p&gt;
&lt;pre id=&quot;code_1727106547420&quot; class=&quot;shell&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;# wiuget installation 
winget install DuckDB.cli

# duckdb cli 실행
duckdb&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;`&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;duckdb cli&lt;/span&gt;` Linux&lt;span&gt; &lt;/span&gt;Installation&lt;/p&gt;
&lt;pre id=&quot;code_1727106547421&quot; class=&quot;awk&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# DuckDB 최신 릴리스 다운로드 (v1.1.0 설치 예시)
wget https://github.com/duckdb/duckdb/releases/download/v1.1.0/duckdb_cli-linux-amd64.zip

# 압축 해제
unzip duckdb_cli-linux-amd64.zip

# 실행 파일을 /usr/local/bin으로 이동하여 시스템 경로에 추가
sudo mv duckdb /usr/local/bin/

# 실행 권한 부여
sudo chmod +x /usr/local/bin/duckdb

# DuckDB CLI 실행
duckdb&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;python installation&lt;/p&gt;
&lt;pre id=&quot;code_1727106547421&quot; class=&quot;cmake&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip install duckdb&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;R installation&lt;/p&gt;
&lt;pre id=&quot;code_1727106599126&quot; class=&quot;shell&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;# R 환경에서 DuckDB 설치
install.packages(&quot;duckdb&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;Rust installation&lt;/p&gt;
&lt;pre id=&quot;code_1727106623893&quot; class=&quot;shell&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# cargo로 통한 설치
cargo add duckdb --features bundled&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;GO installation&lt;/p&gt;
&lt;pre id=&quot;code_1727106723167&quot; class=&quot;shell&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;# go get으로 설치
go get github.com/marcboeker/go-duckdb&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;nods.js installation&lt;/p&gt;
&lt;pre id=&quot;code_1727106760503&quot; class=&quot;shell&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# npm으로 설치
npm install duckdb&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;duckdb cli commands&lt;/p&gt;
&lt;pre id=&quot;code_1727106547421&quot; class=&quot;sql&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.bail on|off             Stop after hitting an error.  Default OFF
.binary on|off           Turn binary output on or off.  Default OFF
.cd DIRECTORY            Change the working directory to DIRECTORY
.changes on|off          Show number of rows changed by SQL
.check GLOB              Fail if output since .testcase does not match
.columns                 Column-wise rendering of query results
.constant ?COLOR?        Sets the syntax highlighting color used for constant values
.constantcode ?CODE?     Sets the syntax highlighting terminal code used for constant values
.databases               List names and files of attached databases
.dump ?TABLE?            Render database content as SQL
.echo on|off             Turn command echo on or off
.excel                   Display the output of next command in spreadsheet
.edit                    Opens an external text editor to edit a query.
.exit ?CODE?             Exit this program with return-code CODE
.explain ?on|off|auto?   Change the EXPLAIN formatting mode.  Default: auto
.fullschema ?--indent?   Show schema and the content of sqlite_stat tables
.headers on|off          Turn display of headers on or off
.help ?-all? ?PATTERN?   Show help text for PATTERN
.highlight [on|off]      Toggle syntax highlighting in the shell on/off
.import FILE TABLE       Import data from FILE into TABLE
.indexes ?TABLE?         Show names of indexes
.keyword ?COLOR?         Sets the syntax highlighting color used for keywords
.keywordcode ?CODE?      Sets the syntax highlighting terminal code used for keywords
.log FILE|off            Turn logging on or off.  FILE can be stderr/stdout
.maxrows COUNT           Sets the maximum number of rows for display (default: 40). Only for duckbox mode.
.maxwidth COUNT          Sets the maximum width in characters. 0 defaults to terminal width. Only for duckbox mode.
.mode MODE ?TABLE?       Set output mode
.nullvalue STRING        Use STRING in place of NULL values
.once ?OPTIONS? ?FILE?   Output for the next SQL command only to FILE
.open ?OPTIONS? ?FILE?   Close existing database and reopen FILE
.output ?FILE?           Send output to FILE or stdout if FILE is omitted
.parameter CMD ...       Manage SQL parameter bindings
.print STRING...         Print literal STRING
.prompt MAIN CONTINUE    Replace the standard prompts
.quit                    Exit this program
.read FILE               Read input from FILE
.rows                    Row-wise rendering of query results (default)
.schema ?PATTERN?        Show the CREATE statements matching PATTERN
.separator COL ?ROW?     Change the column and row separators
.sha3sum ...             Compute a SHA3 hash of database content
.shell CMD ARGS...       Run CMD ARGS... in a system shell
.show                    Show the current values for various settings
.system CMD ARGS...      Run CMD ARGS... in a system shell
.tables ?TABLE?          List names of tables matching LIKE pattern TABLE
.testcase NAME           Begin redirecting output to 'testcase-out.txt'
.timer on|off            Turn SQL timer on or off
.width NUM1 NUM2 ...     Set minimum column widths for columnar output&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;관련글&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://dadev.tistory.com/entry/DuckDB-what-is-duckDB&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2024.09.24 - [Data Science/DB+SQL] - [DuckDB] what is duckDB&lt;/a&gt;&lt;/p&gt;</description>
      <category>Data Science/DB+SQL</category>
      <category>dockdb node.js 설치</category>
      <category>duckdb cli 설치</category>
      <category>duckdb installation</category>
      <category>duckdb linux installation</category>
      <category>duckdb python installation</category>
      <category>duckdb rust installation</category>
      <category>duckdb window installation</category>
      <category>duckdb 설치</category>
      <author>DS-9VM</author>
      <guid isPermaLink="true">https://dadev.tistory.com/187</guid>
      <comments>https://dadev.tistory.com/entry/duckdb-duckdb-installation#entry187comment</comments>
      <pubDate>Tue, 24 Sep 2024 01:02:03 +0900</pubDate>
    </item>
    <item>
      <title>[DuckDB] what is DuckDB</title>
      <link>https://dadev.tistory.com/entry/DuckDB-what-is-duckDB</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;DuckDB란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DuckDB는 임베디드 분석 데이터베이스로, 대규모 데이터 처리를 로컬 환경에서도 빠르고 효율적으로 수행할 수 있도록 설계된 시스템입니다. SQLite와 비슷하게 작동하지만, 주로 데이터 분석 워크로드에 최적화되어 있습니다. 이 시스템은 파이썬, R 등 다양한 언어와 통합되며, OLAP(Online Analytical Processing) 쿼리에 특화되어 있어 데이터 사이언스와 분석에 적합합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1161&quot; data-origin-height=&quot;617&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5eWHd/btsJKgcST9j/x5XfCynWLiCu4FhrkXyee1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5eWHd/btsJKgcST9j/x5XfCynWLiCu4FhrkXyee1/img.png&quot; data-alt=&quot;dockdb Feature &amp;amp;amp; Benefit (Source: duckdb.org)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5eWHd/btsJKgcST9j/x5XfCynWLiCu4FhrkXyee1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5eWHd%2FbtsJKgcST9j%2Fx5XfCynWLiCu4FhrkXyee1%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;1161&quot; height=&quot;617&quot; data-origin-width=&quot;1161&quot; data-origin-height=&quot;617&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;dockdb Feature &amp;amp; Benefit (Source: duckdb.org)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Features&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컬럼 기반 저장소: 데이터는 컬럼 단위로 저장되어 압축 효율이 높고, 쿼리 성능이 우수합니다.&lt;/li&gt;
&lt;li&gt;임베디드 DB: DuckDB는 서버를 필요로 하지 않으며, 로컬 환경에서 바로 사용할 수 있는 임베디드 데이터베이스입니다&lt;/li&gt;
&lt;li&gt;대규모 데이터 처리: 메모리 내 분석을 지원하면서도 디스크 기반의 데이터 처리 기능을 제공합니다.&lt;/li&gt;
&lt;li&gt;통합된 분석 기능: 파이썬, R 등과 통합되어 있으며, Pandas, NumPy 등과 쉽게 연동됩니다.&lt;/li&gt;
&lt;li&gt;빠른 성능: DuckDB는 OLAP 쿼리에 최적화되어 있어 대용량 데이터셋에서 뛰어난 성능을 발휘합니다.&lt;/li&gt;
&lt;li&gt;다양한 데이터 소스 지원 : CSV, Parquet, JSON 등의 파일. s3, MySQL, PostgreSQL 등을 지원합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Benefit&lt;/h4&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;/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;: Python, R, SQL과 같은 언어와 쉽게 연동하여 바로 사용할 수 있음.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;비용 효율적&lt;/b&gt;: 클라우드 서버를 사용할 필요가 없으므로 비용이 절감됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Weakness&lt;/h4&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;/b&gt;: 대규모 트랜잭션 기반의 OLTP(Online Transaction Processing)에는 적합하지 않음.&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;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;lt;관련글&amp;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;h3 data-ke-size=&quot;size23&quot;&gt;Examples&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;EX-1. &lt;a href=&quot;https://dadev.tistory.com/entry/duckdb-duckdb-installation&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;DuckDB Cli&lt;/a&gt;를 설치하고, &amp;nbsp;DuckDB를 처음 사용하는 사용자를 위해 기본적인 테이블 생성과 쿼리 실행 예제입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1727107704796&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# DuckDB CLI 실행
duckdb&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1727107729522&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 새 데이터베이스 파일 생성
.open example.db

-- 테이블 생성
CREATE TABLE employees (
    id INTEGER,
    name VARCHAR,
    department VARCHAR,
    salary INTEGER
);

-- 데이터 삽입
INSERT INTO employees VALUES (1, 'Alice', 'Engineering', 120000);
INSERT INTO employees VALUES (2, 'Bob', 'Marketing', 90000);
INSERT INTO employees VALUES (3, 'Charlie', 'Sales', 70000);

-- 데이터 조회
SELECT * FROM employees;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;.open 명령을 통해 DuckDB 데이터베이스 파일을 생성하고 연결합니다.&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;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;EX-1.&lt;span&gt; &lt;/span&gt;&lt;/span&gt;DuckDB를 CSV 파일은 임포트하는 예제입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1727108443387&quot; class=&quot;vala&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;# DuckDB CLI 실행
duckdb&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1727108458779&quot; class=&quot;sql&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;-- csv 파일 읽어 해당 데이터 포맷으로 tbl_customers 테이블을 생성한다
CREATE TABLE tbl_customers 
AS
SELECT * 
FROM read_csv(&quot;https://drive.google.com/uc?id=1zO8ekHWx9U7mrbx_0Hoxxu6od7uxJqWw&amp;amp;export=download&quot;)
;

/*
Source : https://drive.google.com/uc?id=1zO8ekHWx9U7mrbx_0Hoxxu6od7uxJqWw&amp;amp;export=download
Table : Customers
Columns :
    Index
    Customer Id
    First Name
    Last Name
    Company
    City
    Country
    Phone 1
    Phone 2
    Email
    Subscription Date
    Website
*/

-- tbl_customers 데이터 건수를 확인한다.
SELECT count(*) rows
FROM   tbl_customers 
;
/* 
┌───────┐
│ rows  │
│ int64 │
├───────┤
│   100 │
└───────┘
*/&lt;/code&gt;&lt;/pre&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;770&quot; data-origin-height=&quot;592&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Y1XN4/btsJI0PIjjR/rj7kan3BjUpnHfjpMWkEC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Y1XN4/btsJI0PIjjR/rj7kan3BjUpnHfjpMWkEC0/img.png&quot; data-alt=&quot;what is duckdb&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Y1XN4/btsJI0PIjjR/rj7kan3BjUpnHfjpMWkEC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FY1XN4%2FbtsJI0PIjjR%2Frj7kan3BjUpnHfjpMWkEC0%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;432&quot; height=&quot;332&quot; data-origin-width=&quot;770&quot; data-origin-height=&quot;592&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;what is duckdb&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Data Science/DB+SQL</category>
      <category>dcukdb db 생성하기</category>
      <category>duckdb</category>
      <category>duckdb .open 명령어</category>
      <category>duckdb csv importing</category>
      <category>duckdb example</category>
      <category>duckdb 간단한 예제</category>
      <category>what is duckdb</category>
      <category>임베디드 분석 데이터베이스</category>
      <author>DS-9VM</author>
      <guid isPermaLink="true">https://dadev.tistory.com/186</guid>
      <comments>https://dadev.tistory.com/entry/DuckDB-what-is-duckDB#entry186comment</comments>
      <pubDate>Tue, 24 Sep 2024 00:48:42 +0900</pubDate>
    </item>
    <item>
      <title>[DBMS] Isolation Level</title>
      <link>https://dadev.tistory.com/entry/DBMS-Isolation-Level</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Isolation Level&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;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;트랜잭션 동시성 문제&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Isolation Level은 다음과 같은 동시성 문제를 해결하기 위해 존재합니다:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;Dirty Read&lt;/b&gt;: 한 트랜잭션이 아직 커밋되지 않은 다른 트랜잭션의 데이터를 읽는 경우.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Non-repeatable Read&lt;/b&gt;: 한 트랜잭션 내에서 같은 데이터를 두 번 읽었을 때, 그 사이에 다른 트랜잭션에 의해 데이터가 변경되어 다른 값을 읽는 경우.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Phantom Read&lt;/b&gt;: 한 트랜잭션 내에서 조건에 맞는 데이터의 집합을 조회했을 때, 그 사이에 다른 트랜잭션에 의해 새로운 데이터가 추가되거나 삭제되어 조회 결과가 달라지는 경우.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Isolation Level 종류&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;표준 SQL은 4가지 격리 수준을 정의합니다. 격리 수준이 낮을수록 성능은 좋아지지만, 동시성 문제가 발생할 수 있는 위험이 커집니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. &lt;b&gt;Read Uncommitted&lt;/b&gt; (가장 낮은 격리 수준)&lt;/h4&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;/b&gt;: 트랜잭션이 커밋되지 않은 데이터를 읽을 수 있습니다. 이 경우 &lt;b&gt;Dirty Read&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;: 트랜잭션 A가 데이터를 수정했지만 아직 커밋되지 않은 상태에서, 트랜잭션 B가 수정된 데이터를 읽을 수 있습니다. 나중에 트랜잭션 A가 롤백되면, 트랜잭션 B는 잘못된 데이터를 처리하게 됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;발생 가능 문제&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Dirty Read&lt;/li&gt;
&lt;li&gt;Non-repeatable Read&lt;/li&gt;
&lt;li&gt;Phantom Read&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. &lt;b&gt;Read Committed&lt;/b&gt; (기본적인 격리 수준)&lt;/h4&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;/b&gt;: 트랜잭션이 커밋된 데이터만 읽을 수 있습니다. &lt;b&gt;Dirty Read&lt;/b&gt;는 방지되지만, &lt;b&gt;Non-repeatable Read&lt;/b&gt;는 발생할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;문제 해결&lt;/b&gt;: Dirty Read 방지.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;예시&lt;/b&gt;: 트랜잭션 A가 데이터를 커밋하기 전까지, 트랜잭션 B는 그 데이터를 읽을 수 없습니다. 그러나 트랜잭션 B가 데이터를 두 번 조회했을 때, 그 사이에 트랜잭션 A가 데이터를 수정하고 커밋했다면, 서로 다른 값을 읽을 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;발생 가능 문제&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Non-repeatable Read&lt;/li&gt;
&lt;li&gt;Phantom Read&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. &lt;b&gt;Repeatable Read&lt;/b&gt; (일관성 보장 수준 강화)&lt;/h4&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;/b&gt;: 트랜잭션 내에서 읽은 데이터는 트랜잭션이 끝날 때까지 변하지 않도록 보장합니다. &lt;b&gt;Non-repeatable Read&lt;/b&gt;는 방지되지만, &lt;b&gt;Phantom Read&lt;/b&gt;는 여전히 발생할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;문제 해결&lt;/b&gt;: Dirty Read, Non-repeatable Read 방지.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;예시&lt;/b&gt;: 트랜잭션 A가 특정 데이터를 읽고, 그 데이터를 다시 조회할 때까지 다른 트랜잭션 B가 그 데이터를 수정할 수 없습니다. 그러나 트랜잭션 B가 새로운 데이터를 삽입하면, 트랜잭션 A는 조건에 따라 조회 결과가 달라질 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;발생 가능 문제&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Phantom Read&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. &lt;b&gt;Serializable&lt;/b&gt; (가장 높은 격리 수준)&lt;/h4&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;/b&gt;: 트랜잭션이 마치 순차적으로 처리되는 것처럼 격리됩니다. &lt;b&gt;Dirty Read&lt;/b&gt;, &lt;b&gt;Non-repeatable Read&lt;/b&gt;, &lt;b&gt;Phantom Read&lt;/b&gt;가 모두 방지됩니다. 가장 높은 일관성을 보장하지만, 성능이 크게 저하될 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;문제 해결&lt;/b&gt;: Dirty Read, Non-repeatable Read, Phantom Read 모두 방지.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;예시&lt;/b&gt;: 트랜잭션 A가 실행되는 동안, 트랜잭션 B는 트랜잭션 A와 충돌할 수 있는 어떤 데이터도 수정하거나 삽입할 수 없습니다. 완벽한 일관성을 보장하지만, 트랜잭션 간의 동시성이 크게 제한됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: inline-block; width: 728px; height: 90px;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-5725573107422261&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;요약&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 &lt;b&gt;Isolation Level&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; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Isolation Level&lt;/td&gt;
&lt;td&gt;Dirty Read&lt;/td&gt;
&lt;td&gt;&amp;nbsp;Non-repeatable Read&lt;/td&gt;
&lt;td&gt;Phantom Read&lt;/td&gt;
&lt;td&gt;성능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Read Uncommitted&lt;/td&gt;
&lt;td&gt;발생 가능&lt;/td&gt;
&lt;td&gt;발생 가능&lt;/td&gt;
&lt;td&gt;발생 가능&lt;/td&gt;
&lt;td&gt;매우 높음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Read Committed&lt;/td&gt;
&lt;td&gt;방지됨&lt;/td&gt;
&lt;td&gt;발생 가능&lt;/td&gt;
&lt;td&gt;발생 가능&lt;/td&gt;
&lt;td&gt;높음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repeatable Read&lt;/td&gt;
&lt;td&gt;방지됨&lt;/td&gt;
&lt;td&gt;방지됨&lt;/td&gt;
&lt;td&gt;발생 가능&lt;/td&gt;
&lt;td&gt;중간&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Serializable&lt;/td&gt;
&lt;td&gt;방지됨&lt;/td&gt;
&lt;td&gt;방지됨&lt;/td&gt;
&lt;td&gt;방지됨&lt;/td&gt;
&lt;td&gt;낮음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Isolation Level&lt;/b&gt;은 데이터베이스에서 성능과 일관성 간의 균형을 맞추는 중요한 설정입니다. 낮은 수준의 격리 설정은 더 나은 성능을 제공할 수 있지만 일관성 문제가 발생할 수 있습니다. 반대로, 높은 격리 수준은 완벽한 일관성을 제공하지만 성능 저하를 초래할 수 있습니다.&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-origin-width=&quot;1000&quot; data-origin-height=&quot;667&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RQjbW/btsJHyMaAkw/N0H5GE9yRmNasM25EqgB71/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RQjbW/btsJHyMaAkw/N0H5GE9yRmNasM25EqgB71/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RQjbW/btsJHyMaAkw/N0H5GE9yRmNasM25EqgB71/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRQjbW%2FbtsJHyMaAkw%2FN0H5GE9yRmNasM25EqgB71%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;1000&quot; height=&quot;667&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;667&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Data Science/DB+SQL</category>
      <category>data consistency</category>
      <category>dbms transaction control</category>
      <category>Dirty Read</category>
      <category>isolation level</category>
      <category>Phantom Read</category>
      <category>Read Uncommitted</category>
      <category>Serializable</category>
      <category>격리수준</category>
      <category>데이터 일관성</category>
      <category>트랜잭션 관리</category>
      <author>DS-9VM</author>
      <guid isPermaLink="true">https://dadev.tistory.com/185</guid>
      <comments>https://dadev.tistory.com/entry/DBMS-Isolation-Level#entry185comment</comments>
      <pubDate>Sat, 21 Sep 2024 01:52:02 +0900</pubDate>
    </item>
    <item>
      <title>[DBMS] Data Consistency 와 Data Integrity 차이</title>
      <link>https://dadev.tistory.com/entry/Data-Consistency-%EC%99%80-Data-Integrity-%EC%B0%A8%EC%9D%B4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Data Consistency&lt;/b&gt;와 &lt;b&gt;Data Integrity&lt;/b&gt;는 서로 관련이 있지만 약간 다른 개념입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Data Consistency&lt;/h3&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;/b&gt;: 데이터 일관성은 데이터의 상태가 항상 일관되게 유지되는 것을 의미합니다. 즉, 데이터베이스 내의 데이터가 서로 모순되지 않고, 같은 의미를 지니고 있어야 합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;예시&lt;/b&gt;: 예를 들어, 같은 유저의 정보를 두 개의 다른 테이블에 저장할 때, 이름이나 주소가 변경되면 두 개의 테이블에서 같은 값으로 변경되어야 합니다. 만약 한 테이블에서는 업데이트되었지만 다른 테이블은 그렇지 않다면, &quot;데이터 일관성이 깨졌다&quot;라고 합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;메카니즘&lt;/b&gt;&amp;nbsp;&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://dadev.tistory.com/entry/DBMS-Isolation-Level&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Isolation Level&lt;/a&gt; : read committed, read uncommitted, repeatable read, serializable&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Transaction Control : 데이터베이스가 일관성 있는 상태를 유지하는 단위. 예시 : commit, rollback&lt;/li&gt;
&lt;li&gt;Locking : 데이터가 동시에 여러 트랜잭션에 의해 수정되지 않도록 보호하는 방법. 예시 : Shared Lock, Exclusive Lock&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Data Replication :&amp;nbsp; 여러 데이터베이스 인스턴스에 데이터를 복사하여 저장하는 방식으로 동기, 비동기 두가지 방식이 있습니다.&lt;/li&gt;
&lt;li&gt;MVCC(Multi-Version Concurrency Control) : &lt;b&gt;다중 버전 동시성 제어&lt;/b&gt;는 여러 사용자가 동시에 데이터를 읽고 쓸 때 &lt;br /&gt;발생하는 충돌을 최소화하는 방법입니다.&amp;nbsp;트랜잭션이 데이터를 읽을 때, 다른 트랜잭션에 의해 데이터가 수정되는 것을&amp;nbsp;방지하기 위해 데이터의 여러 버전을 유지합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예시:&amp;nbsp;트랜잭션&amp;nbsp;A가&amp;nbsp;데이터를&amp;nbsp;수정하는&amp;nbsp;동안,&amp;nbsp;트랜잭션&amp;nbsp;B는&amp;nbsp;수정&amp;nbsp;전의&amp;nbsp;데이터를&amp;nbsp;읽을&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;이렇게&amp;nbsp;하면&amp;nbsp;트랜잭션&amp;nbsp;B가&amp;nbsp;트랜잭션&amp;nbsp;A의&amp;nbsp;완료를&amp;nbsp;기다리지&amp;nbsp;않고도&amp;nbsp;데이터를&amp;nbsp;읽을&amp;nbsp;수&amp;nbsp;있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: inline-block; width: 728px; height: 90px;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-5725573107422261&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&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;h3 data-ke-size=&quot;size23&quot;&gt;Data Integrity&lt;/h3&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;/b&gt;: 데이터 무결성은 데이터의 무결성과 신뢰성을 보장하는 것을 의미합니다. 이는 데이터가 올바르게 입력되고, 잘못된 데이터가 들어가지 않도록 하는 다양한 규칙이나 제약 조건을 포함합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;예시&lt;/b&gt;: 데이터베이스에 입력할 수 있는 값을 특정 타입으로 제한하거나, 외래 키(Foreign Key) 제약 조건을 설정하여 데이터 간의 관계를 유지하는 것이 데이터 무결성을 보장하는 방법입니다. 즉, 숫자 타입으로 지정한 컬럼에서는 숫자 값만 입력되도록 합니다. 유저마스터정보가 있고, 유저구매이력정보에 유저 식별자(ID)가 포함되어 있다면 이를 외래 키로 지정하여 유저구매이력정보가 있는 유저는 유저마스터정보가 항상 존재하도록 합니다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;메카니즘
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Data Type&lt;/b&gt; : 허용하는 형식의 값만 입력 가능함. 예시: Integer, Varchar(n), Datetime, ...&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;b&gt;Costraints&lt;/b&gt; &lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Primary Key &lt;/b&gt;&amp;nbsp;: 테이블의 각 레코드가 고유해야 한다는 규칙.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Foreign Key :&lt;/b&gt;&amp;nbsp;두 테이블 간의 관계를 정의하여 데이터의 참조 무결성을 보장.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Unique &lt;/b&gt;: 특정 필드에 중복 값이 존재하지 않도록 보장.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Check &lt;/b&gt;: 특정 컬럼 값이 지정된 조건을 충족해야 함.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Not Null : &lt;/b&gt;특정 컬럼 값에&amp;nbsp; NULL 존재하지 않도록 보장.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;요약&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Data Consistency&lt;/b&gt;: 데이터 간의 일관성과 조화에 초점.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Data Integrity&lt;/b&gt;: 데이터의 정확성과 신뢰성을 보장에 초점.&lt;/li&gt;
&lt;/ul&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;667&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BbHaa/btsJGJHFGPC/lTfxpHAxsjv4Aq4c0p7dJK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BbHaa/btsJGJHFGPC/lTfxpHAxsjv4Aq4c0p7dJK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BbHaa/btsJGJHFGPC/lTfxpHAxsjv4Aq4c0p7dJK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBbHaa%2FbtsJGJHFGPC%2FlTfxpHAxsjv4Aq4c0p7dJK%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;1000&quot; height=&quot;667&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;667&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Data Science/DB+SQL</category>
      <category>data consistency</category>
      <category>Data integrity</category>
      <category>데이터 무결성</category>
      <category>데이터 일관성</category>
      <category>데이터 정합성</category>
      <author>DS-9VM</author>
      <guid isPermaLink="true">https://dadev.tistory.com/184</guid>
      <comments>https://dadev.tistory.com/entry/Data-Consistency-%EC%99%80-Data-Integrity-%EC%B0%A8%EC%9D%B4#entry184comment</comments>
      <pubDate>Sat, 21 Sep 2024 01:25:03 +0900</pubDate>
    </item>
    <item>
      <title>What is JumpServer</title>
      <link>https://dadev.tistory.com/entry/What-is-JumpServer</link>
      <description>&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;JumpServer :&amp;nbsp;&lt;/b&gt;&lt;b&gt;An open-source PAM tool&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot;&gt;JumpServer is an open-source Privileged Access Management (PAM) tool that provides DevOps and IT teams with on-demand and secure access to SSH, RDP, Kubernetes, Database and RemoteApp endpoints through a web browser.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;774&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boczc0/btsJHk1F58V/bCwB3NxT0xkDbs8Qz4sukk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boczc0/btsJHk1F58V/bCwB3NxT0xkDbs8Qz4sukk/img.png&quot; data-alt=&quot;JumpServer (source : https://github.com/jumpserver/jumpserver)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boczc0/btsJHk1F58V/bCwB3NxT0xkDbs8Qz4sukk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fboczc0%2FbtsJHk1F58V%2FbCwB3NxT0xkDbs8Qz4sukk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;774&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;774&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;JumpServer (source : https://github.com/jumpserver/jumpserver)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #323232; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Pros and cons of jump servers&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Despite their benefits, jump servers also have a few challenges to consider.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #323232; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;Pros&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #323232; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;color: #666666;&quot;&gt;Basic OS and service configurations.&lt;/li&gt;
&lt;li style=&quot;color: #666666;&quot;&gt;No internet connectivity, which makes it difficult for attackers to add malware.&lt;/li&gt;
&lt;li style=&quot;color: #666666;&quot;&gt;No sensitive data stored on the system.&lt;/li&gt;
&lt;li style=&quot;color: #666666;&quot;&gt;Detailed monitoring, logging and auditing of the system.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #ffffff; color: #323232; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;Cons&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #323232; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;color: #666666;&quot;&gt;Exposing just one user's connections could open all connections.&lt;/li&gt;
&lt;li style=&quot;color: #666666;&quot;&gt;Could be difficult to harden and patch.&lt;/li&gt;
&lt;li style=&quot;color: #666666;&quot;&gt;Only provides front-end security; other network layers must be secured.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Demo&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;Access Demo site : &lt;a href=&quot;https://demo.jumpserver.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://demo.jumpserver.org/&lt;/a&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Install JumpServer&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;awk&quot; style=&quot;background-color: #f6f8fa; color: #1f2328; text-align: start;&quot;&gt;&lt;code&gt;curl -sSL https://github.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot;&gt;Access JumpServer in your browser at&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;http://your-jumpserver-ip/&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Username:&lt;span&gt;&amp;nbsp;&lt;/span&gt;admin&lt;/li&gt;
&lt;li&gt;Password:&lt;span&gt;&amp;nbsp;&lt;/span&gt;ChangeMe&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Quick Start&lt;/h3&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;Source : &lt;a href=&quot;https://www.jumpserver.com/docs/quickstart&quot;&gt;Quickstart Guide - JumpServer&lt;/a&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;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;Administrator Login&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;You have successfully installed JumpServer. You can now access the JumpServer service using your web browser by navigating to&lt;span&gt;&amp;nbsp;&lt;/span&gt;http://your-jumpserver-ip/. For the best experience, we recommend using Google Chrome.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Please log in using the default administrator credentials:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Username:&lt;span&gt;&amp;nbsp;&lt;/span&gt;admin&lt;/li&gt;
&lt;li&gt;Password:&lt;span&gt;&amp;nbsp;&lt;/span&gt;ChangeMe&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2204&quot; data-origin-height=&quot;1168&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WfrZ9/btsJHmZqNRp/fIyrijXodz6JG8dhHIhwD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WfrZ9/btsJHmZqNRp/fIyrijXodz6JG8dhHIhwD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WfrZ9/btsJHmZqNRp/fIyrijXodz6JG8dhHIhwD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWfrZ9%2FbtsJHmZqNRp%2FfIyrijXodz6JG8dhHIhwD0%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;2204&quot; height=&quot;1168&quot; data-origin-width=&quot;2204&quot; data-origin-height=&quot;1168&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p style=&quot;background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Upon your first login, you will be prompted to change your password. Simply make the change and log in again.&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;Create User&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;After logging in to JumpServer, let's create a user first:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Navigate to the&lt;span&gt;&amp;nbsp;&lt;/span&gt;Console&lt;span&gt;&amp;nbsp;&lt;/span&gt;and access the&lt;span&gt;&amp;nbsp;&lt;/span&gt;User Management&lt;span&gt;&amp;nbsp;&lt;/span&gt;page.&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1700&quot; data-origin-height=&quot;1310&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/L2tBr/btsJHVGP34x/3tVtccmn3iDAK4iTfO4aTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/L2tBr/btsJHVGP34x/3tVtccmn3iDAK4iTfO4aTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/L2tBr/btsJHVGP34x/3tVtccmn3iDAK4iTfO4aTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FL2tBr%2FbtsJHVGP34x%2F3tVtccmn3iDAK4iTfO4aTK%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;1700&quot; height=&quot;1310&quot; data-origin-width=&quot;1700&quot; data-origin-height=&quot;1310&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Click the&lt;span&gt;&amp;nbsp;&lt;/span&gt;+Create&lt;span&gt;&amp;nbsp;&lt;/span&gt;button.&lt;/li&gt;
&lt;li&gt;Fill in the user information.&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Name: First User&lt;/li&gt;
&lt;li&gt;Username: first_user&lt;/li&gt;
&lt;li&gt;Email:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;mailto:first-user@example.com&quot;&gt;first-user@example.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Password setting: Set Password, and enter&lt;span&gt;&amp;nbsp;&lt;/span&gt;pwd@123&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p style=&quot;background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Please keep the other information at their default values.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1950&quot; data-origin-height=&quot;1606&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBQnqo/btsJIsD9zg6/ZSkik83PDDh1SoSn7vHAl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBQnqo/btsJIsD9zg6/ZSkik83PDDh1SoSn7vHAl1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBQnqo/btsJIsD9zg6/ZSkik83PDDh1SoSn7vHAl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBQnqo%2FbtsJIsD9zg6%2FZSkik83PDDh1SoSn7vHAl1%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;1950&quot; height=&quot;1606&quot; data-origin-width=&quot;1950&quot; data-origin-height=&quot;1606&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Click &quot;Submit&quot; to complete the user creation.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;Create Asset&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Next, let's create an Linux asset:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Navigate to the&lt;span&gt;&amp;nbsp;&lt;/span&gt;Asset Management&lt;span&gt;&amp;nbsp;&lt;/span&gt;page.&lt;/li&gt;
&lt;li&gt;Switch to the&lt;span&gt;&amp;nbsp;&lt;/span&gt;Host&lt;span&gt;&amp;nbsp;&lt;/span&gt;tab, and click the&lt;span&gt;&amp;nbsp;&lt;/span&gt;+Create&lt;span&gt;&amp;nbsp;&lt;/span&gt;button. In the popup window, select the built-in&lt;span&gt;&amp;nbsp;&lt;/span&gt;Linux&lt;span&gt;&amp;nbsp;&lt;/span&gt;platform to open the host creation page.&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2420&quot; data-origin-height=&quot;1458&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzEtXg/btsJHCU1aZ0/U3m67yALRUUndFvdVEkb71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzEtXg/btsJHCU1aZ0/U3m67yALRUUndFvdVEkb71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzEtXg/btsJHCU1aZ0/U3m67yALRUUndFvdVEkb71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzEtXg%2FbtsJHCU1aZ0%2FU3m67yALRUUndFvdVEkb71%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;2420&quot; height=&quot;1458&quot; data-origin-width=&quot;2420&quot; data-origin-height=&quot;1458&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Fill in the asset information.&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Name: First Asset&lt;/li&gt;
&lt;li&gt;IP/Host: 172.17.200.27&lt;/li&gt;
&lt;li&gt;Platform: Linux&lt;/li&gt;
&lt;li&gt;Nodes: /Default&lt;/li&gt;
&lt;li&gt;Protocols: ssh/22, sftp/22&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p style=&quot;background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;To Ensure Successful Connection in the Following Steps, please enter the correct&lt;span&gt;&amp;nbsp;&lt;/span&gt;IP/Host&lt;span&gt;&amp;nbsp;&lt;/span&gt;and SSH protocol&lt;span&gt;&amp;nbsp;&lt;/span&gt;port.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2400&quot; data-origin-height=&quot;1560&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6Q3xT/btsJHzEdOxj/9fu53tAAyKI7TY3lFxkW6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6Q3xT/btsJHzEdOxj/9fu53tAAyKI7TY3lFxkW6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6Q3xT/btsJHzEdOxj/9fu53tAAyKI7TY3lFxkW6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6Q3xT%2FbtsJHzEdOxj%2F9fu53tAAyKI7TY3lFxkW6k%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;2400&quot; height=&quot;1560&quot; data-origin-width=&quot;2400&quot; data-origin-height=&quot;1560&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Add an account to the asset.&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Click the&lt;span&gt;&amp;nbsp;&lt;/span&gt;Add&lt;span&gt;&amp;nbsp;&lt;/span&gt;button in the&lt;span&gt;&amp;nbsp;&lt;/span&gt;Accounts&lt;span&gt;&amp;nbsp;&lt;/span&gt;section to add an account. In the popup window, enter the correct Name, Username, and Password. Keep the other information as default. Click&lt;span&gt;&amp;nbsp;&lt;/span&gt;Confirm&lt;span&gt;&amp;nbsp;&lt;/span&gt;to complete the account addition.&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Name: root&lt;/li&gt;
&lt;li&gt;Username: root&lt;/li&gt;
&lt;li&gt;Password:&lt;span&gt;&amp;nbsp;&lt;/span&gt;your-password&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1672&quot; data-origin-height=&quot;1428&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPDJlH/btsJGOaTaSZ/CvC37e3c9ZsOnZ7kNlvNd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPDJlH/btsJGOaTaSZ/CvC37e3c9ZsOnZ7kNlvNd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPDJlH/btsJGOaTaSZ/CvC37e3c9ZsOnZ7kNlvNd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPDJlH%2FbtsJGOaTaSZ%2FCvC37e3c9ZsOnZ7kNlvNd1%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;1672&quot; height=&quot;1428&quot; data-origin-width=&quot;1672&quot; data-origin-height=&quot;1428&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Click&lt;span&gt;&amp;nbsp;&lt;/span&gt;Submit&lt;span&gt;&amp;nbsp;&lt;/span&gt;to complete the asset creation.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;Create Authorization&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Finally, let's create an authorization.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Navigate to the&lt;span&gt;&amp;nbsp;&lt;/span&gt;Authorization Management&lt;span&gt;&amp;nbsp;&lt;/span&gt;page.&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2082&quot; data-origin-height=&quot;1550&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yNxpd/btsJHw8BPbL/0PTipUKRNXF0gLWxenVrf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yNxpd/btsJHw8BPbL/0PTipUKRNXF0gLWxenVrf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yNxpd/btsJHw8BPbL/0PTipUKRNXF0gLWxenVrf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyNxpd%2FbtsJHw8BPbL%2F0PTipUKRNXF0gLWxenVrf0%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;2082&quot; height=&quot;1550&quot; data-origin-width=&quot;2082&quot; data-origin-height=&quot;1550&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Click the&lt;span&gt;&amp;nbsp;&lt;/span&gt;+Create&lt;span&gt;&amp;nbsp;&lt;/span&gt;button.&lt;/li&gt;
&lt;li&gt;Fill in the authorization information.&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Name: First Authorization&lt;/li&gt;
&lt;li&gt;Users: Select&lt;span&gt;&amp;nbsp;&lt;/span&gt;First User&lt;/li&gt;
&lt;li&gt;Assets: Select&lt;span&gt;&amp;nbsp;&lt;/span&gt;First Linux&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p style=&quot;background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Keep the other information as default.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1760&quot; data-origin-height=&quot;1484&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/F9lB2/btsJHZJeSwR/XnKDrlS4xZGkrRqZpWrxB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/F9lB2/btsJHZJeSwR/XnKDrlS4xZGkrRqZpWrxB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/F9lB2/btsJHZJeSwR/XnKDrlS4xZGkrRqZpWrxB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF9lB2%2FbtsJHZJeSwR%2FXnKDrlS4xZGkrRqZpWrxB0%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;1760&quot; height=&quot;1484&quot; data-origin-width=&quot;1760&quot; data-origin-height=&quot;1484&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Click &quot;Submit&quot; to complete the authorization creation.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;User Login&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Excellent, we have successfully created one user and one asset, and authorized the asset for the user. Next, let's proceed to log in to JumpServer using the user&lt;span&gt;&amp;nbsp;&lt;/span&gt;First User.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;To log in simultaneously with both the&lt;span&gt;&amp;nbsp;&lt;/span&gt;Administrator&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;First User, please open a new browser window in incognito mode.&lt;/li&gt;
&lt;li&gt;After logging in with the username&lt;span&gt;&amp;nbsp;&lt;/span&gt;first_user&lt;span&gt;&amp;nbsp;&lt;/span&gt;and password&lt;span&gt;&amp;nbsp;&lt;/span&gt;pwd@123, you will be prompted to reset your password. Simply follow the steps to reset your password, and then log in again using the new password.&lt;/li&gt;
&lt;li&gt;After successfully logging in, you will see a page to&lt;span&gt;&amp;nbsp;&lt;/span&gt;complete personal information. Check &quot;I agree&quot; and click&lt;span&gt;&amp;nbsp;&lt;/span&gt;Submit.&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2234&quot; data-origin-height=&quot;1598&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEzwP4/btsJGVnwz5R/psISKBcUn5gWMLcAzHSsL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEzwP4/btsJGVnwz5R/psISKBcUn5gWMLcAzHSsL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEzwP4/btsJGVnwz5R/psISKBcUn5gWMLcAzHSsL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEzwP4%2FbtsJGVnwz5R%2FpsISKBcUn5gWMLcAzHSsL0%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;2234&quot; height=&quot;1598&quot; data-origin-width=&quot;2234&quot; data-origin-height=&quot;1598&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Navigate to the&lt;span&gt;&amp;nbsp;&lt;/span&gt;Workbench &amp;gt; Access assets&lt;span&gt;&amp;nbsp;&lt;/span&gt;page, where you can view the assets authorized to you. Here, you will see that the asset named&lt;span&gt;&amp;nbsp;&lt;/span&gt;First Linux&lt;span&gt;&amp;nbsp;&lt;/span&gt;has been authorized to you.&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2942&quot; data-origin-height=&quot;1244&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ebQgtu/btsJGzdUQZH/YiLcvbtfVT27nQ7KQeBdKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ebQgtu/btsJGzdUQZH/YiLcvbtfVT27nQ7KQeBdKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ebQgtu/btsJGzdUQZH/YiLcvbtfVT27nQ7KQeBdKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FebQgtu%2FbtsJGzdUQZH%2FYiLcvbtfVT27nQ7KQeBdKk%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;2942&quot; height=&quot;1244&quot; data-origin-width=&quot;2942&quot; data-origin-height=&quot;1244&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p style=&quot;background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Simply click the Connect button here to access the asset.&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;Access Asset&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;After clicking the asset connection button, a new tab (Web Terminal) will open in your current browser, and the connection information for logging into the asset will also be displayed.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Confirm the connection information: select&lt;span&gt;&amp;nbsp;&lt;/span&gt;root&lt;span&gt;&amp;nbsp;&lt;/span&gt;as the account and choose &quot;Web CLI&quot; as the connection method.&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2930&quot; data-origin-height=&quot;1690&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwiR72/btsJHmSIstF/lJfTqD0H411FrjoULVplT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwiR72/btsJHmSIstF/lJfTqD0H411FrjoULVplT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwiR72/btsJHmSIstF/lJfTqD0H411FrjoULVplT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwiR72%2FbtsJHmSIstF%2FlJfTqD0H411FrjoULVplT1%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;2930&quot; height=&quot;1690&quot; data-origin-width=&quot;2930&quot; data-origin-height=&quot;1690&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Click the&lt;span&gt;&amp;nbsp;&lt;/span&gt;CONNECT&lt;span&gt;&amp;nbsp;&lt;/span&gt;button to log in to the asset.&lt;/li&gt;
&lt;li&gt;Congratulations, you have successfully accessed the assets you have permission to use.&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2378&quot; data-origin-height=&quot;1624&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cLcCUD/btsJHrlWWSv/aFpcWa5yJrk4Q8BWRA4Oa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cLcCUD/btsJHrlWWSv/aFpcWa5yJrk4Q8BWRA4Oa0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cLcCUD/btsJHrlWWSv/aFpcWa5yJrk4Q8BWRA4Oa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcLcCUD%2FbtsJHrlWWSv%2FaFpcWa5yJrk4Q8BWRA4Oa0%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;2378&quot; height=&quot;1624&quot; data-origin-width=&quot;2378&quot; data-origin-height=&quot;1624&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;Audit logs&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Next, while keeping the current user's asset session active, let's switch to the&lt;span&gt;&amp;nbsp;&lt;/span&gt;Administrator&lt;span&gt;&amp;nbsp;&lt;/span&gt;page. Navigate to the&lt;span&gt;&amp;nbsp;&lt;/span&gt;Audits&lt;span&gt;&amp;nbsp;&lt;/span&gt;to review the actions performed by the current user.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Navigate to the&lt;span&gt;&amp;nbsp;&lt;/span&gt;Audits &amp;gt; Asset sessions&lt;span&gt;&amp;nbsp;&lt;/span&gt;page.&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;We observe that there is a session where the&lt;span&gt;&amp;nbsp;&lt;/span&gt;First User&lt;span&gt;&amp;nbsp;&lt;/span&gt;is connected to the&lt;span&gt;&amp;nbsp;&lt;/span&gt;First Linux&lt;span&gt;&amp;nbsp;&lt;/span&gt;asset using the root account.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2934&quot; data-origin-height=&quot;1108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bL8anC/btsJHCgoPwj/SJsrG3ZQcJArgcrY3V16O0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bL8anC/btsJHCgoPwj/SJsrG3ZQcJArgcrY3V16O0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bL8anC/btsJHCgoPwj/SJsrG3ZQcJArgcrY3V16O0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbL8anC%2FbtsJHCgoPwj%2FSJsrG3ZQcJArgcrY3V16O0%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;2934&quot; height=&quot;1108&quot; data-origin-width=&quot;2934&quot; data-origin-height=&quot;1108&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Navigate to the&lt;span&gt;&amp;nbsp;&lt;/span&gt;Audits &amp;gt; Session commands&lt;span&gt;&amp;nbsp;&lt;/span&gt;page, we can view the commands executed by the user.&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2938&quot; data-origin-height=&quot;1356&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/txqXW/btsJGvJz1pO/tYOToCOJmJnjd7E01GOtsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/txqXW/btsJGvJz1pO/tYOToCOJmJnjd7E01GOtsk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/txqXW/btsJGvJz1pO/tYOToCOJmJnjd7E01GOtsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtxqXW%2FbtsJGvJz1pO%2FtYOToCOJmJnjd7E01GOtsk%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;2938&quot; height=&quot;1356&quot; data-origin-width=&quot;2938&quot; data-origin-height=&quot;1356&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Navigate to the&lt;span&gt;&amp;nbsp;&lt;/span&gt;Audits &amp;gt; Login logs&lt;span&gt;&amp;nbsp;&lt;/span&gt;page, We can view detailed login logs for the user.&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2932&quot; data-origin-height=&quot;1076&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/w15LY/btsJGwBIF6e/Kwzgg6hFv8EPFhhBIYV9K1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/w15LY/btsJGwBIF6e/Kwzgg6hFv8EPFhhBIYV9K1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/w15LY/btsJGwBIF6e/Kwzgg6hFv8EPFhhBIYV9K1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fw15LY%2FbtsJGwBIF6e%2FKwzgg6hFv8EPFhhBIYV9K1%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;2932&quot; height=&quot;1076&quot; data-origin-width=&quot;2932&quot; data-origin-height=&quot;1076&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p style=&quot;background-color: #ffffff; color: #334155; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Congratulations! Following this guide, you should have successfully installed JumpServer, created users and assets, authorized access, and learned to connect to assets and audit logs.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Screenshot&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1438&quot; data-origin-height=&quot;1149&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dH49g9/btsJGu41KcJ/PFzdzrzEWqhBgE9JwDqJkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dH49g9/btsJGu41KcJ/PFzdzrzEWqhBgE9JwDqJkK/img.png&quot; data-alt=&quot;Dashboard&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dH49g9/btsJGu41KcJ/PFzdzrzEWqhBgE9JwDqJkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdH49g9%2FbtsJGu41KcJ%2FPFzdzrzEWqhBgE9JwDqJkK%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;1438&quot; height=&quot;1149&quot; data-origin-width=&quot;1438&quot; data-origin-height=&quot;1149&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Dashboard&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1431&quot; data-origin-height=&quot;799&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/U9lWP/btsJIfZopon/4CMXkzsXQjPaH99tYCQtoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/U9lWP/btsJIfZopon/4CMXkzsXQjPaH99tYCQtoK/img.png&quot; data-alt=&quot;Active sessions&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/U9lWP/btsJIfZopon/4CMXkzsXQjPaH99tYCQtoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FU9lWP%2FbtsJIfZopon%2F4CMXkzsXQjPaH99tYCQtoK%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;1431&quot; height=&quot;799&quot; data-origin-width=&quot;1431&quot; data-origin-height=&quot;799&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Active sessions&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1437&quot; data-origin-height=&quot;852&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ejELLX/btsJGtLNgZT/d40i1kBM50jv3gSI0R2Ml1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ejELLX/btsJGtLNgZT/d40i1kBM50jv3gSI0R2Ml1/img.png&quot; data-alt=&quot;Session commands&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ejELLX/btsJGtLNgZT/d40i1kBM50jv3gSI0R2Ml1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FejELLX%2FbtsJGtLNgZT%2Fd40i1kBM50jv3gSI0R2Ml1%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;1437&quot; height=&quot;852&quot; data-origin-width=&quot;1437&quot; data-origin-height=&quot;852&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Session commands&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1431&quot; data-origin-height=&quot;799&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Zr7DP/btsJGIPq7D5/7KllrnDukrGsuYRnzxH8dK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Zr7DP/btsJGIPq7D5/7KllrnDukrGsuYRnzxH8dK/img.png&quot; data-alt=&quot;Login logs&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Zr7DP/btsJGIPq7D5/7KllrnDukrGsuYRnzxH8dK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZr7DP%2FbtsJGIPq7D5%2F7KllrnDukrGsuYRnzxH8dK%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;1431&quot; height=&quot;799&quot; data-origin-width=&quot;1431&quot; data-origin-height=&quot;799&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Login logs&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1431&quot; data-origin-height=&quot;799&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCamaX/btsJG4dsDXj/oGoNdpxlKZWvFpzxqcJ2w0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCamaX/btsJG4dsDXj/oGoNdpxlKZWvFpzxqcJ2w0/img.png&quot; data-alt=&quot;Operate logs&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCamaX/btsJG4dsDXj/oGoNdpxlKZWvFpzxqcJ2w0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCamaX%2FbtsJG4dsDXj%2FoGoNdpxlKZWvFpzxqcJ2w0%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;1431&quot; height=&quot;799&quot; data-origin-width=&quot;1431&quot; data-origin-height=&quot;799&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Operate logs&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Knowlege</category>
      <category>devops</category>
      <category>it asset management</category>
      <category>IT자산관리</category>
      <category>jumpserver</category>
      <category>privileged access management</category>
      <category>서버접근 통합관리</category>
      <category>점프서버</category>
      <author>DS-9VM</author>
      <guid isPermaLink="true">https://dadev.tistory.com/183</guid>
      <comments>https://dadev.tistory.com/entry/What-is-JumpServer#entry183comment</comments>
      <pubDate>Fri, 20 Sep 2024 22:07:40 +0900</pubDate>
    </item>
    <item>
      <title>shell command within python</title>
      <link>https://dadev.tistory.com/entry/shell-command-within-python</link>
      <description>&lt;p data-ke-size=&quot;size14&quot;&gt;Here is a basic example of how to use the subprocess module to run an external command&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Using subprocess.run&lt;/h3&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;The subprocess.run function is the recommended approach for most cases because it is simple and powerful.&lt;/p&gt;
&lt;pre id=&quot;code_1718980295635&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import subprocess

# Command to be executed
command = [&quot;ls&quot;, &quot;-l&quot;]  # Replace with your command and arguments

# Run the command
result = subprocess.run(command, capture_output=True, text=True)

# Output the result
print(&quot;Return code:&quot;, result.returncode)
print(&quot;Output:&quot;, result.stdout)
print(&quot;Error:&quot;, result.stderr)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Replace &lt;b&gt;[&quot;ls&quot;, &quot;-l&quot;]&lt;/b&gt; with the command you want to run. If your command is a string, split it into a list of arguments.&lt;/li&gt;
&lt;li&gt;Use &lt;b&gt;capture_output=True&lt;/b&gt; and &lt;b&gt;text=True&lt;/b&gt; in subprocess.run to capture and return the output as a string.&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;h3 data-ke-size=&quot;size23&quot;&gt;Using subprocess.Popen&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;For more advanced use cases where you need more control over the input/output pipes, you can use subprocess.Popen.&lt;/p&gt;
&lt;pre id=&quot;code_1718980401760&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import subprocess

# Command to be executed
command = [&quot;ls&quot;, &quot;-l&quot;]  # Replace with your command and arguments

# Run the command
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)

# Get the output and error messages
stdout, stderr = process.communicate()

# Output the result
print(&quot;Return code:&quot;, process.returncode)
print(&quot;Output:&quot;, stdout)
print(&quot;Error:&quot;, stderr)&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;When using &lt;b&gt;subprocess.Popen&lt;/b&gt;, use &lt;b&gt;stdout=subprocess.PIPE&lt;/b&gt; and &lt;b&gt;stderr=subprocess.PIPE&lt;/b&gt; to capture the output and error messages.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Using os.system&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;The os.system function can also be used to run shell commands. However, it is less flexible and does not provide as much control over the input/output/error pipes as the subprocess module.&lt;/p&gt;
&lt;pre id=&quot;code_1718980448488&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import os

# Command to be executed
command = &quot;ls -l&quot;  # Replace with your command

# Run the command
exit_code = os.system(command)

# Output the result
print(&quot;Return code:&quot;, exit_code)&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;References&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* &lt;a href=&quot;https://docs.python.org/3/library/subprocess.html&quot;&gt;subprocess &amp;mdash; Subprocess management &amp;mdash; Python 3.12.4 documentation&lt;/a&gt;&lt;/p&gt;</description>
      <category>Data Science/Python</category>
      <category>how do i execute a program or call a system command?</category>
      <category>Python</category>
      <category>shell command</category>
      <category>subprocess</category>
      <author>DS-9VM</author>
      <guid isPermaLink="true">https://dadev.tistory.com/182</guid>
      <comments>https://dadev.tistory.com/entry/shell-command-within-python#entry182comment</comments>
      <pubDate>Fri, 21 Jun 2024 23:42:58 +0900</pubDate>
    </item>
    <item>
      <title>[mysql] Temporary Tablespace 관리</title>
      <link>https://dadev.tistory.com/entry/mysql-Temporary-Tablespace-%EA%B4%80%EB%A6%AC</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;개요&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;압축되지 않고 사용자가 생성한 임시 테이블과 디스크에 생성되는 내부적인 임시 테이블들이 shared temporary tablespace 에 생성된다. &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_temp_data_file_path&quot;&gt;innodb_temp_data_file_path&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt; 옵션으로 상대 경로, 이름, 사이즈, 데이터파일의 속성을 설정할 수 있다. 아무것도 설정하지 않으면 기본적으로 &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;&lt;a style=&quot;color: #608cba;&quot; href=&quot;https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_data_home_dir&quot;&gt;innodb_data_home_dir&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt; 경로에 ibtmp1:12M:authextend 속성으로 생성된다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1714056456296&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; SELECT @@innodb_temp_data_file_path;
+------------------------------+
| @@innodb_temp_data_file_path |
+------------------------------+
| ibtmp1:12M:autoextend        |
+------------------------------+&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;Temporary Tablespace 의 데이터파일 관리&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;Temporary Tablespace 의 데이터파일 사이즈는 기본적으로 생성된 12M에서 시작하여 필요한 만큼의 Tablespace 만큼 계속 늘어난다. 다 쓰고 제거된 temp 공간도 테이블스페이스 내에서 재사용될 뿐 물리적으로 차지하는 공간은 줄어들지 않는다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;사용중인 용량 확인 방법&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;INFORMATION_SCHEMA.FILES 을 통해서 Temporary Tablespace의 용량을 확인한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1714056611296&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; SELECT FILE_NAME, 
        TABLESPACE_NAME, 
        ENGINE, 
        INITIAL_SIZE, 
        TOTAL_EXTENTS*EXTENT_SIZE AS TotalSizeBytes, 
       	DATA_FREE, 
       	MAXIMUM_SIZE 
FROM 	INFORMATION_SCHEMA.FILES 
WHERE 	TABLESPACE_NAME = 'innodb_temporary';&lt;/code&gt;&lt;/pre&gt;
&lt;p id=&quot;SE-f6296fe9-bf0c-4a3c-8174-30b3d1d3d91a&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;temp table을 용량을 차지하는 long query로 인해 기하급수적으로 사이즈가 늘게 되면 &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Disk Full 장애가 발생한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;Temporary Tablespace 의 줄이기&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000; text-align: left;&quot;&gt; Temporary Tablespace 를 줄이기 위한 방법은 &lt;/span&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000; text-align: left;&quot;&gt;&lt;span style=&quot;color: #e57523;&quot;&gt;Mysql 서버&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000; text-align: left;&quot;&gt; 재시작하여 기본 설정( &lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a style=&quot;background-color: #ffffff; color: #0074a3; text-align: start;&quot; href=&quot;https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_temp_data_file_path&quot;&gt;innodb_temp_data_file_path&lt;/a&gt; )으로 Tablespace를 재생성하도록 하는 방법 뿐이다.&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000; text-align: left;&quot;&gt;Temporary Tablespace&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 용량에 최대값을 설정하지 않으면 무한정 증가하기 때문에 적절한 값으로 설정해야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1714057014922&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[mysqld]
innodb_temp_data_file_path=ibtmp1:12M:autoextend:max:500M&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;퀴리 실행 중에 &lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;temporary tablespace&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt; 의 크기가 &lt;/span&gt;최대값에 도달하는 &lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;table is full가 발생하며 쿼리 실행이 실패한다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Data Science/DB+SQL</category>
      <category>MySQL</category>
      <category>mysql internals</category>
      <category>temporary tablespace</category>
      <author>DS-9VM</author>
      <guid isPermaLink="true">https://dadev.tistory.com/181</guid>
      <comments>https://dadev.tistory.com/entry/mysql-Temporary-Tablespace-%EA%B4%80%EB%A6%AC#entry181comment</comments>
      <pubDate>Fri, 26 Apr 2024 00:02:11 +0900</pubDate>
    </item>
    <item>
      <title>[text classification] fasttext example</title>
      <link>https://dadev.tistory.com/entry/text-classification-fasttext-example</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;설치&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;pip 로 릴리즈된 최신 버전 설치하기&lt;/p&gt;
&lt;pre id=&quot;code_1713894477383&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip install fasttext&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0d0d0d;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;git repository에서 개발중인 최신 버전 설치하기&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713894635600&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git clone https://github.com/facebookresearch/fastText.git
cd fastText
sudo python setup.py install&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;텍스트 분류 및 단어 벡터화를 수행하는 예제&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;먼저 FastText의 Python API를 사용하여 텍스트 분류 모델을 학습하고 저장한다. 그런 다음 저장된 모델을 로드하여 테스트 데이터에 대해 예측을 수행합니다. 마지막으로 단어 벡터화 기능을 사용하여 주어진 텍스트의 단어 벡터를 얻는다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713893904141&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import fasttext

# 텍스트 분류 모델 학습 예제
def train_text_classification_model(train_data_path, model_path):
    # 학습 데이터 경로, 모델 저장 경로
    model = fasttext.train_supervised(input=train_data_path)
    model.save_model(model_path)

# 텍스트 분류 모델 테스트 예제
def test_text_classification_model(model_path, test_data):
    model = fasttext.load_model(model_path)
    result = model.predict(test_data)
    print(result)

# 단어 벡터화 예제
def word_embedding(text):
    model = fasttext.load_model('cc.en.300.bin') # 사전 학습된 모델 사용
    embedding = model.get_sentence_vector(text)
    print(embedding)

# 텍스트 분류 모델 학습
train_text_classification_model('train.txt', 'text_classification_model.bin')

# 학습된 모델로 테스트
test_text_classification_model('text_classification_model.bin', 'This product is amazing.')

# 단어 벡터화
word_embedding('hello world')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;fasttext 학습용 데이터 전처리 코드&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;FastText의 학습을 위한 &lt;/span&gt;train.txt&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt; 파일은 각 줄에 하나의 텍스트 샘플과 해당 레이블이 포함되어야 한다. 레이블은 텍스트 뒤에 &lt;/span&gt;__label__&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt; 접두어를 붙여서 표시해야 한다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;예를 들어, 긍정 리뷰는 &lt;/span&gt;__label__positive&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;로 표시하고 부정 리뷰는 &lt;/span&gt;__label__negative&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;로 표시한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;다음 코드는 &lt;/span&gt;raw_data.txt&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;와 같은 원본 데이터 파일을 읽어 각 줄에서 텍스트와 레이블을 추출하고, &lt;/span&gt;train.txt&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;와 같은 FastText 학습 파일 형식에 맞게 변환하여 저장한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1713894140157&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def fasttext_traindata(input_file, output_file):
    with open(input_file, 'r', encoding='utf-8') as f:
        lines = f.readlines()

    with open(output_file, 'w', encoding='utf-8') as f:
        for line in lines:
            text, label = line.strip().split('\t')  # 예를 들어, 탭으로 구분된 파일을 가정
            formatted_line = f&quot;__label__{label} {text}\n&quot;
            f.write(formatted_line)

# 예제 사용
input_file = 'raw_data.txt'  # 원본 데이터 파일
output_file = 'train.txt'     # 변환된 FastText 학습 파일
fasttext_traindata(input_file, output_file)&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;h4 data-ke-size=&quot;size20&quot;&gt;참고문서&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://fasttext.cc/docs/en/supervised-tutorial.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;fastText - Text Classification Tutorial&amp;nbsp;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNaj4v/btsJGkBocKH/Dl4RAfK97m6a6KXQE49zok/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNaj4v/btsJGkBocKH/Dl4RAfK97m6a6KXQE49zok/img.webp&quot; data-alt=&quot;text classification example of fasttext&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNaj4v/btsJGkBocKH/Dl4RAfK97m6a6KXQE49zok/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNaj4v%2FbtsJGkBocKH%2FDl4RAfK97m6a6KXQE49zok%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;348&quot; height=&quot;348&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;text classification example of fasttext&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Data Science/Machine Learning</category>
      <category>fasttext</category>
      <category>python fasttext example</category>
      <category>text classification</category>
      <category>text classification example of fasttext</category>
      <category>머신러닝</category>
      <category>인공지능</category>
      <category>텍스트 분류 알고리즘</category>
      <category>텍스트 분석</category>
      <author>DS-9VM</author>
      <guid isPermaLink="true">https://dadev.tistory.com/180</guid>
      <comments>https://dadev.tistory.com/entry/text-classification-fasttext-example#entry180comment</comments>
      <pubDate>Wed, 24 Apr 2024 03:05:07 +0900</pubDate>
    </item>
    <item>
      <title>Docker 명령어</title>
      <link>https://dadev.tistory.com/entry/Docker-%EB%AA%85%EB%A0%B9%EC%96%B4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;실행중인 컨테이너 조회&lt;/p&gt;
&lt;pre id=&quot;code_1713893077908&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;docker ps

# 실행 중인 컨테이너 사이즈 확인
docker ps -size&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;pre id=&quot;code_1713893003170&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker stop $(docker ps -q)&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;/p&gt;
&lt;pre id=&quot;code_1726836021219&quot; class=&quot;python&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;docker rm $(docker ps -q)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Container&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0b214a; text-align: left;&quot;&gt;Create and run a container from an image, with a custom name:&lt;/span&gt;&lt;br /&gt;docker run --name &amp;lt;container_name&amp;gt; &amp;lt;image_name&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #0b214a; text-align: left;&quot;&gt;Run a container with and publish a container&amp;rsquo;s port(s) to the host.&lt;/span&gt;&lt;br /&gt;docker run -p &amp;lt;host_port&amp;gt;:&amp;lt;container_port&amp;gt; &amp;lt;image_name&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #0b214a; text-align: left;&quot;&gt;Run a container in the background&lt;/span&gt;&lt;br /&gt;docker run -d &amp;lt;image_name&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #0b214a; text-align: left;&quot;&gt;Start or stop an existing container:&lt;/span&gt;&lt;br /&gt;docker start|stop &amp;lt;container_name&amp;gt; (or &amp;lt;container-id&amp;gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #0b214a; text-align: left;&quot;&gt;Remove a stopped container:&lt;/span&gt;&lt;br /&gt;docker rm &amp;lt;container_name&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #0b214a; text-align: left;&quot;&gt;Open a shell inside a running container:&lt;/span&gt;&lt;br /&gt;docker exec -it &amp;lt;container_name&amp;gt; sh&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #0b214a; text-align: left;&quot;&gt;Fetch and follow the logs of a container:&lt;/span&gt;&lt;br /&gt;docker logs -f &amp;lt;container_name&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #0b214a; text-align: left;&quot;&gt;To inspect a running container:&lt;/span&gt;&lt;br /&gt;docker inspect &amp;lt;container_name&amp;gt; (or &amp;lt;container_id&amp;gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #0b214a; text-align: left;&quot;&gt;To list currently running containers:&lt;/span&gt;&lt;br /&gt;docker ps&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #0b214a; text-align: left;&quot;&gt;List all docker containers (running and stopped):&lt;/span&gt;&lt;br /&gt;docker ps --all&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #0b214a; text-align: left;&quot;&gt;View resource usage stats&lt;/span&gt;&lt;br /&gt;docker container stats&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Images&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0b214a; text-align: left;&quot;&gt;Build an Image from a Dockerfile&lt;/span&gt;&lt;br /&gt;docker build -t &amp;lt;image_name&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #0b214a; text-align: left;&quot;&gt;Build an Image from a Dockerfile without the cache&lt;/span&gt;&lt;br /&gt;docker build -t &amp;lt;image_name&amp;gt; . &amp;ndash;no-cache&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #0b214a; text-align: left;&quot;&gt;List local images&lt;/span&gt;&lt;br /&gt;docker images&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #0b214a; text-align: left;&quot;&gt;Delete an Image&lt;/span&gt;&lt;br /&gt;docker rmi &amp;lt;image_name&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #0b214a; text-align: left;&quot;&gt;Remove all unused images&lt;/span&gt;&lt;br /&gt;docker image prune&lt;/p&gt;</description>
      <category>Shell &amp;amp; Command</category>
      <category>docker</category>
      <category>Docker command Cheat Sheet</category>
      <category>도커 명령어</category>
      <author>DS-9VM</author>
      <guid isPermaLink="true">https://dadev.tistory.com/179</guid>
      <comments>https://dadev.tistory.com/entry/Docker-%EB%AA%85%EB%A0%B9%EC%96%B4#entry179comment</comments>
      <pubDate>Wed, 24 Apr 2024 02:25:38 +0900</pubDate>
    </item>
    <item>
      <title>[linux] chmod 명령어</title>
      <link>https://dadev.tistory.com/entry/linux-chmod-%EB%AA%85%EB%A0%B9%EC%96%B4</link>
      <description>&lt;h2 style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;chmod : 리눅스 파일 사용 권한&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;리눅스에서, 파일(File)을 사용해 할 수 있는 작업은 크게 세 가지로 나눌 수 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;파일에 저장된 데이터를 읽기. (r = read).&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;파일에 데이터를 쓰기. (w = write).&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;파일 실행. (x = execute)&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 만약 리눅스 시스템의 모든 파일이, 그 종류 또는 쓰임새와 관계없이 읽기, 쓰기, 실행 가능하게 만들어져 있다면 어떻게 될까요? 잘못된 명령어 사용으로 시스템 운영에 중요한 역할을 하는 파일의 내용이 변경되거나, 사용자의 사소한 실수 한번으로 리눅스 시스템의 모든 파일이 삭제되어 버릴 수도 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이런 문제가 생기는 경우를 방지하기 위해, 리눅스에서는 각 파일 및 디렉토리에 대해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&quot;읽기(r)&quot;, &quot;쓰기(w)&quot;, &quot;실행(x)&quot;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;권한(permission)을 파일 개별적으로 지정할 수 있도록 만들어 놓았습니다. 그리고 이 세 가지 권한을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&quot;파일을 소유한 사용자(user)&quot;, &quot;특정 그룹(group)에 소속된 사용자&quot;, &quot;그 외 사용자(others)&quot;&lt;/b&gt;에 대해 각각 지정할 수 있게 만들었습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;chmod 숫자의 의미&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;chmod 를 표현할 때 숫자로 666 ,777 로 변경하여 사용해본적이 있었는데 의미를 모른채 썼었다.&lt;/p&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;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Owner 퍼미션&lt;/td&gt;
&lt;td&gt;Group 퍼미션&lt;/td&gt;
&lt;td&gt;World 퍼미션&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6(rw-)&lt;/td&gt;
&lt;td&gt;6(rw-)&lt;/td&gt;
&lt;td&gt;6(rw-)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 숫자는 8진법으로 표현한 것으로 666의 경우에는 rw-rw-rw-으로 표현 한 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;8진법 표현&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;8진법&lt;/td&gt;
&lt;td&gt;2진법&lt;/td&gt;
&lt;td&gt;파일모드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;000&lt;/td&gt;
&lt;td&gt;---&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;001&lt;/td&gt;
&lt;td&gt;--x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;010&lt;/td&gt;
&lt;td&gt;-w-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;011&lt;/td&gt;
&lt;td&gt;-wx&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt;r--&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;101&lt;/td&gt;
&lt;td&gt;r-x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;110&lt;/td&gt;
&lt;td&gt;rw-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;111&lt;/td&gt;
&lt;td&gt;rwx&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;h2 data-ke-size=&quot;size26&quot;&gt;퍼미션 속성&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;속성&lt;/td&gt;
&lt;td&gt;파일&lt;/td&gt;
&lt;td&gt;디렉토리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;r&lt;/td&gt;
&lt;td&gt;파일 열기와 읽기를 허용한다.&lt;/td&gt;
&lt;td&gt;실행 속성이 설정되어 있으면 디렉토리의 내용물을 나열 할 수 있게끔 허용한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;w&lt;/td&gt;
&lt;td&gt;파일 쓰기 또는 잘라내기를 허용&lt;/td&gt;
&lt;td&gt;실행 속성이 설정되어 있으면 디렉토리 내의 파일들을 생성, 삭제, 이름 변경이 가능하도록 허용한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;x&lt;/td&gt;
&lt;td&gt;파일이 프로그램으로 처리되고 파일이 실행되도록 허용. 스크립트 언어에서 작성된 프로그램 파일들은 읽기 기능으로 설정되어 있어야만 실행 가능.&lt;/td&gt;
&lt;td&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;h2 data-ke-size=&quot;size26&quot;&gt;chmod 기호 표기법 예시&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;표기법&lt;/td&gt;
&lt;td&gt;의미&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;u+x&lt;/td&gt;
&lt;td&gt;소유자에게 실행 권한을 추가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;+x&lt;/td&gt;
&lt;td&gt;모든 사용자에게 실행 권한을 추가한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;o-rw&lt;/td&gt;
&lt;td&gt;소유자와 그룹 소유자가 아닌 사용자의 읽기, 쓰기 권한을 제거한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처: &lt;a href=&quot;https://vixxcode.tistory.com/144&quot;&gt;https://vixxcode.tistory.com/144&lt;/a&gt; [추측보다는 측정:티스토리]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;img1.daumcdn.jpg&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;667&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhFjMq/btsGJraLJBe/ECVgeEW0vgSULO3LugSz00/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhFjMq/btsGJraLJBe/ECVgeEW0vgSULO3LugSz00/img.jpg&quot; data-alt=&quot;[linux] chmod 명령어 (source : https://unsplash.com/photos/iar-afB0QQw)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhFjMq/btsGJraLJBe/ECVgeEW0vgSULO3LugSz00/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhFjMq%2FbtsGJraLJBe%2FECVgeEW0vgSULO3LugSz00%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;1000&quot; height=&quot;667&quot; data-filename=&quot;img1.daumcdn.jpg&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;667&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[linux] chmod 명령어 (source : https://unsplash.com/photos/iar-afB0QQw)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Shell &amp;amp; Command</category>
      <category>chmod</category>
      <category>chmod 666</category>
      <category>chmod 777</category>
      <category>linux chmod</category>
      <category>리눅스 파일 권한 설정</category>
      <author>DS-9VM</author>
      <guid isPermaLink="true">https://dadev.tistory.com/178</guid>
      <comments>https://dadev.tistory.com/entry/linux-chmod-%EB%AA%85%EB%A0%B9%EC%96%B4#entry178comment</comments>
      <pubDate>Thu, 18 Apr 2024 01:33:46 +0900</pubDate>
    </item>
  </channel>
</rss>