<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>nowij__.log</title>
        <link>https://velog.io/</link>
        <description>뒤늦게 프로그래밍을 시작한 응애</description>
        <lastBuildDate>Thu, 14 Nov 2024 06:28:18 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>nowij__.log</title>
            <url>https://velog.velcdn.com/images/nowij_/profile/dc8399f6-a797-4905-a1d2-c40a338c8441/image.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. nowij__.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/nowij_" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[01_데이터 사이언스 개요]]></title>
            <link>https://velog.io/@nowij_/01%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%82%AC%EC%9D%B4%EC%96%B8%EC%8A%A4-%EA%B0%9C%EC%9A%94</link>
            <guid>https://velog.io/@nowij_/01%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%82%AC%EC%9D%B4%EC%96%B8%EC%8A%A4-%EA%B0%9C%EC%9A%94</guid>
            <pubDate>Thu, 14 Nov 2024 06:28:18 GMT</pubDate>
            <description><![CDATA[<h4 id="목표-데이터-사이언스에-대한-기본-개념-이해">목표: 데이터 사이언스에 대한 기본 개념 이해</h4>
<h1 id="데이터-사이언스-정의">데이터 사이언스 정의</h1>
<h3 id="데이터-과학data-science">데이터 과학(Data Science)</h3>
<ul>
<li><p>데이터 마이닝과 유사하게 정형, 비정형 형태를 포함한 다양한 데이터로부터 지식과 인사이트를 추출하는데 과학적 방법론, 프로세스, 알고리즘, 시스템을 동원하는 융합분야</p>
</li>
<li><p>데이터 과학은 데이터를 통해 실제 현상을 이해하고 분석하는데 통계학, 데이터 분석, 기계학습과 연관된 방법론을 통합하는 개념으로 정의</p>
</li>
<li><p>데이터의 구체적인 내용이 아닌 서로 다른 성질의 내용이나 형식의 데이터에 공통으로 존재하는 성질, 또는 그것들을 다루기 위한 기술의 개발에 착안점을 둔다 </p>
</li>
<li><p>사용 기술: 수학, 통계학, 계산기과학, 정보공학, 패턴인식, 기계학습, 데이터마이닝, 데이터베이스</p>
</li>
</ul>
<blockquote>
<p>데이터 사이언스 <a href="https://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0_%EC%82%AC%EC%9D%B4%EC%96%B8%EC%8A%A4">https://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0_%EC%82%AC%EC%9D%B4%EC%96%B8%EC%8A%A4</a></p>
</blockquote>
<blockquote>
<p>데이터 사이언스 프로세스
<img src="https://velog.velcdn.com/images/nowij_/post/b367c633-f5cb-481f-a080-86f88113c502/image.png" alt=""></p>
</blockquote>
<h3 id="데이터-분석">데이터 분석</h3>
<ul>
<li>유용한 정보를 발굴하고 결론 내용을 알리며 의사결정을 지원하는 것을 목표로 데이터를 정리, 변환, 모델링하는 과정</li>
<li>여러 면과 접근 방식이 있으며 다양한 이름의 다양한 기술을 아우르며 각기 다른 비즈니스, 과학, 사회과학 분야에 사용됨</li>
<li>오늘 날 비즈니스 부문에서 데이터 분석은 의사 결정을 더 과학적으로 만들어주고 비즈니스를 더 효율적으로 운영할 수 있도록 도와주는 역할</li>
</ul>
<h3 id="탐색적-데이터-분석eda">탐색적 데이터 분석(EDA)</h3>
<h4 id="데이터-시각화">데이터 시각화</h4>
<h4 id="정보-디자인">정보 디자인</h4>
<ul>
<li>정보를 구성해서 효율적으로 구성할 수 있도록하는 디자인)<h1 id="데이터-사이언스와-통계학">데이터 사이언스와 통계학</h1>
<h3 id="통계학">통계학</h3>
산술적 방법을 기초로하여 주로 다량의 데이터를 관찰하고 정리 및 분석하는 방법을 연구하는 수학의 한 분야
근대 과학으로서의 통계학은 19세기 중반 벨기에의 케틀레가 독일의 &quot;국상학&quot;과 영국의 &quot;정치 산술&quot;을 자연과학의 &quot;확률이론&quot;과 결합하여 수립한 학무에서 발전하였음</li>
</ul>
<blockquote>
<p>통계학 <a href="https://ko.wikipedia.org/wiki/%ED%86%B5%EA%B3%84%ED%95%99">https://ko.wikipedia.org/wiki/%ED%86%B5%EA%B3%84%ED%95%99</a></p>
</blockquote>
<h1 id="데이터-사이언스-벤-다이어그램">데이터 사이언스 벤 다이어그램</h1>
<p><img src="https://velog.velcdn.com/images/nowij_/post/046ef112-7040-4720-833c-3b40ff835ffe/image.png" alt=""></p>
<blockquote>
<p>출처 <a href="http://drewconway.com/zia/2013/3/26/the-data-science-venn-diagram">http://drewconway.com/zia/2013/3/26/the-data-science-venn-diagram</a></p>
</blockquote>
<ul>
<li>Hacking Skills : 프로그래밍적 지식</li>
<li>Math &amp; Statisitics Knowledge: 수학적 통계적 지식</li>
<li>Substantive Expertise: 도메인 지식</li>
</ul>
<h1 id="데이터와-인공지능의-관계">데이터와 인공지능의 관계</h1>
<h1 id="머신러닝과-딥러닝">머신러닝과 딥러닝</h1>
]]></description>
        </item>
        <item>
            <title><![CDATA[00_데이터 사이언스]]></title>
            <link>https://velog.io/@nowij_/00%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%82%AC%EC%9D%B4%EC%96%B8%EC%8A%A4</link>
            <guid>https://velog.io/@nowij_/00%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%82%AC%EC%9D%B4%EC%96%B8%EC%8A%A4</guid>
            <pubDate>Thu, 14 Nov 2024 06:05:46 GMT</pubDate>
            <description><![CDATA[<p>데이터 사이언스의 기초 지식을 위해 &#39;네이버 부스트코스&#39; 강좌를 들으려고 한다.</p>
<h1 id="커리큘럼">커리큘럼</h1>
<blockquote>
<p><strong>모두를 위한 데이터 사이언스</strong></p>
</blockquote>
<p>01 처음 시작하는 데이터 사이언스
02 데이터 과학 첫걸음(w.엔트리)
03 데이터 분석 환경 구성하기
04 데이터 사이언스를 위한 파이썬
05 파이썬 EDA
06 데이터 예측(w.텐서플로우)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2차 에이블데이]]></title>
            <link>https://velog.io/@nowij_/2%EC%B0%A8-%EC%97%90%EC%9D%B4%EB%B8%94%EB%8D%B0%EC%9D%B4</link>
            <guid>https://velog.io/@nowij_/2%EC%B0%A8-%EC%97%90%EC%9D%B4%EB%B8%94%EB%8D%B0%EC%9D%B4</guid>
            <pubDate>Mon, 24 Jun 2024 10:35:50 GMT</pubDate>
            <description><![CDATA[<h1 id="2차-에이블데이">2차 에이블데이</h1>
<p>7차 미니프로젝트가 끝나고 빅프로젝트를 들어가기 전에 에이블데이를 했어요</p>
<p>7차 미프가 진행되는 동안 1차 에이블데이와 동일하게 에이블러들에게 선물이 왔습니다!
<img src="https://velog.velcdn.com/images/nowij_/post/23ce4cec-73a9-4ba3-9821-32141d29f2e9/image.jpg" alt=""></p>
<p><img src="https://velog.velcdn.com/images/nowij_/post/d1bce79b-b612-48e4-8809-37124e40393c/image.jpg" alt=""></p>
<p><img src="https://velog.velcdn.com/images/nowij_/post/af1cf8d0-df7c-456d-91ba-f6c44189e8cb/image.jpg" alt=""></p>
<p>여행용 세트와 귀여운 핸드크림까지 왔어요! 이번에도 대만족 입니다 ~</p>
<p>또 에이블데이에 맛있는 음식이랑 먹어라고
<img src="https://velog.velcdn.com/images/nowij_/post/ba2cc54d-39ed-485a-a354-00f78d293ae5/image.jpg" alt=""></p>
<p>배민 쿠폰까지 보내주셨어요! 무려 3만원이나요 </p>
<p><img src="https://velog.velcdn.com/images/nowij_/post/15681dc0-5f4e-47eb-919a-b9bcab16cc16/image.png" alt=""></p>
<p>이건 에이블데이 진행 순서에요!</p>
<p>제목부터 궁금하죠?</p>
<h2 id="1-종이찢는-에이블러">1. 종이찢는 에이블러</h2>
<p><img src="https://velog.velcdn.com/images/nowij_/post/1df9805c-3d6a-4405-8ef8-60fbffa11349/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/nowij_/post/d212382b-27de-40b5-9a7f-b1462fba8e76/image.png" alt=""></p>
<p>종이를 찢어서 나온 그림 그대로 만드는거에요! </p>
<p>저는 다른 반 에이블러들이 매니저님을 어째 만들었을지 궁금합니다 ㅎ</p>
<h2 id="2-방-탈출-게임">2. 방 탈출 게임</h2>
<p><img src="https://velog.velcdn.com/images/nowij_/post/8e70b210-684a-4539-8216-6cd3af22cb8f/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/nowij_/post/f6ee611e-4b73-4445-a6b7-61a4a8b29ec1/image.png" alt=""></p>
<p>방탈출 게임도 했어요!</p>
<h2 id="3-우리만의-조별-포스터-만들기">3. 우리만의 조별 포스터 만들기</h2>
<p><img src="https://velog.velcdn.com/images/nowij_/post/83619ef1-3c19-48d4-9007-f173361b77c0/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/nowij_/post/839039a0-2969-4987-9a05-a4511bf5286f/image.png" alt=""></p>
<p>이건 우리 빅프로젝트 조의 포스터에요!</p>
<p>어때요 센스있게 잘만들었쬬? ㅋㅋㅋㅋ</p>
<p>조계명은 숙지하고 빅프 열심히 참여 하겠슴다!!</p>
<p>이렇게 에이블데이가 끝이나고 빅프로젝트만 앞두게 되었는데요</p>
<p>빅프 진행이 잘 될지 걱정도 되고 얼마나 좋은 결과물을 만들지 기대도 됩니다..ㅎ</p>
<p>10반 빅프 화이팅!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[7차 미니프로젝트]]></title>
            <link>https://velog.io/@nowij_/7%EC%B0%A8-%EB%AF%B8%EB%8B%88%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8</link>
            <guid>https://velog.io/@nowij_/7%EC%B0%A8-%EB%AF%B8%EB%8B%88%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8</guid>
            <pubDate>Mon, 24 Jun 2024 10:01:12 GMT</pubDate>
            <description><![CDATA[<h1 id="7차-미니프로젝트">7차 미니프로젝트</h1>
<p>4주간 집에서 수업을 듣다가 드디어 강의장에 왔어요 ~</p>
<p>7차 미니프로젝트 주제는 &#39;QA Chatbot 서비스 구축하기&#39;로 7일 동안 진행했습니다.</p>
<p>첫 3일은 개별 과제가 많았어서 강의장에 우리 조원들만 신청을 했어요!</p>
<p><img src="https://velog.velcdn.com/images/nowij_/post/dd7a9184-0200-4f8c-881f-f96854811ed5/image.jpg" alt=""></p>
<p>사람이 없어서 강의장 라운지에서 수업을 다 같이 들었어요! (이 사진은 옷 색깔이 포인트입니다 ㅎㅎ)</p>
<p>1~2일차에는 QA 모델을 LangChain을 사용해서 Vector DB에 저장하는 걸 배웠어요. </p>
<p>3~4일차에는 Web 서비스를 AWS를 통해서 진행하여 개인별 서버를 만들었습니다.</p>
<p>마지막 5~7일차에는 조 별로 &#39;KT 에이블스쿨 QnA chatbot 서비스&#39;를 구축하여 시스템을 구현했어요.</p>
<p>최종 메인화면은 이런식으로 ChatGPT와 AivleChat을 만들어서 에이블스쿨에 관한 정보를 물어볼 수 있는 기능을 만들었어요!</p>
<p><img src="https://velog.velcdn.com/images/nowij_/post/c81781d5-95a5-4422-9fee-036121413eba/image.png" alt=""></p>
<p>7차 미니프로젝트는 django를 사용하여 시스템을 구현하는게 조금 어려웠지만, 팀원들과 함께 진행하다보니 어려워도 잘 진행이 되었던 것 같아요.</p>
<p>프론트앤드, 백앤드까지 모든 부분을 서비스 해볼 수 있는 기회여서 빅프로젝트에 도움이 많이되는 7차 미니프로젝트 시간인 것 같습니다!</p>
<h1 id="맛집">맛집</h1>
<p>먼저 맛집 소개 전에 오늘도 삼인방은 미니프로젝트에 오기 전에 운동을 하러 갔습니다 ~</p>
<p><img src="https://velog.velcdn.com/images/nowij_/post/a382be88-a9aa-456a-ab18-4f3002e882ab/image.jpg" alt=""></p>
<p>혹시 운동 좋아하시면 교육장 근처 헬스장 추천 가능합니다 연락주세요 ~~!</p>
<p>운동하고 먹어줘야 겠죠?</p>
<p><img src="https://velog.velcdn.com/images/nowij_/post/0eab19bf-8228-4ba7-85c0-4f203542b991/image.jpg" alt=""></p>
<p>아침부터 편의점에서 호다닥 먹고 강의장으로 출근했습니당</p>
<h2 id="목촌돼지국밥-왕갈비탕">목촌돼지국밥 왕갈비탕</h2>
<p><img src="https://velog.velcdn.com/images/nowij_/post/9f5f8aca-5e33-4ed3-bbdb-0685579f1bfb/image.jpg" alt=""></p>
<p><img src="https://velog.velcdn.com/images/nowij_/post/4d84394c-b461-474b-a53b-df86337a832e/image.jpg" alt=""></p>
<p>저는 왕갈비탕을 먹었는데요! 국밥도 있고 메뉴가 다양해서 좋았어요!</p>
<p>여기 직원분들도 친절해서 간단하게 먹고 가기 좋은 장소인 것 같습니다~</p>
<h2 id="락천각">락천각</h2>
<p><img src="https://velog.velcdn.com/images/nowij_/post/d864491c-a770-4e6e-8363-22339d78b9fd/image.jpg" alt=""></p>
<p><img src="https://velog.velcdn.com/images/nowij_/post/88b614a6-0f41-472f-8540-8174841544c0/image.jpg" alt=""></p>
<p>여기는 부산역 주변에만 살아온 에이블러가 추천해준 중국집인데요!</p>
<p>가지튀김과 잡채밥입니다! 진심으로 맛있어요</p>
<p>안에 직원 분들도 전부 찐 중국 분들이 하시는 것 같아요.</p>
<p>잡채밥도 평소에 먹던 거랑 다르게 나와서 맛있었던 것 같습니다. 추천해용~</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[KT 에이블스쿨 6기 모집]]></title>
            <link>https://velog.io/@nowij_/KT-%EC%97%90%EC%9D%B4%EB%B8%94%EC%8A%A4%EC%BF%A8-6%EA%B8%B0-%EB%AA%A8%EC%A7%91</link>
            <guid>https://velog.io/@nowij_/KT-%EC%97%90%EC%9D%B4%EB%B8%94%EC%8A%A4%EC%BF%A8-6%EA%B8%B0-%EB%AA%A8%EC%A7%91</guid>
            <pubDate>Sat, 08 Jun 2024 11:38:33 GMT</pubDate>
            <description><![CDATA[<p>에이블스쿨 5기가 끝나가는 시점에서 6기를 모집한다는 소식이 들려오네요 !</p>
<p>내용은 아래와 같습니다!</p>
<h1 id="에이블스쿨-모집">에이블스쿨 모집</h1>
<p><img src="https://velog.velcdn.com/images/nowij_/post/1cf56b59-b555-4d79-a57e-0b4421e6a7a9/image.jpg" alt=""></p>
<h2 id="지원-자격-및-선발-프로세스">지원 자격 및 선발 프로세스</h2>
<p><img src="https://velog.velcdn.com/images/nowij_/post/ebf53596-c149-4d99-bf3a-b0216315ff42/image.jpg" alt=""></p>
<h2 id="트랙별-커리큘럼">트랙별 커리큘럼</h2>
<p><img src="https://velog.velcdn.com/images/nowij_/post/2c789969-087f-49da-b035-b0d0cc647488/image.jpg" alt=""></p>
<h2 id="친구추천-이벤트">친구추천 이벤트</h2>
<p><img src="https://velog.velcdn.com/images/nowij_/post/99d34f24-bdad-4374-aed6-381682d31a7d/image.png" alt=""></p>
<p>자세한 사항은 에이블스쿨 홈페이지에서 확인 가능하니 아래 링크로 들어가보시길 바랍니다!!</p>
<blockquote>
<p>KT 에이블스쿨 홈페이지: <a href="https://aivle.kt.co.kr/home/main/indexMain">https://aivle.kt.co.kr/home/main/indexMain</a></p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[15주차 가상화 클라우드 (3)]]></title>
            <link>https://velog.io/@nowij_/15%EC%A3%BC%EC%B0%A8-%EA%B0%80%EC%83%81%ED%99%94-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-3</link>
            <guid>https://velog.io/@nowij_/15%EC%A3%BC%EC%B0%A8-%EA%B0%80%EC%83%81%ED%99%94-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-3</guid>
            <pubDate>Wed, 29 May 2024 04:43:40 GMT</pubDate>
            <description><![CDATA[<h1 id="aws-주요-리소스-모니터링--비용">AWS 주요 리소스 모니터링 &amp; 비용</h1>
<ul>
<li><p>CPU 계산 연산 </p>
<ul>
<li>CPUUtilization</li>
<li>CPUCreditBalance</li>
<li>CPUCreditUsage</li>
</ul>
</li>
<li><p>Data 저장</p>
<ul>
<li>DiskReadBytes</li>
<li>DiskWriteBytes</li>
<li>DiskWriteOps</li>
</ul>
</li>
<li><p>통신</p>
<ul>
<li>NetworkOut</li>
<li>NetworkIn</li>
</ul>
</li>
<li><p>상태</p>
<ul>
<li>StatusCheckFailed-Instance</li>
<li>StatusCheckFailed-System</li>
</ul>
</li>
</ul>
<h2 id="모니터링-메트릭">모니터링 메트릭</h2>
<h3 id="1-사용자-지정-메트릭">(1) 사용자 지정 메트릭</h3>
<ul>
<li>기본 메트릭 이외에 사용자 지정 메트릭 수집 가능 </li>
<li>ex) 메모리 생성 기능</li>
</ul>
<h3 id="2-ec2-모니터링-주요-메트릭">(2) <code>EC2</code> 모니터링 주요 메트릭</h3>
<ul>
<li>CPUUtilization: 현재 인스턴스에 사용하고 있는 컴퓨팅 파워</li>
<li>CPUCreditUsage: 특정 기간 동안 사용된 CPU 크레딧 갯수 (소진시 비용 발생함)</li>
<li>DiskReadOps: 인스턴스에 연결된 로컬디스크에서 읽어 들인 오퍼레이션의 수</li>
<li>Network Out Traffic: 인스턴스의 네트워크 인터페이스를 통해 나간 바이트 양</li>
<li>Status Check<ul>
<li>System status check (재배포를 통한 개입 가능)<ul>
<li>네트워크 연결이 잘되는지</li>
<li>시스템 파워 구동이 잘되는지</li>
<li>물리 서비 이슈가 있는지</li>
</ul>
</li>
<li>Instance status check<ul>
<li>잘못된 네트워킹 또는 시작 구성이 잘되었는지</li>
<li>메모리 부족한지</li>
<li>파일 시스템 손상이 있는지</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="3-ebs-모니터링-주요-메트릭">(3) <code>EBS</code> 모니터링 주요 메트릭</h3>
<ul>
<li><p><strong>VOLUMEIDELTIME</strong>: 지정된 기간 에서 읽기 또는 쓰기 작업이 없는 총 시간
=&gt; 즉, 볼륨이 놀고 있는 시간으로 비용 최적화를 위한 볼륨 제거에 참고함</p>
</li>
<li><p><strong>VOLUMEQUEUELENGTH</strong>: 디바이스에서 보류 중인 I/O 요청의 수
=&gt; 많은 양을 받아서 초과 시 대기열에 대기하는 방식임</p>
</li>
<li><p><strong>BURSTABALANCE</strong>: 볼륨에 대한 버스트 버킷의 크레딧의 백분율</p>
</li>
<li><p><strong>EBS volumes 모니터링 옵션</strong></p>
<ul>
<li>기본 5분 주기 수집</li>
<li>상세 1분 주기 수집</li>
</ul>
</li>
<li><p><strong>Status Check</strong></p>
<ul>
<li>OK (정상)</li>
<li>Warning (성능저하)</li>
<li>Impaired (중단됨, I/O 비활성화)</li>
<li>Insufficient-data</li>
</ul>
</li>
</ul>
<h3 id="4-elb-모니터링-주요-메트릭">(4) <code>ELB</code> 모니터링 주요 메트릭</h3>
<ul>
<li><p><strong>Backend Connection Error</strong></p>
<ul>
<li>ELB와 인스턴스 간에 커넥션이 맺어지지 않은 숫자</li>
</ul>
</li>
<li><p><strong>Latency</strong></p>
<ul>
<li>외부 요청을 받아 타겟 그룹을 전달한 ELBrk EC2 인스턴스로부터 응답을 받을 때 까지의 지연시간</li>
</ul>
</li>
<li><p><strong>Surge Queue Length</strong></p>
<ul>
<li>로드밸러서에서 라우팅이 지연되고 있는 총 요청의 수
대기열의 개념</li>
</ul>
</li>
<li><p><strong>Spill Over Count</strong></p>
<ul>
<li>거부된 요청 값으로 0 초과 되는 경우 조치를 권장함</li>
</ul>
</li>
<li><p><strong>Request Count</strong></p>
<ul>
<li>ElB에서 수신한 요청 수</li>
</ul>
</li>
<li><p><strong>Healthy Host Count</strong></p>
<ul>
<li>정상 서버 수</li>
</ul>
</li>
<li><p><strong>HTTP Responses</strong></p>
<ul>
<li>5xx: 서버 오류나 예외적인 동작 발생시</li>
<li>4xx: 잘못된 요청 또는 파일 찾을 수 없을시</li>
<li>2xx: 정상</li>
</ul>
</li>
</ul>
<h3 id="5-ecs-모니터링-주요-메트릭">(5) <code>ECS</code> 모니터링 주요 메트릭</h3>
<ul>
<li>ECS 시작 유형 별 메트릭: Fargate 시작 유형(CPU, 메모리 사용률 제공), Amazon EC2 시작 유형</li>
<li>컨테이너에 가능한 healthStatus<ul>
<li>HEALTHY: 상태 확인 통과</li>
<li>UNHEALTHY: 상태확인 실패</li>
<li>UNKNOWN: 상태 확인이 평가 중이거나 정의되지 않은 상태</li>
</ul>
</li>
</ul>
<h3 id="6-eks-모니터링">(6) <code>EKS</code> 모니터링</h3>
<ul>
<li>로깅 및 모니터링을 위한 기본 제공 도구를 제공함</li>
<li>CloudWatch Container Insights 기반: 클러스터, 노드, 포드, 서비스 수준에서 Amazon EKS에 대한 포괄적인 메트릭 제공</li>
<li>Amazon Devops Grur 기반: 노드 수준의 운영 성능 및 가용성 감지</li>
<li>Prometheus 기반</li>
</ul>
<h2 id="비용">비용</h2>
<h3 id="1-billing-and-cost-management">(1) Billing and Cost Management</h3>
<ul>
<li>잘못 사용시 막대한 비용 발생 가능</li>
<li>매달 PDF invoice 메일 전송 가능</li>
<li>비용 관련 경보 설정 가능</li>
<li>비용 보고서를 S3 Bucket에 저장 가능</li>
</ul>
<h3 id="2-비용-이상-탐지">(2) 비용 이상 탐지</h3>
<ul>
<li>&#39;Cost Anomaly Detection 활성시 기계 학습 알고리즘 적용<ul>
<li>이상 탐지를 위한 모니터링</li>
<li>이상 지출이 탐지 되면 알림 수신</li>
<li>비용 및 사용 급증의 근본 원인 식별함</li>
</ul>
</li>
</ul>
<h4 id="aws-cost-explorer">AWS Cost Explorer</h4>
<ul>
<li>시간에 따른 AWS 비용과 사용량을 시각화하는 인터페이스 제공</li>
<li>비용 및 사용량 데이터를 분석하는 사용자 지정 보고서 작성</li>
<li>계정에 연결된 요금과 사용량을 검토</li>
</ul>
<h4 id="aws-budgets">AWS Budgets</h4>
<ul>
<li>비용 및 사용량 모니터링</li>
<li>예약 보고서 생성</li>
<li>임계값 도달 시 작업 실행</li>
</ul>
<h4 id="aws-cost-explorer--aws-budgets-비교">AWS Cost Explorer / AWS Budgets 비교</h4>
<ul>
<li>Cost Explorer<ul>
<li>비용 사용 관련 사용자 지정 보고서</li>
<li>비용 시각화, 분석 중점</li>
<li>사용 패턴 파악</li>
</ul>
</li>
<li>AWS Budgets<ul>
<li>제한 임계값 초과 비용 발생 방지</li>
<li>비용 계획, 예측 집행 중점</li>
<li>예산과 지출 비교</li>
</ul>
</li>
</ul>
<h1 id="쿠버네티스-개요-및-주요-아키텍쳐">쿠버네티스 개요 및 주요 아키텍쳐</h1>
<h2 id="컨테이너">컨테이너</h2>
<ul>
<li>애플리케이션과 그 실행 환경을 패키징하여 어디서나 일관되게 실행할 수 있게 해주느 가벼운 가상화 기술</li>
<li>쿠버네티스는 이 컨테이너들을 자동으로 배포, 확장, 관리하는 오픈소스 플랫폼임</li>
</ul>
<h3 id="가상머신-vs-컨테이너">가상머신 vs 컨테이너</h3>
<p><img src="https://velog.velcdn.com/images/nowij_/post/aff489e6-113b-4643-84f2-3a0204b4dacc/image.png" alt=""></p>
<h3 id="monolithic-vs-microservice">Monolithic vs MicroService</h3>
<ul>
<li><p>Monolithic 아키텍처 (MA)</p>
<ul>
<li>고용량 단일 서버로 구성</li>
<li>모든 기능이 하나의 애플리케이션으로 결합</li>
<li>각 부분이 강하게 결합되어 있어, 하나의 부분에 문제가 생기면 전체 애플리케이션에 영향을 미칠 수 있음</li>
</ul>
</li>
<li><p>MicroService 아키텍처 (MSA)</p>
<ul>
<li>작은 서버들의 집합체로 구성</li>
<li>각 기능이 독립적인 서비스로 나누어짐</li>
<li>서비스의 문제가 다른 서비스에 영향이 적음
=&gt; 쿠버네티스가 주로 이루어진 형태</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/nowij_/post/4a4a9108-0458-45dd-a693-c767f91463c2/image.png" alt=""></p>
<h3 id="docker">Docker</h3>
<ul>
<li>컨에티너 기술을 만들고 발표한 회사</li>
<li>컨테이너 엔진으로 컨테이너를 실행하고 관리하는 도구</li>
<li>컨테이너 기반 오픈소스 가상화 플랫폼</li>
</ul>
<h4 id="dockerfile">Dockerfile</h4>
<ul>
<li>컨테이너 이미지를 생성하기 위한 레시피 파일</li>
<li>파일에 이미지 생성과정을 문법에 따라 작성하여 저장함</li>
<li>명령어: FROM, WORKDIR, RUN, CMD</li>
</ul>
<h4 id="docker-image">Docker Image</h4>
<ul>
<li>서비스 운영에 필요한 프로그램, 소스코드, 라이브러리 등을 묶는 형태</li>
<li>Build: 도커 이미지는 Dockerfile을 사용하여 커스텀 생성</li>
<li>Run: 도커 이미지를 사용하여 다수의 Container 실행</li>
</ul>
<blockquote>
</blockquote>
<pre><code>docker build -t &lt;Namespace&gt;/&lt;ImageName&gt;:&lt;tag&gt;
ex)
- 모두 같은 명령임
&gt;
docker.io/library/nginx:latest
&gt;
&lt;                &gt;nginx:latest =&gt;  DH(도커허브) 주소 생략 가능
&gt;
&lt;                &gt;nginx(     ) =&gt;  버전 생략가능</code></pre><ul>
<li><p>Docker Private Image: Private 이미지저장소를 구축, 이미지 관리시 Namespace 안에 서버주소 및 포트번호를 사용함</p>
</li>
<li><p>Docker HUB: 컨테이너 이미지들을 서버에 저장하고 관리, 공개 이미지를 무료로 관리</p>
</li>
</ul>
<h4 id="docker-명령-구조">Docker 명령 구조</h4>
<p><img src="https://velog.velcdn.com/images/nowij_/post/819ea099-2a3c-4435-b311-082ccbf67f57/image.png" alt=""></p>
<h3 id="컨테이너-오케스트레이션">컨테이너 오케스트레이션</h3>
<ul>
<li>다수의 컨테이너를 다수의 시스템에서 각각의 목적에 따라 배포, 복제, 장애복구 등 활동을 총괄적으로 관리함</li>
</ul>
<h4 id="일반적기능">일반적기능</h4>
<ul>
<li><strong>스케줄링</strong></li>
<li><strong>자동확장 및 축소</strong>로 리소스 효율적 사용 관리</li>
<li><strong>장애복구</strong>로 서버 정상 운영</li>
<li><strong>로깅 및 모니터링</strong>으로 장애복구 등 수행</li>
<li><strong>검색 및 통신</strong>으로 요청을 통해 전달함</li>
<li><strong>업데이트 및 롤백</strong>으로 기능 추가 디버깅 등 수행</li>
</ul>
<h4 id="컨테이너-오케스트레이터">컨테이너 오케스트레이터</h4>
<p>컨테이너 오케스트레이션을 해주는 도구
ex)</p>
<ul>
<li>Kubernetes (표준처럼 사용함)</li>
<li>Docker Swarm</li>
<li>AWS ECS</li>
<li>Azure Container Instance</li>
<li>Azure Service Fabric</li>
</ul>
<h2 id="kubernetes">Kubernetes</h2>
<ul>
<li><p>k8s</p>
</li>
<li><p>컨테이너형 애플리케이션의 배포, 확장, 관리를 자동화하는 오픈소스시스템</p>
</li>
<li><p>높은 확장성과 원활한 이동성</p>
</li>
<li><p>여러 환경에 구축 가능</p>
</li>
<li><p>오픈 소스 도구</p>
</li>
<li><p>플러그가 가능한 모듈 형식</p>
</li>
</ul>
<h3 id="쿠버네티스-아키텍쳐">쿠버네티스 아키텍쳐</h3>
<h4 id="master-node">Master Node</h4>
<p><img src="https://velog.velcdn.com/images/nowij_/post/59e6368c-0af4-46b2-a659-26befe29c7dc/image.png" alt=""></p>
<ul>
<li><p>API: User에서 명령을 수용할지 요청을 검증하고 필요한 컴포넌트들에게 전달하는 중간다리 역할을 함</p>
</li>
<li><p>sched: 명령을 어디에 배포할지 어떤 Node에 설지할지 결정만 함
ex) 1번 Node -  3개, 2번 Node - 1개, 3번 Node - 1개</p>
</li>
<li><p>Controller Manager: 클러스터의 상태를 원하는 상태로 유지하기 위해 다양한 컨트롤러들을 실행하는 역할</p>
</li>
<li><p>etcd: 쿠버네티스에서 중요한 데이터를 저장하는 고가용성 키-값 저장소로 쿠버네티스 클러스터의 두뇌 역할을 함</p>
</li>
</ul>
<h4 id="worker-node">Worker Node</h4>
<p><img src="https://velog.velcdn.com/images/nowij_/post/f277fb05-62ae-4be6-bea5-74b41134fa89/image.png" alt=""></p>
<ul>
<li><p>Container Runtime: 컨테이너를 실행하고 노드에서 컨테이너 이미지를 관리함</p>
</li>
<li><p>Kubelet: 컨테이너의 실행 상태를 모니터링하며 상태 정보를 마스터 노드에 보고하는 에이전트 (팀장 역할임)</p>
</li>
<li><p>Kube-proxy: 네트워킹을 담당하는 컴포넌트로 주 역할은 네트워크 규칙을 관리하여 클러스터 내의 서비스 간 통신을 가능하게 함</p>
</li>
</ul>
<h4 id="addons">Addons</h4>
<ul>
<li>쿠버네티스에서 추가적으로 설치하여 기능을 확장 시킬 수 있는 도구</li>
</ul>
<h1 id="쿠버네티스-클러스터-배포">쿠버네티스 클러스터 배포</h1>
<h2 id="쿠버네티스-배포-유형">쿠버네티스 배포 유형</h2>
<h4 id="all-in-one-single-node-installation">All-in-One Single-Node Installation</h4>
<ul>
<li>모든 쿠버네티스 컴포넌트가 하나의 노드에서 실행된다.</li>
<li>설치와 관리가 간편하며 테스트 환경에 적합함</li>
<li>단일 장애 지점으로 인해 신뢰성이 낮음</li>
</ul>
<h4 id="single-node-etcd-single-master-and-multi-worker-installation">Single-Node etcd, Single-Master and Multi-Worker Installation</h4>
<ul>
<li>하나의 노드에 etcd와 마스터 컴포넌트를 설치하고 여러 워커노드를 둔다.</li>
<li>간단한 설정으로 더 나은 성능과 확장성을 제공함</li>
<li>etcd와 마스터 노드의 단일 장애 지점이 존재</li>
</ul>
<h4 id="single-node-etcd-multi-master-and-multi-worker-installation">Single-Node etcd, Multi-Master and Multi-Worker Installation</h4>
<ul>
<li>하나의 노드에 etcd를 설치하고, 여러 마스터와 워커 노드를 둔다.</li>
<li>마스터 노드의 고가용성을 제공하여 신뢰성을 높임</li>
<li>etcd의 단일 장애 지점이 존재</li>
</ul>
<h4 id="multi-node-etcd-multi-master-and-multi-worker-installation">Multi-Node etcd, Multi-Master and Multi-Worker Installation</h4>
<ul>
<li>여러 노드에 걸쳐 etcd, 마스터, 워커 컴포넌트를 분산하여 설치한다.</li>
<li>최고 수준의 고가용성과 신뢰성을 제공함</li>
<li>설치와 관리가 가장 복잡함</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[15주차 가상화클라우드(2)]]></title>
            <link>https://velog.io/@nowij_/15%EC%A3%BC%EC%B0%A8-%EA%B0%80%EC%83%81%ED%99%94%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C2</link>
            <guid>https://velog.io/@nowij_/15%EC%A3%BC%EC%B0%A8-%EA%B0%80%EC%83%81%ED%99%94%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C2</guid>
            <pubDate>Tue, 28 May 2024 05:16:39 GMT</pubDate>
            <description><![CDATA[<h1 id="aws-고가용성-구현-region-az-elb-asg">AWS 고가용성 구현 (Region, AZ, ELB, ASG)</h1>
<h4 id="가용성">가용성</h4>
<ul>
<li>서비스 가용성</li>
<li>워크로드를 사용할 수 있는 시간의 비율</li>
</ul>
<h4 id="고가용성">고가용성</h4>
<ul>
<li>높은 가용성</li>
<li>지속적으로 구현한 시스템이 정상적으로 운영되는 성질</li>
<li>고장이 나더라도 복구를 해서 서비스를 지속할 수 있는 능력</li>
</ul>
<h2 id="1-region--availability-zone">(1) Region / Availability Zone</h2>
<ul>
<li>AWS는 Region과 Availability Zone 으로 이루어짐</li>
</ul>
<h3 id="region">Region</h3>
<ul>
<li>전 세계에서 데이터 센터를 클러스터링(그룹화) 하는 물리적 위치</li>
<li>어떤 지역으로 서비스 하느냐에 따라 지리적으로 가까운 Region 선택</li>
</ul>
<h4 id="region-code">Region code</h4>
<ul>
<li>Region Code로 구분 가능</li>
<li>AWS는 Region 단위로 서비스 된다</li>
<li>Resource는 Region 내 AZ 단위로 배포 됨</li>
</ul>
<h3 id="availability-zone">Availability Zone</h3>
<ul>
<li>Region 내 물리적을 분리된 전력 네트워킹 장치가 분리된 영역</li>
<li>보통 AZ 별 데이터센터가 분리된 구조</li>
</ul>
<h4 id="az간-구성">AZ간 구성</h4>
<ul>
<li>Region은 보통 2~3개 AZ로 구성</li>
<li>동일 Region 내 AZ는 전용 광 네트워크로 구성되어 매우 낮은 지연속도와 높은 처리량 보장</li>
<li>Az 간 모든 데이터 트래픽은 기본 암호화</li>
</ul>
<h4 id="az-분산-배치">AZ 분산 배치</h4>
<ul>
<li>동일 AZ 내 모든 인스턴스를 배치하는 경우 AZ 장애 발생시, 본인이 구축한 서비스도 장애로 이어질 수 있음</li>
<li>동일 역할을 수행하는 인스턴스의 경우, AZ를 분산 배치하여 서비스 가요성을 높이는 것이 좋음</li>
</ul>
<h2 id="2-az--vpc">(2) AZ / VPC</h2>
<ul>
<li>Region - VPC 와 맵핑</li>
<li>AZ - Subnet 맵핑</li>
</ul>
<h3 id="vpc-구성">VPC 구성</h3>
<ul>
<li><strong>Public Subnet</strong>: 외부 통신용</li>
<li><strong>Private Subnet</strong>: Public과 Private간 연동용</li>
</ul>
<h4 id="az별-subnet-구성">AZ별 Subnet 구성</h4>
<ul>
<li>각각의 Subnet을 AZ 수 만큼 생성</li>
<li>Total Subnet 수 = AZ Count x 용도별 Subnet</li>
<li>인스턴스 생성시 각각에 맞는 Subnet 선택 후, AZ별로 분산 구성</li>
</ul>
<h4 id="az-장애-발생-시">AZ 장애 발생 시</h4>
<ul>
<li>동일 용도의 인스턴스 및 서비스 set가 다른 AZ에 구성되어 있으므로 가용성을 높일 수 있음</li>
</ul>
<h2 id="3-load-balancer">(3) Load Balancer</h2>
<ul>
<li>인입되는 트래픽을 특정 알고리즘 기반으로 다수의 서버로 분산 시켜주는 장비</li>
</ul>
<h2 id="4-elb">(4) ELB</h2>
<ul>
<li>Region 내 인스턴스 및 다양한 서비스로 트래픽 분배 서비스</li>
<li>다수의 AZ으로 트래픽 분배</li>
<li>HTTP/S 웹 기반 트래픽, TCP/S 프로토콜 기반</li>
<li>고가용성 기반 L4 / L7 서비스</li>
<li>AZ 분산 및 트래픽 증가 =&gt; 자동 Scale-out 기능 지원</li>
</ul>
<h4 id="scale-out">Scale-out</h4>
<ul>
<li>트래픽 증가시 서비스에 투입되는 서버를 증설하여 각 서버가 처리하는 부하를 낮추는 방식</li>
<li>Web based 서비스의 경우 많이 사용하는 구성으로 세션이나 Data 처리 영역 없이 Stateless(무상태) 한 서버에서 주로 사용</li>
</ul>
<h4 id="scale-in">Scale-in</h4>
<ul>
<li>트래픽 감소시, 배포된 서버를 제거하는 방식</li>
<li>낭비되는 리소스를 줄임으로 비용 최적화가 목적임</li>
</ul>
<h4 id="elb-알고리즘">ELB 알고리즘</h4>
<ul>
<li>Roud Robin</li>
<li>Hashing</li>
<li>Weighted RR</li>
<li>Least Connection</li>
<li>Weighted LC</li>
</ul>
<h4 id="nlb-alb">NLB, ALB</h4>
<ul>
<li><strong>Load Balancer</strong> : 인입되는 트래픽을 특정 알고리즘 기반으로 다수의 서버로 분산 시켜주는 장비</li>
<li><strong>NLB</strong> : L4 Load Balancer, TCP/UDP</li>
<li><strong>ALB</strong> : L7 Load Balancer, HTTP/HTTPS</li>
</ul>
<h4 id="elb-헬스체크-기능">ELB 헬스체크 기능</h4>
<ul>
<li>주기적으로 서버가 정상 상태인 확인함</li>
<li>서버가 정상 상태가 아니면 트래픽을 전달하지 않게 하는 기능<ul>
<li>NLB: TCP/UDP Port Alive Check</li>
<li>ALB: URL 기반 응답체크</li>
</ul>
</li>
</ul>
<h4 id="elb-az-분산배치">ELB AZ 분산배치</h4>
<ul>
<li>활성화된 AZ 에는 Load Balancer 노드가 자동으로 생성되어 배치</li>
<li>기본적으로 해당 AZ에 배치된 인스턴스는 해당 AZ의 Load Balancer 노드가 트래픽을 처리</li>
</ul>
<h4 id="cross-zone-load-balancing">Cross-Zone Load Balancing</h4>
<ul>
<li>교차 영역 로드 밸런싱이 활성화 되면, Load Balancer가 위치한 AZ와 상관없이 타겟 AZ에 있는 <strong>모든</strong> 인스턴스에 트래픽 라우팅 가능함<ul>
<li>ALB는 Cross-Zone LB가 기본 <strong>활성화 상태</strong></li>
<li>NLB는 기본 <strong>비활성 상태</strong></li>
</ul>
</li>
</ul>
<h4 id="cross-zone-load-balancing-비활성화">Cross-Zone Load Balancing 비활성화</h4>
<ul>
<li>교차영역 로드 밸런싱이 비활성화 상태이면, 로드밸런서 노드가 위치한 AZ에 상주하는 <strong>타겟 인스턴에게만</strong> 라우팅 가능</li>
<li>AZ에 위치한 인스턴스 마다 균일한 부하 분산이 어려움</li>
</ul>
<h2 id="5-auto-scaling-group">(5) Auto Scaling Group</h2>
<ul>
<li>인스턴스 증가 작업을 자동으로 수행함</li>
<li>Scaling을 자동으로</li>
</ul>
<h4 id="lauch-template">Lauch Template</h4>
<ul>
<li>인스턴스를 배포하기 위한 정보들의 묶음</li>
<li>기본정보를 보여줌</li>
<li>추가 정보를 미리 Template으로 정의 가능</li>
<li>사용자는 Template을 그대로 인스턴스로 배포하는데 사용</li>
<li>Launch Template, ELB, Auto Scaling Group으로 구성</li>
</ul>
<h1 id="aws-모니터링">AWS 모니터링</h1>
<h2 id="모니터링">모니터링</h2>
<ul>
<li><p>데이터를 <strong>수집</strong>, <strong>분석</strong>, <strong>사용</strong>하는 행위</p>
</li>
<li><p>모니터링 목적</p>
<ul>
<li>IT 리소스 및 시스템에 대한 여러가지 질문의 답 산출 및 의사 결정<ul>
<li>매일 몇 명 사이트 방문?</li>
<li>시간 경과에 따른 방문자 수 추적</li>
<li>웹 사이트 성능, 가용성 문제가 있는지?</li>
<li>인스턴스 용량이 부족한지?</li>
<li>사이트가 정상 동작 하는지?
=&gt; 리소스 과다 사용, 애플리케이션 결함, 리소스 구성 오류, 보안 이벤트로 운영 문제 감시 가능함</li>
</ul>
</li>
</ul>
</li>
</ul>
<h4 id="모니터링의-이점">모니터링의 이점</h4>
<p>1) 최종 사용자가 운영 문제를 인식하기 전에 사전에 대응할 수 있음</p>
<ul>
<li>빠른 인식</li>
</ul>
<p>2) 리소스의 성능 및 안정성을 개선할 수 있음 </p>
<ul>
<li>병목현상, 비효율적 아키텍처 확인 가능</li>
</ul>
<p>3) 보안 위협 및 이벤트 인식</p>
<ul>
<li>모니터링시 시간이 지남에 따라 기준선이 생겨 이상현상을 발견을 할 수 있음</li>
</ul>
<p>4) 비즈니스를 위해 데이터 중심의 의사결정을 수립할 수 있음</p>
<p>5) 비용 효율적인 솔루션을 구축</p>
<ul>
<li>사용량이 부족한 리소스 확인, 사용량에 맞게 조정하여 비용 최적화할 수 있음</li>
</ul>
<h3 id="메트릭metric">메트릭(Metric)</h3>
<ul>
<li>리소스가 생성하는 다양한 형태의 데이터 중 모니터링을 통해 수집된 데이터 (지표)
ex) 시간 경과에 따라 EC2 인스턴스에서 수집, 분석 되는 메트릭<ul>
<li>평균 CPU 사용률</li>
<li>네트워크 사용률</li>
<li>디스크 성능</li>
<li>메모리 사용률</li>
<li>각종 로그</li>
</ul>
</li>
</ul>
<h4 id="메트릭의-다양성">메트릭의 다양성</h4>
<ul>
<li>AWS 리소스 마다 다른 유형의 메트릭을 가짐</li>
<li>리소스, 목표, 상황에 따라 다양한 메트릭이 존재함<ul>
<li>Amazon S3 버킷<ul>
<li>CPU 사용률은 없음</li>
<li>버킷에 저장된 객체와 관련된 메트릭 (버킷 내 객체 수, 용량)</li>
<li>버킷에 대한 요쳥과 관련된 메트릭 (버킷을 읽기, 수정)</li>
</ul>
</li>
<li>Amazon RDS<ul>
<li>데이터베이스 연결</li>
<li>CPU 사용률</li>
<li>디스크 공간 소비</li>
</ul>
</li>
</ul>
</li>
</ul>
<h4 id="trobleshooting-process">Trobleshooting Process</h4>
<ul>
<li><p>Detect =&gt; Identify =&gt; Fix =&gt; Verify</p>
<p>MTTI: 문제를 인식하여 원인을 파악하기 까지의 시간 (Detect ~ Identify)</p>
</li>
</ul>
<h4 id="모니터링-솔루션">모니터링 솔루션</h4>
<ul>
<li><p>리소스의 운영상태 및 사용량에 대한 데이터를 수집하고 분석하는 방법이 필요</p>
</li>
<li><p>중앙 집중식 모니터링 필요</p>
</li>
<li><p>데이터 가시성 확보 필요</p>
</li>
<li><p>ex) AWS CloudWatch 등</p>
</li>
</ul>
<h2 id="aws-cloudwatch">AWS CloudWatch</h2>
<ul>
<li>AWS 리소스 및 애플리케이션을 관측하고 모니터링 하는 도구</li>
<li>수행 작업<ul>
<li>환경에서 이상 동작 감지</li>
<li>알림를 설정</li>
<li>로그 및 메트릭을 시각화</li>
<li>크기 조정같은 자동화 작업</li>
<li>정상으로 유지하기 위한 인사이트</li>
</ul>
</li>
</ul>
<h3 id="cloudwatch-구조">CloudWatch 구조</h3>
<ul>
<li><p>CloudWatch Dashboard</p>
<ul>
<li>메트릭 정보를 그래프로 시각화</li>
</ul>
</li>
<li><p>CloudWatch 메트릭</p>
<ul>
<li>리소스 성능 확인</li>
</ul>
</li>
<li><p>CloudWatch Insight</p>
<ul>
<li>가시성 확보</li>
</ul>
</li>
<li><p>CloudWatch Log</p>
<ul>
<li>서비스 로그들을 수집, 저장, 탐색, 분석</li>
</ul>
</li>
<li><p>CloudWatch Alarm</p>
<ul>
<li>이벤트를 사용자에게 알림</li>
</ul>
</li>
<li><p>CloudWatch Event</p>
<ul>
<li>변경사항에 관한 기록 </li>
</ul>
</li>
<li><p>CloudWatch Service Lens</p>
</li>
<li><p>CloudWatch Synthetics</p>
</li>
</ul>
<h4 id="cloudwatch-dashboard">CloudWatch Dashboard</h4>
<ul>
<li>리소스와 애플리케이션의 메트릭 및 경보 시각화</li>
<li>원하는 메트릭 정보만 모아 대시보드를 생성할 수 있음</li>
<li>AWS 계정에 공유되고 있는 애플리케이션을 모니터링하고 문제를 해결 가능</li>
<li>애니메이션 대시보드를 통해 메트릭 데이터를 재생하여 가시성 확보</li>
<li>AWS 계정이 없어도 대시보드 공유 가능</li>
</ul>
<h4 id="cloudwatch-alarm">CloudWatch Alarm</h4>
<ul>
<li><p>이벤트 및 메트릭 변경에 대한 경보 제공</p>
</li>
<li><p>3가지 알람 상태 (OK / ALARM / INSUFFICIENT_DATA) </p>
</li>
<li><p>경보 생성 가능 유형</p>
<ul>
<li><p>메트릭 경보: 정해진 기간 동안의 값을 계산하여 트리거
ex) CPU 사용량이 5분 60% 초과시 경고 발생</p>
</li>
<li><p>복합 경보: 다른경보 상태 확인 후 모든 조건 충족 시 트리거
ex) CPU, 메모리, 스토리지 경보가 동시에 경고이면 경고 발생함
=&gt; 경고 노이즈 감소 효과, EC2 작업이나 Auto Scaling 작업 트리거 불가함</p>
</li>
</ul>
</li>
</ul>
<h4 id="cloudwatch-metric">CloudWatch Metric</h4>
<ul>
<li>리소스 성능 관련 메트릭 확인 가능</li>
<li>기본 5분 주기 메트릭 제공 (1분 주기는 유료)</li>
<li>메트릭 보존<ul>
<li>1분(15일), 5분(63일), 1시간(455일)</li>
</ul>
</li>
<li>맞춤형 메트릭 수집 가능</li>
<li>운영상태, 메트릭 필터링, 수집, 시각화를 지원함</li>
<li>메트릭 값<ul>
<li>CloudWatch에서의 통계 값
ex) Minnimun, Maximun, Sum, Average, SampleCount</li>
</ul>
</li>
</ul>
<h4 id="cloudwatch-log">CloudWatch Log</h4>
<ul>
<li>AWS 로그 파일을 중앙 집중화 하여 저장 및 접근함</li>
<li>보관은 무기한함 (1일 ~ 10년 변경 가능)</li>
<li>이벤트 내 특정 메시지, 오류 검색 가능함</li>
</ul>
<h4 id="cloudwatch-insight">CloudWatch Insight</h4>
<ul>
<li>가시성으 확보해주는 서비스<ul>
<li>Container Insights: 컨테이너 앱 모니터링</li>
<li>Lambda Insights: 서버리스 앱 모니터링</li>
<li>Contributor Insights: 영향을 미치는 사람이나 대상을 모니터링</li>
<li>Application Insights: 앱 모니터링 및 대시보드 제공</li>
</ul>
</li>
</ul>
<h3 id="cloudwatch-기본-관리구조-용어">CloudWatch 기본 관리구조 용어</h3>
<h4 id="cloudwatch-에이전트">CloudWatch 에이전트</h4>
<ul>
<li>AWS 내외 시스템의 정보를 수집하여 메트릭으로 보내기 위한 구성요소</li>
<li>CloudWatch 에이전트를 사용하면 사용할 수 없는 추가 메트릭을 수집 가능함<ul>
<li>Windosw 서버: 카운터와 연결된 메트릭을 수집 가능</li>
<li>Linux 서버: 메모리, CPU, 디스크 공간 등 메트릭을 수집 가능</li>
</ul>
</li>
</ul>
<h4 id="cloudwatch-metric-네임스페이스">CloudWatch Metric 네임스페이스</h4>
<ul>
<li>CloudWatch 메트릭들의 묶음</li>
<li>AWS 서비스 관련 네임 스페이스</li>
<li>CloudWatch 에이전트가 수집한 데이터<ul>
<li>기본 네임스페이스는 &quot;CWAgent&quot;를 사용</li>
</ul>
</li>
<li>사용자 지정 메트릭<ul>
<li>기본 네임스페이스가 없음</li>
</ul>
</li>
</ul>
<h4 id="metric-deimension차원">Metric Deimension(차원)</h4>
<ul>
<li>메트릭을 고유하게 식별할 수 있도록 하는 이름과 값의 페어<ul>
<li>메트릭들에 속한 여러 특성 중 일부</li>
<li>메트릭에 최대 30개 차원 할당</li>
<li>이름, 네임스페이스 및 여러 차원 등을 활용하여 식별 가능함</li>
</ul>
</li>
</ul>
<h4 id="로그-이벤트">로그 이벤트</h4>
<ul>
<li>모니터링 중인 응용 프로그램 또는 리소스에 의해 기록되는 일부 활동의 기록</li>
<li>타임스탬프와 이벤트 메시지</li>
</ul>
<h4 id="로그-스트림">로그 스트림</h4>
<ul>
<li>특정 소스의 로그 이벤트</li>
<li>인스턴스 또는 리소스와 관련한 이벤트</li>
</ul>
<h4 id="로그-그룹">로그 그룹</h4>
<ul>
<li>동일한 보존, 모니터링 및 에세스 제어 설정을 공유하는 로그 스트림 그룹</li>
<li>로그 스트림은 로그 그룹에 속해야 함</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[15주차 가상화클라우드 (1)]]></title>
            <link>https://velog.io/@nowij_/15%EC%A3%BC%EC%B0%A8-%EA%B0%80%EC%83%81%ED%99%94-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-1</link>
            <guid>https://velog.io/@nowij_/15%EC%A3%BC%EC%B0%A8-%EA%B0%80%EC%83%81%ED%99%94-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-1</guid>
            <pubDate>Mon, 27 May 2024 13:05:47 GMT</pubDate>
            <description><![CDATA[<h1 id="가상화-및-클라우드-개요">가상화 및 클라우드 개요</h1>
<h2 id="가상화">가상화</h2>
<h3 id="1-가상화-이전-환경의-문제점">(1) 가상화 이전 환경의 문제점</h3>
<ul>
<li>복잡성, 빈약한 인프라에 의존</li>
<li>70% 이상의 IT 예산이 현상 유지에 사용</li>
<li>30% 이하의 IT 예산만이 개선과 경쟁력 강화를 위해 사용</li>
</ul>
<h3 id="2-해결방법">(2) 해결방법</h3>
<ul>
<li>가상화</li>
<li>가상화 플랫폼을 이용하여 동적이고 유연하 업무 인프라 구축</li>
<li>데이터 센터의 모든 리소스를 가상화</li>
<li>서버 가상화, 네트워크 가상화, 스토리지 가상화, 데스크톱 가상화</li>
</ul>
<h3 id="3-가상화-도입-효과">(3) 가상화 도입 효과</h3>
<ul>
<li>서버통합 (30대의 서버를 3대로)</li>
<li>그린 IT (탄소 배출량이 대폭 하락)</li>
<li>유지보수 비용 절감 </li>
<li>상면 공간 절감</li>
</ul>
<h3 id="4-가상화-정의">(4) 가상화 정의</h3>
<ul>
<li><p>운영 체제에서 물리적 하드웨어를 분리하여 가상으로 만들어 주는 기술
<img src="https://velog.velcdn.com/images/nowij_/post/b9abaa7d-9d77-45f4-96a2-6896c6cda4a1/image.png" alt=""></p>
</li>
<li><p>클라이언트 하이퍼바이저 &gt; 서버 하이퍼바이저 &gt; 가상 인프라 &gt; 클라우드</p>
</li>
<li><p>하이퍼바이저: 시스템에서 다수의 운영체제를 동시에 실행할 수 있게 해주는 논리적 플랫폼</p>
</li>
<li><p>리소스 공유 </p>
<ul>
<li>물리적 리소스 공유</li>
<li>CPU 리소스 공유</li>
<li>메모리 리소스 공유</li>
<li>가상 네트워킹)</li>
</ul>
</li>
</ul>
<h2 id="클라우드">클라우드</h2>
<ul>
<li>인터넷을 중앙 PC 또는 서버에 저장하는 공간</li>
<li>클라우드 컴퓨팅: 인터넷을 통해 IT 리소스를 원할 때 언제든 사용하고 사용한 만큼 비용을 지불하는 서비스</li>
</ul>
<h3 id="1-클라우드-유형">(1) 클라우드 유형</h3>
<h4 id="퍼블릭-클라우드">퍼블릭 클라우드</h4>
<ul>
<li>클라우드 컴퓨팅 서비스를 제공해주는 업체에게 인프라에 필요한 자원들을 대여하여 사용하는 방식</li>
<li>AWS, Azure, GCP, KT 클라우드, 네이버 클라우드</li>
</ul>
<h4 id="프라이빗-클라우드">프라이빗 클라우드</h4>
<ul>
<li>기업이 직접 클라우드 구축</li>
<li>기업 내부에서 활용하거나 계열사에 공개</li>
</ul>
<h4 id="하이브리드-유형">하이브리드 유형</h4>
<ul>
<li>온프레미스(프라이빗 클라우드) + 퍼블릭 클라우드 합친 형태</li>
</ul>
<h4 id="멀티-클라우드">멀티 클라우드</h4>
<ul>
<li>2개 이상의 서로 다른 클라우드를 함께 사용하는 방식</li>
<li>ex) AWS + Azure, AWS + KT</li>
</ul>
<h3 id="2-클라우드-장점">(2) 클라우드 장점</h3>
<h4 id="초기-선-투자-불필요">초기 선 투자 불필요</h4>
<ul>
<li>클라우드 업체에서 빌려 사용하여 반납하면 된다<h4 id="저렴한-종량제-가격">저렴한 종량제 가격</h4>
</li>
<li>사용한 만큼 지불하여 지속적인 비용 절감이 가능<h4 id="탄력적인-운영-및-확장가능">탄력적인 운영 및 확장가능</h4>
</li>
<li>용량을 예측할 필요 없이 트래픽 만큼만사용하거나 쉽게 확장 가능 <h4 id="속도와-민첩성">속도와 민첩성</h4>
</li>
<li>빠르게 대응할 수 있음<h4 id="비즈니스에만-집중-가능">비즈니스에만 집중 가능</h4>
</li>
<li>많은 실험 시도 가능<h4 id="손-쉬운-글로벌-진출">손 쉬운 글로벌 진출</h4>
</li>
<li>글로벌 고객 유치 가능</li>
</ul>
<h1 id="aws-기본-서비스">AWS 기본 서비스</h1>
<h2 id="1-ec2">(1) EC2</h2>
<ul>
<li>가상 서버 서비스</li>
<li>재구성이 가능한 컴퓨팅 리소스</li>
<li>쉽게 확장/ 축소되는 컴퓨팅 용량</li>
<li>다양한 인스턴스 타입 제공</li>
<li>사용한 만큼 과금</li>
</ul>
<h3 id="컴퓨팅-인스턴스-타입">컴퓨팅 인스턴스 타입</h3>
<ul>
<li>범용</li>
<li>컴퓨팅 최적화</li>
<li>스토리지 / IO 최적화</li>
<li>GPU 사용</li>
<li>메모리 최적화</li>
</ul>
<h3 id="ec2-구매-옵션">EC2 구매 옵션</h3>
<h4 id="on-demand-인스턴스">On Demand 인스턴스</h4>
<ul>
<li>컴퓨팅을 사용한 만큼 지불</li>
<li>단기간 사용시 사용</li>
<li>app 개발 및 테스팅에 사용</li>
</ul>
<h4 id="reserved-인스턴스">Reserved 인스턴스</h4>
<ul>
<li>1년 ~ 3년 단위 계약금 지불</li>
<li>꾸준한 사용시 사용</li>
<li>비용 절감이 목적</li>
</ul>
<h4 id="spot-인스턴스">Spot 인스턴스</h4>
<ul>
<li>사용되지 않는 EC2 용량 경매</li>
<li>유연한 시작, 종료 시간을 가진 app</li>
</ul>
<h3 id="ec2-보안그룹">EC2 보안그룹</h3>
<ul>
<li>Name, Description, Protocol, Port range, IP address, IP range, Security Group name</li>
</ul>
<h3 id="ec2-접속-암호">EC2 접속 암호</h3>
<h4 id="표쥰-ssh-rsa-key-pair">표쥰 SSH RSA key pair</h4>
<ul>
<li>public / Private Keys</li>
</ul>
<h4 id="ec2-key-pairs">EC2 key pairs</h4>
<ul>
<li>Linux: 최초 로그인시 키페어 생성</li>
<li>Windows: 관리자 암호 불러오기</li>
</ul>
<h2 id="2-vpc">(2) VPC</h2>
<ul>
<li>AWS 네트워크 서비스</li>
<li>사용자가 정의한 가상의 네트워크 환경</li>
<li>통신을 위한 기본 네트워크<ul>
<li>=&gt; 보안 강화, 부족한 IP 자원의 효율적 관리 목적</li>
</ul>
</li>
</ul>
<h3 id="region-ip-대역-결정">Region, IP 대역 결정</h3>
<p>IP address group: IP 범위
CIDR: 클래스 없는 도메인 간 IP 할당 기법</p>
<blockquote>
<ul>
<li>IP CLASS
<img src="https://velog.velcdn.com/images/nowij_/post/0fd90f79-184b-43d1-943f-d8d6fcb4771e/image.png" alt="">
<img src="https://velog.velcdn.com/images/nowij_/post/3cf89fd8-7c34-4b2b-961d-8ccd75de71e2/image.png" alt=""></li>
</ul>
</blockquote>
<h3 id="subnet-생성">Subnet 생성</h3>
<ul>
<li>Subnet: VPC의 Ip 대역을 적절한 단위로 분할 사용</li>
<li>CIDR을 이용해 IP 범위 지정</li>
<li>VPC의 대역안에 Subnet 대역 존재 (중복 불가)
ex)<ul>
<li>172.16.0.0 ~ 172.16.0.255 (A)</li>
<li>172.16.1.0 ~ 172.16.1.255 (B)</li>
<li>172.16.2.0 ~ 172.16.2.255 (C)</li>
</ul>
</li>
</ul>
<h4 id="subnet의-역할">Subnet의 역할</h4>
<ul>
<li>Broadcasting 영역 분리에 사용된다.</li>
<li>원하는 트래픽만 Subnet 별로 받을 수 있도록 네트워크 레벨에서 격리 시키는 것이 목적임</li>
</ul>
<h3 id="routing-설정">Routing 설정</h3>
<ul>
<li>Subnet의 트래픽 경로 설정</li>
<li>Route 설정을 통해 Subnet의 통신 방향을 결정할 수 있음</li>
<li>VPC 생성시 자동으로 Main Routing Table 생성 된다.</li>
</ul>
<h3 id="storage-type">Storage Type</h3>
<h4 id="block-storage">Block Storage</h4>
<ul>
<li>사용자의 데이터가 Local Disk 또는 SAN Storage 상의 Volume에 Block 단위로 저장 및 접근 하는 스토리지 유형</li>
</ul>
<h4 id="file-storage">File Storage</h4>
<ul>
<li>파일 시스템으로 구성된 저장소를 Network 기반 Protocol을 사용하여 파일 단위로 접근하는 스토리지 유형</li>
</ul>
<h4 id="object-storage">Object Storage</h4>
<ul>
<li>데이터, 속성, 메타데이터, 오브젝트 ID를 저장하는 가상의 컨테이너</li>
</ul>
<h2 id="3-ebs">(3) EBS</h2>
<ul>
<li>AWS에서 제공하는 Block Storage 서비스</li>
<li>사용이 쉽고 확장 가능한 고성능 블록 스토리지 서비스 (EC2 용으로 설계)<h3 id="ebs-특징">EBS 특징</h3>
</li>
<li>Ec2 인스턴스를 위한 비휘발성 블록 스토리지</li>
<li>가상 디스크 = EBS Volume</li>
<li>다양한 타입을 지원</li>
<li>인스턴스간 연결 및 해제가 자유로움</li>
<li>EBS 볼륨과인스턴스 같은 Availability Zone에 있는 경우 연결 가능</li>
<li>인스턴스와 볼륨 연결 시 데이터 전송 속도가 중요</li>
<li>동일 네트워크 상 Availability Zone에 있어야 데이터 처리 속도 보장</li>
<li>EBS 볼륨을 다른 AZ으로 이동 가능 (Snapshot Copy)</li>
<li>EBS 볼륨을 다른 Region으로 이동 가능 (Snapshot Copy)</li>
</ul>
<h4 id="volume">Volume</h4>
<ul>
<li>SSD / HDD<ul>
<li>크기, 성능, 비용은 Volumne의 중요 고려 요소이다</li>
</ul>
</li>
</ul>
<h4 id="snapshot">Snapshot</h4>
<ul>
<li>EBS 볼륨을 특정 시점 기준으로 복사하여 백업함</li>
<li>그대로 복사하여 속도가 빠름</li>
<li>마지막 스냅샷 이후 변경된 부분만 저장되는 증분식 백업방식</li>
</ul>
<h2 id="4-s3">(4) S3</h2>
<ul>
<li>AWS에서 제공하는 object Storage 서비스</li>
<li>언제 어디서든 데이터를 저장, 검색할 수 있는 객체 기반 스토리지 서비스</li>
</ul>
<h3 id="s3-특징">S3 특징</h3>
<ul>
<li>object 스토리지 서비스</li>
<li>무제한 용량 제공 (비용발생)</li>
<li>초기 저장 용량 확보 불필요</li>
</ul>
<h4 id="s3-bucket">S3 Bucket</h4>
<ul>
<li>Object를 저장하는 컨테이너 (저장소)</li>
<li>Object는 하나의 Bucket에 속함</li>
<li>Bucket 하나에 Object 무제한</li>
<li>AWS 계정에 Bucket은 최대 100개</li>
</ul>
<h4 id="s3-object">S3 Object</h4>
<ul>
<li>Object S3에 저장되는 기본 객체</li>
<li>Object 최대 5TB</li>
<li>Object 데이터와 메타데이터로 구성 (이름 - 값 페어)</li>
</ul>
<h4 id="region">Region</h4>
<ul>
<li>Bucket 생성시 해당 Bucket을 저장할 Region 선택 가능</li>
<li>지연시간 최소, 비용, 규정 요구사항 준수 등에 따라 Region ㅅ너택</li>
<li>Bucket에 생성된 object는 Bucket의 Region에 따라 저장됨</li>
</ul>
<h3 id="s3-스토리지-클래스">S3 스토리지 클래스</h3>
<ul>
<li><p>S3 Standard</p>
<ul>
<li>자주 액세스 하는 데이터를 위한 높은 내구성, 가용성, 성능을 갖춘스토리지 클래스</li>
<li>여러 Availability Zone 에 분산 중복 저장, 99.9(x11) % 의 내구성, 99.99% 의 가용성 보장</li>
<li>클라우드 웹 어플리케이션, 컨텐츠 배포, 빅데이터 분석 등 다양한 케이스 적합</li>
</ul>
</li>
<li><p>S3 Standard-Infrequent Access (Standard-IA)</p>
<ul>
<li>자주 액세스하지 않는 데이터이지만, 필요할때 빠르게 액세스해야 하는 데이터에 적합한 클래스</li>
<li>데이터 내구성과 고가용성은 Standard 와 동일하나, 데이터 액세스에소요되는 지연속도가 Standard에 비해느림</li>
<li>GB 당 검색 요금 추가 적용. 장기 스토리지, 백업 및 재해 복구 파일 저장에 적합</li>
</ul>
</li>
</ul>
<ul>
<li>S3 One Zone Infrequent Access (S3 One Zone-IA)<ul>
<li>단일 Availability Zone 에 데이터를 중복 저장하도록 설계된스토리지 클래스. (Standard-IA 대비 20% 낮은 비용)</li>
<li>온프레미스 데이터 또는 쉽게 다시 생성 가능한 데이터의 보조 백업 복사본 용도로적합</li>
</ul>
</li>
</ul>
<ul>
<li><p>S3 Intelligent-Tiering</p>
<ul>
<li>데이터 액세스 패턴을 지속적으로 확인 및 분석하여 자동으로 가장 효율적인 스토리지 클래스로 이동하여 주는 클래스</li>
<li>약간의 월별객체 모니터링 및 자동화 요금 지불</li>
</ul>
</li>
<li><p>S3 Glacier Instant Retrieval</p>
</li>
<li><p>S3 Glacier Flexible Retrieval</p>
</li>
<li><p>S3 Glacier Deep Archive</p>
</li>
<li><p>S3 on Outposts</p>
</li>
</ul>
<h1 id="실습">실습</h1>
<h2 id="vpc-생성">VPC 생성</h2>
<ul>
<li>AWS 에서 Region 선택 후</li>
</ul>
<blockquote>
<ul>
<li>vpc 검색하여 vpc 선택
<img src="https://velog.velcdn.com/images/nowij_/post/69a3e1a3-f77c-4953-98ea-0ca1ce49ecc7/image.png" alt=""></li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>vpc 생성 클릭
<img src="https://velog.velcdn.com/images/nowij_/post/af242b1d-9f15-4dcb-9489-d5b1a9cbcc7e/image.png" alt=""></li>
<li>생성된 모습
<img src="https://velog.velcdn.com/images/nowij_/post/5e66241c-eee8-4bd6-a9f8-58ea304a4398/image.png" alt=""></li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>서브넷 두 개 생성
<img src="https://velog.velcdn.com/images/nowij_/post/389c0ee5-b4fa-439d-934f-bd1562365d42/image.png" alt="">
<img src="https://velog.velcdn.com/images/nowij_/post/62892026-0dc0-479e-bbbd-53ed663cb17c/image.png" alt=""></li>
<li>생성된 모습
<img src="https://velog.velcdn.com/images/nowij_/post/b4639186-506c-4fa6-82fa-1bdd83920662/image.png" alt=""></li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>인터넷게이트웨이 생성
<img src="https://velog.velcdn.com/images/nowij_/post/84c55f36-d60a-4cca-aff2-00fbb3a7f4fa/image.png" alt=""></li>
<li>나의 vpc와 연결</li>
</ul>
</blockquote>
<h2 id="ec2">EC2</h2>
<h2 id="ebs">EBs</h2>
<h2 id="s3">S3</h2>
]]></description>
        </item>
        <item>
            <title><![CDATA[13주차 SQL]]></title>
            <link>https://velog.io/@nowij_/13%EC%A3%BC%EC%B0%A8-SQL</link>
            <guid>https://velog.io/@nowij_/13%EC%A3%BC%EC%B0%A8-SQL</guid>
            <pubDate>Mon, 27 May 2024 12:17:26 GMT</pubDate>
            <description><![CDATA[<h1 id="sql">SQL</h1>
<ul>
<li>Structured Query Language</li>
<li>데이터베이스에서 데이터를 조회하거나 처리(입력, 수정, 삭제)할 때 사용하는 구문</li>
<li>SQL 86 &gt; 92 &gt; 1999 &gt; 2003 &gt; 2008 &gt; 2011 &gt; 2016</li>
</ul>
<h2 id="1-데이터-기본-조회">1. 데이터 기본 조회</h2>
<h3 id="1-mysql-workbench-구성">(1) MySQL Workbench 구성</h3>
<p><img src="https://velog.velcdn.com/images/nowij_/post/b8591bef-12bc-4a88-869a-1b20c4ff9af7/image.png" alt=""></p>
<h3 id="2-쿼리문-작성-방법">(2) 쿼리문 작성 방법</h3>
<ul>
<li>주석: 쿼리문에 대한 주석을 남기는 습관 필요
``` SQL
/*
제목: 탄단지원
이름: 정지원
날짜: 2024-05-21</li>
<li>/
```</li>
<li>실행: ctrl + enter</li>
</ul>
<h3 id="3-단순-조회">(3) 단순 조회</h3>
<ul>
<li>SELECT</li>
<li>대부분의 SELECT 문은 FROM 절을 사용해 테이블에서 데이터를 조회함</li>
<li>FROM 절이 꼭 필요한 것은 아님</li>
<li>특정 값, 계산식, 함수 결과를 조회할 수 있음</li>
<li>AS를 사용해 표시되는 열의 별칭을 지정할 수 있음</li>
</ul>
<blockquote>
<ul>
<li>문자열 출력</li>
</ul>
</blockquote>
<pre><code>SELECT &#39;Hello SQL World&#39;;</code></pre><p><img src="https://velog.velcdn.com/images/nowij_/post/859acb7b-36fa-465d-b936-ce3f6aa00327/image.png" alt=""></p>
<blockquote>
<ul>
<li>별칭 사용(AS)</li>
</ul>
</blockquote>
<pre><code>SELECT &#39;Hello SQL World&#39; AS Start;</code></pre><p><img src="https://velog.velcdn.com/images/nowij_/post/a2f1d498-43c0-469a-970e-e60c1e541b1f/image.png" alt=""></p>
<blockquote>
<ul>
<li>숫자 연산 출력</li>
</ul>
</blockquote>
<pre><code>SELECT 10 + 20 AS Result;</code></pre><p><img src="https://velog.velcdn.com/images/nowij_/post/3785ab90-43e5-42af-9028-dd4b95b59ba0/image.png" alt=""></p>
<blockquote>
<ul>
<li>함수 결과 출력</li>
</ul>
</blockquote>
<pre><code>SELECT CURDATE() AS Today;</code></pre><p><img src="https://velog.velcdn.com/images/nowij_/post/a6f305bf-53ad-428d-a43a-24b31844305c/image.png" alt=""></p>
<blockquote>
<ul>
<li>변수 값 출력</li>
</ul>
</blockquote>
<pre><code>SET @Today = CURDATE();
SELECT @Today;</code></pre><p><img src="https://velog.velcdn.com/images/nowij_/post/15201758-a4d7-47e2-9bde-14b725d6b04d/image.png" alt=""></p>
<h3 id="4-기본적인-데이터-조회">(4) 기본적인 데이터 조회</h3>
<pre><code>SELECT 열2, 열2
    FROM 테이블
    WHERE 조건;</code></pre><ul>
<li>SELECT 절에 조회할 열 이름이나 수식을 순서대로 나열</li>
<li>모든 열: * </li>
<li>FROM 절: 조회 대상 테이블, 뷰, 테이블을 반환하는 함수, 쿼리문</li>
<li>WHERE: 행 추출을 위한 조건을 입력, 조건을 생략하면 모든 행이 조회 됨</li>
</ul>
<blockquote>
<ul>
<li>직원의 모든 열 조회</li>
</ul>
</blockquote>
<pre><code>SELECT * FROM employee;</code></pre><p><img src="https://velog.velcdn.com/images/nowij_/post/226d4ec8-72bd-44fe-8c22-c31229db5558/image.png" alt=""></p>
<blockquote>
<ul>
<li>일부 열 모든 행 조회 (원하는 열 순서대로)</li>
</ul>
</blockquote>
<pre><code>SELECT emp_name, gender, marital_yn, emp_id, dept_id
    FROM employee;</code></pre><p><img src="https://velog.velcdn.com/images/nowij_/post/88634311-0a9d-4d89-b08c-b6080471f1f4/image.png" alt=""></p>
<h3 id="6-비교연산자논리연산자">(6) 비교연산자,논리연산자</h3>
<h4 id="비교연산자">비교연산자</h4>
<ul>
<li>WHERE 절 사용 (비교연산자)</li>
<li>숫자의 크기, 문자, 날짜도 크기를 비교할 수 있음</li>
<li></li>
<li><code>같지 않다</code> = <code>다르다</code> = <code>&lt;&gt;</code> = <code>!=</code> 사용</li>
</ul>
<blockquote>
<ul>
<li>id가 S0002인 휴가 정보 조회</li>
</ul>
</blockquote>
<pre><code>SELECT *
    FROM vacation
    WHERE emp_id = &#39;S0002&#39;;</code></pre><p><img src="https://velog.velcdn.com/images/nowij_/post/8daa02b4-9a2a-47d4-8b72-182c60de6ad3/image.png" alt=""></p>
<blockquote>
<ul>
<li>연봉이 7,000을 초과하는 직원 정보 조회</li>
</ul>
</blockquote>
<pre><code>SELECT emp_name, emp_id, dept_id, gender, hire_date, salary
    FROM employee
    WHERE salary &gt; 7000;</code></pre><p><img src="https://velog.velcdn.com/images/nowij_/post/06531f2c-c397-494c-aefd-ab310e562030/image.png" alt=""></p>
<h4 id="논리연산자">논리연산자</h4>
<ul>
<li>WHERE 절에서 여러 개의 조건을 연결하는 연산자</li>
<li>AND 연산자는 조건을 만족할 수록 행이 줄어듦 =&gt; 성능면에서 긍정</li>
<li>OR 연산자는 조건을 만족할 수록 결과 행이 늘어남 =&gt; 성능면에서 부정적</li>
<li>NOT 연산자는 조건에 대한 부정을 의미 ()</li>
</ul>
<h3 id="7-범위-조건과-리스트-조건">(7) 범위 조건과 리스트 조건</h3>
<h3 id="8-null값-비교-ifnull-함수">(8) NULL값 비교, IFNULL 함수</h3>
<h3 id="9-자동-형변환">(9) 자동 형변환</h3>
<h3 id="10-데이터-결합-데이터-정렬">(10) 데이터 결합, 데이터 정렬</h3>
<h3 id="11-case문-if-함수">(11) CASE문, IF 함수</h3>
<h2 id="2-데이터-집계">2. 데이터 집계</h2>
<h2 id="3-순위-함수">3. 순위 함수</h2>
<h2 id="4-데이터-변경">4. 데이터 변경</h2>
<h2 id="5-다중-테이블-조회">5. 다중 테이블 조회</h2>
<h2 id="6-뷰-views">6. 뷰 (views)</h2>
]]></description>
        </item>
        <item>
            <title><![CDATA[에이블데이]]></title>
            <link>https://velog.io/@nowij_/%EC%97%90%EC%9D%B4%EB%B8%94%EB%8D%B0%EC%9D%B4</link>
            <guid>https://velog.io/@nowij_/%EC%97%90%EC%9D%B4%EB%B8%94%EB%8D%B0%EC%9D%B4</guid>
            <pubDate>Mon, 27 May 2024 06:05:07 GMT</pubDate>
            <description><![CDATA[<p>6차 미니프로젝트가 끝나고 바로 에이블데이 1차 에요 !
<img src="https://velog.velcdn.com/images/nowij_/post/429bfeb5-4d19-4b7a-9e81-42758a605161/image.png" alt=""></p>
<p>에이블데이가 시작하기 전에 기념으로 에이블러들에게 스탠리 텀블러를 택배로 발송해주셨어요!</p>
<p>코딩마스터스 마스터와 그랜드마스터 분들은 키보드와 마우스까지 받았다고 하네요.</p>
<p>다음번엔 저도 코마 잘 해보겠습니다 !</p>
<blockquote>
<p>이렇게 문구와
<img src="https://velog.velcdn.com/images/nowij_/post/a05ee975-f3f0-4553-a55d-10b61ee7f26b/image.jpg" alt="">
텀블러 까지 !
<img src="https://velog.velcdn.com/images/nowij_/post/85bd11f1-c284-4022-a6b9-4d6cd85c26bf/image.jpg" alt=""></p>
</blockquote>
<p>에이블데이 때에는 수업은 없었고 특강을 들었어요 !
<img src="https://velog.velcdn.com/images/nowij_/post/f510e4e8-e983-4c1d-af5f-4b972d5a7dd1/image.png" alt=""></p>
<p>특강으로 이미지, 영상, 음성을 생성하는 AI 특강을 들었어요</p>
<p>특강을 듣고 실제로 생성형 TOOL을 사용하여 &#39;에이블스쿨&#39;을 주제로 숏츠를 제작하기도 했답니다 !</p>
<p><img src="https://velog.velcdn.com/images/nowij_/post/be086baf-a575-4eba-a0db-2a3b376890be/image.png" alt=""></p>
<blockquote>
<p>랜선 회식 시간엔 KT에서 치킨을 시켜먹을 수 있게 기프티쇼를 주셨어요~
<img src="https://velog.velcdn.com/images/nowij_/post/a1bd8f9e-bbd0-4857-9cec-3893453a5ca0/image.jpg" alt=""></p>
</blockquote>
<blockquote>
<p>에이블데이 진행하는 도중에 숏츠만들기, 퀴즈, 변신하기, 이키가이 발표를 통해서 스타벅스 키프티콘을 주셨어요!
<img src="https://velog.velcdn.com/images/nowij_/post/8148825b-4794-434a-850a-e4e2e71e1b33/image.jpg" alt=""></p>
</blockquote>
<p>이렇게 다 주시면 남는게 있나요..? </p>
<p>그래도 주시면 받겠습니다 (넙죽)</p>
<blockquote>
</blockquote>
<p>마무리는 우리반 하트로 마무리 했습니다 ~~
<img src="https://velog.velcdn.com/images/nowij_/post/a39f2f98-ea13-47fa-8ef2-73f9081ad707/image.jpg" alt=""></p>
<p>에이블데이는 하루 정도 쉬면서 리프레쉬할 수 있는 기회를 가진 것 같아요!</p>
<p>준비한다고 고생하신 매니저님 감사합니다 <del>~</del> 👍😄</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[6차 미니프로젝트]]></title>
            <link>https://velog.io/@nowij_/6%EC%B0%A8-%EB%AF%B8%EB%8B%88%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8</link>
            <guid>https://velog.io/@nowij_/6%EC%B0%A8-%EB%AF%B8%EB%8B%88%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8</guid>
            <pubDate>Mon, 27 May 2024 05:45:22 GMT</pubDate>
            <description><![CDATA[<h1 id="6차-미니프로젝트-1">6차 미니프로젝트 (1)</h1>
<p>6차 미니프로젝트는 총 6일로 3일씩 나누어서 진행했습니다.</p>
<p>1일차 부터 3일차 까지는 &#39;유통 판매량 예측 및 재고 최적화&#39;를 주제로 진행했어요.</p>
<ol>
<li>데이터 탐색 및 가설을 도출</li>
<li>데이터 전처리</li>
<li>모델링</li>
</ol>
<blockquote>
<ul>
<li>유통 판매량에 예측을 하는 대상 상품을 3번(Beverage), 12번(Milk), 42번(Agricultural products) 모델을 대상으로 수행했습니다.
<img src="https://velog.velcdn.com/images/nowij_/post/62faeade-a7df-488b-a306-466ea93bd628/image.png" alt=""></li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>그외 사용할 변수들
<img src="https://velog.velcdn.com/images/nowij_/post/34c81a59-02be-41f6-99cb-1c5c166743f8/image.png" alt="">
<img src="https://velog.velcdn.com/images/nowij_/post/5b41572d-20f6-4038-925b-ec534efe05b2/image.png" alt="">
<img src="https://velog.velcdn.com/images/nowij_/post/9ab83893-6569-448f-b746-d6aa84a8da6e/image.png" alt="">
<img src="https://velog.velcdn.com/images/nowij_/post/15b645fe-a558-4f26-ba27-6a9223acd722/image.png" alt="">
<img src="https://velog.velcdn.com/images/nowij_/post/dec19b7e-29f3-4a7b-a444-feffa4e462c3/image.png" alt=""></li>
</ul>
</blockquote>
<p>주어진 데이터를 기반으로 시계열 모델링을 진행했습니다.</p>
<p>LSTM, CNN 모델을 사용하여 유통 판매량 예측 및 재고 최적화를 위한 규칙적인 패턴, 이상치, 도메인 지식을 찾아보며 모델링 진행을 했어요</p>
<p>그리고 LSTM, CNN 모델에서 최적의 레이어층을 찾는 과정을 수행했습니다.</p>
<blockquote>
<ul>
<li>데이터 수가 적어서 좋은 성능의 결과를 얻을 수 없었지만, 최적의 모델을 찾으려고 했어요
<img src="https://velog.velcdn.com/images/nowij_/post/9e7e0b91-d0a7-4383-b144-70f8a6ad99ec/image.png" alt=""></li>
</ul>
</blockquote>
<h1 id="6차-미니프로젝트-2">6차 미니프로젝트 (2)</h1>
<p>4일차 부터 6일차까지는 &#39;LLM을 활용한 QA 챗봇&#39;을 만들어 보았습니다.</p>
<p>6차미니프로젝트 이지만, 강사님의 강의와 함께 진행되었어요.</p>
<p>강의 내용은 LLM에 대해 설명해주시고 데이터 소개와 수행절차와 조건에 대해 설명해 주셨습니다.</p>
<p>프로젝트에서는</p>
<ul>
<li><p><strong>SLLM RAG</strong>: 질문과 근거 문서를 함께 입력하고 질문에 맞는 답변을 근거 문서로 부터 하도록 하는 언어모델</p>
</li>
<li><p><strong>SLLM no RAG</strong>: RAG를 사용하지 않고 입력한 질문만을 이용해서 SLLM의 답변 능력을 확인하는 언어모델</p>
</li>
<li><p><strong>SLLM RAG with BM25</strong>: BM25의 검색 기능과 SLLM의 추론 기능을 합쳐 RAG를 구성하는 언어 모델</p>
</li>
<li><p><strong>SLLM RAG with SentenceTransformers</strong>: SentenceTransformers의 검색 기능과 SLLM의 추론 기능을 합쳐 RAG를 구성하는 언어모델</p>
</li>
</ul>
<p>위 네가지를 만들어 보며 챗봇이 어떻게 구성되는지 어떤 방식으로 사용을 할 수 있는지 알 수 있는 시간을 가졌습니다.</p>
<h1 id="미프-맛집">미프 맛집</h1>
<h4 id="1-초량밀면">1. 초량밀면</h4>
<p>날씨가 더워져서 밀면을 먹으러 왔어요</p>
<p>맛집이라 줄도 많이 선다고 했는데 우리가 들어가고 나서 부터 줄을 서더라구요 ㅎㅎ </p>
<p>음식은 말해뭐해 맛있구요 육수가 미쳤습니다!</p>
<blockquote>
<p><img src="https://velog.velcdn.com/images/nowij_/post/e5160d6d-5769-4008-9717-ed63d84cbd4c/image.jpg" alt="">
<img src="https://velog.velcdn.com/images/nowij_/post/2b1f3e54-a104-4c50-a69f-2c5f706e011c/image.jpg" alt=""></p>
</blockquote>
<h4 id="2-현풍-닭칼국수">2. 현풍 닭칼국수</h4>
<p>대구에서 유명한 닭칼국수 집인데 부산역에도 있더라구요!</p>
<p>직접가서 먹었더니 시원하이 한끼먹기 좋습니다~</p>
<p>대신 교육장에서 조금 멀리 떨어져있으니 참고하세요</p>
<blockquote>
<p><img src="https://velog.velcdn.com/images/nowij_/post/a5b76ce2-146c-4662-aca8-d00695a933ec/image.jpg" alt=""></p>
</blockquote>
<h4 id="3-정다운-밥상">3. 정다운 밥상</h4>
<p>제가 찾던 그런 밥 집을 드디어 찾았어요</p>
<p>여긴 다음 미니프로젝트 때에도 꼭 올거 같아요</p>
<p>메뉴는 두 개로 보리밥이랑 정식이 있는데 전 정식을 먹었어요!</p>
<p>반찬 개수를 보세요~ 저것만 봐도 증명 되죠?</p>
<blockquote>
<p><img src="https://velog.velcdn.com/images/nowij_/post/0273a8b5-5abd-458c-a147-b31d3a98dc91/image.jpg" alt=""></p>
</blockquote>
<h4 id="4-소담">4. 소담</h4>
<p>부산역에 육회가 맛있는 곳이 있다고 해서 왔어요</p>
<p>여긴 점심 때 온게 아닌 미프가 끝나고 들렸어요!</p>
<p>미프가 끝나고 소소하게 먹기 좋은 집인 것 같아요</p>
<blockquote>
<p><img src="https://velog.velcdn.com/images/nowij_/post/738ad231-7c32-45f1-b445-f5cdcdaaa95e/image.jpg" alt=""></p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[13주차 WEB/WAS/DB (2)]]></title>
            <link>https://velog.io/@nowij_/13%EC%A3%BC%EC%B0%A8-WEBWASDB-2</link>
            <guid>https://velog.io/@nowij_/13%EC%A3%BC%EC%B0%A8-WEBWASDB-2</guid>
            <pubDate>Sat, 25 May 2024 13:19:09 GMT</pubDate>
            <description><![CDATA[<h1 id="nginx">Nginx</h1>
<h2 id="git-bash-환경">git bash 환경</h2>
<h3 id="nginx-사용">nginx 사용</h3>
<h4 id="ip-서버-접속">IP 서버 접속</h4>
<blockquote>
<p>ssh -i kt.pem <a href="mailto:ubuntu@00.00.000.00">ubuntu@00.00.000.00</a></p>
</blockquote>
<h4 id="nginx-설치">nginx 설치</h4>
<blockquote>
<p>ubuntu $ sudo apt-get install nginx</p>
</blockquote>
<h4 id="nginx-실행-확인">nginx 실행 확인</h4>
<blockquote>
<p>ubuntu $ sudo systemctl status nginx</p>
</blockquote>
<h5 id="tree-설치-방법">tree 설치 방법</h5>
<blockquote>
<p>sudo apt install tree
<img src="https://velog.velcdn.com/images/nowij_/post/2f4d62e1-2e28-4195-9547-68ac1add1b29/image.png" alt=""></p>
</blockquote>
<h4 id="nginx-설정">nginx 설정</h4>
<blockquote>
<p>ubuntu $ sudo vi /etc/nginx/sites-available/default</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/nowij_/post/382fc8da-efc5-4c30-82f9-b6f0243c6103/image.png" alt=""></p>
<blockquote>
<ul>
<li>이러한 화면이 뜸</li>
<li>G 입력으로 가장 밑으로 감</li>
<li>아래 정적파일 설정 입력<h4 id="정적파일-설정">정적파일 설정</h4>
</li>
</ul>
</blockquote>
<pre><code>server {
    listen 8080;
    location / {
        root /home/ubuntu/web;
    }
}</code></pre><blockquote>
<ul>
<li>:wq</li>
</ul>
</blockquote>
<h4 id="nginx-설정에서-오류가-있는지-확인">nginx 설정에서 오류가 있는지 확인</h4>
<blockquote>
<p>sudo systemct1 restart nginx</p>
</blockquote>
<h4 id="ubuntu-디렉토리-실행권한-추가">ubuntu 디렉토리 실행권한 추가</h4>
<blockquote>
<p>chmod +x /home/ubuntu</p>
</blockquote>
<h4 id="설정-적용을-위한-재시작">설정 적용을 위한 재시작</h4>
<blockquote>
<p>ubuntu $ sudo systemctl restart nginx</p>
</blockquote>
<h3 id="tmux-환경에서-주피터-노트북-사용">tmux 환경에서 주피터 노트북 사용</h3>
<blockquote>
<p>tmux new -s ai
<img src="https://velog.velcdn.com/images/nowij_/post/8559f7be-dd52-4513-8147-321a369bed38/image.png" alt=""></p>
</blockquote>
<h3 id="jupyter-notebook">jupyter notebook</h3>
<h3 id="decorator-함수">Decorator 함수</h3>
<ul>
<li>함수에서 코드를 변경하지 않고 기능을 추가, 수정하는 문법</li>
<li>함수 안에 중복 코드를 데코레이터 함수로 작성<pre><code class="language-python"># 함수 생성
def func1():
  print(&#39;code1&#39;)
  print(&#39;code2&#39;)
  print(&#39;code3&#39;)
</code></pre>
</li>
</ul>
<p>def func2():
    print(&#39;code4&#39;)
    print(&#39;code5&#39;)
    print(&#39;code6&#39;)
func1
func2</p>
<blockquote>
</blockquote>
<p>code1
code2
code3
code4
code5
code6</p>
<pre><code>
```python
# decorator 함수 생성
def deco(func):
    def wrapper(*args, **kwargs):
        print(&#39;code1&#39;)
        func(*args, **kwargs)
        print(&#39;code3&#39;)
    return wrapper</code></pre><pre><code class="language-python"># decorator 함수 사용
@deco
def func1():
    print(&#39;code2&#39;)
@deco
def func2():
    print(&#39;code4&#39;)
func1
func2
&gt;
code1
code2
code3
code1
code4
code3</code></pre>
<h4 id="decorator-함수-응용">decorator 함수 응용</h4>
<pre><code class="language-python">import time

# 코드가 출력되는데 걸리는 시간
start = time.time()
print(&#39;code&#39;)
end = time.time()
print(end - start)
&gt;
code
0.0015552043914794922</code></pre>
<pre><code class="language-python"># decorator 함수 생성
def show_time(func):
    def wrapper():
           start = time.time()
        func()
        end= time.time()
        print(end - start)
    return wrapper


# decorator 함수 사용
@show_time
def func1():
    print(&#39;code2&#39;)

fuc1 = show_time(func1)

@show_time
def func2():
    print(&#39;code4&#39;)

func1()
func2()
&gt;
code2
0.002538442611694336
code4</code></pre>
<h4 id="decorator-예제2">decorator 예제2</h4>
<pre><code class="language-python"># decorator 함수 생성
def login(func):
    def wrapper():
        pw = input(&#39;pw: &#39;)
        if kwargs[&#39;pw&#39;] == &#39;1234&#39;:
            func()
        else:
            print(&#39;wrong password&#39;)
    return wrapper</code></pre>
<pre><code class="language-python"># decorator 함수 사용
@login
def fuc1()
    print(&#39;code2&#39;)

func1()
&gt;
pw 입력창에 1234 입력시
code2가 출력 된다.</code></pre>
<h3 id="args-kwargs"><em>args, *</em>kwargs</h3>
<ul>
<li>parameter: 여러개의 argument를 하나의 parameter(tuple, dict)로 받는 방법</li>
<li>argument: 하나의 parameter(list, tuple, dict)를 여러개의 argument로 사용 방법</li>
</ul>
<h4 id="컬렉션-데이터-타입">컬렉션 데이터 타입</h4>
<ul>
<li>식별자 1개, 데이터n개<pre><code class="language-python">def (n1, n2, n3):
  print(n1 + n2 + n3)
plus(1, 2, 3)
&gt;
6</code></pre>
</li>
</ul>
<pre><code class="language-python"># args
def (*args):        # parameter 1개
    print(type(args), args)
    print(sum(args))

plus(1, 2, 3)        # args 3개
&gt;
&lt;class &#39;tuple&#39;&gt; (1, 2, 3)
6</code></pre>
<h4 id="kwargs">kwargs</h4>
<pre><code class="language-python"># kwargs
def (*args, **kwargs):        # parameter 1개
    print(type(args), args)
    print(type(kwargs), kwargs)
    print(sum(args) + kwargs.values())

plus(1, 2, 3, n4=10, n5=20)                # args 3개
&gt;
&lt;class &#39;tuple&#39;&gt; (1, 2, 3)
&lt;class &#39;dict&#39;&gt; {&#39;n4&#39;: 10, &#39;n5&#39;: 20}
36</code></pre>
<h4 id="예제">예제</h4>
<pre><code class="language-python">def echo(*args, **kwargs):
    print(type(args), args)
    print(type(kwargs), kwargs)

# args
data1 = [1, 2, 3]
echo(data1)        # echo([1, 2, 3])
echo(*data1)    # echo(1, 2, 3)
&gt;
&lt;class &#39;tuple&#39;&gt; ([1, 2, 3],)
&lt;class &#39;dict&#39;&gt; {}
&lt;class &#39;tuple&#39;&gt; (1, 2, 3)
&lt;class &#39;dict&#39;&gt; {}

# kwargs
data2 = {&#39;n4&#39;: 10, &#39;n5&#39;: 20}
echo(data2)        # echo({&#39;n4&#39;: 10, &#39;n5&#39;: 20})
echo(**data2)    # echo(n4=10, n5=20)</code></pre>
<h1 id="flask">Flask</h1>
<ul>
<li>속도가 빠른 파이썬 경량 웹 어플리케이션 프레임워크</li>
<li>빠르고 간편하게 WAS 개발 가능</li>
</ul>
<h3 id="1-프로젝트-생성">1. 프로젝트 생성</h3>
<ul>
<li>static: 정적 파일 저장</li>
<li>templates: html 코드 저장</li>
<li>hello.py: 라우팅 코드 작성</li>
</ul>
<pre><code class="language-python"># 디렉토리 생성
!mkdir -p hello/staic
!mkdir -p hello/templates

# 파일 생성
!touch hello/hello.py
!touch hello/templates/index.html
!tree hello</code></pre>
<p><img src="https://velog.velcdn.com/images/nowij_/post/871b2a31-f07b-40a8-906e-0ebd8211105e/image.png" alt=""></p>
<h3 id="2-라우팅-코드-작성">2. 라우팅 코드 작성</h3>
<pre><code class="language-python">%%writefile helle/hello.py
from flask import *

app = Flask(__name__)

# 라우팅 코드
@app.route(&#39;/&#39;)
def hello():
    return &#39;Hello Flask&#39;

# 라우팅 코드를 요청했을때, index.html을 불러옴
@app.route(&#39;/user&#39;)
def user():
    return render_template(&#39;index.html&#39;) # 랜더링을 통해 연결함

app.run(debug=True)</code></pre>
<pre><code class="language-python"># 실행 되는지 확인
!cat hello/hello.py</code></pre>
<p><img src="https://velog.velcdn.com/images/nowij_/post/989bc6d5-f985-4d05-ad66-6a065921ada4/image.png" alt=""></p>
<h4 id="라우팅-서버-nginx-설정">라우팅 서버 nginx 설정</h4>
<ul>
<li>라우팅에서 만든 걸 nginx에서 설정하여 서버를 생성</li>
<li>tmux로 만든 서버에서 새로운 창을 생성하고</li>
<li>sudo vi /etc/nginx/sites-available/default 로 ngnix 설정 활성화<pre><code>server {
  listen 8081;
  location / {
      proxy_pass http://localhost:5000;
  }
}</code></pre></li>
<li>작성 후 :wq 저장 후 나오기</li>
<li>sudo systemctl restart nginx 으로 오류 확인</li>
<li>8081 서버로 접속 시 라우팅 코드에서 만든 Hello Flask 출력</li>
<li>user를 요청시 index.html을 불러 옴</li>
</ul>
<h3 id="3-템플릿-코드-작성">3. 템플릿 코드 작성</h3>
<pre><code class="language-python">%%writefile hello/templates/index.html
&lt;!DOCTYPE&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;Flask&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;p&gt;Hello Flask!!!&lt;/p&gt;&lt;hr&gt;
    &lt;/body&gt;
&lt;/html&gt;</code></pre>
<h4 id="파일-사용">파일 사용</h4>
<blockquote>
<ul>
<li>파일을 불러와야 사용할 수 있음
![](<a href="https://velog.velcdn.com/images/nowij_/post/1e6fcedc-ddfb-452e-bfe6-03c96b038e2d/image.png">https://velog.velcdn.com/images/nowij_/post/1e6fcedc-ddfb-452e-bfe6-03c96b038e2d/image.png</a></li>
</ul>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[13주차 WEB/WAS/DB]]></title>
            <link>https://velog.io/@nowij_/13%EC%A3%BC%EC%B0%A8-WEBWASDB</link>
            <guid>https://velog.io/@nowij_/13%EC%A3%BC%EC%B0%A8-WEBWASDB</guid>
            <pubDate>Tue, 21 May 2024 11:40:52 GMT</pubDate>
            <description><![CDATA[<p>PC(local)에서 Server로 연결하려면 ubuntu를 사용하여 ssh 명령을 통해 git bash를 사용한다.</p>
<p>강사님께서 AWS에서 ec2인스턴스에서 미리 server를 만들어서 우리에게 IP, ID, PW를 배포하였다.</p>
<p>kt.pem 파일은 pw를 사용하는 파일이다. 내가 원하는 경로에 나두고 경로를 꼭 기억해 두자</p>
<h1 id="aws">AWS</h1>
<h3 id="인스턴스-생성">인스턴스 생성</h3>
<ul>
<li><p>로그인 후 인스턴스 시작을 누른다
<img src="https://velog.velcdn.com/images/nowij_/post/5419abf1-d310-4793-80f5-edc94d33f239/image.png" alt=""></p>
</li>
<li><p>내가 사용할 애플리케이션, 버전, 인스턴스 유형을 선택함 (강의에선 Ubuntu 사용)
<img src="https://velog.velcdn.com/images/nowij_/post/e714e181-4eca-4bb6-8e59-4961f792d050/image.png" alt=""></p>
</li>
<li><p>키페어 생성
<img src="https://velog.velcdn.com/images/nowij_/post/7468a90b-f313-4e50-b2d7-4b69225477fd/image.png" alt=""></p>
</li>
<li><p>네트워크 설정
<img src="https://velog.velcdn.com/images/nowij_/post/4d5080a0-a0b0-4d6f-af78-13899c091d48/image.png" alt=""></p>
<ul>
<li>보안 그룹을 사용하여 보안을 높일 수 있음</li>
</ul>
</li>
<li><p>요약
<img src="https://velog.velcdn.com/images/nowij_/post/75c2fd3a-f0f0-4b41-8886-4b48f7d08975/image.png" alt=""></p>
</li>
<li><p>최종 요약을 보고 내가 원하는 걸로 만들었는지 확인 후 생성함</p>
</li>
<li><p>여기서 server를 생성할 수 있음</p>
</li>
</ul>
<h1 id="git-bash">git bash</h1>
<h2 id="setting-server">Setting Server</h2>
<h3 id="ip-서버-접속">IP 서버 접속</h3>
<pre><code class="language-gitbash">local $ ssh -i &lt;[pem file path&gt; &lt;user name&gt;@&lt;server public ip&gt;

ex)
ssh -i ~/Desktop/kt.pem ubuntu@00.000.00.000</code></pre>
<h3 id="환경설정-파일-전송">환경설정 파일 전송</h3>
<ul>
<li>로컬pc에 있는 파일을 서버에 전송함</li>
<li>AWS에서 만든 kt.pem 파일을 Desktop 경로에 있어야 한다.<pre><code>local $ scp -ri &lt;pem file path&gt;&lt;source file path&gt;&lt;user name&gt;@&lt;public ip&gt;:&lt;destination file path&gt;
</code></pre></li>
</ul>
<p>ex)
local $ scp -ri <del>/Desktop/kt.pem ~/Desktop/env <a href="mailto:ubuntu@00.000.000.000">ubuntu@00.000.000.000</a>:</del>/</p>
<pre><code>
### 파이썬 설치</code></pre><p>파이썬 설치
ubuntu $ source ~/env/pyenv.sh</p>
<pre><code></code></pre><p>파이썬 기본 버전을 3.8.5로 설정
ubuntu $ pyenv global 3.8.5</p>
<pre><code></code></pre><p>requirements.txt에 정의된 파이썬 패키지 설치
ubuntu $ pip install -r ~/env/requirements.txt</p>
<pre><code>
### 주피터 노트북 서버 설치</code></pre><p>주피터 노트북 설정 파일 생성
ubuntu $ jupyter notebook —generate-config</p>
<pre><code>#### 주피터 노트북에 필요한 설정
- 패스워드 설정
- browser = False로 나둬야 함
- private ip 설정을 추가해야 함


#### 암호화된 패스워드 생성</code></pre><p>ubuntu $ ipython</p>
<p>In [1]: from jupyter_server.auth import passwd
In [2]: passwd()
Enter password: ktpw
Verify password: ktpw
Out[3]: <del>~</del>
In [4]: quit</p>
<pre><code>&gt;![](https://velog.velcdn.com/images/nowij_/post/f1add39b-9167-492e-a6e9-2f65bc2afba7/image.png)


#### 주피터 노트북 서버 설정</code></pre><p>Vim Editor 접속
ubuntu $ sudo vi /home/ubuntu/.jupyter/jupyter_notebook_config.py</p>
<pre><code>&gt;![](https://velog.velcdn.com/images/nowij_/post/e9fc0feb-2816-43b1-a54d-14dcc7c3f88d/image.png)

- 가장 아래줄로 가려면 G 입력
- 입력모드 i
</code></pre><p>c.NotebookApp.ip = &#39;000.00.0.000&#39; # private ip address
c.NotebookApp.open_browser = False # 자동 브라우져 실행 설정
c.NotebookApp.password = &#39;argon2: <del>~</del> 위에서 생성된 패스워드&#39;</p>
<pre><code>&gt;![](https://velog.velcdn.com/images/nowij_/post/fef1a714-e0cf-4dce-bd42-f1a96a4399f5/image.png)
- 저장 후 나가기: esc(입력모드 나가기) + : + w(저장) + q(나가기) + enter(입력)

- IP 환경으로 들어가짐
- jupyter notebook을 입력 후 기존의 나의 인터넷 창에 IP:8888 입력시 jupyter notebook 접속 가능

### 주피터 노트북 서버에서 자바스크립트 커널 설정

#### nodejs 설치</code></pre><p>javascript 실행을 위한 패키지 설치
ubuntu $ sudo apt-get install nodejs npm jupyter</p>
<pre><code></code></pre><p>ipython에서 실행 가능한 javascript를 npm으로 설치 및 설정
ubuntu $ sudo npm install -g --unsafe-perm ijavascript
ubuntu $ sudo ijsinstall --install=global</p>
<pre><code>&gt;![](https://velog.velcdn.com/images/nowij_/post/54a93a12-d33e-412b-a422-5b8c17c857f8/image.png)

&gt;- 서버 실행 확인
ps -e | grep jup
&gt;- 서버 종료
kill -9 29497
![](https://velog.velcdn.com/images/nowij_/post/9c447ffe-89bf-4fbf-9d2f-c8766170b085/image.png)



### MongoDB 설치

#### 설치 명령</code></pre><p>ubuntu $ sudo apt install software-properties-common gnupg apt-transport-https ca-
certificates -y</p>
<p>ubuntu $ curl -fsSL <a href="https://pgp.mongodb.com/server-7.0.asc">https://pgp.mongodb.com/server-7.0.asc</a> | sudo gpg -o /usr/share/
keyrings/mongodb-server-7.0.gpg --dearmor</p>
<p>ubuntu $ echo &quot;deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-
server-7.0.gpg ] <a href="https://repo.mongodb.org/apt/ubuntu">https://repo.mongodb.org/apt/ubuntu</a> jammy/mongodb-org/7.0 multiverse&quot; | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list</p>
<pre><code>
#### 최신 버전으로 업데이트</code></pre><p>ubuntu $ sudo apt update</p>
<pre><code>
#### MongoDB 설치</code></pre><p>ubuntu $ sudo apt install mongodb-org -y</p>
<pre><code>
#### MongoDB 서버 실행 및 실행확인</code></pre><p>ubuntu $ sudo systemctl start mongod
ubuntu $ sudo systemctl status mongod</p>
<pre><code>&gt;![](https://velog.velcdn.com/images/nowij_/post/96fc38cd-c61e-4a40-b2fc-d93d75479701/image.png)
&gt;- 창 나가려면 q 입력

#### mongo shell 실행</code></pre><p>ubuntu $ mongosh</p>
<pre><code>&gt;![](https://velog.velcdn.com/images/nowij_/post/ef32239e-235e-4d78-9f87-5b2ec1556e6d/image.png)


#### mongo shell 관리자 계정 생성</code></pre><p>test&gt;use admin</p>
<p>admin&gt; db.createUser({ user: &quot;kt&quot;, pwd: &quot;ktpw&quot;, roles: [ &quot;root&quot; ] })</p>
<p>admin&gt;quit</p>
<pre><code>&gt;![](https://velog.velcdn.com/images/nowij_/post/987b7de6-0208-493d-a3e9-ff4be241fd15/image.png)


#### 외부접속 허용 및 패스워드 사용설정</code></pre><p>ubuntu $ sudo vi /etc/mongod.conf</p>
<pre><code>&gt;![](https://velog.velcdn.com/images/nowij_/post/e1a095b6-63ec-46cf-ad01-53bef30a8864/image.png)


&gt;- bindIp: 0.0.0.0
&gt;- security:
  authorization: enabled
&gt;![](https://velog.velcdn.com/images/nowij_/post/cb437d8f-6e99-4c00-80df-2a4f16793713/image.png)
&gt;- 저장 후 나가기: :wq 

#### 설정 적용을 위한 MongoDB 서버 재시작</code></pre><p>ubuntu $ sudo systemctl restart mongod</p>
<pre><code>
### jupyter notebook 환경
- jupyter notebook 실행 후
#### 서버 접속 URL
- pymong 설치
```python
!pip install pymongo</code></pre><ul>
<li>라이브러리 불러오기<pre><code class="language-python">import pymongo
import pandas as pd
import numpy as np</code></pre>
</li>
</ul>
<h4 id="서버-접속">서버 접속</h4>
<pre><code class="language-python"># uri = &#39;mongodb://&lt;user&gt;:&lt;password&gt;@&lt;public ip&gt;:&lt;port&gt;/?authSource=admin&#39;
uri = &#39;mongodb://kt:ktpw@00.000.0.00:00000/?authSource=admin&#39;
client = pymongo.MongoClient(uri)
list(client.list_databases())</code></pre>
<p><img src="https://velog.velcdn.com/images/nowij_/post/86affe5c-e74e-4464-be70-9c1cded987b1/image.png" alt=""></p>
<h4 id="crud">CRUD</h4>
<pre><code class="language-python"># make data
df = pd.DataFrame({
    &#39;name&#39;: list(&#39;ABCDE&#39;),
    &#39;age&#39;: np.random.randint(20, 40, 5),
    &#39;addr&#39;: list(&#39;SPIDS&#39;),
    })
df</code></pre>
<p><img src="https://velog.velcdn.com/images/nowij_/post/d55e5c45-d457-4259-a967-f18075e7bfec/image.png" alt=""></p>
<ul>
<li>create<pre><code class="language-python">json_data = df.to_dict(&#39;records&#39;)
json_data</code></pre>
<img src="https://velog.velcdn.com/images/nowij_/post/ac8178cf-672f-4fe5-98bd-c953a181e23b/image.png" alt=""></li>
</ul>
<pre><code class="language-python"># DBS(client) &gt; DB(mongo) &gt; Collection(users)
result = client.mongo.users.insert_many(json_data)
result</code></pre>
<p><img src="https://velog.velcdn.com/images/nowij_/post/03b6bcc3-4869-47b3-ae11-2291b0819e16/image.png" alt=""></p>
<ul>
<li><p>read</p>
<pre><code class="language-python">collection = client.mongo.users
documents = collection.find({})
data = list(documents)
len(data), data[0]</code></pre>
<p><img src="https://velog.velcdn.com/images/nowij_/post/4f0def0f-e9f4-4006-92d7-e6d33126f600/image.png" alt=""></p>
</li>
<li><p>update</p>
<pre><code class="language-python">collection = client.mongo.users
documents = collection.find({})
data = list(documents)
pd.DataFrame(data)</code></pre>
<p><img src="https://velog.velcdn.com/images/nowij_/post/f23a87ae-4450-4e3b-9513-00903c9fdaac/image.png" alt=""></p>
</li>
</ul>
<pre><code class="language-python">collection.update_many({&#39;age&#39;: {&#39;$lt&#39;:30}}, {&#39;$set&#39;: {&#39;age&#39;:20}})

documents = collection.find({})
data = list(documents)
pd.DataFrame(data)</code></pre>
<p><img src="https://velog.velcdn.com/images/nowij_/post/644fc6c4-fb3c-4b01-8463-00be8fc41800/image.png" alt=""></p>
<ul>
<li>delete<pre><code class="language-python">collection = client.mongo.users
collection.delete_many({&#39;addr&#39;:&#39;5&#39;})
</code></pre>
</li>
</ul>
<p>documents = collection.find({})
data = list(documents)
pd.DataFrame(data)</p>
<pre><code>![](https://velog.velcdn.com/images/nowij_/post/c13aa4f5-84a2-4e4f-ba25-ee888ea65d41/image.png)


## bash command
- ubuntu 환경에서 사용함
- ubuntu 환경에서 나가서 로컬 환경으로 가려면 `exit` 커멘드 사용
#### pyenv versions
- 내가 사용하는 버전을 확인할 수 있음
ex) pyenv versions

#### python
- 파이썬 명령어를 사용할 수 있음
ex) python

#### quit()
- 파이썬 실행을 나옴
ex) quit()

#### clear
- 화면 초기화
ex) clear

#### ls
- 디렉토리의 파일 리스트를 출력함
&gt;ex) 
&gt;- ls (현재 디렉토리의 리스트 출력)
&gt;- ls env (env 안에 있는 리스트 출력)
&gt;- ls -al env (모두 출력)
![](https://velog.velcdn.com/images/nowij_/post/56d16545-501c-4361-98bb-a54991421086/image.png)


#### echo
- 문자열 출력
ex) echo &quot;hello world!&quot;

#### touch
- 파일 생성함

&gt;ex) 
&gt;- touch test.txt
![](https://velog.velcdn.com/images/nowij_/post/5b4876a6-1370-412d-95f8-4209f56d4490/image.png)

#### mkdir
- 디렉토리 생성
&gt;ex) 
&gt;- mkdir notenooks
![](https://velog.velcdn.com/images/nowij_/post/38144c20-5405-48e1-b21e-e530d756f686/image.png)



#### pwd
- 현재 디렉토리 위치를 출력함
&gt;ex) 
&gt;- pwd
![](https://velog.velcdn.com/images/nowij_/post/9205679e-0894-4975-990a-55e2c550d011/image.png)


#### cd
- 디렉토리 이동
&gt;ex) 
&gt;- cd .. : 상위으로 이동
&gt;- cd test : test 디렉토리로 이동
&gt;![](https://velog.velcdn.com/images/nowij_/post/1174a242-790d-4854-a61b-967d00792f31/image.png)


#### cat
- 파일 안에 있는 텍스트 모두 출력
&gt;ex) 
&gt;- cat requirements.txt : requirements.txt안에 있는 텍스트 출력
![](https://velog.velcdn.com/images/nowij_/post/f19ddcfc-89cc-4002-b163-e580ad677e7e/image.png)


#### head
- 파일 안에 있는 텍스트 상단부터 출력
&gt;ex) 
&gt;- head -n 10 test.txt
![](https://velog.velcdn.com/images/nowij_/post/272371a4-552e-4b52-b424-45e60e470075/image.png)


#### tail
- 파일의 마지막 문자열 출력
&gt;ex) 
&gt;- tail -n test.txt
![](https://velog.velcdn.com/images/nowij_/post/5f5d723e-e011-43ff-953f-d119e611d7c0/image.png)


#### chmod
- 파일 권한 수정
ex) chowd 400 test.txt

#### chown
- 파일 소유자 수정
ex) chown -R ubuntu:ubuntu test.txt

#### history
- 이전에 입력한 commands들의 히스토리 출력
&gt;ex) 
&gt;- history
![](https://velog.velcdn.com/images/nowij_/post/1162304d-0840-41be-8871-42faeef6b722/image.png)
- 내가 실행한 커멘드를 순서대로 출력하고 원하는 커멘드의 번호를 !75 하면 75번의 커멘드가 출력 된다

#### cp
- 파일 복사
&gt;ex) 
&gt;- notebookes 디렉토리에 test.txt 파일 복사
&gt;- cp test.txt ./notebooks/  (상대경로)
&gt;- cp test.txt notebooks/ (상대경로)
&gt;- cp test.txt /home/ubuntu/notebooks (절대경로)
&gt;- cp test.txt ~/notebooks/ (절대경로)
&gt;- 위 네 개는 모두 같음
![](https://velog.velcdn.com/images/nowij_/post/0a357bf2-361a-42fa-8e79-ca4bdd8f4472/image.png)


#### mv
- 파일 이동. 파일이름 바꾸기
&gt;ex)
&gt;- mv test.txt env : notebooks 디렉토리에 test.txt로 파일을 env로 이동
![](https://velog.velcdn.com/images/nowij_/post/268ae8f1-e7ee-45cd-b330-e9364e00c110/image.png)


#### ps
- 프로세스 출력
ex) ps -e|grep note

#### kill
- 프로세스 종료
ex) kill -9 1234

#### df
- 하드 디스크의 남은 용량 확인
&gt;ex) 
&gt;- df -h
![](https://velog.velcdn.com/images/nowij_/post/e34ecece-2286-418d-8070-8bb535c98fc0/image.png)

#### free
- 현재 메모리 사용량 출력
&gt;ex) 
&gt;- free -h
![](https://velog.velcdn.com/images/nowij_/post/b0fb38f3-3eb3-4c9c-9f2b-36e7c05b18a6/image.png)

#### tree
- 트리 형태로 디렉토리의 구조를 출력
ex) tree

#### rm
- 파일을 삭제할때 사용
&gt;ex) 
&gt;- rm test.txt
![](https://velog.velcdn.com/images/nowij_/post/57642831-8203-4460-925e-c6a94851e8a5/image.png)


### 특수 기호들
#### | (파이프라인)
- 명령을 실행한 출력 결과에서 특정 조건으로 필터링하여 데이터를 출력
&gt;ex)
&gt;- history | grep cd
&gt;- cd가 들어간 히스토리 리스트를 보여줌
![](https://velog.velcdn.com/images/nowij_/post/9d7501a5-1d37-4f8e-b818-1b4de484a843/image.png)

#### &gt;
- 출력결과를 over write
&gt;ex)
&gt;- echo &quot;hello world&quot; &gt; test.txt
![](https://velog.velcdn.com/images/nowij_/post/3d69aa19-183e-425a-87c2-ba0cc52a125b/image.png)

#### &gt;&gt;
- 출력 결과를 append
ex) echo &quot;hello world&quot; &gt;&gt; test.txt

#### &amp;&amp;
- 연결해서 실행
&gt;ex) 
&gt;- kt 디렉토리를 생성하고 kt 디렉토리로 이동
&gt;- mkdir kt &amp;&amp; cd kt
![](https://velog.velcdn.com/images/nowij_/post/bb973207-05d9-4421-a545-982ac2ce5b61/image.png)

# Vim Editor
- Linux, Unix 시스템에서 사용할 수 있는 편집기
- 마우스 없이 키보드 입력으로 모든 기능 사용 가능
- CLI 환경이나 터미널 환경에서 사용 가능

### vi .bashrc
- vim editor 환경으로 접속
- `alias server = ssh -i ~/Desktop/kt.pem ubuntu@00.000.00.000` 를 입력하면
- 로컬 환경에서 `server`만 입력해도 IP 환경 접속 가능

## Mode
### 일반모드
- 문서의 특정 기능이나 위치로 이동할 수 있는 모드
- `esc`: 일반모드로 변경
- `w`, `forword`: 단어 뒤로 이동
- `b`, `backword`: 단어 앞으로 이동
- `^`: 행의 가장 앞으로 이동
- `$`: 행의 가장 뒤로 이동
- `x`: 현재 커서 위치 문자 삭제
- `dw`: 현재 커서 위치 단어 삭제
- `D`: 현재 위치에서 라인 끝까지 삭제
- `dd`: 행 삭제
- `gg`: 문서 시작으로 이동
- `G`: 문서의 끝으로 이동
- `숫자 + G`: 숫자 라인으로 이동
- `{`: 이전 페이지로 이동
- `}`: 다음 페이지로 이동
- `yw`: 단어 복사
- `yy`: 한줄 복사
- `p`: 붙여 넣기
- `u`: 되돌리기


### 편집모드
- 문서 내용을 편집할 수 있는 모드
- `a`: 커서 위치의 다음 칸부터 입력
- `i`: 커서 위치 부터 입력
- `o`: 커서 위치의 다음 줄부터 입력

### 명령모드
- 일반모드에서 `:` 입력하면 에디어 가장 마지막 줄에 `:` 문자 뒤에 명령실행가능 
ex) `:wp` : 파일 저장 후 나가기
- `/`: 정방향 검색, `n`: 다음 검색 단어로 이동함
- `?`: 역방향 검색
- `w`: 파일 저장
- `q`: 나가기
- `!`: 강제실행
- `set number`: 줄번호 표시

# TMUX
- Terminal Multiplexer
- Linux 접속 환경의 세션관리
### 세션
- 접속 정보를 저장하는 연결
- 세션 생성: $ tmux new -s s1(세션이름)
- 세션 종료: $ tmux kill-session -t kt(세션이름)
- 세션 목록 보기: $ tmux ls
- 세션 접속: $ tmux a -t kt(세션이름)
&gt;- s1 s2 세션을 생성함
&gt;- s1 한 쪽에만 입력해도 다른 s1 세션에 생성 됨
![](https://velog.velcdn.com/images/nowij_/post/977072d3-d294-4cc1-91ed-a8ee570a6d79/image.png)

### 윈도우
- 세션이 가지고 있는 여러 개의 명령어 입력 환경
- 윈도우 생성 $ ctrl + b, c
- 윈도우 종료 $ ctrl + b, &amp;
- 윈도우 이동 $ ctrl + b, 0-9
&gt;- ctrl + b, c 
&gt;- 0번만 있던 창이 1번도 생성 됨
&gt;- ctrl + b, 창번호
&gt;- 자유롭게 창 이동 가능
![](https://velog.velcdn.com/images/nowij_/post/524ed788-0a45-4612-b625-72464e5b1363/image.png)


### 팬
- 윈도우가 가지고 있는 여러 개의 분할된 화면
- 팬 생성(종): ctrl + b, %
- 팬 생성(횡): ctrl + b, &quot;
- 팬 이동: $ ctrl + b, 화살표: $ ctrl + b, q(번호)
- 팬 종료: $ ctrl + b, x
&gt; ![](https://velog.velcdn.com/images/nowij_/post/de10f0cf-e55a-4e47-a735-225c898799d7/image.png)





</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[12주차 웹프로그래밍 (2)]]></title>
            <link>https://velog.io/@nowij_/12%EC%A3%BC%EC%B0%A8-%EC%9B%B9%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-2</link>
            <guid>https://velog.io/@nowij_/12%EC%A3%BC%EC%B0%A8-%EC%9B%B9%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-2</guid>
            <pubDate>Sat, 18 May 2024 09:41:29 GMT</pubDate>
            <description><![CDATA[<h1 id="ngrok-연결">ngrok 연결</h1>
<blockquote>
<ol>
<li>구글 검색창에 ngrok 검색
<img src="https://velog.velcdn.com/images/nowij_/post/c8e1e582-9e0c-4a7b-a1c1-07894b84218b/image.png" alt=""></li>
</ol>
</blockquote>
<ol start="2">
<li>다운로드 후 지정한 경로에 설치<blockquote>
</blockquote>
</li>
<li>회원가입하고 연결 코드 복사
<img src="https://velog.velcdn.com/images/nowij_/post/953788bc-21e4-4969-a921-d68a4a778bb3/image.png" alt=""><blockquote>
</blockquote>
</li>
<li>vscode 터미널창이나 anconda powershell에서 연결</li>
</ol>
<ul>
<li>ngrok.exe가 있는 경로에서 ngrok홈페이지에서 복사했던 코드 실행
<img src="https://velog.velcdn.com/images/nowij_/post/a095a354-5a2c-40c0-a43c-b78defb0ba89/image.png" alt=""><blockquote>
</blockquote>
</li>
<li>ngrok http file:///내 경로
<img src="https://velog.velcdn.com/images/nowij_/post/0df39b52-d825-4552-a550-86eba19626a3/image.png" alt=""><blockquote>
</blockquote>
</li>
<li>아래와 같이 뜨면 연결 완료 (이 환경에서 나가려면 ctrl+c)
<img src="https://velog.velcdn.com/images/nowij_/post/867b4c73-fec1-4258-94b7-b629dfd6b012/image.png" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[12주차 웹프로그래밍 (1)]]></title>
            <link>https://velog.io/@nowij_/12%EC%A3%BC%EC%B0%A8-%EC%9B%B9%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D</link>
            <guid>https://velog.io/@nowij_/12%EC%A3%BC%EC%B0%A8-%EC%9B%B9%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D</guid>
            <pubDate>Sun, 12 May 2024 05:06:10 GMT</pubDate>
            <description><![CDATA[<h1 id="vscode">VSCODE</h1>
<h2 id="plugin">Plugin</h2>
<blockquote>
<h4 id="beautyify-css">beautyify css</h4>
<p><img src="https://velog.velcdn.com/images/nowij_/post/462c0f2e-5022-4257-a89c-f4921f5479aa/image.png" alt=""></p>
</blockquote>
<ul>
<li>코드의 가독성을 높여주고 정렬해주는 역할을 함</li>
<li>shift + alt + F</li>
</ul>
<blockquote>
<h4 id="python-intellisense">python intelliSense</h4>
<p><img src="https://velog.velcdn.com/images/nowij_/post/b4f399da-9a7e-49d1-b039-c58604777543/image.png" alt=""></p>
</blockquote>
<ul>
<li>파이썬을 vscode에서 사용할 수 있게 함</li>
</ul>
<blockquote>
<h4 id="live-preview">live preview</h4>
<p><img src="https://velog.velcdn.com/images/nowij_/post/91dcc528-1326-4e0c-aa5b-c11fc79f40d0/image.png" alt=""></p>
</blockquote>
<ul>
<li>실시간으로 CSS를 미리보기 할 수 있는 확장 프로그램</li>
</ul>
<blockquote>
<h4 id="nodejs">nodejs</h4>
</blockquote>
<ul>
<li>구글창에 node.js 검색 후 설치
<img src="https://velog.velcdn.com/images/nowij_/post/6c4dc198-e636-4969-9a2d-4d9ca886c1fa/image.png" alt=""></li>
<li>Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임 환경으로, 서버 측 JavaScript 개발을 가능하게 해주는 플랫폼</li>
</ul>
<blockquote>
<h4 id="javascript-debugger">javascript debugger</h4>
<p><img src="https://velog.velcdn.com/images/nowij_/post/177a0c63-a31f-4b76-99ed-8ade1ade4203/image.png" alt=""></p>
</blockquote>
<ul>
<li>코드 실행 중 발생하는 버그를 식별하고 수정하는 도구</li>
</ul>
<blockquote>
<h4 id="code-runner">code runner</h4>
<p><img src="https://velog.velcdn.com/images/nowij_/post/c9545b57-5939-4354-b25a-993022a66301/image.png" alt=""></p>
</blockquote>
<ul>
<li>코드 실행을 가능하게 하는 확장 프로그램</li>
</ul>
<blockquote>
<h4 id="html-prettier">html prettier</h4>
<p><img src="https://velog.velcdn.com/images/nowij_/post/aba28f19-6702-4164-8988-0d6f823410d9/image.png" alt=""></p>
</blockquote>
<ul>
<li>html 코드를 포멧팅하는 프로그램</li>
</ul>
<blockquote>
<h4 id="autopep8">autopep8</h4>
<p><img src="https://velog.velcdn.com/images/nowij_/post/c5a17a40-b490-4366-87ed-26d74b3c9606/image.png" alt=""></p>
</blockquote>
<ul>
<li>파이썬 코드를 포멧팅하는 프로그램</li>
</ul>
<h2 id="단축키">단축키</h2>
<ul>
<li>ctrl + b : 왼쪽 바 숨김</li>
<li>ctrl + alt + n : 실행</li>
<li>ctrl + x : 한쪽 라인 삭제</li>
<li>ctrl + alt : 여러 라인 선택</li>
<li>ctrl + j : 여러 라인 합치기</li>
<li>shift + alt + f : 포멧팅함</li>
</ul>
<blockquote>
<p>개인적으로 원하는 단축키를 사용하려면
ctrl + k, ctrl + s 를 작성시
<img src="https://velog.velcdn.com/images/nowij_/post/ba9deb20-f359-49ee-adaf-37b8cf3aa3e3/image.png" alt="">
이런 화면에서 수정이 가능하다.</p>
</blockquote>
<h1 id="html">HTML</h1>
<ul>
<li>웹문서를 작성하는 마크업 언어</li>
</ul>
<h3 id="html의-기본-구조">HTML의 기본 구조</h3>
<p><img src="https://velog.velcdn.com/images/nowij_/post/4a3023b9-e31e-4e27-bd6d-ba0a4197c671/image.png" alt=""></p>
<ul>
<li><p><code>&lt;!DOCTYPE html&gt;</code> : document 타입이 html 문서</p>
</li>
<li><p><code>&lt;html lang=&quot;en&quot;&gt;&lt;/html&gt;</code> :웹문서의 시작과 끝을 나타내는 태그</p>
</li>
<li><p><code>&lt;head&gt;&lt;/head&gt;</code> : 웹문서의 정보에 대한 코드 작성</p>
</li>
<li><p><code>&lt;body&gt;&lt;/body&gt;</code> : 웹문서에서 화면에 출력되는 코드 작성</p>
</li>
<li><p><code>meta</code> : 페이지 데이터 정보를 출력</p>
</li>
<li><p><code>viewport</code> : 렌더링 영역의 크기 설정 (반응형 웹)</p>
</li>
<li><p><code>title</code> : 브라우져에 출력되는 제목</p>
</li>
</ul>
<h3 id="html-페이지-구조">HTML 페이지 구조</h3>
<p>시멘틱 태그 : 태그 이름으로 의미를 알 수 있는 태그</p>
<ul>
<li>시멘틱 태그로 웹페이지의 전체적인 구조를 구성</li>
<li>시멘틱 태그를 반드시 사용해야 하는 것은 아님</li>
</ul>
<p><img src="https://velog.velcdn.com/images/nowij_/post/af9618b1-a1f4-4a8a-a5b7-d8352a59d1bb/image.png" alt=""></p>
<ul>
<li><code>&lt;header&gt;</code> : 헤더 영역 표현</li>
<li><code>&lt;nav&gt;</code> : 네이게이션 바 영역 표현</li>
<li><code>&lt;main&gt;</code> : 전체 컨텐츠 영역 표현</li>
<li><code>&lt;article&gt;</code> : 독립적인 컨텐츠 영역 표현</li>
<li><code>&lt;section&gt;</code> : 컨텐츠 영역 표현, article 태그 안에 여러 개의 section 태그 작성함</li>
<li><code>&lt;aside&gt;</code> : 본문 오른쪽이나 왼쪽 영역 표현</li>
<li><code>&lt;footer&gt;</code> : 웹문서 아래 영역 표현</li>
</ul>
<h3 id="문자열-태그">문자열 태그</h3>
<p><img src="https://velog.velcdn.com/images/nowij_/post/12c0d1ae-6c55-405d-b41a-a68d41996259/image.png" alt=""></p>
<ul>
<li><code>&lt;h1&gt;~&lt;h6&gt;</code>: 제목 태그 (크기별)</li>
<li><code>&lt;p&gt;</code>: 한줄 문자열 태그</li>
<li><code>&lt;br&gt;</code>: 줄바꿈</li>
<li><code>&lt;span&gt;</code> : 한블럭 문자열 태그</li>
<li><code>&lt;pre&gt;</code> : 줄바꿈 띄어쓰기 적용 태그</li>
<li><code>&lt;code&gt;</code> : 코드 태그</li>
<li><code>&lt;strong&gt;, &lt;b&gt;</code> : 굵은 글씨 태그</li>
<li><code>&lt;small&gt;</code> : 작은 글씨 태그</li>
<li><code>&lt;em&gt;, &lt;i&gt;</code> : 이탤릭체 태그</li>
<li><code>&lt;sup&gt;</code> : 윗첨자 태그</li>
<li><code>&lt;sub&gt;</code> : 아래첨자 태그</li>
<li><code>&lt;u&gt;</code> : 밑줄 태그</li>
<li><code>&lt;del&gt;</code> : 삭제선 태그</li>
<li><code>&lt;a href=&quot;&quot; target=&quot;_blank&quot;&gt;</code>: 링크 태그 <ul>
<li>href: 이동할 페이지 링크</li>
<li>target=&quot;_blank&quot;: 페이지 이동시 브라우져에 새로운 탭 생성</li>
</ul>
</li>
</ul>
<h3 id="html-테이블-태그">HTML 테이블 태그</h3>
<p><img src="https://velog.velcdn.com/images/nowij_/post/03b0dd85-a2a0-4e08-afaf-512d6e4dab06/image.png" alt="">
<code>&lt;table&gt;</code> : 테이블 태그
<code>&lt;caption&gt;</code> : 테이블 제목
<code>&lt;thead&gt;</code> : 테이블 컬럼
<code>&lt;tbody&gt;</code> : 테이블 내용
<code>&lt;tr&gt;</code> : 테이블 로우(row)
<code>&lt;th&gt;, &lt;td&gt;</code> : 테이블 데이터</p>
<h3 id="html-이미지-태그">HTML 이미지 태그</h3>
<p><img src="https://velog.velcdn.com/images/nowij_/post/29941fa2-30b8-4487-8d66-7c50303181ee/image.png" alt=""></p>
<ul>
<li><code>&lt;img src=&quot;&quot;, alt=&quot;&quot; width=&quot;&quot; height=&quot;&quot;&gt;</code> : 이미지 태그<ul>
<li>scr: 이미지 경로</li>
<li>alt: 대체 텍스트</li>
<li>width: 넓이</li>
<li>height: 높이</li>
</ul>
</li>
</ul>
<h3 id="html-입력-태그">HTML 입력 태그</h3>
<p> <img src="https://velog.velcdn.com/images/nowij_/post/71bfe05f-4bbd-4769-84ca-623b2236bc31/image.png" alt=""></p>
<ul>
<li><p><code>&lt;form method=&quot;&quot; name=&quot;&quot;, action=&quot;&quot; target=&quot;_blank&quot;&gt;</code> : 로그인 페이지와 같이 여러개의 데이터를 서버로 전달할때 사용하는 태그</p>
<ul>
<li>method: 데이터 전달 방법 정의 (get, post 방식)</li>
<li>name: form 태그 이름 정의</li>
<li>action: 데이터를 전달할 URL</li>
</ul>
</li>
<li><p><code>&lt;input type=&quot;&quot; placeholder=&quot;&quot; maxlength=&quot;&quot; name=&quot;&quot; value=&quot;&quot; readonly required autofocus&gt;</code> : 문자열을 입력 받는 태그</p>
<ul>
<li>type: 다양한 형태의 입력 태그 (text, password, email, checkbox, radio, datetime, submit, reset, file)</li>
<li>placeholder: 입력 전에 입력태그에 출력되는 문자열 속성</li>
<li>maxlength: 최대 입력 문자열 길이 설정 속성</li>
<li>name: input 태그를 묶어주는 문자열 속성</li>
<li>value: 선택했을때, 서버로 전송할 데이터를 입력하는 속성</li>
<li>readonly: 데이터를 입력할 수 없고 읽을 수만 있는 속성</li>
<li>required: 필수 입력 속성</li>
<li>autofocus: 자동으로 입력창의 포커스 설정</li>
</ul>
</li>
<li><p><code>&lt;label&gt;</code> : input 태그에 이름을 붙일 수 있는 태그</p>
</li>
<li><p><code>&lt;textarea cols=&quot;&quot; rows=&quot;&quot;&gt;</code> : 여러 줄의 문자열을 입력할 수 있는 태그</p>
<ul>
<li>cols: 컬럼 수 태그의 너비 설정</li>
<li>rows: 행수 태그의 높이 설정</li>
</ul>
</li>
</ul>
<h3 id="emmit-코드">Emmit 코드</h3>
<ul>
<li>html 코드를 간단하게 만들어주는 문법</li>
</ul>
<pre><code class="language-html">&lt;!-- html 코드를 간단하게 만들어주는 문법 --&gt;

&lt;!-- &#39;&gt;&#39; : 하위 레벨 태그 생성--&gt;
&lt;!-- sp&gt;pan --&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;


&lt;!-- &#39;+&#39; : 같은 레벨 태그 생성 --&gt;
&lt;!-- p+span --&gt;
&lt;p&gt;&lt;/p&gt;
&lt;span&gt;&lt;/span&gt;

&lt;!-- &#39;()&#39; : 태그 묶음 --&gt;
&lt;!-- (p+span)(p+span) --&gt;
&lt;p&gt;&lt;/p&gt;
&lt;span&gt;&lt;/span&gt;
&lt;p&gt;&lt;/p&gt;
&lt;span&gt;&lt;/span&gt;

&lt;!-- &#39;^&#39; : 상위 엘리먼트로 이동 --&gt;
&lt;!-- p&gt;span^div --&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;

&lt;!-- &#39;:&#39; : type 속성 --&gt;
&lt;!-- input:text --&gt;
&lt;input type=&quot;text&quot; name=&quot;&quot; id=&quot;&quot;&gt;


&lt;!-- #: 아이디, . : 클래스 --&gt;
&lt;!-- p#no.no1&gt;span.no2 --&gt;
&lt;p id=&quot;no&quot; class=&quot;no1&quot;&gt;&lt;span class=&quot;no2&quot;&gt;&lt;/span&gt;&lt;/p&gt;

&lt;!-- &#39;*&#39; : 반복해서 태그 생성 --&gt;
&lt;!-- ul&gt;li.data*3 --&gt;
&lt;ul&gt;
    &lt;li class=&quot;data&quot;&gt;&lt;/li&gt;
    &lt;li class=&quot;data&quot;&gt;&lt;/li&gt;
    &lt;li class=&quot;data&quot;&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;!-- &#39;$&#39; : 순번 사용 --&gt;
&lt;!-- ul&gt;li.data$*3 --&gt;
&lt;ul&gt;
    &lt;li class=&quot;data1&quot;&gt;&lt;/li&gt;
    &lt;li class=&quot;data2&quot;&gt;&lt;/li&gt;
    &lt;li class=&quot;data3&quot;&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;!-- &#39;@&#39; : 순번 시작 번호 설정 --&gt;
&lt;!-- ul&gt;li.data$@6*3 --&gt;
&lt;ul&gt;
    &lt;li class=&quot;data6&quot;&gt;&lt;/li&gt;
    &lt;li class=&quot;data7&quot;&gt;&lt;/li&gt;
    &lt;li class=&quot;data8&quot;&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;!-- &#39;{}&#39; : 문자열 입력 --&gt;
&lt;!-- ul&gt;li.data$@6{no$}*3 --&gt;
&lt;ul&gt;
    &lt;li class=&quot;data6&quot;&gt;no1&lt;/li&gt;
    &lt;li class=&quot;data7&quot;&gt;no2&lt;/li&gt;
    &lt;li class=&quot;data8&quot;&gt;no3&lt;/li&gt;
&lt;/ul&gt;

&lt;!-- &#39;[]&#39;: 속성값 입력 --&gt;
&lt;!-- a[href=https://kt.com{kt 페이지 이동}] --&gt;
&lt;a href=&quot;https://kt.com{kt 페이지 이동}&quot;&gt;&lt;/a&gt;</code></pre>
<h1 id="css">CSS</h1>
<ul>
<li><strong>CSS(Cascading Style Sheets)</strong>: 웹 페이지의 스타일과 레이아웃을 지정하는 데 사용되는 언어</li>
<li>HTML과 함께 사용되어 웹 페이지의 외관을 꾸미는 역할을 함</li>
<li>CSS를 사용하면 텍스트의 색상, 글꼴, 크기, 배경, 여백 등 다양한 스타일 속성을 지정할 수 있다.</li>
</ul>
<h2 id="css-사용-방법">css 사용 방법</h2>
<h4 id="css-html-연결">css-html 연결</h4>
<ul>
<li>CSS는 html에서 style 태그안에 넣어서 사용할 수 있다.<pre><code class="language-html">&lt;style&gt;&lt;/style&gt;</code></pre>
</li>
<li>그 이외에
.css파일을 만들어서 연결해 주는 방법이 있다.
<img src="https://velog.velcdn.com/images/nowij_/post/19d59e28-093d-4570-a0a7-195c35d503cd/image.png" alt="">
위 처럼 head안에 아래와 같이 작성하여 연결해주면 된다.<pre><code class="language-html">&lt;link rel=&quot;stylesheet&quot; href=&quot;경로/이름.css&quot; /&gt;</code></pre>
</li>
</ul>
<blockquote>
<ul>
<li>이와 같이 사용함
<img src="https://velog.velcdn.com/images/nowij_/post/e695561c-372d-4925-977b-16c71dbabfc3/image.png" alt=""></li>
</ul>
</blockquote>
<h3 id="글꼴-설정">글꼴 설정</h3>
<ul>
<li>font-family : 글꼴 설정</li>
<li>color : 글자색상 설정 (rgb, rgba)</li>
<li>font-size : 글자크기 설정 (주로 px단위 사용)</li>
<li>font-style : 글자 스타일 설정 (normal, italic)</li>
<li>font-weight : 글자 스타일 설정 (normal, bold,  lighter, 100 ~ 900)</li>
<li>line-height : 글자 세로 간격 설정</li>
<li>letter-pacing : 글자 가로 간격 설정</li>
<li>text-align : 글자 정렬 (left, right, center 등)</li>
<li>text-decoration : 텍스트의 밑줄이나 취소선 설정</li>
</ul>
<h3 id="레이아웃-영역설정">레이아웃 영역설정</h3>
<blockquote>
<p><img src="https://velog.velcdn.com/images/nowij_/post/def96b7b-f87c-4eef-8062-8cf908696a19/image.png" alt=""></p>
</blockquote>
<ul>
<li><p>margin: border 바깥 영역의 여백 설정</p>
<ul>
<li>ex) 5px(모든 margin 5px)</li>
<li>5px 10px(위 아래 5px, 좌우 10px)</li>
<li>5px 10px 15px 20px(top에서 시계방향으로 5 10 15 20)
margin: 0 auto; --&gt; 가운데 정렬임</li>
</ul>
</li>
<li><p>border: 영역의 테두리 설정</p>
<ul>
<li>border-style: solid, dotted, dashed 등</li>
</ul>
</li>
<li><p>border-radius: 둥근 모서리 설정</p>
</li>
<li><p>padding: border 안쪽 영역의 여백 설정</p>
</li>
<li><p>width: 컨텐츠의 가로길이 설정 (px % auto)</p>
</li>
<li><p>height 컨텐츠의 세로길이 설정</p>
</li>
</ul>
<h3 id="레이아웃-정렬">레이아웃 정렬</h3>
<ul>
<li>float: 레이아웃 정렬 설정 (left, right)
높이 값은 0으로 설정됨</li>
<li>display: 레이아웃 출력 속성 설정 (block, inline-block)</li>
<li>position: 레이아웃 위치 설정
(relative, absolute, fixed)</li>
</ul>
<h3 id="배경-설정">배경 설정</h3>
<ul>
<li>background-color: 배경색 설정</li>
<li>background-image: 이미지 파일을 배경으로 설정 </li>
<li>background-position: 이미지 파일의 배경 위치 설정 (left, right, center, top, bottom)</li>
</ul>
<h1 id="javascript">JavaScript</h1>
<ul>
<li>웹브라우저에서 이벤트를 처리하는 문법</li>
</ul>
<ol>
<li>변수선언: RAM을 사용하는 문법</li>
<li>데이터타입: RAM을 효율적으로 사용하는 문법 (동적 타이핑)</li>
<li>연산자: CPU 사용하는 문법 (산술, 비교, 논리)</li>
<li>조건문: 조건에 따라서 다른 코드를 실행</li>
<li>반복문: 특정 코드를 반복적으로 실행</li>
<li>함수: 중복 코드를 묶어서 코드 작성 실행</li>
<li>객체: 식별자 1개에 데이터 여러 개를 저장하는 문법 (클래스)</li>
</ol>
<h4 id="특징">특징</h4>
<ul>
<li>인터프리터언어</li>
<li>동적 타이핑</li>
<li>객체 지향</li>
</ul>
<h3 id="1-변수-선언">1. 변수 선언</h3>
<ul>
<li>식별자: 저장공간을 구별하는 문자열</li>
<li>식별자 규칙: 대소문자, 숫자, _, $, 가장앞에 숫자 x, 예약어 사용x</li>
<li>식별자 컨벤션: camelCase(변수, 함수), PascalCase(모듈)</li>
</ul>
<h4 id="식별자-1개-데이터-1개">식별자 1개, 데이터 1개</h4>
<pre><code class="language-javascript">var data1 = 10;</code></pre>
<h4 id="식별자-n개-데이터-n개">식별자 n개, 데이터 n개</h4>
<pre><code class="language-javascript">var data2 = 20, data3 = 30;
var data2 = 20,
    data3 = 30;</code></pre>
<h4 id="식별자-n개-데이터-1개">식별자 n개, 데이터 1개</h4>
<pre><code class="language-javascript">var data4 = data5 = 40;
console.log(data1, data2, data3, data4, data5);
&gt;
10 20 30 40 40</code></pre>
<ul>
<li>식별자 1개 데이터 n개인 경우 array이다.</li>
</ul>
<h3 id="2-데이터-타입">2. 데이터 타입</h3>
<ul>
<li>number, string, boolean, function, object</li>
<li>동적타이핑: 데이터아팁 선언 없이 자동으로 데이터타입 정의<pre><code class="language-javascript">var data1 = 1;
var data2 = &#39;js&#39;;
var data3 = true;
var data4 = function(){console.log(&#39;js&#39;)};
var data5 = {key: &#39;js&#39;};
</code></pre>
</li>
</ul>
<p>console.log(typeof data1, typeof data2, typeof data3);
console.log(typeof data4, typeof data5);</p>
<blockquote>
</blockquote>
<p>number string boolean
function object</p>
<pre><code>#### 데이터가 없음
- undefined: 선언은 되었으나 데이터가 할당 되지 않음
- null: 선언은 되었으나 데이터 없음이 할당
- NaN: Number 데이터 타입에서 undefined
```javascript
var data1 = undefined;
var data2 = null;
var data3 = NaN;
console.log(typeof data1, data1);
console.log(typeof data2, data2);
console.log(typeof data3, data3);
console.log(NaN == NaN, NaN &gt; NaN);
&gt;
undefined undefined
object null
number NaN
false false</code></pre><h4 id="데이터-타입의-형-변환">데이터 타입의 형 변환</h4>
<ul>
<li>Number(), String(), Boolean()<pre><code class="language-javascript">var data1 = &#39;1&#39;;
var data2 = 2;
console.log(typeof data1, typeof Number(data1));
console.log(data1+data2);
console.log(Number(data1)+data2);
console.log(data1 + String(data2));
&gt;
string number
12
3
12</code></pre>
<h4 id="묵시적-형변환">묵시적 형변환</h4>
</li>
<li>서로 다른 데이터 타입을 연산할때 데이터 타입을 변경<pre><code class="language-javascript">var data1 = &#39;1&#39;;
var data2 = 2;
console.log(typeof data1, typeof (data1 - 0));
console.log(typeof data2, typeof (&#39;&#39;+data2));
&gt;
string number
number string</code></pre>
</li>
</ul>
<h3 id="3-연산자">3. 연산자</h3>
<h4 id="산술">산술</h4>
<ul>
<li>데이터 + 데이터 = 데이터 </li>
<li>(+, -, <em>, /, %, *</em>, ++, --)</li>
</ul>
<pre><code class="language-javascript">var data1 = 11, data2 = 4;
console.log(data1 / data2, data1 % data2, data2 **3);
&gt;
2.75 3 64

// ++data1 : +1하고 데이터 대입
var data1 = 5, data2 = 7;
data1 = ++data2;
console.log(data1, data2);
&gt;
8 8  

// data1++ : 데이터 대입하고 +1
var data1 = 5, data2 = 7;
data1 = data2++;
console.log(data1, data2);
&gt;
7 8  </code></pre>
<h4 id="비교">비교</h4>
<ul>
<li>데이터 + 데이터 = 논리값 (조건 1개)</li>
<li>(==, !=, &gt;, &lt;, &gt;=, &lt;=, ===, !==)</li>
<li>==(데이터만 비교), ===(데이터, 데이터 타입 비교)<pre><code class="language-javascript">var data1 = 1, data2 = &#39;1&#39;;
console.log(data1, data2);
console.log(data1 == data2, data1 === data2);
&gt;
1 1
true false</code></pre>
<h4 id="논리">논리</h4>
</li>
<li>논리값(조건1개) + 논리값(조건2개) = 논리값 (조건 2개 이상) </li>
<li>(!, &amp;&amp;, ||)<pre><code class="language-javascript">console.log(true &amp;&amp; false, true || false);
&gt;
false true</code></pre>
</li>
</ul>
<h4 id="할당">할당</h4>
<ul>
<li>변수 &lt;산술&gt; 데이터 누적해서 연산<pre><code class="language-javascript">var data1 = 10;
data1 += 20;
console.log(data1);
&gt;
30  </code></pre>
</li>
</ul>
<h4 id="삼항">삼항</h4>
<ul>
<li>(python): true if condition else false</li>
<li>(javascript): condition ? true : false</li>
<li>조건 ? 참 : 거짓<pre><code class="language-javascript">var balance = 10000, amount = 6000;
var msg = balance &gt;= amount ? &#39;인출가능&#39; : &#39;인출불가&#39;;
console.log(msg);
&gt;
인출가능  </code></pre>
</li>
</ul>
<h4 id="실수하기-쉬운-코드-부동-소수점-에러">실수하기 쉬운 코드 (부동 소수점 에러)</h4>
<pre><code class="language-javascript">var data1 = 0.1, data2 = 0.2;
console.log(data1 + data2 === 0.3);
console.log(data1 + data2);
&gt;
false
0.30000000000000004
console.log(Math.round((data1 + data2) * 10) / 10);
console.log(Math.round((data1 + data2) * 10) / 10 === 0.3);
&gt;
0.3
true</code></pre>
<h3 id="4-조건문">4. 조건문</h3>
<ul>
<li>if, else if, else<pre><code class="language-javascript">var balance = 3000, amount = 4000;
if(balance &lt; amount){
  console.log(&#39;인출불가&#39;);
} else if (amount &gt; 5000){
  console.log(&#39;인출불가: 최대인출금액초과&#39;);
} else {
  console.log(&#39;인출가능&#39;);
}</code></pre>
</li>
</ul>
<h3 id="5-반복문">5. 반복문</h3>
<ul>
<li>while, for, break, continue<h4 id="while">while</h4>
</li>
<li>횟수를 특정할 수 없는 경우</li>
</ul>
<pre><code class="language-javascript">var count = 3;
while(count &gt; 0){
    count -= 1;
    console.log(&#39;js&#39;);
}
&gt;
js
js
js</code></pre>
<h4 id="for">for</h4>
<ul>
<li>횟수를 특정할 수 있는 경우<pre><code class="language-javascript">for(var i=0; i&lt;3; i++){
  console.log(&#39;js&#39;);
}
&gt;
js
js
js</code></pre>
</li>
</ul>
<h4 id="continue">continue</h4>
<ul>
<li>실행되면 반복문을 정의하는 코드로 올라가서 코드 실행<pre><code class="language-javascript">for(var i=0; i&lt;5; i++){
  if (i === 2){
      continue;
  }
  console.log(&#39;js&#39;, i);
}
&gt;
js 0
js 1
js 3
js 4</code></pre>
</li>
</ul>
<h4 id="break">break</h4>
<ul>
<li>반복을 중단<pre><code class="language-javascript">for(var i=0; i&lt;5; i++){
  if (i === 2){
      continue;
  }
  console.log(&#39;js&#39;, i);
  if (i &gt;= 3) {
      break;
  }
}
&gt;
js 0
js 1
js 3</code></pre>
</li>
</ul>
<h4 id="예제-문제">예제 문제</h4>
<ul>
<li>로또 번호 출력 1 ~ 45 랜덤한 숫자 6개 출력</li>
<li>중복 허용 출력 </li>
</ul>
<pre><code class="language-javascript">var count = 6, lotto = &#39;&#39;;
console.log(Math.random());
console.log(Math.ceil(4.2));
for (var i=0; i&lt;count; i++){
    var rnum = Math.ceil(Math.random() * 44) +1;
    lotto = lotto + rnum + &#39; &#39;;
}
console.log(lotto);
&gt;
0.3842289032751265
5
22 10 45 14 37 30 </code></pre>
<h3 id="6-함수">6. 함수</h3>
<ul>
<li>중복되는 코드를 묶어서 코드 작성 실행 문법 -&gt; 코드 유지 보수 향상</li>
<li>사용법: 함수 선언(코드 작성) -&gt; 함수 호출(코드 실행)<pre><code class="language-javascript">// 함수 선언: 코드 작성
function showLotto(){
  var count = 6, lotto = &#39;&#39;;
  for (var i=0; i&lt;count; i++){
      var rnum = Math.ceil(Math.random() * 44) +1;
      lotto = lotto + rnum + &#39; &#39;;
  }
  console.log(lotto);
}
// 로또 번호 출력: 함수 호출: 코드실행
showLotto();
// javascript 출력
console.log(&#39;javascript&#39;);
// 로또 번호 출력
showLotto();</code></pre>
</li>
</ul>
<h3 id="7-객체">7. 객체</h3>
<ul>
<li>push() 데이터 추가<pre><code class="language-javascript">var data = [1, 2, 3, &#39;A&#39;, &#39;B&#39;];
console.log(typeof data, data);
</code></pre>
</li>
</ul>
<p>data.push(&#39;C&#39;);
console.log(data);
console.log(data[3]);</p>
<p>for(var i=0; i&lt;data.length; i++){
    console.log(i, data[i])
}</p>
<blockquote>
</blockquote>
<p>object [ 1, 2, 3, &#39;A&#39;, &#39;B&#39; ]
[ 1, 2, 3, &#39;A&#39;, &#39;B&#39;, &#39;C&#39; ]
A
0 1
1 2
2 3
3 A
4 B
5 C</p>
<pre><code>- 객체 생성 1
```javascript
var data = { name: &#39;andy&#39;, plus: function(n1, n2){return n1+n2}};
console.log(typeof data, data);
console.log(data.name, datap[&#39;name&#39;]);
&gt;
object { name: &#39;andy&#39;, plus: [Function: plus] }
andy andy</code></pre><ul>
<li>객체 생성 2<pre><code class="language-javascript">function Person(name){
  this.name = name;
}
var person = new Person(&#39;andy&#39;);
console.log(typeof person, person);
&gt;
object Person { name: &#39;andy&#39; }</code></pre>
</li>
<li>변수 추가 삭제<pre><code class="language-javascript">var data = {};
data.name = &#39;alice&#39;;
data[&#39;age&#39;] = 23;
console.log(data);
</code></pre>
</li>
</ul>
<p>delete data.age
console.log(data);</p>
<blockquote>
</blockquote>
<p>{ name: &#39;alice&#39;, age: 23 }
{ name: &#39;alice&#39; }
```</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[12주차 IT 인프라]]></title>
            <link>https://velog.io/@nowij_/12%EC%A3%BC%EC%B0%A8-IT-%EC%9D%B8%ED%94%84%EB%9D%BC</link>
            <guid>https://velog.io/@nowij_/12%EC%A3%BC%EC%B0%A8-IT-%EC%9D%B8%ED%94%84%EB%9D%BC</guid>
            <pubDate>Sun, 12 May 2024 05:05:03 GMT</pubDate>
            <description><![CDATA[<h1 id="it-인프라">IT 인프라</h1>
<h2 id="1-서버와-클라이언트">1. 서버와 클라이언트</h2>
<ul>
<li>서버: 클라이언트에게 네트워크를 통해 정보나 서비스를 제공하는 장치<ul>
<li>서버컴퓨터: 응용프로그램을 가지고 있다가 클라이언트 컴퓨터에서 요청하면 보냄</li>
</ul>
</li>
</ul>
<ul>
<li>클라이언트: 네트워크를 통하여 서버에 접속해 정보를 확인하거나 서비스를 이용하는 장치<ul>
<li>클라이언트 컴퓨터: 서버 컴퓨터에 응용프로그램을 요청한 뒤 서버에서 보내주면 실행</li>
</ul>
</li>
</ul>
<h3 id="서버의-역할-및-종류">서버의 역할 및 종류</h3>
<p><img src="https://velog.velcdn.com/images/nowij_/post/cec5f74c-369b-4d17-ae8a-d844b9088050/image.png" alt=""></p>
<ul>
<li>Client : 서버에 요청하는 주체</li>
<li>Request : 콘텐츠 요청</li>
<li>Server : 웹 서버, 웹 애플리케이션 서버, 캐시 서버, 리버스 프록시 서버, DB 서버에서 찾아서 응답을 함</li>
<li>Response : HTML, Css, JS, 텍스트, 이미지, 동영상 형태로 응답</li>
</ul>
<p><img src="https://velog.velcdn.com/images/nowij_/post/d54b3f03-0018-4216-911f-3d10f1b76ecc/image.png" alt=""></p>
<h4 id="웹-서버정적-콘텐츠-전달-과정">웹 서버(정적 콘텐츠) 전달 과정</h4>
<ol>
<li>클라이언트가 콘텐츠 요청</li>
<li>웹 서버에서 콘텐츠 탐색</li>
<li>HTML, Css, JS, 텍스트, 이미지, 동영상 형태로 전달 및 응답</li>
<li>클라이언트에서 응답 받은 콘텐츠 조회</li>
<li>웹서버에서 요청 내용 및 응답 내용을 기록 (Log)</li>
</ol>
<h4 id="애플리케이션-서버동적-콘텐츠-전달-과정">애플리케이션 서버(동적 콘텐츠) 전달 과정</h4>
<ol>
<li>클라이언트가 동적 콘텐츠 요청</li>
<li>웹 서버에서 콘텐츠 탐색</li>
<li>웹 서버에서 애플리케이션 서버에 콘텐츠 요청</li>
<li>애플리케이션 서버에서 요청내용 확인</li>
<li>애플리케이션 서베에서 웹서버에 콘텐츠 전달</li>
<li>애플리케이션 서버에서 요청 내용, 응답내용 기록 (Log)</li>
<li>애플리케이션 서버에서 전달받은 동적 콘텐츠를 클라이언트에 응답</li>
<li>웹 서버에서 요청 내용, 응답내용 기록 (Log)</li>
</ol>
<p><img src="https://velog.velcdn.com/images/nowij_/post/bf940b13-95a4-48ed-94c5-736dd3647916/image.png" alt=""></p>
<h4 id="데이터베이스-서버-전달-과정">데이터베이스 서버 전달 과정</h4>
<ul>
<li>DB 서버: 애플리에키션의 정보를 저장해서 운영 관리할 수 있는 데이터 베이스를 구동하는 서버</li>
</ul>
<ol>
<li>클라이언트가 웹 서버에 콘텐츠 요청</li>
<li>웹 서버에서 콘텐츠 탐색</li>
<li>웹 서버에서 애플리케이션 서버에 콘텐츠 요청</li>
<li>애플리케이션 서버에서 클라이언트 요청 내용 확인</li>
<li>애플리케이션 서버에서 DB 서버에 데이터 조회 요청</li>
<li>DB 서버에서 애플리케이션 서버에 데이터 조회 결과 전달</li>
<li>애플리케이션 서버에서 웹 서버에 콘텐츠 전달</li>
<li>웹 서버에서 클라이언트로 응답</li>
<li>클라이언트에서 콘텐츠 조회</li>
</ol>
<h4 id="리버스-프록시-서버-전달-과정">리버스 프록시 서버 전달 과정</h4>
<ul>
<li>리버스 프록시 서버: 클라이언트 요청을 처리할 수 있는 애플리케이션 서버 선택 후 전달</li>
<li>뒤에 있는 서버가 클라이언트에게 요청을 할 수 있는 상태인지 확인 후, 요청을 함</li>
</ul>
<ol>
<li>클라이언트에서 리버스 프록시 서버에 요청</li>
<li>리버스 프록시 서버는 웹 서버A를 선택함</li>
<li>웹 서버 A는 애플리케이션 서버C에 요청</li>
<li>애플리케이션 서버C는 DB서버에 요청</li>
<li>DB서버는 애플리케이션 서버C에 응답</li>
<li>애플리케이션 서버C는 웹 서버A에 응답</li>
<li>웹 서버 A는 리버서 프록시 서버에 응답</li>
<li>리버스 프록시 서버는 클라이언트에 응답</li>
<li>클라이언트에서 응답받은 콘텐츠 조회</li>
</ol>
<h4 id="포워드-프록시-서버-캐시서버-전달-과정">포워드 프록시 서버 (캐시서버) 전달 과정</h4>
<p><img src="https://velog.velcdn.com/images/nowij_/post/abf8e95c-16c6-447b-894c-df51bd195b95/image.png" alt=""></p>
<ul>
<li>포워드 프록시 서버: 미리 데이터를 저장해 뒀다가 요청이 오면 데이터 전달</li>
<li>보통 기업에서는 한 서버가 아닌 다양한 서버로 관리하게 된다</li>
<li>역할 별로 서버를 나눠 놓음</li>
</ul>
<ol>
<li>클라이언트에서 리버스 프록시 서버로 요청</li>
<li>리버스 프록시 서버는 웹 서버A를 선택</li>
<li>웹 서버 A는 애플리케이션 서버C에 요청</li>
<li>애플리케이션 서버C는 DB서버에 요청</li>
<li>DB 서버는 애플리케이션 서버C에 응답</li>
<li>애플리케이션 서버C는 캐시 서버에 응답</li>
<li>캐시 서버에서 저장</li>
<li>캐시 서버는 웹 서버 A에 응답</li>
<li>웹 서버A는 리버스 프록시 서버에 응답</li>
<li>리버스 프록시 서버에서 클라이언트로 응답</li>
<li>클라이언트에서 콘텐츠 조회</li>
</ol>
<h2 id="2-서버-하드웨어와-소프트웨어">2. 서버 하드웨어와 소프트웨어</h2>
<ul>
<li>서버 하드웨어: MainFrame, UNIX, x86, </li>
<li>서버 하드웨어 제조사: HPE, Dell Tech, Lenovo</li>
</ul>
<ul>
<li>서버 소프트웨어: (오픈소스, 상용 소프트웨어)<ul>
<li>필요 조건: OS:  UNIX, LINUX, Windows Server</li>
</ul>
</li>
</ul>
<h4 id="서버-하드웨어-폼팩터">서버 하드웨어 폼팩터</h4>
<ul>
<li>랙마운트형 서버 (랙서버)<ul>
<li>1U 서버<ul>
<li>가장 작은 형태의 랙 서버</li>
<li>공간을 효율적으로 활용하고 더 많은 서버를 한 랙에 설치할 수 있음</li>
</ul>
</li>
<li>2U 서버: <ul>
<li>1U에 비해 높이가 두배로 큼</li>
<li>더 많은 하드웨어 구성요소를 수용할 수 있도록 하고 확장성을 제공</li>
</ul>
</li>
<li>4U 서버: <ul>
<li>더 큰 용량과 확장성 제공</li>
<li>더 많은 하드웨어를 수용하고 높은 처리능력과 저장공간을 제공한다.</li>
</ul>
</li>
</ul>
</li>
</ul>
<ul>
<li>블래이드형 서버: 랙마운트형 서버를 더 얇고 케이스가 없는 형태의 서버</li>
<li>타워형 서버: 일반 데스크탑PC와 유사한 형태의 서버로 워크스테이션이라 부름</li>
</ul>
<h2 id="3-네트워크">3. 네트워크</h2>
<h3 id="네트워크-개념">네트워크 개념</h3>
<ul>
<li><p><strong>회선 교환 방식</strong>: 데이터를 교환하기 위해 1:1로 연결된 데이터 통로를 만들고 데이터 교환이 완료될 때까지 회선으 계속 사용하는 방식</p>
</li>
<li><p><strong>패킷 교환 방식</strong>: 데이터를 패킷이라는 작은 단위로 나누고 헤더라는 정보를 붙여서 데이터를 교환하는 방식</p>
</li>
<li><p>패킷은 손상될 경우, 전체가 아닌 손상된 것만 다시 보냄</p>
<ul>
<li>헤더: 송수신 포트번호, 패킷 순서 번호, 데이터 시작 위치, 한번에 전송할 수 있는 데이터 양</li>
<li>패킷: 소포, 택배 물품에 헤더라는 송장을 붙여 보내는 개념</li>
</ul>
</li>
</ul>
<h3 id="네트워크-프로토콜과-계층">네트워크 프로토콜과 계층</h3>
<ul>
<li>프로토콜: 패킷을 전송하기 위한 규칙, 정해진 규칙을 따르기 때문에 통신이 가능해짐</li>
<li>HTTP: 웹서버와 웹브라우저가 패킷을 교환할 때 사용하는 프로토콜
이 외에도 DNS, FTP, SSL/TLS, UDP, SNMP, IEEE, ARP 등 매우 많은 프로토콜 존재</li>
</ul>
<ul>
<li>계층: 송신기기와 수신기기 사이에 주고 받는 데이터는 각 계층 별로 처리됨</li>
<li>계층별로 처리: 한 계층에서 처리가 완료되면 임무를 다음 계층으로 전달</li>
</ul>
<blockquote>
<ul>
<li>대표적인 2가지 계층 (OSI, TCP/IP
<img src="https://velog.velcdn.com/images/nowij_/post/8404b289-8a7e-4527-b796-a212d4ecc3ca/image.png" alt=""></li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>주로 사용하는 계층 5단계
<img src="https://velog.velcdn.com/images/nowij_/post/f144386a-c296-487f-ac19-6f1a740502a3/image.png" alt=""></li>
</ul>
</blockquote>
<h3 id="네트워크-기기-형태">네트워크 기기, 형태</h3>
<h4 id="네트워크-기기-l1">네트워크 기기: L1</h4>
<ul>
<li>NIC: PC나 서버를 네트워크에 연결해주는 하드웨어 (유선 / 무선)
PC나 서버의 슬롯에 장착형, USB 포트형, 메인보드의 슬롯에 장착하거나 온보드로 부착된 형태가 있음</li>
<li>허브: 전달받은 패킷의 복사본을 포트에 연결된 다른 모든 기기로 전송</li>
<li>AP: 패킷을 전파로 바꿔서 송출하느 기기, 무선과 유선 사이의 다리 역할을 수행함</li>
</ul>
<h4 id="네트워크-기기-l2">네트워크 기기: L2</h4>
<ul>
<li><p>MAC adrress: 컴퓨터들이 서로 데이터를 전송하기 위해 사용하는 물리적 주소로 NIC에 내장
기기만의 고유번호, 식별번호 등 기기를 구분하기 위한 주소로 사용됨</p>
</li>
<li><p>이터넷: 네트환경에서 데이터를 주고받기 위한 가장 대표적인 기술 규격
UTP 케이블로 단말기와 네트워크 기기를 연결함 <strong>(랜선)</strong></p>
</li>
<li><p>L2스위치: 단말기가 보낸 패킷의 헤더에 있는 MAC Address를 보고 같은 네트워크의 다른 단말기로 패킷을 전송하고 이더넷 규격을 사용하기에 이더넷 스위치라고도 부름</p>
</li>
</ul>
<h4 id="네트워크-기기-l3">네트워크 기기: L3</h4>
<ul>
<li><p>IP Address</p>
<ul>
<li>서로 다른 네트워크에 연결되어 있는 컴퓨터들이 데이터를전송하기 위해 사용하는 논리적 주소로 OS상에서 설정한 주소</li>
</ul>
</li>
<li><p>Public IP Address</p>
<ul>
<li>공인 IP 주소</li>
<li>네트워크와 외부의 네트워크가 통신하기 위해 사용</li>
</ul>
</li>
<li><p>Private IP Address</p>
<ul>
<li>사설 IP 주소</li>
<li>같은 네트워크 안에서 통신하기 위해 사용</li>
</ul>
</li>
<li><p>라우터: 단말기가 보낸 패킷의 헤더에 있는 IP Address를 보고 다른 네트워크의 다른 단말기로 패킷을 전송 (포트도 적음)</p>
</li>
</ul>
<h4 id="네트워크-기기-l4">네트워크 기기: L4</h4>
<p>L4 스위치: IP 주소와 포트 번호를 참조하여 트래힉을 분산해서 서버에 전송하는 로드 밸런싱 기기</p>
<ul>
<li><p>로드 밸런싱: 들어오는 트래픽을 둘 이상의 서버로 분산해서 전송하여 부하를 분산하는 것</p>
</li>
<li><p>트래픽: 서버와 네트워크 장치에서 인정 시간 내에 흐르는 데이터 양</p>
</li>
<li><p>방화벽: IP주소와 포트번호를 참조하여 통신을 허가하거나 차단하는 기기</p>
</li>
</ul>
<h4 id="네트워크-기기-l7">네트워크 기기: L7</h4>
<ul>
<li><p>L7 스위치: IP 주소와 포트 번호 + 애플리케이션 콘텐츠 정보를 참조해서 로드 밸런싱하는 기기 (URL, 파일명, 콘텐츠 문자열)</p>
</li>
<li><p>웹방화벽: 웹 어플리케이션 서버를 안정하게 보호하는 기기</p>
<ul>
<li>클라이언트와 서버 사이에 교환되는 데이터를 어플리케이션 레벨에서 상세히 검사하고 조치함</li>
<li>블랙리스트, 화이트리스트, 웹 트래픽 분석 등 다양한 보안 기능 제공<ul>
<li>블랙리스트: 리스트에 있는 IP를 제외하고 모두 허용</li>
<li>화이트리스트: 리스트에 있는 IP만 통신 허용</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="네트워크-형태">네트워크 형태</h3>
<h4 id="lan">LAN</h4>
<ul>
<li>근거리 통신망</li>
<li>가정이나 기업 내부 등 한정도니 범위의 네트워크</li>
<li>클라이언트 기기와 L2 스위치로 구성함</li>
</ul>
<h4 id="wan">WAN</h4>
<ul>
<li>원거리 통신망</li>
<li>물리적으로 거리가 매우 떨어진 곳의 네트워크를 연결</li>
<li>LAN 환경에 L3 스위치를 추가해서 구성함<ul>
<li>인터넷, 월드와이드웹(WWW)</li>
</ul>
</li>
</ul>
<h4 id="vpn">VPN</h4>
<ul>
<li>인터넷 상에서 가상의 전용선을 만들어 통신할 수 있게 하는 기술<ul>
<li>한국에서 아르헨티나의 서비스로 접속할 수 있음</li>
<li>집이나 카페에서 기업 내부의 어플리케이션에 접속 가능</li>
</ul>
</li>
</ul>
<h4 id="dmz">DMZ</h4>
<ul>
<li>비무장지대</li>
<li>외부 네트워크와 내부 네트워크의 중간 지점</li>
<li>내부망에는 존재하나 외부망에서 접근할 수 없는 영역으로 외부망에 있는 해커의 공격으로부터 기업의 중요한 서버와 클라이언트를 보호하기 위해 사용</li>
</ul>
<h2 id="4-스토리지">4. 스토리지</h2>
<h3 id="스토리지-개념-및-종류">스토리지 개념 및 종류</h3>
<h4 id="스토리지">스토리지</h4>
<ul>
<li>저장장치를 다수 장착한 대용량 고속 저장 장비</li>
<li>서버 및 클라이언트와 네트워크로 연결해서 사용</li>
<li>데이터 저장 뿐 아니라 데이터 공유 목적으로 사용됨</li>
<li>서버에 장착된 디스크 용량이 부족할 경우, 다수의 사람들과 데이터를 공유할 필요가 있을 경우, 스토리지 활용</li>
<li>데이터 관리 및 보호를 위한 별도의 소프트웨어 탑재</li>
</ul>
<h4 id="스토리지-저장-방식">스토리지 저장 방식</h4>
<ul>
<li>RAID</li>
<li>여러 개의 디스크 중 일부에 데이터를 중복 저장하는 기술<ul>
<li>RAID 0<ul>
<li>데이터를 여러 디스크에 분산 저장</li>
<li>같은 용량의 디스크로 구성</li>
<li>빠른 성능 / 장애시 데이터 모두 손실됨</li>
</ul>
</li>
<li>RAID 1<ul>
<li>데이터를 다른 디스크에 동일하게 중복 저장</li>
<li>최소 2개 디스크 필요, 필요한 용량의 2배 준비</li>
<li>장애 대비에 유리하나 비용이 비쌈</li>
</ul>
</li>
<li>RAID 5<ul>
<li>디스크마다 패러티를 토대로 복구할 수 있음</li>
<li>일정 수준의 성능과 안정성 확보</li>
</ul>
</li>
<li>RAID 6<ul>
<li>RAID 5 방식에 패러티를 하나 더 추가하여 안정성을 더욱 향상시킨 방법</li>
<li>성능은 5보다 조금 떨어짐</li>
<li>디스크 최소 4개 필요</li>
</ul>
</li>
<li>RAID 1+0<ul>
<li>RAID 0의 높은 성능과 RAID 1의 뛰어난 안정성을 합침</li>
<li>최소 4개 디스크 필요</li>
</ul>
</li>
</ul>
</li>
</ul>
<h4 id="스토리지-종류">스토리지 종류</h4>
<ul>
<li><p>DAS: 직접 연결한 스토리지</p>
<ul>
<li>서버와 클라이언트가 전용 케이블로 연결한 스토리지</li>
<li>전송 속도가 빠름</li>
</ul>
</li>
<li><p>NAS</p>
<ul>
<li>데이터 공유를 위한 파일 서버 용도로 주로 사용</li>
<li>독립적 다기능 스토리지</li>
<li>클라이언트가 데이터에 접근하기 위해 네트워크 스위치를 거쳐 NAS에 접근 =&gt; DAS보다 전송 속도가 느림    </li>
</ul>
</li>
<li><p>SAN</p>
<ul>
<li>대용량의 데이터를 네트워크를 통해 빠른 속도로 전송할 수 있는 고성능 스토리지</li>
</ul>
</li>
</ul>
<h4 id="스토리지-유형">스토리지 유형</h4>
<ul>
<li><p>파일 스토리지</p>
<ul>
<li>데이터를 파일과 폴더로 이루어진 계층 구조에 저장</li>
<li>전통적 방식</li>
<li>양이 많을 수록 성능이떨어짐</li>
</ul>
</li>
<li><p>블록 스토리지</p>
<ul>
<li>데이터를 일정한 크기의 블록으로 나눠서 분산 저장</li>
<li>비용이 많이 들고 메타데이터 처리에 한계가 있어 비정형 데이터 처리에 불리함</li>
</ul>
</li>
<li><p>오브젝트 스토리지</p>
<ul>
<li>오브젝트라는 개별 데이터 단위로 분산 저장</li>
<li>오브젝트에 메타데이터가 포함되어 있어 신속한 검색 가능</li>
<li>비정형 데이터 저장에 맞음</li>
<li>오브젝트 수정이 불가능해 정형 데이터는 맞지 않음</li>
</ul>
</li>
</ul>
<h4 id="저장장치">저장장치</h4>
<ul>
<li>컴퓨터의 데이터를 저장하기 위한 비 휘발성 기억장치</li>
<li>Tape, HDD, SDD</li>
</ul>
<h3 id="백업-개념-및-종류">백업 개념 및 종류</h3>
<h4 id="백업">백업</h4>
<ul>
<li>데이터를 임시로 다른 장치에 저장하여 문제가 있을 때 복구할 수 있도록 준비해 두는 것<ul>
<li>Full Backup: 백업 주기 마다 데이터 전체를 백업</li>
<li>Incremental Backup: 첫째 날에 데이터 전체 백업, 그 다음 부터 증가된 데이터만 백업</li>
</ul>
</li>
</ul>
<h4 id="스냅샷">스냅샷</h4>
<ul>
<li>마치 사진 찍듯이 특정 시점에 스토리지의 파일시스템을 포착해 보관하는 기술</li>
<li>copy-on-write 스냅샷: 쓰기 작업 발생시 복제 후 해당 복제본을 새로운 공간에 덮어씀</li>
<li>Redirect-on-write 스냅샷: 쓰기 작업 발생시 새로운 공간으로 쓰기 위치를 재지정</li>
</ul>
<h2 id="5-데이터베이스">5. 데이터베이스</h2>
<h3 id="데이터베이스-개념-및-주요-용어">데이터베이스 개념 및 주요 용어</h3>
<h4 id="개념">개념</h4>
<ul>
<li>데이터베이스<ul>
<li>여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합</li>
<li>응용 시스템의 통합된 정보들을 저장하여 운영할 수 있는 공용데이터들의 묶음</li>
</ul>
</li>
<li>DBMS: 사용자들이 DB안에 있는 데이터를 접근할 수 있도록 해주는 소프트웨어</li>
<li>RDBMS: 테이블이라는 최소 단위로 구성하며 이 테이블은 열과 행으로 이루어짐<ul>
<li>조회하기 위한 용어: SQL (질의 언어)</li>
</ul>
</li>
</ul>
<h3 id="오픈소스-db-vs-상용-db-db-engine-ranking">오픈소스 DB vs 상용 DB, DB Engine Ranking</h3>
<h4 id="데이터베이스-유형">데이터베이스 유형</h4>
<ul>
<li>오픈소스 DB</li>
<li>상용 DB</li>
<li>NoSQL<ul>
<li>대용량 데이터를 분산 처리하기 위한 SQL이 아닌 또 다른 기술을 채택한 오픈소스 데이터베이스</li>
</ul>
</li>
</ul>
<h3 id="db-ide">DB IDE</h3>
<ul>
<li>IDE<ul>
<li>DB엔지니어, DBA, 개발자가 사용하는 DB 개발 도구</li>
</ul>
</li>
<li>상용 IDE<ul>
<li>GUI 지원, 다중 DB 지원, Query 자동완성, 관리자를 위한 기본 모니터링 도구 제공</li>
</ul>
</li>
</ul>
<h2 id="6-온프레미스">6. 온프레미스</h2>
<h3 id="온프레미스-개념과-3tier-아키텍처">온프레미스 개념과 3Tier 아키텍처</h3>
<h4 id="온프레미스">온프레미스</h4>
<ul>
<li>기업이 자체 시설에서 보유하고 직접 유지 관리하는 프라이빗 데이터 센터<h4 id="3-tier-아키텍처">3 Tier 아키텍처</h4>
</li>
<li>애플리케이션 운영 환경이 컴퓨팅, 네트워크, 스토리지로 구성된 아키텍처</li>
</ul>
<h3 id="가상화-기술-서버-데스크탑-네트워크-스토리지">가상화 기술: 서버, 데스크탑, 네트워크, 스토리지</h3>
<h4 id="가상화">가상화</h4>
<ul>
<li>물리적인 하드웨어가 보유한 자원 효율성을 향상시키기 위해 사용하는 기술</li>
<li>(서버 가상화, 데스크탑 가상화, 네트워크 가상화, 스토리지 가상화)<ul>
<li>서버 가상화: 하이퍼바이저를 통해 가상머신을 생성, 여러개의 OS를 운영하는 기술</li>
<li>데스크탑 가상화: 데이터는 서버에 저장하고, 서버에서 클라이언트에 업무 환경만 제공해 주는 기술</li>
<li>네트워크 가상화: 물리적 네트워크를 하나의 가상 네트워크로 구성해 사용하는 기술</li>
<li>스토리지 가상화: 물리 서버의 디스크와 스토리지를 하나의 가상 스토리지 풀로 묶어 사용하는 기술</li>
</ul>
</li>
</ul>
<h3 id="hci-sddc">HCI, SDDC</h3>
<h4 id="hci">HCI</h4>
<ul>
<li>컴퓨팅, 스토리지, 네트워크를 가상화시켜 단일 시스템으로 운영</li>
<li>기존 3-Tier 대비 병목 구간을 제거하여 자원 확장 시 성능이 선형적으로 늘어남</li>
<li>병목현상이 발생하여 =&gt; 2-Tier로 데이터 분산 처리로 병목 구간 제거</li>
</ul>
<h4 id="sddc">SDDC</h4>
<ul>
<li>데이터 센터 구성요소의 모든 것을 소프트웨어로 통합 관리</li>
<li>SCD + SDS + SDN + Management Platform 모두 포함되어야 진정항 SDDC임</li>
</ul>
<h2 id="7-클라우드">7. 클라우드</h2>
<h3 id="클라우드-개념-및-종류">클라우드 개념 및 종류</h3>
<h4 id="클라우드의-개념">클라우드의 개념</h4>
<ul>
<li>IT 인프라 자원을 직접 보유해서 사용하는 것이 아닌, 다른 기업의 IT인프라 자원을 빌려서 쓰는 것</li>
<li>자원을 빌려 쓴 것 만큼 사용료 지불 =&gt; 클라우드 비용</li>
</ul>
<ul>
<li>호스팅<ul>
<li>웹 호스팅<ul>
<li>IDC의 특정 서버 자원을 빌려씀 (남들과 공유)</li>
</ul>
</li>
<li>서버 호스팅<ul>
<li>IDC의 특정 서버 자체를 빌려씀 (나만 쓰는 것, 장기렌트 개념)</li>
</ul>
</li>
</ul>
</li>
</ul>
<ul>
<li>코로케이션<ul>
<li>내가 가진 서버를 IDC의 랙에 설치하고 IDC가 제공하는 네트워크 및 관리 서비스를 받는 것 -&gt; IDC의 공간과 네트워크 자원을 빌리는 개념임</li>
</ul>
</li>
</ul>
<h4 id="클라우드의-종류">클라우드의 종류</h4>
<ul>
<li><strong>IaaS</strong>: IT인프라 자원 전체를 빌려다 씀, OS 및 각종 소프트웨어 설치 필요<ul>
<li>AWS, Azure, GCP, NCP, KT Cloud, NHN Cloud</li>
</ul>
</li>
<li><strong>PaaS</strong>: 이미 설치된 OS(플랫폼)을 빌려다 씀, 어플리케이션 설치 필요<ul>
<li>AWS Elastic Beanstalk, Azure SQL DB, Google BigQuery</li>
</ul>
</li>
<li><strong>SaaS</strong>: 소프트웨어 빌려다 씀<ul>
<li>Microsoft 365, Google Workspace, Adobe CC, Zoom, Groupware</li>
</ul>
</li>
</ul>
<h3 id="클라우드-형태">클라우드 형태</h3>
<ul>
<li>온프레미스: 기업이 직접 IT인프라를 운영</li>
<li>퍼블릭 클라우드: 다른 기업의 IT인프라를 빌려다 씀</li>
<li>프라이빗 클라우드: 기업이 보유한IT 인프라를 클라우드 서비스처럼 기업 내에서만 활용 </li>
<li>하이브리드 클라우드: 프라이빗 + 퍼블릭</li>
<li>멀티 클라우드: 퍼블릭 + 퍼블릭</li>
</ul>
<h3 id="클라우드-기술-및-용어">클라우드 기술 및 용어</h3>
<ul>
<li>컨테이너: 리눅스 기반 애플리케이션 운영을 위한 프로세스 격리 기술</li>
<li>컨테이너 런타임: 컨테이너를 다루는 도구</li>
<li>도커: 컨테이너 기술을 누구나 쉽게 사용할 수 있도록 만든 컨테이너 런타임 중 가장 유명한 오픈소스 프로젝트</li>
<li>쿠버네티스<ul>
<li>다수의 컨테이너를 효율적으로 운영, 관리하기 위한 도구</li>
<li>구글이 오픈소스로 공개</li>
<li>현재 기업 환경에 맞는 유료 쿠버네티스 서비스가 다수 존재</li>
</ul>
</li>
<li>파드: 컨테이너들의 모음</li>
<li>노드: 파드가 운영되는 물리 서버 또는 가상머신, 워커 노드라고 부름</li>
<li>클러스터: 노드의 집합</li>
<li>마스터: 다수의 워커 노드들 및 그 하위의 파드와 컨테이너를 관리하는 노드</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[11주차 6차 미니프로젝트 (2차)]]></title>
            <link>https://velog.io/@nowij_/11%EC%A3%BC%EC%B0%A8-6%EC%B0%A8-%EB%AF%B8%EB%8B%88%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-2%EC%B0%A8</link>
            <guid>https://velog.io/@nowij_/11%EC%A3%BC%EC%B0%A8-6%EC%B0%A8-%EB%AF%B8%EB%8B%88%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-2%EC%B0%A8</guid>
            <pubDate>Wed, 01 May 2024 11:50:50 GMT</pubDate>
            <description><![CDATA[<h1 id="llm">LLM</h1>
<p>LLM 모델 </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[10주차 6차 미니프로젝트 (1차)]]></title>
            <link>https://velog.io/@nowij_/10%EC%A3%BC%EC%B0%A8-6%EC%B0%A8-%EB%AF%B8%EB%8B%88%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-1</link>
            <guid>https://velog.io/@nowij_/10%EC%A3%BC%EC%B0%A8-6%EC%B0%A8-%EB%AF%B8%EB%8B%88%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-1</guid>
            <pubDate>Wed, 01 May 2024 11:48:25 GMT</pubDate>
            <description><![CDATA[<p>주제: &#39;유통 판매량 예측 및 재고 최적화&#39;</p>
<ol>
<li>데이터 탐색 및 가설 도출</li>
<li>데이터 전처리 및 base_line_modeling</li>
</ol>
<p>이 단계를 3일에 걸쳐서 진행합니다.</p>
<p>유통 판매량 예측 및 재고 최적화를수행하는 핵심 대상 상품</p>
<ul>
<li>대상 상품(핵심 상품)</li>
</ul>
<table>
<thead>
<tr>
<th>Product_ID</th>
<th>Product_Code</th>
<th>SubCategory</th>
<th>Category</th>
<th>LeadTime</th>
<th>Price</th>
</tr>
</thead>
<tbody><tr>
<td>3</td>
<td>DB001</td>
<td>Beverage</td>
<td>Drink</td>
<td>2</td>
<td>8</td>
</tr>
<tr>
<td>12</td>
<td>GA001</td>
<td>Milk</td>
<td>Food</td>
<td>3</td>
<td>6</td>
</tr>
<tr>
<td>42</td>
<td>FM001</td>
<td>Agricultural products</td>
<td>Grocery</td>
<td>3</td>
<td>5</td>
</tr>
</tbody></table>
<p>44번 매장의 상품번호 3, 12, 42 세가지 항목을 정하여 진행하였습니다.</p>
<p>변수 소개</p>
<ul>
<li>oil_price 상위 5개 항목</li>
</ul>
<table>
<thead>
<tr>
<th></th>
<th>Date</th>
<th>WTI_Price</th>
</tr>
</thead>
<tbody><tr>
<td>0</td>
<td>2014-01-01</td>
<td>NaN</td>
</tr>
<tr>
<td>1</td>
<td>2014-01-02</td>
<td>95.14</td>
</tr>
<tr>
<td>2</td>
<td>2014-01-03</td>
<td>93.66</td>
</tr>
<tr>
<td>3</td>
<td>2014-01-06</td>
<td>93.12</td>
</tr>
<tr>
<td>4</td>
<td>2014-01-07</td>
<td>93.31</td>
</tr>
</tbody></table>
<ul>
<li>orders 상위 5개 항목</li>
</ul>
<table>
<thead>
<tr>
<th></th>
<th>Date</th>
<th>Store_ID</th>
<th>CustomerCount</th>
</tr>
</thead>
<tbody><tr>
<td>0</td>
<td>2014-01-01</td>
<td>25</td>
<td>840</td>
</tr>
<tr>
<td>1</td>
<td>2014-01-01</td>
<td>36</td>
<td>487</td>
</tr>
<tr>
<td>2</td>
<td>2014-01-02</td>
<td>1</td>
<td>1875</td>
</tr>
<tr>
<td>3</td>
<td>2014-01-02</td>
<td>2</td>
<td>2122</td>
</tr>
<tr>
<td>4</td>
<td>2014-01-02</td>
<td>3</td>
<td>3350</td>
</tr>
</tbody></table>
<ul>
<li>sales 상위 5개 항목</li>
</ul>
<table>
<thead>
<tr>
<th></th>
<th>Date</th>
<th>Store_ID</th>
<th>Qty</th>
<th>Product_ID</th>
</tr>
</thead>
<tbody><tr>
<td>0</td>
<td>2014-01-01</td>
<td>1</td>
<td>0.0</td>
<td>3</td>
</tr>
<tr>
<td>1</td>
<td>2014-01-01</td>
<td>1</td>
<td>0.0</td>
<td>5</td>
</tr>
<tr>
<td>2</td>
<td>2014-01-01</td>
<td>1</td>
<td>0.0</td>
<td>7</td>
</tr>
<tr>
<td>3</td>
<td>2014-01-01</td>
<td>1</td>
<td>0.0</td>
<td>8</td>
</tr>
<tr>
<td>4</td>
<td>2014-01-01</td>
<td>1</td>
<td>0.0</td>
<td>10</td>
</tr>
</tbody></table>
<ul>
<li>products 상위 5개 항목</li>
</ul>
<table>
<thead>
<tr>
<th></th>
<th>Product_ID</th>
<th>Product_Code</th>
<th>SubCategory</th>
<th>Category</th>
<th>LeadTime</th>
<th>Price</th>
</tr>
</thead>
<tbody><tr>
<td>0</td>
<td>20</td>
<td>HG001</td>
<td>Gardening Tools</td>
<td>Household Goods</td>
<td>2</td>
<td>50</td>
</tr>
<tr>
<td>1</td>
<td>27</td>
<td>HH001</td>
<td>Home Appliances</td>
<td>Household Goods</td>
<td>2</td>
<td>150</td>
</tr>
<tr>
<td>2</td>
<td>16</td>
<td>HK001</td>
<td>Kitchen</td>
<td>Household Goods</td>
<td>2</td>
<td>23</td>
</tr>
<tr>
<td>3</td>
<td>15</td>
<td>HK002</td>
<td>Kitchen</td>
<td>Household Goods</td>
<td>2</td>
<td>41</td>
</tr>
<tr>
<td>4</td>
<td>32</td>
<td>GS001</td>
<td>Seafood</td>
<td>Grocery</td>
<td>3</td>
<td>34</td>
</tr>
</tbody></table>
<ul>
<li>stores 상위 5개 항목</li>
</ul>
<table>
<thead>
<tr>
<th></th>
<th>Store_ID</th>
<th>City</th>
<th>State</th>
<th>Store_Type</th>
</tr>
</thead>
<tbody><tr>
<td>0</td>
<td>1</td>
<td>Saint Paul</td>
<td>\tMinnesota</td>
<td>4</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>Saint Paul</td>
<td>\tMinnesota</td>
<td>4</td>
</tr>
<tr>
<td>2</td>
<td>3</td>
<td>Saint Paul</td>
<td>\tMinnesota</td>
<td>4</td>
</tr>
<tr>
<td>3</td>
<td>4</td>
<td>Saint Paul</td>
<td>\tMinnesota</td>
<td>4</td>
</tr>
<tr>
<td>4</td>
<td>5</td>
<td>Oklahoma City</td>
<td>Oklahoma</td>
<td>4</td>
</tr>
</tbody></table>
<h1 id="1-데이터-탐색-및-가설-도출">1. 데이터 탐색 및 가설 도출</h1>
<ul>
<li>매장(44번)의 대상 상품의 판매량 추이
<img src="https://velog.velcdn.com/images/nowij_/post/a57d6e64-df29-4280-baa1-ca6173f69b76/image.png" alt=""></li>
</ul>
<h2 id="product_id---3">PRODUCT_ID - 3</h2>
<h3 id="시계열-패턴-1">시계열 패턴 1</h3>
<ul>
<li><p>3번 상품의 동일 카테고리의 상품별 판매량 추이
<img src="https://velog.velcdn.com/images/nowij_/post/5a2e1e6e-63fe-414c-8226-d04a0b4fdfc3/image.png" alt=""></p>
</li>
<li><p>휘발유 가격과 상품 판매량 추이 비교
<img src="https://velog.velcdn.com/images/nowij_/post/62867a8a-49ee-48cb-ad4b-4765d4df2f67/image.png" alt=""></p>
</li>
</ul>
<h3 id="시계열-패턴-2">시계열 패턴 2</h3>
<ul>
<li><p>시계열 데이터 분해 (30일 주기)
<img src="https://velog.velcdn.com/images/nowij_/post/f6b251a3-0265-4b99-8450-968fc4b9cef3/image.png" alt=""></p>
</li>
<li><p>시계열 데이터 분해 (365일 주기)
<img src="https://velog.velcdn.com/images/nowij_/post/42d33b64-848b-4cde-87d0-4cea877b691c/image.png" alt=""></p>
</li>
</ul>
<h2 id="product_id---12">PRODUCT_ID - 12</h2>
<h3 id="시계열-패턴-1-1">시계열 패턴 1</h3>
<ul>
<li>12번 상품의 동일 카테고리의 상품별 판매량 추이
<img src="https://velog.velcdn.com/images/nowij_/post/adec819b-bc0e-4314-acd4-454c5483ae61/image.png" alt=""></li>
</ul>
<ul>
<li>휘발유 가격과 상품 판매량 추이 비교
<img src="https://velog.velcdn.com/images/nowij_/post/3ebc9608-ce34-4ed3-b965-fdfb4f8a9f94/image.png" alt=""></li>
</ul>
<h3 id="시계열-패턴-2-1">시계열 패턴 2</h3>
<ul>
<li><p>시계열 데이터 분해 (30일 주기)
<img src="https://velog.velcdn.com/images/nowij_/post/293f451d-7df9-4d52-ae84-6fd907deedfb/image.png" alt=""></p>
</li>
<li><p>시계열 데이터 분해 (365일 주기)
<img src="https://velog.velcdn.com/images/nowij_/post/360015d6-9067-47d8-9af1-fa28f67d9af9/image.png" alt=""></p>
</li>
</ul>
<h2 id="product_id---42">PRODUCT_ID - 42</h2>
<h3 id="시계열-패턴-1-2">시계열 패턴 1</h3>
<ul>
<li><p>42번 상품의 상품별 판매량 추이
<img src="https://velog.velcdn.com/images/nowij_/post/a256f85d-5e0d-49fd-9341-724ea9a52d5c/image.png" alt=""></p>
</li>
<li><p>휘발유 가격과 상품 판매량 추이 비교
<img src="https://velog.velcdn.com/images/nowij_/post/df27c8a8-bd75-4557-b36f-1401b32991a5/image.png" alt=""></p>
</li>
</ul>
<h3 id="시계열-패턴-2-2">시계열 패턴 2</h3>
<ul>
<li><p>시계열 데이터 분해 (30일 주기)
<img src="https://velog.velcdn.com/images/nowij_/post/156e2639-07c5-4e33-b7fb-5cd78719b73a/image.png" alt=""></p>
</li>
<li><p>시계열 데이터 분해 (365일 주기)
<img src="https://velog.velcdn.com/images/nowij_/post/fd253ffd-5f56-4de4-bdaf-577d3c368e0b/image.png" alt=""></p>
</li>
</ul>
<h1 id="최종-정리">최종 정리</h1>
<h4 id="1-대상-매장44-대상-상품의-판매량-추이">1) 대상 매장(44), 대상 상품의 판매량 추이</h4>
<ul>
<li>1월에 구매량이 적고, 7월에 구매량이 가장 많음</li>
<li>7월에 구매량이 가장 많은 이유는 5월 ~ 7월에 수확이 이루어지기 때문에 구매가 많을 것으로 예상함</li>
<li>12월에 구매고객수가 제일 많음 =&gt; 크리스마스로 인해 가장 많아진 것으로 예상</li>
<li>년도별로 판매량이 증가함</li>
</ul>
<h4 id="2-대상-상품의-동일-카테고리의-상품별-판매량-추이">2) 대상 상품의 동일 카테고리의 상품별 판매량 추이</h4>
<ul>
<li>카테고리로 봤을 때, grocery 카테고리는 44번 매장이 가장 많이 팔림</li>
<li>서브카테고리로 봤을 때, 농산물을 파는 곳은 44번 매장 밖에 없었음</li>
<li>44번 매장의 구매고객수는 1주일 주기로 많아짐 =&gt; 주로 어떤 것들이 팔리나확인</li>
<li>44번 매장에는 3, 12번 제품이 제일 많이 팔리고, 42번은 그렇게 많이 팔리지 않음</li>
</ul>
<h4 id="3-휘발류-가격과-상품-판매량-추이-비교">3) 휘발류 가격과 상품 판매량 추이 비교</h4>
<ul>
<li>유가가 비쌀수록 판매량도 감소, 구매고객수는 적게 감소하는 모습을 보임 =&gt; 1인당 구매량을 확인해봐야함</li>
<li>판매량 / 구매고객수 = 1인당 구매량을 계산 =&gt; 유가가 비쌀수록 1인당 구매량이 적어지는 모습이 보임</li>
</ul>
<h4 id="4-입고-시간과-위치-판매량-추이-비교">4) 입고 시간과 위치, 판매량 추이 비교</h4>
<ul>
<li>입고시간이 길어지면 판매량이 줄 것이다 =&gt; 관계는 없었음</li>
<li>입고시간, 도시나 주의 위치와의 관계가 있을까? =&gt; 관계 없었음</li>
<li>44번 스토어의 입고 시간이 다른 매장보다 더 길다 =&gt; 왜 그렇지??</li>
</ul>
<h4 id="product_id-12">Product_ID (12)</h4>
<ul>
<li>12번 항목과 휘발류 가격에는 연관성이 없다.</li>
<li>12번 항목의 판매량과 방문 고객 수는 비례한다.</li>
<li>12번 항목은 판매 변화량이 균일하게 유지된다.</li>
<li>수요일, 금요일, 토요일에 판매량이 증가하는 경향이 있고, 화요일, 목요일, 일요일에는 판매량이 감소하는 경향이 있다.</li>
<li>365일 기준으로 봤을때 연도가 지날수록 판매량이 증가하는 추세를 보인다.</li>
<li>미국은 12월 기준으로 유제품 판매량이 급증한다. =&gt; 에그노그를 먹는 풍습이 있음</li>
<li>미국의 2014년 01월 ~ 2017년 02월 까지 스타벅스의 주가상승이 있었음 =&gt; 그 만큼 유통업체의 판매량이 증가했음 그 이유는 스타벅스에서 판매하는 메뉴는 유제품 사용이 많기 때문이다.</li>
</ul>
<h1 id="2-데이터-전처리-및-base_line_modeling">2. 데이터 전처리 및 base_line_modeling</h1>
<p>3번의 모델링 및 비즈니스 평가를 위해 기본 레이어층만 쌓아서 수행할 모델을 생성</p>
<h2 id="product_id---3-1">PRODUCT_ID - 3</h2>
<h3 id="decisiontreeregressor">DecisionTreeRegressor</h3>
<blockquote>
<p><img src="https://velog.velcdn.com/images/nowij_/post/3e605871-72a8-47e6-be0c-5a856450437e/image.png" alt=""></p>
</blockquote>
<p>MSE :  3549.151657936104
MAE :  2528.9166666666665
MAPE :  0.221088798045424
R2 Score :  0.09131166924273626</p>
<h3 id="딥러닝">딥러닝</h3>
<blockquote>
<p><img src="https://velog.velcdn.com/images/nowij_/post/92bdc4ed-63ab-4d6d-b56b-bf62c128112b/image.png" alt=""></p>
<p>MSE :  3549.151657936104
MAE :  2528.9166666666665
MAPE :  0.221088798045424
R2 Score :  0.09131166924273626</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/nowij_/post/170fa936-23a6-4a7d-a71d-cb38f9cb4be7/image.png" alt=""></p>
<h3 id="lstm">LSTM</h3>
<ul>
<li>LSTM 모델은 return_sequence=True 을 사용 =&gt; 시계열 모델에서 양방향으로 확인을 하는 것임</li>
</ul>
<pre><code class="language-python">clear_session()

model_LSTM = Sequential()

model_LSTM.add(LSTM(128, input_shape = (timesteps, n_features),
                    return_sequences = True))
model_LSTM.add(LSTM(64, return_sequences = True))
model_LSTM.add(LSTM(32, return_sequences = True))
model_LSTM.add(LSTM(16))

model_LSTM.add(Dense(8, activation = &#39;selu&#39;))
model_LSTM.add(Dense(4, activation = &#39;selu&#39;))
model_LSTM.add(Dense(1))

model_LSTM.compile(optimizer = Adam(learning_rate = 0.001), loss=&#39;mse&#39;)
model_LSTM.summary()</code></pre>
<h2 id="product_id---12-1">PRODUCT_ID - 12</h2>
<h3 id="딥러닝-1">딥러닝</h3>
<blockquote>
</blockquote>
<p><img src="https://velog.velcdn.com/images/nowij_/post/719ab11c-a232-4f40-a867-2889b0b0f461/image.png" alt=""></p>
<blockquote>
</blockquote>
<p>학습 RMSE: 0.06607926449502957
검증 RMSE: 0.05921918568987373
학습 MAE: 0.03685247268320722
검증 MAE: 0.04013581683132576
학습 MAPE: inf
검증 MAPE: inf
학습 R2 점수: 0.5092537047409504
검증 R2 점수: 0.6654690033907339</p>
<blockquote>
<p><img src="https://velog.velcdn.com/images/nowij_/post/f5912871-5199-4f05-931e-fdda6b83bbda/image.png" alt=""></p>
</blockquote>
<h3 id="lstm-1">LSTM</h3>
<ul>
<li>x, y를 분할<pre><code class="language-python">x = df_product12_final.drop(&#39;target&#39;, axis=1)
y = df_product12_final.loc[:, &#39;target&#39;]</code></pre>
</li>
<li>2차원에서 3차원으로 변환함<pre><code class="language-python"># 하루를 한 단위로 묶겠다
timesteps = 24
x2, y2 = temporalize(x, y, timesteps)</code></pre>
</li>
<li>3차원 스케일링<pre><code class="language-python">def scale(X, scaler):
  for i in range(X.shape[0]):
      X[i, :, :] = scaler.fit_transform(X[i, :, :])
  return X
</code></pre>
</li>
</ul>
<h1 id="3차원-스케일링">3차원 스케일링</h1>
<p>from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()</p>
<h1 id="x_train">X_train</h1>
<p>X_train_s = scale(X_train, scaler)</p>
<h1 id="x_val">X_val</h1>
<p>X_val_s = scale(X_val, scaler)</p>
<pre><code>- y 스케일링
```python
# y 스케일링
scaler = MinMaxScaler()

y_train_s = scaler.fit_transform(y_train.reshape(-1,1))
y_val_s = scaler.transform(y_val.reshape(-1,1))</code></pre><ul>
<li>LSTM 적용<pre><code class="language-python">from keras.models import Sequential
from keras.layers import LSTM, Dense
</code></pre>
</li>
</ul>
<p>model_lstm = Sequential()
model_lstm.add(LSTM(50, input_shape=(X_train_s.shape[1], X_train_s.shape[2])))
model_lstm.add(Dense(1))
model_lstm.compile(optimizer=&#39;adam&#39;, loss=&#39;mse&#39;)</p>
<p>print(&quot;LSTM 모델 구조&quot;)
print(model_lstm.summary())</p>
<p>history = model_lstm.fit(X_train_s, y_train_s, epochs=50, validation_split=.2).history</p>
<pre><code>
- LSTM 시각화
```python
plt.plot(history[&#39;loss&#39;], label = &#39;train_err&#39;, marker = &#39;.&#39;)
plt.plot(history[&#39;val_loss&#39;], label = &#39;val_err&#39;, marker = &#39;.&#39;)
plt.grid()
plt.legend()
plt.show()</code></pre><p><img src="https://velog.velcdn.com/images/nowij_/post/a7e83e97-fcd9-449a-85dc-87ed14f9e12e/image.png" alt=""></p>
<h3 id="cnn">CNN</h3>
<pre><code class="language-python">from keras.models import Sequential
from keras.layers import Conv1D, MaxPooling1D, Flatten, Dense

model_cnn = Sequential()
model_cnn.add(Conv1D(filters=64, kernel_size=3, activation=&#39;relu&#39;, input_shape=(X_train_s.shape[1], X_train_s.shape[2]), padding = &#39;same&#39;))
model_cnn.add(MaxPooling1D(pool_size=2))
model_cnn.add(Flatten())
model_cnn.add(Dense(50, activation=&#39;relu&#39;))
model_cnn.add(Dense(1))
model_cnn.compile(optimizer=&#39;adam&#39;, loss=&#39;mse&#39;)

print(&quot;CNN 모델 구조&quot;)
print(model_cnn.summary())

history = model_cnn.fit(X_train_s, y_train_s, epochs=50, validation_split=.2).history</code></pre>
<ul>
<li>시각화<pre><code class="language-python">plt.plot(history[&#39;loss&#39;], label = &#39;train_err&#39;, marker = &#39;.&#39;)
plt.plot(history[&#39;val_loss&#39;], label = &#39;val_err&#39;, marker = &#39;.&#39;)
plt.grid()
plt.legend()
plt.show()</code></pre>
<img src="https://velog.velcdn.com/images/nowij_/post/693038e6-f747-4091-8139-9cfdc8d92343/image.png" alt=""></li>
</ul>
<h2 id="product_id---42-1">PRODUCT_ID - 42</h2>
<h3 id="머신러닝">머신러닝</h3>
<blockquote>
</blockquote>
<ul>
<li>DecisionTreeRegressor<ul>
<li>RMSE 24.635519509689512</li>
<li>MAE 19.186147186147185<blockquote>
</blockquote>
</li>
</ul>
</li>
<li>RandomForestRegressor<ul>
<li>RMSE 18.32681937726738</li>
<li>MAE 14.461006258846675<blockquote>
</blockquote>
</li>
</ul>
</li>
<li>XGBRegressor<ul>
<li>RMSE 19.054946252551975</li>
<li>MAE 14.925340971019674<blockquote>
</blockquote>
</li>
</ul>
</li>
<li>LGBMRegressor<ul>
<li>RMSE 18.8105078934692</li>
<li>MAE 14.729264357818643<blockquote>
</blockquote>
</li>
</ul>
</li>
<li>LinearRegression<ul>
<li>RMSE 35.299717336187015</li>
<li>MAE 29.73039955720623</li>
</ul>
</li>
</ul>
<h3 id="lstm-2">LSTM</h3>
<ul>
<li>전처리<pre><code class="language-python">def flatten(X):
  flattened_X = np.empty((X.shape[0], X.shape[2]))
  for i in range(X.shape[0]):
      flattened_X[i] = X[i, (X.shape[1]-1), :]
  return flattened_X
</code></pre>
</li>
</ul>
<p>def scale(X, scaler):
    for i in range(X.shape[0]):
        X[i, :, :] = scaler.transform(X[i, :, :])
    return X</p>
<pre><code>
- 2차원 -&gt; 3차원
```python
# 2차원으로 변환하여 스케일러 생성
scaler = MinMaxScaler().fit(flatten(x_train))</code></pre><ul>
<li><p>스케일링</p>
<pre><code class="language-python"># y에 대한 스케일링(최적화를 위해)
scaler_y = MinMaxScaler()
y_train_s3 = scaler_y.fit_transform(y_train.reshape(-1,1))
y_val_s3 = scaler_y.transform(y_val.reshape(-1,1))</code></pre>
</li>
<li><p>LSTM</p>
<pre><code class="language-python">clear_session()
</code></pre>
</li>
</ul>
<p>model = Sequential([LSTM(32, input_shape=(timesteps, n_features), return_sequences=True),
                    LSTM(16,return_sequences=False),
                    Dense(1)])
model.summary()</p>
<pre><code>- 시각화
```python
plt.plot(hist[&#39;loss&#39;], label = &#39;train_err&#39;, marker = &#39;.&#39;)
plt.plot(hist[&#39;val_loss&#39;], label = &#39;val_err&#39;, marker = &#39;.&#39;)
plt.grid()
plt.legend()
plt.show()</code></pre><p><img src="https://velog.velcdn.com/images/nowij_/post/7c81142a-3609-4db5-84ef-5cab43c34983/image.png" alt=""></p>
<h3 id="cnn-1">CNN</h3>
<pre><code class="language-python">n_features = x_train.shape[2]

clear_session()

model3 = Sequential([Conv1D(32, 5, input_shape = (timesteps, n_features), activation=&#39;relu&#39;, padding = &#39;same&#39;),
                    Flatten(),
                    Dense(1)])

model3.compile(optimizer= Adam(learning_rate = 0.01) ,loss=&#39;mse&#39;)</code></pre>
<ul>
<li>시각화<pre><code class="language-python">plt.plot(hist[&#39;loss&#39;], label = &#39;train_err&#39;, marker = &#39;.&#39;)
plt.plot(hist[&#39;val_loss&#39;], label = &#39;val_err&#39;, marker = &#39;.&#39;)
plt.grid()
plt.legend()
plt.show()</code></pre>
<img src="https://velog.velcdn.com/images/nowij_/post/59c3cf7e-9c07-4386-b47f-1aa0e2098fd1/image.png" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[10주차 5차 미니프로젝트]]></title>
            <link>https://velog.io/@nowij_/10%EC%A3%BC%EC%B0%A8-5%EC%B0%A8-%EB%AF%B8%EB%8B%88%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8</link>
            <guid>https://velog.io/@nowij_/10%EC%A3%BC%EC%B0%A8-5%EC%B0%A8-%EB%AF%B8%EB%8B%88%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8</guid>
            <pubDate>Wed, 01 May 2024 09:45:18 GMT</pubDate>
            <description><![CDATA[<h1 id="aice-asociate">AICE ASOCIATE</h1>
<h2 id="소개">소개</h2>
<blockquote>
<ul>
<li>AICE는 인공지능 능력시험입니다. (AI 자격증)
영어 능력을 평가하는 토익처럼, AICE는 인공지능 활용능력을 평가합니다.
KT가 개발했고, 한국경제와 함께 주관합니다.</li>
</ul>
</blockquote>
<ul>
<li>실무에서 가장 많이 쓰는 Tabular 데이터에 대해
파이썬 기반으로 데이터 분석 / 처리 / 모델링을 수행합니다.<blockquote>
</blockquote>
</li>
<li>AICE 출제범위<ul>
<li>탐색적 데이터 분석
필요한 라이브러리 설치 / Tabular 데이터 로딩 / 데이터의 구성 확인, 상관분석 / 데이터 시각화</li>
<li>데이터 전처리
데이터 결측치 처리 / 라벨 인코딩, 원핫 인코딩 / x,y 데이터 분리 / 데이터 정규분포화, 표준화</li>
<li>머신러닝 / 딥러닝 모델링
scikit-learn, TensorFlow 등을 활용하여 문제에 제시된 예측, 분류를 위해 머신러닝, 딥러닝 모델링</li>
<li>모델 성능평가
모델 성능평가 및 그래프 출력</li>
</ul>
</li>
</ul>
<h2 id="진행-과정">진행 과정</h2>
<p>AICE ASSOCIATE 시험 대비하여 5차 미니 프로젝트를 2일동안 진행했습니다.</p>
<p>총 3개의 데이터를 개별적으로 과제를 수행한 후, 조별로 토론을 해보는 시간을 가졌습니다.</p>
<p>주제는 </p>
<ol>
<li>VOC를 제기한 고객의 해지 여부 예측 문제</li>
<li>통신 서비스 이용 고객의 이탈여부 예측 문제 </li>
<li>네비게이션 주행데이터를 이용한 도착시각 예측 문제
(추가 자료)</li>
<li>악성사이트 탐지 머신러닝 모델 개발</li>
</ol>
<p>이 주제로 각각 데이터 전처리 부터 머신러닝, 딥러닝, 모델 성능평가를 진행했습니다.</p>
<p>이때까지 배운 내용을 수행하면서 나의 실력을 측정해볼 수 있는 좋은 기회라 생각했습니다.</p>
<p>5차 미니프로젝트 덕분에 부족한 점을 찾아서 AICE 자격증 시험을 합격하도록 하겠습니다.</p>
<h2 id="헷갈린-코드">헷갈린 코드</h2>
<pre><code class="language-python"># df1의 데이터프레임에 &#39;변수1&#39;에 &#39;_&#39; 값이 몇 개가 있는지 확인
(df1[&#39;변수1&#39;] == &#39;_&#39;).count()

# 강사 코드
count = (df1[&#39;변수1&#39;] == &#39;_&#39;).sum()
print(count)</code></pre>
<pre><code class="language-python"># df1의 &#39;_&#39;의 값을 null 값으로 변경하고 df2에 저장
df2 = df1.replace(&#39;_&#39;, None)

# 강사 코드
df2 = df1.replace(&#39;_&#39;, np.nan)</code></pre>
<pre><code class="language-python"># 1. df2에 &#39;변수2&#39; 컬럼의 최빈값을 확인하는 코드로 확인
# 2. &#39;변수2&#39; null 값을 최빈값으로 변경하고 df3에 저장
df3 = df2.copy()
df3[&#39;변수2&#39;] = df3[&#39;변수2&#39;].fillna(df3[&#39;변수2&#39;].mode()[0])


## 강사코드
# 1. df2에 &#39;변수2&#39; 컬럼의 최빈값을 확인하는 코드로 확인
df2[&#39;변수2&#39;].mode()

# 2. &#39;변수2&#39; null 값을 최빈값으로 변경하고 df3에 저장
df2[&#39;변수2&#39;].fillna(&#39;L&#39;, inplace = True)

# 3. df3에 저장
df3 = df2</code></pre>
<pre><code class="language-python"># df3에 대해 &#39;변수3&#39;의 null 값을 중앙값으로 변경
# 데이터 타입을 정수로 변경 후 df4에 저장
df4 = df3.copy()
df4[&#39;변수3&#39;] = df4[&#39;변수3&#39;].fillna(df4[&#39;변수3&#39;].median().astype(int))
df4[&#39;변수3&#39;].median()

# 강사 코드
df3[&#39;변수3&#39;].fillna(df3[&#39;변수3&#39;].median(), inplace = True)
df4 = df3.astype({&#39;변수3&#39;: &#39;int&#39;})

```python
# 모델의 성능 평가
from sklearn.metrics import confusion_matrix
from sklearn.metrics import classification_report

# y값을 예측하고
y_pred = LR.predict(X_test)

# confusion matrix구하고 heatmap 그래프로 시각화
cm = confusion_matrix(y_test, y_pred)
sns.heatmap(cm, annot = True)

# classification_report 활용
print(classification_report(y_test, y_pred))</code></pre>
<pre><code class="language-python"># 모델 성능을 평가해서 그래프로 표현
plt.figure(figsize=(10,5))

# 학습 정확도와 검증정확도를 그래프로 표시
plt.plot(history.history[&#39;acc&#39;])
plt.plot(history.history[&#39;val_acc&#39;])
plt.title(&#39;Model Accuracy&#39;)

# xlabel에는 epochs, ylabel에는 accuracy
plt.xlabel(&#39;Epochs&#39;)
plt.ylabel(&#39;Accuracy&#39;)

# 범례에는 train, validation으로 표시
plt.legend([&#39;Train&#39;,&#39;Validation&#39;], loc=&#39;lower right&#39;)</code></pre>
<pre><code class="language-python"># 학습 손실과 검증 손실을 그래프로 표시
# xlabel에는 Epochs, ylabel에는 Loss 
plt.figure(figsize=(10,5))
plt.plot(history.history[&#39;loss&#39;], &#39;b&#39;, label=&#39;Train Loss&#39;)
plt.plot(history.history[&#39;val_loss&#39;], &#39;y&#39;, label=&#39;validaton Loss&#39;)

# 범례에는 Train Loss와 Validation Loss로 표시
plt.xlabel(&#39;Epochs&#39;)
plt.ylabel(&#39;Loss&#39;)
plt.legend()</code></pre>
<pre><code class="language-python"># y값을 예측하여 y_test_pred에 저장하고 정확도를 출력
y_test_pred = model.predict(X_test, batch_size=10, verbose=1)

y_test = np.argmax(y_test_ohe, axis=1)
y_test_pred = np.argmax(y_test_pred, axis=1)

from sklearn.metrics import accuracy_score
accuracy_score(y_test, y_test_pred)</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[4차 미니프로젝트]]></title>
            <link>https://velog.io/@nowij_/4%EC%B0%A8-%EB%AF%B8%EB%8B%88%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-jxbne8j2</link>
            <guid>https://velog.io/@nowij_/4%EC%B0%A8-%EB%AF%B8%EB%8B%88%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-jxbne8j2</guid>
            <pubDate>Mon, 29 Apr 2024 02:27:22 GMT</pubDate>
            <description><![CDATA[<h1 id="미니프로젝트-1-2일차">미니프로젝트 1, 2일차</h1>
<p>차량 공유 업체의 차량 사용 전 후에 촬영하는 차량의 정상/ 파손 이미지 무작위 수집을하여 분류하는 모델을 만들었다.</p>
<ol>
<li>데이터 전처리</li>
<li>CNN 모델링</li>
<li>Transfer learning<ul>
<li>Inception V3</li>
</ul>
</li>
</ol>
<p>세가지 과제를 중점으로 수행하였다.</p>
<h1 id="미니프로젝트-3일차">미니프로젝트 3일차</h1>
<p>두번째 주제는 &#39;쿨루프 시공 여부 분류&#39;로 roboflow를 사용하여 YOLOv8을 사용하여 이미지를 분류하는 모델을 생성하였습니다.</p>
<p>강사님들이 제공하는 사진을 사용하여 쿨루프 시공 여부를 분류하는 모델을 생성하였습니다.</p>
<blockquote>
</blockquote>
<ul>
<li><img src="https://velog.velcdn.com/images/nowij_/post/39a57ae3-2b79-41ff-b7d6-014f9a402125/image.png" alt=""><blockquote>
</blockquote>
</li>
<li><img src="https://velog.velcdn.com/images/nowij_/post/cc6b204e-810f-4f11-8360-879cdf92e380/image.png" alt=""></li>
</ul>
<h1 id="미니프로젝트-4일차">미니프로젝트 4일차</h1>
<p>4일차에는 3일차와 유사한 방법으로 진행했지만, 인공위성사진을 직접 수집하여 모든 사진에 bounding box를 그려 결과를 도출하는 시간을 가졌습니다.</p>
<h2 id="roboflow-사용">roboflow 사용</h2>
<blockquote>
<ul>
<li>바운딩 박스 생성
<img src="https://velog.velcdn.com/images/nowij_/post/b2b7ce49-bbda-43db-a2de-966187d9d1e5/image.png" alt=""></li>
</ul>
</blockquote>
<ul>
<li><p>전처리 설정 및 Augmentation 설정
<img src="https://velog.velcdn.com/images/nowij_/post/93975b80-f966-4af4-b789-826be013a282/image.png" alt=""></p>
</li>
<li><p>생성한 train, valid 데이터를 YOLOv8모델로 가져옴
<img src="https://velog.velcdn.com/images/nowij_/post/b580d67e-b950-4a1b-94cf-5d8d527e9770/image.png" alt=""></p>
</li>
</ul>
<p>YOLO 모델을 사용하기 위해서는 yaml 파일을 생성하여야 하는데, 처음에 파일 형식을 좀 어려워서 헷갈리는 부분도 있었습니다.</p>
<p>그리고 특히 경로 설정하는 부분에서 에러가 발생하여 시간을 많이 사용했어서 힘들었어요..ㅠ</p>
<p>약 30장 정도 모아서 YOLO v8 모델에 적용했지만, 더 많은 데이터로 학습시켜 이미지를 분류하는 시간을 가졌으면 좋았겠다는 생각을 했습니다.</p>
<h1 id="미프-맛집">미프 맛집</h1>
<h2 id="1-이재모피자">1. 이재모피자</h2>
<p><img src="https://velog.velcdn.com/images/nowij_/post/ec605f6f-ed97-4843-bc53-0fcc5dde9355/image.jpg" alt=""></p>
<p>이재모피자는 누구나 아는 그 맛집이죠?</p>
<p>전 여기 한번도 안가봐서 너무너무 가고싶었다고 말했는데, 1차때 조원들이 잊지않고 같이 가줬네요 ㅎㅎ</p>
<p>정말 맛있었습니다~ 이재모피자 강추!</p>
<p>대신 웨이팅있으니 참고하세용</p>
<p><img src="https://velog.velcdn.com/images/nowij_/post/78fdd8b1-6dd5-4ae9-bece-eee5d90bddb6/image.jpg" alt=""></p>
<p>피자 먹고 거울샷 맛집이라 한컷 했어요
어때요? 사이 좋아보이나요? ㅎㅎ</p>
<h2 id="2-시먼띵">2. 시먼띵</h2>
<p><img src="https://velog.velcdn.com/images/nowij_/post/1c8234aa-6168-4876-bb50-1883f68fd6a3/image.jpg" alt=""></p>
<p>여긴 우육탕면, 탄탄면 파는 시먼띵!
개인적으로 면이 납작해서 먹는 맛이 있었어요~</p>
<p>만두는 다같이 갔을때 꼭 시켜야하죠? 다 맛있고 좋았습니다!</p>
<h2 id="3-코카모메">3. 코카모메</h2>
<p><img src="https://velog.velcdn.com/images/nowij_/post/3a61ef19-f486-4565-b518-b8103ffb3964/image.jpg" alt="">
코카모메는 전에도 소개 드렸는데요~!</p>
<p>이번엔 기본 메뉴 말고 스페셜텐동을 주문했는데 저기 보이는 꼬리긴 붕장어 보이나요?  😋</p>
<p>느끼한 음식이라 보리차같은 맥주랑 한입 ㅎ</p>
<p>그리고 가게가 맛집으로 유명한 이유가 있더라구요
진짜 사장님이 맛있고 음식이 친절해요!</p>
]]></description>
        </item>
    </channel>
</rss>