<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>captain-yun.log</title>
        <link>https://velog.io/</link>
        <description>무슨 생각하며 사니</description>
        <lastBuildDate>Fri, 08 Nov 2024 13:42:40 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>captain-yun.log</title>
            <url>https://velog.velcdn.com/images/captain-yun/profile/a6c61ee7-c3ea-4c25-9dc7-2739055a1ebd/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. captain-yun.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/captain-yun" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[AWS lambda를 통한 서버리스 구축도 마이크로서비스로 구축]]></title>
            <link>https://velog.io/@captain-yun/AWS-lambda%EB%A5%BC-%ED%86%B5%ED%95%9C-%EC%84%9C%EB%B2%84%EB%A6%AC%EC%8A%A4-%EA%B5%AC%EC%B6%95%EB%8F%84-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4%EB%A1%9C-%EA%B5%AC%EC%B6%95</link>
            <guid>https://velog.io/@captain-yun/AWS-lambda%EB%A5%BC-%ED%86%B5%ED%95%9C-%EC%84%9C%EB%B2%84%EB%A6%AC%EC%8A%A4-%EA%B5%AC%EC%B6%95%EB%8F%84-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4%EB%A1%9C-%EA%B5%AC%EC%B6%95</guid>
            <pubDate>Fri, 08 Nov 2024 13:42:40 GMT</pubDate>
            <description><![CDATA[<p>AWS Lambda를 통해 서버리스 아키텍처에서도 마이크로서비스 아키텍처를 구현할 수 있습니다. 각 Lambda 함수는 개별적인 마이크로서비스처럼 동작할 수 있으며, 서로 독립적으로 실행되고 관리됩니다. Lambda 함수 간의 통신은 보통 API Gateway, AWS Step Functions, 또는 메시지 브로커(예: Amazon SNS/SQS, AWS EventBridge)를 통해 이루어집니다.</p>
<p>이 방식은 서버를 직접 관리하지 않고도 확장성 있고 분산된 마이크로서비스 아키텍처를 구축할 수 있게 해줍니다. 각 람다 함수는 특정 기능을 수행하는 작은 서비스로 구성되며, 서로 다른 람다 함수는 독립적으로 배포되고 확장될 수 있습니다. 이를 통해 다양한 비즈니스 로직을 모듈화하고 마이크로서비스의 장점을 활용할 수 있습니다.</p>
<p><strong>참고할 수 있는 주요 사항:</strong></p>
<ul>
<li><strong>API Gateway</strong>: 각 람다 함수를 HTTP 엔드포인트로 노출시켜 마이크로서비스처럼 호출할 수 있습니다.</li>
<li><strong>Step Functions</strong>: 복잡한 워크플로우를 구성할 때 사용하여 각 람다의 조합을 오케스트레이션할 수 있습니다.</li>
<li><strong>SNS/SQS</strong>: 비동기적인 메시징과 이벤트 기반 아키텍처를 지원합니다.</li>
<li><strong>EventBridge</strong>: 이벤트 기반 아키텍처를 구현할 때 사용됩니다.</li>
</ul>
<p>이러한 도구들을 활용하면 서버리스 환경에서도 마이크로서비스 아키텍처의 특징과 이점을 충분히 구현할 수 있습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Spring Cloud]언제 Feign Client를 쓰고 언제 Kafka나 RabbitMQ를 쓰나?]]></title>
            <link>https://velog.io/@captain-yun/Spring-Cloud%EC%96%B8%EC%A0%9C-Feign-Client%EB%A5%BC-%EC%93%B0%EA%B3%A0-%EC%96%B8%EC%A0%9C-Kafka%EB%82%98-RabbitMQ%EB%A5%BC-%EC%93%B0%EB%82%98</link>
            <guid>https://velog.io/@captain-yun/Spring-Cloud%EC%96%B8%EC%A0%9C-Feign-Client%EB%A5%BC-%EC%93%B0%EA%B3%A0-%EC%96%B8%EC%A0%9C-Kafka%EB%82%98-RabbitMQ%EB%A5%BC-%EC%93%B0%EB%82%98</guid>
            <pubDate>Thu, 07 Nov 2024 06:34:35 GMT</pubDate>
            <description><![CDATA[<p>Feign Client와 Message Pub/Sub 방식 모두 Spring Cloud에서 마이크로서비스 간 통신을 위한 방법으로 사용될 수 있다.</p>
<p>하지만 언제 누구를 써야할지 고민될 수 있다.</p>
<p>어느 특정 하나만을 사용하는게 아니고 비즈니스 로직의 특성에 따라 달리 사용하면 된다.</p>
<h4 id="1-동기-처리---feign-client">(1) 동기 처리 -&gt; Feign Client</h4>
<p>쉽게 말해 요청을 보내는 쪽(클라이언트)이 요청을 처리하는 쪽(서버)의 응답을 기다리는 방식이다.</p>
<p>온라인 쇼핑몰 결제를 예로 들 수 있겠다.</p>
<ul>
<li>사용자가 온라인 쇼핑몰에서 상품을 결제할 때 결제 버튼을 클릭합니다.</li>
<li>클라이언트는 결제 요청을 서버로 보냅니다.</li>
<li>서버는 결제 정보를 처리하고 승인 여부를 즉시 응답으로 클라이언트에 반환합니다.</li>
<li>클라이언트는 승인 결과를 받아 사용자에게 &quot;결제가 완료되었습니다&quot; 또는 &quot;결제 실패&quot; 메시지를 보여줍니다.</li>
</ul>
<p>여기서 클라이언트는 서버의 응답을 기다리며, 서버의 응답이 올 때까지 대기한다. 이 방식은 즉각적인 피드백이 필요한 경우에 적합하다.</p>
<h4 id="2-비동기-처리---메시지-기반">(2) 비동기 처리 -&gt; 메시지 기반</h4>
<p>반면에 비동기적 방식은 요청을 보내는 쪽이 응답을 기다리지 않고 다른 작업을 계속할 수 있는 방식이다.</p>
<p>주문 후 배송 알림을 예로 들 수 있겠다.</p>
<ul>
<li>사용자가 온라인 쇼핑몰에서 상품을 주문하면 주문 확인 요청을 보냅니다.</li>
<li>서버는 주문이 접수되었다는 확인 메시지를 즉시 반환하지만, 주문 처리 및 배송 준비는 별도로 처리합니다.</li>
<li>사용자는 응답을 기다릴 필요 없이 다른 작업을 계속할 수 있습니다(예: 웹사이트 탐색).</li>
<li>나중에, 주문이 배송 준비가 완료되면 <strong>서버에서 알림(이메일이나 SMS)</strong>을 보냅니다.</li>
</ul>
<p>이 방식은 요청에 대한 응답이 즉각적일 필요가 없고, 서버의 처리가 시간이 걸릴 때 주로 사용된다. 이를 통해 시스템의 효율성을 높이고 비동기적으로 작업을 분배할 수 있다.</p>
<p>따라서 Feign Client를 쓸지 Messaging 방식을 쓸지는 내가 구현하고자 하는 로직이 동기적인지 비동기적인지를 먼저 파악하는게 중요하다고 할 수 있겠다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ECS 발생 비용]]></title>
            <link>https://velog.io/@captain-yun/ECS-%EB%B0%9C%EC%83%9D-%EB%B9%84%EC%9A%A9</link>
            <guid>https://velog.io/@captain-yun/ECS-%EB%B0%9C%EC%83%9D-%EB%B9%84%EC%9A%A9</guid>
            <pubDate>Wed, 23 Oct 2024 14:13:14 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>ECS 자체로는 비용이 부과되지 않지만 ECS는 관리 서비스이기 때문에, Fargate나 EC2와 같은 실행 리소스에 대한 비용만 발생합니다.</p>
</blockquote>
<h4 id="1-fargate--사용한-만큼만-비용을-지불">(1) Fargate : 사용한 만큼만 비용을 지불</h4>
<ul>
<li>CPU 사용량: 시간당 비용 부과</li>
<li>메모리 사용량: 시간당 비용 부과<ul>
<li>vCPU 시간당 비용 + 메모리 GB 시간당 비용</li>
</ul>
</li>
<li>예를 들어, CPU 1vCPU 및 2GB 메모리의 태스크가 1시간 동안 실행되면 그에 맞는 요금이 부과됌</li>
</ul>
<h4 id="2-ec2--ec2-비용">(2) EC2 : EC2 비용</h4>
<blockquote>
<p>뿐만 아니라, ECS는 추가적인 서비스들과 함께 사용하는 경우가 많기 때문에 다른 서비스들과 연동 시 해당 서비스들의 비용이 부과됌</p>
</blockquote>
<p>예를 들어,</p>
<h4 id="1-ecr">(1) ECR</h4>
<ul>
<li>컨테이너 이미지를 저장할 때 저장 공간에 대한 비용이 발생<h4 id="2-cloudwatch">(2) CloudWatch</h4>
<ul>
<li>로그 및 모니터링 데이터를 저장하는 경우 비용이 발생<h4 id="3-application-load-balanceralb">(3) Application Load Balancer(ALB)</h4>
</li>
<li>ALB 사용 시 시간당 및 처리된 요청 수에 따라 요금이 부과</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[ECS 구축 3 - CloudWatch로 로그 전송하기]]></title>
            <link>https://velog.io/@captain-yun/ECS-%EA%B5%AC%EC%B6%95-3-CloudWatch%EB%A1%9C-%EB%A1%9C%EA%B7%B8-%EC%A0%84%EC%86%A1%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@captain-yun/ECS-%EA%B5%AC%EC%B6%95-3-CloudWatch%EB%A1%9C-%EB%A1%9C%EA%B7%B8-%EC%A0%84%EC%86%A1%ED%95%98%EA%B8%B0</guid>
            <pubDate>Wed, 23 Oct 2024 14:04:17 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>ECS Fargate에서 CloudWatch Logs에 로그를 전송하려면, 태스크 정의에 로그 설정을 추가해야 합니다.</p>
</blockquote>
<h4 id="설정-방법">설정 방법</h4>
<h4 id="1-ecs-task-definition에서-log-configuration을-설정합니다">(1) ECS Task Definition에서 Log Configuration을 설정합니다.</h4>
<h4 id="2-awslogs-드라이버를-선택하고-로그-그룹을-설정합니다">(2) awslogs 드라이버를 선택하고, 로그 그룹을 설정합니다.</h4>
<pre><code class="language-json">&quot;logConfiguration&quot;: {
  &quot;logDriver&quot;: &quot;awslogs&quot;,
  &quot;options&quot;: {
    &quot;awslogs-group&quot;: &quot;/ecs/my-webserver-logs&quot;,
    &quot;awslogs-region&quot;: &quot;us-east-1&quot;,
    &quot;awslogs-stream-prefix&quot;: &quot;ecs&quot;
  }
}</code></pre>
<p>위와 같은 설정을 통해 ECS가 태스크의 표준 출력 및 표준 에러를 CloudWatch Logs로 전송하고 CloudWatch Logs 콘솔에서 해당 로그 그룹을 확인할 수 있습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ECS 구축 2 - 오토 스케일링]]></title>
            <link>https://velog.io/@captain-yun/ECS-%EA%B5%AC%EC%B6%95-2-%EC%98%A4%ED%86%A0-%EC%8A%A4%EC%BC%80%EC%9D%BC%EB%A7%81</link>
            <guid>https://velog.io/@captain-yun/ECS-%EA%B5%AC%EC%B6%95-2-%EC%98%A4%ED%86%A0-%EC%8A%A4%EC%BC%80%EC%9D%BC%EB%A7%81</guid>
            <pubDate>Wed, 23 Oct 2024 13:58:31 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>ECS에서 Auto Scaling은 특정 조건에 따라 태스크의 수를 자동으로 확장 또는 축소하는 기능을 설정할 수 있습니다.</p>
</blockquote>
<p>(1) ECS 서비스 설정 페이지로 이동하여 서비스 선택
(2) Auto Scaling 탭으로 이동 후 Configure Service Auto Scaling 클릭
(3) <strong>Auto Scaling 정책을 선택 : Target tracking scaling</strong></p>
<ul>
<li>CPU, 메모리 사용률이 일정 기준에 도달하면 자동으로 태스크를 추가하거나 줄이는 방식</li>
<li>예를 들어, CPU 사용량이 70% 이상일 때 태스크 수를 늘리는 설정을 할 수 있습니다.</li>
</ul>
<p>(4) <strong>Scaling policy 설정</strong></p>
<ul>
<li>예를 들어, CPU 사용량이 70% 이상일 때 +1 태스크 추가 또는 30% 이하일 때 -1 태스크 축소와 같은 정책을 설정할 수 있습니다.</li>
</ul>
<blockquote>
<p>ALB이 없다면 각 Fargate 태스크의 IP 주소를 통해 직접 접근해야함</p>
</blockquote>
<ul>
<li>http://<TASK_PUBLIC_IP>:3000</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[ECS 구축 1]]></title>
            <link>https://velog.io/@captain-yun/ECS-%EA%B5%AC%EC%B6%95-1</link>
            <guid>https://velog.io/@captain-yun/ECS-%EA%B5%AC%EC%B6%95-1</guid>
            <pubDate>Wed, 23 Oct 2024 13:52:11 GMT</pubDate>
            <description><![CDATA[<h3 id="목표">목표</h3>
<pre><code>Hello world 웹서버 3개를 ECS 클러스터에 구축하기</code></pre><h3 id="시나리오">시나리오</h3>
<pre><code>1. Task 컨테이너 이미지로 사용할 도커 이미지 파일을 ECR에 업로드하기
 - 도커 이미지 빌드
 - ECR에 업로드
   - CLI 접근을 위한 자격 증명 필요
   - AWS CLI로 접근
   - ECR에 접근되면 이미지 파일 Push하기

2. ECS 클러스터를 구축하고
 - ECS 클러스터 생성
 - VPC 설정
 - 로드 밸런서 설정

3. 
4. ECS 내에서 서비스</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[AWS 서버리스 및 컨테이너 기반 아키텍처]]></title>
            <link>https://velog.io/@captain-yun/AWS-%EC%84%9C%EB%B2%84%EB%A6%AC%EC%8A%A4-%EB%B0%8F-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%EA%B8%B0%EB%B0%98-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98</link>
            <guid>https://velog.io/@captain-yun/AWS-%EC%84%9C%EB%B2%84%EB%A6%AC%EC%8A%A4-%EB%B0%8F-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%EA%B8%B0%EB%B0%98-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98</guid>
            <pubDate>Sun, 20 Oct 2024 13:08:38 GMT</pubDate>
            <description><![CDATA[<p><a href="https://docs.aws.amazon.com/whitepapers/latest/microservices-on-aws/monitoring.html">https://docs.aws.amazon.com/whitepapers/latest/microservices-on-aws/monitoring.html</a></p>
<p><img src="https://velog.velcdn.com/images/captain-yun/post/8af917a5-ab80-43c9-865f-828247bc1343/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/captain-yun/post/bb2e60ef-d882-4d9d-bcbe-fd5e15863578/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ECS vs k8s]]></title>
            <link>https://velog.io/@captain-yun/ECS-vs-k8s</link>
            <guid>https://velog.io/@captain-yun/ECS-vs-k8s</guid>
            <pubDate>Sun, 20 Oct 2024 11:50:17 GMT</pubDate>
            <description><![CDATA[<p><strong>Amazon ECS</strong>와 <strong>Kubernetes(K8s)</strong>는 컨테이너 오케스트레이션에 있어 각각의 장단점이 있습니다. 이를 통해 애플리케이션의 복잡도, 클라우드 환경, 관리 필요성 등을 고려하여 적합한 도구를 선택할 수 있습니다. 아래에서 두 서비스의 장단점을 비교해보겠습니다.</p>
<hr>
<h3 id="amazon-ecs의-장점"><strong>Amazon ECS의 장점</strong></h3>
<ol>
<li><p><strong>AWS에 최적화</strong>:</p>
<ul>
<li>ECS는 <strong>AWS의 네이티브 서비스</strong>로, AWS의 다양한 서비스(예: S3, RDS, IAM, ELB 등)와 깊게 통합되어 있어 <strong>간편한 설정</strong>과 <strong>일관된 관리</strong>를 제공합니다.</li>
<li><strong>IAM</strong>과의 통합을 통해 컨테이너 수준에서 세부적인 권한을 제어할 수 있습니다.</li>
</ul>
</li>
<li><p><strong>간단한 설정과 관리</strong>:</p>
<ul>
<li>Kubernetes보다 <strong>설정이 간단</strong>하며, <strong>학습 곡선</strong>이 상대적으로 낮습니다. 빠르게 컨테이너 기반의 애플리케이션을 배포할 수 있습니다.</li>
<li>특히 <strong>AWS Fargate</strong>를 사용하면, 서버 관리를 완전히 없애고 <strong>서버리스 컨테이너 환경</strong>을 쉽게 운영할 수 있습니다.</li>
</ul>
</li>
<li><p><strong>서버리스 컨테이너 지원 (Fargate)</strong>:</p>
<ul>
<li>ECS는 <strong>Fargate</strong>를 통해 <strong>서버리스</strong> 방식으로 컨테이너를 관리할 수 있습니다. 이로 인해 인프라 설정 및 관리를 완전히 AWS에 맡길 수 있으며, CPU/메모리 자원만 설정하면 컨테이너를 실행할 수 있습니다.</li>
</ul>
</li>
<li><p><strong>비용 효율성</strong>:</p>
<ul>
<li><strong>Fargate</strong>를 사용하면 필요할 때만 컨테이너를 실행하고, 사용한 만큼만 비용을 지불할 수 있어 <strong>비용 관리</strong>에 유리합니다.</li>
<li>EC2 인스턴스를 기반으로 ECS를 사용할 경우, 오토스케일링을 통해 리소스를 효율적으로 사용할 수 있습니다.</li>
</ul>
</li>
<li><p><strong>간편한 로드 밸런싱</strong>:</p>
<ul>
<li>ECS는 AWS의 <strong>Application Load Balancer (ALB)</strong>와 <strong>Network Load Balancer (NLB)</strong>와 통합되어 있어 <strong>로드 밸런싱 설정</strong>이 매우 쉽고, AWS 네트워크 인프라와 완벽히 연동됩니다.</li>
</ul>
</li>
</ol>
<hr>
<h3 id="amazon-ecs의-단점"><strong>Amazon ECS의 단점</strong></h3>
<ol>
<li><p><strong>AWS에 종속적</strong>:</p>
<ul>
<li>ECS는 AWS에 <strong>완전히 종속</strong>되어 있어, <strong>멀티 클라우드</strong>나 <strong>하이브리드 클라우드</strong> 환경에서는 적합하지 않습니다. 다른 클라우드 플랫폼이나 온프레미스에서는 ECS를 사용할 수 없습니다.</li>
</ul>
</li>
<li><p><strong>유연성 부족</strong>:</p>
<ul>
<li><strong>Kubernetes</strong>에 비해 네트워크 구성이나 확장성에서 유연성이 떨어집니다. 복잡한 네트워크 설정이나 <strong>커스텀 배포 전략</strong>을 지원하는데 한계가 있을 수 있습니다.</li>
<li>기본 제공되는 오토스케일링은 Kubernetes만큼 세밀한 조정이 어렵습니다.</li>
</ul>
</li>
<li><p><strong>제한된 생태계</strong>:</p>
<ul>
<li>Kubernetes는 다양한 <strong>오픈 소스 도구</strong> 및 커뮤니티 지원이 활발하지만, ECS는 <strong>AWS 생태계</strong> 안에서만 사용됩니다. 따라서 <strong>확장성</strong> 면에서는 Kubernetes에 비해 한계가 있을 수 있습니다.</li>
</ul>
</li>
</ol>
<hr>
<h3 id="kubernetes의-장점"><strong>Kubernetes의 장점</strong></h3>
<ol>
<li><p><strong>멀티 클라우드 및 온프레미스 지원</strong>:</p>
<ul>
<li>Kubernetes는 <strong>AWS</strong>, <strong>Azure</strong>, <strong>GCP</strong>, <strong>온프레미스</strong> 등 다양한 환경에서 일관된 방식으로 컨테이너를 관리할 수 있어, <strong>멀티 클라우드</strong> 또는 <strong>하이브리드 클라우드</strong> 전략에 적합합니다.</li>
<li>다양한 클라우드 제공자를 사용하거나 온프레미스와 클라우드를 통합한 환경을 구축할 수 있습니다.</li>
</ul>
</li>
<li><p><strong>확장성 및 유연성</strong>:</p>
<ul>
<li>Kubernetes는 <strong>확장성</strong>과 <strong>유연성</strong> 면에서 ECS보다 뛰어납니다. <strong>커스텀 네트워크 설정</strong>, <strong>복잡한 배포 전략</strong>(예: 카나리 배포, 롤링 업데이트), <strong>오토스케일링</strong> 등을 세밀하게 제어할 수 있습니다.</li>
<li>컨테이너의 수평적 확장을 위해 <strong>Horizontal Pod Autoscaler (HPA)</strong>를 이용하여 CPU, 메모리 사용량뿐 아니라 <strong>커스텀 메트릭</strong>에 따라 오토스케일링이 가능합니다.</li>
</ul>
</li>
<li><p><strong>오픈 소스 생태계</strong>:</p>
<ul>
<li>Kubernetes는 활발한 <strong>오픈 소스 생태계</strong>를 갖추고 있으며, 다양한 <strong>오픈 소스 플러그인</strong>과 <strong>도구</strong>를 활용할 수 있습니다. 로깅, 모니터링, 보안 강화 등을 위한 <strong>Prometheus</strong>, <strong>Grafana</strong>, <strong>ELK 스택</strong> 같은 도구들과 쉽게 통합할 수 있습니다.</li>
</ul>
</li>
<li><p><strong>서비스 디스커버리 및 네트워킹</strong>:</p>
<ul>
<li>Kubernetes는 자체 <strong>서비스 디스커버리</strong>(DNS 기반) 및 <strong>네트워킹</strong> 기능을 제공하며, <strong>네트워크 플러그인</strong>을 통해 <strong>복잡한 네트워크 설정</strong>이 가능합니다.</li>
<li>클러스터 간 트래픽을 관리하거나 멀티 클러스터 환경을 구축하는 데 매우 유연합니다.</li>
</ul>
</li>
<li><p><strong>자동 복구 및 상태 관리</strong>:</p>
<ul>
<li>Kubernetes는 애플리케이션의 상태를 지속적으로 모니터링하고, <strong>자동으로 복구</strong>합니다. 애플리케이션이 비정상적으로 작동할 경우 <strong>자동 재시작</strong>이나 <strong>복구</strong> 기능을 제공합니다.</li>
</ul>
</li>
</ol>
<hr>
<h3 id="kubernetes의-단점"><strong>Kubernetes의 단점</strong></h3>
<ol>
<li><p><strong>복잡한 설정과 학습 곡선</strong>:</p>
<ul>
<li>Kubernetes는 ECS에 비해 <strong>설정이 복잡</strong>하고 <strong>학습 곡선</strong>이 높습니다. 이를 잘 활용하려면 컨테이너 오케스트레이션에 대한 깊은 이해가 필요하며, 클러스터 운영과 관리가 ECS보다 어렵습니다.</li>
<li>Kubernetes의 네트워크 설정, 보안 구성, 배포 전략을 제대로 이해하는 데 시간이 걸립니다.</li>
</ul>
</li>
<li><p><strong>관리 부담</strong>:</p>
<ul>
<li><strong>Kubernetes 클러스터</strong>를 직접 관리할 경우, <strong>클러스터 관리</strong>, <strong>노드 관리</strong>, <strong>네트워크 설정</strong>, <strong>보안 패치</strong> 등을 직접 해야 하므로 관리 부담이 큽니다.</li>
<li>AWS에서 제공하는 <strong>EKS (Elastic Kubernetes Service)</strong>를 사용하면 이 부담이 줄어들지만, 여전히 클러스터 운영에 대한 이해가 필요합니다.</li>
</ul>
</li>
<li><p><strong>비용 관리</strong>:</p>
<ul>
<li>Kubernetes는 <strong>자동 스케일링</strong>과 <strong>자원 최적화</strong>가 가능하지만, 관리하지 않으면 클러스터 운영에 따른 비용이 크게 증가할 수 있습니다. 특히 잘못된 설정으로 인해 리소스를 비효율적으로 사용할 경우 비용이 급증할 수 있습니다.</li>
</ul>
</li>
<li><p><strong>운영 복잡성</strong>:</p>
<ul>
<li>Kubernetes의 복잡한 배포 전략을 사용하려면 이를 관리하고 모니터링할 <strong>운영 도구</strong>와 <strong>전문 인력</strong>이 필요합니다. 배포 파이프라인과 네트워크 구성을 제대로 관리하지 않으면 애플리케이션 운영이 복잡해질 수 있습니다.</li>
</ul>
</li>
</ol>
<hr>
<h3 id="ecs-vs-kubernetes-언제-사용해야-할까"><strong>ECS vs Kubernetes: 언제 사용해야 할까?</strong></h3>
<ul>
<li><p><strong>ECS가 적합한 경우</strong>:</p>
<ol>
<li><strong>AWS 네이티브 환경</strong>에서 빠르게 컨테이너 기반 애플리케이션을 배포하고 싶을 때.</li>
<li><strong>서버리스</strong> 방식으로 컨테이너를 운영하고 싶을 때 (Fargate를 통해 인프라 관리 부담 최소화).</li>
<li>간단한 오토스케일링과 로드 밸런싱 설정으로 애플리케이션을 쉽게 운영하고 싶을 때.</li>
<li>AWS 서비스와의 긴밀한 통합을 활용하고 싶을 때 (예: IAM, CloudWatch, S3 등).</li>
</ol>
</li>
<li><p><strong>Kubernetes가 적합한 경우</strong>:</p>
<ol>
<li><strong>멀티 클라우드</strong> 또는 <strong>하이브리드 클라우드</strong> 환경을 구축해야 할 때.</li>
<li><strong>복잡한 배포 전략</strong>(카나리 배포, 롤링 업데이트 등)이나 네트워크 구성을 세밀하게 관리하고 싶을 때.</li>
<li>오픈 소스 도구를 활용하여 <strong>확장성</strong>과 <strong>유연성</strong>을 극대화하고 싶을 때.</li>
<li>다양한 클라우드 및 온프레미스 환경에서 <strong>일관된 인프라 관리</strong>가 필요할 때.</li>
</ol>
</li>
</ul>
<hr>
<h3 id="정리"><strong>정리</strong></h3>
<p><strong>ECS</strong>는 AWS 환경에 최적화되어 있으며, 빠르고 간편하게 컨테이너 기반 애플리케이션을 배포하고 관리할 수 있습니다. <strong>Fargate</strong>를 통한 서버리스 옵션도 제공하여 관리 부담을 줄일 수 있습니다. <strong>AWS 생태계</strong> 내에서 일관된 인프라 관리와 성능을 보장할 수 있는 서비스입니다.</p>
<p><strong>Kubernetes(K8s)</strong>는 멀티 클라우드 또는 온프레미스 환경에서 일관</p>
<p>된 컨테이너 오케스트레이션을 제공하며, <strong>확장성</strong>과 <strong>유연성</strong> 면에서 ECS보다 더 뛰어납니다. 다만, 관리와 설정이 복잡할 수 있으며, 사용하기 위해서는 더 깊은 이해가 필요합니다.</p>
<p>사용자의 요구 사항에 따라, <strong>간편한 관리와 빠른 배포가 중요하다면 ECS</strong>, <strong>확장성과 복잡한 아키텍처 요구사항이 있다면 Kubernetes</strong>를 선택하는 것이 좋습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Spring Cloud의 Eureka 대체]]></title>
            <link>https://velog.io/@captain-yun/Spring-Cloud%EC%9D%98-Eureka-%EB%8C%80%EC%B2%B4</link>
            <guid>https://velog.io/@captain-yun/Spring-Cloud%EC%9D%98-Eureka-%EB%8C%80%EC%B2%B4</guid>
            <pubDate>Sun, 20 Oct 2024 10:29:51 GMT</pubDate>
            <description><![CDATA[<p><strong>Spring Cloud Eureka</strong>를 사용하지 않고도 <strong>AWS 서비스</strong>를 활용해 <strong>마이크로서비스 아키텍처</strong>에서 <strong>서비스 디스커버리</strong>와 <strong>로드 밸런싱</strong>을 구현할 수 있습니다. AWS에서 제공하는 몇 가지 대체 서비스로 <strong>Eureka</strong>의 역할을 수행할 수 있습니다.</p>
<h3 id="eureka-대체-가능한-aws-서비스"><strong>Eureka 대체 가능한 AWS 서비스</strong></h3>
<h4 id="1-aws-cloud-map"><strong>1. AWS Cloud Map</strong></h4>
<ul>
<li><strong>역할</strong>: AWS Cloud Map은 <strong>서비스 디스커버리</strong>를 위한 관리형 서비스입니다. 마이크로서비스를 등록하고, 다른 서비스들이 이를 <strong>DNS 이름</strong> 또는 <strong>API 호출</strong>로 찾아 연결할 수 있도록 해줍니다.</li>
<li><strong>기능</strong>:<ul>
<li><strong>서비스 디스커버리</strong>: 서비스 인스턴스를 쉽게 등록하고 찾을 수 있습니다.</li>
<li><strong>상태 모니터링</strong>: 등록된 서비스의 상태를 추적할 수 있습니다.</li>
<li><strong>DNS 통합</strong>: 서비스를 DNS 이름으로 찾을 수 있으며, API를 통해 서비스 상태를 조회할 수 있습니다.</li>
</ul>
</li>
<li><strong>Eureka 대신 사용하는 이유</strong>:<ul>
<li>AWS 네이티브 서비스로 다른 AWS 서비스와 쉽게 통합 가능.</li>
<li>서버리스 아키텍처나 컨테이너화된 환경에서 서비스 디스커버리 및 트래픽 관리를 간편하게 설정할 수 있음.</li>
</ul>
</li>
</ul>
<h4 id="2-aws-app-mesh"><strong>2. AWS App Mesh</strong></h4>
<ul>
<li><strong>역할</strong>: <strong>App Mesh</strong>는 마이크로서비스 간의 <strong>통신을 관리</strong>하는 서비스 메시(Service Mesh) 솔루션입니다. 서비스 간 통신을 표준화하고, <strong>트래픽 제어</strong>, <strong>모니터링</strong> 및 <strong>서비스 디스커버리</strong> 기능을 제공합니다.</li>
<li><strong>기능</strong>:<ul>
<li><strong>서비스 디스커버리</strong>: 각 서비스가 다른 서비스와 통신할 수 있도록 관리.</li>
<li><strong>트래픽 관리</strong>: 서비스 간의 트래픽을 미세하게 제어하고, 장애 발생 시 자동 복구.</li>
<li><strong>모니터링 및 로깅</strong>: 서비스 간의 통신을 추적하고 모니터링하여 성능 문제를 진단할 수 있음.</li>
</ul>
</li>
<li><strong>Eureka 대신 사용하는 이유</strong>:<ul>
<li><strong>서비스 메시</strong> 기능을 제공하여, 마이크로서비스 간의 통신을 더 세밀하게 제어할 수 있음.</li>
<li>복잡한 네트워크 토폴로지를 쉽게 관리할 수 있어 대규모 마이크로서비스 아키텍처에 적합.</li>
</ul>
</li>
</ul>
<h4 id="3-elastic-load-balancing-albnlb"><strong>3. Elastic Load Balancing (ALB/NLB)</strong></h4>
<ul>
<li><strong>역할</strong>: <strong>ALB (Application Load Balancer)</strong>와 <strong>NLB (Network Load Balancer)</strong>는 <strong>로드 밸런싱</strong>과 <strong>트래픽 분산</strong> 기능을 제공합니다. 각 마이크로서비스를 <strong>타겟 그룹</strong>으로 묶어 트래픽을 자동으로 라우팅할 수 있습니다.</li>
<li><strong>기능</strong>:<ul>
<li><strong>서비스 디스커버리</strong>: <strong>ALB</strong>는 컨테이너 기반 서비스에 대해 <strong>타겟 그룹</strong>을 설정하고, <strong>동적으로 서비스 인스턴스를 등록</strong>하여 트래픽을 분산시킵니다.</li>
<li><strong>HTTP/HTTPS 라우팅</strong>: ALB는 HTTP 기반 트래픽에 대한 <strong>라우팅 규칙</strong>을 설정할 수 있습니다.</li>
</ul>
</li>
<li><strong>Eureka 대신 사용하는 이유</strong>:<ul>
<li>특정 요청을 다양한 마이크로서비스로 분산시킬 수 있어, Eureka 없이도 서비스 디스커버리가 가능.</li>
<li><strong>AWS ECS</strong> 또는 <strong>EKS</strong>와 자연스럽게 통합되어 컨테이너 환경에서 사용하기에 적합.</li>
</ul>
</li>
</ul>
<h4 id="4-route-53-dns-기반-서비스-디스커버리"><strong>4. Route 53 (DNS 기반 서비스 디스커버리)</strong></h4>
<ul>
<li><strong>역할</strong>: <strong>Route 53</strong>을 사용하면 <strong>DNS 기반의 서비스 디스커버리</strong>를 구현할 수 있습니다. 각 마이크로서비스에 대해 별도의 <strong>DNS 이름</strong>을 생성하고, 서비스 간 통신을 DNS 이름을 통해 해결할 수 있습니다.</li>
<li><strong>기능</strong>:<ul>
<li><strong>서비스 디스커버리</strong>: 마이크로서비스마다 고유한 DNS 이름을 부여하여 서비스 간 통신을 쉽게 할 수 있습니다.</li>
<li><strong>헬스 체크</strong>: Route 53은 DNS 요청을 처리할 때 서비스의 상태를 체크하고, 장애가 발생한 경우 다른 인스턴스에 트래픽을 분배할 수 있습니다.</li>
</ul>
</li>
<li><strong>Eureka 대신 사용하는 이유</strong>:<ul>
<li><strong>DNS 기반</strong>의 간단한 서비스 디스커버리를 제공.</li>
<li>Eureka와 같은 복잡한 설정 없이도 AWS 네이티브 방식으로 쉽게 사용할 수 있음.</li>
</ul>
</li>
</ul>
<hr>
<h3 id="aws-대체-서비스-사용-시-아키텍처-구성"><strong>AWS 대체 서비스 사용 시 아키텍처 구성</strong></h3>
<h4 id="1-aws-cloud-map-기반-아키텍처"><strong>1. AWS Cloud Map 기반 아키텍처</strong></h4>
<ol>
<li><strong>각 서비스</strong>를 <strong>Cloud Map</strong>에 등록.</li>
<li>각 마이크로서비스는 <strong>DNS 이름</strong>을 통해 다른 서비스에 접근.</li>
<li>ALB와 <strong>ECS 서비스</strong>를 연계해 <strong>동적으로 서비스 인스턴스를 등록</strong>하고 로드 밸런싱을 수행.</li>
</ol>
<h4 id="2-app-mesh-기반-아키텍처"><strong>2. App Mesh 기반 아키텍처</strong></h4>
<ol>
<li>각 서비스는 <strong>App Mesh</strong>에 의해 통제되고, 서비스 간 통신을 중앙에서 관리.</li>
<li><strong>서비스 메시</strong>로 <strong>트래픽 라우팅, 장애 복구, 로깅</strong>을 관리.</li>
<li>서비스는 HTTP, gRPC, TCP 등 다양한 프로토콜을 사용할 수 있으며, 서비스 통신에 대한 보안과 모니터링도 강화.</li>
</ol>
<h4 id="3-alb-기반-아키텍처"><strong>3. ALB 기반 아키텍처</strong></h4>
<ol>
<li>각 마이크로서비스는 <strong>타겟 그룹</strong>으로 설정하고, <strong>ALB</strong>가 트래픽을 자동으로 분배.</li>
<li><strong>헬스 체크</strong>와 <strong>스케일링</strong>을 통해 트래픽에 맞게 서비스 인스턴스를 동적으로 조절.</li>
<li><strong>Route 53</strong>과 연동하여 <strong>도메인 기반 서비스 디스커버리</strong>를 구현 가능.</li>
</ol>
<hr>
<h3 id="결론"><strong>결론</strong></h3>
<p>Spring Cloud Eureka를 사용하지 않고도 <strong>AWS Cloud Map</strong>, <strong>App Mesh</strong>, <strong>Elastic Load Balancer(ALB)</strong>, <strong>Route 53</strong>과 같은 AWS 네이티브 서비스를 사용해 서비스 디스커버리 및 로드 밸런싱을 구현할 수 있습니다. <strong>ECS와 EKS</strong>에서 이러한 서비스를 활용하면 Eureka 없이도 확장 가능하고 신뢰성 높은 마이크로서비스 아키텍처를 구축할 수 있습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[LMS를 마이크로서비스 설계로 구축 시 고려할 것]]></title>
            <link>https://velog.io/@captain-yun/LMS%EB%A5%BC-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%84%A4%EA%B3%84%EB%A1%9C-%EA%B5%AC%EC%B6%95-%EC%8B%9C-%EA%B3%A0%EB%A0%A4%ED%95%A0-%EA%B2%83</link>
            <guid>https://velog.io/@captain-yun/LMS%EB%A5%BC-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%84%A4%EA%B3%84%EB%A1%9C-%EA%B5%AC%EC%B6%95-%EC%8B%9C-%EA%B3%A0%EB%A0%A4%ED%95%A0-%EA%B2%83</guid>
            <pubDate>Sun, 20 Oct 2024 10:29:18 GMT</pubDate>
            <description><![CDATA[<p><strong>Spring Boot</strong>를 이용하여 <strong>마이크로서비스 아키텍처</strong>를 구현하는 방법은 여러 개의 독립된 서비스를 구축하고 이를 조화롭게 통합하는 방식입니다. 각 서비스는 독립적으로 배포되고, 서로 통신하며 확장 가능합니다. <strong>LMS(Learning Management System)</strong>를 예시로 구체적인 마이크로서비스 구성 방법을 설명하겠습니다.</p>
<h3 id="1-마이크로서비스-설계의-기본-원칙"><strong>1. 마이크로서비스 설계의 기본 원칙</strong></h3>
<ul>
<li><strong>기능별로 서비스 분리</strong>: LMS의 주요 기능을 독립된 서비스로 분리합니다. 예를 들어, 사용자 관리, 수업 관리, 평가 관리 등의 기능을 각기 다른 마이크로서비스로 구현합니다.</li>
<li><strong>독립적인 데이터베이스</strong>: 각 마이크로서비스는 자신의 데이터베이스를 사용하여 <strong>데이터베이스 간의 결합을 피하고</strong> 독립적으로 확장할 수 있습니다.</li>
<li><strong>API 통신</strong>: 각 마이크로서비스는 <strong>REST API</strong> 또는 <strong>gRPC</strong>를 통해 서로 통신합니다.</li>
<li><strong>확장성 및 장애 격리</strong>: 각 서비스는 독립적으로 확장되며, 하나의 서비스에 문제가 생기더라도 전체 시스템에 영향을 주지 않습니다.</li>
</ul>
<hr>
<h3 id="2-서비스-구성-예시-lms를-기준으로"><strong>2. 서비스 구성 예시 (LMS를 기준으로)</strong></h3>
<h4 id="2-1-사용자-관리-서비스-user-service"><strong>2-1. 사용자 관리 서비스 (User Service)</strong></h4>
<ul>
<li><strong>설명</strong>: 사용자 관리 서비스는 회원가입, 로그인, 권한 관리를 담당합니다.</li>
<li><strong>구현 방법</strong>: Spring Boot로 RESTful API를 구현하고, 사용자 정보는 <strong>Amazon RDS</strong> 또는 <strong>DynamoDB</strong>에 저장합니다.</li>
<li><strong>주요 API</strong>:<ul>
<li><code>POST /users/register</code>: 사용자 회원가입.</li>
<li><code>POST /users/login</code>: 사용자 로그인.</li>
<li><code>GET /users/{id}</code>: 특정 사용자의 정보 조회.</li>
</ul>
</li>
</ul>
<h4 id="2-2-강의-관리-서비스-course-service"><strong>2-2. 강의 관리 서비스 (Course Service)</strong></h4>
<ul>
<li><strong>설명</strong>: 강의 생성, 강의 목록 조회, 강의 세부 정보 조회 등의 기능을 담당합니다.</li>
<li><strong>구현 방법</strong>: 강의 정보를 위한 별도의 <strong>Spring Boot 마이크로서비스</strong>를 만들고, 데이터는 <strong>RDS</strong>에 저장합니다.</li>
<li><strong>주요 API</strong>:<ul>
<li><code>POST /courses</code>: 새로운 강의 생성.</li>
<li><code>GET /courses</code>: 강의 목록 조회.</li>
<li><code>GET /courses/{id}</code>: 특정 강의 정보 조회.</li>
</ul>
</li>
</ul>
<h4 id="2-3-수강-관리-서비스-enrollment-service"><strong>2-3. 수강 관리 서비스 (Enrollment Service)</strong></h4>
<ul>
<li><strong>설명</strong>: 사용자가 강의를 수강 신청하거나, 수강 이력을 관리하는 기능을 제공합니다.</li>
<li><strong>구현 방법</strong>: 수강 관리 관련 데이터를 별도로 관리하며, 사용자와 강의 서비스와 통신.</li>
<li><strong>주요 API</strong>:<ul>
<li><code>POST /enrollments</code>: 수강 신청.</li>
<li><code>GET /enrollments/{userId}</code>: 특정 사용자의 수강 목록 조회.</li>
</ul>
</li>
</ul>
<h4 id="2-4-평가-관리-서비스-evaluation-service"><strong>2-4. 평가 관리 서비스 (Evaluation Service)</strong></h4>
<ul>
<li><strong>설명</strong>: LMS에서 수강생에 대한 평가 및 점수 관리.</li>
<li><strong>구현 방법</strong>: 평가 기록 및 성적 관리를 위한 별도의 서비스로 분리. 학습 평가와 점수 데이터를 저장.</li>
<li><strong>주요 API</strong>:<ul>
<li><code>POST /evaluations</code>: 평가 기록 저장.</li>
<li><code>GET /evaluations/{courseId}</code>: 특정 강의의 평가 정보 조회.</li>
</ul>
</li>
</ul>
<hr>
<h3 id="3-마이크로서비스-간-통신"><strong>3. 마이크로서비스 간 통신</strong></h3>
<h4 id="3-1-rest-api-통신"><strong>3-1. REST API 통신</strong></h4>
<p>각 마이크로서비스는 <strong>HTTP REST API</strong>를 통해 통신합니다. Spring Boot는 <strong>Spring MVC</strong>를 사용하여 RESTful API를 쉽게 구현할 수 있습니다.</p>
<ul>
<li><strong>예시</strong>: 사용자가 로그인한 후, 강의 목록을 요청할 때 <strong>User Service</strong>에서 JWT 토큰을 발급하고, <strong>Course Service</strong>에 API 요청을 보냅니다.</li>
</ul>
<h4 id="3-2-메시지-브로커를-통한-통신-sqssns-또는-kafka"><strong>3-2. 메시지 브로커를 통한 통신 (SQS/SNS 또는 Kafka)</strong></h4>
<p>비동기 작업(예: 수강 신청, 평가 기록 저장)은 <strong>메시지 브로커</strong>를 사용해 처리할 수 있습니다.</p>
<ul>
<li><strong>예시</strong>: 사용자가 수강 신청을 하면, <strong>Enrollment Service</strong>가 SQS에 메시지를 넣고, <strong>Course Service</strong>가 이를 처리하여 강의 상태를 업데이트.</li>
</ul>
<hr>
<h3 id="4-서비스-디스커버리-및-로드밸런싱"><strong>4. 서비스 디스커버리 및 로드밸런싱</strong></h3>
<h4 id="4-1-spring-cloud-eureka-서비스-디스커버리"><strong>4-1. Spring Cloud Eureka (서비스 디스커버리)</strong></h4>
<ul>
<li><strong>Eureka</strong>를 사용하면 각 마이크로서비스가 동적으로 등록되고 다른 서비스에서 쉽게 발견할 수 있습니다. 이를 통해 마이크로서비스의 IP 주소가 변경되더라도 API 통신이 원활하게 이루어집니다.</li>
</ul>
<h4 id="4-2-spring-cloud-gateway-또는-api-gateway"><strong>4-2. Spring Cloud Gateway 또는 API Gateway</strong></h4>
<ul>
<li><strong>API Gateway</strong>를 사용하면 외부에서 오는 모든 요청을 중앙에서 관리하고, 각각의 마이크로서비스로 요청을 라우팅할 수 있습니다. <strong>Spring Cloud Gateway</strong>를 사용해도 되고, AWS <strong>API Gateway</strong>를 사용할 수도 있습니다.</li>
</ul>
<hr>
<h3 id="5-데이터베이스-설계"><strong>5. 데이터베이스 설계</strong></h3>
<p>마이크로서비스 아키텍처에서는 <strong>각 서비스가 독립된 데이터베이스</strong>를 사용하여 데이터베이스 간의 결합도를 줄입니다. 데이터 일관성은 <strong>이벤트 기반</strong>으로 유지할 수 있습니다.</p>
<h4 id="5-1-rds-사용"><strong>5-1. RDS 사용</strong></h4>
<ul>
<li><strong>Course Service</strong>나 <strong>User Service</strong>와 같은 중요한 데이터는 <strong>Amazon RDS</strong>를 사용하여 관리합니다.</li>
<li>각 서비스는 자신의 데이터베이스를 사용하므로, 다른 서비스와의 데이터 종속성이 없도록 설계합니다.</li>
</ul>
<h4 id="5-2-dynamodb-사용"><strong>5-2. DynamoDB 사용</strong></h4>
<ul>
<li>빠르게 조회해야 하거나 비정형 데이터를 저장해야 하는 경우, <strong>DynamoDB</strong>를 사용하여 데이터를 관리합니다.</li>
<li>예를 들어, <strong>사용자 활동 로그</strong>나 <strong>강의 시청 기록</strong>과 같은 비정형 데이터를 DynamoDB에 저장할 수 있습니다.</li>
</ul>
<hr>
<h3 id="6-보안-및-인증"><strong>6. 보안 및 인증</strong></h3>
<h4 id="6-1-amazon-cognito"><strong>6-1. Amazon Cognito</strong></h4>
<ul>
<li>사용자 인증 및 권한 관리는 <strong>Amazon Cognito</strong>를 통해 처리합니다. 각 마이크로서비스는 <strong>JWT 토큰</strong>을 기반으로 사용자의 권한을 확인하고, API 요청을 처리할 수 있습니다.</li>
</ul>
<h4 id="6-2-iam-역할-및-권한"><strong>6-2. IAM 역할 및 권한</strong></h4>
<ul>
<li>각 마이크로서비스는 <strong>IAM 역할</strong>을 사용하여 필요한 AWS 리소스에 접근합니다. 예를 들어, <strong>Course Service</strong>는 강의 자료가 저장된 <strong>S3 버킷</strong>에 접근할 수 있는 역할을 할당받습니다.</li>
</ul>
<hr>
<h3 id="7-모니터링-및-로깅"><strong>7. 모니터링 및 로깅</strong></h3>
<h4 id="7-1-amazon-cloudwatch"><strong>7-1. Amazon CloudWatch</strong></h4>
<ul>
<li>모든 마이크로서비스는 <strong>CloudWatch</strong>에 로그를 저장하여 실시간으로 모니터링할 수 있습니다. 각 마이크로서비스의 <strong>CPU, 메모리 사용량</strong>을 모니터링하고 <strong>경고 알람</strong>을 설정합니다.</li>
</ul>
<h4 id="7-2-aws-x-ray-분산-추적"><strong>7-2. AWS X-Ray (분산 추적)</strong></h4>
<ul>
<li>AWS <strong>X-Ray</strong>를 사용하여 마이크로서비스 간의 호출 경로와 응답 시간을 추적할 수 있습니다. 각 마이크로서비스 간의 트랜잭션을 추적하여 <strong>성능 문제</strong>나 <strong>병목 현상</strong>을 파악합니다.</li>
</ul>
<hr>
<h3 id="8-확장-및-배포-전략"><strong>8. 확장 및 배포 전략</strong></h3>
<h4 id="8-1-ecs와-오토스케일링"><strong>8-1. ECS와 오토스케일링</strong></h4>
<ul>
<li>각 마이크로서비스는 <strong>ECS</strong>에서 구동되며, <strong>오토스케일링</strong>을 통해 트래픽에 따라 자동으로 확장 또는 축소됩니다. 예를 들어, 사용자가 몰릴 때 <strong>Course Service</strong>와 <strong>User Service</strong>의 컨테이너를 자동으로 확장하여 서비스 가용성을 보장합니다.</li>
</ul>
<h4 id="8-2-cicd-파이프라인"><strong>8-2. CI/CD 파이프라인</strong></h4>
<ul>
<li><strong>CodePipeline</strong>이나 <strong>Jenkins</strong>와 같은 도구를 사용해 각 마이크로서비스의 CI/CD 파이프라인을 구축합니다. 이를 통해 코드가 업데이트될 때마다 자동으로 빌드, 테스트, 배포가 이루어지도록 설정합니다.</li>
</ul>
<hr>
<h3 id="결론"><strong>결론</strong></h3>
<p>Spring Boot를 사용한 마이크로서비스 아키텍처는 각 서비스를 독립적으로 운영하고 확장 가능하게 설계하는 것이 핵심입니다. <strong>LMS</strong>를 구현할 때는 <strong>사용자 관리</strong>, <strong>강의 관리</strong>, <strong>평가 관리</strong> 등의 기능을 마이크로서비스로 나누고, 이를 <strong>ECS</strong>에서 컨테이너화하여 관리합니다. 각 서비스 간의 통신은 <strong>REST API</strong> 또는 <strong>메시지 브로커</strong>를 통해 이루어지고, <strong>Cognito</strong>를 통해 사용자 인증을 처리하며, <strong>RDS</strong>와 <strong>DynamoDB</strong>를 데이터 저장소로 활용하는 것이 일반적인 패턴입니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ECS를 사용한 LMS 서비스 아키텍처]]></title>
            <link>https://velog.io/@captain-yun/ECS%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-LMS-%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98</link>
            <guid>https://velog.io/@captain-yun/ECS%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-LMS-%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98</guid>
            <pubDate>Sun, 20 Oct 2024 10:28:36 GMT</pubDate>
            <description><![CDATA[<p>ECS를 사용하여 <strong>LMS(Learning Management System)</strong> 서비스를 구축할 때, 프론트엔드와 백엔드의 아키텍처를 어떻게 구성할지에 대한 베스트 프랙티스를 설명해드릴게요. 이 아키텍처는 <strong>확장성</strong>, <strong>보안성</strong>, <strong>유지보수성</strong>을 고려한 구조입니다.</p>
<h3 id="1-전체-아키텍처-구성"><strong>1. 전체 아키텍처 구성</strong></h3>
<p>LMS는 일반적으로 <strong>프론트엔드(사용자 인터페이스)</strong>와 <strong>백엔드(데이터 처리 및 로직)</strong>로 나뉘며, 두 부분이 서로 통신하며 작동합니다. 프론트엔드는 사용자 요청을 받아 API를 호출하고, 백엔드는 비즈니스 로직을 처리하며 데이터베이스에 저장된 정보를 다룹니다.</p>
<h4 id="1-1-주요-컴포넌트"><strong>1-1. 주요 컴포넌트</strong></h4>
<ul>
<li><strong>Amazon ECS</strong>: 애플리케이션의 컨테이너 오케스트레이션 및 배포.</li>
<li><strong>Application Load Balancer (ALB)</strong>: 트래픽을 여러 ECS 컨테이너에 부하 분산.</li>
<li><strong>Amazon S3</strong>: 정적 콘텐츠(이미지, HTML, CSS, JS 파일)를 저장하고 서빙.</li>
<li><strong>Amazon CloudFront</strong>: S3에 있는 정적 콘텐츠를 전 세계에 빠르게 배포.</li>
<li><strong>Amazon RDS</strong>: 백엔드 데이터베이스로 관계형 DB 사용.</li>
<li><strong>Amazon DynamoDB</strong>: 비정형 데이터를 위한 NoSQL 데이터베이스.</li>
<li><strong>Amazon Cognito</strong>: 사용자 인증 및 권한 관리.</li>
<li><strong>Amazon CloudWatch</strong>: 서비스 모니터링 및 로그 관리.</li>
</ul>
<hr>
<h3 id="2-프론트엔드-아키텍처"><strong>2. 프론트엔드 아키텍처</strong></h3>
<h4 id="2-1-구성"><strong>2-1. 구성</strong></h4>
<ul>
<li><strong>Amazon S3 + CloudFront</strong>: 프론트엔드 애플리케이션은 보통 정적 파일로 구성됩니다(HTML, CSS, JS). 이 파일들은 <strong>Amazon S3</strong>에 호스팅되고, <strong>CloudFront</strong>를 통해 글로벌 사용자에게 빠르게 제공됩니다. CloudFront는 엣지 로케이션을 통해 콘텐츠 배포 속도를 향상시킵니다.</li>
</ul>
<h4 id="2-2-베스트-프랙티스"><strong>2-2. 베스트 프랙티스</strong></h4>
<ul>
<li><strong>S3 버킷</strong>에 <strong>프론트엔드 코드</strong>를 업로드하고 <strong>정적 웹사이트 호스팅</strong>을 활성화합니다.</li>
<li><strong>CloudFront</strong>로 <strong>S3 버킷</strong>을 연결하여 <strong>콘텐츠 캐싱</strong>을 통해 사용자 응답 속도를 높입니다.</li>
<li><strong>HTTPS 사용</strong>: CloudFront와 S3 사이에 <strong>HTTPS</strong>를 적용하여 사용자 데이터를 안전하게 보호합니다.</li>
</ul>
<h4 id="2-3-요청-흐름"><strong>2-3. 요청 흐름</strong></h4>
<ol>
<li>사용자가 브라우저를 통해 LMS에 접속.</li>
<li><strong>CloudFront</strong>가 요청을 처리하고, 정적 콘텐츠(HTML, CSS, JS)를 <strong>S3</strong>에서 가져와 사용자에게 전송.</li>
</ol>
<hr>
<h3 id="3-백엔드-아키텍처"><strong>3. 백엔드 아키텍처</strong></h3>
<h4 id="3-1-구성"><strong>3-1. 구성</strong></h4>
<ul>
<li><strong>Amazon ECS</strong>: 백엔드 애플리케이션은 ECS에서 <strong>마이크로서비스</strong> 형태로 구동됩니다. 서비스 간의 로직을 분리하여 관리할 수 있습니다(예: 사용자 관리 서비스, 강의 관리 서비스 등).</li>
<li><strong>Application Load Balancer (ALB)</strong>: <strong>ALB</strong>는 백엔드 ECS 서비스 앞에 위치해 클라이언트 요청을 여러 ECS 태스크에 <strong>부하 분산</strong>시킵니다.</li>
<li><strong>Amazon RDS 또는 DynamoDB</strong>: 관계형 데이터는 <strong>RDS</strong>를, 비정형 데이터(예: 로그, 학습 활동 기록 등)는 <strong>DynamoDB</strong>를 사용합니다.</li>
</ul>
<h4 id="3-2-베스트-프랙티스"><strong>3-2. 베스트 프랙티스</strong></h4>
<ul>
<li><strong>ALB 설정</strong>: 각 <strong>ECS 서비스</strong>(예: 사용자 관리, 수업 관리)에 대한 엔드포인트를 <strong>ALB</strong>로 연결하여 <strong>트래픽을 효율적으로 분산</strong>시킵니다.</li>
<li><strong>ECS 오토스케일링</strong>: ECS에서 자동으로 컨테이너를 확장하거나 축소하여 <strong>트래픽 증가에 대응</strong>할 수 있습니다.</li>
<li><strong>백엔드 마이크로서비스</strong>: LMS의 각 기능(예: 사용자 인증, 수업 관리, 학습 기록)을 독립된 마이크로서비스로 분리하여 확장성 및 유지보수성을 높입니다.</li>
</ul>
<h4 id="3-3-요청-흐름"><strong>3-3. 요청 흐름</strong></h4>
<ol>
<li>사용자가 로그인 요청을 하거나 데이터를 요청하면, <strong>ALB</strong>가 요청을 백엔드의 <strong>ECS 서비스</strong>로 전달.</li>
<li>백엔드 서비스가 <strong>RDS</strong> 또는 <strong>DynamoDB</strong>와 상호작용하여 데이터를 처리하고, 결과를 반환.</li>
</ol>
<hr>
<h3 id="4-사용자-인증-및-권한-관리"><strong>4. 사용자 인증 및 권한 관리</strong></h3>
<h4 id="4-1-amazon-cognito"><strong>4-1. Amazon Cognito</strong></h4>
<p>LMS는 일반적으로 <strong>사용자 인증 및 권한 관리</strong>가 필요합니다. <strong>Amazon Cognito</strong>를 사용하면 <strong>사용자 로그인</strong>, <strong>회원가입</strong>, <strong>권한 관리</strong>를 간편하게 처리할 수 있습니다.</p>
<h4 id="4-2-베스트-프랙티스"><strong>4-2. 베스트 프랙티스</strong></h4>
<ul>
<li><strong>Cognito 사용자 풀</strong>을 생성하여 <strong>OAuth2.0</strong>, <strong>SNS 로그인</strong>(Facebook, Google 등)과 같은 인증 방식을 지원합니다.</li>
<li><strong>ALB</strong>와 통합하여, 특정 API에 대한 접근을 <strong>인증된 사용자만 허용</strong>하도록 설정합니다.</li>
<li><strong>JWT 토큰</strong> 기반의 인증을 사용하여 <strong>백엔드 API</strong>를 호출할 때 각 사용자 권한을 쉽게 확인할 수 있습니다.</li>
</ul>
<hr>
<h3 id="5-데이터-저장소-아키텍처"><strong>5. 데이터 저장소 아키텍처</strong></h3>
<h4 id="5-1-amazon-rds"><strong>5-1. Amazon RDS</strong></h4>
<p>LMS의 주요 데이터(예: 사용자 정보, 강의 정보)는 <strong>관계형 데이터베이스</strong>로 관리됩니다.</p>
<ul>
<li><strong>베스트 프랙티스</strong>: RDS 인스턴스의 <strong>자동 백업</strong>과 <strong>다중 AZ 배포</strong>를 사용하여 가용성과 복구성을 보장합니다.</li>
</ul>
<h4 id="5-2-amazon-dynamodb"><strong>5-2. Amazon DynamoDB</strong></h4>
<p>비정형 데이터(예: 사용자 활동 로그, 학습 기록 등)는 <strong>DynamoDB</strong>를 사용하여 저장할 수 있습니다.</p>
<ul>
<li><strong>베스트 프랙티스</strong>: <strong>DynamoDB Streams</strong>와 <strong>Lambda</strong>를 연동해 실시간으로 데이터를 처리하거나 이벤트 기반 로직을 구현할 수 있습니다.</li>
</ul>
<hr>
<h3 id="6-모니터링-및-로깅"><strong>6. 모니터링 및 로깅</strong></h3>
<h4 id="6-1-amazon-cloudwatch"><strong>6-1. Amazon CloudWatch</strong></h4>
<ul>
<li><strong>CloudWatch Logs</strong>: ECS에서 발생하는 로그와 애플리케이션의 메트릭을 <strong>CloudWatch</strong>로 수집하여 모니터링하고, 경고를 설정할 수 있습니다.</li>
<li><strong>CloudWatch Alarms</strong>: CPU, 메모리 사용량 또는 특정 서비스의 응답 시간에 대한 알람을 설정하여 자동으로 확장 또는 경고를 받을 수 있습니다.</li>
</ul>
<h4 id="6-2-aws-x-ray"><strong>6-2. AWS X-Ray</strong></h4>
<ul>
<li><strong>AWS X-Ray</strong>: <strong>분산 추적 시스템</strong>을 사용해 여러 마이크로서비스 간의 성능을 추적하고, 성능 문제를 파악할 수 있습니다.</li>
</ul>
<hr>
<h3 id="7-보안-및-iam-설정"><strong>7. 보안 및 IAM 설정</strong></h3>
<h4 id="7-1-iam-정책"><strong>7-1. IAM 정책</strong></h4>
<ul>
<li>ECS와 다른 AWS 서비스 간의 접근 권한을 세분화하여 <strong>최소 권한 원칙</strong>을 따릅니다.</li>
<li><strong>IAM Roles</strong>를 사용해 각 ECS 태스크에서 필요한 리소스만 접근하도록 제한합니다.</li>
</ul>
<h4 id="7-2-https-설정"><strong>7-2. HTTPS 설정</strong></h4>
<ul>
<li>ALB에 <strong>SSL 인증서</strong>를 적용해 <strong>HTTPS 트래픽</strong>만 허용하도록 설정하여 데이터를 보호합니다.</li>
<li>CloudFront에서 정적 콘텐츠도 <strong>HTTPS</strong>로 전송되도록 설정합니다.</li>
</ul>
<hr>
<h3 id="8-확장성-및-비용-최적화"><strong>8. 확장성 및 비용 최적화</strong></h3>
<h4 id="8-1-오토스케일링"><strong>8-1. 오토스케일링</strong></h4>
<ul>
<li><strong>ECS Auto Scaling</strong>: 트래픽 증가에 맞춰 ECS 컨테이너를 자동으로 확장하고, 트래픽이 줄어들면 자동으로 축소하여 <strong>비용 효율성</strong>을 높입니다.</li>
<li><strong>RDS Auto Scaling</strong>: RDS에서도 읽기 전용 복제본을 추가하거나 인스턴스 크기를 조정하여 데이터베이스 성능을 향상시킬 수 있습니다.</li>
</ul>
<h4 id="8-2-비용-최적화"><strong>8-2. 비용 최적화</strong></h4>
<ul>
<li><strong>Reserved Instances</strong> 또는 <strong>Savings Plans</strong>를 통해 장기적으로 EC2 비용을 절감할 수 있습니다.</li>
<li><strong>S3 Intelligent-Tiering</strong>을 사용해 사용 빈도가 낮은 파일을 자동으로 저렴한 스토리지로 옮겨 비용을 절감할 수 있습니다.</li>
</ul>
<hr>
<h3 id="요약"><strong>요약</strong></h3>
<p>LMS 서비스를 구축할 때, 프론트엔드는 <strong>S3와 CloudFront</strong>를 사용해 정적 파일을 서빙하고, 백엔드는 <strong>ECS</strong>와 <strong>ALB</strong>로 구성해 <strong>마이크로서비스 아키텍처</strong>를 구현할 수 있습니다. 사용자 인증은 <strong>Cognito</strong>로 처리하고, 데이터는 <strong>RDS</strong>와 <strong>DynamoDB</strong>를 활용해 저장합니다. <strong>CloudWatch</strong>와 <strong>X-Ray</strong>를 통해 모니터링하고 <strong>오토스케일링</strong>으로 트래픽 변화에 유연하게 대응하면서 비용을 절감할 수 있습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[LMS 주요 기능]]></title>
            <link>https://velog.io/@captain-yun/LMS-%EC%A3%BC%EC%9A%94-%EA%B8%B0%EB%8A%A5</link>
            <guid>https://velog.io/@captain-yun/LMS-%EC%A3%BC%EC%9A%94-%EA%B8%B0%EB%8A%A5</guid>
            <pubDate>Sun, 20 Oct 2024 10:27:29 GMT</pubDate>
            <description><![CDATA[<p><strong>LMS(Learning Management System)</strong>는 교육 콘텐츠를 관리하고 학습자와 교육자 간의 상호작용을 돕는 플랫폼입니다. 주요 기능은 <strong>학습 관리</strong>, <strong>과제 제출</strong>, <strong>성적 평가</strong>, <strong>퀴즈 및 시험</strong>, <strong>실시간 강의</strong>, <strong>게시판</strong> 등 다양한 요소를 포함합니다. 이러한 기능들을 구현하기 위해서는 <strong>백엔드 개발</strong>, <strong>프론트엔드 개발</strong>, <strong>데이터베이스 설계</strong>, <strong>인증 및 보안</strong> 등 여러 기술적인 역량이 필요합니다.</p>
<h3 id="lms의-주요-기능-및-필요한-역량"><strong>LMS의 주요 기능 및 필요한 역량</strong></h3>
<hr>
<h3 id="1-사용자-관리-user-management"><strong>1. 사용자 관리 (User Management)</strong></h3>
<h4 id="기능-설명"><strong>기능 설명</strong>:</h4>
<ul>
<li><strong>회원가입 및 로그인</strong>: 학습자와 강사가 플랫폼에 가입하고 로그인할 수 있어야 합니다.</li>
<li><strong>역할 관리</strong>: 사용자마다 다른 권한을 설정할 수 있어야 합니다 (예: 관리자, 강사, 학생).</li>
<li><strong>비밀번호 재설정</strong>: 사용자가 비밀번호를 잊었을 때 재설정할 수 있도록 지원.</li>
</ul>
<h4 id="구현에-필요한-역량"><strong>구현에 필요한 역량</strong>:</h4>
<ul>
<li><strong>백엔드 개발 (Spring Boot 등)</strong>: 사용자 정보 저장, 인증 및 권한 관리 로직 구현.</li>
<li><strong>프론트엔드 개발 (React, Vue)</strong>: 로그인/회원가입 UI 및 사용자 역할에 따라 다른 화면 제공.</li>
<li><strong>OAuth2.0 / JWT 인증</strong>: 사용자 인증 및 토큰 기반의 권한 관리.</li>
<li><strong>AWS Cognito</strong>: 사용자 관리 및 인증 서비스를 간편하게 구축.</li>
</ul>
<hr>
<h3 id="2-강의-관리-course-management"><strong>2. 강의 관리 (Course Management)</strong></h3>
<h4 id="기능-설명-1"><strong>기능 설명</strong>:</h4>
<ul>
<li><strong>강의 생성 및 수정</strong>: 강사가 새로운 강의를 만들고 수정할 수 있어야 합니다.</li>
<li><strong>강의 등록</strong>: 학생들이 강의에 등록하고 수강할 수 있어야 합니다.</li>
<li><strong>강의 목록 및 세부정보 제공</strong>: 학생들이 강의 목록을 보고 세부 내용을 확인할 수 있어야 합니다.</li>
</ul>
<h4 id="구현에-필요한-역량-1"><strong>구현에 필요한 역량</strong>:</h4>
<ul>
<li><strong>RESTful API 설계</strong>: 강의 생성, 조회, 수정, 삭제 등의 API 구축.</li>
<li><strong>데이터베이스 설계</strong>: 강의 정보 및 수강 정보를 효율적으로 저장하고 관리할 수 있도록 데이터베이스 구조 설계 (예: RDS, DynamoDB).</li>
<li><strong>UI/UX 설계</strong>: 사용자가 쉽게 강의를 찾고 등록할 수 있도록 UI 설계 및 프론트엔드 구현.</li>
<li><strong>ECS 및 RDS 사용</strong>: 백엔드에서 데이터베이스와 연동하여 강의 정보를 관리.</li>
</ul>
<hr>
<h3 id="3-학습-콘텐츠-관리-content-management"><strong>3. 학습 콘텐츠 관리 (Content Management)</strong></h3>
<h4 id="기능-설명-2"><strong>기능 설명</strong>:</h4>
<ul>
<li><strong>강의 자료 업로드</strong>: 강사들이 학습 자료(동영상, PDF, 이미지)를 업로드할 수 있어야 합니다.</li>
<li><strong>학습 자료 제공</strong>: 학생들이 강의 중 언제든지 학습 자료에 접근할 수 있어야 합니다.</li>
</ul>
<h4 id="구현에-필요한-역량-2"><strong>구현에 필요한 역량</strong>:</h4>
<ul>
<li><strong>AWS S3</strong>: 파일 업로드 및 정적 콘텐츠 저장.</li>
<li><strong>백엔드 API 개발</strong>: 학습 자료 업로드 및 다운로드 기능 제공.</li>
<li><strong>CloudFront</strong>: 전 세계적으로 콘텐츠를 빠르게 배포하고 사용자에게 전달.</li>
<li><strong>권한 관리</strong>: 학습 자료에 대한 접근 권한 제어(예: 학생만 자료 열람 가능).</li>
</ul>
<hr>
<h3 id="4-과제-제출-및-평가-assignment-submission--grading"><strong>4. 과제 제출 및 평가 (Assignment Submission &amp; Grading)</strong></h3>
<h4 id="기능-설명-3"><strong>기능 설명</strong>:</h4>
<ul>
<li><strong>과제 제출 기능</strong>: 학생들이 과제를 온라인으로 제출할 수 있어야 합니다.</li>
<li><strong>과제 평가 및 피드백 제공</strong>: 강사가 제출된 과제를 평가하고, 피드백을 제공할 수 있어야 합니다.</li>
</ul>
<h4 id="구현에-필요한-역량-3"><strong>구현에 필요한 역량</strong>:</h4>
<ul>
<li><strong>파일 업로드/다운로드</strong>: 과제 제출 시 파일 업로드 기능 구현 (S3 사용 가능).</li>
<li><strong>평가 시스템 구축</strong>: 백엔드에서 과제를 관리하고, 성적을 저장하는 시스템 구축.</li>
<li><strong>데이터베이스 설계</strong>: 제출된 과제 및 성적 정보를 저장하는 데이터베이스 구조 설계.</li>
</ul>
<hr>
<h3 id="5-퀴즈-및-시험-quiz--exam"><strong>5. 퀴즈 및 시험 (Quiz &amp; Exam)</strong></h3>
<h4 id="기능-설명-4"><strong>기능 설명</strong>:</h4>
<ul>
<li><strong>온라인 퀴즈 생성</strong>: 강사가 퀴즈를 만들고, 학생들이 온라인으로 응시할 수 있어야 합니다.</li>
<li><strong>자동 채점</strong>: 퀴즈를 자동으로 채점하여 성적을 제공할 수 있어야 합니다.</li>
<li><strong>결과 피드백</strong>: 학생에게 바로 결과와 피드백을 제공.</li>
</ul>
<h4 id="구현에-필요한-역량-4"><strong>구현에 필요한 역량</strong>:</h4>
<ul>
<li><strong>퀴즈 생성 및 관리</strong>: 백엔드에서 문제 출제, 답안 관리 로직 구현.</li>
<li><strong>자동 채점 알고리즘 개발</strong>: 선택형 문제에 대한 자동 채점 기능 구현.</li>
<li><strong>UI/UX</strong>: 학생들이 쉽게 퀴즈에 응시하고, 결과를 확인할 수 있는 UI 설계.</li>
</ul>
<hr>
<h3 id="6-실시간-강의-live-lecture"><strong>6. 실시간 강의 (Live Lecture)</strong></h3>
<h4 id="기능-설명-5"><strong>기능 설명</strong>:</h4>
<ul>
<li><strong>실시간 화상 강의</strong>: 강사가 실시간으로 화상 강의를 진행하고, 학생들이 참여할 수 있어야 합니다.</li>
<li><strong>화상 회의 기능</strong>: 학생과 강사가 서로 대화하고 질의응답할 수 있어야 합니다.</li>
</ul>
<h4 id="구현에-필요한-역량-5"><strong>구현에 필요한 역량</strong>:</h4>
<ul>
<li><strong>WebRTC 또는 AWS Chime SDK</strong>: 실시간 화상 회의 기능을 위한 기술.</li>
<li><strong>프론트엔드 실시간 통신</strong>: 실시간 강의를 위한 프론트엔드 실시간 스트리밍 구현.</li>
<li><strong>대역폭 관리 및 스트리밍</strong>: 강의 중 영상 지연을 최소화하기 위한 네트워크 관리.</li>
</ul>
<hr>
<h3 id="7-게시판-및-커뮤니티-기능-discussion-board--community"><strong>7. 게시판 및 커뮤니티 기능 (Discussion Board &amp; Community)</strong></h3>
<h4 id="기능-설명-6"><strong>기능 설명</strong>:</h4>
<ul>
<li><strong>질문과 답변 게시판</strong>: 학생과 강사가 질문하고 답변할 수 있는 공간 제공.</li>
<li><strong>커뮤니티 기능</strong>: 학습자들끼리 소통할 수 있는 커뮤니티 기능 제공.</li>
</ul>
<h4 id="구현에-필요한-역량-6"><strong>구현에 필요한 역량</strong>:</h4>
<ul>
<li><strong>게시판 API 설계</strong>: 게시글 작성, 수정, 삭제, 댓글 등의 API 구축.</li>
<li><strong>데이터베이스 설계</strong>: 게시글 및 댓글 저장을 위한 데이터베이스 구조 설계.</li>
<li><strong>UI/UX</strong>: 사용자 친화적인 게시판 UI 설계.</li>
</ul>
<hr>
<h3 id="8-성적-관리-grade-management"><strong>8. 성적 관리 (Grade Management)</strong></h3>
<h4 id="기능-설명-7"><strong>기능 설명</strong>:</h4>
<ul>
<li><strong>성적 관리 기능</strong>: 강사가 각 학생의 성적을 관리하고, 성적표를 제공할 수 있어야 합니다.</li>
<li><strong>성적 조회</strong>: 학생들이 자신의 성적을 조회할 수 있어야 합니다.</li>
</ul>
<h4 id="구현에-필요한-역량-7"><strong>구현에 필요한 역량</strong>:</h4>
<ul>
<li><strong>백엔드 성적 관리 API</strong>: 성적을 기록하고 관리하는 API 구축.</li>
<li><strong>데이터베이스 설계</strong>: 성적 정보를 저장할 데이터베이스 테이블 설계.</li>
<li><strong>성적 계산 알고리즘</strong>: 성적을 계산하고, 등급을 부여하는 알고리즘 구현.</li>
</ul>
<hr>
<h3 id="9-알림-및-공지-notifications--announcements"><strong>9. 알림 및 공지 (Notifications &amp; Announcements)</strong></h3>
<h4 id="기능-설명-8"><strong>기능 설명</strong>:</h4>
<ul>
<li><strong>이메일 알림</strong>: 새로운 강의 등록, 과제 제출 기한, 공지 사항을 이메일로 알림.</li>
<li><strong>푸시 알림</strong>: 새로운 메시지나 중요한 공지를 푸시 알림으로 전송.</li>
</ul>
<h4 id="구현에-필요한-역량-8"><strong>구현에 필요한 역량</strong>:</h4>
<ul>
<li><strong>AWS SNS 또는 SES</strong>: 이메일과 푸시 알림을 위한 AWS 서비스 사용.</li>
<li><strong>실시간 알림 API 개발</strong>: 강의 변경 사항이나 중요한 공지에 대한 실시간 알림 기능 구현.</li>
</ul>
<hr>
<h3 id="10-보고서-및-통계-reports--analytics"><strong>10. 보고서 및 통계 (Reports &amp; Analytics)</strong></h3>
<h4 id="기능-설명-9"><strong>기능 설명</strong>:</h4>
<ul>
<li><strong>학습 통계 제공</strong>: 각 학생의 학습 시간, 성취도, 강의 수강 진행 상황 등의 통계 제공.</li>
<li><strong>강의 통계</strong>: 특정 강의에 대한 수강생 통계 및 학습 성과 제공.</li>
</ul>
<h4 id="구현에-필요한-역량-9"><strong>구현에 필요한 역량</strong>:</h4>
<ul>
<li><strong>데이터 분석 및 시각화</strong>: 학습 데이터 및 성적 데이터를 분석하고 시각화하는 기능.</li>
<li><strong>백엔드 API 개발</strong>: 통계 데이터를 처리하는 로직과 API 구현.</li>
<li><strong>프론트엔드 차트 라이브러리</strong>: 통계를 시각적으로 표현하기 위한 프론트엔드 차트 라이브러리 사용(예: Chart.js, D3.js).</li>
</ul>
<hr>
<h3 id="정리-필요한-역량"><strong>정리: 필요한 역량</strong></h3>
<p><strong>LMS 주요 기능</strong>을 구축하기 위해서는 다음과 같은 <strong>역량</strong>이 필요합니다:</p>
<ol>
<li><p><strong>백엔드 개발</strong>: Spring Boot, RESTful API 설계, 데이터베이스 설계.</p>
</li>
<li><p><strong>프론트엔드 개발</strong>: React, Vue.js 등의 UI 프레임워크, 사용자 경험(UX) 설계.</p>
</li>
<li><p><strong>데이터베이스 설계 및 관리</strong>: 관계형 DB (RDS), 비정형 데이터 DB (DynamoDB) 사용.</p>
</li>
<li><p><strong>파일 및 콘텐츠 관리</strong>: AWS S3, CloudFront를 통한 정적 파일 관리 및 배포.</p>
</li>
<li><p><strong>실시간 통신</strong>: WebRTC, AWS Chime 등 실시간 화상 회의 기능 구현.</p>
</li>
<li><p><strong>보안 및 인증</strong>: JWT,</p>
<p>OAuth2.0, AWS Cognito와 같은 인증 및 보안 관리.</p>
</li>
<li><p><strong>모니터링 및 성능 최적화</strong>: CloudWatch와 같은 모니터링 도구를 사용한 시스템 상태 관리.</p>
</li>
</ol>
<p>이러한 기능과 역량을 기반으로 <strong>LMS 시스템</strong>을 구축할 수 있으며, 사용자 경험을 극대화하는 동시에 효율적으로 시스템을 운영할 수 있습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[동영상 강의 구현 인사이트]]></title>
            <link>https://velog.io/@captain-yun/%EB%8F%99%EC%98%81%EC%83%81-%EA%B0%95%EC%9D%98-%EA%B5%AC%ED%98%84-%EC%9D%B8%EC%82%AC%EC%9D%B4%ED%8A%B8</link>
            <guid>https://velog.io/@captain-yun/%EB%8F%99%EC%98%81%EC%83%81-%EA%B0%95%EC%9D%98-%EA%B5%AC%ED%98%84-%EC%9D%B8%EC%82%AC%EC%9D%B4%ED%8A%B8</guid>
            <pubDate>Sun, 20 Oct 2024 10:26:34 GMT</pubDate>
            <description><![CDATA[<p>동영상 강의를 수강하는 기능을 구현하는 방법은 <strong>동영상 파일을 저장</strong>, <strong>스트리밍</strong>, <strong>관리</strong>하는 과정으로 나뉩니다. 이를 위해 <strong>AWS의 다양한 서비스</strong>와 <strong>웹 기술</strong>을 활용할 수 있습니다. 동영상 스트리밍은 <strong>네트워크 대역폭</strong>과 <strong>성능</strong>을 최적화하고, 사용자가 <strong>원활하게</strong> 영상을 시청할 수 있도록 구현해야 합니다. 아래는 단계별로 동영상 강의를 수강하는 기능을 구현하는 방법입니다.</p>
<h3 id="1-동영상-파일-업로드-및-저장"><strong>1. 동영상 파일 업로드 및 저장</strong></h3>
<h4 id="1-1-aws-s3를-이용한-동영상-저장"><strong>1-1. AWS S3를 이용한 동영상 저장</strong></h4>
<ul>
<li>동영상 파일은 <strong>Amazon S3</strong> 버킷에 저장하는 것이 가장 일반적이고, AWS 환경에서는 추천되는 방식입니다.</li>
<li>강사가 강의를 업로드할 수 있는 기능을 구현하고, 해당 동영상 파일을 <strong>S3 버킷</strong>에 저장합니다.</li>
</ul>
<h4 id="1-2-업로드-api-구현"><strong>1-2. 업로드 API 구현</strong></h4>
<ul>
<li><strong>백엔드(Spring Boot)</strong>에서 업로드 API를 구현하여, 강사가 동영상 파일을 S3에 업로드할 수 있도록 합니다.</li>
<li><strong>AWS SDK</strong>를 사용하여 <strong>S3와 통신</strong>할 수 있으며, 파일을 안전하게 업로드합니다.</li>
</ul>
<pre><code class="language-java">public String uploadVideoToS3(MultipartFile videoFile) {
    // S3 클라이언트 초기화
    AmazonS3 s3Client = AmazonS3ClientBuilder.standard().build();

    // S3에 업로드
    String bucketName = &quot;your-lms-video-bucket&quot;;
    String fileName = videoFile.getOriginalFilename();

    ObjectMetadata metadata = new ObjectMetadata();
    metadata.setContentType(videoFile.getContentType());
    metadata.setContentLength(videoFile.getSize());

    s3Client.putObject(new PutObjectRequest(bucketName, fileName, videoFile.getInputStream(), metadata));

    return s3Client.getUrl(bucketName, fileName).toString();
}</code></pre>
<h3 id="2-동영상-스트리밍"><strong>2. 동영상 스트리밍</strong></h3>
<h4 id="2-1-cloudfront를-이용한-스트리밍"><strong>2-1. CloudFront를 이용한 스트리밍</strong></h4>
<ul>
<li><strong>Amazon CloudFront</strong>는 <strong>S3 버킷</strong>과 연동하여 동영상을 빠르게 스트리밍하는 <strong>CDN(콘텐츠 전송 네트워크)</strong> 서비스입니다. </li>
<li><strong>HLS (HTTP Live Streaming)</strong>와 같은 <strong>스트리밍 프로토콜</strong>을 사용하여 동영상을 전송하고, 전 세계 어디서든 빠르게 로드할 수 있게 합니다.</li>
</ul>
<h4 id="2-2-동영상-파일-형식-및-스트리밍-설정"><strong>2-2. 동영상 파일 형식 및 스트리밍 설정</strong></h4>
<ul>
<li>동영상은 <strong>MP4</strong>, <strong>HLS</strong>, <strong>DASH</strong> 등으로 변환하여 저장할 수 있습니다. <strong>HLS</strong>는 네트워크 환경에 따라 비트레이트를 자동으로 조정하므로 <strong>효율적인 스트리밍</strong>을 지원합니다.</li>
<li><strong>AWS Elastic Transcoder</strong> 또는 <strong>AWS MediaConvert</strong>를 사용하여 <strong>동영상 파일을 스트리밍 가능한 형식</strong>으로 변환할 수 있습니다.</li>
</ul>
<h4 id="2-3-프론트엔드에서-동영상-플레이어-구현"><strong>2-3. 프론트엔드에서 동영상 플레이어 구현</strong></h4>
<ul>
<li><strong>React</strong>, <strong>Vue.js</strong>와 같은 프론트엔드 프레임워크에서 <strong>HTML5 비디오 플레이어</strong>를 사용하여 CloudFront에서 제공하는 동영상을 재생합니다.</li>
<li>HLS 형식의 경우, <strong>hls.js</strong>와 같은 라이브러리를 사용하여 비디오를 재생할 수 있습니다.</li>
</ul>
<pre><code class="language-html">&lt;video id=&quot;videoPlayer&quot; controls&gt;
  &lt;source src=&quot;https://your-cloudfront-url.com/video-file.m3u8&quot; type=&quot;application/x-mpegURL&quot;&gt;
  Your browser does not support the video tag.
&lt;/video&gt;

&lt;script&gt;
  if (Hls.isSupported()) {
    var video = document.getElementById(&#39;videoPlayer&#39;);
    var hls = new Hls();
    hls.loadSource(&#39;https://your-cloudfront-url.com/video-file.m3u8&#39;);
    hls.attachMedia(video);
    hls.on(Hls.Events.MANIFEST_PARSED, function() {
      video.play();
    });
  }
&lt;/script&gt;</code></pre>
<h3 id="3-접근-제어-및-권한-관리"><strong>3. 접근 제어 및 권한 관리</strong></h3>
<h4 id="3-1-사용자-권한-설정"><strong>3-1. 사용자 권한 설정</strong></h4>
<ul>
<li><strong>AWS Cognito</strong> 또는 <strong>JWT 토큰</strong>을 사용하여 <strong>인증된 사용자만 동영상 강의를 시청</strong>할 수 있도록 접근을 제한합니다.</li>
<li>동영상 파일 URL을 직접 접근할 수 없도록 하고, <strong>인증된 사용자</strong>만 특정 강의에 접근할 수 있게 합니다.</li>
</ul>
<h4 id="3-2-cloudfront-signed-url"><strong>3-2. CloudFront Signed URL</strong></h4>
<ul>
<li><strong>CloudFront Signed URL</strong>을 사용하여 <strong>시간 제한 링크</strong>를 생성합니다. 이를 통해 인증된 사용자에게만 제한 시간 내에 동영상에 접근할 수 있게 합니다.</li>
<li><strong>CloudFront Signed URL</strong>을 사용하면 링크가 만료되거나 권한이 없는 사용자는 동영상에 접근할 수 없습니다.</li>
</ul>
<pre><code class="language-java">public String generateSignedUrl(String videoFileName) {
    // CloudFront 키 설정
    String distributionDomain = &quot;your-cloudfront-url.com&quot;;
    String privateKeyFile = &quot;/path/to/privatekey.pem&quot;;

    Date expirationDate = new Date(System.currentTimeMillis() + 3600 * 1000); // 1시간 후 만료

    String signedUrl = CloudFrontUrlSigner.getSignedUrlWithCannedPolicy(
        Protocol.https,
        distributionDomain,
        privateKeyFile,
        videoFileName,
        expirationDate
    );

    return signedUrl;
}</code></pre>
<h3 id="4-동영상-진행-상황-및-학습-이력-관리"><strong>4. 동영상 진행 상황 및 학습 이력 관리</strong></h3>
<h4 id="4-1-시청-이력-기록"><strong>4-1. 시청 이력 기록</strong></h4>
<ul>
<li>학생이 동영상을 시청한 <strong>진행 상황(시청 시간, 강의 완료 여부)</strong>을 기록합니다. 이 정보를 <strong>백엔드</strong>에 저장하여, 학생이 동영상을 중간에 멈춘 후 다시 돌아왔을 때 마지막 지점부터 재생할 수 있게 합니다.</li>
</ul>
<h4 id="4-2-학습-통계-및-보고서-생성"><strong>4-2. 학습 통계 및 보고서 생성</strong></h4>
<ul>
<li>학생의 학습 통계를 <strong>데이터베이스에 저장</strong>하고, 강사가 이를 조회할 수 있게 합니다.</li>
<li><strong>백엔드</strong>에서 학습 이력을 추적하고, <strong>CloudWatch</strong> 또는 <strong>ElasticSearch</strong>와 연동하여 분석할 수 있습니다.</li>
</ul>
<h3 id="5-실시간-동영상-강의"><strong>5. 실시간 동영상 강의</strong></h3>
<h4 id="5-1-실시간-스트리밍"><strong>5-1. 실시간 스트리밍</strong></h4>
<ul>
<li>실시간 강의 기능을 구현하려면 <strong>Amazon Chime SDK</strong> 또는 <strong>WebRTC</strong>를 사용해 강사와 학생 간 실시간 화상 강의를 지원할 수 있습니다.</li>
<li>실시간 강의는 <strong>Zoom 통합</strong>이나 <strong>Chime SDK</strong>를 사용해 LMS 내에서 화상 강의 기능을 제공할 수 있습니다.</li>
</ul>
<h4 id="5-2-실시간-강의-녹화-및-재생"><strong>5-2. 실시간 강의 녹화 및 재생</strong></h4>
<ul>
<li>실시간 강의를 녹화하고, 이를 <strong>S3</strong>에 저장한 후 <strong>CloudFront</strong>로 제공하여 다른 학생들이 나중에 재생할 수 있도록 할 수 있습니다.</li>
</ul>
<hr>
<h3 id="정리-동영상-강의-기능-구현-시-필요한-역량"><strong>정리: 동영상 강의 기능 구현 시 필요한 역량</strong></h3>
<ol>
<li><strong>동영상 업로드 및 저장</strong>: AWS S3에 파일을 안전하게 저장하고 관리.</li>
<li><strong>동영상 스트리밍</strong>: CloudFront를 사용하여 전 세계에 빠르고 안정적인 스트리밍 제공.</li>
<li><strong>권한 관리 및 보안</strong>: Cognito, CloudFront Signed URL을 통해 인증된 사용자만 동영상에 접근 가능하게 설정.</li>
<li><strong>학습 이력 및 통계 관리</strong>: 동영상 시청 시간을 기록하고, 학습 이력을 분석할 수 있는 시스템 구축.</li>
<li><strong>실시간 강의 기능</strong>: AWS Chime SDK 또는 WebRTC를 사용해 실시간 화상 강의 제공.</li>
</ol>
<p>이러한 방식으로 동영상 강의를 LMS 내에서 구현할 수 있습니다. <strong>AWS S3, CloudFront, Cognito</strong> 등 AWS 서비스를 적극적으로 활용하면 안정적이고 확장 가능한 동영상 강의 시스템을 만들 수 있습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[풀스택 웹서비스 구축을 위한 AWS 공부 주제]]></title>
            <link>https://velog.io/@captain-yun/%ED%92%80%EC%8A%A4%ED%83%9D-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B5%AC%EC%B6%95%EC%9D%84-%EC%9C%84%ED%95%9C-AWS-%EA%B3%B5%EB%B6%80-%EC%A3%BC%EC%A0%9C</link>
            <guid>https://velog.io/@captain-yun/%ED%92%80%EC%8A%A4%ED%83%9D-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B5%AC%EC%B6%95%EC%9D%84-%EC%9C%84%ED%95%9C-AWS-%EA%B3%B5%EB%B6%80-%EC%A3%BC%EC%A0%9C</guid>
            <pubDate>Sat, 19 Oct 2024 15:08:37 GMT</pubDate>
            <description><![CDATA[<p><strong>컨테이너 기반 아키텍처</strong>와 <strong>서버리스 아키텍처</strong>를 혼합한 <strong>쇼핑몰 웹서비스</strong>를 구축하려면 AWS의 다양한 기술을 익혀야 합니다. 이를 위해 필요한 AWS 기술들을 <strong>기본 개념부터 고급 아키텍처 관리까지</strong> 단계별로 정리해보겠습니다. 이 순서는 학습 난이도와 실습 연계 가능성을 고려한 것입니다.</p>
<h3 id="1-기초-개념-학습"><strong>1. 기초 개념 학습</strong></h3>
<h4 id="1-1-aws-기본-개념-및-관리"><strong>1-1. AWS 기본 개념 및 관리</strong></h4>
<ul>
<li><strong>AWS 콘솔과 AWS CLI</strong>: AWS 리소스를 관리하기 위한 기본 도구.<ul>
<li><strong>CLI 사용법</strong>과 <strong>AWS 계정 관리</strong> 방법 학습.</li>
</ul>
</li>
<li><strong>IAM (Identity and Access Management)</strong>: 사용자 및 권한 관리.<ul>
<li>사용자 및 역할 정의, 권한 부여, 정책 설정 등.</li>
</ul>
</li>
</ul>
<h4 id="1-2-네트워크-및-보안"><strong>1-2. 네트워크 및 보안</strong></h4>
<ul>
<li><strong>VPC (Virtual Private Cloud)</strong>: 네트워크 구성의 기초. 서브넷, 라우팅 테이블, 인터넷 게이트웨이, NAT 게이트웨이 등 학습.</li>
<li><strong>Security Groups와 Network ACLs</strong>: 인스턴스 및 네트워크 보안 설정.</li>
<li><strong>Route 53</strong>: DNS 설정 및 도메인 관리.</li>
</ul>
<hr>
<h3 id="2-컴퓨팅-리소스"><strong>2. 컴퓨팅 리소스</strong></h3>
<h4 id="2-1-amazon-ec2"><strong>2-1. Amazon EC2</strong></h4>
<ul>
<li><strong>EC2 인스턴스 생성 및 관리</strong>: 기본적인 서버 설정과 EC2 인스턴스 관리 방법.</li>
<li><strong>EBS (Elastic Block Store)</strong>: EC2 인스턴스의 블록 스토리지 관리.</li>
<li><strong>EC2 Auto Scaling</strong>: 오토스케일링 그룹을 사용해 서버 수를 자동으로 조절하는 방법.</li>
</ul>
<h4 id="2-2-elastic-load-balancing-elb"><strong>2-2. Elastic Load Balancing (ELB)</strong></h4>
<ul>
<li><strong>Application Load Balancer (ALB)</strong>: 트래픽 부하를 여러 EC2 인스턴스 또는 컨테이너로 분산.</li>
<li><strong>ALB 타겟 그룹</strong> 설정 및 헬스체크.</li>
</ul>
<hr>
<h3 id="3-컨테이너-관리-및-오케스트레이션"><strong>3. 컨테이너 관리 및 오케스트레이션</strong></h3>
<h4 id="3-1-docker-및-컨테이너-기초"><strong>3-1. Docker 및 컨테이너 기초</strong></h4>
<ul>
<li><strong>Docker 기본 개념</strong>: 컨테이너 이미지 생성 및 실행 방법 학습.</li>
<li><strong>Dockerfile 작성</strong>: 애플리케이션 컨테이너화 방법.</li>
</ul>
<h4 id="3-2-amazon-ecs-elastic-container-service"><strong>3-2. Amazon ECS (Elastic Container Service)</strong></h4>
<ul>
<li><strong>ECS 클러스터 구성</strong>: EC2 기반과 Fargate 기반 클러스터 설정.</li>
<li><strong>컨테이너 태스크 및 서비스</strong>: 여러 컨테이너를 ECS에 배포하고 자동 확장하는 방법 학습.</li>
</ul>
<h4 id="3-3-amazon-ecr-elastic-container-registry"><strong>3-3. Amazon ECR (Elastic Container Registry)</strong></h4>
<ul>
<li><strong>ECR 활용</strong>: Docker 이미지를 저장하고 ECS 또는 EKS로 배포.</li>
</ul>
<h4 id="3-4-amazon-eks-elastic-kubernetes-service"><strong>3-4. Amazon EKS (Elastic Kubernetes Service)</strong></h4>
<ul>
<li><strong>Kubernetes 기초</strong>: 컨테이너를 관리하는 Kubernetes의 기본 개념 학습.</li>
<li><strong>EKS 클러스터 관리</strong>: Kubernetes 클러스터를 통해 애플리케이션 확장 및 관리.</li>
</ul>
<hr>
<h3 id="4-서버리스-아키텍처"><strong>4. 서버리스 아키텍처</strong></h3>
<h4 id="4-1-aws-lambda"><strong>4-1. AWS Lambda</strong></h4>
<ul>
<li><strong>Lambda 함수</strong>: 이벤트 기반으로 실행되는 서버리스 함수 생성 및 실행 방법.</li>
<li><strong>Lambda 트리거 설정</strong>: API Gateway, S3, DynamoDB 등과 Lambda를 연동하는 방법.</li>
</ul>
<h4 id="4-2-api-gateway"><strong>4-2. API Gateway</strong></h4>
<ul>
<li><strong>API Gateway 기초</strong>: API 엔드포인트 생성, 경로 설정, Lambda 함수 연결 방법.</li>
<li><strong>경로별 Lambda 연결</strong> 및 <strong>API 호출 흐름</strong> 이해.</li>
</ul>
<hr>
<h3 id="5-데이터베이스-및-스토리지"><strong>5. 데이터베이스 및 스토리지</strong></h3>
<h4 id="5-1-데이터베이스"><strong>5-1. 데이터베이스</strong></h4>
<ul>
<li><strong>Amazon RDS (Relational Database Service)</strong>: MySQL, PostgreSQL 등 관계형 데이터베이스 관리 및 연결.</li>
<li><strong>Amazon DynamoDB</strong>: 서버리스 NoSQL 데이터베이스 설정 및 사용법.</li>
</ul>
<h4 id="5-2-스토리지-서비스"><strong>5-2. 스토리지 서비스</strong></h4>
<ul>
<li><strong>Amazon S3 (Simple Storage Service)</strong>: 파일 저장소로서의 S3 학습.</li>
<li><strong>S3 버킷 정책</strong> 설정, 파일 업로드 및 다운로드.</li>
</ul>
<h4 id="5-3-캐시-및-인메모리-데이터-저장소"><strong>5-3. 캐시 및 인메모리 데이터 저장소</strong></h4>
<ul>
<li><strong>Amazon ElastiCache</strong>: Redis 또는 Memcached를 사용해 캐시 관리.</li>
<li><strong>읽기 성능 향상을 위한 캐시 활용</strong>.</li>
</ul>
<hr>
<h3 id="6-메시징-서비스"><strong>6. 메시징 서비스</strong></h3>
<h4 id="6-1-amazon-sqs-simple-queue-service"><strong>6-1. Amazon SQS (Simple Queue Service)</strong></h4>
<ul>
<li><strong>SQS 큐 설정</strong>: 메시지 큐를 사용해 비동기 작업 처리.</li>
<li><strong>Lambda와 SQS 통합</strong>: 이벤트 트리거 방식으로 메시지를 처리하는 방법.</li>
</ul>
<h4 id="6-2-amazon-sns-simple-notification-service"><strong>6-2. Amazon SNS (Simple Notification Service)</strong></h4>
<ul>
<li><strong>SNS 주제 설정</strong>: 이메일, 문자, 푸시 알림 발송.</li>
</ul>
<hr>
<h3 id="7-모니터링-및-로깅"><strong>7. 모니터링 및 로깅</strong></h3>
<h4 id="7-1-amazon-cloudwatch"><strong>7-1. Amazon CloudWatch</strong></h4>
<ul>
<li><strong>CloudWatch 로그 및 메트릭</strong>: EC2, Lambda, ECS/EKS의 성능 모니터링.</li>
<li><strong>경고 및 알람 설정</strong>: 성능 문제나 오류 발생 시 알림 설정.</li>
</ul>
<h4 id="7-2-aws-x-ray"><strong>7-2. AWS X-Ray</strong></h4>
<ul>
<li><strong>X-Ray를 사용한 분산 추적</strong>: 분산 시스템에서의 성능 분석과 문제 해결.</li>
</ul>
<hr>
<h3 id="8-인프라-자동화-및-코드-관리"><strong>8. 인프라 자동화 및 코드 관리</strong></h3>
<h4 id="8-1-aws-cloudformation"><strong>8-1. AWS CloudFormation</strong></h4>
<ul>
<li><strong>CloudFormation 템플릿 작성</strong>: 인프라를 코드로 정의하고 자동으로 배포하는 방법.</li>
<li><strong>스택 관리</strong>: 인프라 변경 사항을 자동으로 관리.</li>
</ul>
<h4 id="8-2-aws-cdk-cloud-development-kit"><strong>8-2. AWS CDK (Cloud Development Kit)</strong></h4>
<ul>
<li><strong>CDK 기초</strong>: 코드로 인프라를 정의하고 배포하는 방법.</li>
<li><strong>프로그래밍 언어를 사용한 인프라 자동화</strong>.</li>
</ul>
<hr>
<h3 id="9-네트워크-및-엣지-서비스"><strong>9. 네트워크 및 엣지 서비스</strong></h3>
<h4 id="9-1-aws-route-53"><strong>9-1. AWS Route 53</strong></h4>
<ul>
<li><strong>DNS 관리</strong>: 도메인 이름 설정 및 트래픽 라우팅.</li>
<li><strong>지리적 라우팅 및 장애 조치 설정</strong>.</li>
</ul>
<h4 id="9-2-amazon-cloudfront"><strong>9-2. Amazon CloudFront</strong></h4>
<ul>
<li><strong>CDN 설정</strong>: 콘텐츠를 엣지 로케이션에 캐싱하여 전 세계에 빠르게 배포.</li>
<li><strong>CloudFront와 S3 통합</strong>: 정적 웹사이트 또는 리소스 캐싱.</li>
</ul>
<hr>
<h3 id="10-고급-관리-및-보안"><strong>10. 고급 관리 및 보안</strong></h3>
<h4 id="10-1-amazon-cognito"><strong>10-1. Amazon Cognito</strong></h4>
<ul>
<li><strong>사용자 인증</strong>: 사용자 인증, 회원가입/로그인 기능 제공.</li>
<li><strong>OAuth2.0 및 JWT 토큰</strong> 기반 인증.</li>
</ul>
<h4 id="10-2-aws-secrets-manager"><strong>10-2. AWS Secrets Manager</strong></h4>
<ul>
<li><strong>비밀 정보 관리</strong>: API 키, DB 자격 증명 등의 안전한 관리.</li>
<li><strong>Lambda나 ECS에서 비밀 정보 호출</strong>.</li>
</ul>
<hr>
<h3 id="학습-순서"><strong>학습 순서</strong></h3>
<ol>
<li><strong>AWS 기본 개념 및 관리</strong> (IAM, VPC, Security Groups)</li>
<li><strong>컴퓨팅 리소스 관리</strong> (EC2, EBS, Auto Scaling, ELB)</li>
<li><strong>컨테이너 및 오케스트레이션</strong> (Docker, ECS/EKS, ECR)</li>
<li><strong>서버리스 아키텍처</strong> (Lambda, API Gateway)</li>
<li><strong>데이터베이스 및 스토리지</strong> (RDS, DynamoDB, S3)</li>
<li><strong>메시징 서비스</strong> (SQS, SNS)</li>
<li><strong>모니터링 및 로깅</strong> (CloudWatch, X-Ray)</li>
<li><strong>인프라 자동화</strong> (CloudFormation, CDK)</li>
<li><strong>네트워크 및 엣지 서비스</strong> (Route 53, CloudFront)</li>
<li><strong>고급 보안 및 관리</strong> (Cognito, Secrets Manager)</li>
</ol>
<hr>
<h3 id="결론"><strong>결론</strong></h3>
<p>이 순서로 학습하면 AWS에서 <strong>쇼핑몰 웹서비스</strong>와 같은 애플리케이션을 구축하고, <strong>컨테이너 기반</strong> 또는 <strong>서버리스 기반</strong>으로 확장 가능한 서비스를 구현할 수 있습니다. 각각의 서비스는 실습을 통해 익히며, 프로젝트에 필요한 부분만 선택적으로 사용해도 좋습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[AWS SDK 환경]]></title>
            <link>https://velog.io/@captain-yun/AWS-SDK-%ED%99%98%EA%B2%BD</link>
            <guid>https://velog.io/@captain-yun/AWS-SDK-%ED%99%98%EA%B2%BD</guid>
            <pubDate>Sat, 19 Oct 2024 14:09:48 GMT</pubDate>
            <description><![CDATA[<p><strong>AWS SDK</strong>는 <strong>컨테이너 환경</strong>이든 <strong>일반적인 서버 환경</strong>이든 <strong>모두 사용</strong>될 수 있습니다. SDK는 프로그래밍 언어를 통해 AWS 리소스와 상호작용하는 라이브러리이기 때문에, 실행 환경에 크게 제한이 없습니다. 다만, 현대 애플리케이션 아키텍처에서 컨테이너 환경이 점점 더 많이 사용되고 있습니다. 여기서는 각각의 환경에서 SDK가 어떻게 사용되는지 설명드리겠습니다.</p>
<h3 id="1-컨테이너-환경에서-aws-sdk-사용"><strong>1. 컨테이너 환경에서 AWS SDK 사용</strong></h3>
<p>컨테이너 환경에서 AWS SDK는 매우 자주 사용됩니다. <strong>컨테이너 기반 아키텍처</strong>는 확장성과 관리의 편리함 덕분에 많은 조직에서 채택되고 있으며, AWS SDK는 이 환경에서 AWS 리소스를 동적으로 관리하는 데 사용됩니다.</p>
<ul>
<li><p><strong>컨테이너 오케스트레이션 시스템</strong>: <strong>Amazon ECS</strong> 또는 <strong>Amazon EKS</strong>(Kubernetes)와 같은 컨테이너 관리 시스템에서 애플리케이션이 실행되면, AWS SDK는 이러한 컨테이너 내에서 AWS 리소스와 상호작용하는 데 사용됩니다.</p>
<ul>
<li>예시: 컨테이너에서 실행되는 애플리케이션이 <strong>S3</strong>에 데이터를 업로드하거나, <strong>DynamoDB</strong>에 데이터를 읽고 쓰는 작업을 AWS SDK로 처리.</li>
</ul>
</li>
<li><p><strong>AWS Fargate</strong>: 완전 관리형 컨테이너 서비스인 <strong>AWS Fargate</strong>에서도 AWS SDK를 사용하여 S3, RDS, Lambda 등과 상호작용할 수 있습니다.</p>
</li>
<li><p><strong>IAM 역할을 사용한 권한 관리</strong>: 컨테이너 환경에서는 <strong>IAM 역할</strong>을 컨테이너에 할당하여 <strong>자격 증명을 안전하게 관리</strong>합니다. 이렇게 하면 <strong>AWS 액세스 키</strong>를 컨테이너 내에서 별도로 설정하지 않고도 SDK가 AWS 리소스와 안전하게 상호작용할 수 있습니다.</p>
</li>
</ul>
<p><strong>컨테이너 환경에서 SDK 사용의 장점</strong>:</p>
<ul>
<li><strong>자동 확장 및 배포</strong>: 컨테이너는 쉽게 확장할 수 있고, AWS SDK를 통해 동적으로 리소스를 관리할 수 있습니다.</li>
<li><strong>IAM 역할 통합</strong>: 컨테이너에서 IAM 역할을 쉽게 적용하여 보안적으로 AWS 리소스에 접근 가능합니다.</li>
<li><strong>운영 효율성</strong>: 여러 컨테이너 인스턴스에서 SDK를 사용해 일관된 방식으로 AWS 리소스를 다룰 수 있습니다.</li>
</ul>
<h3 id="2-일반적인-서버-환경에서-aws-sdk-사용"><strong>2. 일반적인 서버 환경에서 AWS SDK 사용</strong></h3>
<p>일반적인 서버 환경(예: EC2 인스턴스, 온프레미스 서버)에서도 AWS SDK는 여전히 많이 사용됩니다.</p>
<ul>
<li><p><strong>EC2 인스턴스</strong>: AWS SDK는 <strong>EC2 인스턴스</strong>에서 자주 사용되며, 이를 통해 <strong>동적 리소스 관리</strong>(예: 추가 인스턴스 생성, S3 연동 등)를 할 수 있습니다. 특히 EC2 인스턴스에 <strong>IAM 역할</strong>을 할당해 AWS 리소스와 상호작용할 수 있습니다.</p>
</li>
<li><p><strong>온프레미스 서버</strong>: AWS SDK는 <strong>온프레미스 서버</strong>에서도 사용할 수 있으며, 이를 통해 <strong>하이브리드 클라우드 환경</strong>에서 AWS 리소스와 상호작용이 가능합니다.</p>
<ul>
<li>예시: 온프레미스에서 실행되는 애플리케이션이 AWS 리소스(S3, RDS 등)와 통신하는 경우 SDK를 사용해 통합 작업을 수행할 수 있습니다.</li>
</ul>
</li>
</ul>
<p><strong>일반 서버 환경에서 SDK 사용의 장점</strong>:</p>
<ul>
<li><strong>기존 시스템과의 통합</strong>: 기존 서버 환경에서 AWS 리소스를 사용하거나 하이브리드 클라우드를 구축할 때 SDK를 통해 쉽게 AWS 리소스에 접근할 수 있습니다.</li>
<li><strong>IAM 역할 통합</strong>: EC2 인스턴스에 할당된 IAM 역할을 통해 AWS 리소스를 안전하게 사용할 수 있습니다.</li>
</ul>
<hr>
<h3 id="컨테이너-vs-일반-서버-환경에서-sdk-사용-비교"><strong>컨테이너 vs 일반 서버 환경에서 SDK 사용 비교</strong></h3>
<table>
<thead>
<tr>
<th>환경</th>
<th><strong>컨테이너 환경</strong></th>
<th><strong>일반 서버 환경</strong></th>
</tr>
</thead>
<tbody><tr>
<td><strong>주요 서비스</strong></td>
<td><strong>ECS</strong>, <strong>EKS</strong>, <strong>Fargate</strong></td>
<td><strong>EC2</strong>, <strong>온프레미스 서버</strong></td>
</tr>
<tr>
<td><strong>IAM 관리</strong></td>
<td>컨테이너에 <strong>IAM 역할</strong>을 할당하여 자격 증명 관리</td>
<td>EC2 인스턴스에 <strong>IAM 역할</strong> 할당 또는 수동으로 자격 증명 설정</td>
</tr>
<tr>
<td><strong>확장성</strong></td>
<td>자동 확장 및 동적 리소스 관리에 적합</td>
<td>서버 확장 시 수동 관리 필요</td>
</tr>
<tr>
<td><strong>주요 사용 사례</strong></td>
<td>S3 업로드, DynamoDB 통신, Lambda 호출, 메시지 큐(SQS) 사용</td>
<td>S3 업로드, 데이터베이스 관리, 서버 간 통신</td>
</tr>
</tbody></table>
<h3 id="3-어떤-환경에서-aws-sdk를-더-많이-사용하는가"><strong>3. 어떤 환경에서 AWS SDK를 더 많이 사용하는가?</strong></h3>
<ul>
<li><p><strong>컨테이너 환경</strong>은 현대 클라우드 아키텍처에서 많이 사용되며, <strong>확장성</strong>과 <strong>운영 효율성</strong> 때문에 AWS SDK와의 통합도 활발하게 이루어집니다. 특히 마이크로서비스 아키텍처에서는 각 컨테이너가 특정 역할을 담당하며, AWS SDK를 통해 다른 AWS 리소스와 연동하는 일이 많습니다.</p>
</li>
<li><p><strong>일반 서버 환경</strong>은 여전히 많은 전통적인 애플리케이션에서 사용되지만, 확장성 면에서 <strong>컨테이너 환경</strong>만큼 유연하지는 않습니다. 그러나 기존 서버 기반 시스템이 있거나 <strong>하이브리드 클라우드</strong>를 사용하는 경우에도 AWS SDK는 매우 유용하게 사용됩니다.</p>
</li>
</ul>
<hr>
<h3 id="정리"><strong>정리</strong></h3>
<ul>
<li><strong>AWS SDK</strong>는 <strong>컨테이너 환경</strong>과 <strong>일반 서버 환경</strong> 모두에서 사용될 수 있습니다.</li>
<li><strong>컨테이너 환경</strong>에서는 특히 <strong>자동 확장</strong>, <strong>마이크로서비스 통합</strong>, <strong>IAM 역할 관리</strong>와 같은 기능을 잘 활용할 수 있습니다.</li>
<li><strong>일반 서버 환경</strong>에서도 여전히 AWS SDK는 <strong>동적 리소스 관리</strong>와 <strong>하이브리드 클라우드</strong> 구축에 유용하게 사용됩니다.</li>
</ul>
<p>따라서 <strong>사용 사례에 따라 적절한 환경에서 AWS SDK</strong>를 사용하는 것이 좋습니다. 현대 클라우드 아키텍처에서는 <strong>컨테이너 환경</strong>에서 AWS SDK가 점점 더 많이 사용되고 있습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[AWS SDK 대표 활용 사례]]></title>
            <link>https://velog.io/@captain-yun/AWS-SDK-%EB%8C%80%ED%91%9C-%ED%99%9C%EC%9A%A9-%EC%82%AC%EB%A1%80</link>
            <guid>https://velog.io/@captain-yun/AWS-SDK-%EB%8C%80%ED%91%9C-%ED%99%9C%EC%9A%A9-%EC%82%AC%EB%A1%80</guid>
            <pubDate>Sat, 19 Oct 2024 14:06:09 GMT</pubDate>
            <description><![CDATA[<p>AWS SDK는 다양한 AWS 서비스를 애플리케이션 코드 내에서 제어하고 상호작용할 수 있게 해주며, 여러 가지 사용 사례에서 널리 사용됩니다. <strong>AWS SDK의 대표적인 실제 사용 사례</strong> 10가지를 소개합니다.</p>
<h3 id="1-s3-버킷에-파일-업로드-및-다운로드"><strong>1. S3 버킷에 파일 업로드 및 다운로드</strong></h3>
<ul>
<li><strong>사용 사례</strong>: 애플리케이션에서 사용자로부터 파일을 업로드 받아 <strong>S3 버킷</strong>에 저장하고, 필요할 때 해당 파일을 다운로드하여 사용자에게 제공.</li>
<li><strong>예시</strong>: 사진 갤러리 웹사이트에서 사용자 이미지를 S3에 저장하고, 필요 시 다운로드.</li>
</ul>
<h3 id="2-ec2-인스턴스-관리"><strong>2. EC2 인스턴스 관리</strong></h3>
<ul>
<li><strong>사용 사례</strong>: 애플리케이션에서 필요에 따라 <strong>EC2 인스턴스를 동적으로 생성, 시작, 중지</strong>하거나 <strong>종료</strong>할 수 있음.</li>
<li><strong>예시</strong>: 트래픽이 증가할 때 <strong>자동 확장</strong>을 위해 EC2 인스턴스를 시작하고, 트래픽이 감소하면 중지하는 애플리케이션.</li>
</ul>
<h3 id="3-dynamodb와의-데이터-통신"><strong>3. DynamoDB와의 데이터 통신</strong></h3>
<ul>
<li><strong>사용 사례</strong>: <strong>DynamoDB</strong>와 애플리케이션 간의 실시간 데이터 통신을 통해 <strong>데이터 저장 및 조회</strong> 작업을 자동화.</li>
<li><strong>예시</strong>: 사용자 세션 정보, 쇼핑 카트 상태 등을 DynamoDB에 저장하고, 이를 실시간으로 업데이트.</li>
</ul>
<h3 id="4-aws-lambda-트리거-및-실행"><strong>4. AWS Lambda 트리거 및 실행</strong></h3>
<ul>
<li><strong>사용 사례</strong>: 애플리케이션 내에서 특정 이벤트가 발생하면 <strong>AWS Lambda 함수</strong>를 호출하여 서버리스 방식으로 처리.</li>
<li><strong>예시</strong>: 사용자가 파일을 업로드할 때 Lambda 함수를 호출해 <strong>파일을 처리</strong>(예: 이미지 리사이즈)하고 저장.</li>
</ul>
<h3 id="5-cloudwatch-로그-및-지표-수집"><strong>5. CloudWatch 로그 및 지표 수집</strong></h3>
<ul>
<li><strong>사용 사례</strong>: 애플리케이션 성능 모니터링을 위해 <strong>CloudWatch</strong>에 로그를 전송하고 <strong>메트릭</strong>을 수집하여 모니터링 및 경고 설정.</li>
<li><strong>예시</strong>: 애플리케이션의 상태를 CloudWatch에 로그로 기록하고, 오류 발생 시 경고 알림을 받도록 설정.</li>
</ul>
<h3 id="6-sns를-통한-알림-전송"><strong>6. SNS를 통한 알림 전송</strong></h3>
<ul>
<li><strong>사용 사례</strong>: 애플리케이션 내에서 <strong>Amazon SNS</strong>(Simple Notification Service)를 사용해 특정 이벤트가 발생했을 때 <strong>SMS</strong>나 <strong>이메일 알림</strong>을 발송.</li>
<li><strong>예시</strong>: 사용자가 비밀번호를 변경하거나 새로운 메시지가 도착하면 SMS나 이메일로 알림을 전송.</li>
</ul>
<h3 id="7-sqs를-통한-비동기-작업-처리"><strong>7. SQS를 통한 비동기 작업 처리</strong></h3>
<ul>
<li><strong>사용 사례</strong>: <strong>Amazon SQS</strong>(Simple Queue Service)를 사용해 애플리케이션에서 비동기적으로 작업을 처리하기 위해 <strong>메시지를 대기열에 넣고</strong>, 다른 서비스에서 메시지를 처리.</li>
<li><strong>예시</strong>: 사용자가 주문을 할 때 주문 정보를 SQS에 저장하고, 백엔드 시스템에서 이를 처리하여 사용자에게 응답.</li>
</ul>
<h3 id="8-rds-인스턴스-생성-및-관리"><strong>8. RDS 인스턴스 생성 및 관리</strong></h3>
<ul>
<li><strong>사용 사례</strong>: 애플리케이션이 필요할 때 <strong>RDS 인스턴스</strong>(예: MySQL, PostgreSQL)를 생성하고, 데이터베이스 연결을 관리.</li>
<li><strong>예시</strong>: 자동화된 백엔드에서 특정 시간대에 RDS 인스턴스를 생성하거나 종료하여 데이터베이스 비용을 절감.</li>
</ul>
<h3 id="9-cloudfront-배포-관리"><strong>9. CloudFront 배포 관리</strong></h3>
<ul>
<li><strong>사용 사례</strong>: <strong>AWS SDK</strong>를 사용하여 <strong>CloudFront 배포</strong>를 프로그래밍 방식으로 생성하고, 설정 변경 및 배포 무효화(Invalidation)를 자동화.</li>
<li><strong>예시</strong>: 웹 애플리케이션에서 변경된 콘텐츠를 빠르게 배포하기 위해 CloudFront 캐시를 무효화하는 요청을 전송.</li>
</ul>
<h3 id="10-iam-사용자-및-권한-관리"><strong>10. IAM 사용자 및 권한 관리</strong></h3>
<ul>
<li><strong>사용 사례</strong>: 애플리케이션에서 <strong>IAM 사용자 생성</strong>, 권한 할당, 정책 수정 등을 자동으로 처리하여 접근 제어 관리.</li>
<li><strong>예시</strong>: 특정 이벤트나 조건에 따라 IAM 사용자를 동적으로 생성하고, 필요에 따라 특정 서비스에 대한 권한을 부여하거나 회수.</li>
</ul>
<hr>
<h3 id="sdk-사용-사례-요약"><strong>SDK 사용 사례 요약</strong></h3>
<ol>
<li><strong>S3 파일 업로드 및 다운로드</strong></li>
<li><strong>EC2 인스턴스 생성, 시작, 중지</strong></li>
<li><strong>DynamoDB 데이터 저장 및 조회</strong></li>
<li><strong>Lambda 함수 실행 및 트리거</strong></li>
<li><strong>CloudWatch 로그 및 메트릭 수집</strong></li>
<li><strong>SNS 알림 전송 (SMS, 이메일)</strong></li>
<li><strong>SQS 대기열을 통한 비동기 작업 처리</strong></li>
<li><strong>RDS 인스턴스 생성 및 관리</strong></li>
<li><strong>CloudFront 배포 관리 및 캐시 무효화</strong></li>
<li><strong>IAM 사용자 및 권한 관리</strong></li>
</ol>
<p>이와 같은 사용 사례는 <strong>AWS SDK</strong>를 사용해 <strong>AWS 리소스와 상호작용</strong>하는 방법을 이해하는 데 도움을 줍니다. AWS SDK는 <strong>프로그래밍 언어</strong>(Python, Java, JavaScript 등)를 통해 AWS 서비스와 상호작용하는 <strong>가장 기본적이고 강력한 도구</strong>입니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[AWS 학습 고급 주제들]]></title>
            <link>https://velog.io/@captain-yun/AWS-%ED%95%99%EC%8A%B5-%EA%B3%A0%EA%B8%89-%EC%A3%BC%EC%A0%9C%EB%93%A4</link>
            <guid>https://velog.io/@captain-yun/AWS-%ED%95%99%EC%8A%B5-%EA%B3%A0%EA%B8%89-%EC%A3%BC%EC%A0%9C%EB%93%A4</guid>
            <pubDate>Sat, 19 Oct 2024 13:15:26 GMT</pubDate>
            <description><![CDATA[<p>Route 53과 CloudFront, 그리고 EC2, ELB, ASG, S3, 스토리지, 데이터베이스까지 이미 학습했다면, 이제 <strong>다음으로 학습할만한 AWS 주제</strong>들을 고려해볼 수 있습니다. 여기 몇 가지 추천 주제들이 있습니다:</p>
<h3 id="1-aws-lambda-및-서버리스serverless-architecture">1. <strong>AWS Lambda 및 서버리스(Serverless Architecture)</strong></h3>
<ul>
<li><strong>AWS Lambda</strong>: 서버를 관리하지 않고 코드를 실행할 수 있는 서버리스 서비스입니다. EC2와 같은 인프라 없이 <strong>이벤트 기반</strong>으로 작동하는 AWS Lambda는 <strong>자동 확장</strong>이 가능하고 <strong>비용 절감</strong>에 효율적입니다.</li>
<li><strong>API Gateway</strong>: <strong>Lambda</strong>와 함께 자주 사용되며, <strong>RESTful API</strong>를 관리하는 서버리스 API 서비스입니다.</li>
<li><strong>DynamoDB</strong>와의 통합: <strong>서버리스 데이터베이스</strong>와 서버리스 로직을 결합하여 완전한 서버리스 애플리케이션을 구축할 수 있습니다.</li>
</ul>
<h3 id="2-amazon-elastic-kubernetes-service-eks-또는-elastic-container-service-ecs">2. <strong>Amazon Elastic Kubernetes Service (EKS) 또는 Elastic Container Service (ECS)</strong></h3>
<ul>
<li><strong>EKS</strong>: AWS에서 <strong>Kubernetes</strong> 클러스터를 관리하는 서비스로, <strong>컨테이너화된 애플리케이션</strong>을 관리하고 배포할 수 있습니다.</li>
<li><strong>ECS</strong>: AWS에서 컨테이너를 관리하기 위한 <strong>Docker 기반 서비스</strong>입니다. EKS보다 좀 더 AWS에 특화된 형태로 쉽게 사용할 수 있습니다.</li>
</ul>
<h3 id="3-cicd-파이프라인-구축aws-codepipeline-codebuild-codedeploy">3. <strong>CI/CD 파이프라인 구축(AWS CodePipeline, CodeBuild, CodeDeploy)</strong></h3>
<ul>
<li><strong>CodePipeline</strong>: 애플리케이션 배포를 자동화하는 도구로, <strong>지속적 통합(CI)</strong> 및 <strong>지속적 배포(CD)</strong>를 쉽게 구현할 수 있습니다.</li>
<li><strong>CodeBuild</strong>와 <strong>CodeDeploy</strong>: <strong>빌드와 배포</strong> 과정 전체를 자동화하여, <strong>개발에서 운영까지의 과정</strong>을 자동화할 수 있습니다.</li>
</ul>
<h3 id="4-aws-cloudformation-및-iacinfrastructure-as-code">4. <strong>AWS CloudFormation 및 IaC(Infrastructure as Code)</strong></h3>
<ul>
<li><strong>CloudFormation</strong>: AWS 리소스를 코드로 관리하는 <strong>인프라 자동화 서비스</strong>입니다. 이 서비스를 통해 AWS 인프라를 선언적으로 관리할 수 있으며, 일관된 환경을 설정할 수 있습니다.</li>
<li><strong>Terraform</strong>: CloudFormation과 비슷하지만, AWS 외의 클라우드에서도 사용할 수 있는 오픈소스 기반의 IaC 도구입니다.</li>
</ul>
<h3 id="5-amazon-sns-및-sqs메시지-관리-서비스">5. <strong>Amazon SNS 및 SQS(메시지 관리 서비스)</strong></h3>
<ul>
<li><strong>Amazon SNS</strong>: <strong>푸시 알림</strong>과 <strong>메시지 브로커</strong> 역할을 하는 서비스로, <strong>서버 간 통신</strong>을 지원합니다.</li>
<li><strong>Amazon SQS</strong>: <strong>대기열 서비스</strong>로, <strong>비동기 작업</strong>을 처리하거나 <strong>메시지 큐</strong>를 통해 시스템 간 통신을 관리합니다. <strong>서버 간 비동기 처리</strong>에 매우 유용합니다.</li>
</ul>
<h3 id="6-aws-iam-및-보안-관련-학습">6. <strong>AWS IAM 및 보안 관련 학습</strong></h3>
<ul>
<li><strong>IAM</strong>: <strong>정책 관리</strong>, <strong>권한 설정</strong>, <strong>MFA</strong> 등을 통해 AWS 리소스에 대한 접근 제어와 보안을 강화하는 방법을 익힙니다.</li>
<li><strong>AWS KMS(Key Management Service)</strong>: 데이터 암호화 및 보안 관련 설정을 학습하여, <strong>데이터 보호</strong>를 강화하는 방법을 익힙니다.</li>
<li><strong>AWS Shield 및 WAF</strong>: DDoS 공격 방어 및 웹 애플리케이션 방화벽 설정을 통해 <strong>보안 강화</strong>.</li>
</ul>
<h3 id="7-aws-glue-및-데이터-분석-서비스">7. <strong>AWS Glue 및 데이터 분석 서비스</strong></h3>
<ul>
<li><strong>AWS Glue</strong>: <strong>ETL(Extract, Transform, Load)</strong> 작업을 자동화하는 <strong>서버리스 데이터 통합 서비스</strong>입니다. 데이터베이스, S3 등의 데이터 소스를 하나로 통합하여 분석할 수 있습니다.</li>
<li><strong>Amazon Athena</strong>: S3에 저장된 데이터를 SQL로 <strong>실시간 분석</strong>할 수 있는 서비스입니다.</li>
<li><strong>Amazon Redshift</strong>: <strong>데이터 웨어하우스 서비스</strong>로, 대규모 데이터 분석을 할 때 유용합니다.</li>
</ul>
<h3 id="8-aws-elastic-beanstalk">8. <strong>AWS Elastic Beanstalk</strong></h3>
<ul>
<li><strong>Elastic Beanstalk</strong>: <strong>애플리케이션을 배포하고 관리</strong>할 수 있는 서비스로, 인프라 관리 없이 빠르게 애플리케이션을 실행할 수 있습니다. <strong>EC2</strong>, <strong>RDS</strong>, <strong>ELB</strong> 등의 리소스를 자동으로 관리해줍니다.</li>
</ul>
<h3 id="9-aws-well-architected-framework">9. <strong>AWS Well-Architected Framework</strong></h3>
<ul>
<li><strong>AWS Well-Architected Framework</strong>는 <strong>보안</strong>, <strong>신뢰성</strong>, <strong>성능 효율성</strong>, <strong>비용 최적화</strong>, <strong>운영 우수성</strong>이라는 5가지 기준에 따라 AWS에서 잘 설계된 인프라를 구축하는 데 필요한 원칙을 제시합니다.</li>
<li>이를 통해 기존 시스템을 리뷰하거나 신규 설계를 할 때 <strong>모범 사례</strong>를 따를 수 있습니다.</li>
</ul>
<h3 id="10-aws-outposts">10. <strong>AWS Outposts</strong></h3>
<ul>
<li><strong>AWS Outposts</strong>는 <strong>온프레미스</strong>에서 AWS 서비스를 사용하고 싶을 때 사용하는 서비스입니다. 데이터 센터나 서버실에 AWS 인프라를 직접 배치하여, 하이브리드 클라우드 환경을 구축할 수 있습니다.</li>
</ul>
<hr>
<h3 id="정리"><strong>정리</strong></h3>
<p>이미 많은 주요 AWS 서비스와 개념을 학습하셨기 때문에, 이제 <strong>서버리스 아키텍처</strong>, <strong>컨테이너 관리</strong>, <strong>자동화 및 DevOps 파이프라인</strong>, <strong>데이터 분석</strong>, <strong>보안</strong>과 같은 고급 주제들을 탐구해보면 좋습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[엣지 로케이션을 사용하는 AWS 서비스]]></title>
            <link>https://velog.io/@captain-yun/%EC%97%A3%EC%A7%80-%EB%A1%9C%EC%BC%80%EC%9D%B4%EC%85%98%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-AWS-%EC%84%9C%EB%B9%84%EC%8A%A4</link>
            <guid>https://velog.io/@captain-yun/%EC%97%A3%EC%A7%80-%EB%A1%9C%EC%BC%80%EC%9D%B4%EC%85%98%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-AWS-%EC%84%9C%EB%B9%84%EC%8A%A4</guid>
            <pubDate>Sat, 19 Oct 2024 09:45:13 GMT</pubDate>
            <description><![CDATA[<p><strong>엣지 로케이션(Edge Location)</strong>은 AWS에서 다양한 서비스에서 사용되어, 사용자에게 가까운 위치에서 콘텐츠를 제공하고, <strong>지연 시간을 줄이며</strong> 성능을 향상시키는 역할을 합니다. <strong>엣지 로케이션을 사용하는 주요 AWS 서비스</strong>는 다음과 같습니다.</p>
<h3 id="1-amazon-cloudfront"><strong>1. Amazon CloudFront</strong></h3>
<ul>
<li><strong>설명</strong>: <strong>CloudFront</strong>는 AWS의 <strong>콘텐츠 전송 네트워크(CDN)</strong> 서비스로, 엣지 로케이션을 통해 <strong>정적 및 동적 콘텐츠</strong>를 전 세계 사용자에게 빠르게 전달합니다.</li>
<li><strong>역할</strong>: 엣지 로케이션은 CloudFront의 중요한 구성 요소로, <strong>오리진 서버(S3, EC2 등)</strong>에서 콘텐츠를 가져와 <strong>캐싱</strong>하고, 사용자에게 가장 가까운 엣지 로케이션에서 제공함으로써 <strong>지연 시간</strong>을 최소화합니다.</li>
<li><strong>사용 사례</strong>: 이미지, 동영상, 웹 애플리케이션, API 응답 등의 콘텐츠를 전 세계적으로 빠르게 제공할 때 사용됩니다.</li>
</ul>
<h3 id="2-amazon-route-53"><strong>2. Amazon Route 53</strong></h3>
<ul>
<li><strong>설명</strong>: <strong>Route 53</strong>은 AWS의 <strong>DNS 관리 서비스</strong>로, 도메인 이름을 IP 주소로 변환하는 역할을 합니다.</li>
<li><strong>역할</strong>: 엣지 로케이션을 사용하여 <strong>DNS 요청을 처리</strong>하며, 사용자가 가장 가까운 엣지 로케이션에서 <strong>DNS 응답</strong>을 받을 수 있도록 함으로써 <strong>빠르고 안정적인 DNS 해석</strong>을 보장합니다.</li>
<li><strong>사용 사례</strong>: 글로벌 웹사이트에 대해 빠르고 안정적인 DNS 쿼리 처리가 필요할 때 사용됩니다.</li>
</ul>
<h3 id="3-aws-global-accelerator"><strong>3. AWS Global Accelerator</strong></h3>
<ul>
<li><strong>설명</strong>: <strong>Global Accelerator</strong>는 엣지 로케이션을 통해 <strong>글로벌 네트워크 트래픽</strong>을 최적화하는 서비스입니다.</li>
<li><strong>역할</strong>: 엣지 로케이션을 활용해 전 세계 사용자가 <strong>AWS 리소스(예: EC2, ALB)</strong>로 빠르게 접근할 수 있도록 최적화된 <strong>네트워크 경로</strong>를 제공합니다. 이로 인해 애플리케이션 성능과 가용성이 향상됩니다.</li>
<li><strong>사용 사례</strong>: 전 세계적으로 트래픽을 최적화하여 애플리케이션 성능을 개선하려는 경우, 특히 지연 시간이 중요한 애플리케이션에 적합합니다.</li>
</ul>
<h3 id="4-aws-shield"><strong>4. AWS Shield</strong></h3>
<ul>
<li><strong>설명</strong>: <strong>AWS Shield</strong>는 DDoS(Distributed Denial of Service) 공격으로부터 보호하는 <strong>보안 서비스</strong>입니다.</li>
<li><strong>역할</strong>: 엣지 로케이션을 사용해 <strong>DDoS 공격을 탐지하고 완화</strong>합니다. CloudFront와 Route 53과 같은 엣지 서비스와 통합되어, DDoS 공격에 대한 <strong>실시간 보호</strong>를 제공합니다.</li>
<li><strong>사용 사례</strong>: 웹사이트와 애플리케이션에 대한 DDoS 공격을 방어하고자 할 때 사용됩니다. 특히 AWS Shield Advanced는 더 고급 DDoS 방어 기능을 제공합니다.</li>
</ul>
<h3 id="5-aws-waf-web-application-firewall"><strong>5. AWS WAF (Web Application Firewall)</strong></h3>
<ul>
<li><strong>설명</strong>: <strong>AWS WAF</strong>는 웹 애플리케이션을 보호하기 위한 <strong>웹 방화벽 서비스</strong>로, 악성 트래픽을 필터링하여 웹 애플리케이션을 보호합니다.</li>
<li><strong>역할</strong>: 엣지 로케이션에서 웹 요청을 필터링하여 악의적인 공격으로부터 웹 애플리케이션을 보호합니다. CloudFront와 통합되어 <strong>엣지 레벨에서 보안 규칙</strong>을 적용할 수 있습니다.</li>
<li><strong>사용 사례</strong>: XSS(Cross-Site Scripting) 공격, SQL 인젝션 등의 웹 애플리케이션 공격을 방어하는 데 사용됩니다.</li>
</ul>
<h3 id="6-amazon-s3-transfer-acceleration"><strong>6. Amazon S3 Transfer Acceleration</strong></h3>
<ul>
<li><strong>설명</strong>: <strong>S3 Transfer Acceleration</strong>은 <strong>Amazon S3</strong>에 파일을 빠르게 업로드할 수 있도록 돕는 기능입니다.</li>
<li><strong>역할</strong>: 엣지 로케이션을 통해 전 세계 어디에서든 <strong>S3 버킷으로 파일을 업로드</strong>할 때, <strong>가속화된 네트워크 경로</strong>를 사용하여 전송 속도를 향상시킵니다. 엣지 로케이션이 사용자와 S3 버킷 간의 네트워크 전송을 최적화합니다.</li>
<li><strong>사용 사례</strong>: 전 세계에서 대규모 파일을 빠르게 S3에 업로드하고자 할 때 유용합니다.</li>
</ul>
<hr>
<h3 id="정리-엣지-로케이션을-사용하는-대표적인-aws-서비스"><strong>정리: 엣지 로케이션을 사용하는 대표적인 AWS 서비스</strong></h3>
<ol>
<li><strong>Amazon CloudFront</strong>: 콘텐츠 전송 네트워크(CDN) 서비스로, 엣지 로케이션을 통해 빠른 콘텐츠 제공.</li>
<li><strong>Amazon Route 53</strong>: DNS 서비스로, 엣지 로케이션을 통해 빠른 DNS 해석을 제공.</li>
<li><strong>AWS Global Accelerator</strong>: 엣지 로케이션을 사용해 글로벌 트래픽 경로 최적화.</li>
<li><strong>AWS Shield</strong>: 엣지 로케이션에서 DDoS 공격을 방어.</li>
<li><strong>AWS WAF</strong>: 엣지 레벨에서 웹 애플리케이션 방화벽 기능 제공.</li>
<li><strong>Amazon S3 Transfer Acceleration</strong>: 엣지 로케이션을 통해 S3로 빠른 데이터 업로드를 가능하게 함.</li>
</ol>
<p>이러한 서비스들은 <strong>엣지 로케이션</strong>을 활용하여 전 세계 사용자들에게 빠르고 안정적인 서비스 제공을 목표로 하며, <strong>지연 시간 감소</strong>와 <strong>네트워크 최적화</strong>를 통해 더 나은 사용자 경험을 보장합니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ALB에 ASG 추가]]></title>
            <link>https://velog.io/@captain-yun/ALB%EC%97%90-ASG-%EC%B6%94%EA%B0%80</link>
            <guid>https://velog.io/@captain-yun/ALB%EC%97%90-ASG-%EC%B6%94%EA%B0%80</guid>
            <pubDate>Fri, 18 Oct 2024 01:25:58 GMT</pubDate>
            <description><![CDATA[<p><strong>Hello World 웹서버에 Auto Scaling Group(ASG)을 추가하여 로드밸런싱과 자동 확장 기능을 연동하는 실습 시나리오</strong></p>
<p>이번 실습에서는 기존에 설정한 <strong>Application Load Balancer(ALB)</strong>에 <strong>Auto Scaling Group(ASG)</strong>을 추가하여, 웹 서버의 트래픽 부하에 따라 <strong>자동으로 EC2 인스턴스를 확장하거나 축소</strong>하는 구성을 실습해보겠습니다.</p>
<h3 id="실습-목표"><strong>실습 목표</strong></h3>
<ol>
<li><strong>Auto Scaling Group(ASG)</strong>을 설정하여 EC2 인스턴스를 자동으로 확장/축소합니다.</li>
<li><strong>ALB와 ASG</strong>를 연동하여 로드밸런싱된 상태에서 트래픽 부하에 따라 서버가 자동으로 늘어나고 줄어드는 것을 확인합니다.</li>
</ol>
<hr>
<h3 id="시나리오-단계"><strong>시나리오 단계</strong></h3>
<h4 id="1-기존-alb와-ec2-환경-확인"><strong>1. 기존 ALB와 EC2 환경 확인</strong></h4>
<ul>
<li>현재 <strong>ALB</strong>가 설정된 상태에서 <strong>WebServer1</strong>과 <strong>WebServer2</strong>가 각각 <strong>&quot;Hello World&quot;</strong> 메시지를 반환하는 상태라고 가정합니다.</li>
<li>로드밸런서와 연결된 <strong>EC2 인스턴스</strong>가 잘 동작하고 있는지 확인합니다.</li>
</ul>
<hr>
<h4 id="2-auto-scaling-groupasg-설정하기"><strong>2. Auto Scaling Group(ASG) 설정하기</strong></h4>
<ol>
<li><p><strong>Launch Template (시작 템플릿) 생성</strong></p>
<p>먼저 Auto Scaling에 사용할 <strong>EC2 인스턴스 시작 템플릿</strong>을 만듭니다.</p>
<ol>
<li><p><strong>EC2 대시보드</strong>에서 왼쪽 메뉴의 <strong>Launch Templates</strong>로 이동합니다.</p>
</li>
<li><p><strong>Create Launch Template</strong>을 클릭합니다.</p>
</li>
<li><p><strong>Launch Template Name</strong>: <code>WebServerTemplate</code></p>
</li>
<li><p><strong>AMI</strong>: 기존의 <strong>Amazon Linux 2 AMI</strong>를 선택합니다.</p>
</li>
<li><p><strong>Instance Type</strong>: <strong>t2.micro</strong>를 선택합니다.</p>
</li>
<li><p><strong>Key Pair</strong>: 이미 설정한 키 페어를 선택하거나 새 키 페어를 지정합니다.</p>
</li>
<li><p><strong>Security Group</strong>: <strong>HTTP(80)</strong>와 <strong>SSH(22)</strong>가 허용된 <strong>보안 그룹</strong>을 선택합니다.</p>
</li>
<li><p><strong>User Data</strong>: 아래 스크립트를 <strong>User Data</strong> 섹션에 넣어 EC2 인스턴스가 자동으로 Apache 서버를 설치하고, &quot;Hello World&quot; 페이지를 생성하도록 설정합니다.</p>
<pre><code class="language-bash">#!/bin/bash
sudo yum update -y
sudo yum install -y httpd
sudo systemctl start httpd
sudo systemctl enable httpd
echo &quot;Hello World from Auto Scaling Group&quot; &gt; /var/www/html/index.html</code></pre>
</li>
<li><p><strong>Create Launch Template</strong>을 클릭하여 템플릿을 만듭니다.</p>
</li>
</ol>
</li>
</ol>
<hr>
<ol start="2">
<li><p><strong>Auto Scaling Group (ASG) 생성</strong></p>
<p>이제 <strong>Auto Scaling Group</strong>을 생성하여 EC2 인스턴스가 자동으로 확장 및 축소되도록 설정합니다.</p>
<ol>
<li><strong>EC2 대시보드</strong>에서 왼쪽 메뉴의 <strong>Auto Scaling Groups</strong>로 이동합니다.</li>
<li><strong>Create Auto Scaling Group</strong>을 클릭합니다.</li>
<li><strong>Auto Scaling Group Name</strong>: <code>WebServerASG</code></li>
<li><strong>Launch Template</strong>: 방금 만든 <code>WebServerTemplate</code>을 선택합니다.</li>
<li><strong>VPC</strong>: 현재 EC2 인스턴스들이 속한 VPC를 선택합니다.</li>
<li><strong>서브넷</strong>: <strong>퍼블릭 서브넷</strong>을 선택하여 Auto Scaling Group에서 인스턴스를 배포할 수 있도록 합니다.</li>
</ol>
</li>
</ol>
<hr>
<ol start="3">
<li><p><strong>로드밸런서(ALB)와 Auto Scaling Group 연동</strong></p>
<ol>
<li><strong>Attach to an existing load balancer</strong>를 선택하여 <strong>ALB와 연동</strong>합니다.</li>
<li><strong>Application Load Balancer</strong>에서 앞서 생성한 <code>MyALB</code>를 선택합니다.</li>
<li><strong>Target Group</strong>: <code>MyTargetGroup</code>을 선택합니다.</li>
<li><strong>다음</strong>을 클릭하여 계속 진행합니다.</li>
</ol>
</li>
</ol>
<hr>
<ol start="4">
<li><p><strong>ASG 용량 설정</strong></p>
<ol>
<li><strong>Desired Capacity (기본 용량)</strong>: 2 (기본적으로 두 개의 EC2 인스턴스를 유지)</li>
<li><strong>Minimum Capacity (최소 용량)</strong>: 1</li>
<li><strong>Maximum Capacity (최대 용량)</strong>: 4 (트래픽 부하에 따라 최대 4개의 EC2 인스턴스를 유지)</li>
</ol>
</li>
</ol>
<hr>
<ol start="5">
<li><p><strong>Auto Scaling 정책 설정</strong></p>
<p><strong>확장 및 축소 정책</strong>을 설정하여, 트래픽 부하에 따라 EC2 인스턴스를 자동으로 확장하거나 축소합니다.</p>
<ol>
<li><strong>Scaling Policy</strong>: <strong>Target Tracking Scaling Policy</strong>를 선택합니다.</li>
<li><strong>Metric Type</strong>: <code>Average CPU utilization</code>을 선택합니다.</li>
<li><strong>Target Value</strong>: 50%로 설정 (CPU 사용량이 50%를 초과하면 인스턴스를 확장).</li>
<li><strong>Finish</strong>를 클릭하여 Auto Scaling Group을 생성합니다.</li>
</ol>
</li>
</ol>
<hr>
<h4 id="3-auto-scaling-기능-테스트"><strong>3. Auto Scaling 기능 테스트</strong></h4>
<ol>
<li><p><strong>ALB DNS 이름 확인</strong>:</p>
<ul>
<li>ALB의 DNS 이름을 확인하고 브라우저에서 접속합니다. 새로고침을 하면서 로드밸런서가 EC2 인스턴스에 트래픽을 분산하는 것을 확인합니다.</li>
<li>URL 예시: <code>http://MyALB-1234567890.us-east-1.elb.amazonaws.com</code></li>
</ul>
</li>
<li><p><strong>Auto Scaling 테스트</strong>:</p>
<ul>
<li><strong>EC2 인스턴스</strong>의 CPU 부하를 인위적으로 증가시키기 위해 <strong>stress 명령어</strong>를 사용하여 부하를 발생시킵니다.<pre><code class="language-bash">sudo yum install stress -y
stress --cpu 2 --timeout 300</code></pre>
</li>
<li><strong>CloudWatch</strong>를 사용해 CPU 사용량을 모니터링하고, <strong>ASG가 자동으로 인스턴스를 추가</strong>하는지 확인합니다.</li>
</ul>
</li>
<li><p><strong>확장 확인</strong>:</p>
<ul>
<li>CPU 부하가 증가하면, <strong>Auto Scaling Group</strong>이 새로운 EC2 인스턴스를 자동으로 생성하고, ALB를 통해 로드밸런싱을 합니다.</li>
<li>EC2 대시보드에서 새로 생성된 인스턴스를 확인할 수 있습니다.</li>
<li>트래픽이 줄어들면 <strong>EC2 인스턴스 수가 자동으로 줄어드는지</strong>도 확인해 보세요.</li>
</ul>
</li>
</ol>
<hr>
<h3 id="정리"><strong>정리</strong></h3>
<p>이 실습에서는 다음을 배웠습니다:</p>
<ol>
<li><strong>Auto Scaling Group(ASG)</strong>을 사용해 <strong>자동으로 EC2 인스턴스</strong>를 확장하고 축소하는 기능을 설정.</li>
<li><strong>Application Load Balancer(ALB)</strong>와 <strong>ASG</strong>를 연동하여, 트래픽 부하에 따라 <strong>자동으로 EC2 인스턴스를 조정</strong>하고 트래픽을 균등하게 분배.</li>
<li><strong>실시간으로 CPU 부하</strong>를 모니터링하고 <strong>확장 정책</strong>이 적용되는지 확인.</li>
</ol>
<p>이 구성은 트래픽 변동에 따라 <strong>유연하게 서버 자원을 관리</strong>하고 <strong>자동 확장</strong> 기능을 통해 비용을 최적화할 수 있는 중요한 DevOps 기술을 실습할 수 있는 기회입니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ALB로 웹서버 2개 로드밸런싱]]></title>
            <link>https://velog.io/@captain-yun/ALB%EB%A1%9C-%EC%9B%B9%EC%84%9C%EB%B2%84-2%EA%B0%9C-%EB%A1%9C%EB%93%9C%EB%B0%B8%EB%9F%B0%EC%8B%B1</link>
            <guid>https://velog.io/@captain-yun/ALB%EB%A1%9C-%EC%9B%B9%EC%84%9C%EB%B2%84-2%EA%B0%9C-%EB%A1%9C%EB%93%9C%EB%B0%B8%EB%9F%B0%EC%8B%B1</guid>
            <pubDate>Fri, 18 Oct 2024 00:59:40 GMT</pubDate>
            <description><![CDATA[<p><strong>Hello World 웹서버 2개의 EC2 인스턴스를 로드밸런싱하는 Application Load Balancer(ALB) 구축 방법</strong></p>
<p>이번 실습 시나리오에서는 <strong>두 개의 EC2 인스턴스</strong>에 각각 <strong>&quot;Hello World&quot;</strong> 메시지를 반환하는 간단한 웹 서버를 실행하고, 이를 <strong>Application Load Balancer(ALB)</strong>를 사용해 <strong>로드밸런싱</strong>하는 방법을 설명하겠습니다. 모든 단계를 <strong>AWS 관리 콘솔</strong>을 통해 수행합니다.</p>
<h3 id="시나리오-목표"><strong>시나리오 목표</strong></h3>
<ol>
<li>두 개의 EC2 인스턴스 생성 및 설정.</li>
<li>EC2 인스턴스에 간단한 웹 서버 설치 및 &quot;Hello World&quot; 반환.</li>
<li>Application Load Balancer(ALB) 생성 및 EC2 인스턴스와 연결.</li>
<li>ALB를 통해 트래픽을 균등하게 분산하여 &quot;Hello World&quot; 페이지 제공.</li>
</ol>
<hr>
<h3 id="1-두-개의-ec2-인스턴스-생성"><strong>1. 두 개의 EC2 인스턴스 생성</strong></h3>
<ol>
<li><strong>AWS 콘솔에 로그인</strong>하고, <strong>EC2 대시보드</strong>로 이동합니다.</li>
<li><strong>인스턴스 시작</strong>을 클릭하여 EC2 인스턴스를 생성합니다.</li>
<li><strong>AMI 선택</strong>: <strong>Amazon Linux 2 AMI</strong>(Free Tier)를 선택합니다.</li>
<li><strong>인스턴스 유형 선택</strong>: <strong>t2.micro</strong>를 선택하고, <strong>다음</strong>을 클릭합니다.</li>
<li><strong>네트워크 구성</strong>:<ul>
<li>기본 VPC를 선택하고, 서브넷은 <strong>퍼블릭 서브넷</strong>으로 설정합니다.</li>
<li><strong>Auto-assign Public IP</strong>를 <strong>Enable</strong>로 설정합니다.</li>
</ul>
</li>
<li><strong>스토리지 구성</strong>: 기본값을 그대로 사용합니다.</li>
<li><strong>태그 추가</strong>: EC2 인스턴스를 구분하기 위해 태그를 추가합니다.<ul>
<li><code>Key: Name, Value: WebServer1</code></li>
</ul>
</li>
<li><strong>보안 그룹 설정</strong>:<ul>
<li><strong>새 보안 그룹</strong>을 생성합니다.</li>
<li><strong>인바운드 규칙</strong>에 <strong>HTTP(80)</strong>와 <strong>SSH(22)</strong>를 추가합니다.</li>
<li><strong>HTTP</strong>는 <strong>모든 소스(0.0.0.0/0)</strong>에서 트래픽을 허용하도록 설정합니다.</li>
</ul>
</li>
<li><strong>키 페어</strong>: 기존 키 페어를 선택하거나, 새 키 페어를 생성하여 EC2에 접근할 수 있도록 합니다.</li>
<li><strong>인스턴스 시작</strong>을 클릭합니다.</li>
</ol>
<p>이제 두 번째 인스턴스도 동일한 과정을 통해 생성합니다. 태그 이름만 <code>WebServer2</code>로 설정하면 됩니다.</p>
<hr>
<h3 id="2-ec2-인스턴스에-간단한-웹-서버-설치"><strong>2. EC2 인스턴스에 간단한 웹 서버 설치</strong></h3>
<h4 id="각-인스턴스에-접속하여-웹-서버를-설정합니다"><strong>각 인스턴스에 접속하여 웹 서버를 설정합니다:</strong></h4>
<ol>
<li><p><strong>SSH로 EC2 인스턴스 접속</strong>:</p>
<ul>
<li>로컬 터미널에서 아래 명령어로 EC2 인스턴스에 접속합니다. (공용 IP 사용)<pre><code class="language-bash">ssh -i &quot;your-key.pem&quot; ec2-user@&lt;Public-IP-of-WebServer1&gt;</code></pre>
</li>
</ul>
</li>
<li><p><strong>Apache 웹 서버 설치</strong>:</p>
<ul>
<li>접속 후, Apache 웹 서버를 설치하고 시작합니다.<pre><code class="language-bash">sudo yum update -y
sudo yum install httpd -y
sudo systemctl start httpd
sudo systemctl enable httpd</code></pre>
</li>
</ul>
</li>
<li><p><strong>Hello World 페이지 작성</strong>:</p>
<ul>
<li>아래 명령어로 <strong>index.html</strong> 파일을 작성하여 <strong>Hello World</strong> 메시지를 출력합니다.<pre><code class="language-bash">echo &quot;Hello World from WebServer1&quot; | sudo tee /var/www/html/index.html</code></pre>
</li>
</ul>
</li>
<li><p><strong>두 번째 EC2 인스턴스(WebServer2)</strong>에 대해서도 같은 절차를 진행합니다. <code>index.html</code> 파일은 아래와 같이 수정합니다:</p>
<pre><code class="language-bash">echo &quot;Hello World from WebServer2&quot; | sudo tee /var/www/html/index.html</code></pre>
</li>
<li><p><strong>HTTP 포트 확인</strong>:</p>
<ul>
<li>브라우저에서 각 EC2 인스턴스의 <strong>공용 IP</strong>로 접속하여 <code>Hello World</code> 메시지가 잘 출력되는지 확인합니다.<ul>
<li><code>http://&lt;Public-IP-of-WebServer1&gt;</code></li>
<li><code>http://&lt;Public-IP-of-WebServer2&gt;</code></li>
</ul>
</li>
</ul>
</li>
</ol>
<hr>
<h3 id="3-application-load-balanceralb-생성"><strong>3. Application Load Balancer(ALB) 생성</strong></h3>
<h4 id="alb-설정-과정"><strong>ALB 설정 과정:</strong></h4>
<ol>
<li><strong>EC2 대시보드</strong>에서 <strong>로드밸런서</strong>를 클릭한 후, <strong>로드 밸런서 생성</strong>을 선택합니다.</li>
<li><strong>로드 밸런서 유형 선택</strong>: <ul>
<li><strong>Application Load Balancer(ALB)</strong>를 선택합니다.</li>
</ul>
</li>
<li><strong>기본 설정</strong>:<ul>
<li><strong>로드 밸런서 이름</strong>: <code>MyALB</code></li>
<li><strong>스킴</strong>: <code>Internet-facing</code> (퍼블릭 접근 가능하게 설정)</li>
<li><strong>리전</strong>: EC2 인스턴스가 있는 리전을 선택합니다.</li>
</ul>
</li>
<li><strong>네트워크 매핑</strong>:<ul>
<li><strong>VPC</strong>: 두 EC2 인스턴스가 위치한 VPC를 선택합니다.</li>
<li><strong>가용 영역(AZ)</strong>: 각 AZ에 있는 퍼블릭 서브넷을 선택하고, 서브넷을 추가합니다.</li>
</ul>
</li>
<li><strong>보안 그룹 설정</strong>:<ul>
<li><strong>새 보안 그룹</strong>을 생성하거나 기존 보안 그룹을 사용합니다.</li>
<li><strong>인바운드 규칙</strong>에 <strong>HTTP(80)</strong>를 추가하여 트래픽을 허용합니다.</li>
</ul>
</li>
<li><strong>리스너 및 라우팅</strong>:<ul>
<li><strong>HTTP 리스너</strong>(포트 80)가 기본적으로 추가됩니다.</li>
<li><strong>대상 그룹(Target Group)</strong>을 새로 생성합니다:<ul>
<li><strong>대상 유형</strong>: <strong>인스턴스</strong></li>
<li><strong>대상 그룹 이름</strong>: <code>MyTargetGroup</code></li>
<li><strong>프로토콜</strong>: <strong>HTTP</strong></li>
<li><strong>포트</strong>: <strong>80</strong></li>
<li><strong>헬스 체크 경로</strong>: <code>/</code> (기본 설정 유지)</li>
</ul>
</li>
</ul>
</li>
<li><strong>대상 등록</strong>:<ul>
<li><strong>EC2 인스턴스 선택</strong> 화면에서 <strong>WebServer1</strong>과 <strong>WebServer2</strong> 인스턴스를 선택한 후 <strong>등록</strong>을 클릭합니다.</li>
</ul>
</li>
<li><strong>로드 밸런서 생성</strong>: 설정이 완료되면 <strong>로드 밸런서 생성</strong>을 클릭합니다.</li>
</ol>
<hr>
<h3 id="4-alb를-통해-트래픽-로드밸런싱-테스트"><strong>4. ALB를 통해 트래픽 로드밸런싱 테스트</strong></h3>
<ol>
<li><strong>ALB DNS 이름 확인</strong>:<ul>
<li><strong>로드 밸런서</strong> 목록에서 새로 생성한 ALB의 <strong>DNS 이름</strong>을 확인합니다.</li>
<li>예시: <code>MyALB-1234567890.us-east-1.elb.amazonaws.com</code></li>
</ul>
</li>
<li><strong>브라우저에서 ALB 접속 테스트</strong>:<ul>
<li>브라우저에서 <strong>ALB DNS 이름</strong>으로 접속하여 웹 페이지를 확인합니다.</li>
<li><code>http://MyALB-1234567890.us-east-1.elb.amazonaws.com</code></li>
<li>두 개의 EC2 인스턴스에 연결된 웹 서버 중 하나가 <strong>Hello World</strong> 메시지를 반환합니다. 새로고침을 여러 번 해보면, ALB가 트래픽을 <strong>두 서버에 번갈아가며 분산</strong>하는 것을 확인할 수 있습니다.</li>
</ul>
</li>
</ol>
<hr>
<h3 id="정리"><strong>정리</strong></h3>
<p>이 실습을 통해 다음을 배웠습니다:</p>
<ol>
<li><strong>EC2 인스턴스 생성</strong> 및 웹 서버 설치.</li>
<li><strong>Application Load Balancer(ALB)</strong> 생성 및 EC2 인스턴스를 대상 그룹으로 추가.</li>
<li>ALB를 통해 <strong>두 서버에 트래픽을 분산</strong>시키고, 웹서버가 번갈아가며 <strong>&quot;Hello World&quot; 메시지를 반환</strong>하는 것을 확인.</li>
</ol>
<p>이 구성은 <strong>로드밸런싱</strong>을 이용한 <strong>확장성</strong>과 <strong>고가용성</strong>을 위한 기본적인 웹 애플리케이션 배포 방식을 구현한 것입니다.</p>
]]></description>
        </item>
    </channel>
</rss>