<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>대싕이의 내맘대로 블로그</title>
    <link>https://yu5501.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Mon, 17 Aug 2026 01:49:30 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>대싕:)</managingEditor>
    <item>
      <title>AI에 대해 알아보자</title>
      <link>https://yu5501.tistory.com/94</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;AI 공모전에 나가기 위한 학습과정입니다. GPT의 도움을 받아 작성하였습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  AI 서비스 vs AI Agent&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;192&quot; data-start=&quot;180&quot; data-ke-size=&quot;size23&quot;&gt;✅ AI 서비스&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;438&quot; data-start=&quot;193&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;236&quot; data-start=&quot;193&quot;&gt;&lt;b&gt;정의&lt;/b&gt;: 특정 기능이나 목적에 맞춰 제공되는 인공지능 기반 기능.&lt;/li&gt;
&lt;li data-end=&quot;386&quot; data-start=&quot;237&quot;&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;386&quot; data-start=&quot;251&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;283&quot; data-start=&quot;251&quot;&gt;보통 API, 웹 서비스, SaaS 형태로 제공됨.&lt;/li&gt;
&lt;li data-end=&quot;320&quot; data-start=&quot;286&quot;&gt;사용자가 요청하면 정해진 기능을 수행하고 결과를 반환.&lt;/li&gt;
&lt;li data-end=&quot;386&quot; data-start=&quot;323&quot;&gt;예: 번역 서비스(Papago, Google Translate), 이미지 인식 API, 음성 인식 서비스.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;438&quot; data-start=&quot;387&quot;&gt;&lt;b&gt;포인트&lt;/b&gt;: 하나의 &quot;도구&quot;처럼 동작 &amp;rarr; 주어진 입력에 따라 정해진 작업을 수행.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;319&quot; data-start=&quot;293&quot; data-ke-size=&quot;size23&quot;&gt;  벡터 기반 검색 (AI 서비스)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;551&quot; data-start=&quot;320&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;397&quot; data-start=&quot;320&quot;&gt;입력한 텍스트를 **벡터(의미 기반 표현)**로 변환하고, 파일 안의 문장들도 벡터로 바꾼 뒤 &lt;b&gt;가까운 것들을 찾아주는 방식&lt;/b&gt;.&lt;/li&gt;
&lt;li data-end=&quot;449&quot; data-start=&quot;398&quot;&gt;예: &amp;ldquo;회의록&amp;rdquo;을 검색했는데, &amp;ldquo;미팅 노트&amp;rdquo;, &amp;ldquo;업무 기록&amp;rdquo; 같은 단어까지도 찾아줌.&lt;/li&gt;
&lt;li data-end=&quot;503&quot; data-start=&quot;450&quot;&gt;이건 전형적인 **AI 검색 서비스(semantic search)**라고 볼 수 있어요.&lt;/li&gt;
&lt;li data-end=&quot;551&quot; data-start=&quot;504&quot;&gt;여기서 AI는 &lt;b&gt;&amp;ldquo;텍스트 &amp;rarr; 벡터 임베딩 &amp;rarr; 유사도 검색&amp;rdquo;&lt;/b&gt; 부분에 해당.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;459&quot; data-start=&quot;445&quot; data-ke-size=&quot;size23&quot;&gt;✅ AI Agent&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;755&quot; data-start=&quot;460&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;518&quot; data-start=&quot;460&quot;&gt;&lt;b&gt;정의&lt;/b&gt;: 스스로 상황을 판단하고 여러 도구(서비스 포함)를 조합해 목표를 달성하는 인공지능.&lt;/li&gt;
&lt;li data-end=&quot;695&quot; data-start=&quot;519&quot;&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;695&quot; data-start=&quot;533&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;570&quot; data-start=&quot;533&quot;&gt;단순히 하나의 서비스가 아니라 &lt;b&gt;목표 지향적&lt;/b&gt;으로 동작.&lt;/li&gt;
&lt;li data-end=&quot;606&quot; data-start=&quot;573&quot;&gt;외부 시스템이나 서비스(API)를 활용해 문제 해결.&lt;/li&gt;
&lt;li data-end=&quot;695&quot; data-start=&quot;609&quot;&gt;예: 고객 문의를 처리하는 챗봇 Agent &amp;rarr; 질문을 이해하고, 사내 DB 검색, 예약 시스템 호출, 필요하면 번역 API까지 연결해서 답변 제공.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;755&quot; data-start=&quot;696&quot;&gt;&lt;b&gt;포인트&lt;/b&gt;: 단순 기능 제공이 아니라 &lt;b&gt;스스로 의사결정 + 서비스 활용 + 실행&lt;/b&gt;까지 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;583&quot; data-start=&quot;558&quot; data-ke-size=&quot;size23&quot;&gt;  요약자료 생성 (AI Agent)&lt;/h3&gt;
&lt;p data-end=&quot;646&quot; data-start=&quot;584&quot; data-ke-size=&quot;size16&quot;&gt;Agent는 단순히 &amp;ldquo;검색만&amp;rdquo; 하는 게 아니라, &lt;b&gt;목표를 달성하기 위해 여러 도구를 활용&lt;/b&gt;할 수 있어요.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;808&quot; data-start=&quot;647&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;808&quot; data-start=&quot;647&quot;&gt;예시 시나리오:
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;808&quot; data-start=&quot;662&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;693&quot; data-start=&quot;662&quot;&gt;내가 &amp;ldquo;작년 5월 회의록 요약해줘&amp;rdquo;라고 요청 &amp;rarr;&lt;/li&gt;
&lt;li data-end=&quot;730&quot; data-start=&quot;696&quot;&gt;Agent는 먼저 벡터 검색으로 관련 문서를 찾고 &amp;rarr;&lt;/li&gt;
&lt;li data-end=&quot;756&quot; data-start=&quot;733&quot;&gt;찾은 문서를 요약 모델에 넣고 &amp;rarr;&lt;/li&gt;
&lt;li data-end=&quot;808&quot; data-start=&quot;759&quot;&gt;결과를 &amp;ldquo;작년 5월 회의 주요 안건은 A, B, C였습니다&amp;rdquo;라고 정리해서 제공.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  AI는 어떻게 학습할까?&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-start=&quot;445&quot; data-end=&quot;459&quot; data-ke-size=&quot;size23&quot;&gt;✅ Machine Learning, Deep Learning&lt;/h3&gt;
&lt;p data-end=&quot;267&quot; data-start=&quot;186&quot; data-ke-size=&quot;size16&quot;&gt;AI, 특히 **머신러닝(Machine Learning)**이나 &lt;b&gt;딥러닝(Deep Learning)&lt;/b&gt; 모델은 크게 이런 과정으로 학습해요:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;563&quot; data-start=&quot;269&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;340&quot; data-start=&quot;269&quot;&gt;&lt;b&gt;데이터 수집&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;340&quot; data-start=&quot;288&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;340&quot; data-start=&quot;288&quot;&gt;예: 고양이 vs 강아지 구분 AI를 만들려면, 수천 장의 고양이&amp;middot;강아지 사진이 필요.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;415&quot; data-start=&quot;342&quot;&gt;&lt;b&gt;데이터 전처리&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;415&quot; data-start=&quot;362&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;415&quot; data-start=&quot;362&quot;&gt;이미지 크기 맞추기, 텍스트 정리하기, 라벨 붙이기(&amp;ldquo;이건 고양이&amp;rdquo;, &amp;ldquo;이건 강아지&amp;rdquo;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;507&quot; data-start=&quot;417&quot;&gt;&lt;b&gt;모델 학습&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;507&quot; data-start=&quot;435&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;476&quot; data-start=&quot;435&quot;&gt;데이터를 입력 &amp;rarr; 모델이 예측 &amp;rarr; 정답과 비교해서 틀린 만큼 수정.&lt;/li&gt;
&lt;li data-end=&quot;507&quot; data-start=&quot;480&quot;&gt;이 과정을 반복하며 점점 &amp;ldquo;패턴&amp;rdquo;을 익힘.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;563&quot; data-start=&quot;509&quot;&gt;&lt;b&gt;검증 및 테스트&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;563&quot; data-start=&quot;530&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;563&quot; data-start=&quot;530&quot;&gt;학습에 쓰지 않은 데이터를 넣어보고 잘 맞는지 확인.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  데이터 모델 (LLM, Embedding, Vector)&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-start=&quot;445&quot; data-end=&quot;459&quot; data-ke-size=&quot;size23&quot;&gt;✅ LLM (Large Language Model, 대규모 언어 모델)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;233&quot; data-end=&quot;348&quot;&gt;
&lt;li data-start=&quot;233&quot; data-end=&quot;280&quot;&gt;방대한 텍스트 데이터를 학습해서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;언어를 이해하고 생성&lt;/b&gt;할 수 있는 모델.&lt;/li&gt;
&lt;li data-start=&quot;281&quot; data-end=&quot;309&quot;&gt;예: GPT, Claude, LLaMA 등.&lt;/li&gt;
&lt;li data-start=&quot;310&quot; data-end=&quot;348&quot;&gt;역할: 질문에 답변, 문서 요약, 코드 작성, 대화 수행 등.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot; data-end=&quot;459&quot; data-start=&quot;445&quot;&gt;✅ Embedding (임베딩) / Vector (벡터)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;395&quot; data-end=&quot;524&quot;&gt;
&lt;li data-start=&quot;395&quot; data-end=&quot;435&quot;&gt;텍스트, 이미지 같은 데이터를 숫자 배열(벡터)로 변환하는 방식.&lt;/li&gt;
&lt;li data-start=&quot;436&quot; data-end=&quot;469&quot;&gt;의미가 비슷한 데이터는 벡터 공간에서도 가깝게 위치.&lt;/li&gt;
&lt;li data-start=&quot;470&quot; data-end=&quot;524&quot;&gt;활용:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;유사도 검색, 추천 시스템, 의미 기반 검색(Semantic Search)&lt;/b&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-end=&quot;201&quot; data-start=&quot;173&quot; data-ke-size=&quot;size26&quot;&gt;  LLM은 학습 단계에서 어디에 해당할까?&lt;/h2&gt;
&lt;p data-end=&quot;339&quot; data-start=&quot;298&quot; data-ke-size=&quot;size16&quot;&gt;  LLM은 위 ✅&lt;span&gt;&amp;nbsp;&lt;/span&gt;Machine Learning, Deep Learning 중 3&lt;b&gt;단계: 모델 학습&lt;/b&gt;에서 만들어진 결과예요.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;492&quot; data-start=&quot;340&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;425&quot; data-start=&quot;340&quot;&gt;방대한 텍스트(웹, 책, 코드 등)를 학습해서, 언어 패턴과 의미 관계를 파악한 **사전학습된 모델(Pretrained Model)**이 LLM.&lt;/li&gt;
&lt;li data-end=&quot;492&quot; data-start=&quot;426&quot;&gt;이후 특정 목적에 맞게 추가로 **파인튜닝(Fine-tuning)**이나 &lt;b&gt;프롬프트 튜닝&lt;/b&gt;을 거치기도 해요.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;516&quot; data-start=&quot;499&quot; data-ke-size=&quot;size23&quot;&gt;  LLM과 벡터의 관계&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;750&quot; data-start=&quot;517&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;565&quot; data-start=&quot;517&quot;&gt;LLM이 내부적으로 문장을 이해하고 다루는 방식은 **벡터(숫자 배열)**예요.&lt;/li&gt;
&lt;li data-end=&quot;699&quot; data-start=&quot;566&quot;&gt;&lt;b&gt;단어/문장 &amp;rarr; 벡터 변환(임베딩, Embedding)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;699&quot; data-start=&quot;606&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;664&quot; data-start=&quot;606&quot;&gt;예: &quot;사과&quot;라는 단어를 [0.12, -0.45, 0.87, ...] 같은 수치 벡터로 표현.&lt;/li&gt;
&lt;li data-end=&quot;699&quot; data-start=&quot;667&quot;&gt;의미가 비슷한 단어들은 벡터 공간에서 가깝게 위치.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;750&quot; data-start=&quot;700&quot;&gt;LLM은 이렇게 변환된 벡터들을 가지고 패턴을 학습하고, 새로운 문장을 만들어내요.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  AI는 어떻게 처리할까?&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-start=&quot;445&quot; data-end=&quot;459&quot; data-ke-size=&quot;size23&quot;&gt;✅&lt;span&gt;&amp;nbsp;&lt;/span&gt;Token (토큰)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1848&quot; data-start=&quot;1760&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1805&quot; data-start=&quot;1760&quot;&gt;LLM이 텍스트를 처리할 때 쪼개는 단위. (단어, 어절, 글자 단위 등)&lt;/li&gt;
&lt;li data-end=&quot;1848&quot; data-start=&quot;1806&quot;&gt;입력/출력 길이는 &lt;b&gt;토큰 수&lt;/b&gt;로 계산 &amp;rarr; 비용과 성능에 큰 영향.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot; data-end=&quot;459&quot; data-start=&quot;445&quot;&gt;✅&lt;span&gt;&amp;nbsp;&lt;/span&gt;Hallucination (환각)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;1622&quot; data-end=&quot;1731&quot;&gt;
&lt;li data-start=&quot;1622&quot; data-end=&quot;1660&quot;&gt;LLM이 실제로 존재하지 않는 정보를 &amp;ldquo;있다고&amp;rdquo; 말하는 현상.&lt;/li&gt;
&lt;li data-start=&quot;1661&quot; data-end=&quot;1707&quot;&gt;예: &amp;ldquo;서울에 에펠탑이 있나요?&amp;rdquo; &amp;rarr; &amp;ldquo;네, 있습니다.&amp;rdquo; 같은 잘못된 답변.&lt;/li&gt;
&lt;li data-start=&quot;1708&quot; data-end=&quot;1731&quot;&gt;그래서 RAG나 검증 과정이 필요.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;LLM 성능 향상&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot; data-end=&quot;459&quot; data-start=&quot;445&quot;&gt;✅&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;RAG (Retrieval-Augmented Generation)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;578&quot; data-end=&quot;764&quot;&gt;
&lt;li data-start=&quot;578&quot; data-end=&quot;669&quot;&gt;LLM이 모르는 정보를 **외부 데이터에서 검색(Retrieval)**해서 함께 넣어주고, 그걸 바탕으로 답변을 **생성(Generation)**하는 방식.&lt;/li&gt;
&lt;li data-start=&quot;670&quot; data-end=&quot;732&quot;&gt;예: &amp;ldquo;우리 회사 매출 현황 알려줘&amp;rdquo; &amp;rarr; DB에서 검색한 매출 데이터 + 질문을 함께 넣어서 답변 생성.&lt;/li&gt;
&lt;li data-start=&quot;733&quot; data-end=&quot;764&quot;&gt;활용: 기업 내부 데이터 QA, 검색 기반 챗봇.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot; data-end=&quot;459&quot; data-start=&quot;445&quot;&gt;✅&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Fine-tuning (파인튜닝)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;800&quot; data-end=&quot;882&quot;&gt;
&lt;li data-start=&quot;800&quot; data-end=&quot;841&quot;&gt;이미 학습된 LLM을 특정 목적에 맞게&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;추가 학습&lt;/b&gt;하는 방법.&lt;/li&gt;
&lt;li data-start=&quot;842&quot; data-end=&quot;882&quot;&gt;예: 기본 GPT 모델 &amp;rarr; &amp;ldquo;법률 상담 특화 GPT&amp;rdquo;로 파인튜닝.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot; data-end=&quot;459&quot; data-start=&quot;445&quot;&gt;✅&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Prompt (프롬프트) / Prompt Engineering&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;934&quot; data-end=&quot;1073&quot;&gt;
&lt;li data-start=&quot;934&quot; data-end=&quot;952&quot;&gt;LLM에 주는 입력 문장.&lt;/li&gt;
&lt;li data-start=&quot;953&quot; data-end=&quot;1009&quot;&gt;같은 질문이라도 표현 방법에 따라 결과가 크게 달라지므로,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;프롬프트 설계 기술&lt;/b&gt;이 중요.&lt;/li&gt;
&lt;li data-start=&quot;1010&quot; data-end=&quot;1073&quot;&gt;예: &amp;ldquo;요약해줘&amp;rdquo; 대신 &amp;ldquo;회의록을 3줄로 요약하고, To-do 항목을 bullet point로 정리해줘.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-start=&quot;445&quot; data-end=&quot;459&quot; data-ke-size=&quot;size23&quot;&gt;✅&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Zero-shot / Few-shot Learning&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-end=&quot;129&quot; data-start=&quot;105&quot; data-ke-size=&quot;size20&quot;&gt;  Zero-shot Learning&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;360&quot; data-start=&quot;130&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;170&quot; data-start=&quot;130&quot;&gt;&lt;b&gt;정의&lt;/b&gt;: &lt;b&gt;예시 없이&lt;/b&gt; 모델에게 바로 작업을 시키는 것.&lt;/li&gt;
&lt;li data-end=&quot;213&quot; data-start=&quot;171&quot;&gt;모델이 이미 학습 단계에서 얻은 지식을 바탕으로 &amp;ldquo;추론&amp;rdquo;해서 답변함.&lt;/li&gt;
&lt;li data-end=&quot;277&quot; data-start=&quot;214&quot;&gt;&lt;b&gt;사용 상황&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;277&quot; data-start=&quot;230&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;249&quot; data-start=&quot;230&quot;&gt;빠르게 간단한 질문을 할 때&lt;/li&gt;
&lt;li data-end=&quot;277&quot; data-start=&quot;252&quot;&gt;모델이 이미 잘 아는 범위의 지식일 때&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;360&quot; data-start=&quot;278&quot;&gt;&lt;b&gt;예시&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;360&quot; data-start=&quot;291&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;332&quot; data-start=&quot;291&quot;&gt;프롬프트: 이 문장을 영어로 번역해줘: 나는 오늘 기분이 좋아.&lt;/li&gt;
&lt;li data-end=&quot;360&quot; data-start=&quot;335&quot;&gt;&amp;rarr; 예시를 안 줘도 모델이 번역 수행.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-end=&quot;390&quot; data-start=&quot;367&quot; data-ke-size=&quot;size20&quot;&gt;  Few-shot Learning&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;690&quot; data-start=&quot;391&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;442&quot; data-start=&quot;391&quot;&gt;&lt;b&gt;정의&lt;/b&gt;: 모델에게 작업을 시키기 전에 &lt;b&gt;몇 가지 예시를 함께 제공&lt;/b&gt;하는 것.&lt;/li&gt;
&lt;li data-end=&quot;485&quot; data-start=&quot;443&quot;&gt;모델이 &amp;ldquo;아, 이런 방식으로 답해야 하는구나&amp;rdquo; 하고 패턴을 따라 함.&lt;/li&gt;
&lt;li data-end=&quot;561&quot; data-start=&quot;486&quot;&gt;&lt;b&gt;사용 상황&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;561&quot; data-start=&quot;502&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;522&quot; data-start=&quot;502&quot;&gt;답변 형식을 제어하고 싶을 때&lt;/li&gt;
&lt;li data-end=&quot;561&quot; data-start=&quot;525&quot;&gt;모델이 애매하게 답할 수 있는 작업을 명확히 하고 싶을 때&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;690&quot; data-start=&quot;562&quot;&gt;&lt;b&gt;예시&lt;/b&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 data-end=&quot;690&quot; data-start=&quot;562&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li id=&quot;code_1757078701407&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;한국어: 안녕  &amp;rarr; 영어: Hello
한국어: 고양이 &amp;rarr; 영어: Cat
---
한국어: 강아지 &amp;rarr; 영어:&lt;/code&gt;&lt;/li&gt;
&lt;li data-end=&quot;690&quot; data-start=&quot;562&quot;&gt;&amp;nbsp;&amp;rarr; 모델이 앞의 패턴을 따라 Dog이라고 출력.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  Lang Chain vs Lang Graph&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot; data-end=&quot;459&quot; data-start=&quot;445&quot;&gt;✅ LangChain&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;493&quot; data-start=&quot;210&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;319&quot; data-start=&quot;210&quot;&gt;&lt;b&gt;무엇인가?&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;319&quot; data-start=&quot;226&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;252&quot; data-start=&quot;226&quot;&gt;오픈소스 &lt;b&gt;LLM 활용 프레임워크&lt;/b&gt;.&lt;/li&gt;
&lt;li data-end=&quot;319&quot; data-start=&quot;255&quot;&gt;&amp;ldquo;LLM + 도구(API, DB, 검색엔진 등)&amp;rdquo;를 쉽게 연결해서 Agent나 애플리케이션을 만들 수 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;447&quot; data-start=&quot;321&quot;&gt;&lt;b&gt;특징&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;447&quot; data-start=&quot;334&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;394&quot; data-start=&quot;334&quot;&gt;&lt;b&gt;체인(Chain) 구조&lt;/b&gt;: 여러 단계를 연결 가능.&lt;br /&gt;예: 질문 &amp;rarr; DB검색 &amp;rarr; 요약 &amp;rarr; 답변&lt;/li&gt;
&lt;li data-end=&quot;447&quot; data-start=&quot;397&quot;&gt;다양한 모듈 제공: 프롬프트 관리, 메모리, 벡터 DB 연동, Agent 구성 등.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;493&quot; data-start=&quot;449&quot;&gt;&lt;b&gt;비유&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;493&quot; data-start=&quot;462&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;493&quot; data-start=&quot;462&quot;&gt;&amp;ldquo;LLM 기반 앱 만들기 위한 레고 블록 세트&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot; data-end=&quot;459&quot; data-start=&quot;445&quot;&gt;✅ LangGraph&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;950&quot; data-start=&quot;516&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;657&quot; data-start=&quot;516&quot;&gt;&lt;b&gt;무엇인가?&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;657&quot; data-start=&quot;532&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;586&quot; data-start=&quot;532&quot;&gt;LangChain 위에서 동작하는 &lt;b&gt;Agent 오케스트레이션(흐름 제어) 프레임워크&lt;/b&gt;.&lt;/li&gt;
&lt;li data-end=&quot;657&quot; data-start=&quot;589&quot;&gt;복잡한 Agent의 상태(State)와 단계(Workflow)를 **그래프(Graph)**처럼 정의하고 실행 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;854&quot; data-start=&quot;659&quot;&gt;&lt;b&gt;특징&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;854&quot; data-start=&quot;672&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;796&quot; data-start=&quot;672&quot;&gt;Agent가 단순 선형 흐름(Chain)이 아니라,
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;796&quot; data-start=&quot;709&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;724&quot; data-start=&quot;709&quot;&gt;분기(if-else)&lt;/li&gt;
&lt;li data-end=&quot;741&quot; data-start=&quot;729&quot;&gt;반복(loop)&lt;/li&gt;
&lt;li data-end=&quot;796&quot; data-start=&quot;746&quot;&gt;여러 Agent 간 협업&lt;br /&gt;같은 &lt;b&gt;복잡한 흐름&lt;/b&gt;을 다룰 수 있게 해줌.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;854&quot; data-start=&quot;799&quot;&gt;&lt;b&gt;상태(State) 관리&lt;/b&gt; 기능이 강력 &amp;rarr; &amp;ldquo;Agent가 지금 무엇을 하고 있는지&amp;rdquo; 추적 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;950&quot; data-start=&quot;856&quot;&gt;&lt;b&gt;비유&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;950&quot; data-start=&quot;869&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;893&quot; data-start=&quot;869&quot;&gt;LangChain이 레고 블록이라면,&lt;/li&gt;
&lt;li data-end=&quot;950&quot; data-start=&quot;896&quot;&gt;LangGraph는 그 블록들을 연결해서 &amp;ldquo;설계도 + 자동화된 공정 라인&amp;rdquo;을 만드는 도구.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-start=&quot;445&quot; data-end=&quot;459&quot; data-ke-size=&quot;size23&quot;&gt;✅ 관계 정리&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1081&quot; data-start=&quot;969&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1020&quot; data-start=&quot;969&quot;&gt;&lt;b&gt;LangChain&lt;/b&gt;: LLM 앱/Agent를 &lt;b&gt;빠르게 조립&lt;/b&gt;할 수 있는 도구&lt;/li&gt;
&lt;li data-end=&quot;1081&quot; data-start=&quot;1021&quot;&gt;&lt;b&gt;LangGraph&lt;/b&gt;: LangChain으로 만든 요소들을 &lt;b&gt;복잡하게 연결/제어&lt;/b&gt;하는 확장 툴&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>학습/용어집</category>
      <author>대싕:)</author>
      <guid isPermaLink="true">https://yu5501.tistory.com/94</guid>
      <comments>https://yu5501.tistory.com/94#entry94comment</comments>
      <pubDate>Fri, 5 Sep 2025 22:30:38 +0900</pubDate>
    </item>
    <item>
      <title>C#</title>
      <link>https://yu5501.tistory.com/93</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;C#은 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;Microsoft&lt;/b&gt;&lt;/span&gt;에서 개발한 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;객체 지향 프로그래밍 언어&lt;/b&gt;&lt;/span&gt;로, &lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;.NET 환경&lt;/b&gt;&lt;/span&gt;에서 강력한 기능을 제공하는 것이 특징입니다. 다른 언어와 비교했을 때 C#만의 주요 특징을 살펴보겠습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;C#의 특징&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. .NET과의 강력한 연계&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;C#은 &lt;u&gt;.NET 프레임워크 및 .NET Core(현재 .NET 5 이상)와 긴밀하게 통합&lt;/u&gt;되어 있어, &lt;u&gt;다양한 플랫폼에서 실행 가능&lt;/u&gt;함.&lt;/li&gt;
&lt;li&gt;풍부한 라이브러리와 API 지원으로 빠른 개발이 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 메모리 관리 (&lt;span style=&quot;background-color: #9feec3;&quot;&gt;Garbage Collection&lt;/span&gt;)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;C++처럼 명시적으로 메모리를 해제할 필요 없이, C#의 **GC(Garbage Collector)**가 자동으로 메모리를 관리&lt;/u&gt;.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;IDisposable 인터페이스&lt;/span&gt;와 using 키워드를 활용하여 리소스 해제를 효과적으로 제어&lt;/u&gt;할 수 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. 안전한 타입 시스템 (Type Safety)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;컴파일 타임에서 타입 검사를 수행&lt;/u&gt;하여 &lt;u&gt;&lt;b&gt;타입 안정성&lt;/b&gt;&lt;/u&gt;을 보장.&lt;/li&gt;
&lt;li&gt;Null 값 처리 강화를 위한 &lt;u&gt;&lt;b&gt;nullable reference types&lt;/b&gt;&lt;/u&gt; 도입(C# 8.0부터).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. 이벤트 및 델리게이트 (&lt;span style=&quot;background-color: #9feec3;&quot;&gt;Delegates&lt;/span&gt; &amp;amp; &lt;span style=&quot;background-color: #9feec3;&quot;&gt;Events&lt;/span&gt;)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;**델리게이트(Delegate)**를 통해 메서드를 변수처럼 다룰 수 있음.&lt;/li&gt;
&lt;li&gt;**이벤트(Event)**를 활용하여 UI 프로그래밍 및 비동기 처리를 쉽게 구현 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;5. &lt;span style=&quot;background-color: #9feec3;&quot;&gt;LINQ&lt;/span&gt; (Language Integrated Query)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;데이터베이스, XML, 컬렉션(List, Array 등) 등을 편리하게 쿼리할 수 있는 기능&lt;/u&gt; 제공.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;SQL과 유사한 구문&lt;/u&gt;으로 데이터를 조작할 수 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1738679646190&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var numbers = new List&amp;lt;int&amp;gt; { 1, 2, 3, 4, 5 };
var evenNumbers = numbers.Where(n =&amp;gt; n % 2 == 0).ToList();&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;6. 비동기 프로그래밍 (&lt;span style=&quot;background-color: #9feec3;&quot;&gt;Async/Await&lt;/span&gt;) 지원&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;async와 await 키워드를 사용하여 &lt;u&gt;비동기 작업을 간편하게 구현&lt;/u&gt; 가능.&lt;/li&gt;
&lt;li&gt;네트워크 요청, 파일 처리, DB 접근 등의 작업을 효율적으로 수행할 수 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1738679664042&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public async Task&amp;lt;string&amp;gt; GetDataAsync()
{
    HttpClient client = new HttpClient();
    return await client.GetStringAsync(&quot;https://example.com&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;7. C#의 다양한 문법적 기능&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;익명 타입&lt;/span&gt;(Anonymous Type)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;자동 구현 속성 (Auto-Implemented Properties)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;패턴 매칭 (Pattern Matching)&lt;/b&gt;: switch문과 is 키워드를 활용한 강력한 패턴 매칭 지원&lt;/li&gt;
&lt;li&gt;&lt;b&gt;튜플 (&lt;span style=&quot;background-color: #9feec3;&quot;&gt;Tuples&lt;/span&gt;)&lt;/b&gt; 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1738679843450&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var person = new { Name = &quot;Alice&quot;, Age = 25 };  // 익명 타입(Anonymous Type)
public string Name { get; set; }  // 프로퍼티(Property)
if (target is DataType) { }   // 패턴 매칭 (Pattern Matching)
var person = (&quot;Alice&quot;, 25);  // 튜플 (Tuples) 지원
Console.WriteLine(person.Item1);&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;8. 인터페이스와 추상화 지원&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;다중 인터페이스 구현이 가능&lt;/u&gt;하며, &lt;u&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;interface&lt;/span&gt;를 통한 다형성&lt;/u&gt;을 적극 활용 가능.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;C# 8.0부터 &lt;u&gt;인터페이스에 디폴트 메서드(Default Interface Methods)&lt;/u&gt; 지원&lt;/b&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;9. 크로스 플랫폼 개발 가능&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;.NET Core&lt;/span&gt;(현재 .NET 5 이상)와 함께 Windows, macOS, Linux에서 실행 가능.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;Xamarin&lt;/span&gt;을 이용해 모바일(Android, iOS) 개발도 가능.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;Unity 엔진&lt;/span&gt;과 함께 게임 개발에도 활용.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;10. 강력한 예외 처리&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;try-catch-finally 구조를 통한 예외 처리&lt;/u&gt; 지원.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;throw 키워드를 활용하여 사용자 정의 예외(Custom Exception) 생성&lt;/u&gt; 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt; C#이 많이 쓰이는 분야&lt;/b&gt;&amp;nbsp;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✔ &lt;b&gt;웹 개발&lt;/b&gt; &amp;ndash; ASP.NET Core 활용&lt;br /&gt;✔ &lt;b&gt;게임 개발&lt;/b&gt; &amp;ndash; Unity 엔진과 함께 사용&lt;br /&gt;✔ &lt;b&gt;데스크톱 앱 개발&lt;/b&gt; &amp;ndash; Windows Forms, WPF 활용&lt;br /&gt;✔ &lt;b&gt;모바일 앱 개발&lt;/b&gt; &amp;ndash; Xamarin을 이용한 Android/iOS 개발&lt;br /&gt;✔ &lt;b&gt;클라우드 &amp;amp; 마이크로서비스&lt;/b&gt; &amp;ndash; Azure와 함께 .NET을 활용&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;✨ &lt;b&gt;정리&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C#은 &lt;b&gt;객체 지향 언어의 강력한 기능&lt;/b&gt;을 제공하면서도, &lt;b&gt;.NET과의 연계, 자동 메모리 관리, 비동기 프로그래밍, 강력한 타입 시스템&lt;/b&gt; 등의 기능 덕분에 &lt;b&gt;웹, 게임, 모바일, 클라우드 등 다양한 분야&lt;/b&gt;에서 활발하게 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;즉, 생산성이 높고 안정적인 프로그래밍이 가능한 언어&lt;/b&gt;라고 볼 수 있습니다.&amp;nbsp;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>학습/용어집</category>
      <category>.NET</category>
      <category>C#</category>
      <category>delegate</category>
      <category>garbage collection</category>
      <category>LINQ</category>
      <author>대싕:)</author>
      <guid isPermaLink="true">https://yu5501.tistory.com/93</guid>
      <comments>https://yu5501.tistory.com/93#entry93comment</comments>
      <pubDate>Tue, 4 Feb 2025 23:43:56 +0900</pubDate>
    </item>
    <item>
      <title>호이스팅 (Hoisting)</title>
      <link>https://yu5501.tistory.com/92</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;호이스팅(Hoisting)&lt;/span&gt;은 JavaScript에서 변수와 함수 선언이 &lt;b&gt;실제 &lt;u&gt;코드 실행 전에 메모리에 미리 할당되는 동작&lt;/u&gt;&lt;/b&gt;을 의미합니다. 즉, &lt;b&gt;JavaScript 엔진이 &lt;u&gt;코드를 실행하기 전에 변수 및 함수 선언을 스코프 최상단으로 끌어올리는 것&lt;/u&gt;처럼 동작&lt;/b&gt;하는 것을 말합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;JavaScript 만의 특징인가?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;호이스팅(Hoisting)은 &lt;u&gt;&lt;b&gt;JavaScript 고유의 개념&lt;/b&gt;&lt;/u&gt;이지만, 다른 언어에서도 유사한 동작을 일부 찾아볼 수 있습니다. 그러나 &lt;b&gt;Hoisting이라는 개념 자체는 JavaScript에서 주로 사용되는 개념&lt;/b&gt;입니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; 1. JavaScript에서의 호이스팅&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JavaScript에서는 변수와 함수 선언이 실행 전에 메모리에 미리 할당되면서 호이스팅이 발생합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1738592186467&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log(x); // undefined (호이스팅 발생)
var x = 10;
console.log(x); // 10&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;nbsp;var x가 스코프의 최상단으로 끌어올려지지만(undefined로 초기화됨), 값(10)은 나중에 할당됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1738592236826&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;foo(); // 정상 실행 (함수 호이스팅)
function foo() {
  console.log(&quot;Hello!&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;nbsp; &amp;nbsp;함수 선언문은 코드 실행 전 메모리에 먼저 등록되므로 호출이 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. Python 에서의 동작&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Python에서는 JavaScript와 달리, &lt;b&gt;함수나 변수를 선언 전에 사용하면 오류가 발생&lt;/b&gt;합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1738592515793&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;print(x)  # ❌ NameError: name 'x' is not defined
x = 10&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Python에서는 변수를 미리 선언하지 않으면 오류가 발생.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나, Python에서도 함수는 전체 스크립트가 실행될 때 먼저 메모리에 로드됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1738592541537&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def greet():
    print(&quot;Hello!&quot;)

greet()  # ✅ 정상 실행&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;JavaScript와 유사하게 &lt;b&gt;함수를 정의하기 전에 호출할 수 있음&lt;/b&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, 함수가 조건문 안에 있으면 다릅니다.&lt;/p&gt;
&lt;pre id=&quot;code_1738592556825&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if False:
    def foo():
        print(&quot;This will never be defined&quot;)

foo()  # ❌ NameError&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Python에서는 조건문 내부에서 선언된 함수는 실행될 때까지 메모리에 로드되지 않음.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. C / C++ 에서의 동작&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C/C++에서도 변수 선언이 위로 끌어올려지지는 않습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1738592617946&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;

int main() {
    printf(&quot;%d&quot;, x);  // ❌ 오류: 'x'를 찾을 수 없음
    int x = 10;
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;C에서는 변수 선언 전에 접근할 수 없음&lt;/b&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, &lt;b&gt;함수 선언(프로토타입)은 미리 정의하지 않아도 사용 가능&lt;/b&gt;.&lt;/p&gt;
&lt;pre id=&quot;code_1738592634210&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;

void sayHello();  // 함수 선언 (필수 아님)

int main() {
    sayHello();  // ✅ 정상 실행
}

void sayHello() {
    printf(&quot;Hello, world!&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;C에서는 &lt;b&gt;함수 선언이 없어도(컴파일러가 자동으로 처리), 실행할 수 있음&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;하지만 &lt;b&gt;변수는 선언 전 사용 불가&lt;/b&gt; &amp;rarr; JavaScript와 차이점.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;4.&lt;span&gt; Java&lt;/span&gt;&amp;nbsp;에서의 동작&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Java에서도 JavaScript처럼 변수나 함수를 선언 전에 사용하면 오류가 발생합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1738592716180&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class Main {
    public static void main(String[] args) {
        System.out.println(x); // ❌ 컴파일 오류 (x를 찾을 수 없음)
        int x = 10;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Java에서는 &lt;b&gt;호이스팅이 발생하지 않음&lt;/b&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 &lt;b&gt;메서드는 선언 전에도 호출할 수 있음&lt;/b&gt;:&lt;/p&gt;
&lt;pre id=&quot;code_1738592732010&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class Main {
    public static void main(String[] args) {
        greet(); // ✅ 정상 실행
    }

    static void greet() {
        System.out.println(&quot;Hello!&quot;);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Java에서 메서드는 클래스가 로드될 때 미리 정의되므로, 실행 전에 선언 위치에 상관없이 호출 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 85px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 10.9302%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;언어&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 24.1861%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt; 변수 선언 호이스팅 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 41.8604%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt; 함수 선언 호이스팅 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 23.0233%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;비고&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 10.9302%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt; JavaScript &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 24.1861%; height: 17px;&quot;&gt;✅ var은 호이스팅됨 (undefined 할당), let/const는 X&lt;/td&gt;
&lt;td style=&quot;width: 41.8604%; height: 17px;&quot;&gt;✅ 함수 선언문은 호이스팅됨&lt;/td&gt;
&lt;td style=&quot;width: 23.0233%; height: 17px;&quot;&gt;Hoisting 개념이 존재&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 10.9302%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt; Python &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 24.1861%; height: 17px;&quot;&gt;❌ 없음&lt;/td&gt;
&lt;td style=&quot;width: 41.8604%; height: 17px;&quot;&gt;✅ 함수는 실행 전에 정의되면 호출 가능&lt;/td&gt;
&lt;td style=&quot;width: 23.0233%; height: 17px;&quot;&gt;조건문 안에서는 적용 X&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 10.9302%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt; C/C++ &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 24.1861%; height: 17px;&quot;&gt;❌ 없음&lt;/td&gt;
&lt;td style=&quot;width: 41.8604%; height: 17px;&quot;&gt;✅ 함수는 선언 없이도 호출 가능 (컴파일러 처리)&lt;/td&gt;
&lt;td style=&quot;width: 23.0233%; height: 17px;&quot;&gt;변수는 선언 전에 사용 불가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 10.9302%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt; Java &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 24.1861%; height: 17px;&quot;&gt;❌ 없음&lt;/td&gt;
&lt;td style=&quot;width: 41.8604%; height: 17px;&quot;&gt;✅ 메서드는 선언 위치와 상관없이 호출 가능&lt;/td&gt;
&lt;td style=&quot;width: 23.0233%; height: 17px;&quot;&gt;클래스 로딩 시 등록됨&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;호이스팅(Hoisting) 종류&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JavaScript에서 &lt;b&gt;함수 호이스팅&lt;/b&gt;과 &lt;b&gt;var 변수 호이스팅&lt;/b&gt;은 동작 방식이 다릅니다. 함수는 &lt;b&gt;전체 함수가 호이스팅&lt;/b&gt;되지만, var 변수는 &lt;b&gt;선언만 호이스팅되고 값 할당은 나중에 수행&lt;/b&gt;됩니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; 1. 함수 호이스팅 (Function Hoisting) &lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수 선언문(function 키워드 사용)은 &lt;b&gt;전체 함수가 호이스팅되므로 선언 위치보다 앞에서도 호출 가능&lt;/b&gt;합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ &lt;b&gt;예제: 함수 선언문 Hoisting&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1738593209441&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sayHello(); // ✅ 정상 실행 (함수 전체가 호이스팅됨)

function sayHello() {
  console.log(&quot;Hello!&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 호이스팅 과정 &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1738593248425&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 실행 전에 JavaScript가 내부적으로 아래처럼 처리
function sayHello() {  // ✅ 함수 전체가 메모리에 등록됨
  console.log(&quot;Hello!&quot;);
}

sayHello(); // 정상 실행&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;함수 선언문은 실행 전에 메모리에 먼저 로드되므로, 선언보다 앞에서 호출해도 문제없음.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; 2. var 변수 호이스팅 (Var Hoisting) &lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;var로 선언한 변수는 &lt;b&gt;선언만 호이스팅되고, 값 할당은 원래 위치에서 실행&lt;/b&gt;됩니다.&lt;br /&gt;따라서, &lt;b&gt;선언 전에 접근하면 undefined가 반환&lt;/b&gt;됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;❌ &lt;b&gt;예제: var 변수 Hoisting&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1738593348481&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log(name); // ❌ undefined (호이스팅되었지만 값은 없음)
var name = &quot;Alice&quot;;
console.log(name); // ✅ &quot;Alice&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 호이스팅 과정&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1738593369457&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 실행 전에 JavaScript가 내부적으로 아래처럼 처리
var name;  // 선언만 호이스팅 (값 할당은 X)

console.log(name); // undefined (초기값 없음)
name = &quot;Alice&quot;;  // 실제 값 할당
console.log(name); // &quot;Alice&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;변수 선언(var name;)은 호이스팅되지만, 값(&quot;Alice&quot;)은 호이스팅되지 않음&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;따라서, &lt;b&gt;선언 전에 변수를 사용하면 undefined가 출력&lt;/b&gt;됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 83.2559%; height: 137px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 20.2926%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;구분&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.5329%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt; 함수 선언문 Hoisting &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 34.21%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt; var 변수 Hoisting &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 20.2926%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt; 호이스팅 대상 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.5329%; height: 20px;&quot;&gt;✅ &lt;b&gt;함수 전체&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 34.21%; height: 20px;&quot;&gt;  &lt;b&gt;변수 선언만&lt;/b&gt; (undefined 초기화)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 20.2926%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt; 호출 가능 여부 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.5329%; height: 20px;&quot;&gt;✅ 함수 코드 자체가 할당됨&lt;/td&gt;
&lt;td style=&quot;width: 34.21%; height: 20px;&quot;&gt;❌ undefined로 초기화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 20.2926%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt; 선언 전 호출 가능? &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.5329%; height: 20px;&quot;&gt;✅ 가능 (정상 실행)&lt;/td&gt;
&lt;td style=&quot;width: 34.21%; height: 20px;&quot;&gt;❌ 불가능 (undefined 반환)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 20.2926%; text-align: center; height: 20px;&quot;&gt;&lt;b&gt;예제&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.5329%; height: 20px;&quot;&gt;function foo() {}&lt;/td&gt;
&lt;td style=&quot;width: 34.21%; height: 20px;&quot;&gt;var x = 10;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 20.2926%; text-align: center; height: 20px;&quot;&gt;&lt;b&gt; 에러 여부 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.5329%; height: 20px;&quot;&gt;❌ 없음&lt;/td&gt;
&lt;td style=&quot;width: 34.21%; height: 20px;&quot;&gt;❌ undefined 출력&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 20.2926%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt; 함수 표현식 (var) &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.5329%; height: 17px;&quot;&gt;❌ TypeError 발생&lt;/td&gt;
&lt;td style=&quot;width: 34.21%; height: 17px;&quot;&gt;❌ undefined로 초기화&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;   핵심 요약 &lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;함수 선언문(function foo() {})은 &lt;b&gt;전체가 호이스팅됨 &amp;rarr; 선언 전에도 호출 가능&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;var 변수는 &lt;b&gt;선언만 호이스팅되고, 값은 나중에 할당됨 &amp;rarr; undefined 발생&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;함수 표현식(var foo = function() {};)은 &lt;b&gt;호이스팅되지만 undefined가 되어 호출하면 TypeError 발생&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;let과 const도 &lt;b&gt;호이스팅되지만 &quot;Temporal Dead Zone(TDZ)&quot;에 있기 때문에 선언 전 사용하면 ReferenceError 발생&lt;/b&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. 함수 표현식과 var 호이스팅 차이점&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;var로 선언된 &lt;b&gt;함수 표현식&lt;/b&gt;은 undefined로 초기화되므로 &lt;b&gt;호출하면 TypeError 발생&lt;/b&gt;합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;❌ &lt;b&gt;예제: var 함수 표현식 호이스팅&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1738593716625&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log(greet); // ❌ undefined
greet(); // ❌ TypeError: greet is not a function

var greet = function () {
  console.log(&quot;Hi!&quot;);
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 호이스팅 과정 &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1738593744346&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var greet;  // 변수 선언만 호이스팅 (초기값: undefined)

console.log(greet); // undefined
greet(); // ❌ TypeError: undefined() 호출 불가능

greet = function () {
  console.log(&quot;Hi!&quot;);
};&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;greet 변수는 선언만 호이스팅되고, 값 할당은 나중에 이루어짐&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;함수를 실행하려 했을 때 undefined()를 호출하므로 TypeError 발생&lt;/b&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;let &amp;amp; const의 호이스팅&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;let과 const도 &lt;b&gt;호이스팅되지만, 선언 전에 접근하면 ReferenceError가 발생&lt;/b&gt;합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;❌ &lt;b&gt;예제: let과 const의 호이스팅&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1738594056121&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log(age); // ❌ ReferenceError: Cannot access 'age' before initialization
let age = 25;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1738594069993&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log(city); // ❌ ReferenceError
const city = &quot;Seoul&quot;;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이유&lt;/b&gt;:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;let과 const도 &lt;b&gt;호이스팅되지만 &quot;Temporal Dead Zone(TDZ)&quot;에 있기 때문&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;즉, 선언 전에 변수를 사용하면 에러가 발생.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  결론:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;호이스팅을 완전히 피할 수는 없지만, 혼란을 줄이려면 let과 const를 사용&lt;/b&gt;하는 것이 좋습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;함수 선언문은 상단에 배치하는 것이 가장 안전&lt;/b&gt;합니다.  &lt;/li&gt;
&lt;/ul&gt;</description>
      <category>학습/용어집</category>
      <category>hoisting</category>
      <category>JavaScript</category>
      <author>대싕:)</author>
      <guid isPermaLink="true">https://yu5501.tistory.com/92</guid>
      <comments>https://yu5501.tistory.com/92#entry92comment</comments>
      <pubDate>Mon, 3 Feb 2025 23:59:45 +0900</pubDate>
    </item>
    <item>
      <title>React / Angular / Vue</title>
      <link>https://yu5501.tistory.com/91</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;가장 핫한 프런트엔드 프레임워크인&amp;nbsp;&lt;b&gt;React&lt;/b&gt;, &lt;b&gt;Angular&lt;/b&gt;, &lt;b&gt;Vue &lt;/b&gt;세가지의 장단점을 비교하고&amp;nbsp; 프로젝트의 규모와 팀 구성원의 경험, 이해도 그리고 요구사항에 따라 선택해봅시다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;요약&lt;/b&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 160px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;&lt;b&gt; 특징&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;&lt;b&gt;React&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;&lt;b&gt;Angular&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;&lt;b&gt;Vue&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;&lt;b&gt;제작사&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;Meta&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;Google&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;커뮤니티 기반&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;&lt;b&gt;언어&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;JavaScript + JSX&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;TypeScript&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;JavaScript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;&lt;b&gt;데이터 바인딩&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;단방향&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;양방향&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;양방향&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;&lt;b&gt;학습 난이도&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;중간&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;높음&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;쉬움&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;&lt;b&gt;생태계&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;매우 큼&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;큼&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;중간&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;&lt;b&gt;유연성&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;높음&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;중간(강한 규칙)&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;높음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;&lt;b&gt;사용 사례&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;대규모/다양한 애플리케이션&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;대규모 엔터프라이즈 애플리케이션&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;중소규모부터 대규모까지&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://ko.legacy.reactjs.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;React&lt;/a&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;169&quot; data-origin-height=&quot;150&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beKXDb/btsLZkElqKp/Jha8xhw94I1tAtytqxAdi1/tfile.svg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beKXDb/btsLZkElqKp/Jha8xhw94I1tAtytqxAdi1/tfile.svg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beKXDb/btsLZkElqKp/Jha8xhw94I1tAtytqxAdi1/tfile.svg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeKXDb%2FbtsLZkElqKp%2FJha8xhw94I1tAtytqxAdi1%2Ftfile.svg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;137&quot; height=&quot;122&quot; data-origin-width=&quot;169&quot; data-origin-height=&quot;150&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;제작사&lt;/b&gt;: Meta(구 Facebook)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;컴포넌트 기반&lt;/b&gt;
&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;: React는 U&lt;u&gt;I를 독립적이고 재사용 가능한 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;컴포넌트&lt;/b&gt;&lt;/span&gt;&lt;/u&gt;로 나눕니다. 각 컴포넌트는 자신만의 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;상태(state)&lt;/span&gt;와 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;속성(props)&lt;/span&gt;을 가질 수 있으며, 작은 단위의 컴포넌트를 조합해 복잡한 UI를 구성합니다.&lt;/li&gt;
&lt;li&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Virtual DOM&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;설명&lt;/b&gt;: React는 DOM 조작 성능을 최적화하기 위해 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;Virtual DOM&lt;/b&gt;&lt;/span&gt;을 사용합니다. 이는 &lt;u&gt;브라우저의 실제 DOM과 별도로 메모리에 가상으로 존재하는 DOM&lt;/u&gt;입니다.&lt;/li&gt;
&lt;li&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;u&gt;상태(state)나 속성(props)이 변경되면, React는 가상 DOM을 먼저 업데이트&lt;/u&gt;.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;변경된 부분을 기존 가상 DOM과 비교&lt;/u&gt;(diffing).&lt;/li&gt;
&lt;li&gt;&lt;u&gt;변경된 부분만 실제 DOM에 적용&lt;/u&gt;(patching).&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: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;빠른 렌더링: &lt;u&gt;필요할 때만 DOM을 업데이트하므로 성능 향상&lt;/u&gt;.&lt;/li&gt;
&lt;li&gt;효율적인 리소스 관리.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;JSX&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;설명&lt;/b&gt;: React는 &lt;u&gt;HTML과 JavaScript를 결합한 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;JSX 문법&lt;/span&gt;&lt;/u&gt;을 사용해 UI를 정의합니다. &lt;u&gt;JSX는 브라우저에서 실행되기 전에 Babel 같은 도구를 통해 일반 JavaScript로 변환&lt;/u&gt;됩니다.&lt;/li&gt;
&lt;li&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;가독성 향상: UI 구조를 직관적으로 표현 가능.&lt;/li&gt;
&lt;li&gt;강력한 기능: JavaScript의 모든 기능을 사용 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt; 다양한 상태 관리 옵션&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;React는 상태 관리를 위해 여러 가지 방법을 제공합니다:
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;로컬 상태&lt;/b&gt;: useState, useReducer로 컴포넌트 내부 상태 관리.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;전역 상태&lt;/b&gt;: useContext 또는 외부 라이브러리(예: Redux, MobX, Zustand 등).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;서버 상태&lt;/b&gt;: React Query 같은 라이브러리로 서버 데이터 캐싱 및 관리.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;장점&lt;/b&gt;: 사용자가 요구사항에 맞게 적합한 상태 관리 도구를 선택할 수 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;단방향 데이터 흐름&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;설명&lt;/b&gt;: React에서는 &lt;u&gt;데이터가 부모 &amp;rarr; 자식 방향으로만 흐릅니다&lt;/u&gt;. 이를 통해 애플리케이션 상태를 더 쉽게 추적하고 디버깅할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;Props&lt;/b&gt;&lt;/span&gt;: &lt;u&gt;부모 컴포넌트에서 자식 컴포넌트로 전달되는 읽기 전용 데이터&lt;/u&gt;.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;State&lt;/b&gt;&lt;/span&gt;: &lt;u&gt;컴포넌트 자체가 관리하는 데이터&lt;/u&gt;로, 동적으로 변경 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt; React Hooks&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;설명&lt;/b&gt;: React 16.8부터 도입된 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;Hooks&lt;/b&gt;&lt;/span&gt;는 &lt;u&gt;함수형 컴포넌트에서도 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;상태(state)&lt;/span&gt;와 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;생명주기(lifecycle)&lt;/span&gt;를 관리&lt;/u&gt;할 수 있게 해줍니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 Hooks&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;useState: 상태 관리.&lt;/li&gt;
&lt;li&gt;useEffect: 부수 효과(side effect) 관리 (ex. API 호출, DOM 업데이트).&lt;/li&gt;
&lt;li&gt;useContext: 전역 상태 관리.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;확장성과 자유도&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;React는 프레임워크가 아닌 라이브러리&lt;/u&gt;로, 필요한 기능을 사용자가 직접 추가하도록 설계되었습니다. 예를 들어:
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;라우팅&lt;/b&gt;: React Router 사용.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;상태 관리&lt;/b&gt;: Redux, MobX, Zustand 등 선택.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;스타일링&lt;/b&gt;: CSS-in-JS, Styled Components, Emotion 등 사용 가능.&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: 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;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&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;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;b&gt;높은 자유도&lt;/b&gt;: 많은 옵션과 도구가 있어, 프로젝트 내에서 일관성을 유지하기 어려울 수 있음.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;초기 설정 부담&lt;/b&gt;: 기본 기능만 제공하므로, 라우팅이나 상태 관리 등을 추가로 설정해야 함.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;복잡성 증가&lt;/b&gt;: 대규모 애플리케이션에서 상태와 데이터를 관리하기 위한 추가적인 도구와 구조 설계가 필요.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;React의 사용 사례&lt;/b&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;대규모 애플리케이션&lt;/b&gt;: Facebook, Instagram, Netflix 등.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;동적인 UI&lt;/b&gt;: 사용자와의 인터랙션이 많은 웹사이트.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;싱글 페이지 애플리케이션(SPA)&lt;/b&gt;: 빠른 로딩과 네비게이션이 중요한 애플리케이션.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a href=&quot;https://angular.dev/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;Angular&lt;/b&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;150&quot; data-origin-height=&quot;150&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tUiLn/btsLZM8l023/23xiuKDfJRO5EACUxeu230/tfile.svg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tUiLn/btsLZM8l023/23xiuKDfJRO5EACUxeu230/tfile.svg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tUiLn/btsLZM8l023/23xiuKDfJRO5EACUxeu230/tfile.svg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtUiLn%2FbtsLZM8l023%2F23xiuKDfJRO5EACUxeu230%2Ftfile.svg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;146&quot; height=&quot;150&quot; data-origin-width=&quot;150&quot; data-origin-height=&quot;150&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;제작사&lt;/b&gt;: Google&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt; 완전한 프레임워크(All-in-One Framework) &lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Angular는 &lt;u&gt;&lt;b&gt;애플리케이션 개발에 필요한 모든 도구&lt;/b&gt;를 내장&lt;/u&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;b&gt;라우팅&lt;/b&gt;: @angular/router를 통해 SPA(Single Page Application) 내에서 페이지 전환 가능.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;HTTP 클라이언트&lt;/b&gt;: @angular/common/http로 API와의 통신 지원.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;폼 처리&lt;/b&gt;: 템플릿 기반(forms module)과 반응형(reactive forms) 폼 처리 기능 제공.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;의존성 주입(Dependency Injection)&lt;/b&gt;&lt;/span&gt;: &lt;u&gt;강력한 DI 시스템으로 서비스와 의존성을 효율적으로 관리&lt;/u&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;장점&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: 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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;TypeScript 기반&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Angular는 &lt;u&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;TypeScript&lt;/b&gt;&lt;/span&gt;를 기본 언어로 사용&lt;/u&gt;합니다. &lt;u&gt;TypeScript는 JavaScript의 상위 집합 언어로, 정적 타입 검사와 최신 JavaScript 기능을 지원&lt;/u&gt;합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;장점&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정적 타입: 컴파일 단계에서 오류를 감지해 개발 생산성과 안정성을 높임.&lt;/li&gt;
&lt;li&gt;IDE 지원: 자동 완성, 코드 분석, 리팩토링이 용이.&lt;/li&gt;
&lt;li&gt;유지보수: 대규모 애플리케이션에서도 코드 품질을 유지하기 쉬움.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;양방향 데이터 바인딩 (Two-Way Data Binding)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Angular는 &lt;u&gt;HTML 템플릿과 컴포넌트 클래스 간의 데이터 흐름을 동기화&lt;/u&gt;합니다.&lt;/li&gt;
&lt;li&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;/ul&gt;
&lt;/li&gt;
&lt;li&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;u&gt;데이터를 따로 업데이트하거나 처리할 필요 없이 자동 동기화&lt;/u&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;단점&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: 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;b&gt;&lt;/b&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;Angular는 UI를 &lt;b&gt;컴포넌트 단위&lt;/b&gt;로 나눠 재사용성과 유지보수를 높였습니다.&lt;/li&gt;
&lt;li&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;b&gt;컴포넌트(Class)&lt;/b&gt;: 비즈니스 로직과 데이터 관리.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;템플릿(HTML)&lt;/b&gt;: UI를 정의.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;스타일(CSS)&lt;/b&gt;: 각 컴포넌트의 스타일을 캡슐화.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;강력한 의존성 주입 (Dependency Injection)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Angular는 &lt;u&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;DI 시스템&lt;/b&gt;&lt;/span&gt;을 통해 서비스와 클래스 간의 의존성을 효율적으로 관리&lt;/u&gt;합니다.&lt;/li&gt;
&lt;li&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;필요한 서비스를 선언하면 Angular가 자동으로 생성하고 주입합니다.&lt;/li&gt;
&lt;li&gt;모듈, 컴포넌트, 또는 특정 스코프에서 서비스 주입 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;장점&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: 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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;RxJS와 반응형 프로그래밍&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Angular는 &lt;u&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;RxJS&lt;/b&gt;(Reactive Extensions for JavaScript)&lt;/span&gt;를 사용하여 &lt;b&gt;비동기 데이터 흐름&lt;/b&gt;과 이벤트를 관리&lt;/u&gt;합니다.&lt;/li&gt;
&lt;li&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;b&gt;Observables&lt;/b&gt;: 비동기 데이터 스트림.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Operators&lt;/b&gt;: 데이터 변환 및 필터링.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Subscriptions&lt;/b&gt;: 데이터를 소비하는 로직.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;장점&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;비동기 작업(API 호출, 이벤트 처리 등)에서 코드의 가독성과 효율성을 높임.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;&lt;/b&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;Angular 애플리케이션은 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;모듈&lt;/b&gt;&lt;/span&gt;로 구성됩니다. 각 &lt;u&gt;모듈은 특정 기능이나 도메인을 담당&lt;/u&gt;하며, 모듈을 통해 기능을 분리하고 관리합니다.&lt;/li&gt;
&lt;li&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;b&gt;Root Module&lt;/b&gt;: 앱의 진입점.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Feature Module&lt;/b&gt;: 특정 기능에 관련된 컴포넌트, 서비스, 라우팅 등을 포함.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Shared Module&lt;/b&gt;: 재사용 가능한 컴포넌트와 서비스를 관리.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;장점&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;코드 구조를 명확히 구분하여 유지보수 용이.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;필요할 때만 모듈을 로드하는 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;Lazy Loading&lt;/b&gt;&lt;/span&gt;&lt;/u&gt;을 통해 초기 로딩 속도 최적화.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;템플릿 구문&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Angular의 템플릿은 HTML과 Angular만의 디렉티브 및 데이터 바인딩 문법을 활용하여 동적으로 UI를 렌더링합니다.&lt;/li&gt;
&lt;li&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;b&gt;ngIf&lt;/b&gt;: 조건부 렌더링.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ngFor&lt;/b&gt;: 리스트 반복.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ngClass&lt;/b&gt;: 클래스 동적 적용.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;장점&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;대규모 애플리케이션 개발에 적합한 구조 제공.&lt;/li&gt;
&lt;li&gt;강력한 공식 툴과 CLI(명령줄 인터페이스) 지원.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;단점&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;학습 곡선이 높음&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;TypeScript, RxJS, DI 등 새로운 개념을 익혀야 하므로 초보자에게 어렵게 느껴질 수 있음.&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: 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;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;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Angular의 사용 사례&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;대규모 엔터프라이즈 애플리케이션&lt;/b&gt;: 복잡한 로직과 다양한 모듈을 요구하는 프로젝트에 적합 (e.g., 대형 ERP 시스템, 대시보드).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;다기능 웹 애플리케이션&lt;/b&gt;: SPA(Single Page Application)로 빠르고 유동적인 사용자 경험을 제공.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;팀 기반 프로젝트&lt;/b&gt;: 정형화된 코드 구조와 도구 덕분에 협업이 용이.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a href=&quot;https://ko.vuejs.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;Vue&lt;/b&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;173&quot; data-origin-height=&quot;150&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CYd6N/btsLXrEW42h/weLEvklnPwChhKMSOZNC70/tfile.svg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CYd6N/btsLXrEW42h/weLEvklnPwChhKMSOZNC70/tfile.svg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CYd6N/btsLXrEW42h/weLEvklnPwChhKMSOZNC70/tfile.svg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCYd6N%2FbtsLXrEW42h%2FweLEvklnPwChhKMSOZNC70%2Ftfile.svg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;140&quot; height=&quot;150&quot; data-origin-width=&quot;173&quot; data-origin-height=&quot;150&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;제작사&lt;/b&gt;: Evan You(전 Google 엔지니어) 및 커뮤니티 기반&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;컴포넌트 기반 아키텍처&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Vue는 UI를 &lt;u&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;컴포넌트&lt;/b&gt;&lt;/span&gt;라는 독립적인 단위로 나누어 개발&lt;/u&gt;합니다.&lt;/li&gt;
&lt;li&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;b&gt;템플릿(template)&lt;/b&gt;: HTML 기반의 UI 구조.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;스크립트(script)&lt;/b&gt;: 로직과 데이터 관리.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;스타일(style)&lt;/b&gt;: 각 컴포넌트의 스타일을 캡슐화.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;장점&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;재사용성: 한 번 만든 컴포넌트를 다양한 곳에서 재사용 가능.&lt;/li&gt;
&lt;li&gt;유지보수 용이: 코드가 명확히 분리되어 수정과 확장이 쉬움.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;반응형 데이터 바인딩 (Reactivity)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Vue는 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;반응형 시스템&lt;/b&gt;&lt;/span&gt;을 사용해 &lt;u&gt;데이터 변경을 실시간으로 UI에 반영&lt;/u&gt;합니다.&lt;/li&gt;
&lt;li&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;Vue는 &lt;u&gt;데이터를 &lt;b&gt;Proxy&lt;/b&gt;로 감싸 상태 변화를 감지&lt;/u&gt;하고, &lt;u&gt;변경된 부분만 DOM에 업데이트&lt;/u&gt;합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;단방향 바인딩&lt;/b&gt;: 템플릿에서 데이터를 화면에 표시.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;양방향 바인딩&lt;/b&gt;: 데이터와 UI가 동기화 (v-model 사용).&lt;/li&gt;
&lt;li&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;데이터 변경에 따른 UI 업데이트가 자동으로 이루어짐.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;&lt;/b&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;Vue는 &lt;u&gt;HTML과 유사한 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;템플릿 구문&lt;/b&gt;&lt;/span&gt;을 사용하여 UI를 정의&lt;/u&gt;합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;지시어(Directives)&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;v-bind: 속성 바인딩.&lt;/li&gt;
&lt;li&gt;v-for: 리스트 반복.&lt;/li&gt;
&lt;li&gt;v-if, v-else: 조건부 렌더링.&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: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;가독성이 높고 간결한 코드 작성 가능.&lt;/li&gt;
&lt;li&gt;React의 JSX보다 친숙하게 느껴질 수 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Vue의 유연성&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Vue는 점진적으로 채택 가능한 프레임워크입니다. 필요에 따라 Vue를 사용 범위를 확장할 수 있습니다.
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;CDN 방식으로 사용&lt;/b&gt;: 간단한 HTML 파일에 Vue 스크립트를 추가해 사용.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;컴포넌트 기반 SPA 개발&lt;/b&gt;: Vue CLI나 Vite를 활용해 대규모 애플리케이션 제작.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SSR (서버사이드 렌더링)&lt;/b&gt;: Nuxt.js와 결합해 SEO와 초기 로딩 성능을 최적화.&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: 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;/ul&gt;
&lt;b&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Vuex 및 Pinia: 상태 관리&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Vue는 애플리케이션 &lt;u&gt;상태 관리를 위해 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;Vuex&lt;/b&gt;&lt;/span&gt;와 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;Pinia&lt;/b&gt;&lt;/span&gt;를 제공&lt;/u&gt;합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Vuex&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Flux 아키텍처 기반의 중앙 집중식 상태 관리.&lt;/li&gt;
&lt;li&gt;대규모 애플리케이션에서 상태를 효율적으로 관리.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Pinia&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Vuex보다 가볍고 유연한 상태 관리 라이브러리.&lt;/li&gt;
&lt;li&gt;Vue 3와 잘 통합되며 사용법이 단순.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Composition API (Vue 3)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Vue 3에서 도입된 &lt;b&gt;Composition API&lt;/b&gt;는 컴포넌트 로직을 재사용하고 가독성을 높이는 데 초점을 맞춥니다.&lt;/li&gt;
&lt;li&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;b&gt;Options API&lt;/b&gt;와 함께 사용할 수 있음.&lt;/li&gt;
&lt;li&gt;복잡한 로직을 더 깔끔하게 관리.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;경량성과 빠른 성능&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Vue는 &lt;b&gt;작은 파일 크기&lt;/b&gt;(약 20KB)로 로딩 속도가 빠르고, DOM 업데이트가 효율적입니다.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;Virtual DOM&lt;/b&gt;&lt;/span&gt;을 사용하여 DOM 조작을 최적화.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Lazy Loading&lt;/b&gt;과 &lt;b&gt;코드 분할&lt;/b&gt;로 초기 로딩 속도 개선 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;커뮤니티와 생태계&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Vue는 방대한 커뮤니티와 플러그인을 보유하고 있습니다.
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;Nuxt.js&lt;/b&gt;: 서버사이드 렌더링(SSR)과 정적 사이트 생성(SSG)을 위한 프레임워크.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Vue Router&lt;/b&gt;: SPA의 라우팅을 담당.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Vue CLI &amp;amp; Vite&lt;/b&gt;: 프로젝트 초기 설정과 번들링 도구.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Vuetify, Element Plus&lt;/b&gt;: UI 컴포넌트 라이브러리.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;장점&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;문서가 잘 정리되어 있어 학습이 쉽고 빠름.&lt;/li&gt;
&lt;li&gt;간단한 구조와 직관적인 API.&lt;/li&gt;
&lt;li&gt;작은 규모에서 대규모 애플리케이션까지 유연하게 사용 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;단점&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;대규모 애플리케이션에서의 상태 관리&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Vuex와 같은 도구를 사용해야 하므로 추가적인 학습 필요.&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: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;React와 Angular에 비해 상대적으로 낮지만, 꾸준히 성장 중.&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: 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;/li&gt;
&lt;li&gt;&lt;b&gt;Vue.js의 사용 사례&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;소규모 프로젝트&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;간단한 HTML 페이지에 Vue를 추가해 동적인 기능 구현.&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: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Nuxt.js와 Vuex를 사용해 대규모 SPA 개발.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;인터랙티브 UI&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;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Angular</category>
      <category>REACT</category>
      <category>vue</category>
      <author>대싕:)</author>
      <guid isPermaLink="true">https://yu5501.tistory.com/91</guid>
      <comments>https://yu5501.tistory.com/91#entry91comment</comments>
      <pubDate>Thu, 23 Jan 2025 23:54:18 +0900</pubDate>
    </item>
    <item>
      <title>데이터베이스</title>
      <link>https://yu5501.tistory.com/90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;데이터베이스는 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;데이터를 저장, 관리, 검색하는 데 사용되는 시스템&lt;/span&gt;으로, 사용 목적, 데이터 구조, 확장성, 성능 요구사항 등에 따라 선택합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. &lt;b&gt;관계형 데이터베이스 (&lt;span style=&quot;background-color: #9feec3;&quot;&gt;RDBMS&lt;/span&gt;, Relational Database Management System)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;데이터를 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;테이블 형태로 저장&lt;/span&gt;&lt;/u&gt;하며, &lt;u&gt;테이블 간 관계를 정의할 수 있음&lt;/u&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;SQL&lt;/b&gt;(Structured Query Language)&lt;/span&gt;을 사용하여 데이터 관리.&lt;/li&gt;
&lt;li&gt;트랜잭션 처리(*&lt;span style=&quot;background-color: #9feec3;&quot;&gt;ACID&lt;/span&gt; 속성)를 지원.&lt;/li&gt;
&lt;li&gt;스키마(*&lt;span style=&quot;background-color: #9feec3;&quot;&gt;Schema&lt;/span&gt;) 기반으로 데이터가 저장.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;ACID란?&lt;/b&gt;&lt;br /&gt;원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속성(Durability)의 앞글자를 딴 규칙&lt;br /&gt;&lt;b&gt;Schema란?&lt;/b&gt;&lt;br /&gt;경험, 지식, 정보 등을 구조화, 조직화하는 개념적 구조를 의미. DB에서는 데이터의 구조, 구성 및 관계를 정의한 것이라고 볼 수 있다.&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;대표적인 예시&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.mysql.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;MySQL&lt;/b&gt;&lt;/a&gt;: 오픈소스이며, 빠르고 가볍고 확장성 좋음.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.oracle.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;Oracle&lt;/b&gt;&lt;/a&gt;: 강력한 기능과 안정성을 제공, 대규모 기업 환경에 적합.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.postgresql.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;PostgreSQL&lt;/b&gt;&lt;/a&gt;: 고급 기능과 확장성을 갖춘 오픈소스 데이터베이스.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.microsoft.com/en-us/sql-server/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;SQL Server&lt;/b&gt;&lt;/a&gt;: Microsoft가 제공하며, 윈도우 기반에서 주로 사용.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. &lt;b&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;NoSQL&lt;/span&gt; 데이터베이스&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;비관계형 데이터베이스&lt;/span&gt;&lt;/u&gt;로, &lt;u&gt;정형화된 테이블 구조를 따르지 않음&lt;/u&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;유연한 데이터 모델(&lt;u&gt;스키마리스&lt;/u&gt; 구조).&lt;/li&gt;
&lt;li&gt;&lt;u&gt;대규모 데이터 처리 및 분산 처리를 지원&lt;/u&gt;.&lt;/li&gt;
&lt;li&gt;데이터 유형에 따라 여러 하위 유형으로 나뉨.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;대표적인 하위 유형&lt;/b&gt;:
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;키-값 스토어&lt;/b&gt;: &lt;a href=&quot;https://redis.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Redis&lt;/a&gt;, &lt;a href=&quot;https://aws.amazon.com/ko/dynamodb/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;DynamoDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;문서 지향 데이터베이스&lt;/b&gt;: &lt;a href=&quot;https://www.mongodb.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;MongoDB&lt;/a&gt;, &lt;a href=&quot;https://couchdb.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;CouchDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;컬럼 기반 스토어&lt;/b&gt;: &lt;a href=&quot;https://cassandra.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Cassandra&lt;/a&gt;, &lt;a href=&quot;https://hbase.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;HBase&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;그래프 데이터베이스&lt;/b&gt;: &lt;a href=&quot;https://neo4j.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Neo4j&lt;/a&gt;, &lt;a href=&quot;https://arangodb.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ArangoDB&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사용 사례&lt;/b&gt;: 대규모 웹 서비스, IoT, 실시간 데이터 분석 등.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. &lt;b&gt;NewSQL&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;RDBMS의 ACID 속성과 NoSQL의 확장성을 결합&lt;/span&gt;한 새로운 유형.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;관계형 모델&lt;/u&gt; 유지.&lt;/li&gt;
&lt;li&gt;대규모 트랜잭션 처리와 분산 처리 지원.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;대표적인 예시&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://cloud.google.com/spanner&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Google Spanner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cockroachlabs.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;CockroachDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pingcap.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;TiDB&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. &lt;b&gt;임베디드 데이터베이스&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;어플리케이션에 직접 내장&lt;/span&gt;되어 사용되는 데이터베이스.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;경량화&lt;/u&gt;되어 있음.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;단일 프로세스&lt;/u&gt;에서 동작.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;대표적인 예시&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.sqlite.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;SQLite&lt;/a&gt;: 모바일 앱 및 경량 어플리케이션에 적합.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://rocksdb.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;RocksDB&lt;/a&gt;: 빠른 쓰기 성능을 제공.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. &lt;b&gt;데이터 웨어하우스&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;대규모 데이터를 분석&lt;/u&gt;하고 비즈니스 인텔리전스를 제공하는 데 특화된 데이터베이스.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;주로 읽기 중심.&lt;/li&gt;
&lt;li&gt;OLAP(Online Analytical Processing) 환경에 최적화.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;대표적인 예시&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.snowflake.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Snowflake&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://aws.amazon.com/ko/redshift/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Amazon Redshift&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cloud.google.com/bigquery&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Google BigQuery&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>학습/용어집</category>
      <category>MySQL</category>
      <category>nosql</category>
      <category>oracle</category>
      <category>PostgreSQL</category>
      <category>RDBMS</category>
      <category>SQLite</category>
      <author>대싕:)</author>
      <guid isPermaLink="true">https://yu5501.tistory.com/90</guid>
      <comments>https://yu5501.tistory.com/90#entry90comment</comments>
      <pubDate>Wed, 22 Jan 2025 23:55:43 +0900</pubDate>
    </item>
    <item>
      <title>프런트엔드 프레임워크(Front-end Framework)</title>
      <link>https://yu5501.tistory.com/89</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;사용자 수를 기준&lt;/span&gt;으로 정렬한 것으로 사용 목적과 프로젝트 요구 사항에 따라 선택하면 됩니다. React, Angular, Vue.js가 가장 많은 개발자를 보유하고 있고 Next.js와 Nuxt.js가 그 뒤를 따르며, Svelte와 SolidJS는 빠르게 성장 중인 신생 프레임워크로 주목받고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. &lt;a href=&quot;https://ko.react.dev/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;React&lt;/a&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/a/a7/React-icon.svg&quot; width=&quot;124&quot; height=&quot;110&quot; /&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;특징:&lt;/b&gt; 가장 널리 사용되는 JavaScript 라이브러리. SPA, CSR, SSR 모두 가능.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사용 사례:&lt;/b&gt; Facebook, Instagram, Airbnb 등.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;커뮤니티:&lt;/b&gt; 매우 크고, 관련 생태계(Next.js, Remix 등)도 활발.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. &lt;a href=&quot;https://angular.dev/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Angular&lt;/a&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/c/cf/Angular_full_color_logo.svg&quot; width=&quot;146&quot; height=&quot;146&quot; /&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;특징:&lt;/b&gt; Google에서 개발한 풀스택 프레임워크. 강력한 데이터 바인딩과 DI(의존성 주입) 지원.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사용 사례:&lt;/b&gt; Google 제품, Forbes, Upwork.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;커뮤니티:&lt;/b&gt; 대기업 및 엔터프라이즈 환경에서 강력한 지지.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. &lt;a href=&quot;https://ko.vuejs.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Vue.js&lt;/a&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/9/95/Vue.js_Logo_2.svg&quot; width=&quot;140&quot; height=&quot;121&quot; /&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;특징:&lt;/b&gt; 간단하면서도 강력한 프레임워크. SPA 및 CSR에 주로 사용되며 SSG/SSR(예: Nuxt.js)도 가능.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사용 사례:&lt;/b&gt; Alibaba, Xiaomi, Adobe.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;커뮤니티:&lt;/b&gt; 소규모에서 중간 규모 프로젝트에 인기. 아시아권에서 특히 강세.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. &lt;a href=&quot;https://nextjs.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Next.js&lt;/a&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/8/8e/Nextjs-logo.svg&quot; width=&quot;335&quot; height=&quot;68&quot; /&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;특징:&lt;/b&gt; React 기반으로 CSR, SSR, SSG, ISR 등 다양한 렌더링 방식을 지원.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사용 사례:&lt;/b&gt; Vercel, Netflix, GitHub.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;커뮤니티:&lt;/b&gt; React 기반 프로젝트를 선호하는 개발자들에게 인기.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;5. &lt;a href=&quot;https://nuxt.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Nuxt.js&lt;/a&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/a/ae/Nuxt_logo.svg&quot; width=&quot;174&quot; height=&quot;130&quot; /&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;특징:&lt;/b&gt; Vue 기반 프레임워크로 SSR과 SSG 지원. SEO 및 퍼포먼스에 특화.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사용 사례:&lt;/b&gt; Laravel, Ubisoft.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;커뮤니티:&lt;/b&gt; Vue 생태계의 인기와 함께 성장.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;6. &lt;a href=&quot;https://svelte.dev/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Svelte&lt;/a&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/1/1b/Svelte_Logo.svg&quot; width=&quot;134&quot; height=&quot;161&quot; /&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;특징:&lt;/b&gt; DOM 업데이트 성능이 뛰어난 신생 프레임워크. 간결한 문법과 빌드 성능이 강점.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사용 사례:&lt;/b&gt; The New York Times, Spotify 일부 프로젝트.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;커뮤니티:&lt;/b&gt; 빠르게 성장 중이지만 Vue나 React만큼 크지는 않음.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;7. &lt;a href=&quot;https://svelte.dev/docs/kit/introduction&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;SvelteKit&lt;/a&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/1/1b/Svelte_Logo.svg&quot; width=&quot;139&quot; height=&quot;168&quot; /&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;특징:&lt;/b&gt; Svelte 기반의 SSR 및 SSG를 지원하는 풀스택 프레임워크.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사용 사례:&lt;/b&gt; Svelte를 사용하는 웹 애플리케이션 개발에 주로 사용.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;커뮤니티:&lt;/b&gt; Svelte 사용자 기반에서 인기를 끌고 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;8. &lt;a href=&quot;https://www.gatsbyjs.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Gatsby.js&lt;/a&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcR0sNonzM-jzQUbRxA8yTDpL9ZX_4Rxy7aqTvKewNBNXj3t9Ac9K0PEoVXCnAuYqECTOJcsbOiA6Ut9yqqcm4PrU_Bf_jG939dmpaC5ew&quot; width=&quot;150&quot; height=&quot;150&quot; /&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;특징:&lt;/b&gt; React 기반 정적 사이트 생성기. GraphQL을 사용해 데이터를 연결.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사용 사례:&lt;/b&gt; 기업 블로그, 마케팅 웹사이트.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;커뮤니티:&lt;/b&gt; Next.js에 밀려 상대적으로 감소 추세.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;9. &lt;a href=&quot;https://remix.run/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Remix&lt;/a&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://remix.run/_brand/remix-light.png&quot; width=&quot;337&quot; height=&quot;176&quot; /&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;특징:&lt;/b&gt; 풀스택 React 프레임워크로 데이터 관리와 라우팅에 강력함.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사용 사례:&lt;/b&gt; 풀스택 애플리케이션과 SEO 최적화 프로젝트.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;커뮤니티:&lt;/b&gt; 신생 프레임워크로 React 커뮤니티 내에서 성장 중.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;10. &lt;a href=&quot;https://quasar.dev/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Quasar Framework&lt;/a&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/en/2/29/Quasar_Logo.png?20200522234849&quot; width=&quot;162&quot; height=&quot;162&quot; /&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;특징:&lt;/b&gt; Vue 기반으로 PWA, SPA, SSR, 모바일 앱 등 다목적 개발 지원.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사용 사례:&lt;/b&gt; 중소규모 웹 및 모바일 앱 프로젝트.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;커뮤니티:&lt;/b&gt; Vue 사용자 내에서 특정 니즈를 가진 개발자들에게 인기.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;11. &lt;a href=&quot;https://www.solidjs.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;SolidJS&lt;/a&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://www.solidjs.com/img/logo/with-wordmark/logo.svg&quot; /&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;특징:&lt;/b&gt; React와 유사한 API를 가지지만 성능이 더 뛰어나고 상태 관리를 효율적으로 처리.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사용 사례:&lt;/b&gt; 신속한 DOM 업데이트가 필요한 애플리케이션.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;커뮤니티:&lt;/b&gt; Svelte와 유사하게 빠르게 성장 중.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;12. &lt;a href=&quot;https://alpinejs.dev/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Alpine.js&lt;/a&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://alpinejs.dev/alpine_long.svg&quot; width=&quot;404&quot; height=&quot;77&quot; /&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;특징:&lt;/b&gt; 경량 JavaScript 프레임워크로, DOM 기반 상태 관리와 UI 작업에 특화.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사용 사례:&lt;/b&gt; 간단한 동적 UI 추가.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;커뮤니티:&lt;/b&gt; Vue 대체제로 간단한 작업에 적합.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>학습/용어집</category>
      <category>alpine.js</category>
      <category>Angular</category>
      <category>Gatsby.js</category>
      <category>Next.js</category>
      <category>nuxt.js</category>
      <category>Quasar</category>
      <category>REACT</category>
      <category>Remix</category>
      <category>svelte</category>
      <category>vue.js</category>
      <author>대싕:)</author>
      <guid isPermaLink="true">https://yu5501.tistory.com/89</guid>
      <comments>https://yu5501.tistory.com/89#entry89comment</comments>
      <pubDate>Tue, 21 Jan 2025 23:58:43 +0900</pubDate>
    </item>
    <item>
      <title>Package Mannager(NPM, PMPM, Deno, Yarn)</title>
      <link>https://yu5501.tistory.com/88</link>
      <description>&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;패키지 매니저는 소프트웨어 프로젝트에서 &lt;/span&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;의존성 관리와 관련된 작업을 자동화하는 도구&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;입니다. pnpm, deno, npm, yarn은 모두 JavaScript/TypeScript 생태계에서 자주 사용되는 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;패키지 관리 도구&lt;/span&gt;이지만, 각각의 동작 방식과 철학이 다릅니다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div data-message-model-slug=&quot;gpt-4o&quot; data-message-id=&quot;4747d1d6-deed-45e5-b853-7126fa7e15da&quot; data-message-author-role=&quot;assistant&quot;&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;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. &lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;npm (Node Package Manager)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;npm&lt;/b&gt;은 Node.js와 함께 제공되는 기본 패키지 매니저로, JavaScript 생태계에서 &lt;u&gt;가장 널리 사용&lt;/u&gt;됩니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Node.js 설치 시 기본 제공.&lt;/li&gt;
&lt;li&gt;중앙 저장소인 &lt;a href=&quot;https://www.npmjs.com/&quot;&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; registry&lt;/span&gt;&lt;/a&gt;에 의존성 저장.&lt;/li&gt;
&lt;li&gt;의존성을 프로젝트 폴더의 node_modules/에 다운로드.&lt;/li&gt;
&lt;li&gt;.package-lock.json 파일을 통해 의존성 잠금(lock) 기능 제공.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;최근 버전에서 성능과 보안이 개선&lt;/u&gt;됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;장점&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;널리 사용되고, 대규모 커뮤니티 지원.&lt;/li&gt;
&lt;li&gt;다양한 CLI 명령어와 플러그인.&lt;/li&gt;
&lt;li&gt;쉬운 접근성과 안정적인 유지보수.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;단점&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;초기 버전에서는 느린 속도와 의존성 중복 문제가 있었음 (최근 많이 개선됨).&lt;/li&gt;
&lt;li&gt;node_modules/ 디렉토리가 매우 큰 경우가 많음.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. &lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;pnpm (Performant npm)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;pnpm&lt;/b&gt;은 npm과 유사한 기능을 제공하지만, 의존성 관리와 디스크 사용 방식을 개선하여 &lt;u&gt;빠르고 효율적인 동작을 목표&lt;/u&gt;로 합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;패키지를 전역 저장소에 저장하고 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;u&gt;심볼릭 링크&lt;/u&gt;를&lt;/span&gt; 사용하여 의존성을 관리.&lt;/li&gt;
&lt;li&gt;의존성을 중복 다운로드하지 않으므로 디스크 공간 절약.&lt;/li&gt;
&lt;li&gt;빠른 설치 속도.&lt;/li&gt;
&lt;li&gt;.pnpm-lock.yaml 파일을 사용해 의존성 잠금(lock) 관리.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;장점&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;디스크 공간 절약 및 빠른 설치 속도.&lt;/li&gt;
&lt;li&gt;의존성 중복 문제 해결.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;npm 및 yarn과 호환 가능.&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;단점&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;npm만큼 널리 사용되지는 않음(빠르게 성장 중).&lt;/li&gt;
&lt;li&gt;초기 학습 곡선이 있을 수 있음(특히 심볼릭 링크의 동작 이해).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. &lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;Deno&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Deno&lt;/b&gt;는 Node.js와 같은 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;런타임 환경이자 패키지 매니저&lt;/span&gt;로, 보안과 모듈화를 염두에 두고 설계되었습니다. Deno는 패키지 관리자가 내장되어 있으며, 외부 패키지 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;URL을 통해 직접 로드&lt;/span&gt;합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;패키지 관리자가 별도로 필요하지 않음&lt;/u&gt;(패키지를 &lt;u&gt;URL로 직접 가져옴&lt;/u&gt;).&lt;/li&gt;
&lt;li&gt;&lt;u&gt;TypeScript가 기본적으로 지원&lt;/u&gt;됨.&lt;/li&gt;
&lt;li&gt;권한 기반 보안 모델 (--allow-read, --allow-net 등).&lt;/li&gt;
&lt;li&gt;모듈은 중앙 저장소가 아닌 분산된 &lt;u&gt;URL 기반으로 관리&lt;/u&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;장점&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;보안 및 모듈화를 우선&lt;/u&gt;으로 설계.&lt;/li&gt;
&lt;li&gt;TypeScript 지원이 기본 내장.&lt;/li&gt;
&lt;li&gt;node_modules/가 필요하지 않아 &lt;u&gt;프로젝트가 가벼움&lt;/u&gt;.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;최신 JavaScript 및 브라우저 표준 준수&lt;/u&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;단점&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존 Node.js 생태계와 호환성이 부족함.&lt;/li&gt;
&lt;li&gt;URL 기반 의존성 관리는 관리가 어렵다고 느낄 수 있음.&lt;/li&gt;
&lt;li&gt;Node.js에 비해 덜 성숙하고 생태계가 제한적.&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;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div data-message-model-slug=&quot;gpt-4o&quot; data-message-id=&quot;4b0b8470-dec6-43ff-b961-9ce2bfc887db&quot; data-message-author-role=&quot;assistant&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. &lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;Yarn&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Yarn&lt;/b&gt;은 &lt;u&gt;Facebook(현재 Meta)에서 개발한 패키지 매니저&lt;/u&gt;로, npm의 속도와 신뢰성 문제를 개선하기 위해 등장했습니다. 최근에는 Yarn v2(버전 2)와 v3로 발전하며 더욱 강력한 기능을 제공합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;병렬 설치로 &lt;u&gt;빠른 속도&lt;/u&gt; 제공.&lt;/li&gt;
&lt;li&gt;yarn.lock 파일을 통해 의존성의 정확한 버전 관리.&lt;/li&gt;
&lt;li&gt;PnP(Plug'n'Play) 모드 제공: node_modules/ 디렉토리를 제거하고 실행 파일과 패키지 간 직접 연결.&lt;/li&gt;
&lt;li&gt;워크스페이스(Workspace) 지원: 모노레포(monorepo) 프로젝트에 적합.&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;설치 속도가 빠름(특히 초기 버전에서 npm보다 빨랐음).&lt;/li&gt;
&lt;li&gt;모노레포 프로젝트 관리에 강력한 기능 제공.&lt;/li&gt;
&lt;li&gt;커뮤니티와의 높은 호환성.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;npm 명령어와 비슷&lt;/u&gt;해 사용하기 쉬움.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;단점&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Yarn v2 이후의 PnP 모드는 새로운 학습 곡선이 필요.&lt;/li&gt;
&lt;li&gt;PnP 모드가 일부 도구와 호환되지 않을 수 있음.&lt;/li&gt;
&lt;li&gt;npm에 비해 커뮤니티 크기가 작음.&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;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;전체 비교 요약&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 220px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;&lt;b&gt;기능&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;npm&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;pnpm&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;Yarn&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;Deno&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px; text-align: center;&quot;&gt;&lt;b&gt;설치 방식&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;중앙 저장소 (npm registry)&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;전역 저장소 + 심볼릭 링크&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;중앙 저장소 (npm registry)&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;URL로 직접 가져옴&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px; text-align: center;&quot;&gt;&lt;b&gt;속도&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;보통&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;빠름&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;빠름&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;매우 빠름 (URL 캐싱 사용)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;&lt;b&gt;디스크 사용량&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;큼&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;적음 (공유 저장소 사용)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;보통&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;작음&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px; text-align: center;&quot;&gt;&lt;b&gt;의존성 관리 방식&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;node_modules/&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;심볼릭 링크를 통한 관리&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;node_modules/ 또는 PnP&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;별도 폴더 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;&lt;b&gt;보안&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;제한적&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;제한적&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;보안 잠금(lockfile) 제공&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;강력한 권한 제어&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;&lt;b&gt;호환성&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Node.js 중심&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Node.js 중심&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Node.js 중심&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Node.js와 비호환적&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px; text-align: center;&quot;&gt;커뮤니&lt;b&gt;티&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;매우 큼&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;성장 중&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;큼&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;작음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. &lt;b&gt;Bower&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Bower&lt;/b&gt;는 프런트엔드 의존성 관리를 위해 만들어진 패키지 매니저입니다.&lt;/li&gt;
&lt;li&gt;최근에는 많은 기능이 npm이나 Yarn에 흡수되면서 점차 사용 빈도가 줄어들었습니다.&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;HTML, CSS, JS 등 클라이언트 사이드 라이브러리에 초점.&lt;/li&gt;
&lt;li&gt;bower.json 파일로 의존성 관리.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;장점&lt;/b&gt;: 과거에는 프런트엔드 환경에서 빠르고 가벼운 패키지 관리를 제공.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;단점&lt;/b&gt;: 현재는 유지보수가 중단되고, 대체 기술(npm, Yarn 등)이 등장하며 권장되지 않음.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;6.Composer&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Composer&lt;/b&gt;는 &lt;u&gt;PHP 생태계&lt;/u&gt;를 위한 의존성 관리 도구입니다.&lt;/li&gt;
&lt;li&gt;Node.js 패키지 매니저는 아니지만, PHP 환경에서 널리 사용됩니다.&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;composer.json 파일로 의존성 관리.&lt;/li&gt;
&lt;li&gt;Packagist라는 중앙 저장소를 통해 라이브러리 제공.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;장점&lt;/b&gt;: PHP 프로젝트의 필수 도구로 자리 잡음.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;단점&lt;/b&gt;: PHP 생태계에만 국한됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. &lt;b&gt;Homebrew&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Homebrew&lt;/b&gt;는 &lt;u&gt;macOS와 Linux에서 소프트웨어 패키지를 설치하고 관리하기 위한 도구&lt;/u&gt;입니다.&lt;/li&gt;
&lt;li&gt;JavaScript 패키지 매니저는 아니지만, Node.js 및 npm 설치에도 활용됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;터미널 명령어 기반의 패키지 관리.&lt;/li&gt;
&lt;li&gt;로컬 개발 환경 세팅 시 필수적.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;장점&lt;/b&gt;: 다양한 소프트웨어와 툴의 설치를 단순화.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;단점&lt;/b&gt;: JavaScript 전용이 아님.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;8. &lt;b&gt;Volta&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Volta&lt;/b&gt;는 Node.js 개발 환경을 관리하는 데 초점을 맞춘 도구입니다.&lt;/li&gt;
&lt;li&gt;패키지 매니저라기보다는 Node.js 버전 관리자에 가깝습니다.&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;특정 프로젝트에 Node.js 및 npm/Yarn 버전 고정.&lt;/li&gt;
&lt;li&gt;글로벌 툴 설치가 빠르고 효율적.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;장점&lt;/b&gt;: 개발 환경 간의 일관성 유지.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;단점&lt;/b&gt;: Node.js와 관련된 생태계에만 한정.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;9. &lt;b&gt;Buckaroo&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Buckaroo&lt;/b&gt;는 &lt;u&gt;C++ 프로젝트를 위한 패키지 매니저&lt;/u&gt;입니다.&lt;/li&gt;
&lt;li&gt;JavaScript와는 관련이 없지만, 다른 언어 생태계의 패키지 매니저로 주목받고 있습니다.&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;C++의 복잡한 의존성 문제를 해결.&lt;/li&gt;
&lt;li&gt;선언형 buckaroo.toml 파일 사용.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;장점&lt;/b&gt;: C++ 생태계에서 유용.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;단점&lt;/b&gt;: JavaScript 프로젝트에서는 사용하지 않음.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;10. &lt;b&gt;Edge Runtime with Bun&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Bun&lt;/b&gt;은 &lt;u&gt;JavaScript 및 TypeScript 실행 환경&lt;/u&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;bun add 명령어로 의존성 설치 가능.&lt;/li&gt;
&lt;li&gt;매우 빠른 속도(Zero-copy 방식 활용).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;장점&lt;/b&gt;: 빌트인 패키지 관리와 고속 실행.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;단점&lt;/b&gt;: 아직 초기 단계로, 생태계가 npm이나 Yarn만큼 크지 않음.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>대싕:)</author>
      <guid isPermaLink="true">https://yu5501.tistory.com/88</guid>
      <comments>https://yu5501.tistory.com/88#entry88comment</comments>
      <pubDate>Tue, 21 Jan 2025 00:50:48 +0900</pubDate>
    </item>
    <item>
      <title>Nods.js</title>
      <link>https://yu5501.tistory.com/87</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Node.js는 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;서버 측 애플리케이션 개발을 위해 설계된 &lt;b&gt;JavaScript 런타임 환경&lt;/b&gt;&lt;/span&gt;입니다. 이를 통해 JavaScript를 클라이언트뿐만 아니라 서버에서도 사용할 수 있습니다. Node.js는 Google의 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;V8 JavaScript 엔진 위에서 동작&lt;/span&gt;하며, 빠르고 효율적인 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;비동기 프로그래밍&lt;/span&gt;을 지원합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 비동기 I/O와 이벤트 기반 아키텍처&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;비동기 I/O(Asynchronous I/O)&lt;/b&gt;&lt;/span&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;span style=&quot;background-color: #9feec3;&quot;&gt;콜백 함수나 &lt;b&gt;Promise&lt;/b&gt;와 &lt;b&gt;async/await&lt;/b&gt;를 사용해 비동기 작업을 제어&lt;/span&gt;합니다. (비동기가 기본, 동기화가 필요한 경우 사용하는 방법입니다)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;이벤트 기반(Event-Driven)&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모든 요청은 이벤트 루프(Event Loop)를 통해 처리됩니다.&lt;/li&gt;
&lt;li&gt;이벤트 기반 설계로 고성능을 유지하면서도 확장 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 단일 스레드 환경&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;Single-Threaded&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Node.js는 단일 스레드에서 실행되지만, 내부적으로 이벤트 루프와 &lt;a href=&quot;https://yu5501.tistory.com/86&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;libuv&lt;/b&gt; 라이브러리&lt;/span&gt;&lt;/a&gt;를 활용해 멀티스레드 작업(파일 시스템, 네트워크 요청 등)을 처리합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;장점&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;컨텍스트 전환이 적어 성능이 높음&lt;/span&gt;. (스레드 전환이 필요없음. &lt;u&gt;모든 작업이 하나의 스레드에서 처리&lt;/u&gt;됨)&lt;/li&gt;
&lt;li&gt;동시에 많은 요청을 효율적으로 처리 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;단점&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CPU 집약적인 작업(복잡한 계산 등)에는 적합하지 않음.&lt;/li&gt;
&lt;li&gt;이런 작업은 &lt;u&gt;워커 스레드(Worker Threads)나 클러스터링(Clustering)으로 해결&lt;/u&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. V8 엔진 기반&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Google의 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;V8 JavaScript 엔진&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;을 기반&lt;/span&gt;으로 작동합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;JavaScript를 고속으로 실행하며, &lt;u&gt;C++로 작성&lt;/u&gt;되어 &lt;u&gt;빠른 성능을 제공&lt;/u&gt;합니다.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;Just-In-Time (JIT) 컴파일러&lt;/b&gt;&lt;/span&gt;를 사용&lt;/u&gt;해 &lt;u&gt;JavaScript 코드를 네이티브 머신 코드로 변환&lt;/u&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. 크로스 플랫폼&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다양한 운영 체제(Windows, macOS, Linux)에서 실행 가능.&lt;/li&gt;
&lt;li&gt;JavaScript를 사용하는 클라이언트와 서버 간에 코드 공유 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;5. 풍부한 모듈과 NPM 생태계&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;Node Package Manager (NPM)&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;세계에서 &lt;u&gt;가장 큰 오픈 소스 패키지 레지스트리&lt;/u&gt;.&lt;/li&gt;
&lt;li&gt;다양한 라이브러리와 도구를 쉽게 설치 및 관리 가능.&lt;/li&gt;
&lt;li&gt;예: Express.js (웹 프레임워크), Lodash (유틸리티 라이브러리)&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;6. 비동기 스트림 처리&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;*스트림(Stream)&lt;/span&gt;을 활용해 데이터를 조각으로 처리. (*&lt;u&gt;작은 조각(chunk)&lt;/u&gt;로 처리하는&amp;nbsp; Node.js의 기본 인터페이스) &amp;nbsp;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일 읽기/쓰기, HTTP 요청/응답, 네트워크 소켓 등.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;스트림 기반 처리로 대규모 데이터를 효율적으로 처리 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;7. 확장성과 경량성&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;확장성(Scalability)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;비동기 I/O&lt;/span&gt;와 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;이벤트 루프&lt;/span&gt; 덕분에 수천 개의 동시 연결을 처리 가능.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;클러스터링(Clustering)&lt;/span&gt;을 통해 멀티코어 프로세서 활용&lt;/u&gt; 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;경량성(Lightweight)&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;8. &lt;span style=&quot;background-color: #9feec3;&quot;&gt;JSON&lt;/span&gt;과의 높은 호환성&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;JavaScript 객체를 JSON으로 쉽게 변환 가능.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;REST API&lt;/u&gt;와 같은 데이터 교환 형식에 매우 적합.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;9. 커뮤니티와 생태계&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;대규모 커뮤니티&lt;/u&gt;와 활발한 오픈 소스 기여.&lt;/li&gt;
&lt;li&gt;최신 트렌드와 요구사항을 반영한 다양한 라이브러리 제공.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;10. 주요 사용 사례&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;실시간 애플리케이션&lt;/b&gt;&lt;/span&gt;: 채팅 애플리케이션, 실시간 알림.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;API 서버&lt;/b&gt;&lt;/span&gt;: RESTful API 및 GraphQL 서버.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;스트리밍&lt;/span&gt; 애플리케이션&lt;/b&gt;: 음악, 동영상 스트리밍 서비스.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;마이크로서비스&lt;/b&gt;&lt;/span&gt;: &lt;u&gt;독립적이고 경량화된 서비스&lt;/u&gt; 구축.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;IoT&lt;/span&gt; 애플리케이션&lt;/b&gt;: 센서 및 &lt;u&gt;장치 간 실시간 통신&lt;/u&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Node.js의 장점&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;u&gt;빠른 실행 속도&lt;/u&gt; (V8 엔진 기반).&lt;/li&gt;
&lt;li&gt;&lt;u&gt;비동기 처리&lt;/u&gt;로 높은 성능.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;NPM으로 다양한 라이브러리와 도구 사용 가능&lt;/u&gt;.&lt;/li&gt;
&lt;li&gt;클라이언트-서버 모두 JavaScript로 개발 가능.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;이벤트 기반 설계&lt;/u&gt;로 실시간 애플리케이션에 적합.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Node.js의 단점&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;CPU 집약적인 작업에서 성능 저하.&lt;/li&gt;
&lt;li&gt;단일 스레드 모델의 특성상 잘못 작성된 코드가 전체 애플리케이션에 영향을 미칠 수 있음.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;콜백 지옥(Callback Hell)&lt;/span&gt; 가능성(비동기 코드를 적절히 관리하지 않으면).&lt;/li&gt;
&lt;li&gt;안정성이 낮은 오픈 소스 패키지에 의존할 위험.&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>학습/용어집</category>
      <category>node.js</category>
      <author>대싕:)</author>
      <guid isPermaLink="true">https://yu5501.tistory.com/87</guid>
      <comments>https://yu5501.tistory.com/87#entry87comment</comments>
      <pubDate>Sun, 19 Jan 2025 23:48:11 +0900</pubDate>
    </item>
    <item>
      <title>libuv 라이브러리(Node.js)</title>
      <link>https://yu5501.tistory.com/86</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;libuv&lt;/b&gt;는 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;비동기 I/O 작업&lt;/b&gt;과 &lt;b&gt;이벤트 루프&lt;/b&gt;를 지원하는 멀티플랫폼 라이브러리&lt;/span&gt;입니다. Node.js의 핵심 구성 요소 중 하나로, &lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;파일 시스템 작업, 네트워킹, 타이머, DNS 요청 등&lt;/b&gt;을 비동기적으로 처리&lt;/span&gt;할 수 있게 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;libuv의 주요 역할&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;이벤트 루프(Event Loop)&lt;/span&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;u&gt;Node.js의 이벤트 기반 비동기 모델을 지원하는 핵심 컴포넌트&lt;/u&gt;입니다.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;비동기 작업과 콜백을 관리&lt;/u&gt;하며, JavaScript 코드 실행이 블로킹되지 않도록 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;비동기 I/O&lt;/span&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;u&gt;비동기로 수행&lt;/u&gt;합니다.&lt;/li&gt;
&lt;li&gt;이를 통해 Node.js는 단일 스레드에서도 수천 개의 동시 연결을 처리할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;멀티스레드 작업 처리&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;libuv는 단일 스레드 이벤트 루프 외에 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;내부적으로 **Thread Pool(스레드 풀)**을 사용하여 블로킹 I/O 작업을 처리&lt;/span&gt;합니다. (&lt;u&gt;Node.js 기본은 싱글스레드&lt;/u&gt;로 실행됩니다.)&lt;/li&gt;
&lt;li&gt;예: 파일 읽기/쓰기, DNS 조회, 압축 등.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;크로스 플랫폼 지원&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;다양한 운영 체제(Windows, macOS, Linux)를 지원&lt;/u&gt;하며, 각각의 OS별 차이를 추상화하여 일관된 인터페이스를 제공합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;libuv의 주요 구성 요소&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. &lt;b&gt;이벤트 루프(Event Loop)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Node.js의 비동기 실행 모델의 중심입니다.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;작업이 큐에 추가되면 이벤트 루프가 이를 처리&lt;/u&gt;하며, &lt;span style=&quot;background-color: #9feec3;&quot;&gt;완료 시 콜백을 실행&lt;/span&gt;합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. &lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;Thread Pool&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CPU 집약적 또는 블로킹 작업은 이벤트 루프에서 직접 처리하지 않고, &lt;span style=&quot;background-color: #9feec3;&quot;&gt;스레드 풀에서 실행&lt;/span&gt;됩니다.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;기본적으로 4개의 스레드가 할당&lt;/span&gt;&lt;/u&gt;되며, &lt;u&gt;환경 변수(UV_THREADPOOL_SIZE)로 조정&lt;/u&gt; 가능합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. &lt;b&gt;I/O 추상화&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;네트워크 소켓, 파일 I/O, DNS, IPC 등의 작업을 수행&lt;/u&gt;하며, &lt;u&gt;플랫폼에 따라 적합한 시스템 호출을 추상화&lt;/u&gt;합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. &lt;b&gt;타이머 관리&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;setTimeout이나 setInterval과 같은 타이머 함수의 동작을 지원합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;libuv의 작동 방식&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;태스크 큐(Task Queue)&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이벤트 루프가 &lt;u&gt;작업 큐에 대기 중인 작업을 순차적으로 처리&lt;/u&gt;합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;I/O 작업&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;네트워크 요청, 파일 시스템 작업 등은 비동기로 수행&lt;/u&gt;되며, &lt;u&gt;완료 시 콜백이 호출&lt;/u&gt;됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Timers&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;타이머 콜백(setTimeout, setInterval)&lt;/span&gt;을 설정하고, 시간이 지나면 실행합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Check Phase 및 Close Callbacks&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;이벤트 루프의 각 단계에서 다양한 작업이 처리&lt;/u&gt;되며, &lt;u&gt;마지막 단계에서는 종료 작업을 처리&lt;/u&gt;합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;libuv의 활용 예&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;파일 시스템&lt;/span&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;u&gt;비동기 방식으로 파일을 읽고 쓰는 작업&lt;/u&gt;을 지원.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;네트워크&lt;/span&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;u&gt;HTTP 서버나 클라이언트 통신 구현.&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;타이머&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특정 시간 이후 또는 &lt;u&gt;주기적으로 작업 실행&lt;/u&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;DNS 조회&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;도메인 이름을 비동기로 IP로 변환.&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>학습/용어집</category>
      <category>node.js</category>
      <author>대싕:)</author>
      <guid isPermaLink="true">https://yu5501.tistory.com/86</guid>
      <comments>https://yu5501.tistory.com/86#entry86comment</comments>
      <pubDate>Sun, 19 Jan 2025 23:36:21 +0900</pubDate>
    </item>
    <item>
      <title>클라우드 컴퓨팅(Cloud Computing)</title>
      <link>https://yu5501.tistory.com/85</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;클라우드 컴퓨팅(Cloud Computing)은 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;인터넷을 통해 컴퓨팅 리소스(서버, 스토리지, 데이터베이스, 네트워크, 소프트웨어 등)를 제공하는 기술 및 서비스 모델&lt;/span&gt;을 의미합니다. 사용자들은 클라우드를 통해 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;물리적 장비를 소유하지 않고도 필요한 리소스를 유연하게 활용&lt;/span&gt;할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;클라우드 컴퓨팅의 특징&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;주문형 서비스(&lt;span style=&quot;background-color: #9feec3;&quot;&gt;On-Demand&lt;/span&gt; Self-Service)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자는 &lt;u&gt;필요할 때 바로&lt;/u&gt; 컴퓨팅 리소스를 요청하고 사용할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;네트워크 접근(Network Access)&lt;/b&gt;&lt;/span&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;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;자원 풀링(Resource Pooling)&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;여러 사용자가 &lt;u&gt;공유 자원&lt;/u&gt;을 활용하며, 사용자는 자신의 리소스만을 보는 것처럼 느낍니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;유연한 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;확장성(Scalability)&lt;/span&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;u&gt;리소스를 쉽게 확장하거나 축소할 수 있습니다.&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사용량 기반 과금(Pay-As-You-Go)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;사용한 리소스에 따라 비용을 지불하는 방식&lt;/u&gt;으로, 초기 투자 비용이 줄어듭니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;서비스의 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;고가용성 및 복원력(High Availability and Resilience)&lt;/span&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;u&gt;장애 상황에서도 서비스를 지속적으로 제공&lt;/u&gt;할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;클라우드 컴퓨팅 서비스 모델&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자가 다뤄야 하는 영역은 IaaS &amp;gt; PaaS &amp;gt; SaaS 순서.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;IaaS (Infrastructure as a Service)&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서버, 스토리지, 네트워크 등 &lt;u&gt;물리적 IT 인프라를 가상화하여 제공&lt;/u&gt;.&lt;/li&gt;
&lt;li&gt;예: AWS EC2, Microsoft Azure Virtual Machines, Google Compute Engine&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사용자 &lt;/b&gt;: 애플리케이션,&amp;nbsp;데이터,&amp;nbsp;런타임,&amp;nbsp;미들웨어를&amp;nbsp;관리합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;공급자&lt;/b&gt; : 가상화,&amp;nbsp;스토리지,&amp;nbsp;서버,&amp;nbsp;네트워킹을&amp;nbsp;처리합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;PaaS (Platform as a Service)&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;애플리케이션 개발 및 실행에 필요한 플랫폼을 제공&lt;/u&gt;.&lt;/li&gt;
&lt;li&gt;예: AWS Elastic Beanstalk, Google App Engine, Heroku&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사용자 &lt;/b&gt;: 애플리케이션과 데이터를 개발하고 관리, 배포하는 데 집중합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;공급자&lt;/b&gt; : 런타임, 미들웨어, 운영 체제, 인프라를 관리합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;SaaS (Software as a Service)&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;소프트웨어를 인터넷을 통해 제공&lt;/u&gt;하며, 사용자는 애플리케이션만 사용.&lt;/li&gt;
&lt;li&gt;예: Google Workspace (Docs, Sheets), Dropbox, Salesforce&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사용자 &lt;/b&gt;: 소프트웨어 사용 및 데이터 관리&lt;/li&gt;
&lt;li&gt;&lt;b&gt;공급자&lt;/b&gt; : 애플리케이션,&amp;nbsp;미들웨어,&amp;nbsp;런타임,&amp;nbsp;OS&amp;nbsp;및&amp;nbsp;인프라를&amp;nbsp;포함한&amp;nbsp;다른&amp;nbsp;모든&amp;nbsp;것을&amp;nbsp;처리합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;클라우드 컴퓨팅 배포 모델&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;퍼블릭 클라우드(Public Cloud)&lt;/b&gt;&lt;/span&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;예: AWS, Microsoft Azure, Google Cloud&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;프라이빗 클라우드(Private Cloud)&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특정 조직만을 위해 구축된 클라우드 환경.&lt;/li&gt;
&lt;li&gt;데이터 보안과 규제가 중요한 기업에서 주로 사용.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;하이브리드 클라우드(Hybrid Cloud)&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;퍼블릭 클라우드와 프라이빗 클라우드를 결합한 모델.&lt;/li&gt;
&lt;li&gt;유연성과 보안을 동시에 만족하려는 경우 활용.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;멀티 클라우드(Multi-Cloud)&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;여러 클라우드 서비스 제공자를 사용하는 전략.&lt;/li&gt;
&lt;li&gt;특정 워크로드에 적합한 제공자를 선택하여 사용.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;클라우드 컴퓨팅의 장점&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;비용 효율성&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;li&gt;&lt;b&gt;확장성 및 유연성&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용량 증가나 감소에 따라 리소스를 즉시 조정 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;글로벌 접근성&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;어디서든 클라우드에 접속 가능하며, 글로벌 네트워크 제공.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;자동화된 관리&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;업데이트, 백업, 장애 복구 등이 자동으로 처리.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;보안 강화&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;대규모 클라우드 제공 업체는 보안을 최우선으로 관리.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;클라우드 컴퓨팅의 단점 및 고려 사항&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;의존성(Vendor Lock-In)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특정 클라우드 제공자에 종속될 위험이 있음.&lt;/li&gt;
&lt;li&gt;클라우드 제공자의 정책을 따라야함.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 보안 및 프라이버시&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클라우드에 저장된 데이터에 대한 보안 우려.&lt;/li&gt;
&lt;li&gt;On-Premise 처럼 직접 관리하는 방식이 아니므로 보안에 대한 우려가 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;인터넷 의존성&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;네트워크 연결이 불안정하거나 느리면 서비스 품질 저하 가능.&lt;/li&gt;
&lt;li&gt;인터넷 기반의 서비스이므로 네트워크 성능이 보장되어야 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;비용 관리&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;리소스를 과도하게 사용하면 예상치 못한 비용이 발생할 수 있음.&lt;/li&gt;
&lt;li&gt;사용량을 제어할 수 있는 보조 수단이 필요합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;클라우드 컴퓨팅 활용 사례&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;웹 애플리케이션 호스팅&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;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;빅데이터 분석&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;대량의 데이터를 처리하고 분석하는 데 클라우드 인프라를 활용.&lt;/li&gt;
&lt;li&gt;고성능 리소스를 활용할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;백업 및 복구&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터를 안전하게 저장하고, 장애 발생 시 복구.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt; 무중단 서비스(High Availability, HA)&lt;/span&gt;를 제공합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;AI/ML 모델 훈련&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;GPU와 같은 고성능 리소스를 클라우드에서 활용.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;IoT 플랫폼 지원&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;IoT 기기 데이터를 수집하고 처리.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;대표적인 클라우드 제공 업체&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://aws.amazon.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;Amazon Web Services (AWS)&lt;/b&gt;&lt;/a&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;&lt;a href=&quot;https://azure.microsoft.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;Microsoft Azure&lt;/b&gt;&lt;/a&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;&lt;b&gt;&lt;a href=&quot;https://cloud.google.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Google Cloud Platform&lt;/a&gt; (GCP)&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;li&gt;&lt;a href=&quot;https://www.ibm.com/kr-ko/cloud&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;IBM Cloud&lt;/b&gt;&lt;/a&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;하이브리드 클라우드 및 AI 기술 강점.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.oracle.com/kr/cloud/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;Oracle Cloud&lt;/b&gt;&lt;/a&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;/ol&gt;</description>
      <category>학습/용어집</category>
      <category>aws</category>
      <category>Azure</category>
      <category>Cloud</category>
      <category>gcp</category>
      <author>대싕:)</author>
      <guid isPermaLink="true">https://yu5501.tistory.com/85</guid>
      <comments>https://yu5501.tistory.com/85#entry85comment</comments>
      <pubDate>Thu, 16 Jan 2025 23:54:36 +0900</pubDate>
    </item>
  </channel>
</rss>