<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>moo_min.log</title>
        <link>https://velog.io/</link>
        <description>코딩하는 무민</description>
        <lastBuildDate>Tue, 28 Mar 2023 09:30:57 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>moo_min.log</title>
            <url>https://velog.velcdn.com/images/moo_min/profile/fa2c4fe7-7f03-4ca9-a3b4-fd45879cfcf9/social_profile.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. moo_min.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/moo_min" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[CS] 2장 네트워크 - IP주소 ]]></title>
            <link>https://velog.io/@moo_min/CS-2%EC%9E%A5-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-IP%EC%A3%BC%EC%86%8C</link>
            <guid>https://velog.io/@moo_min/CS-2%EC%9E%A5-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-IP%EC%A3%BC%EC%86%8C</guid>
            <pubDate>Tue, 28 Mar 2023 09:30:57 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>앞에서 배웠던 인터넷 계층에서 사용하는 IP주소를 알아보자!</p>
</blockquote>
<p><strong># ARP(Address Resolution Protocol)</strong>
- 흔히 IP주소를 통해서 통신을 한다는 것은 사실, IP주소에서 ARP를 통해 MAC 주소를 찾아서 MAC 주소를 기반으로 통신을 하는 것!
(IP는 별명 MAC은 진짜 내이름 같은 느낌?)
- IP 주소로부터 MAC주소를 구하고 MAC주소와의 다리 역할을 하는 프로토콜</p>
<blockquote>
<p><em><em>과정:  A장치가 ARP 요청 브로드캐스트 -&gt; IP 주소에 해당하는 MAC 주소 찾기 -&gt; 해당 주소의 B장치가 A장치로 ARP 응답 유니캐스트 -&gt; MAC 주소 반환 *</em>
\</em> 브로드캐스트 : 송신 호스트가 전송한 데이터가 네트워크에 연결된 모든 호스트에 전송되는 방식
* 유니캐스트 : 고유 주소로 연결된 하나의 네트워크 목적지에 1:1로 데이터를 전송하는 방식</p>
</blockquote>
<hr>
<p><strong># 홉바이홉 통신</strong>
- 위와 같이 IP주소를 통해 통신하는 과정
- hop은 영어 단어의 뜻처럼 통신망에서 패킷이 여러 개의 라우터를 건너가는 모습을 비유적으로 표현한 것!</p>
<blockquote>
<p>라우터 안에는 송신지에서 수신지까지 도달하기 위한 경로 리스트인 <code>라우팅 테이블</code>이 존재하며 이 안에는 서로 다른 네트워크 간의 통신을 가능하게 하는 <code>게이트웨이</code> 정보도 있다!
그래서** 라우팅 테이블의 IP정보를 가지고 시작 주소부터 다음 IP로 계속해서 이동하는(건너가는) 라우팅 과정을 거쳐 패킷이 최종 목적지까지 도달하게 되는 것!**
통신이란게..두 장치만 있다고 딱 되는게 아니네..
사용자는 인터넷에 접속하기 위해 수많은 게이트웨이를 거친다!</p>
</blockquote>
<hr>
<p><strong># IP 주소 체계</strong>
- IP 주소는 IPv4와 IPv6으로 나눠짐
- IPv4 : 32bit를 8bit단위로 점을 찍어 표기 (예) 123. 45. 67. 89
- IPv6 : 64bit를 16bit 단위로 점을 찎어 표기 (예) 2022:db8::ff00:42:1234</p>
<blockquote>
<p>현재 가장 많이 쓰이는 주소 체계는 IPv4이다</p>
</blockquote>
<p><strong># 과거에는...클래스기반 할당방식</strong>
- A, B, C, D, E 5개의 클래스로 구분하는 방식
A~C: 일대일통신 / D: 멀티캐스트 통신 / E: 예비용
더하여 네트워크의 첫 번째 주소는 네트워크 주소로 사용 + 가장 마지막 주소는 브로드캐스트용 주소</p>
<blockquote>
<p>여튼 이 방법을 사용하다보니 주소가 자꾸 고갈되는 문제점이 발생
그래서 등장했다! → <strong>DHCP &amp; NAT</strong> </p>
</blockquote>
<p><strong># DHCP</strong>
- IP 주소 및 기타 통신 매개변수를 자동으로 할당하기 위한 네트워크 관리 프로그램
- DHCP는 네트워크 관리자가 해야 할 작업을 간소화한다! 수동으로 IP주소를 할당하게 되면 시간도 오래걸리고 비효율적임
- 주로 가정용 네트워크에서 IP주소를 할당함</p>
<blockquote>
<p>서버는 주소를 할당하고 장치의 연결이 해제되면 주소를 다시 가져온다 해당 IP 주소는 다른 장치에 재할당할 수 있기 때문에 효율적 !</p>
</blockquote>
<p><strong># NAT(네트워크 주소 변환)</strong>
- 라우팅 장치를 통해 전송되는 동안 패킷의 IP 주소 정보를 수정하여 IP 주소를 다른 주소로 매핑하는 방법
- 외부 네트워크로 전송할때 사설IP를 하나의 공인IP 변환
- 내부 네트워크에서 사용하는 IP 주소와 외부에 드러나는 IP주소를 다르게 유지할 수 있음!</p>
<blockquote>
<p>주소 절약과 IP보안
단점은..접속 숫자에 따라 속도가 느려질 수 있다는 점!</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[CS] 2장 네트워크 - 네트워크 기기]]></title>
            <link>https://velog.io/@moo_min/CS-2%EC%9E%A5-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B8%B0%EA%B8%B0</link>
            <guid>https://velog.io/@moo_min/CS-2%EC%9E%A5-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B8%B0%EA%B8%B0</guid>
            <pubDate>Tue, 28 Mar 2023 07:46:21 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><strong>네트워크는 여러 개의 네트워크 기기를 기반으로 구축된다</strong></p>
</blockquote>
<p>지금부터는 각 계층마다 네트워크를 처리하는 기기를 알아보도록 하자~!</p>
<p><strong># 네트워크 기기의 처리 범위</strong>
- 네트워크 기기는 계층별로 처리 범위를 나눌 수 있음
- 상위 계층의 기기는 하위 계층을 처리할 수 있지만 그 반대는 불가</p>
<hr>
<p><strong># 애플리케이션 계층을 처리하는 기기</strong>
- 스위치는 여러장비를 연결하고 데이터 통신을 중재하며 목적지가 연결된 포트로만 전기 신호를 보내 데이터를 전송하는 통신 네트워크 장비
포털에 검색하면 최단 경로를 지정해 데이터를 전송하는 통신네트워크 장비라는 설명이 나와있따</p>
<p>- <code>L7 스위치</code> : L7스위치는 OSI 7계층에서 7번째 해당하는 즉, 애플리케이션 계층에서 사용하는 스위치이며, 서버의 부하(로드)를 분산시키는 기기
- 요청을 여러 서버로 나누어 시스템이 처리할 수 있는 트래픽(흐르는 데이터의 양)의 증가를 목표로 함
- URL, HTTP헤더, 쿠키 등을 기반으로 트래픽을 분산하며 이로 인해 정교한 로드밸런싱이 가능함(다른 계층의 스위치보다)
- 대표적인 로드밸런싱 기능은 2대 이상의 서버를 기반으로 가상IP를 제공하는 서버이중화
- 여러 대의 서버를 운영하기 때문에 주기적인 서버 상태 점검은 필수! -&gt; 헬스 체크(health check)를 통해서 서버의 상태가 통신이 불가능할 경우 서버를 서비스에서 제외</p>
<hr>
<p><strong># 인터넷 계층을 처리하는 기기</strong>
- <code>라우터</code> : 다른 네트워크와 정보를 주고 받을 때, 패킷(data) 소모를 최소화하고 최적화된 경로로 패킷을 포워딩하는 기기</p>
<p>- <code>L3 스위치</code> : 라우터는 소프트웨어와 하드웨어 기반으로 나눠지는데 L3 스위치는 하드웨어 기반의 라우팅을 담당함 (IP 주소기반)</p>
<hr>
<p>*<em># 데이터 링크 계층을 처리하는 기기 *</em>
- <code>L2 스위치</code> : 장치들의 MAC 주소를 MAC 주소 테이블을 통해 관리하며, 연결된 장치로 패킷이 왔을 때 패킷 전송을 담당함
(지난 포스팅에서 데이터 링크 계층은 이더넷 프레임을 통해 MAC 주소를 알 수 있다고 배웠따!)</p>
<p>- <code>브리지</code> : 두 개의 LAN을 상호 접속할 수 있도록 하는 통신망 연결 장치
- 통신망 범위를 확장하고 서로 다른 LAN으로 이루어진 커다란 통신망 구축</p>
<hr>
<p><strong># 물리 계층을 처리하는 기기</strong></p>
<p>- <code>NIC</code> : 네트워크 인터페이스 카드, 네트워크와 빠른 속도로 데이터를 송수신 할 수 있도록 컴퓨터 내에 설치하는 확장 카드
- <code>리피터</code> : 약해진 신호를 증폭하여 전달하는 장치(광케이블이 보급되어 현재는 잘 안쓰임ㅎㅋ)
- <code>AP</code> : 패킷을 복사함(공유기 아님 헷갈리지 않기)</p>
<hr>
<blockquote>
<p>지금까지 네트워크를 구축하는 여러 기기를 살펴보았다!
쭉 보니 각 계층에서 사용되는 기기들은 계층이 하는 역할을 담당한다는 사실을 알 수 있다!
그리고 전송계층의 기기는 어디갔냐고 할 수 있는데 전송계층도 계층의 위치에 맞게 L4 스위치가 있다
하지만 요즘은 보안이 더 유리한 L7 스위치를 사용한다고 한다~</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[CS] 2장 네트워크 - TCP/IP 4계층 모델]]></title>
            <link>https://velog.io/@moo_min/CS-2%EC%9E%A5-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-TCPIP-4%EA%B3%84%EC%B8%B5-%EB%AA%A8%EB%8D%B8</link>
            <guid>https://velog.io/@moo_min/CS-2%EC%9E%A5-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-TCPIP-4%EA%B3%84%EC%B8%B5-%EB%AA%A8%EB%8D%B8</guid>
            <pubDate>Tue, 21 Mar 2023 08:52:17 GMT</pubDate>
            <description><![CDATA[<p><strong># 인터넷 프로토콜 스위트(internet protocol suite)</strong>
- 인터넷에서 컴퓨터들이 서로 정보를 주고받는 데 쓰이는 통신규약의 모음, 서로 정보를 주고받는데 쓰이는 프로토콜의 집합</p>
<p><strong># TCP/IP 4계층 vs OSI 7계층</strong>
<img src="https://velog.velcdn.com/images/moo_min/post/d2ec5213-212a-4c86-99fa-2b684080285b/image.png" alt=""></p>
<p>- OSI 계층은 애플리케이션 계층을 세 개로 나눔 / 링크 계층 = 데이터 링크 계층 + 물리 계층 / 인터넷 계층 = 네트워크 계층</p>
<blockquote>
<p>이 계층들은 특정 계층이 변경되더라도 다른 계층에 영향을 받지 않도록 설계되어 있다!</p>
</blockquote>
<p>&gt; TCP/IP를 중심으로 알아보자~!</p>
<hr>
<p><strong># 애플리케이션 계층(Application Layer)</strong>
- 응용프로그램이 사용되는 프로토콜 계층
- 웹 서비스, 이메일 등 서비스를 실질적으로 사람들에게 제공하는 층
FTP : 장치 간의 파일을 전송하는데 사용되는 표준통신 프로토콜) 
HTTP : World Wide Web을 위한 데이터 통신의 기초이자 웹 사이트를 이용하는데 사용되는 프로토콜 
SSH : 보안되지 않은 네트워크에서 네트워크 서비스를 안전하게 운영하기 위한 암호화 네트워크 프로토콜 
SMTP : 전자 메일 전송을 위한 통신 프로토콜
DNS : 도메인 이름과 IP주소를 매핑해주는 서버</p>
<p><strong># 전송 계층(Transport Layer)</strong>
- 송신자와 수신자를 연결하는 통신 서비스 제공
- 애플리케이션과 인터넷 계층 사이의 데이터 중계역할
- 대표적으로 TCP와 UDP</p>
<p><strong>- TCP :</strong> 패킷 사이의 순서를 보장하고 연결지향 프로토콜을 사용해서 연결 → 신뢰성을 구축하여 수신여부 확인  📌가상회선 패킷 교환 방식
<strong>- UDP :</strong> 순서를 보장하지 않고 순서여부 확인x 단순히 데이터만 줌(신뢰성이 없는 계층) 📌데이터그램 패킷 교환 방식
*신뢰성이 없는 대신 속도가 빠르기에 주로 성능이 중요시되는 서비스에 사용</p>
<p><strong>📌가상회선 패킷 교환 방식(TCP)</strong>
각 패킷에 가상회선 식별자가 포함되며 모든 패킷을 전송하면 가상회선이 해제되고 전송된 순서대로 패킷이 도착하는 방식</p>
<p><strong>📌데이터그램 패킷 교환 방식(UDP)</strong>
패킷이 독립적으로 이동하며 최적의 경로를 선택하기에 도착한 패킷은 순서가 다를 수 있음</p>
<p><strong>- TCP 연결 성립 과정  3-way handshake</strong>
<strong>1. 연결 요청 단계</strong></p>
<p>클라이언트가 서버에게 클라이언트의 ISN(첫 번째 패킷에 할당된 임의의 시퀀스 번호)을 담아 SYN(연결 요청 플래그)을 보냄</p>
<p>*<em>2. 연결 승인 단계 *</em></p>
<p>서버(정확하게는 서버측 TCP)는 클라이언트(클라이언트 측 TCP)의 SYN(연결 요청 플래그)를 수신하고 서버의 ISN(임의의 시퀀스 번호)를 보내며 클라이언트의 ISN+1을 승인번호로 보냄</p>
<p><strong>3. ACK단계</strong></p>
<p>클라이언트는 서버의 ISN(임의의 시퀀스 번호)에 +1한 값을 승인번호로 사용하여 ACK(응답 플래그)에 담아 서버에 보냄</p>
<blockquote>
<p>이후 신뢰성이 구축되어 클라이언트와 서버 호스트들은 각각 서로에게 데이터를 전송할 수 있다!</p>
</blockquote>
<p><strong>- TCP 연결 해제 과정  4-way handshake</strong>
*<em>1단계 *</em>
연결을 닫고자 할 때, 클라이언트는 FIN 세그먼트(데이터?)를 서버에 보낸 후 FIN_WAIT_1 상태로 응답 기다림</p>
<p><strong>2단계</strong>
서버는 ACK(응답 플래그)를 클라이언트로 보낸 후 CLOSE_WAIT 상태로 전환, 클라이언트는 ACK를 받으면 FIN_WAIT_1에서 FIN_WAIT_2 상태로 기다림</p>
<p><strong>3단계</strong>
ACK를 보낸 서버는 일정 시간 이후에 클라이언트에게 FIN 세그먼트를 보냄</p>
<p><strong>4단계</strong>
클라이언트는 TIME_WAIT 상태가 되고 다시 서버로 ACK를 보냄, ACK를 받는 서버는 CLOSED상태가 됨, 마지막으로 클라이언트는 어느 정도의 시간을 대기한 후에 CLOSED상태가 전환 → 클라이언트&amp;서버간의 모든 연결 해제</p>
<blockquote>
<p><strong>TIME_WAIT가 왜 필요할까?</strong>
- 지연 패킷이 발생할 경우를 대비하기 위함(데이터 무결성)
- 두 장치가 연결이 닫혔는지 확인하기 위함
그렇기에 연결을 해제하기 전에 잠시 기다리자!</p>
</blockquote>
<p><strong># 인터넷 계층(Internet Layer)</strong>
- 노드(장치)로 부터 받은 네트워크 패킷을 지정된 목적지인 IP주소로 전송하기 위해 사용되는 계층
- 패킷을 수신해야 할 상대의 주소를 지정하여 데이터를 전달
- 상대방이 제대로 받았는지에 대해 보장하지 않는 비연결형적인 특징
- IP, ARP, ICMP </p>
<p><strong># 링크 계층(Link Layer)</strong>
- 실질적으로 데이터를 전달하며 장치 간에 신호를 주고받는 &#39;규칙&#39;을 정하는 계층
- 네트워크 접근 계층이라고도 함
- 내부를 <strong>물리 계층</strong>과 <strong>데이터 링크 계층</strong>으로 나눌 수 있음</p>
<p><strong>📌물리 계층</strong>
유선 LAN 무선 LAN을 통해 0과 1로 이루어진 데이터를 보내는 계층</p>
<p><strong>유선 LAN</strong>
- IEEE802.3이라는 프로토콜을 따르며 전이중화 통신 사용
*전이중화 통신 : 양쪽 장치가 동시에 송수신할 수 있는 방식, 송신로와 수신로로 나눠서 데이터를 주고받으며 현대의 고속 이더넷은 이 방식을 기반으로 통신함</p>
<p>- 유선 LAN을 이루는 케이블: 트위스트 페어 케이블(LAN 케이블), 광섬유 케이블(장거리 및 고속 통신 가능)</p>
<p><strong>무선 LAN</strong> 
- 수신과 송신에 같은 채널 사용 → 반이중화 통신 사용
*반이중화 통신 : 서로 통신은 가능하시만 동시에는 통신이 불가한 통신 방식, 대표적으로 CSMA/CA가 있으며 장치에서 데이터를 보내기 전에 회선이 비어있는지 확인하는 캐리어 감지 등을 통해 사전에 가능한 한 충돌을 방지하는 방식을 사용</p>
<p>- 무선 LAN을 이루는 주파수
와이파이(wifi) : 전자기기들이 무선 LAN 신호에 연결할 수 있게 하는 기술, 무선 접속 장치(AP, 공유기) 필요, 유선 LAN 속에 흐르는 신호를 무선 LAN으로 바꾸어 한정된 범위 안에서 무선 인터넷 사용 가능 
BSS : 기본 서비스 집합, BSS 내에 있는 AP들과 장치들이 서로 통신이 가능한 구조 / 하나의 와이파이가 운용되는 범위 
ESS : 하나 이상의 BSS그룹</p>
<p>📌데이터 계층
이더넷 프레임을 통해 전달받은 데이터의 에러를 검출 및 캡슐화, 흐름 제어, 접근 제어를 담당하는 계층
Preamble : 송신자와 수신자의 동기화를 위해 사용, 이더넷 프레임이 시작임을 알림
SFD : 다음 바이트부터 MAC 주소 필드가 시작됨을 알림 
MAC Dst/Src : 수신지 송신지 물리주소
EtherType : 데이터에 내제된 IP 타입 식별
Payload : 전달받은 데이터
CRC : 에러 확인 비트</p>
<p><img src="https://velog.velcdn.com/images/moo_min/post/f92a68e8-6c1d-4f10-b9aa-4f3112894174/image.png" alt=""></p>
<hr>
<p><strong># 계층간 데이터 송수신 과정</strong></p>
<blockquote>
<p><strong>- 두 컴퓨터가 데이터를 주고 받는다면..?</strong>
컴퓨터1 데이터 보냄 → 애플리케이션&amp;전송 계층으로 캡슐화 과정을 거침 → 링크 계층을 통해 컴퓨터2의 서버와 통신 → 컴퓨터2 링크~애플리케이션 계층까지 비캡슐화 과정을 거쳐 데이터가 전송</p>
</blockquote>
<p>- 캡슐화 과정
상위 계층의 헤더와 데이터를 하위 계층의 데이터 부분에 포함시키고 해당 계층의 헤더를 삽입하는 과정...?
즉, 상위에서 하위 계층으로 이동하면서, 현재 계층에 이전 계층의 헤더&amp;데이터를 포함시키는 것! 마지막 링크 계층에는 모든 헤더와 데이터가 전달되고 프레임 헤더와 트레일러가 붙어 &#39;프레임화&#39; 됨 </p>
<p>- 비캡슐화 과정
캡슐화된 데이터가 하위 계층에서 상위 계층으로 이동하면서 각 계층에 맞는 헤더 부분을 제거하는 과정, 그렇담 마지막에는 애플리케이션의 PDU인 메시지로 전달이 됨 </p>
<blockquote>
<p><strong>전송-&gt;캡슐화(프레임 생성)-&gt;비캡슐화(메시지만 남겨둠)-&gt;도착</strong></p>
</blockquote>
<hr>
<p><strong># PDU(Protocol Data Unit)</strong>
네트워크의 계층 간에 데이터가 전달될 때 한 덩어리의 단위
- 제어 관련 정보들이 포함된 &#39;헤더&#39; &amp; 데이터를 의미하는 &#39;페이로드&#39;로 구성</p>
<blockquote>
<p><strong>데이터 자체는 동일하지만 계층마다 부르는 명칭이 다름</strong>
- 애플리케이션 계층 : 메세지
- 전송 계층 : 세그먼트(TCP) or 데이터그램(UDP)
- 인터넷 계층 : 패킷
- 링크 계층 : 프레임(데이터 링크 계층), 비트(물리 계층)</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[CS] 2장 네트워크 - 네트워크 기초]]></title>
            <link>https://velog.io/@moo_min/CS-2%EC%9E%A5-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B8%B0%EC%B4%88</link>
            <guid>https://velog.io/@moo_min/CS-2%EC%9E%A5-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B8%B0%EC%B4%88</guid>
            <pubDate>Tue, 21 Mar 2023 05:26:54 GMT</pubDate>
            <description><![CDATA[<p><strong># 네트워크란?</strong>
- 노드(node)와 링크(link)가 서로 연결되어 있으며 리소스를 공유하는 집합!
- 노드(node): 서버, 라우터, 스위치 등
- 링크(link): 유선 or 무선</p>
<blockquote>
<p>&#39;좋은&#39; 네트워크: 많은 처리량 처리 가능, 지연시간이 짧음, 장애 빈도 적음, 확실한 보안</p>
</blockquote>
<p><strong># 처리량</strong>
- 링크 내에서 성공적으로 전달된 데이터의 양 = 얼만큼의 트래픽을 처리했는지! 
- 트래픽: 특정 시점 링크 내에 흐르는 데이터의 양(트래픽과 처리량은 다른 것!)
- &#39;많은 트래픽을 처리한다&#39; = &#39;많은 처리량을 가진다&#39; /  즉, 특정 시점에서 링크 내에 흐르는 데이터의 양이 많고 그 많은 흐르는 데이터를 처리한다는 의미
- 단위: bps(초당 전송 or 수신되는 비트 수)</p>
<p><strong># 지연시간</strong>
- 요청이 처리되는 시간, 어떤 메세지가 두 장치 사이를 왕복하는데 걸린 시간</p>
<hr>
<p><strong># 네트워크 토폴로지</strong>
- 네트워크를 설계할 때 고려되며, 노드와 링크의 배치 방식 or 연결 형태</p>
<p><strong>1. 트리 토폴로지(계층형 토폴로지)</strong>
트리 형태로 배치한 네트워크 구성
장점: 노드의 추가/삭제 용이
단점: 특정 노드에 트래픽이 집중될 때, 하위 노드에 영향을 줄 수 있음</p>
<p><strong>2. 버스 토폴로지</strong>
중앙 통신 회선 하나에 여러개의 노드가 연결되어 공유하는 네트워크 구성, 주로 근거리 통신망(LAN)에서 사용
장점: 설치 비용이 적음, 신뢰성 우수(왜?), 중앙 통신 회선에 노드 추가/삭제 용이
단점: 스푸핑 가능
<em>*스푸핑이란?
사전적 의미는 &#39;속이다&#39;, 올바르게 전달되어야할 패킷을 악의적인 노드에 전달하는 방식</em></p>
<p><strong>3. 스타 토폴로지</strong>
중앙에 있는 노드에 모두 연결된 네트워크 구성
장점: 노드 추가/에러 탐지 용이, 패킷의 충돌 가능성↓ 등
단점: 중앙 노드에 장애 발생 시, 전체 네트워크 사용불가, 고가의 설치비용</p>
<p><strong>4. 링형 토폴로지</strong>
각각의 노드가 양 옆의 두 노드와 연결하여 고리처럼(동그랗게) 하나의 연속된 길을 통해 통신하는 망 구성 방식
장점: 노드 수가 증가해도 손실x, 충돌 가능성x, 노드 고장 쉽게 발견
단점: 네트워크 구성변경 어려움, 회선에 장애 -&gt; 전체적인 영향</p>
<p><strong>5. 메시 토폴로지(망형 토폴로지)</strong>
그물망처럼 연결되어 있는 구조
장점: 한 회선에 장애가 발생 -&gt; 여러 경로 존재 -&gt; 네트워크 사용 OK!, 트래픽 분산 처리 가능
단점: 노드 추가 어려움, 고가의 구축/운영 비용</p>
<blockquote>
<p>네트워크가 어떤 토폴로지를 갖는지, 어떠한 경로로 이루어져 있는지 알아야 병목현상을 올바르게 해결할 수 있다!
*병목현상: 전체 시스템의 성능 or 용량이 하나의 구성 요소로 인해 제한을 받는 현상</p>
</blockquote>
<hr>
<p><strong># 네트워크 분류</strong>
- 네트워크는 규모를 기반으로 분류할 수 있음
LAN: 근거리 통신망, 개인 소유가 가능한 규모, 전송속도가 빠르고 혼잡x
MAN: 대도시 지역 네트워크, 시 규모, 전송속도 보통 및 LAN보다는 혼잡
WAN: 광역 네트워크, 세계 규모, 전송속도 느리며 MAN보다 혼잡</p>
<hr>
<p><strong># 네트워크 성능 분석 명령어</strong></p>
<p>*병목현상의 주된원인
- 네트워크 대역폭
- 네트워크 토폴로지
- 서버 CPU, 메모리 사용량
- 비효율적인 네트워크 구상</p>
<blockquote>
<p>네트워크로부터 발생한 문제점인지를 확인하고 네트워크 성는 분석을 해야함! 이때 사용되는 몇가지 명령어가 존재함</p>
</blockquote>
<p><strong># ping(Packet INternet Groper)</strong>
- 네트워크 상태를 확인하려는 대상 노드에게 일정 크기의 패킷을 전송하는 명령어
- 해당 노드의 패킷 수신 상태와 도달하기까지의 시간, 네트워크가 잘 연결되어 있는 지 알아볼 수 있음
- But...ping은 TCP/IP 프로토콜 중에서 ICMP(인터넷 프로토콜의 비신뢰적인 특성을 보완하기 위한 프로토콜) 프로토콜을 통해 동작하기에 위 프로토콜을 지원하지 않는 기기를 대상으로는 ping 테스팅이 불가능함</p>
<p><strong># netstat</strong>
- 접속되어 있는 서비스들의 네트워크 상태를 표시하는데 사용됨
- 네트워크 접속, 라우팅 테이블, 네트워크 프로토콜 등의 리스트를 보여줌
- 주로 서비스의 포트가 열려 있는지 확인할때 사용</p>
<p><strong># nslookup</strong>
- DNS와 관련된 내용을 확인
- 특정 도메인에 매핑된 IP를 확인</p>
<p><strong># tracert</strong>
- 목적지 노드까지 네트워크 경로 확인
- 목적지 노트까지의 구간 중 어느 구간에서 응답이 느려지는지 확인 가능</p>
<p><strong># 네트워크 프로토콜 표준화</strong>
- 다른 장치들끼리 데이터를 주고받기 위해 설정된 공통된 인터페이스
- IEEE or IETF 표준화 단체가 정함
- ex) 웹을 접속할 때 사용되는 HTTP → 노드들은 웹 서비스를 기반으로 데이터를 주고 받음</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] 클래스-생성자, 상속]]></title>
            <link>https://velog.io/@moo_min/Python-%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%83%9D%EC%84%B1%EC%9E%90</link>
            <guid>https://velog.io/@moo_min/Python-%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%83%9D%EC%84%B1%EC%9E%90</guid>
            <pubDate>Mon, 31 Oct 2022 16:50:12 GMT</pubDate>
            <description><![CDATA[<hr>
<h4 id="-클래스"># 클래스</h4>
<ul>
<li>클래스 : 객체를 만들기 위한 설계도</li>
<li>객체 : 설계도로부터 만들어낸 제품</li>
</ul>
<p>클래스는 속성과 메서드의 집합</p>
<pre><code>class 클래스:
    def 메서드이름(self):
        명령블록


인스턴스 = 클래스 이름()
인스턴스.메서드()
</code></pre><h4 id="-생성자"># 생성자</h4>
<ul>
<li>생성자 :  인스턴스를 만들 때 호출되는 메서드</li>
<li>_<em>init_</em> 메서드: 인스턴스를 만들때 반드시 호출되는 메서드</li>
<li>self : 인스턴스 자기자신</li>
<li>파이썬에서는 자료형도 클래스
<img src="https://velog.velcdn.com/images/moo_min/post/ca09d2cb-6557-416b-83e8-86f0e5d49539/image.png" alt=""></li>
</ul>
<h4 id="-상속"># 상속</h4>
<ul>
<li>상속 : 클래스들의 중복된 코드를 제거하고 유지보수를 편하게 하기 위해서 사용함</li>
<li>부모클래스 : 속성, 메서드</li>
<li>자식클래스 : 부모클래스의 속성+클래스를 가져올 수 있음</li>
<li>클래스 안의 pass 키워드 : 클래스를 정의만 해놓고 싶을때 사용</li>
<li>메서드 오버라이딩 : 메서드 제정의</li>
</ul>
<p><img src="https://velog.velcdn.com/images/moo_min/post/bdb137b0-8642-4db8-a193-a0206725b1f0/image.png" alt=""></p>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[[ML스터디]타이타닉 생존자 예측(1)]]></title>
            <link>https://velog.io/@moo_min/ML%EC%8A%A4%ED%84%B0%EB%94%94Week1-%ED%83%80%EC%9D%B4%ED%83%80%EB%8B%89-%EC%83%9D%EC%A1%B4%EC%9E%90-%EC%98%88%EC%B8%A11</link>
            <guid>https://velog.io/@moo_min/ML%EC%8A%A4%ED%84%B0%EB%94%94Week1-%ED%83%80%EC%9D%B4%ED%83%80%EB%8B%89-%EC%83%9D%EC%A1%B4%EC%9E%90-%EC%98%88%EC%B8%A11</guid>
            <pubDate>Tue, 13 Sep 2022 22:14:52 GMT</pubDate>
            <description><![CDATA[<h4 id="📚-머신러닝-1주차에는-핸즈온-머신러닝-3장-분류모델의-예제인-타이타닉-생존자-예측-문제를-함께-풀어보았다"><strong>📚 머신러닝 1주차에는 핸즈온 머신러닝 3장 분류모델의 예제인 타이타닉 생존자 예측 문제를 함께 풀어보았다.</strong></h4>
<hr>
<p>[0] 데이터 출처(Kaggle)</p>
<pre><code>#https://www.kaggle.com/c/titanic</code></pre><p>[1] 필요한 라이브러리 가져오기(우선 데이터 전처리부터)</p>
<pre><code>import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import os
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline</code></pre><p>[2] os.environ을 이용하여 Kaggle API Username, Key 세팅하기
Kaggle 홈페이지에서 발급받을 수 있음</p>
<pre><code>os.environ[&#39;KAGGLE_USERNAME&#39;] = &#39;KAGGLE_USERNAME&#39;
os.environ[&#39;KAGGLE_KEY&#39;] = &#39;KAGGLE_KEY&#39;</code></pre><p>[3] 데이터 가져오기</p>
<pre><code>!kaggle competitions download -c titanic
!unzip &#39;*.zip&#39;
!ls</code></pre><p>[4] 데이터 열어보기</p>
<pre><code>df_t = pd.read_csv(&#39;train.csv&#39;)</code></pre><p><img src="https://velog.velcdn.com/images/moo_min/post/f671bc19-8ca1-4595-bab0-63638c26942d/image.png" alt=""></p>
<p>[5] 데이터 정보보기</p>
<pre><code>df_t.info()</code></pre><p><img src="https://velog.velcdn.com/images/moo_min/post/1644c38a-c2a5-4d1f-93f7-c97a6f55d70c/image.png" alt="">
- 총 11개의 변수를 확인할 수 있다. 
- 사이트를 참고해보니 변수의 설명은 다음과 같다.
PassengerId: 승객 고유 번호
Survived: 생존여부(1 = 생존, 0 = 사망)
Pclass: 객실 등급(1st = 1, 2nd = 2, 3rd = 3)
Name: 승객 이름
Sex: 성별
Age: 나이
SibSp: 함께 탑승한 형재자매or배우자 수 
ParCh: 함께 탑승한 부모or자녀 수
Ticket: 티켓 번호
Fare: 티켓 요금
Cabin: 객실 번호
Embarked: 탑승 장소(C = Cherbourg, Q = Queenstown S = Southampton)</p>
<p>[6] int,float 변수 통계치 살펴보기</p>
<pre><code>df_t.describe()</code></pre><p><img src="https://velog.velcdn.com/images/moo_min/post/f34acb4a-2ed3-40a5-a40e-cc8a3ec0a948/image.png" alt="">
- 데이터로 확인할 수 있는 사실
탑승자 38% 생존
탑승자 평균연령 29.6
티켓 등급은 2.3으로 대부분 3rd</p>
<p>[7] object 변수 통계치 살펴보기</p>
<pre><code>df_t.describe(include=[&#39;O&#39;])</code></pre><p><img src="https://velog.velcdn.com/images/moo_min/post/213c5c7e-7ee4-4755-bae4-73c9621cda80/image.png" alt="">
- 데이터로 확인할 수 있는 사실
탑승자 남성 수가 577명
동일한 티켓으로 탑승한 인원 중 가장 많은 수 7명
한 객실에 최대 수용인원 4명</p>
<p>[8] train data에서 &#39;성별&#39;에 따른 생존율 비교</p>
<pre><code>#grouby(): 같은 값을 하나로 묶어 통계 또는 집계 결과를 얻기 위해 사용하는 것
#sort_values(): 정한 기준으로 정렬, ascending = true 오름차순
#as_index : 새로 인덱싱을 할지말지 결정하는 것)

df_t[[&#39;Sex&#39;, &#39;Survived&#39;]].groupby([&#39;Sex&#39;], as_index = True).mean().sort_values(by = &#39;Survived&#39;, ascending = False)
</code></pre><p><img src="https://velog.velcdn.com/images/moo_min/post/7c8bf6ff-447b-4f73-b07b-2bfafba4f4c4/image.png" alt="">
- 여성의 생존율이 더 높음을 알 수 있다!</p>
<p>[9] train data에서 &#39;객실 등급&#39;에 따른 생존율 비교</p>
<pre><code>df_t[[&#39;Pclass&#39;, &#39;Survived&#39;]].groupby([&#39;Pclass&#39;], as_index = False).mean().sort_values(by = &#39;Survived&#39;, ascending = False)</code></pre><p><img src="https://velog.velcdn.com/images/moo_min/post/d38f84ae-ebf5-4f0e-8b69-2ee69915abb0/image.png" alt="">
-객실 등급이 높을 수록 생존률이 높다!</p>
<p>[10] 연령에 따른 생존 여부 시각화 하기(너무 많은 나이의 분포로 0세부터 20세까지만), train data에서 &#39;나이&#39;에 따른 생존율 비교</p>
<pre><code>df_agv = df_t[[&#39;Age&#39;, &#39;Survived&#39;]].groupby([&#39;Age&#39;], as_index = False).mean().sort_values(by = &#39;Survived&#39;, ascending = False)</code></pre><p><img src="https://velog.velcdn.com/images/moo_min/post/3ca49e36-5aba-421f-b76f-bd77f1337b3d/image.png" alt=""></p>
<p>[11] Age의 데이터 타입 변경하기</p>
<pre><code>df_agv[&#39;Age&#39;] = df_agv[&#39;Age&#39;].astype(int)</code></pre><p>[12] 변경 되었는지 확인하기</p>
<pre><code>df_agv.info()</code></pre><p><img src="https://velog.velcdn.com/images/moo_min/post/e2371273-5e5c-45d0-9013-9b263ecc62fe/image.png" alt=""></p>
<p>[13] barplot으로 시각화</p>
<pre><code>sns.barplot(data=df_agv, x=&#39;Age&#39;, y=&#39;Survived&#39;)
plt.axis([0, 20, 0, 1])
plt.show()</code></pre><p><img src="https://velog.velcdn.com/images/moo_min/post/b4ba731d-5159-4b68-a791-b999a9d12edc/image.png" alt=""></p>
<hr>
<p>💡 마무리
- 1주차에는 타이타닉 데이터가 어떻게 구성되어 있는지 살펴보았다.
- 다음에는 본격적으로 데이터 전처리와 분석을 진행할 예정이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[B4949] 균형잡힌 세상]]></title>
            <link>https://velog.io/@moo_min/%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%8A%A4%ED%84%B0%EB%94%94week5-stack%EC%9D%98-%EC%9D%91%EC%9A%A9B4949-%EA%B7%A0%ED%98%95%EC%9E%A1%ED%9E%8C-%EC%84%B8%EC%83%81</link>
            <guid>https://velog.io/@moo_min/%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%8A%A4%ED%84%B0%EB%94%94week5-stack%EC%9D%98-%EC%9D%91%EC%9A%A9B4949-%EA%B7%A0%ED%98%95%EC%9E%A1%ED%9E%8C-%EC%84%B8%EC%83%81</guid>
            <pubDate>Sun, 04 Sep 2022 16:51:09 GMT</pubDate>
            <description><![CDATA[<h3 id="h4📚-stack의-응용에-대해서-알아보았다"><h4>📚 stack의 응용에 대해서 알아보았다.</h3>
<hr>
<p>** ✔ stack 함수**
- top(): stack의 가장 위에 있는 데이터를 반환
- pop(): stack의 가장 위에 있는 데이터를 반환하고, 해당 데이터는 stack에서 삭제
- push(): 스택의 가장 위에 있는 자리에 메모리를 생성 후 데이터를 추가
- empty(): 스택이 비어있으면 true, 그렇지 않으면 false를 반환</p>
<hr>
<p><strong>📝 연습문제 - B4949(균형잡힌 세상)</strong>
  세계는 균형이 잘 잡혀있어야 한다.양과 음, 빛과 어둠 그리고 왼쪽 괄호와 오른쪽 괄호처럼 말이다.</p>
<p>정민이의 임무는 어떤 문자열이 주어졌을 때, 괄호들의 균형이 잘 맞춰져 있는지 판단하는 프로그램을 짜는 것이다.</p>
<p>문자열에 포함되는 괄호는 소괄호(&quot;()&quot;) 와 대괄호(&quot;[]&quot;)로 2종류이고, 문자열이 균형을 이루는 조건은 아래와 같다.</p>
<p>모든 왼쪽 소괄호(&quot;(&quot;)는 오른쪽 소괄호(&quot;)&quot;)와만 짝을 이뤄야 한다.
모든 왼쪽 대괄호(&quot;[&quot;)는 오른쪽 대괄호(&quot;]&quot;)와만 짝을 이뤄야 한다.
모든 오른쪽 괄호들은 자신과 짝을 이룰 수 있는 왼쪽 괄호가 존재한다.
모든 괄호들의 짝은 1:1 매칭만 가능하다.즉, 괄호 하나가 둘 이상의 괄호와 짝지어지지 않는다.
짝을 이루는 두 괄호가 있을 때, 그 사이에 있는 문자열도 균형이 잡혀야 한다.
정민이를 도와 문자열이 주어졌을 때 균형잡힌 문자열인지 아닌지를 판단해보자.</p>
<p>[입력]
하나 또는 여러줄에 걸쳐서 문자열이 주어진다.각 문자열은 영문 알파벳, 공백, 소괄호(&quot;( )&quot;) 대괄호(&quot;[ ]&quot;)등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다.각 줄은 마침표(&quot;.&quot;)로 끝난다.
입력의 종료조건으로 맨 마지막에 점 하나(&quot;.&quot;)가 들어온다.</p>
<p>[출력]
  각 줄마다 해당 문자열이 균형을 이루고 있으면 &quot;yes&quot;를, 아니면 &quot;no&quot;를 출력한다.</p>
<p>[힌트]
7번째의 &quot; .&quot;와 같이 괄호가 하나도 없는 경우도 균형잡힌 문자열로 간주할 수 있다.</p>
<hr>
<p><strong>💡 풀이&amp;코드</strong>
 <strong>1.</strong> 문자열을 입력받아서 반복문을 통해 괄호들을 하나씩 확인
 <strong>2.</strong> 만약 열린 괄호(&#39;(&#39;, &#39;[&#39;)이면 stack에 저장
 <strong>3.</strong> 만약 닫힌 괄호(&#39;)&#39;, &#39;]&#39;)라면, 다음과 같은 두 가지 경우를 생각해 볼 수 있음
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>3-1.</strong> 가장 처음 확인한 괄호 데이터가 닫힌 괄호일 경우(stack에 저장된 괄호 없음) -&gt; 불균형 문장, 변수 F로 불균형 판단 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>3-2.</strong> stack의 가장 위 데이터가 닫힌 괄호와 쌍이 맞는 경우 -&gt; pop() 통해 데이터 삭제
** 4.** 반복문 종료후 stack에 남은 괄호 데이터가 없으면서 동시에 변수 F가 불균형을 뜻하지 않을 경우(F == 0)만 &quot;yes&quot;출력, 나머지는 모두 &quot;no&quot; 출력
*<em>5. *</em>&quot;.&quot;입력 시 종료조건 작성</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;stack&gt;

using namespace std;

int main() {

    string str;

    while (1) {

        getline(cin, str);

        if (str == &quot;.&quot;) {

            return 0;

        }

        stack&lt;char&gt; s1;

        // 스택이 비어있지만 균형을 이루지 못하는 경우를 확인하기 위한 변수, 즉 닫힌 괄호가 가장먼저 나타날 경우
        int F = 0; 

        for (int i = 0; i &lt; str.length(); i++) {

            if (str[i] == &#39;[&#39; || str[i] == &#39;(&#39;) {

                s1.push(str[i]);

            }

            else if (str[i] == &#39;]&#39;) {


                if (s1.empty() == true) {

                    F = 1;
                    break;

                }

                else if (s1.top() == &#39;[&#39;) {

                    s1.pop();

                }

                else
                    break;

            }

            else if (str[i] == &#39;)&#39;) {

                if (s1.empty() == true) {

                    F = 1;
                    break;

                }

                else if (s1.top() == &#39;(&#39;) {

                    s1.pop();

                }

                else
                    break;
            }
        }

        if (s1.empty() == true &amp;&amp; F != 1) {

            cout &lt;&lt; &quot;yes&quot; &lt;&lt; &quot;\n&quot;;

        }

        else {

            cout &lt;&lt; &quot;no&quot; &lt;&lt; &quot;\n&quot;;
        }
    }

    return 0;

}
</code></pre><p><img src="https://velog.velcdn.com/images/moo_min/post/20b861c5-37ec-4b6e-a25b-17c0ee851189/image.png" alt=""></p>
<hr>
<p>❗ <strong>후기</strong></p>
<ul>
<li>stack 개념은 쉬운데 응용은 어렵다..!</li>
<li>처음 풀어보는 백준 문제였는데 시간이 참 오래걸렸다. 친구들이 이런저런 조언해줘서 고마웠당..,,</li>
<li>일단은 맞았다는 사실에 의의를 뒀지만 다른 친구들 풀이 보니까 훨씬 짧게 그리구 논리적으로 작성이 가능한 것 같다. 더 좋은 코드를 위해 계속 고민해봐야겠다.           </li>
</ul>
<hr>
<blockquote>
<p>오타 &amp; 잘못된 지식 지적은 언제나 환영입니다(●&#39;◡&#39;●)</p>
</blockquote>
]]></description>
        </item>
    </channel>
</rss>