<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>일쌍,,,,</title>
    <link>https://avonado.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sun, 10 May 2026 10:01:58 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>AVONADO</managingEditor>
    <item>
      <title>[IT 인프라] 클라우드 개념 및 종류, 클라우드 형태, 클라우드 기술 및 용어</title>
      <link>https://avonado.tistory.com/27</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 클라우드 개념 및 종류&lt;/h4&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;클라우드 : IT인프라 자원을 직접 보유해서 사용하는 것(=온프레미스)이 아닌, 다른 기업의 IT인프라 자원을 빌려서 쓰는 것&lt;/li&gt;
&lt;li&gt;클라우드 비용 : 자원을 빌려 쓴 것 만큼의 사용료를 월 과금 형태로 지불&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;호스팅 vs 서버 호스팅 vs 클라우드
&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;을 빌려씀 &amp;rarr; 다른 업체랑 서버 하나를 나눠서 쓰게 될 수도 있음. 서버에 장애가 발생하면 두 업체 모두 서버 못 쓰는 거&amp;nbsp;&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;특징 : 자워 변경(확장 혹은 축소)시 OS 설치 등 세팅 시간이 필요함, 빠른 대응이 어려움&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;특징 :&amp;nbsp; 자원 변경시 유연하게 원하는 만큼 빠르게 변경 가능 (Elastic)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;종류
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;IaaS : Infra as s Service &amp;rarr; 하드웨어 서버만 빌려씀&amp;nbsp;&lt;/li&gt;
&lt;li&gt;PaaS : Platform as a Service &amp;rarr; 서버, OS까지 빌려씀&lt;/li&gt;
&lt;li&gt;SaaS : Software as a Service &amp;rarr; 서버, OS, Application 까지 빌려씀
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ex) DB를 PaaS로 사용 &amp;rarr; DB가 돌아가는 OS환경, DB까지 설치해서 빌려씀&lt;/li&gt;
&lt;li&gt;SaaS의 경우 Application을 입맛대로 수정해서 쓸 수 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;IaaS : AWS, Azure(MS), GCP, NCP, KT CLoud, NHN Cloud&lt;/li&gt;
&lt;li&gt;PaaS : AWS Elastic Beanstalk, Azure SQL DB, Google BigQuery 등&lt;/li&gt;
&lt;li&gt;SaaS : Microsoft 365, Google Workspace, Adobe CC, Zoom, Groupware, Naver Works 등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 클라우드 형태&lt;/h4&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;퍼블릭 클라우드 : 다른 기업의 IT인프라를 빌려다 씀&lt;/li&gt;
&lt;li&gt;프라이빗 클라우드 : 기업이 보유한 IT인프라를 클라우드 서비스처럼 기업 &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;ex) VMware, Nutanix, Red Hat&lt;/li&gt;
&lt;/ul&gt;
&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;프라이빗 : 임직원들만 쓰는 클라우드, DB같은 중요한 애플리케이션 운영&lt;/li&gt;
&lt;li&gt;퍼블릭 : 그룹웨어 등 대외적으로 서비스할때 사용되는 클라우드&lt;/li&gt;
&lt;/ul&gt;
&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;예를 들어 aws와 azure 를 사용중이라고 했을 때, aws에서 장애가 발생해도 나머지 azure로 애플리케이션이 원활하게 돌아가게 하기위해 똑같은 서버를 하나 더 구비해놓는 것&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 클라우드 기술 및 용어&lt;/h4&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;컨테이너: Container, 리눅스 기반 애플리케이션 운영을 위한 &lt;b&gt;프로세스 격리&lt;/b&gt; 기술&lt;/li&gt;
&lt;li&gt;컨테이너 런타임 : Container Runtime, 컨테이너를 다루는 도구&lt;/li&gt;
&lt;li&gt;도커 : Docker, 컨테이너 기술을 누구나 쉽게 사용할 수 있도록 만든 &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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서버가상화(가상머신) : 가상머신 위에 OS올리고 Application 올림&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr;&lt;/span&gt; &lt;b&gt;OS단위&lt;/b&gt;로 격리&lt;/li&gt;
&lt;li&gt;컨테이너 : 하나의 OS 위에 여러개의 컨테이너 올림 &amp;rarr; &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;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;쿠버네티스 : 다수의 컨테이너를 효율적으로 운영, 관리하기 위해 구글에서 만든 도구
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;구글이 오픈소스로 공개, 현재 기업 환경에 맞는 유료 서비스가 다수 존재(EKS, AKS, GKE 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;파드(Pod) : 컨테이너들의 모음&lt;/li&gt;
&lt;li&gt;노드(Node) : 파드가 운영되는 물리서버 또는 가상머신, 워커 노드라고 부름. (=파드들의 모음)&lt;/li&gt;
&lt;li&gt;클러스터(Cluster) : 노드들의 모음&lt;/li&gt;
&lt;li&gt;마스터(Master) : 클러스트들의 모음(하위의 모든 것들을 관리하는 노드)&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;div&gt;
&lt;style&gt;
@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;600;700&amp;family=JetBrains+Mono:wght@400;700&amp;display=swap');

.k8s-root { --k8s-bg:#0d1117;--k8s-surface:#161b22;--k8s-border:#21262d;--k8s-master:#f78166;--k8s-cluster:#d2a8ff;--k8s-node:#79c0ff;--k8s-pod:#56d364;--k8s-cont:#ffa657;--k8s-text:#e6edf3;--k8s-muted:#8b949e; background:var(--k8s-bg);color:var(--k8s-text);font-family:'Noto Sans KR',sans-serif;padding:32px 20px;border-radius:16px;margin:24px 0; }
.k8s-root *{box-sizing:border-box;margin:0;padding:0;}
.k8s-header{text-align:center;margin-bottom:36px;}
.k8s-header h1{font-family:'JetBrains Mono',monospace;font-size:12px;letter-spacing:4px;color:var(--k8s-muted);text-transform:uppercase;margin-bottom:8px;}
.k8s-header h2{font-size:22px;font-weight:700;color:var(--k8s-text);}
.k8s-header h2 span{color:var(--k8s-cluster);}

.k8s-master-wrap{border:2px dashed var(--k8s-master);border-radius:20px;padding:24px;position:relative;max-width:960px;margin:0 auto;animation:k8sFade .5s ease;}
.k8s-cluster-wrap{border:2px dashed var(--k8s-cluster);border-radius:16px;padding:20px;position:relative;margin-bottom:16px;background:rgba(210,168,255,.03);animation:k8sFade .5s ease .1s both;}
.k8s-nodes-row{display:flex;gap:14px;flex-wrap:wrap;}
.k8s-node-wrap{border:2px solid var(--k8s-node);border-radius:12px;padding:14px;position:relative;flex:1;min-width:180px;background:rgba(121,192,255,.04);animation:k8sFade .5s ease .2s both;}
.k8s-pods-row{display:flex;gap:10px;flex-wrap:wrap;}
.k8s-pod-wrap{border:2px solid var(--k8s-pod);border-radius:10px;padding:10px;position:relative;flex:1;min-width:110px;background:rgba(86,211,100,.04);animation:k8sFade .5s ease .3s both;}

.k8s-label{position:absolute;top:-13px;left:16px;padding:2px 12px;border-radius:20px;font-size:10px;font-family:'JetBrains Mono',monospace;font-weight:700;letter-spacing:1px;text-transform:uppercase;}
.k8s-master-wrap&gt;.k8s-label{background:var(--k8s-master);color:#0d1117;}
.k8s-cluster-wrap&gt;.k8s-label{background:var(--k8s-cluster);color:#0d1117;}
.k8s-node-wrap&gt;.k8s-label{background:var(--k8s-node);color:#0d1117;}
.k8s-pod-wrap&gt;.k8s-label{background:var(--k8s-pod);color:#0d1117;font-size:9px;}

.k8s-desc{font-size:11px;font-family:'JetBrains Mono',monospace;margin:14px 0 12px;}
.k8s-master-wrap&gt;.k8s-desc{color:var(--k8s-master);}
.k8s-cluster-wrap&gt;.k8s-desc{color:var(--k8s-cluster);margin-bottom:16px;}
.k8s-node-wrap&gt;.k8s-desc{color:var(--k8s-node);}
.k8s-pod-wrap&gt;.k8s-desc{color:var(--k8s-pod);font-size:10px;margin-bottom:8px;}

.k8s-divider{text-align:center;color:var(--k8s-muted);font-size:11px;font-family:'JetBrains Mono',monospace;margin:6px 0 20px;display:flex;align-items:center;justify-content:center;gap:8px;}
.k8s-divider::before,.k8s-divider::after{content:'';height:1px;width:60px;background:var(--k8s-border);}

.k8s-containers{display:flex;flex-direction:column;gap:5px;}
.k8s-cbox{background:rgba(255,166,87,.12);border:1px solid var(--k8s-cont);border-radius:6px;padding:5px 8px;font-size:11px;color:var(--k8s-cont);font-family:'JetBrains Mono',monospace;display:flex;align-items:center;gap:6px;}
.k8s-cbox::before{content:'▣';font-size:9px;opacity:.8;}

.k8s-legend{max-width:960px;margin:28px auto 0;display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px;}
.k8s-legend-item{background:var(--k8s-surface);border:1px solid var(--k8s-border);border-radius:10px;padding:12px 14px;display:flex;align-items:flex-start;gap:10px;}
.k8s-legend-dot{width:11px;height:11px;border-radius:3px;flex-shrink:0;margin-top:3px;}
.k8s-legend-text strong{font-size:12px;display:block;margin-bottom:3px;}
.k8s-legend-text p{font-size:11px;color:var(--k8s-muted);line-height:1.5;}

@keyframes k8sFade{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
&lt;/style&gt;
&lt;/div&gt;
&lt;div class=&quot;k8s-root&quot;&gt;
&lt;div class=&quot;k8s-header&quot;&gt;
&lt;h1&gt;Kubernetes Architecture&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;쿠버네티스 &lt;span&gt;계층 구조&lt;/span&gt; 시각화&lt;/h2&gt;
&lt;/div&gt;
&lt;div class=&quot;k8s-master-wrap&quot;&gt;&lt;span class=&quot;k8s-label&quot;&gt;Master&lt;/span&gt;
&lt;div class=&quot;k8s-desc&quot;&gt;⚙ 전체 클러스터를 관리&amp;middot;제어하는 컨트롤 플레인&lt;/div&gt;
&lt;div class=&quot;k8s-divider&quot;&gt;Cluster 1&lt;/div&gt;
&lt;div class=&quot;k8s-cluster-wrap&quot;&gt;&lt;span class=&quot;k8s-label&quot;&gt;Cluster&lt;/span&gt;
&lt;div class=&quot;k8s-desc&quot;&gt;  노드(Node)들의 모음&lt;/div&gt;
&lt;div class=&quot;k8s-nodes-row&quot;&gt;
&lt;div class=&quot;k8s-node-wrap&quot;&gt;&lt;span class=&quot;k8s-label&quot;&gt;Worker Node 1&lt;/span&gt;
&lt;div class=&quot;k8s-desc&quot;&gt;  물리 서버 / 가상머신&lt;/div&gt;
&lt;div class=&quot;k8s-pods-row&quot;&gt;
&lt;div class=&quot;k8s-pod-wrap&quot;&gt;&lt;span class=&quot;k8s-label&quot;&gt;Pod A&lt;/span&gt;
&lt;div class=&quot;k8s-desc&quot;&gt;컨테이너 모음&lt;/div&gt;
&lt;div class=&quot;k8s-containers&quot;&gt;
&lt;div class=&quot;k8s-cbox&quot;&gt;nginx&lt;/div&gt;
&lt;div class=&quot;k8s-cbox&quot;&gt;log-agent&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;k8s-pod-wrap&quot;&gt;&lt;span class=&quot;k8s-label&quot;&gt;Pod B&lt;/span&gt;
&lt;div class=&quot;k8s-desc&quot;&gt;컨테이너 모음&lt;/div&gt;
&lt;div class=&quot;k8s-containers&quot;&gt;
&lt;div class=&quot;k8s-cbox&quot;&gt;api-server&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;k8s-node-wrap&quot;&gt;&lt;span class=&quot;k8s-label&quot;&gt;Worker Node 2&lt;/span&gt;
&lt;div class=&quot;k8s-desc&quot;&gt;  물리 서버 / 가상머신&lt;/div&gt;
&lt;div class=&quot;k8s-pods-row&quot;&gt;
&lt;div class=&quot;k8s-pod-wrap&quot;&gt;&lt;span class=&quot;k8s-label&quot;&gt;Pod C&lt;/span&gt;
&lt;div class=&quot;k8s-desc&quot;&gt;컨테이너 모음&lt;/div&gt;
&lt;div class=&quot;k8s-containers&quot;&gt;
&lt;div class=&quot;k8s-cbox&quot;&gt;db-main&lt;/div&gt;
&lt;div class=&quot;k8s-cbox&quot;&gt;db-backup&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;k8s-divider&quot;&gt;Cluster 2&lt;/div&gt;
&lt;div class=&quot;k8s-cluster-wrap&quot;&gt;&lt;span class=&quot;k8s-label&quot;&gt;Cluster&lt;/span&gt;
&lt;div class=&quot;k8s-desc&quot;&gt;  노드(Node)들의 모음&lt;/div&gt;
&lt;div class=&quot;k8s-nodes-row&quot;&gt;
&lt;div class=&quot;k8s-node-wrap&quot;&gt;&lt;span class=&quot;k8s-label&quot;&gt;Worker Node 3&lt;/span&gt;
&lt;div class=&quot;k8s-desc&quot;&gt;  물리 서버 / 가상머신&lt;/div&gt;
&lt;div class=&quot;k8s-pods-row&quot;&gt;
&lt;div class=&quot;k8s-pod-wrap&quot;&gt;&lt;span class=&quot;k8s-label&quot;&gt;Pod D&lt;/span&gt;
&lt;div class=&quot;k8s-desc&quot;&gt;컨테이너 모음&lt;/div&gt;
&lt;div class=&quot;k8s-containers&quot;&gt;
&lt;div class=&quot;k8s-cbox&quot;&gt;frontend&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;k8s-node-wrap&quot;&gt;&lt;span class=&quot;k8s-label&quot;&gt;Worker Node 4&lt;/span&gt;
&lt;div class=&quot;k8s-desc&quot;&gt;  물리 서버 / 가상머신&lt;/div&gt;
&lt;div class=&quot;k8s-pods-row&quot;&gt;
&lt;div class=&quot;k8s-pod-wrap&quot;&gt;&lt;span class=&quot;k8s-label&quot;&gt;Pod E&lt;/span&gt;
&lt;div class=&quot;k8s-desc&quot;&gt;컨테이너 모음&lt;/div&gt;
&lt;div class=&quot;k8s-containers&quot;&gt;
&lt;div class=&quot;k8s-cbox&quot;&gt;cache&lt;/div&gt;
&lt;div class=&quot;k8s-cbox&quot;&gt;session&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;k8s-legend&quot;&gt;
&lt;div class=&quot;k8s-legend-item&quot;&gt;
&lt;div class=&quot;k8s-legend-dot&quot; style=&quot;background: #ffa657;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;k8s-legend-text&quot;&gt;&lt;b&gt;Container&lt;/b&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 앱이 실행되는 최소 단위&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;k8s-legend-item&quot;&gt;
&lt;div class=&quot;k8s-legend-dot&quot; style=&quot;background: #56d364;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;k8s-legend-text&quot;&gt;&lt;b&gt;Pod (파드)&lt;/b&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨테이너 묶음. IP 공유&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;k8s-legend-item&quot;&gt;
&lt;div class=&quot;k8s-legend-dot&quot; style=&quot;background: #79c0ff;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;k8s-legend-text&quot;&gt;&lt;b&gt;Node (노드)&lt;/b&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파드가 동작하는 서버&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;k8s-legend-item&quot;&gt;
&lt;div class=&quot;k8s-legend-dot&quot; style=&quot;background: #d2a8ff;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;k8s-legend-text&quot;&gt;&lt;b&gt;Cluster (클러스터)&lt;/b&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노드들의 집합&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;k8s-legend-item&quot;&gt;
&lt;div class=&quot;k8s-legend-dot&quot; style=&quot;background: #f78166;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;k8s-legend-text&quot;&gt;&lt;b&gt;Master (마스터)&lt;/b&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체를 관리하는 컨트롤 플레인&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;클로드한테 시각자료 부탁함...&lt;/p&gt;</description>
      <category>공부</category>
      <author>AVONADO</author>
      <guid isPermaLink="true">https://avonado.tistory.com/27</guid>
      <comments>https://avonado.tistory.com/27#entry27comment</comments>
      <pubDate>Wed, 22 Apr 2026 21:29:03 +0900</pubDate>
    </item>
    <item>
      <title>[IT 인프라] 서버와 클라이언트, 서버의 역할 및 종류</title>
      <link>https://avonado.tistory.com/26</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버 : 클라이언트에게 네트워크를 통해 정보나 서비스를 제공하는 장치(H/W)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라이언트 : 네트워크를 통하여 서버에 접속해 정보를 확인하거나 서비스를 이용하는 장치(H/W)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라이언트 컴퓨터 : 서버 컴퓨터에 응용 프로그램을 요청한 뒤 서버에서 보내주면 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버 컴퓨터 : 응용 프로그램을 가지고 있다가 클라이언트 컴퓨터에서 요청하면 보냄&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 대기업의 경우 서비스 요청이 무수히 많아서 하나하나 다 응대하려면 서버가 수만대가 있어야함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹 애플리케이션(웹 서버)의 구성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 프로그램 코드(소스코드)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 웹 서버&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 웹 애플리케이션 서버&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 캐시 서버&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 리버스 프록시 서버&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- DB 서버&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 하나의 서버장치로 다 쓰기도 하는데 그래도 한계가 있으니까 보통은 여러대로 웹서버를 구성함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작은 서버면 서버 한 대로 괜찮음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;웹 서버
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;정적 콘텐츠(소스코드, 텍스트, 이미지 등)을 클라이언트에 전달&lt;/li&gt;
&lt;li&gt;클라이언트가 요청한 콘텐츠를 탐색해서 요청내용을 보냄&lt;/li&gt;
&lt;li&gt;이 때 요청 기록(Log)을 반드시 남김&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;애플리케이션 서버
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;동적 콘텐츠(소스코드, 스트리밍 동영상, 결제 정보 등)을 클라이언트에 전달&lt;/li&gt;
&lt;li&gt;동적 콘텐츠란 클라이언트의 요청에 따라 달라지는 콘텐츠
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;ex) 유튜브, 넷플릭스 -&amp;gt; 사용자마다 시청기록, 시청하던 시점 등이 다름&lt;/li&gt;
&lt;li&gt;ex) 쇼핑몰 -&amp;gt; &quot;결제&quot;라는 사용자의 요청이 있을 때에만 생성 됨&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;클라이언트가 요청한 동적 콘텐츠를 웹 서버를 통해서 클라이언트에게 전달해줌
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;클라이언트 &amp;gt; 웹 서버 &amp;gt; 애플리케이션 서버 &amp;gt; 웹 서버 &amp;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;DB 서버
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;애플리케이션의 정보를 저장해서 운영 관리할 수있는 데이터베이스를 구동하는 서버&lt;/li&gt;
&lt;li&gt;ex) 클라이언트에서 id 7번 글을 클릭, 해당 글은 정적 컨텐츠, 글에 포함된 영상은 동적 컨텐츠임.
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;하지만 웹서버와 애플리케이션 서버는 컨텐츠를 그냥 들고만 있고 각 컨텐츠가 id 7번글의 콘텐츠인지 어디인지 모름&lt;/li&gt;
&lt;li&gt;그래서 DB서버에 요청해서 조회할 데이터에 대한 컨텐츠를 받아와야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;클라이언트 &amp;gt; 웹 서버 &amp;gt; 애플리케이션 서버 &amp;gt; DB서버 &amp;gt; 애플리케이션 서버 &amp;gt; 웹 서버 &amp;gt; 클라이언트&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;리버스 프록시 서버
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;애플리케이션 서버가 여러개일시 어느 애플리케이션 서버에게 요청을 전달할지 정하는 서버&lt;/li&gt;
&lt;li&gt;ex) 요청받은 영상이 1시간 짜리 영상인데 애플리케이션 서버 중 A서버가 바쁨. 그럼 다른 B서버에게로 클라이언트 요청을 돌리는 관리자 역할&lt;/li&gt;
&lt;li&gt;애플리케이션 서버가 여러대면 프록시 서버도 여러대&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;nbsp;포워드 프록시 서버
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;클라이언트의 요청을 웹 서버에 대신 전달하여 사용자의 정보를 숨겨줌&lt;/li&gt;
&lt;li&gt;IP주소같은 정보를 숨겨서 웹서버에 전달&lt;/li&gt;
&lt;li&gt;최근에 받았던 요청을 저장(캐싱)해서 동일한 요청이 올 때 웹 서버 &amp;gt; 애플리케이션 서버 &amp;gt; ... 등 거칠 필요없이 바로 클라이언트에게 응답해줌&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버는 클라이언트의 요청을 수행하기 위해 다양한 서버들끼리 통신한 후 결과를 클라이언트에 전달한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>공부</category>
      <author>AVONADO</author>
      <guid isPermaLink="true">https://avonado.tistory.com/26</guid>
      <comments>https://avonado.tistory.com/26#entry26comment</comments>
      <pubDate>Mon, 20 Apr 2026 21:11:11 +0900</pubDate>
    </item>
    <item>
      <title>[Vue.js] defineModel</title>
      <link>https://avonado.tistory.com/25</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;addUser와 editUser 를 만든다고 생각하면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Form은 하나만 만들면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 때 Formdata를 간편하게 관리할 수 있는 방법!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1774420103085&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//부모
&amp;lt;template&amp;gt;
  &amp;lt;UserForm
    v-model=&quot;userData&quot;
    v-model:validation=&quot;validation&quot;
    v-model:patternList=&quot;patternList&quot;
  /&amp;gt;
  &amp;lt;button @click=&quot;handleAdd&quot;&amp;gt;추가&amp;lt;/button&amp;gt;
&amp;lt;/template&amp;gt;

&amp;lt;script setup&amp;gt;
import { ref } from 'vue'

const userData = ref({ name: '', email: '' })

const validation = ref({
  name: { isError: false, message: '' },
  email: { isError: false, message: '' }
})

const patternList = ref([...])

const handleAdd = async () =&amp;gt; {
  // 유효성 검사
  if (!userData.value.name) {
    validation.value.name = { isError: true, message: '이름을 입력하세요' }
    return
  }
  await addApi(userData.value)
}
&amp;lt;/script&amp;gt;&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_1774420116885&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//자식
&amp;lt;script setup&amp;gt;
const model      = defineModel()                    // userData
const validation = defineModel('validation')        // validation
const patternList = defineModel('patternList')      // patternList
&amp;lt;/script&amp;gt;

&amp;lt;template&amp;gt;
  &amp;lt;input
    v-model=&quot;model.name&quot;
    :class=&quot;{ 'input-error': validation.name.isError }&quot;
  /&amp;gt;
  &amp;lt;span v-if=&quot;validation.name.isError&quot;&amp;gt;
    {{ validation.name.message }}
  &amp;lt;/span&amp;gt;

  &amp;lt;select v-model=&quot;model.pattern&quot;&amp;gt;
    &amp;lt;option
      v-for=&quot;ptn in patternList&quot;
      :key=&quot;ptn.value&quot;
      :value=&quot;ptn.value&quot;
    &amp;gt;
      {{ ptn.name }}
    &amp;lt;/option&amp;gt;
  &amp;lt;/select&amp;gt;
&amp;lt;/template&amp;gt;&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;이렇게 ref만 사용해서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자식인 form에서 데이터를 변경하면 부모에서도 바뀐 값으로 add하고 edit할 수 있다.&lt;/p&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_1774420429404&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const validation = defineModel('validation',{ type: Boolean, default: false });
//Typescript
const validation = defineModel&amp;lt;Boolean&amp;gt;('validation',{ default: false });&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;이런 식으로 타입과 default 값을 정해줄 수도 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 주의해야할점!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1774420491236&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//부모.vue
&amp;lt;script setup&amp;gt;
	const myRef = ref()
&amp;lt;/script&amp;gt;

&amp;lt;template&amp;gt;
  &amp;lt;Child v-model=&quot;myRef&quot;&amp;gt;&amp;lt;/Child&amp;gt;
&amp;lt;/template&amp;gt;

//자식.vue
&amp;lt;script setup&amp;gt;
	const model = defineModel({ default: 1 })
&amp;lt;/script&amp;gt;&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;위 같은 경우에 부모에서 이 prop에 값을 제공하지 않으면 부모와 자식 컴포넌트 간 동기화가 깨질 수 있다!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 부모 값과 초기값 일치시켜놓거나&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 자식에 default 값을 안 넣어놔야 동기화가 유지됨&lt;/p&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Vue.js 공식에서도 ref를 밀어주는 거 보니까&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 ref만 써서 구성하는게 좋아보이기도하고...&lt;/p&gt;</description>
      <category>공부/Vue.js</category>
      <author>AVONADO</author>
      <guid isPermaLink="true">https://avonado.tistory.com/25</guid>
      <comments>https://avonado.tistory.com/25#entry25comment</comments>
      <pubDate>Wed, 25 Mar 2026 15:37:56 +0900</pubDate>
    </item>
    <item>
      <title>[Vue.js] Ref와 Reactive (2)</title>
      <link>https://avonado.tistory.com/24</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발하다가 궁금한 점이 생겼다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;User Manage 페이지에서 Add User와 Edit User 팝업을 만들었고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공통으로 쓰일 FormUser.vue 라는 자식 컴포넌트를 만들어서 두 모달에서 userData를 상속받아 쓰고있었음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1774419146748&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//부모
&amp;lt;script&amp;gt;
	const userData = ref({name: ''});
&amp;lt;/script&amp;gt;

&amp;lt;template&amp;gt;
	&amp;lt;FormUser :data=&quot;userData&quot;/&amp;gt;
&amp;lt;/template&amp;gt;

//자식 (FormUser.vue)
&amp;lt;script&amp;gt;
    const props = defineProps(['data']);
    const formData = ref(props.data);
&amp;lt;/script&amp;gt;

&amp;lt;template&amp;gt;
	&amp;lt;input type=&quot;text&quot; :value=&quot;formData.name&quot;/&amp;gt;
&amp;lt;/template&amp;gt;&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;위의 경우에서는 반응성이 끊겨서 자식에서 fromData.name을 수정해도 부모에서 Add 버튼을 누를 때 빈값이 넘어가는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 코드에서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1774419370572&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//부모
const userData = reactive({ name: '' });&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 ref에서 reactive로 바꿔주기만 해도 자식에서 데이터 입력하는대로 부모에서도 잘바뀌는 거임&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이유가 뭐냐하면!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부모에서 ref로 선언하면 데이터가 원시값처럼 행동하게 돼서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자식에서 ref(props.data) 하는 순간 새로운 RefImpl이 생성되고 원래 ref의 원시값(value)을 그냥 그대로 복사해서 갖고있게 됨(아예 별개의 데이터가 되는 거)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부모에서 reactive로 선언하면 데이터가 Proxy에 감싸져있어서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자식에서 ref(props.data) 하는 순간 새로운 RefImpl이 생성되는건 동일한데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 RefImpl이 결국엔 reactive의 Proxy의 주소를 가리키고있게 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 반응성이 유지되는 거!!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 위는 안 좋은 예고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. defineModel&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. emit으로 업데이트하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. toRef로 반응성 유지하면서 연결&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 세가지 방법을 더 추천했는데 내가 잘모르는 분야라 나중에 이것들도 정리하겠다!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>공부/Vue.js</category>
      <author>AVONADO</author>
      <guid isPermaLink="true">https://avonado.tistory.com/24</guid>
      <comments>https://avonado.tistory.com/24#entry24comment</comments>
      <pubDate>Wed, 25 Mar 2026 15:22:59 +0900</pubDate>
    </item>
    <item>
      <title>[Vue.js] Ref와 Reactive</title>
      <link>https://avonado.tistory.com/22</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 61.3955%; height: 156px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 29.7417%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 36.9249%; text-align: center; height: 17px;&quot;&gt;Ref&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 17px;&quot;&gt;Reactive&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 29.7417%; height: 17px;&quot;&gt;지원 타입&lt;/td&gt;
&lt;td style=&quot;width: 36.9249%; height: 17px;&quot;&gt;모든 타입&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;객체, 배열&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 29.7417%; height: 17px;&quot;&gt;접근&lt;/td&gt;
&lt;td style=&quot;width: 36.9249%; height: 17px;&quot;&gt;.value&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 29.7417%; height: 21px;&quot;&gt;템플릿&lt;/td&gt;
&lt;td style=&quot;width: 36.9249%; height: 21px;&quot;&gt;자동 언래핑(top-level)&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 21px;&quot;&gt;그대로 접근&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 29.7417%; height: 21px;&quot;&gt;재할당&lt;/td&gt;
&lt;td style=&quot;width: 36.9249%; height: 21px;&quot;&gt;가능&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 21px;&quot;&gt;불가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 29.7417%; height: 21px;&quot;&gt;구조 분해&lt;/td&gt;
&lt;td style=&quot;width: 36.9249%; height: 21px;&quot;&gt;반응성 유지&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 21px;&quot;&gt;반응성 끊김&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 29.7417%; height: 21px;&quot;&gt;watch 사용&lt;/td&gt;
&lt;td style=&quot;width: 36.9249%; height: 21px;&quot;&gt;watch(count, ...)&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 21px;&quot;&gt;watch(()=&amp;gt; s.count, ...)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ref&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1773926802377&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import { ref } from 'vue'

const count = ref(0)
const name  = ref('홍길동')
const list  = ref([1, 2, 3])

// 접근 : .value 필수
count.value++
console.log(name.value)

// 템플릿에서: 자동 언래핑
// &amp;lt;p&amp;gt;{{ count }}&amp;lt;/p&amp;gt; ✓&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 숫자, 문자열, 불리언 등 원시값&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 단일 값 하나를 반응형으로 관리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 외부로 공개/노출하는 컴포저블&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- DOM 요소 참조 (template ref)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 나중에 null로 초기화해야 할 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- Composition API 전반에 걸쳐 일관성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- top-level이 아니면 언래핑 안 됨&lt;/p&gt;
&lt;pre id=&quot;code_1773929066238&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script setup&amp;gt;
const data = ref({ count: ref(0) })
&amp;lt;/script&amp;gt;

&amp;lt;template&amp;gt;
  {{ data.count }}        &amp;lt;!-- [object Object] : data.value 안 풀렸음 --&amp;gt;
  {{ data.value.count }}  &amp;lt;!-- 0 --&amp;gt;
&amp;lt;/template&amp;gt;&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;reactive&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1773926830732&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import { reactive } from 'vue'

const state = reactive({
  count: 0,
  name: '홍길동',
  list: [1, 2, 3]
})

// .value 없이 바로 접근
state.count++
console.log(state.name)

// 템플릿도 동일
// &amp;lt;p&amp;gt;{{ state.count }}&amp;lt;/p&amp;gt; ✓&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;- Options API에서 data()&lt;/p&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;- 폼(form) 데이터 관리&lt;/p&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;- .value 타이핑이 귀찮을 때&lt;/p&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;Vue 공식에선 ref를 기본으로 사용하길 권장함&lt;/p&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_1773928528596&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// reactive는 구조 분해하면 반응성 끊김
const state = reactive({ count: 0, name: '' })
const { count, name } = state  // 그냥 숫자, 문자열이 됨

// ref는 구조 분해해도 반응성 유지
function useCounter() {
  const count = ref(0)
  const name = ref('')
  return { count, name }
}

const { count, name } = useCounter()  // 여전히 ref
count.value++  // 반응성 살아있음&lt;/code&gt;&lt;/pre&gt;</description>
      <category>공부/Vue.js</category>
      <author>AVONADO</author>
      <guid isPermaLink="true">https://avonado.tistory.com/22</guid>
      <comments>https://avonado.tistory.com/22#entry22comment</comments>
      <pubDate>Thu, 19 Mar 2026 23:04:36 +0900</pubDate>
    </item>
    <item>
      <title>[컴퓨터구조] 프로세스, 프로세스 제어 블록(PCB, Process Control Block)</title>
      <link>https://avonado.tistory.com/21</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정처기를 따다말았다보니 기초가 모자른거같아서 ㅠ_ㅠ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴구랑 운영체제 공부 좀 해야겄습니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로세스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 실행중인 프로그램, 즉 CPU 메모리에 올라와 있는 프로그램.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포그라운드 프로세스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 사용자가 보는 앞에서 실행되는 프로세스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;백그라운드 프로세스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 사용자가 보지 못하는 뒤편에서 실행되는 프로세스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 사용자와 상호작용할 수 없는 프로세스를 서비스, 리눅스에선 데몬이라고 부름.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CPU에 모든 프로그램이 한번에 올라가 실행될 수 없어서 자기에게 할당된 시간만큼만 올라올 수 잇음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시간이 끝났음을 알리는 인터럽트가 발생하면 다음 차례가 올 때까지 또 무한 대기~&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 운영체제의 역할!! 빠르게 번갈아 수행되는 프로세스의 실행 순서를 관리하고, 프로세스에 CPU를 비롯한 자원을 배분함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 위해 운영체제는 프로세스 제어 블록(이하 PCB)를 이용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로세스 제어 블록(PCB, Process Control Block)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 프로세스와 관련된 정보를 저장하는 자료 구조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 메모리의 커널 영역에 생성 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 옷이나 가전제품에 달려 있는 태그에 해당 제품을 식별하기 위한 정보가 있는 것처럼 프로세스 제어 블록에는 해당 프로세스를 식별하기 위해 꼭 필요한 정보들이 저장 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 프로세스 생성 시에 만들어지고 실행이 끝나면 폐기 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PCB에 담긴 정보들&lt;/p&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;- 프로세스 ID&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;프로세스 ID, 이하 PID는 특정 프로세스를 식별하기 위해 부여하는 고유한 번호&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;같은 일을 수행하는 프로그램이라 할지라도 두 번 실행하면 PID가 다름&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 레지스터 값&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 프로세스가 실행하며 사용했던 프로그램 카운터를 비롯한 레지스터 값들&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 프로세스는 자신의 실행상태가 돌아오면 이전까지 사용했던 레지스터의 중간값들을 모두 복원함(이전까지 진행했던 작업들을 마저 진행해야하니까)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 프로세스 상태&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;현재 프로세스의 상태&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;입출력장치를 사용하기 위해 기다리고 있는지, CPU를 사용하기 위해 기다리고 있는 상태인지, CPU를 이용하고 있는 상태인지 등등&lt;/p&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;- CPU 스케줄링 정보&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보&lt;/p&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;프로세스마다 메모리에 저장된 위치가 다르므로 PCB에는 프로세스가 어느 주소에 저장되어 있는지에 대한 정보가 있어야함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 사용한 파일과 입출력장치 목록&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;어떤 입출력장치가 이 프로세스에 할당되었는지, 어떤 파일들을 열었는지에 대한 정보&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>공부</category>
      <author>AVONADO</author>
      <guid isPermaLink="true">https://avonado.tistory.com/21</guid>
      <comments>https://avonado.tistory.com/21#entry21comment</comments>
      <pubDate>Wed, 18 Mar 2026 19:47:49 +0900</pubDate>
    </item>
    <item>
      <title>Node.js 와 Nest.js</title>
      <link>https://avonado.tistory.com/20</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Node.js&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;node는 javascript 기반의&lt;b&gt; 런타임 환경&lt;/b&gt;(런타임: 특정 언어로 만든 프로그램들을 실행할 수 있는 환경)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;non-blocking I/O&lt;/u&gt;와 &lt;u&gt;단일 스레드 이벤트 루프&lt;/u&gt;를 통해 높은 처리 성능을 가진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Node.js가 자바스크립트를 컴퓨터에서 쉽게 실행시켜주므로 자바스크립트 언어로 서버사이드 어플리케이션 개발을 할 때 활용 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;단일 스레드 이벤트 루프&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단일 스레드는 한 번에 하나의 작업을 실행(Sequential)하며, 멀티 스레드는 동시에 여러 작업(Concurrency)을 처리한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;node.js는 단일 스레드 환경에서 실행되지만 이벤트 루프와 비동기 콜백을 통해 한 번에 여러 작업을 처리한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좀더 자세히 살펴보자면, 자바스크립트는 한 번에 하나의 콜 스택(call stack)과 힙(heap)을 가지는데, 이 스택에 작업이 남아 있을 경우 스레드는 앞서 살펴본 'blocking'상태가 될 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 여러 작업의 빠른 처리를 위해 공간을 만들어 일단 받은 요청 쌓아두고, 그와 동시에 요청들을 처리하면 어떨까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;콜백 큐로 요청을 쌓아둘 공간을 두고, 콜 스택에서 요청을 처리하는 구조가 바로 비동기 Asynchronous 콜백이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이벤트 루프는 위의 콜 스택과 콜백 큐의 상태를 감시하여, 콜 스택이 비었을 때 큐의 첫 번쨰 콜백을 스택에 쌓아 실행할 수 있도록 해주며 효율적인 일 처리를 가능하게 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;non-blocking I/O&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로세스가 blocked 됐다는 것은 작업이 중단되었다는 뜻.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로세스가 읽기 작업을 요청하면 운영체제가 읽기를 시작하며 프로세스를 block하게 되는데, 이때 요청한 작업이 종료될 때까지 해당 작업을 제외한 작업은 실행할 수 없게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;block I/O는 요청이 적은 서비스에서는 최적의 성능을 내고 안정적이지만, 요청마다 스레드를 생성하므로 요처이 많은 상황에서는 성능이 떨어진다는 단점이 있음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;non-blocking은 프로세스가 블로킹 상태가 아니라는 것을 말하는데, 이는 한 작업을 진행 중에도 다른 작업을 동시에 진행할 수 있다는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;non-blocking I/O는 요청을 단일 스레드에서 처리하기 때문에 context-switching이 일어나지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 CPU를 다른 프로세스에서 사용함으로서 I/O 대기시간을 줄이거나 활용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 i/o 환경에서 성능이 매우 좋다는 장점이 있다.&lt;/p&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;Nest.js&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Node.js에 기반을 둔 서버사이드 웹 API 프레임워크&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타입스크립트를 지운하며 자바스크립트의 최신 스펙을 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근 몇 년 동안 Node.js와 자바스크립트는 프론트엔드와 백엔드의 공용어가 되었다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단일 언어로 프론트와 백엔드를 모두 개발할 수 있는 환경이 된 것인데, 이는 보다 효율적으로 개발에서의 의사소통이나 생산성을 관리할 수 있게 되었다는 말과 동일하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 Nest.JS는 서버 개발 시의 아키텍처를 누구든 비슷하게 설계하도록 아키텍처 문제를 해결하는데 중점을 두어 개발되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좋은 구조로 어플리케이션을 작성해 프로젝트의 복잡성을 잘 관리하는 것을 목표로 하는 철학을 가지고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 express.js와 많이 비교하는데, Nest.js는 익스프레스를 품고 있어 익스프레스 기반의 미들웨어를 거의 대부분 사용할 수 있어 성능과 확장성이 좋고 유연하다는 장점이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고 : &lt;a href=&quot;https://diane073.tistory.com/260&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://diane073.tistory.com/260&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>공부</category>
      <author>AVONADO</author>
      <guid isPermaLink="true">https://avonado.tistory.com/20</guid>
      <comments>https://avonado.tistory.com/20#entry20comment</comments>
      <pubDate>Tue, 17 Mar 2026 20:37:09 +0900</pubDate>
    </item>
    <item>
      <title>[PostgreSQL] 아키텍처 및 쿼리 워크플로우</title>
      <link>https://avonado.tistory.com/19</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 프로세스 아키텍처 (Process Architecture)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PostgreSQL은 사용자의 요청을 처리하기 위해 여러 개의 프로세스를 사용 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;1-1. Postmaster (Daemon Process)&lt;/p&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;- 클라이언트의 연결 요청을 감시하고, 요청이 들어오면 새로운 'Backend Process'를 생성(fork)하여 연결을 넘겨줌&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;1-2. Backend Process&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 클라이언트와 1:1로 매핑되어 실제 SQL 쿼리를 실행하는 프로세스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 클라이언트가 접속을 종료할 때까지 유지 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;1-3. Nackground Processes&lt;/p&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;- Writer(Checkpointer/Background Writer): 메모리에 있는 데이터를 주기적으로 디스크에 기록&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- WAL Writer: 틀내잭션 로그(Write Ahead Log)를 디스크로 안전하게 옮김&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- Autovacuum Launcher: 불필요해진 데이터(Garbage)를 정리하여 성능 저하를 막음&lt;/p&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;2. 메모리 아키텍처 (Memory Archiitecture)&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;2-1. Shared Memory : 모든 프로세스가 공통으로 사용하는 공간&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- Shared Buffer : 디스크에서 읽어온 데이터 페이지를 보관하는 캐시 영역&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- WAL Buffer : 디스크에 기록하기 전 트랜잭션 로그를 임시 저장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;2-2. Local Memory : 각 Nackend Process가 자신만의 작업을 위해 할당받는 공간&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- Work Mem : 정렬(sort)이나 조인(join)작업을 수행할 때 사용 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- Maintenance Work Mem : 인덱스 생성이나 진공(Vacuum) 작업 등 관리 업무에 사용 됨&lt;/p&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;3. 저장소 구조 (Storage Architecture)&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;3-1. Page/Block : PostgreSQL 저장소의 기본 단위(보통8KB)이다. 실제 행(Row) 데이터가 이 페이지 안에 저장 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;3-2. MVCC (Multi-Version Concurrency Control) : 동시성을 제어하는 핵심 기술. 데이터를 수정할 때 기존 데이터를 덮어쓰지 않고 새로운 버전을 생성함으로써, 읽기 작업과 쓰기 작업이 서로 방해받지 않게 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿼리 워크플로우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;연결(Connection) : 클라이언트가 접속을 요청하면 부모 프로세스인 Postmaster가 이를 받아 자식 프로세스인 Backend Process를 생성(fork)함. 이 때부터 해당 클라이언트 전용 통로가 생기는 것임&amp;nbsp;&lt;/li&gt;
&lt;li&gt;구문 분석(Parser) : 사용자가 보낸 SQL 문장에 오타가 없는지, 문법에 맞는지 검사하여 분석 트리(Parse Tree)를 만듦&lt;/li&gt;
&lt;li&gt;재작성 (Rewrite) : 뷰(View)나 룰(Rule) 시스템을 적용하여 쿼리를 더 단순하거나 구체적인 형태로 변형&lt;/li&gt;
&lt;li&gt;최적화 및 계획(Optimizer/Planner) : 핵심 단계. 통계 정보를 바탕으로 인덱스를 쓸지, 테이블 전체를 읽을지 결정하여 가장 비용이 적은 실행 계획 세움&lt;/li&gt;
&lt;li&gt;실행 (Executor) : 계획에 따라 데이터를 가져옴
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Shared Buffers(공유 메모리)에 찾는 데이터가 있는지 확인&lt;/li&gt;
&lt;li&gt;없으면 디스크에서 읽어와 메모리에 올림&lt;/li&gt;
&lt;li&gt;데이터를 수정한다면 WAL Buffers에 로그를 먼저 남기고 데이터 변경&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잘 안 와닿아서 개인적으로 더 알아본 단계 설명&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;재작성 단계&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;active_users 라는 이름의 view가 있고 사용자가 쿼리문으로&amp;nbsp; &quot;select * from active_users&quot; 를 날린 경우 내부적으로는 &quot;select * from users where status == 'active'&quot; 를 실행해서 결과를 사용자에게 보여줌&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;최적화 단계&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PostgreSQL의 옵티마이저는 비용 기반 최적화(CBO, Cost-Based Optimization) 방식 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비용은 쿼리를 실행할 때 예상되는 CPU 사용량과 디스크 I/O 등을 숫자로 계산한 값!&lt;/p&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;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;경로 생성(Path Generation): 데이털르 가져올 수 있는 모든 가능한 경로 탐색
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;ex) 인덱스를 탈지, 그냥 처음부터 끝까지 풀스캔할지, 어떤 알고리즘을 사용할지 등&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;비용 계산(Cost Estimation): 각 경로에 대해 수치를 매김. DB가 미리 수집해둔 통계정보를 참조
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;ex) 이 테이블은 데이터가 100만 건이니까 인덱스가 효율적이다, 이 조건은 결과가 1건만 나오겠네 등&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;최적의 계획 선택(Plan Selection): 계산된 비용 중 가장 낮은(가장 빠른) 경로를 최종 실행 계획(Plan Tree)으로 확정&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>공부</category>
      <author>AVONADO</author>
      <guid isPermaLink="true">https://avonado.tistory.com/19</guid>
      <comments>https://avonado.tistory.com/19#entry19comment</comments>
      <pubDate>Tue, 10 Mar 2026 16:09:16 +0900</pubDate>
    </item>
    <item>
      <title>[ADsP] 3과목 1.통계 분석 - 분포의 특성</title>
      <link>https://avonado.tistory.com/18</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&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;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;최빈값(Mode)
&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;li&gt;중앙값(Median)
&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;n개의 값이 있을 때 (n+1)/2번째로 큰 값을 찾는 것&lt;/li&gt;
&lt;li&gt;중앙값 크기는 큰 순서대로 정렬해서 계산하든 작은 순서대로 정렬해서 계산하든 동일함(당연함)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;산술평균(Mean)
&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;li&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>공부/ADsP</category>
      <author>AVONADO</author>
      <guid isPermaLink="true">https://avonado.tistory.com/18</guid>
      <comments>https://avonado.tistory.com/18#entry18comment</comments>
      <pubDate>Thu, 22 Jan 2026 21:05:35 +0900</pubDate>
    </item>
    <item>
      <title>[ADsP] 1.통계학의 정의</title>
      <link>https://avonado.tistory.com/17</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;티스토리 오랜만인데..핑계가 여러개 있다죠&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1.연말&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2.연초&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.최근 AIBT 자격증 셤 봄&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4.회사일 바쁨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ㅎㅎ;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1) 통계학의 정의&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 통계학이란 불확실한 상황에서 현명한 의사결정을 하기 위한 이론과 방법의 체계이며 자료의 수집, 분류, 분석과 해석의 체계를 갖는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 총계학은 매일 발표되는 일기예보, 물가, 실업률, GNP 등과 같은 경제 통계, 야구 시합의 승률 예측 조사, 대학 진학 시 수능성적의 분포와 합격선, 복권의 당첨 확률 계산, 새로운 치료계의 임상실험 결과 등 다양한 분야에서 활용되고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2) 모집단과 표본&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 모집단 : 연구자의 관심이 되는 모든 개체의 집합, 크기가 천차만별&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 예) 우리나라 남성 키가 연구 대상이라면 수천만 명, 우리 가족이라면 매우 적은 수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 표본집단 : 모집단에서 조사 대상으로 채택된 일부&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 예) 우리나라 남성 키를 한 번에 조사하기 어려우므로, 나이대별 표본을 추출하여 연구&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 모수 : 모집단의 특성을 수치로 나타낸 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 통계량 : 표본집단의 특성을 수치로 나타낸 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(3) 통계학의 종류&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기술통계학 : 집단의 특성을 파악하는 통계학
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;자료수집, 자료정리, 자료해석의 과정을 통하여 모집단 또는 표본집단의 특성 파악&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;추리통계학 : 표본집단의 특성으로 모집단의 특성을 규명하는 통계학
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;모집단에서 뽑은 표본을 분석하여 이를 기초로 모집단의 특성을 규명하는 통계학&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;추리통계학은 모집단에 대한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;가정으로 추론하는 모수통계학&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;과 모집단에 대한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;가정이 선행되지 않는 비모수통계학&lt;/b&gt;으로 구분
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;모수통계학 : 연속적 자료형 사용 됨&lt;/li&gt;
&lt;li&gt;비모수통계학 : 질적 자료, 수량적 자료, 빈도수 등 비연속적 자료형 사용 됨&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;모수통계학 : 모집단의 분포모양이 정규분포라는 가정과 활용될 자료가 연속형이어야 한다는 가정을 지님&lt;/li&gt;
&lt;li&gt;비모수통계학 : 모집단의 정규성 가정이 필요하지 않으며 심지어 표본의 크기가 충분하지 않아도 활용 가능하며 질적 자료 및 비연속적 자료(빈도수 등)를 활용하여 사용함
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;편리성 : 모수통계학 &amp;lt; &lt;b&gt;비모수통계학&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;신뢰성 : &lt;b&gt;모수통계학&lt;/b&gt; &amp;gt; 비모수통계학&lt;/li&gt;
&lt;li&gt;활용성 : &lt;b&gt;모수통계학&lt;/b&gt; &amp;gt; 비모수통계학&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(4) 자료의 종류&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 통계학에서의 자료는 변수(Variable, var)로 표현되며, 변수란 '측정 결과와 조사 대상에 따라 다른 값으로 나타날 수 있는 특성 혹은 속성'을 뜻함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 변수는 비정형 데이터를 다루는 질적 변수(Qualitative var)와 정형데이터를 다룰 수 있는 양적 변수(Quantitative var)로 구분이 가능하며, 양적변수는 이산적 변수(Discrete var)와 연속적 변수(Continuius var)로 구분 가능&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;질적 변수(Qualitative var) : 정교, 성별, 직업 등 속성을 수치로 나타내기 어려운 변수&lt;/li&gt;
&lt;li&gt;양적 변수(Quantitative var) : 점수, 통조림 용량, 기업 매출 등 수치로 나타낼 수 있는 변수&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: none;&quot;&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;이산적 변수(Discrete var) : 세대 수, 학생 수, 휴대폰 판매 수 등과 같이 정수값인 변수&lt;/li&gt;
&lt;li&gt;연속적 변수(Continuius var) : 길이, 키, 몸무게, 온도 등 연속적인 실수값인 변수&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 표본조사나 실험을 실시하는 과정에서 추출된 원소들이나 실험 단위로부터 주어진 목적에 적합하도록 관측해 자료를 얻는 것을 측정이라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 측정 방법은 크게 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;명목척도(Nominal scale)&lt;span&gt; &lt;/span&gt;&lt;/span&gt;, 서열척도(Ordinal scale) , 등간척도(혹은 구간척도, Interval scale ), 비율척도(Ratio scale)로 구분&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;명목척도(Nominal scale) : 가장 낮은 수준의 변수, 단순한 구분 기호
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;예) 성별, 종교, 출생지, 자녀 유무, 운동선수의 번호 등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;서열척도(Ordinal scale) : 측정 대상 간 순서를 매기기 위한 변수
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;예) 석차, 선호도 등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;등간척도(Interval scale) : 측정 대상의 순서, 순서 사이의 간격을 알 수 있는 변수
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;예) 온도, 지능지수, 대학 학년 등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;비율척도(Ratio scale) : 등간척도의 특성과 측정자료간의 비유 계산이 결합된 개념&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;예) 연봉, 월급, 거리 등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>공부/ADsP</category>
      <author>AVONADO</author>
      <guid isPermaLink="true">https://avonado.tistory.com/17</guid>
      <comments>https://avonado.tistory.com/17#entry17comment</comments>
      <pubDate>Tue, 13 Jan 2026 22:05:58 +0900</pubDate>
    </item>
  </channel>
</rss>