[알고리즘] 너비 우선 탐색 (BFS)
·
🤔 컴공 지식/알고리즘
들어가기먼저 너비 우선 탐색(BFS)에 대해서 배워보기 전에 그래프란 무엇인지에 대해서 간략하게나마 알 필요가 있다. 그래프란?→ 노드(vertex)와 간선(edge)을 가지고 만들어지는 비선형 데이터 구조를 말한다.그래프는 주로 데이터 간의 관계를 표현할 때 사용된다. 그래프에서 탐색 경로를 찾는 방법은 크게 총 2가지가 있다.더 이상 탐색할 노드가 없을 때까지 계속 타고 들어간다. 타고 들어가다가 더 이상 탐색할 노드가 존재하지 않으면 백트레킹을 통해 최근 방문했던 노드로 되돌아간다. 그 후 그 노드로부터 가지 않은 노드를 방문한다. 이 과정을 그래프에서 모든 노드를 탐색할 때까지 반복한다. (깊이 우선 탐색 DFS)현재 위치에서 가장 가까운 노드부터 모두 방문하고 그 이후 다음 노드로 넘어간다. 넘..
[알고리즘] 깊이 우선 탐색 (DFS)
·
🤔 컴공 지식/알고리즘
들어가기먼저 그래프에서의 탐색 방법들에 대해서 배워보기 전에 그래프란 무엇인지에 대해서 간략하게나마 알 필요가 있다. 그래프란?→ 노드(vertex)와 간선(edge)을 가지고 만들어지는 비선형 데이터 구조를 말한다.그래프는 주로 데이터 간의 관계를 표현할 때 사용된다. 그래프에서 탐색 경로를 찾는 방법은 크게 총 2가지가 있다.더 이상 탐색할 노드가 없을 때까지 계속 타고 들어간다. 타고 들어가다가 더 이상 탐색할 노드가 존재하지 않으면 백트레킹을 통해 최근 방문했던 노드로 되돌아간다. 그 후 그 노드로부터 가지 않은 노드를 방문한다. 이 과정을 그래프에서 모든 노드를 탐색할 때까지 반복한다. (깊이 우선 탐색 DFS)현재 위치에서 가장 가까운 노드부터 모두 방문하고 그 이후 다음 노드로 넘어간다. 넘..
[네트워크] DNS: Domain Name System
·
🤔 컴공 지식/네트워크
DNS (Domain Name Server) 도메인을 IP로 바꾸어 주는 디렉터리 서비스 DNS는 32bit 크기의 IP address를 저장하고 제공함으로써 distributed DB의 속성을 가짐 네임 서버들의 계층구조로 구현된 분산 데이터베이스 Application Layer Protocol 중 하나 DNS가 제공하는 서비스들 호스트 네임 -> IP 주소 호스트 aliasing: 정식 호스트네임 외로 사본 또는 별칭을 가질 수 있음 메일 서버 aliasing 부하 분산: 인기 있는 사이트는 여러 서버에 중복되어 있어서 다른 IP 주소를 할당시켜 부하를 분배시킴 DNS(Domain Name System) 작동 방식 1. 사용자가 www.handong.edu에 접속하려고 하면, 사용자의 컴퓨터에서는 D..
[네트워크] Web and HTTP
·
🤔 컴공 지식/네트워크
HTTP HTTP: hypertext transfer protocol Web의 Application Layer Protocol (소켓 위에서 동작함) Client - request하는 브라우저, Web Objects Server - Web server (response) uses TCP stateless - 지난 client requests들에 대해서 아무 정보도 저장해놓지 않음 Non-persistent HTTP Non-persistent HTTP에서는 하나의 요청과 그에 대한 응답을 위해 별도의 TCP 연결이 맺어진다. 이렇게 하면 각 요청/응답 쌍마다 별도의 TCP 연결이 필요하므로, 여러 개의 리소스를 가져오기 위해서는 여러 번의 TCP 연결 설정 및 해제 과정이 필요하게 된다. 예를 들어, 웹 ..
[네트워크] Network Application
·
🤔 컴공 지식/네트워크
TCP/IP 5계층 모델에서 제일 상위 Layer에 해당한다. Transport / Network / Link / Physical Layer는 모두 운영체제에 구현이 되어있다. Client-Server 네트워크 Application Layer에서 가장 일반적으로 사용되는 모델이다. 서버(Server): 서버는 항상 켜져 있는(Always-on) 호스트로, 고정된 IP 주소를 가지고 있음. 서버는 클라이언트의 요청을 받아 처리하고 응답을 반환하는 역할을 함. 대규모의 트래픽을 처리하거나 여러 사용자의 요청을 동시에 처리하기 위해, 서버들은 종종 데이터 센터에 배치됨. (Scailing) 클라이언트(Client): 클라이언트는 사용자의 디바이스에서 실행되는 프로그램으로, 필요한 정보를 얻기 위해 서버에 연결..
[네트워크] Protocol Layers, Service Models
·
🤔 컴공 지식/네트워크
Protocol Layers 네트워크는 상당히 복잡하고, 매우 많은 여러 조각들로 이루어져 있다. hosts routers links of various media applications protocols hardware, software 이렇게 복잡하게 여러 요소들로 이루어져 있기 때문에 네트워크의 구조를 알맞게 구성하는 작업이 필요하다! 그래서 Layer 라는 것을 만들어준다. Layer 구조의 특징 "via its own internal-layer actions": 각 계층은 고유한 내부 작업을 통해 서비스를 구현합니다. 예를 들어, 전송 계층(Transport Layer)에서는 신뢰성 있는 데이터 전송, 흐름 제어, 혼잡 제어 등의 기능을 담당합니다. "relying on services prov..
[네트워크] Packet Switch Delay, Loss, Throughput
·
🤔 컴공 지식/네트워크
이상적으로는, 두 엔드 시스템이 서로 데이터를 원하는 만큼 걱정 없이 주고 받을 수 있어야 하지만 현실은 그렇지 않다. 데이터는 생각했던 것보다 더 느리게 전송되거나, 유실되는 경우도 종종 발생한다. 이번 글에서는 이러한 문제들에 대해서 알아본다. 어떻게 packet loss와 delay가 발생할 수 있을까? Packet Queueing 데이터는 패킷이라는 작은 단위로 나뉘어져서 네트워크를 통해 전송된다. 이러한 패킷들은 router나 switch와 같은 네트워크 장치의 buffer에서 대기열을 이룬다. 각 패킷들은 대기열 내에서 순차적으로 처리되고, 해당 장치가 전송될 준비가 완료되면 전송하게 된다. Arrival Rate & Output Link Capacity 네트워크 장치의 연결하는 arrival..
[네크워크] Network Edge & Access Networks & Network Core
·
🤔 컴공 지식/네트워크
Network Edge 네트워크 엣지에서는 데이터의 생성과 소비가 주로 발생하며, Host라고 불리는 Client와 Server가 위치한다. Client 네트워크 서비스를 요청하는 컴퓨터나 장치를 의미. 예시 - 웹 브라우저를 실행해 웹페이지를 요청하는 유저의 컴퓨터는 클라이언트에 해당된다고 볼 수 있다. Server 네트워크 서비스를 제공하는 컴퓨터나 장치를 의미. 예시 - 웹페이지 내용을 제공하는 컴퓨터는 서버에 해당된다고 볼 수 있다. 서버들은 종종 데이터 센터(Data Centers)에 위치해 있다. 데이터 센터는 대량의 데이터 처리와 저장을 위한 전용 시설로, 수백 개에서 수 천 개의 서버와 스토리지 장치, 네트워크 장비 등을 보유하고 있다. 이들은 고속 인터넷 연결과 안정적인 전력 공급을 통해..
[네트워크] Internet & Protocol
·
🤔 컴공 지식/네트워크
인터넷: 실무 관점 주요 개념 네트워크 내의 수많은 연결된 Computing Devices : Hosts (End Systems) 이들은 네트워크의 가장자리(edge)에 위치한 컴퓨팅 장치를 의미한다. 이들은 사용자가 직접적으로 상호작용하는 시스템으로, 웹 서버, 이메일 서버, PC, 스마트폰 등이 포함된다. 왜 End System이라고 불리는가? 이러한 시스템들이 네트워크 통신의 양 끝단에 위치하고 있기 때문. 즉, 데이터가 인터넷을 통해 전송되면 그 시작점과 종착점은 항상 end systems라고 할 수 있다. 인터넷의 중요한 구성 요소로서, 사용자와 직접적으로 상호작용하며 다양한 네트워크 애플리케이션을 지원하는 역할을 한다. Packet Switches Packet Switching이란? 데이터를 ..
[알고리즘] Hash Table(해시 테이블)
·
🤔 컴공 지식/알고리즘
자료구조/알고리즘 공부를 파이썬 기반으로 해서 해시 테이블을 직접 구현하지 않아도 되지만 그 원리에 대해서 아는 것은 중요하다고 생각해서 이번 글에서는 hash table에 대해서 알아보겠습니다. 들어가기솔직히 이제는 많은 언어들이 hash table을 지원하기 때문에 hash table을 어떻게 구현해야 하는지에 대해서는 알 필요가 없을 수도 있습니다. 어떻게 구현하는지 몰라도 각 언어들에 내제되어 있는 것들을 사용하면 되기 때문입니다. (JS - Object, Python - Dictionary, Go - Map, Java - Map, Ruby - Hash 등등)그럼에도 hash table의 개념과 원리에 대해서 알아놓는다면 자료구조를 이해하는 데에 있어서 큰 도움이 될 거라고 생각합니다...