<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>jihyeon.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Sat, 02 Nov 2024 12:24:07 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>jihyeon.log</title>
            <url>https://velog.velcdn.com/images/03x2_18/profile/95ca9b90-1cbe-4de1-a056-42adedafd86c/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. jihyeon.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/03x2_18" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[1. Software Engineering Process]]></title>
            <link>https://velog.io/@03x2_18/1.-Software-Engineering-Process</link>
            <guid>https://velog.io/@03x2_18/1.-Software-Engineering-Process</guid>
            <pubDate>Sat, 02 Nov 2024 12:24:07 GMT</pubDate>
            <description><![CDATA[<h2 id="전체적-개요">전체적 개요</h2>
<h3 id="1-software-engineering-process"><strong>1. Software Engineering Process</strong></h3>
<ul>
<li><p>1.1 <strong>Definition and Importance</strong></p>
<ul>
<li>Process Models</li>
<li>Learn from Well-Established Industry</li>
<li>The process Framework</li>
<li>A Generic Process Model</li>
</ul>
</li>
<li><p>1.2 <strong>Process Flows</strong></p>
<ul>
<li>Simple Process Flows<ul>
<li>1.2.1 Linear Process Flow</li>
<li>1.2.2 Iterative Process Flow</li>
</ul>
</li>
<li>1.2.3 Evolutionary Process Flow</li>
<li>1.2.4 Parallel Process Flow</li>
</ul>
</li>
<li><p>1.3 <strong>Task Sets in Software Engineering</strong></p>
<ul>
<li>1.3.1 Identifying a Task Set</li>
</ul>
</li>
<li><p>1.4 <strong>Process Assessment and Improvement</strong></p>
</li>
<li><p>1.5 <strong>Prescriptive Process Models</strong></p>
<ul>
<li><p>1.5.1 Waterfall Model</p>
</li>
<li><p>1.5.2 Prototyping Model</p>
</li>
<li><p>1.5.3 Spiral Model</p>
</li>
<li><p>1.5.4 Unified Process Model</p>
<p>  (01-02 - Software Engine…)</p>
</li>
</ul>
</li>
</ul>
<h3 id="전체적-요약">전체적 요약</h3>
<p><strong>소프트웨어 공학 프로세스 개요</strong></p>
<ul>
<li>소프트웨어 공학 프로세스는 프레임워크 활동(의사소통, 계획, 모델링, 개발, 배포)과 우산 활동(프로젝트 관리, 위험 관리, 품질 보증 등)을 포함한다</li>
<li>프로세스 모델은 이 기본 프레임워크를 바탕으로 만들어지며, 활동들의 적용 방식과 순서에 따라 다양한 모델이 존재한다</li>
</ul>
<p><strong>프로세스 흐름과 모델</strong></p>
<ul>
<li>프로세스 흐름에는 선형, 반복, 진화, 병렬 등 다양한 유형이 있으며, 각각의 특성에 따라 적용된다</li>
<li>처방적 프로세스 모델(Prescriptive Process Models)은 구조와 질서를 중시하지만, 변화가 잦은 소프트웨어 개발 환경에서는 유연성이 필요할 수 있다</li>
</ul>
<p><strong>주요 프로세스 모델</strong></p>
<ul>
<li>폭포수(Waterfall) 모델은 순차적 프로세스로, 각 단계가 고정된 순서로 진행된다</li>
<li>프로토타이핑 모델은 사용자 피드백을 기반으로 반복적으로 소프트웨어를 개선하는 방식이다</li>
<li>나선형(Spiral) 모델은 위험 관리에 중점을 두고 각 반복에서 위험을 분석하며 소프트웨어를 개발한다</li>
<li>통합 프로세스(Unified Process) 모델은 객체지향 설계를 기반으로 한 반복적이고 점진적인 개발 방법론이다</li>
</ul>
<h3 id="내용정리">내용정리!!!</h3>
<h3 id="1-software-engineering-process-1"><strong>1. Software Engineering Process</strong></h3>
<ul>
<li><p>1.1 <strong>Definition and Importance</strong></p>
<ul>
<li><p><strong>Process Models</strong></p>
</li>
<li><p><strong>Learn from Well-Established Industry</strong></p>
<p>  !<img src="https://velog.velcdn.com/images/03x2_18/post/6e588f20-03e5-435c-ad25-99570e4b7339/image.png" alt=""></p>
<p>  <strong>공통점</strong></p>
<p>  이미지에서 보여주는 요소들은 모두 <strong>품질 관리</strong>와 <strong>효율적인 프로세스</strong>를 강조. 소프트웨어 개발에서도 <strong>산업 표준</strong>과 <strong>측정 가능한 품질</strong>을 유지하면서, 체계적으로 작업을 진행하는 것이 중요하다는 점을 시사함.</p>
<ul>
<li><strong>ISO 9001:2015</strong>: 국제 품질 관리 표준. 일관된 품질 보장을 위해 필요.</li>
<li><strong>압력계</strong>: 데이터 기반의 정확한 측정이 중요하다는 점을 상징.</li>
<li><strong>Ford Q1</strong>: 높은 품질 기준을 의미하며 지속적 관리 필요.</li>
<li><strong>작업자들</strong>: 팀워크와 기술 도구 활용의 중요성을 보여줌</li>
</ul>
</li>
<li><p><strong>The process Framework</strong></p>
<ul>
<li><p><strong>process models</strong>(프로세스 모델)은 이 <strong>framework</strong>를 바탕으로 만들짐. 기본적으로 소프트웨어 개발 프로세스는 <strong>framework activities</strong>(의사소통, 계획, 모델링, 개발, 배포)와 <strong>umbrella activities</strong>(위험 관리, 품질 보증 등)를 포함. 이 활동들이 각기 다른 방식으로 적용되면서 다양한 프로세스 모델들이 만들어지는것.</p>
<p>  예를 들어:</p>
<ul>
<li><p><strong>Waterfall 모델</strong>은 프레임워크 활동들을 <strong>순차적으로</strong> 진행하는 방식이고, 모든 활동이 완료된 후에 다음 단계로 넘어감.</p>
</li>
<li><p><strong>Agile 모델</strong>은 각 프레임워크 활동을 반복적으로 수행하면서, 소프트웨어를 <strong>점진적으로</strong> 완성.</p>
<p>즉, <strong>process models</strong>는 이 기본 <strong>프레임워크</strong>의 활동들이 <strong>어떻게</strong> 적용되고 <strong>순서</strong>가 어떻게 구성되는지에 따라 달라짐.</p>
</li>
</ul>
</li>
</ul>
</li>
<li><p><strong>A Generic Process Model</strong>
<img src="https://velog.velcdn.com/images/03x2_18/post/52ac47f7-47c1-4de7-86d5-6781377a6e7d/image.png" alt=""></p>
<ul>
<li><strong>Generic Process Model</strong>은 소프트웨어 개발의 <strong>기본 틀</strong>을 제공하는 모델로, <strong>프레임워크 활동</strong>(의사소통, 계획, 모델링, 개발, 배포)과 <strong>우산 활동</strong>(프로젝트 관리, 위험 관리, 품질 보증 등)을 포함. 이 모델은 각 활동을 단계별로 반복하거나 병렬로 수행해 소프트웨어 개발을 체계적으로 관리하는 방식. 다양한 <strong>프로세스 모델</strong>(예: 워터폴, 애자일)들이 이 기본 구조를 기반으로 만들어짐.<h3 id="2-process-flows"><strong>2. Process Flows</strong></h3>
<ul>
<li><strong>Simple Process Flows</strong></li>
</ul>
</li>
<li><strong>1.2.1 Linear Process Flow</strong></li>
<li><strong>1.2.2 Iterative Process Flow</strong><ul>
<li><strong>1.2.3 Evolutionary Process Flow</strong><blockquote>
<p>  <strong>Iterative Process Flow</strong>는 <strong>특정 단계</strong>를 여러 번 반복해서 점차 개선해 나가는 방식. 예를 들어, 설계 단계에서 잘못된 부분을 찾아 수정한 다음, 다시 개발을 진행하는 식으로 작업을 반복.</p>
</blockquote>
</li>
</ul>
</li>
</ul>
</li>
<li><p><em>Evolutionary Process Flow*</em>는 <strong>소프트웨어 전체</strong>를 점차 완성해 나가는 방식. 즉, 한 번의 반복을 통해 부분적으로 완성된 소프트웨어가 나옴. 그리고 그 소프트웨어는 계속 <strong>진화</strong>하면서 더 완벽해짐. 각 사이클마다 새로운 기능이나 개선된 버전이 나오고, 사용 가능한 부분적인 제품을 제공함.
   따라서, <strong>Iterative</strong>는 <strong>특정 단계를 개선</strong>하는 데 초점이 있고, <strong>Evolutionary</strong>는 <strong>전체 소프트웨어를 점차 발전</strong>시키는 데 초점이 있다는 차이가 있음.</p>
</li>
</ul>
</li>
</ul>
<p> <strong>1.2.4 Parallel Process Flow</strong></p>
<h3 id="3-task-sets-in-software-engineering"><strong>3. Task Sets in Software Engineering</strong></h3>
<ul>
<li><strong>3.1 Identifying a Task Set</strong><pre><code> - 진짜 해야되는 일 sw engineering action의 목표 달성을 위해
 - A task set lists로 구성
     - A list of tasks to be accomplished
     - A list of work products to be produced
     - A list of quality assurance filters to be applied</code></pre><h3 id="4-process-assessment-and-improvement"><strong>4. Process Assessment and Improvement</strong></h3>
<ul>
<li>존재 ≠ 소프트웨어의 질, 고객 만족 보장</li>
<li>process criteria 만족 시키는지 평가되어야됨</li>
<li>numeric measures로 평가 돼야됨!!!!! software analytics(metrics)나</li>
</ul>
</li>
</ul>
<blockquote>
<p> ✅ 질문에 대한 답 with GPT
Q. process assessment and improvement가 umbrella activity에 포함이 되는건가요? 
  <strong>차이점 요약:</strong>
    - <strong>Process Assessment</strong>는 <strong>전체 프로세스의 성과 평가</strong>에 중점을 두고, <strong>개선할 부분을 찾기 위한 평가</strong>에 가까워요.
    - <strong>Umbrella Activities</strong>는 <strong>개발 전 과정에 걸쳐</strong> 발생하는 <strong>지속적인 관리 활동</strong>으로, 프로세스를 원활하게 진행되도록 돕는 역할이에요. 
    따라서, <strong>Process Assessment</strong>는 주로 <strong>평가와 개선</strong>을 위한 것이고, <strong>Umbrella Activities</strong>는 <strong>개발 과정의 전반적인 관리</strong>에 초점을 맞춘다고 볼 수 있어요.</p>
</blockquote>
<h3 id="5-prescriptive-process-models"><strong>5. Prescriptive Process Models</strong></h3>
<p>   <strong>orderly</strong></p>
<ul>
<li><p>If prescriptive process models strive for structure and order, are they appropriate for a software world that thrives on change?</p>
<ul>
<li>구조와 질서를 중시하므로, 변화가 잦은 소프트웨어 세계에서는 적합하지 않을 수 있음</li>
</ul>
</li>
<li><p>If we reject traditional process models and replace them with something less structured, do we make it impossible to achieve coordination and coherence in software work?</p>
<ul>
<li>전통적인 모델을 버리고 덜 구조화된 모델을 채택해도, <strong>Agile</strong>이나 <strong>Evolutionary</strong> 모델 같은 방식으로 <strong>유연성을 유지하면서도 필수적인 조정과 일관성</strong>을 유지할 수 있음</li>
</ul>
</li>
</ul>
<p><strong>1.5.1 Waterfall Model</strong>
    <img src="https://velog.velcdn.com/images/03x2_18/post/e9e89a98-ff15-4813-95ba-d7fe241548d0/image.png" alt=""></p>
<ul>
<li><strong>순차적 프로세스 모델</strong>. 각 단계가 <strong>고정된 순서</strong>대로 진행되며, 한 번 완료된 단계는 다시 돌아가지 않는 것이 특징.<pre><code>- linear process flow 기반</code></pre><strong>1.5.2 Prototyping Model</strong>
  <img src="https://velog.velcdn.com/images/03x2_18/post/5427baef-e721-4490-9c65-94a5c3b70071/image.png" alt=""><ul>
<li><strong>Prototyping 모델</strong>은 <strong>Evolutionary Process Flow</strong>에서 나온 모델</li>
</ul>
</li>
<li><strong>프로토타입 개발</strong>: 소프트웨어의 일부 기능이나 UI를 빠르게 개발하여 <strong>시제품</strong>을 만든다.<ul>
<li><strong>사용자 피드백</strong>: 사용자가 프로토타입을 직접 사용해보고 피드백을 제공한다.</li>
<li><strong>반복적 개선</strong>: 사용자 피드백을 반영하여 소프트웨어를 반복적으로 개선하고 발전시킨다.</li>
<li><strong>최종 소프트웨어</strong>: 최종적으로 완성된 소프트웨어는 여러 차례의 반복적 개선 과정을 거쳐 <strong>사용자 요구를 정확히 반영</strong>한다.</li>
</ul>
</li>
</ul>
<p>장점</p>
<ul>
<li><strong>사용자 참여</strong>가 활발하여 요구사항이 <strong>명확해지고</strong>, 소프트웨어의 최종 품질이 향상됨.</li>
<li><strong>변화에 유연</strong>하여, 프로젝트 진행 중에 요구사항이 변경되더라도 빠르게 반영할 수 있음.</li>
<li><strong>제품이 초기부터 시각화</strong>되기 때문에, 사용자가 실제로 어떻게 작동할지 미리 경험할 수 있음.</li>
</ul>
<p>단점</p>
<ul>
<li><strong>프로토타입에 의존할 위험 (temptation to ship a prototype)</strong></li>
<li>시간과 비용 초과 (프로토타입 버려지는거에 대해서..)<ul>
<li>요구사항 완벽 정의 X</li>
<li>설계의 품질 저하</li>
</ul>
</li>
</ul>
<p><strong>1.5.3 Spiral Model</strong>
        <img src="https://velog.velcdn.com/images/03x2_18/post/efa99b1d-df1c-4e03-b77b-544e4ec319a6/image.png" alt=""></p>
<blockquote>
<p> ✅질문에 대한 답 with GPT
      <strong>Spiral 모델</strong>과 <strong>Prototyping 모델</strong>은 둘 다 <strong>반복적</strong>이고 <strong>점진적인 개발</strong>을 통해 소프트웨어를 완성하는 점에서는 비슷하지만, 중요한 차이점이 있어:</p>
</blockquote>
<h3 id="1-목적과-초점">1. <strong>목적과 초점</strong></h3>
<p>  <strong>Spiral 모델</strong>:
            - Spiral 모델은 <strong>위험 관리</strong>에 중점을 두고, 각 반복에서 <strong>위험을 분석</strong>하고 그에 따른 결정을 내려가면서 소프트웨어를 개발해.
            - 각 반복 주기마다 위험을 줄이기 위해 <strong>위험 평가</strong>가 필수적으로 포함되며, 점진적으로 더 완성도 높은 소프트웨어를 목표로 해.
            - Spiral 모델은 <strong>대규모 프로젝트</strong>나 <strong>고위험 프로젝트</strong>에 적합하며, 여러 단계를 거쳐 계속해서 발전하는 방식이야.
  <strong>Prototyping 모델</strong>:
            - Prototyping 모델은 <strong>사용자 요구사항을 명확히</strong> 하기 위한 것이 목적이야. 초기 <strong>프로토타입</strong>을 만들어 사용자가 직접 테스트해보고 피드백을 제공받아, 요구사항을 구체화하는 데 중점을 둬.
            - 위험 관리보다는 <strong>사용자와의 피드백</strong>을 통해 요구사항을 점진적으로 개선하는 것이 핵심이야.</p>
<blockquote>
<pre><code>        - **빠른 피드백**과 **사용자 요구사항 반영**을 위해 프로토타입을 반복적으로 개발하고 수정해.</code></pre></blockquote>
<h3 id="2-프로토타입-사용-여부">2. <strong>프로토타입 사용 여부</strong></h3>
<p><strong>Spiral 모델</strong>: 프로토타입을 <strong>필요에 따라</strong> 만들 수 있지만, 필수 요소는 아니야. 중요한 것은 <strong>위험 분석</strong>과 이를 기반으로 한 <strong>반복적 개발</strong>이야.
<strong>Prototyping 모델</strong>: <strong>프로토타입을 필수적으로 사용</strong>하며, 이를 기반으로 <strong>사용자 피드백</strong>을 받아 개발을 진행해.</p>
<h3 id="3-위험-관리">3. <strong>위험 관리</strong></h3>
<p>   <strong>Spiral 모델</strong>: Spiral 모델은 <strong>각 반복에서 위험을 평가</strong>하고, 그 위험을 줄이기 위한 결정을 내리는 것이 핵심이야. 이는 고위험 프로젝트에서 매우 중요해.
  <strong>Prototyping 모델</strong>: 위험 관리에 대한 명확한 단계는 없고, 주로 <strong>사용자 요구사항</strong>에 초점을 맞춰서 개발이 이루어져.</p>
<h3 id="결론">결론:</h3>
<p><strong>Spiral 모델</strong>은 <strong>위험 관리</strong>를 중심으로 <strong>점진적으로 발전하는 방식</strong>이고, <strong>Prototyping 모델</strong>은 <strong>사용자 요구사항을 구체화</strong>하기 위해 <strong>프로토타입</strong>을 반복적으로 개선하는 방식이야. 둘 다 반복적 개발을 하지만, <strong>목표와 초점</strong>이 다르기 때문에 동일한 모델은 아니야</p>
<p><strong>1.5.4 Unified Process Model</strong></p>
<p>  <img src="https://velog.velcdn.com/images/03x2_18/post/a04c8262-7ee3-4de2-8ff9-3fcc8259e1a2/image.png" alt="">
<strong>Unified Process Model</strong>은 소프트웨어 개발에서 <strong>객체지향 설계와 분석</strong>을 기반으로 한 <strong>반복적</strong>이고 <strong>점진적인 개발 방법론</strong>. 이 모델은 소프트웨어를 <strong>여러 반복 주기</strong>(iteration)로 나눠서 개발하고, 각 주기마다 소프트웨어의 완성도를 높여가는 방식으로, <strong>유스케이스</strong>(Use Case)를 중심으로 시스템을 개발하는 것이 특징.
** 주요 단계**:</p>
<ul>
<li><strong>Inception(개념 단계)</strong>: 프로젝트의 범위를 정의하고, 주요 요구사항을 파악.<ul>
<li><strong>Elaboration(정교화 단계)</strong>: 시스템의 구조와 설계를 구체화하며, 핵심 위험을 해결.</li>
<li><strong>Construction(구축 단계)</strong>: 실제 소프트웨어를 개발하고, 반복적으로 기능을 추가.</li>
</ul>
</li>
<li><strong>Transition(전환 단계)</strong>: 소프트웨어를 사용자에게 배포하고, 피드백을 반영하여 수정.<ul>
<li><strong>객체지향 설계</strong>: <strong>객체지향</strong> 기법을 사용해 소프트웨어를 설계하며, 유지보수와 확장성을 고려.</li>
</ul>
</li>
</ul>
<blockquote>
</blockquote>
<p>✅질문에 대한 답 with GPT
Linear Process Flow vs Waterfall Model 차이가 뭐얌 구체적으로</p>
<h3 id="요약">요약:</h3>
<ul>
<li><strong>Linear Process Flow</strong>는 단순히 <strong>단계가 순차적으로 진행되는 흐름</strong>을 설명하는 것이고,</li>
<li><strong>Waterfall 모델</strong>은 <strong>Linear Process Flow</strong>를 기반으로 한 <strong>구체적인 소프트웨어 개발 방법론</strong>이에요.</aside>

</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[3장 우수한 데이터 아키텍처 설계]]></title>
            <link>https://velog.io/@03x2_18/3%EC%9E%A5-%EC%9A%B0%EC%88%98%ED%95%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%84%A4%EA%B3%84</link>
            <guid>https://velog.io/@03x2_18/3%EC%9E%A5-%EC%9A%B0%EC%88%98%ED%95%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%84%A4%EA%B3%84</guid>
            <pubDate>Thu, 26 Sep 2024 05:07:53 GMT</pubDate>
            <description><![CDATA[<h1 id="31-데이터-아키텍처">3.1 데이터 아키텍처</h1>
<p>데이터 아키텍처는 어떻게 정의해볼 수 있을까? 엔터프라이즈 아키텍처에 대해 먼저 정의하는 것이 필수적이다.</p>
<blockquote>
<p>💡
엔터프라이즈 아키텍처는 기업의 변화를 지원하는 시스템 설계로, 신중한 트레이드오프 평가를 통해 도달한 유연하고 되돌릴 수 있는 의사결정으로 달성된다.</p>
</blockquote>
<ul>
<li>단방향 의사결정, 양방향 의사결정, 변경관리 등 의사결정과 밀접한 관련이 있는 주제들이 존재한다!</li>
<li>기술적 솔루션은 그 자체를 위한 것이 아니라 비지니스 목표를 지원하기 위해 존재한다 !</li>
<li>유연성과 트레이드 오프의 균형을 유지해야한다.</li>
</ul>
<p>아래는 데이터 아키텍처에 대한 책의 정의이다.</p>
<blockquote>
<p>💡
데이터 아키텍처는 기업의 진화하는 데이터 요구 사항을 지원하는 시스템 설계로, 트레이드오프에 대한 신중한 평가를 통해 유연하고 되돌릴 수 있는 결정을 내림으로써 실현된다. </p>
</blockquote>
<p>데이터 아키텍처 구성요소</p>
<ul>
<li>운영 아키텍처 : 무엇을? (인력, 프로세스 및 기술과 관련한 필요 기능의 요건을 포괄)</li>
<li>기술 아키텍처: 어떻게?(엔지니어링 수명 주기를 통해 데이터를 수집, 저장, 변환 및 제공하는 방법을 개략적으로 설명)</li>
</ul>
<p>우수한 아키텍처란? </p>
<ul>
<li>유연성과 트레이드오프를 적절히 실현!</li>
<li>재사용 가능한 공통 구성요소</li>
<li>민첩성</li>
<li>가역성</li>
</ul>
<p>등등을 포함! </p>
<h1 id="32-우수한-데이터-아키텍처의-원칙">3.2 우수한 데이터 아키텍처의 원칙</h1>
<p>AWS Well-Architected 프레임워크 </p>
<ol>
<li>운영 우수성 </li>
<li>보안</li>
<li>신뢰성</li>
<li>성능효율성</li>
<li>비용 최적화</li>
<li>지속가능성</li>
</ol>
<p>구글 클라우드의 클라우드 네이티브 아키텍처를 위한 5대 원칙</p>
<ol>
<li>자동화를 위한 설계</li>
<li>상태의 스마트한 관리</li>
<li>관리형 서비스 선호</li>
<li>심층 방어 연습</li>
<li>항상 아키텍처 설계</li>
</ol>
<p>위의 원칙들을 토대로 우수한 아키텍처가 되기 위한 원칙을 조금 더 자세히 살펴보자!!!</p>
<h3 id="원칙-1-공통-컴포넌트를-현명하게-선택해라">원칙 1: 공통 컴포넌트를 현명하게 선택해라</h3>
<p>민첩성을 실현할 수 있어야 한다. 공통 컴포넌트는 적절한 사용 사례로 누구나 접근 가능해야하며, 동시에 부정 접근을 방지해야한다.</p>
<p>클라우드 플랫폼은 공통 컴포넌트를 채택하기 이상적인 장소다.</p>
<h3 id="원칙-2-장애에-대비하라">원칙 2: 장애에 대비하라</h3>
<p>모든 것은 항상 실패한다. - 베르너르 포헐스, AWS CTO</p>
<ul>
<li>가용성: IT 서비스 또는 컴포넌트가 작동 가능한 상태에 있는 시간의 비율</li>
<li>신뢰성: 지정된 간격 동안 의도된 기능을 수행할 때 시스템이 정의된 표준을 충족할 확률</li>
<li>복구 시간 목표: 서비스 또는 시스템 장애의 최대 허용 시간</li>
<li>복구 시점 목표: 복구 후 허용 가능한 상태다. 복구 시점 목표는 허용 가능한 최대 데이터 손실을 나타낸다.</li>
</ul>
<h3 id="원칙-3-확장성을-위한-아키텍처를-설계하라">원칙 3: 확장성을 위한 아키텍처를 설계하라</h3>
<ol>
<li>확장 가능한 시스템은 상당한 양의 데이터를 처리할 수 있도록 스케일 업 할 수 있다. </li>
<li>확장 가능한 시스템 규모를 스케일 다운할 수 있다.</li>
<li>0으로 확장할 수도 있다</li>
<li>탄력적 시스템은 부하에 따라 동적으로 확장할 수 있고, 이상적으로는 자동화된 방식으로 확장할 수 있다.</li>
</ol>
<p>단, 부적절하게 확장 전략 도입하면 시스템이 지나치게 복잡해지거나 비용이 너무 많이 들 수도 있으니 조심!</p>
<h3 id="원칙-4-아키텍처는-리더십이다">원칙 4: 아키텍처는 리더십이다</h3>
<p>리더십이 기술에 대한 명령과 통제 방식을 의미하지는 않는다. </p>
<p>모범 사례를 학습하고 공통의 목표를 추구해야한다! 리더십을 연습하고 아키텍트의 조언을 구하자&gt;&lt;</p>
<h3 id="원칙-5-항상-아키텍처에-충실하라">원칙 5: 항상 아키텍처에 충실하라</h3>
<p>단순히 기존 상태를 유지하는 역할만 수행하는 게 아니라, 기술의 변화에 대응해 새롭고 흥미로운 것들도 끊임없이 설계해라</p>
<h3 id="원칙-6-느슨하게-결합된-시스템을-구축하라">원칙 6: 느슨하게 결합된 시스템을 구축하라</h3>
<p>한 팀이 다른 팀에 <strong>의존하지 않고도</strong> 시스템을 테스트, 배포, 변경할 수 있도록 시스템 아키텍처가 설계되면, 해당 팀은 작업을 수행할 때 의사소통이 거의 필요하지 않다.즉, 아키텍처와 팀 모두 느슨하게 결합되어 있다.</p>
<ol>
<li>지금부터 모든 팀은 서비스 인터페이스를 통해 데이터와 기능을 공개한다.</li>
<li>각 팀은 이러한 인터페이스로 서로 소통해야 한다. </li>
<li>네트워크를 통한 서비스 인터페이스 호출을 사용한 것이다. </li>
<li>어떤 기술을 사용하는지는 중요하지 않다. HTTP, CORBA, Pub/sub, 사용자 정의 프로토콜 등 무엇이든 상관없다.</li>
<li>모든 서비스 인터페이스는 예외 없이 처음부터 외부화할 수 있도록 설계되어야 한다. 즉 팀은 외부의 개발자에게 인터페이스를 공개할 수 있도록 계획하고 설계해야 한다. 예외는 없다. </li>
</ol>
<p>API의 뒤에 데이터와 서비스를 두면서 → 느슨한 결합 가능해짐 → AWS 탄생함! </p>
<h3 id="원칙-7-되돌릴-수-있는-의사결정을-하라">원칙 7: 되돌릴 수 있는 의사결정을 하라</h3>
<h3 id="원칙-8-보안-우선순위를-지정하라">원칙 8: 보안 우선순위를 지정하라</h3>
<p>강화된 경계 보안 모델과 제로 트러스트 보안 모델</p>
<p>공동 책임 모델 </p>
<p>보안 엔지니어로서의 역할도 해야한다.</p>
<h3 id="원칙-9-핀옵스를-수용하라">원칙 9: 핀옵스를 수용하라</h3>
<p>핀옵스는 진화하는 클라우드 재무 관리 분야이자 문화적 관행으로, 엔지니어링 재무 기술 및 비지니스 팀이 데이터 기반 지출 결정을 위해 협업할 수 있도록 지원함으로써 조직이 비지니스 가치를 극대화할 수 있게 해준다. </p>
<h1 id="33-주요-아키텍처-개념">3.3 주요 아키텍처 개념</h1>
<h3 id="1-도메인과-서비스">1. 도메인과 서비스</h3>
<p>아키텍처의 구성 요소 설명 전에 도메인과 서비스 개념에 대해서 이해하는게 필요함</p>
<p>도메인: 실제 설계하는 주제 영역</p>
<p>서비스: 작업 달성 기능 집합</p>
<p>ex. 예를 들어보자</p>
<p>판매 도메인: 주문 서비스, 송장 서비스, 상품 서비스</p>
<p>회계 도메인: 송장 서비스, 급여 서비스, 매출채권 서비스</p>
<h3 id="2-분산시스템확장성장애에-대비한-설계">2. 분산시스템/확장성/장애에 대비한 설계</h3>
<p><strong>확장성</strong>: 시스템 요량을 늘려서 성능을 개선하고 수요를 처리하는 거! </p>
<p><strong>탄력성</strong>: 확장성이 뛰어난 시스템을 동적으로!! 확장하는거!</p>
<p><strong>가용성</strong>: 작동 가능한 상태에 있는 시간의 비율</p>
<p><strong>신뢰성</strong>: 시스템이 지정된 간격 동안 의도한 기능을 수행할 때 정의된 표준을 충족할 가능성(확률)이다.</p>
<p>이들의 <strong>관계는</strong> 어떨까? 신뢰성이 낮으면 가용성이 저하되겠지! 탄력성은 신뢰성을 확장시킨다! </p>
<p><strong>문제점</strong></p>
<p>일반적으로, <strong>단일 머신</strong>으로는 높은 가용성과 신뢰성을 제공할 수 없다.</p>
<p><strong>대안</strong></p>
<p>분산 시스템을 활용해 전체 확장 용량을 늘림ㄱ뫄 동시에 가용성, 신뢰성 높인다! </p>
<p><strong>수평확장시스템</strong>: 부하와 자원 요건을 충족하는 더 많은 머신을 추가할 수 있다. </p>
<p>ex. 리더노드 1 → 워커노드, 워커노드, 워커노드 (3) </p>
<p><strong>리더노드</strong> : 워크로드의 인스턴스화, 주요 창구를 담당</p>
<p>워커노드: 작업 분산 받고 결과를 리더 노드로 반환</p>
<p>분산 아키텍처의 <strong>중복성</strong>: 머신이 정지했을 경우, 다른 머신이 이어 받을 수 있도록 데이터 복제! </p>
<p>클러스터는 용량 복원을 위해 더 많은 머신을 추가할 수 있다.</p>
<p>분산시스템의 활용: 클라우드 데이터 웨어하우스 객체 스토리지 시스템에는 분산 개념이 거의 모두 포함된다! </p>
<h3 id="3-강한-결합-vs-느슨한-결합-계층-모놀리스-마이크로서비스">3. 강한 결합 vs 느슨한 결합: 계층, 모놀리스, 마이크로서비스</h3>
<p><strong>강한결합</strong>: 도메인과 서비스의 모든 부분이 다른 모든 도메인과 서비스에 필수적으로 의존하며 긴밀하게 결합된 패턴!!!! </p>
<p><strong>단일 계층 아키텍처</strong>: <strong>서버 ( DB↔애플리케이션 )</strong> </p>
<p>강한 결합의 본질! 장애 위험 때문에 운영 환경에선 권장 X</p>
<p><strong>모놀리스:</strong> 가능한 한 많은 것을 한 지붕 아래에 포함 = 강한결합! 컴포넌트의 모듈화가 부족, 재사용이 불가능하고 어려울 수 있음. 이에 대한 대안으로 분산형모놀리스 논의 시작됐는데 뒷장에 나온다고.. (코드 베이스 → 데이터베이스)</p>
<p><strong>느슨한 결합</strong>: 서로 너무 의존하지 않으면서..분산형 도메인과 서비스가 있음</p>
<p><strong>다중 계층 아키텍처</strong>: 가장 널리 쓰이는 <strong>3-tier architecture</strong> ( <strong>데이터 계층 → 애플리케이션/로직 계층 → 프레젠테이션 계층</strong> ) 상향식 구조</p>
<p>상향식 구조로, 강한 결합의 문제점을 분리로 해결한 버전이다. 계층적이며 하위 계층이 반드시 상위 계층에 의존하지는 않는다. 반면 상위 계층은 하위에 의존! </p>
<p>애플리케이션에서 데이터 분리, 프레젠테이션에서 애플리케이션 분리! </p>
<p>+) <strong>비공유 아키텍처</strong>: 단일 노드가 각 요청을 처리하고, 다른 노드들이 해당 노드 또는 서로 간에 메모리, 디스크, CPU등 자원을 공유하지 않음. </p>
<p>+) <strong>공유 디스크 아키텍처</strong>: 모든 노드에서 접근할 수 있는 동일한 디스크와 메모리를 공유해야 하는지 여부에 따라 결정</p>
<p><strong>마이크로서비스</strong>: 개별적이고 분산되어 있으며, 느슨하게 결합된 서비스로 구성. 서비스의 분리와 새로운 병렬 아키텍처! (서비스 → DB, 서비스→ DB …) </p>
<p>문제점: 좀 많이 복잡할 수 있음. </p>
<p>대안: 1. 도메인 분리를 고려 2. 중앙집중화 3. 데이터 메시 (3장 뒷부분)</p>
<h3 id="4-사용자-접근-싱글-vs-멀티테넌트">4. 사용자 접근: 싱글 vs 멀티테넌트</h3>
<p><strong>싱글</strong>: 사용자(or 테넌트) 가 독립된 소프트웨어 인스턴스 가짐</p>
<p><strong>멀티테넌트</strong>: 하나의 소프트웨어 인스턴스를 다들 공유!</p>
<p><strong>멀티테넌시의 고려사항</strong>: 성능과 보안! </p>
<p>테넌시 개념은 클라우드 컴퓨팅에서 특히 많이 사용된다… 그 중에서도 아마 모든 <strong>클라우드는</strong> 멀티테넌시를 채택함! </p>
<h3 id="5-이벤트-기반-아키텍처">5. 이벤트 기반 아키텍처</h3>
<p>keyword: 생산자, 이벤트 라우터, 소비자</p>
<p>이벤트: 상태의 변화</p>
<p><strong>아키텍처 구조</strong>: 생산자 → (이벤트)→ 이벤트 라우터 → (이벤트) → 소비자</p>
<p><strong>장점</strong>: 이벤트의 상태를 여러 서비스에 분산시킴. 즉, 장애가 발생하거나 오프라인이 되거나 여러 소비자 또는 서비스가 동일한 이벤트에 접근하도록 할 때 유용. </p>
<p><strong>서비스가 느슨하게 결합된 경우</strong> 항상 이벤트 중심 아키텍처가 후보가 됨! </p>
<h3 id="6-브라운필드-vs-그린필드">6. 브라운필드 vs 그린필드</h3>
<p>둘의 차이점은 백지상태부터 시작하느냐, 기존의 것을 재설계해서 활용하느냐의 차이! </p>
<p><strong>브라운필드</strong>: 기존의 코드를 리팩토링</p>
<p> (스탱글러패턴) : 기존의 것을 외과적으로, 한 번에 하나씩 대체</p>
<p>옛날꺼 폐기하면서 성장함으로써 성공을 입증하고, 결국 레거시가 완전히 대체되는 시점이 옴! </p>
<p><strong>그린필드 프로젝트</strong> : 완전 반대! 레거시 얽매이지 않고 새롭게 출발</p>
<p>쉬운 경향, but 이력서 주도의 개발으로 변질될 수 있음. 유행에 대한 강박 생길 수도</p>
<h1 id="34-데이터-아키텍처의-사례-및-유형">3.4 데이터 아키텍처의 사례 및 유형</h1>
<h2 id="1-데이터-웨어하우스">1. 데이터 웨어하우스</h2>
<p><strong>보편화 배경</strong></p>
<ul>
<li>확장성이 뛰어난 종량제 모델 (cf. 종량제 모델은 고객이 사용한 만큼만 기한 내에 돈을 지불하는 방식)</li>
</ul>
<p>→ 인건비와 자원을 대폭 줄일 수 있었다.</p>
<p><strong>주목할만한 점 : 조직과 기술</strong></p>
<p>조직: 팀의 구조와 프로세스</p>
<ol>
<li><strong>OLTP에서 OLAP 분리</strong>: 비지니스 성장에 따라 데이터를 별도의 물리적 시스템으로 옮기면서 운영 시스템의 부하가 줄고 분석 성능이 향상! </li>
<li><strong>데이터 중앙 집중화 및 구성</strong>: ETL을 사용해 데이터 가져옴. 추출(데이터 원천에서), 변환(ETL 시스템에서), 적재 (데이터 마트에)<ul>
<li><strong>(데이터 원천 → ETL 시스템 → 데이터 웨어하우스 → 데이터 마트)</strong></li>
</ul>
</li>
</ol>
<p><strong>기술</strong>: MPP 시스템의 등장 (Massively Parallel Computer)</p>
<ol>
<li>SQL 시맨틱 지원</li>
<li>행기반 → 열기반으로의 전환!!!! : 클라우드 데이터 웨어하우스에서 더 큰 데이터와 쿼리 지원할 수 있도록</li>
</ol>
<p><strong>ETL의 변형 ELT:</strong> 데이터를 운영 시스템에서 데이터웨어하우스 스테이징 영역으로 어느 정도 직접 이동이 가능. 변환은 데이터 웨어하우스에서 직접 처리됨! 데이터 웨어하우스와, 데이터 처리 도구의 방대한 계산 능력을 활용. 데이터 일괄 처리. 기록</p>
<ul>
<li>데이터 원천 → ETL (스테이징 → 데이터 웨어하우스) → 분석, 데이터 과학, 보고</li>
<li>이벤트를 스트리밍해 스테이징 영역에 저장한 후 데이터 웨어하우스 내에서 변환하므로 스트리밍 배치에서도 인기 많았음</li>
</ul>
<h3 id="클라우드-데이터-웨어하우스">클라우드 데이터 웨어하우스</h3>
<ul>
<li>Amazon Redshift</li>
<li>Google Big Query</li>
<li>Snowflake</li>
</ul>
<p>On-demand 방식(사용자의 요구가 있었을 때 그 요구에 따라 서비스를 제공하는 것)의 스핀업(to create virtual machine using cloud computing ex. to spin up a new server) </p>
<p>클라우드 데이터 웨어하우스가 제공하는 기능 영향이 매우 크기 때문에, 데이터 웨어하우스 용어가 폐기될 수도 있음..!! MPP시스템에서 제공하는 것보다 훨씬 광범위한 기능 갖춘 새로운 데이터 플랫폼으로 발전하고 있다.</p>
<h3 id="데이터마트">데이터마트</h3>
<p>단일 하위 조직이나 부서 / 비지니스 라인에 초점 맞춰 분석 및 보고서를 제공하도록 설계된 웨어하우스의 한층 더 정교한 하위집합이다. </p>
<p><strong>데이터 마트가 왜 필요할까?</strong> </p>
<ol>
<li>분석가와 보고서 개발자가 데이터에 더 쉽게 접근</li>
<li>많은 변환 단계 제공 (분석 쿼리에 복잡한 데이터 조인 및 집계가 필요한 경우 데이터 마트에서 진행함으로써 전체적인 성능 크게 향상)</li>
</ol>
<h2 id="2-데이터-레이크">2. 데이터 레이크</h2>
<p>정형과 비정형 모두 중앙 위치에 저장하고 엄격한 데이터 구조적 제한을 가하지 않는다!</p>
<p>역사</p>
<ol>
<li>HDFS에서 데이터레이크 1.0이 시작됨</li>
<li>클라우드의 인기 증가</li>
<li>데이터 레이크 → 사실상 무제한 스토리지 용량 갖춘 클라우드 기반 객체 스토리지로 옮겨감 ! </li>
</ol>
<p>기능</p>
<ul>
<li>모든 크기와 유형의 방대한 데이터 저장 가능</li>
<li>온디맨드로 스핀업해 거의 무제한에 가까운 컴퓨팅 성능 이용 가능</li>
<li>맵리듀스, 스파크, 레이, 프레스토, 하이브 등 원하는 데이터 처리 기술을 선택해 작업 수행 가능</li>
</ul>
<p>단점 (매우 치명적임..)</p>
<ul>
<li>쓰레기 매립장이 되어버림</li>
<li>데이터 늪, 다크 데이터, WORN 같은 용어의 탄생</li>
<li><strong>데이터는 스키마 관리, 데이터 카탈로그 작성 및 검색 도구가 거의 없는 상태에서 관리 불가능한 크기로 증가했기 때문!</strong></li>
<li>본질적으로 <strong>쓰기</strong> 전용 : 사용자 레코드를 지정 삭제 해야하는 GDPR과 같은 규제 도입이 골칫거리</li>
</ul>
<h2 id="3-융합-차세대-데이터-레이크-데이터-플랫폼">3. 융합, 차세대 데이터 레이크, 데이터 플랫폼</h2>
<h3 id="데이터-레이크-하우스">데이터 레이크 하우스</h3>
<p>데이터 웨어하우스 + 데이터 레이크</p>
<ul>
<li>웨어하우스의 요소인 제어, 데이터 관리, 데이터 구조를 통합</li>
<li>레이크 요소: 객체 스토리지에 데이터 저장하고 다양한 쿼리 및 변형 엔진 지원<ul>
<li>단순 레이크와의 차이점: 데이터를 쏟아붓기만하고 갱신/삭제 안하는 레이크랑은 다르게 ACID 트랜잭션 지원!</li>
</ul>
</li>
</ul>
<h3 id="클라우드-데이터-웨어하우스-1">클라우드 데이터 웨어하우스</h3>
<p>(데이터 레이크와 유사) </p>
<ul>
<li>컴퓨팅과 스토리지 분리</li>
<li>페타바이트 규모의 쿼리 지원</li>
<li>다양한 비정형 데이터 및 반정형 객체 저장</li>
<li>스파크/빔과 같은 고급 처리 기술과 통합</li>
</ul>
<h3 id="데이터-플랫폼">데이터 플랫폼</h3>
<p>데이터 웨어하우스와 데이터 레이크의 기능을 융합</p>
<p>중요성이 증가하고 있음 !!! </p>
<h2 id="4-모던-데이터-스택">4. 모던 데이터 스택</h2>
<p><strong>모던 데이터 스택:</strong> 현재 유행하는 분석 아키텍처! 향후 몇 년 동안 더 널리 사용되리라 예상되는 <strong>추상화 유형</strong>을 강조함.</p>
<ul>
<li>클라우드 기반의 플러그 앤 플레이(PnP: 간편하게 연결해서 바로 사용할 수 있는) 방식 사용</li>
<li>모듈식 → 복잡성 낮춤!</li>
<li>사용자 기반, 커뮤닡, 코드리뷰</li>
<li>통합 data platform과 잘 어울림</li>
<li>기본 컴포넌트: 데이터 원천 → 클라우드 기반 데이터 커넥터와 통합 → 클라우드 데이터 웨어하우스 → BI와 시각화</li>
<li>이해하기 쉬운 가격 책정과 구현을 갖춘 PnP 모듈 방식의 핵심이 미래에는 중요할 것임 !</li>
</ul>
<h2 id="5-람다-아키텍처">5. 람다 아키텍처</h2>
<p>등장 배경</p>
<ul>
<li>카프카의 등장! : 스트리밍 데이터 관련 작업의 인기가 폭발함</li>
<li>배치 및 스트리밍 데이터를 단일 아키텍처로 작동하는 방법을 찾아야 했다.</li>
</ul>
<p>람다 아키텍처</p>
<ul>
<li><strong>배치, 스트리밍</strong>이 서로 독립적으로 작용</li>
<li>원천 시스템은 추가만 가능하고, 데이터 처리할 때는 스트림과 배치라는 두 목적지로 도달</li>
<li><strong>인스트림</strong> :  데이터 전달 ! (속도에서 가장 낮은 지연시간으로 전달하는 것이 목표)</li>
<li><strong>배치계층</strong> : 처리, 집계</li>
<li><strong>서빙계층</strong>: 두 계층 쿼리 결과 집계</li>
<li><strong>아키텍처</strong> 모습: 원천 시스팀 → 스트림처리, 배치처리 → 전달 (스트림쿼리, 배치쿼리) ↔ 쿼리</li>
</ul>
<p>문제점</p>
<ul>
<li>가장 권장되지는 않음 !</li>
<li>코드 베이스다르면 어렵기 때문</li>
<li>그래서 밑에 카파 아키텍처에 대해 알아보자</li>
</ul>
<h2 id="6-카파-아키텍처">6. 카파 아키텍처</h2>
<ul>
<li>람다의 단점 보완</li>
<li><strong>주요 특징</strong>: 스트림 처리 플랫폼을 모든 데이터 처리의 백본으로 사용!<ul>
<li>스트림 소스 → 스트림처리 → 서빙계층 ↔ 쿼리</li>
</ul>
</li>
</ul>
<p>장점</p>
<ul>
<li>실시간 이벤트 스트림 직접 읽고 대량 데이터 청크 재생해 일괄 처리하여 동일한 데이터에 실시간 및 배치 처리 매끄럽게 적용할 수 있음</li>
</ul>
<p>채택 X 이유</p>
<ol>
<li>스트리밍 자체는 사실 많은 기업에게 여전히 미지의 영역</li>
<li>스트리밍 시스템 이용하기 때문에 복잡하고 비용 많이 듦. 반대로 배치 스토리지와 프로세싱은 방대한 데이터셋에 비해 훨씬 효과적이고 비용 효율적임 </li>
</ol>
<h2 id="7-데이터-흐름-모델-통합-배치-스트리밍">7. 데이터 흐름 모델, 통합 배치, 스트리밍</h2>
<p><strong>핵심과제</strong> 배치 및 스트리밍 데이터를 통합하는 것 !! </p>
<ul>
<li>포인트 1. 여러 코드 경로를 통합</li>
</ul>
<p>카파 아키텍처의 문제점</p>
<ul>
<li>통합 큐잉 및 스토리지 계층에 의존하지만, 실시간 통계 수집이나 배치 작업하려면 다른 도구 써야된다.</li>
</ul>
<p>데이터 흐름 모델, 아파치 프레임워크 (구글)로서의 해결</p>
<ul>
<li><strong>모든 데이터를 이벤트</strong>로 간주 !<ul>
<li>지속적인 <strong>실시간 이벤트 스트림</strong>은 <strong>무한 데이터</strong></li>
<li>배치 처리는 단순히 경계가 있는 <strong>유한 이벤트 스트림</strong></li>
</ul>
</li>
<li><strong>따라서, 실시간 처리와 배치 처리는 거의 같은 코드 사용해 같은 시스템에서 이뤄짐 !</strong></li>
<li>슬라이드나 텀블링 등 다양한 <strong>윈도</strong> 중에서 하나를 실시간 집계를 위해 선택</li>
</ul>
<aside>
✅

<p>배치는 스트리밍의 특수한 경우다 ! </p>
</aside>

<h2 id="8-iot용-아키텍처">8. IoT용 아키텍처</h2>
<p><strong>사물인터넷</strong>: 주변 환경에서 주기적으로 또는 지속해서 데이터를 수집해 목적지로 전송하는 장치에서 데이터를 생성</p>
<p><strong>장치</strong> : 데이터 수집하는 장치는 모두 IoT 장치이다.</p>
<p><strong>장치와 인터페이스</strong>:</p>
<ul>
<li><strong>IoT 게이트웨이</strong> : 장치를 연결하고 인터넷상의 적절한 수신처에 안전하게 라우팅하는 허브</li>
<li>적은 전력으로 장치 연결</li>
<li>중간 기착지 역할</li>
<li>장치의 스웜은 물리적 위치마다 하나씩 다수의 IoT 게이트 웨이 활용함</li>
</ul>
<p><strong>수집</strong></p>
<ul>
<li>이벤트 수집 아키텍처로 유입될 수 있다.</li>
</ul>
<p><strong>스토리지</strong></p>
<ul>
<li>지연 요건에 따라 크게 달라짐<ul>
<li>원격 센서: 배치 객체 스토리지</li>
<li>모니터링 및 자동화 설루션: 실시간에 가까운 응답</li>
</ul>
</li>
</ul>
<p><strong>서빙</strong></p>
<ul>
<li>패턴이 엄청 다양</li>
<li>역 ETL</li>
</ul>
<h2 id="9-데이터-메시">9. 데이터 메시</h2>
<p><strong>개념</strong></p>
<p>(중앙 집중식 데이터 레이크 및 데이터 웨어하우스 같은)<strong>데이터 모놀리식 데이터 플랫폼  ↔ 운영 데이터와 분석 데이터</strong> </p>
<p>사이에서 환경이 구분되는 <strong>‘데이터 격차’</strong>에 대한 최근의 대응책이다.</p>
<p><strong>포인트</strong></p>
<ul>
<li>중앙집중식 X ! 탈중앙화!</li>
<li>중앙 소유의 레이크에서 데이터 보내는 대신, 쉽게 소모할 수 잇는 방식으로 데이터셋 호스팅하고 제공</li>
</ul>
<p><strong>핵심 구성 요소</strong></p>
<ul>
<li>도메인 지향 분산형 데이터 소유권 및 아키텍처</li>
<li>제품으로서의 데이터</li>
<li>플랫폼으로서의 셀프서비스 데이터 인프라</li>
<li>통합 컴퓨팅 거버넌스</li>
</ul>
<h2 id="10-기타-데이터-아키텍처-예시">10. 기타 데이터 아키텍처 예시</h2>
<p><strong>종류 엄청 다양</strong></p>
<ul>
<li>아키텍처에는 데이터 패브릭, 데이터 허브, 확장 아키텍처, 메타데이터 우선 아키텍처, 이벤트 기반 아키텍처, 라이브 데이터 스택 등 수많은 종류 있음.</li>
</ul>
<p><strong>데이터 엔지니어의 역할</strong></p>
<ul>
<li>새로운 아키텍처가 조직에 어떻게 도움되는지 주목</li>
<li>한 가지 접근 방식에 집착 X</li>
<li>잠재적 가치 파악 → 심화 학습 → 구체적 결정 → 비지니스 긍정적 영향 초래</li>
</ul>
<h1 id="35-데이터-아키텍처-설계-담당자는-누구인가">3.5 데이터 아키텍처 설계 담당자는 누구인가?</h1>
<p>아키텍트의 역할</p>
<ul>
<li>최신상태 유지</li>
<li>기술과 데이터의 상태에 부합하는 아키텍처</li>
</ul>
<p>경계의 모호</p>
<ul>
<li>데이터 엔지니어와 아키텍트 역할 경계가 모호해지고 있따 !</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[2장 데이터 엔지니어링 수명 주기]]></title>
            <link>https://velog.io/@03x2_18/2%EC%9E%A5-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%97%94%EC%A7%80%EB%8B%88%EC%96%B4%EB%A7%81-%EC%88%98%EB%AA%85-%EC%A3%BC%EA%B8%B0</link>
            <guid>https://velog.io/@03x2_18/2%EC%9E%A5-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%97%94%EC%A7%80%EB%8B%88%EC%96%B4%EB%A7%81-%EC%88%98%EB%AA%85-%EC%A3%BC%EA%B8%B0</guid>
            <pubDate>Wed, 21 Aug 2024 03:14:53 GMT</pubDate>
            <description><![CDATA[<h1 id="21-데이터-엔지니어링-수명-주기">2.1 데이터 엔지니어링 수명 주기</h1>
<h2 id="1-데이터-생성">1. 데이터 생성</h2>
<blockquote>
<p><strong>원천시스템 (source system)</strong></p>
</blockquote>
<p>데이터 엔지니어링 수명 주기에서 사용되는 데이터 원본이다.
예시) IoT 장치, 메시지 대기열, 트랜잭션 데이터베이스 등
<img src="https://velog.velcdn.com/images/03x2_18/post/14a606a0-5479-467e-bf5e-d9ec1a332657/image.png" alt="">
<img src="https://velog.velcdn.com/images/03x2_18/post/d4efc5d1-6390-4b03-be9d-42e1f3b97afa/image.png" alt=""></p>
<blockquote>
<p><strong>원천 시스템의 평가: 주요 고려사항</strong> </p>
</blockquote>
<ul>
<li>데이터 원천데이터의 본질적인 특징 (애플리케이션? IoT 장치의 스웜?)</li>
<li>원천 데이터의 유지 기간</li>
<li>데이터의 생성 속도</li>
<li>출력 데이터의 일관성</li>
<li>에러 발생 / 중복포함 / 동시 출발, 늦게 도착 / 스키마 / 얼마나 자주 가져와야하는지</li>
<li>상태가 있는 시스템의 경우 변경 관리</li>
<li>다운스트림 사용 위한 데이터 제공업체 누구? 데이터 원천에서 데이터 조회하면 성능 영향 있는지?</li>
<li>업스트림, 원천 의존관계</li>
<li>늦거나 누락된 데이터 품질 검사</li>
</ul>
<blockquote>
<p><strong>스키마</strong></p>
</blockquote>
<ul>
<li>데이터의 계층 구성 정의</li>
</ul>
<ol>
<li><strong>스키마리스</strong> : 스키마 없다는 거 아님. 도큐먼트 EB에 데이터 기록될 때</li>
<li><strong>고정스키마</strong> : 관계형 데이터베이스 스토리지</li>
</ol>
<p>어느쪽이 됐든 스키마는 변한다! 스키마의 진화는 애자일 접근 방식에서 장려됨! </p>
<p>데이터 엔지니어의 핵심은 원천 시스템 스키마에서 → 원시데이터 입력받고 → 유용한 출력으로 변환!!!!</p>
<p>스키마 진화하고 있어서 어려워지고 있지만 중요함…</p>
<h2 id="2-데이터-저장">2. 데이터 저장</h2>
<p>데이터 저장은 복잡한 단계의 하나이기도 하다.</p>
<ol>
<li>클라우드의 데이터 아키텍처는 여러 스토리지 솔루션 활용함</li>
<li>복잡한 변환 쿼리 지원하는 데이터 스토리지 솔루션은 순수하게 스토리지로서만 작동하는 경우가 거의 없고 많은 솔루션이 복잡한 변환쿼리를 지원한다. (Amazon S3 Select등)</li>
<li>저장은 데이터 엔지니어링 수명 주기의 한 단계이지만 수집, 변환, 서비스 제공과 같은 다른 단계에도 자주 관여한다.</li>
</ol>
<ul>
<li>저장은 여러 파이프라인 위치에서 발생</li>
<li>전체 수명 주기에 걸쳐서 실행되고 영향을 미친다.</li>
</ul>
<p>ex) 아파치 카프카, 펄사</p>
<blockquote>
<p><strong>스토리지 시스템 평가: 주요 엔지니어링 고려 사항</strong></p>
</blockquote>
<ul>
<li>아키텍처의 요구 속도와 잘 맞는지</li>
<li>병목 현상</li>
<li>부자연스러운 행동</li>
<li>높은 random access 비율</li>
<li>향후 예상되는 확장을 처리하는지</li>
<li>용량 제한</li>
<li>메타데이터</li>
<li>SLA에 따라 데이터 취득?</li>
<li>순수 스토리지? 쿼리 패턴 요구?</li>
<li>스키마 구애? 유연 스키마(카산드라)? 강제 적용 스키마?</li>
<li>데이터 거버넌스를 위해 품질, 계보 어떻게 추적?</li>
<li>법령 준수?</li>
</ul>
<blockquote>
<p><strong>데이터 접근 빈도 이해</strong></p>
</blockquote>
<ol>
<li><p><strong>핫데이터</strong>  </p>
<p> 가장 자주 엑세스 되는 데이터</p>
</li>
<li><p><strong>미온적 데이터</strong>   </p>
<p> 가끔 (ex. 매주/매월) 액세스되는 데이터</p>
</li>
<li><p><strong>콜드데이터</strong></p>
<p> 거의 쿼리되지 않으며 아카이브 시스템에 저장하는 데 적합 </p>
<ul>
<li>벤더가 월 스토리지 비용은 매우 저렴 but 데이터 검색 비용은 높은 특화된 스토리지 계층을 제공</li>
</ul>
</li>
</ol>
<blockquote>
<p><strong>스토리지 시스템 선택</strong></p>
</blockquote>
<p>범용 스토리지 권장 사항 없음. 모든 스토리지는 장단점, 트레이드 오프가 있다!</p>
<p>따라서 질문 목록들을 잘 따져서 고려하는게 중</p>
<h2 id="3-데이터-수집">3. 데이터 수집</h2>
<blockquote>
<p>수집 단계에서의 주요 고려사항</p>
</blockquote>
<ul>
<li>수집 중 데이터 사용 사례? 여러 버전 생성 대신 데이터 재사용 가능한가?</li>
<li>데이터 안정적으로 생성하고 수집? 필요시 해당 데이터 사용할 수 있는가?</li>
<li>수집 후 데이터 목적지는?</li>
<li>데이터에 얼마나 자주 접근?</li>
<li>데이터는 보통 어느 정도의 용량으로 도착?</li>
<li>데이터 형식은?</li>
<li>다운스트림 스토리지 및 변환 시스템에서 형식 처리 가능?</li>
<li>원천 데이터 다운스트림에서 즉시 사용할 수 있는 양호한 상태? 얼마나 오래 사용? 사용 할 수 없는 이유는?</li>
<li>데이터가 스트리밍 소스에서 전송된 경우 목적지에 도달하기 전에 데이터 변환해야 하는가? 데이터가 스트림 자체 내에서 변환되는 형태의 변환이 적절한가?</li>
</ul>
<blockquote>
<p><strong>배치 vs 스트리밍</strong></p>
</blockquote>
<p><strong>스트리밍</strong>: 우리가 다루는 대부분의 데이터는 본질적으로 스트리밍! 원천에서 지속해서 생성되고 갱신됨</p>
<ul>
<li>다운스트림 시스템에 데이터를 실시간으로 연속해 제공할 수 있음</li>
</ul>
<p><strong>배치 수집</strong>:스트림을 큰 청크로! 처리하는 전문적이고 편리한 방법!!! </p>
<ul>
<li>미리 설정된 시간 간격에 따라 or 데이터가 미리 설정된 크기 임곗값에 도달하면 수집됨</li>
<li>수집이 한 방향으로 이뤄짐!</li>
<li>배치로 분할되면 다운스트림 소비자의 지연 시간이 본질적으로 제한됨</li>
</ul>
<p><strong>동향</strong></p>
<p>이벤트 스트리밍과 처리 플랫폼이 보편화됨에 따라, 데이터 스트림의 지속적 처리에 대한 접근성과 인기가 높아지고 있음. </p>
<p><strong>배치 스트림 주요 고려 사항</strong></p>
<p>스트리밍 굉장히 매력적이지만, 배치 수집보다 적절한지 자문해보아야함.</p>
<ul>
<li>데이터를 실시간으로 수집하면 다운스트림 스토리지 시스팀이 데이터 흐름 속도를 처리할 수 있는가?</li>
<li>밀리초 단위의 실시간 데이터? or 매분마다 데이터 축적하고 수집하는 마이크로 배치 접근이 효과적?</li>
<li>스트리밍 수집 사례는? 어떤 이점? 데이터 실시간 → 개선된 데이터에 어떤 조치 취하지?</li>
<li>시간, 비용, 유지보수, 다운타임, 기회비용</li>
<li>인프라 장애 발생 시 스트리밍 파이프라인과 시스템이 안정적이고 다중화되어 있는지</li>
<li>사용 사례에 가장 적합한 도구는? 관리형 서비스(Kinesis, GCD) ? or 인스턴스 구축?(Kafka, spark 등) 후자라면 관리는 누가? 비용? 트레이드오프?</li>
<li>ML 모델 배포 시 온라인 예측 및 지속적 훈련으로 얻는 이점은?</li>
<li>실제 운영 인스턴스에서 데이터를 가져오는가? 수집 프로세스의 영향도는?</li>
</ul>
<blockquote>
<p><strong>푸시 vs 풀</strong></p>
</blockquote>
<p><strong>푸시</strong> : 데이터베이스, 객체 저장소, 파일 시스템과 관계 없이 원천시스템은 타깃에 데이터를 씀</p>
<p><strong>ex) CDC(change data capture)</strong> </p>
<p>데이터베이스에서 행이 변경될 때마다 메시지 트리거 ! 메시지는 큐에 푸시되고 수집 시스템이 해당 메시지를 가져감 </p>
<p><strong>풀</strong> : 원천시스템에서 데이터를 검색함.</p>
<p><strong>ex) ETL 프로세스 (추출, 변환, 적재)</strong> </p>
<ul>
<li><p>추출(extract) 부분은 풀 수집 모델을 다룸!</p>
<p>  정해진 일정에 따라 현재 소스 테이블의 스냅숏을 쿼리</p>
</li>
</ul>
<h2 id="4-데이터-변환">4. 데이터 변환</h2>
<p>데이터 수집했으면 다운스트림 사용 사례에 유용한 형태로 변경해야겠지? </p>
<p>적절히 변환을 안해주면.. ML에 유용하지가 않음! </p>
<blockquote>
<p><strong>변환 단계의 주요 고려사항</strong></p>
</blockquote>
<ul>
<li><p>변환에 드는 비용과 투자수익률(ROI)는 얼마? 관련 비지니스 가치는?</p>
</li>
<li><p>변환은 단순하고 독립적인지!</p>
</li>
<li><p>비지니스 규칙은?</p>
</li>
<li><p>변환은 수명주기의 다른단계와 얽히는 경우가 많음</p>
</li>
<li><p>수집중에 변환되거나 원천시스템에서 변환됨.</p>
<p>  ex. 수집 프로세스에 전송하기 전에 이벤트 타임스탬프를 레코드에 추가</p>
</li>
<li><p>데이터 정제와 같은 변환 작업은 최종 소비자에게 가치를 더해줌</p>
</li>
<li><p>비지니스 로직은 모델링에서 데이터 변환의 주요 원인이 됨.</p>
<ul>
<li>ex 판매의 의미 = 12개의 사진 프레임을 30달러, 총 360달러에 구입했다는 의미</li>
<li>회계 규칙의 논리를 추가해야함.</li>
</ul>
</li>
</ul>
<h2 id="5-데이터-서빙">5. 데이터 서빙</h2>
<p>이제 데이터로부터 가치를 창출해보자! </p>
<p><strong>가치</strong> : 데이터가 실용적으로 사용될 때 가치가 있다! 소비되지 않거나 쿼리되지 않는 데이터는 걍 단순 비활성 상태일 뿐…. 데이터 허영은 기업의 주요 리스크임.</p>
<ol>
<li><p><strong>분석</strong></p>
<p> <img src="https://velog.velcdn.com/images/03x2_18/post/47956f12-fdc0-4f5e-8c06-a2a388ede60b/image.png" alt=""></p>
<ol>
<li><p><strong>운영분석</strong></p>
<p> 운영의 상세 사항에 중점두고 보고서 사용자가 즉시 수행할 수 있는 작업을 촉진 </p>
<p> ex. 재고 물품에 대한 실시간 뷰, 앱 상태에 대한 실시간 대시보드</p>
<p> 현재에 중점 두기 때문에 BI처럼 과거 동향과는 관련 없음</p>
</li>
<li><p><strong>BI</strong> <strong>&amp; 애드혹</strong></p>
<p> 기업의 과거와 현재 상태 설명 위해 데이터 수집! 비지니스 로직과 정의에 대한 레포 유지함.</p>
<p> 기업의 데이터 성숙도 높아짐에 따라 애드혹 데이터 분석에서 셀프 서비스 분석으로 전환해 IT 부서의 개입 없이도 비지니스 사용자가 데이터 접근 가능해질 수 있음. </p>
</li>
<li><p><strong>임베디드 분석</strong> (고객 대면 분석)</p>
<p> 기업은 수천 명 이상의 고객에게 별도의 분석 및 데이터를 제공할 수 잇고, 고객은 이때 다른 고객이 아닌 자기자신의 데이터만 확인할 수 있어야함!!!!</p>
<p> 데이터 유출, 취약성과 관련해 피해 범위 최소화해야함</p>
<p> 모든 장소에서 테넌트 or 데이터 수준의 보안을 적용한다. </p>
<p> 멀티 테넌시</p>
<p> ✅ 멀티테넌시(Multi-tenancy)는 소프트웨어 아키텍처에서 여러 개의 사용자가 하나의 소프트웨어 애플리케이션 또는 시스템을 공유하지만, 각 사용자는 자신의 데이터와 구성을 가지고 있는 방식을 의미합니다. 이 개념은 특히 클라우드 컴퓨팅 환경과 SaaS(Software as a Service) 모델에서 중요합니다.
 라고 지피티가 알려줌!</p>
</li>
</ol>
</li>
<li><p><strong>머신러닝</strong></p>
<p> 데이터 엔지니어가 ML에 능숙하면 좋다..! </p>
<p> ML서빙 단계에 고려해야할 사항이 있다.</p>
<ul>
<li>신뢰할 수 있는 특성 엔지니어링을 수행하기에 충분한 품질의 데이터? 품질 요구사항 및 평가는 팀이 개발</li>
<li>데이터 검색 가능? 가치 데이터 쉽게 찾을 수 있음?</li>
<li>조직적 경계는 어떻게 되지?</li>
<li>데이터셋이 편향되지 않았는지, 실제 상황 반영하는지</li>
</ul>
</li>
<li><p><strong>역ETL</strong></p>
<p> 수명주기의 출력 측에서 처리한 데이터를 다시 가져와서 원천 시스템에 공급하는 것. </p>
<p> ex. 마케팅 분석가는 데이터 이용해서 입찰가 계산한 다음에 다시 구글 애즈에 업로드할 수 있음 </p>
<p> 역ETL은 아직 초기 단계지만 앞으로 더 발전할 것임. 점점 중요해지고 있음. </p>
</li>
</ol>
<h1 id="22-수명주기의-드러나지-않는-요소들">2.2 수명주기의 드러나지 않는 요소들</h1>
<p><img src="https://velog.velcdn.com/images/03x2_18/post/0cfe8b22-fe10-4792-88a6-de1bed0246bf/image.png" alt=""></p>
<h2 id="1-보안">1. 보안</h2>
<p>보안을 최우선으로 생각해야하며, 위험을 이해해야함!!!! </p>
<ul>
<li>최소 권한 원칙 실행해야한다. (필수적인 데이터와 자원에만 접근할 수 있도록)</li>
<li>접근 타이밍과 관련이 있다. 해당 작업을 수행하는데 필요한 기간동안만 허용한다.</li>
</ul>
<h2 id="2-데이터-관리">2. 데이터 관리</h2>
<ol>
<li><p><strong>데이터 거버넌스</strong> </p>
<ul>
<li>데이터 품질, 무결성, 보안 및 사용성 보장하기 위한 관리 기능</li>
<li>핵심 범주는 <strong>발견가능성(쉽게 찾아 쓸 수 있어야), 보안, 책임!</strong><ul>
<li>하위범주 : 메타데이터, 개인정보보호 등</li>
</ul>
</li>
</ul>
<ol>
<li><p><strong>발견가능성</strong> : 데이터 중심 기업에선 데이터를 사용할 수 있고 검색할 수 있어야함. 안정적으로 접근할 수 있어야하고 데이터 출처와 다른 데이터와의 관계, 데이터 의미를 알아야한다.</p>
<ol>
<li><strong>메타데이터</strong> : 데이터에 관한 데이터. 데이터 검색하고 제어하는 데 필요한 데이터<ol>
<li>비지니스 메타데이터 : ex. ‘고객’에 대한 정의</li>
<li>기술 메타데이터 : 파이프라인 메타데이터, 데이터 계보, 스키마</li>
<li>데이터 계보 메타데이터: 원본과 변경하상, 종속성을 시간에 따라 추적</li>
<li>스키마 메타데이터: DB, 데이터 웨어하우스, 데이터 레이크 or 파일 시스템 같은 시스템에 저장된 데이터 구조 설명</li>
<li>운영 메타데이터: 다양한 시스템의 운영 결과를 설명. 작업 id, 앱 런타임 로그, 프로세스 사용되는 데이터 및 오류 로그에 대한 통계 포함</li>
<li>참조 메타데이터: 다른 데이터를 분류하는 데 필요한 데이터로, 조회 데이터라고도 한다. 내부 코드, 지리적 코드, 측정 단위 및 내부 달력 표준 등이 표준 사례.</li>
</ol>
</li>
</ol>
</li>
<li><p><strong>데이터 책임</strong> </p>
<p> 데이터의 일부를 관리할 개인을 지정하는 것을 의미함. 문제가 있는 데이터에 대해 책임지는 사람이 없으면 품질 관리 어렵기 때문이당.</p>
<p> 데이터 책임의 수준 : 다양할 수 있음. 테이블, 로그 스트림 혹은 여러 테이블에 걸쳐 발생하는 단일 필드 엔티티처럼 세분화될 수도</p>
</li>
<li><p><strong>데이터 품질</strong></p>
<p> 데이터를 원하는 상태로 최적화하는 것으로 ‘기대하는 것과 비교해 어떤 결과를 얻을 수 있을까? 라는 질문을 중심으로 한다. </p>
<ol>
<li><p>정확도: 실제로 정확한가? 중복된 값 있는가? 수치가 정확한가?</p>
</li>
<li><p>완전성: 기록은 완전한가? 모든 필수 필드에 유횻값이 포함되는가?</p>
</li>
<li><p>적시성: 기록 시기 적절하게 이용할 수 있는가? </p>
<p>✅ 마스터 데이터 : 직원, 고객, 제품 및 위치와 같은 비지니스 엔티티에 대한 데이터임. 마스트 데이터도 잘 관리해야되고… MDM(마스터 데이터 관리)는 골든 레코드로 알려진 일관된 엔티티 정의 구축하는 관행임.</p>
</li>
</ol>
</li>
</ol>
</li>
<li><p><strong>데이터 모델링 및 설계</strong> </p>
<ul>
<li>데이터 분석과 과학을 통해 비지니스 통찰 얻어야한당! 데이터를 사용 가능한 형태로 변환하는 프로세스를 데이터 모델링 및 설계라고 한다.</li>
<li>데이터 모델링은 API 호출, MySQL 테이블 스키마에 대한 JSON 응답 설계도 다 포괄하는 개념임.</li>
<li>원천 데이터 다양해지면서 모델링 어려워짐.</li>
</ul>
</li>
<li><p><strong>데이터 계보</strong></p>
<p> 데이터가 수명 주기 거치면서 어떤 시스템이 데이터에 영향 줬는지, 데이터가 전달 변환될 때 어떤 데이터가 구성됐는지를 데이터 계보를 통해 알 수 있음</p>
<ul>
<li><strong>데이터 계보</strong> : 데이터 처리하는 시스템과 의존하는 업스트림 데이터 모두 축적해서 수명 주기 전체에 걸쳐 데이터의 감사 추적을 기록함</li>
<li><strong>DDOD (data observability driven development)</strong> : 계보를 통해 데이터 관찰. 개발, 테스트, 최종 생산 과정에 적용돼 기대에 부응하는 품질과 적합성 제공함.</li>
</ul>
</li>
<li><p><strong>저장 및 운영</strong></p>
</li>
<li><p><strong>데이터 통합 및 상호 운용성</strong></p>
<p> 여러 도구와 프로세스 전반에 걸쳐 데이터를 통합하는 프로세스임. </p>
<ul>
<li>맞춤형 DB 연결이 아닌 범용  API를 통해 이뤄지는 경우가 늘고 있음<ul>
<li>ex. 데이터 파이프라인은 세일즈포스의 API에서 데이터 가져와 S3에 저장하고 Snowflake의 API를 호출해 테이블 적재 → API 다시 호출 쿼리 실행 → S3로 결과 이송 → 스파크가 데이터 소비</li>
</ul>
</li>
<li>데이터 시스템과의 상호 작용의 복잡성은 감소했지만, 시스템 수와 파이프라인의 복잡성은 극적으로 증가했다! 따라서 오케스트레이션 필요</li>
</ul>
</li>
<li><p><strong>데이터 수명 주기 관리</strong></p>
<p> 데이터 레이크 등장으로 데이터 보관 및 파기를 무시하게 됨. 스토리지 무한대로 추가할 수 있는데 왜 굳이 데이터 폐기해야할까? </p>
<ul>
<li>클라우드에 점점 더 많은 데이터가 저장되고 있음</li>
<li>GPR과 CCPA같은 개인정보보호 및 데이터 보존법에 따라 ‘잊혀질 권리’ 존중 위해 적극적으로 파기 해야함.</li>
<li>WORM(write once read many)가 기본 스토리지 패턴인 데이터 레이크에서 데이터 파기가 어려워졌음. 메타데이터, 데이터 계보 등으로 마지막 단계 간소화해야</li>
</ul>
</li>
<li><p><strong>고급 분석 및 ML을 위한 데이터 시스템</strong></p>
</li>
<li><p><strong>윤리 및 개인정보 보호</strong></p>
<p> 윤리와 개인정보보호는 데이터 엔지니어링 수명 주기에 영향 미침. </p>
<p> ex. 개인식별정보 및 중요한 ㅈ어보 마스킹 처리 </p>
<p> 규제요건과 컴플라이언스에 대한 처벌 점점 더 엄격해지고 있음. 잘 이해해야</p>
</li>
</ol>
<h2 id="3-데이터옵스">3. 데이터옵스</h2>
<p><img src="https://velog.velcdn.com/images/03x2_18/post/7772b392-9854-4757-bfcb-947948b8e432/image.png" alt=""></p>
<ol>
<li><strong>자동화</strong><ul>
<li>변경관리(환경, 코드 및 데이터 버전 제어), CICD, 코드로 구성된 데브옵스와 유사한 프레임워크 및 워크플로 가짐</li>
<li>Airflow Dagster와 같은 오케스트레이션 프레임워크</li>
<li>워크로드를 줄이고 비지니스에 제공하는 가치 높일 수 있는 자동화를 지속해서 구현하려고 해야함.</li>
</ul>
</li>
<li><strong>모니터링 및 관찰 가능성</strong><ul>
<li>중요한 결정 내리고 한참 뒤에 오류 발견하면 안되니까 데이터와 생성 시스템을 감시하고 관찰해야한다.</li>
</ul>
</li>
<li><strong>사고 대응</strong><ul>
<li>실수는 필연적으로 발생한다.</li>
<li>사고 대응은 기술과 도구에만 국한하지 않는다.</li>
<li>AWS의 최고 기술 책임자(CTO)인 베르너르 포헐스 - ‘모든 것은 항상 망가진다’ (ㅜㅜ)</li>
<li>재해에 대비하고 가능한 신속 효율적으로 대응할 준비 해야함</li>
<li>보고 하기 전에 미리 문제 발견해야됨</li>
<li>선제 대처와 사후 대응 다 중요</li>
</ul>
</li>
</ol>
<h2 id="4-데이터-아키텍처">4. 데이터 아키텍처</h2>
<ol>
<li>비지니스 요구 사항 이해하고 새로운 요구사항 수집</li>
<li>1의 요건 변환해 비용과 운영 간소화를 균형 있게 유지하며 데이터 캡처하고 제공하는 새로운 방법 설계</li>
<li>기술 및 도구의 트레이드오프 파악</li>
</ol>
<h2 id="5-오케스트레이션">5. 오케스트레이션</h2>
<p><strong>오케스트레이션</strong>: 많은 작업이 예약된 순서대로 최대한 빠르고 효율적으로 실행되도록 조정하는 프로세스(Airflow 등)</p>
<ul>
<li>DAG(directed acyclic graph)의 형태로 작업 종속성에 따라 메타데이터를 구축</li>
<li>DAG는 한번만 실행되거나 매주, 매일, 매시간, 5분 등 일정한 간격으로 실행되도록 스케줄링 가능</li>
<li>감지 및 모니터링 가능</li>
<li>특정 조건 벗어나거나 데이터가 제시간에 도착 안하면 경고 보내기도</li>
<li>작업 기록 기능, 시각화 및 경고 기능 구축</li>
<li>오케스트레이션은 엄밀히 말해 ‘배치 개념’임<ul>
<li>대안은 스트리밍 DAG. BUT 여전히 유지 구축 보수 어려움 그치만 펄사(Pulsar)와 같은 차세대 스트리밍 플랫폼은 운영 부담 줄이는 거 목표로하고 있음!!!</li>
</ul>
</li>
</ul>
<h2 id="6-소프트웨어-엔지니어링">6. 소프트웨어 엔지니어링</h2>
<p>2000-2010: 저수준 프레임워크 C, C++, Java에서 맵리듀스 잡 작성</p>
<p>2010 중반: 추상화한 프레임워크 사용 시작</p>
<p>소프트 엔지니어링의 공통 영역</p>
<ol>
<li><strong>코어 데이터 처리 코드</strong> : 더 추상적/관리쉬워짐. 그치만 처리 코드 여전히 작성해야됨. <ul>
<li>언어: Spark, SQL, Beam 등의 프레임워크와 언어에 능숙하고 생산성 뛰어나야 함</li>
<li>코드 테스트 방법론: 단위, 회귀, 통합, 앤드투엔드, 스모크 등의 적절한 코드 테스트 방법론을 이해하는 것이 중요함</li>
</ul>
</li>
<li><strong>오픈 소스 프레임워크 개발</strong><ul>
<li>빅데이터 시대엔 하둡 생태계에서 프레임워크 폭발적 증가.</li>
<li>새로운 내부 도구를 엔지니어링 하기 전에 사용할 수 있는 도구의 환경 조사하는 게 좋음! (TCO)총 소유 비용과 기회비용에 주목하자..</li>
<li>해결해야 할 문제 해결하는 오픈 소스는 이미 있을 것이당!!!</li>
</ul>
</li>
<li><strong>스트리밍</strong><ul>
<li>다양한 <strong>윈도잉</strong> 방법론을 적용할 코드를 작성해야함</li>
<li>윈도잉을 사용하면 실시간 시스템에서 추적 통계와 같은 중요한 측정 지표 계산할 수 있음!</li>
<li>개별 이벤트 처리하는 다양한 함수 플랫폼 (OpenFaaS, AWS람다, GCF) 또는 스트림을 분석해 보고 및 실시간 작업을 지원하는 전용 스트림 프로세서(Spark, Beam, Pulsar) 등 다양한 프레임워크 중 선택할 수 있다.</li>
</ul>
</li>
<li><strong>코드형 인프라</strong><ul>
<li>인프라 관리 부담은 기업들이 데이터브릭스나 아마존(EMR)같은 관리형 빅데이터 시스템과 클라우드 데이터 웨어하우스로 이전함에 따라 감소하고 있다.</li>
<li>클라우드 환경에서 인프라 관리하는 경우, IaC 프레임워크로 대응하는 사례 늘고 있음.</li>
<li>헬름 등의 도구 써서 컨테이너와 쿠버네티스 사용하는 IaC의 개념도 있다!</li>
<li>버전 제어와 배포 반복성 실현</li>
</ul>
</li>
<li><strong>코드형 파이프라인</strong><ul>
<li>오케스트레이션 시스템의 핵심 개념</li>
<li>일반적으로 python사용해서 데이터 작업과 데이터 간의 족속성 선언</li>
</ul>
</li>
<li><strong>범용 문제 해결</strong><ul>
<li>파이브트랜, 에어바이트, 마틸리언과 같은 프레임워크 사용할 때 기존 커넥터가 없는 데이터 원천에 직면. 사용자 정의 코드 작성해야됨</li>
<li>API 이해, 데이터 풀링 및 변환 수행, 예외 처리하는 등 소프트웨어 엔지니어링에 익숙해야함.</li>
</ul>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[1장 데이터 엔지니어링 상세]]></title>
            <link>https://velog.io/@03x2_18/%EA%B2%AC%EA%B3%A0%ED%95%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%97%94%EC%A7%80%EB%8B%88%EC%96%B4%EB%A7%81-CH1</link>
            <guid>https://velog.io/@03x2_18/%EA%B2%AC%EA%B3%A0%ED%95%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%97%94%EC%A7%80%EB%8B%88%EC%96%B4%EB%A7%81-CH1</guid>
            <pubDate>Wed, 21 Aug 2024 01:28:19 GMT</pubDate>
            <description><![CDATA[<h1 id="11-데이터-엔지니어링이란">1.1 데이터 엔지니어링이란?</h1>
<p>데이터 엔지니어링에 대해 전문가들은 어떤 정의를 내리고 있을까? </p>
<blockquote>
</blockquote>
<p>💓 <strong>...데이터 엔지니어는 조직의 데이터 인프라를 구축하고 운영해 데이터 분석가와 데이터 과학자가 추가 분석을 수행할 수 있도록 준비한다…</strong>
-알텍스소프트의 ‘데이터 엔지니어링의 개념, 프로세스 및 도구’</p>
<blockquote>
</blockquote>
<p><strong>데이터 엔지니어링의 첫 번째 유형은 SQL 중심이다…
데이터 엔지니어링의 두 번째 유형은 빅데이터 중심이다…</strong>-제시 앤더슨</p>
<h2 id="111-데이터-엔지니어링-정의">1.1.1 데이터 엔지니어링 정의</h2>
<p>수 많은 용어 정의가 있지만 우리 나름대로 앞으로 책을 읽어가며 사용할 용어를 채택해야됨! 아래와 같음.</p>
<blockquote>
</blockquote>
<p>💓 데이터 엔지니어링은 원시 데이터를 가져와 분석 및 머신러닝과 같은 다운스트림 사용 사례를 지원하는 ‘고품질의 일관된 정보를 생성하는 시스템과 프로세스의 개발, 구현 및 유지 관리이다. 데이터 엔지니어링은 보안， 데이터 관리， 데이터 운영， 데이터 아키텍처， 오케스트레이션， 소프트웨어 엔지니어링의 교차점이다.
데이터 엔지니어는 원천 시스템에서 데이터를 가져오는 것부터 시작해 분석 또는 머신러닝과 같은 사용 사례에 데이터를 제공하는 것으로 끝나는 데이터 엔지니어링 수명 주기를 관리한다.</p>
<h2 id="112-데이터-엔지니어링-수명-주기">1.1.2 데이터 엔지니어링 수명 주기</h2>
<p><img src="https://velog.velcdn.com/images/03x2_18/post/314f3c2b-1772-4ab1-821a-27814d878d8a/image.png" alt=""></p>
<p>핵심은</p>
<ul>
<li>데이터 생성</li>
<li>데이터 저장</li>
<li>데이터 수집</li>
<li>데이터 변환</li>
<li>데이터 서빙</li>
<li><ul>
<li>드러나지 않는 요소<ul>
<li>보안 / 데이터관리 / 데이터옵스 / 데이터 아키텍처 / 오케스트레이션 / 소프트웨어 엔지니어링</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="113-데이터-엔지니어의-진화">1.1.3 데이터 엔지니어의 진화</h2>
<p><strong>1980년~2000년 : 데이터 웨어하우징 → 웹</strong></p>
<p>데이터웨어하우스 : 1989년, 빌 인먼 </p>
<blockquote>
</blockquote>
<p>✅ 데이터 웨어하우스는 POS 트랜잭션, 마케팅 자동화, 고객 관계 관리 시스템 등의 여러 소스에서 가져온 구조화된 데이터와 반구조화된 데이터를 분석하고 보고하는 데 사용되는 엔터프라이즈 시스템입니다. 데이터 웨어하우스는 임시 분석과 커스텀 보고서 생성에 적합합니다. 데이터 웨어하우스는 현재 데이터와 과거 데이터를 모두 한곳에 저장할 수 있으며, 시간 흐름에 따른 장기간의 데이터 동향을 확인할 수 있도록 설계되었으므로 비즈니스 인텔리전스의 주요 구성요소입니다.
출처: <a href="https://cloud.google.com/learn/what-is-a-data-warehouse?hl=ko">https://cloud.google.com/learn/what-is-a-data-warehouse?hl=ko</a></p>
<p>인터넷 : AOL, 야후, 아마존 등 1990년</p>
<p><strong>2000년대 초: 현대 데이터 엔지니어링의 탄생</strong></p>
<ul>
<li>차세대 시스템 : 비용 효율적, 확장성, 가용성, 안정성</li>
<li>빅데이터 시대의 시작 (모놀리식 서비스 분산, 분리)</li>
<li>구글 논문 → 아파치 하둡</li>
<li>아마존 EC2, S3, NoSQL → AWS → 구글 클라우드, 마이크로소프트 애저, 디지털 오션 등 퍼블릭 클라우드의 잇따른 등장</li>
</ul>
<p><strong>2000년대와 2010년대: 빅데이터 엔지니어링</strong></p>
<ul>
<li>실시간 데이터 혁명</li>
<li>이벤트 스트리밍</li>
<li>빅데이터 엔지니어 단순화!!!!와 추상화!!!!!(복잡하고 어려운 기술 사용에 집중하지 않아도되게됨)</li>
</ul>
<p><strong>2020년대: 데이터 수명 주기를 위한 엔지니어링</strong></p>
<ul>
<li>분산, 모듈화, 관리, 고도의 추상화</li>
<li>모던 데이터 스택 : 조립된 상용 오픈 소스/서드파티제품들의 모음</li>
<li>데이터 수명 주기 엔지니어로 데이터 엔지니어를 더 정확하게 묘사할 수 있게 됨</li>
<li>저수준의 프레임워크 세부 사항에 방해 받지 않음!!!</li>
<li>데이터 관리와 통제에 더 집중</li>
<li>탈중앙화 민첩성</li>
<li>현재를 데이터 수명 주기 관리의 황금기로 봄!</li>
</ul>
<h3 id="114-데이터-엔지니어링과-데이터-과학">1.1.4 데이터 엔지니어링과 데이터 과학</h3>
<p><img src="https://velog.velcdn.com/images/03x2_18/post/f4592ee0-45cc-4626-b3be-4299f49448f7/image.png" alt="">
<img src="https://velog.velcdn.com/images/03x2_18/post/ae29cf0c-642c-48e8-b93e-a1785f9fecd4/image.png" alt=""></p>
<ul>
<li>하위 세 부분에 소비하는 시간이 거의 70-80%</li>
<li>데이터 엔지니어가 계층 구조 최하단에 있는 작업 집중할 때 DS도 성공할 수 있는 견고한 기반 구축할 수 있음</li>
</ul>
<h1 id="12-데이터-엔지니어링-기술과-활동">1.2 데이터 엔지니어링 기술과 활동</h1>
<p><strong>기술 역량 中 드러나지 않는 요소</strong> : 비용, 민첩성, 확장성, 단순성, 재사용성, 상호 운용성</p>
<ul>
<li>소프트웨어 엔지니어링, 네트워킹, 분산 컴퓨팅, 스토리지 / 기타 저수준의 세부사항 역시 정교하게 이해해야함</li>
</ul>
<h3 id="121-데이터-성숙도와-데이터-엔지니어">1.2.1 데이터 성숙도와 데이터 엔지니어</h3>
<p><strong>데이터 성숙도</strong> : 조직 전체에 걸쳐 더 높은 데이터 활용률, 기능, 통합을 향해 나아가는 과정. BUT 매출에 의해 결정되는 단순한 것은 아님… 중요한 것은 데이터가 경쟁 우위로 활용되는 방식!</p>
<p><img src="https://velog.velcdn.com/images/03x2_18/post/5f1d609c-126d-410b-828c-6da941c5acaa/image.png" alt=""></p>
<ol>
<li>데이터로 시작하기<ol>
<li>데이터를 이제 막 시작하는 기업! 회사에는 애매모호하고 느슨하게 정의된 목표가 있거나 없을 수도..</li>
</ol>
</li>
<li>데이터로 확장하기<ol>
<li>공식적인 데이터 요청 관행을 가짐 데이터 관행을 수립하고 확장성 있고 견고한 데이터 아키텍처 구축을 해야함</li>
</ol>
</li>
<li>데이터로 선도하기<ol>
<li>이 단계에서 기업은 데이터 중심. DE가 작성한 자동화된 파이프라인과 시스템을 통해 사내 직원은 셀프 서비스 분석과 ML수행 가능</li>
</ol>
</li>
</ol>
<h2 id="122-데이터-엔지니어의-배경과-기술">1.2.2 데이터 엔지니어의 배경과 기술</h2>
<ul>
<li>소프트웨어 엔지니어, ETL 개발, 데이터베이스 관리, 데이터 과학, 데이터 분석과 같은 인접한 분야에서 전환하기가 가장 쉽다</li>
<li>데이터 엔지니어는 정의상 데이터와 기술을 모두 이해해야 한다.</li>
<li>데이터 엔지니어는 데이터 소비자(데이터 분석가 및 데이터 과학자)의 요구 사항과 조직 전체에 걸친 데이터의 광범위한 의미를 이해해야 한다.</li>
<li>데이터 엔지니어링은 전체적인 (종합적인) 실무이며 최고의 데이터 엔지니어는 비즈나스 및 기술적 관점에서 그들의 책임을 판단한다.</li>
<li>한마디로 만능…</li>
</ul>
<h2 id="123-비지니스-책임">1.2.3 비지니스 책임</h2>
<ul>
<li>비기술자 및 기술자와 커뮤니케이션</li>
<li>비지니스 요건과 제품 요건 살펴보고 수집하는 방법 이해</li>
<li>애자일, 데브옵스, 데이터 옵스의 문화적기반 이해</li>
<li>비용 관리</li>
<li>지속적 학습</li>
</ul>
<h2 id="124-기술-책임">1.2.4 기술 책임</h2>
<p>수명주기 드러나는 요소 + 드러나지 않는 요소 </p>
<p>코딩도 할 줄 알아야됨</p>
<p>상세한 아키텍처 잘 들여다볼 수 있어야됨</p>
<p>SQL, 파이썬, JVM언어, 배시 등</p>
<blockquote>
</blockquote>
<p>✅ 새로운 기술이 등장했을 때 그 흐름에 동참하지 못하면 도태될 것이다.    - 스튜어트 브랜던 ㄷ ㄷ ㄷ ㄷ</p>
<h2 id="125-a에서-b로-이어지는-데이터-엔지니어링-역할의-연속성">1.2.5 A에서 B로 이어지는 데이터 엔지니어링 역할의 연속성</h2>
<p>A(analysis)형 데이터 과학자 : 분석 , 통찰력, 추상화</p>
<p>B(build)형 데이터 과학자 : 강력한 프로그래밍 기술, 시스템 구축</p>
<h1 id="13-조직-내-데이터-엔지니어">1.3 조직 내 데이터 엔지니어</h1>
<h2 id="131-내부-vs-외부-대면-데이터-엔지니어">1.3.1 내부 vs 외부 대면 데이터 엔지니어</h2>
<p><img src="https://velog.velcdn.com/images/03x2_18/post/60aec93d-e585-4bef-9a3a-f448c71e4151/image.png" alt=""></p>
<p><strong>외부 대면 데이터 엔지니어</strong> : sns, iot, 전자 상거래 등 외부용 앱 사용자와 연계/피드백 루프가 있음</p>
<p><strong>내부 대면 데이터 엔지니어</strong> : BI 대시보드, 보고서, 비지니스 프로세스, 데이터 과학, ml 모델용 데이터 파이프라인과 데이터 웨어 하우스 생성 / 유지보수 등 </p>
<h2 id="132-데이터-엔지니어와-기타-기술-역할">1.3.2 데이터 엔지니어와 기타 기술 역할</h2>
<p><img src="https://velog.velcdn.com/images/03x2_18/post/971683f3-e28e-41f6-8103-5f9eabc8820f/image.png" alt=""></p>
<ul>
<li>데이터 생산자와 데이터 소비자 사이에서의 허브 역할</li>
<li>데브옵스 엔지니어와 같이 운영 역할 하는 사람들과도 소통</li>
</ul>
<p><strong>업스트림 이해관계자</strong></p>
<p>데이터 아키텍트, 소프트웨어 엔지니어, 데브옵스 엔지니어와 사이트 신뢰성 엔지니어 </p>
<p><strong>다운스트림 데이터 소비자</strong> </p>
<p>데이터 과학자, 데이터 분석가, 머신러닝 엔지니어</p>
<h2 id="133-데이터-엔지니어와-비지니스-리더십">1.3.3 데이터 엔지니어와 비지니스 리더십</h2>
<ul>
<li>비기술적 역할도 수행</li>
<li>이니셔티브 주도 : CEO, CIO, CTO, CDO, CAO, CAO-2</li>
<li>데이터 엔지니어 및 PM, 제품 관리자</li>
<li>데이터 엔지니어와 기타 관리 역할 : 다양한 수신 요청 처리, 특정 관리자, 프로젝트 OR 제품에 할당된 자원으로 작업</li>
</ul>
]]></description>
        </item>
    </channel>
</rss>