6월 28, 2024

인터넷을 바라보는 두 가지 관점

인터넷을 바라보는 두 가지 관점


1) 첫 번째 관점: 네트워크의 네트워크

첫 번째 관점은 인터넷은 네트워크의 네트워크라는 것이다. 이는 구성 component 들로 인터넷을 바라본 것이고,

앞서

https://www.programmingstory.com/2024/05/10.html

위 포스팅에서 다루었던 내용이 이 관점에 해당한다. 


2. 두 번째 관점: service view

인터넷을 바라보는 두 번째 관점은 service view이다. 그냥 사용자어플리케이션에게 전달 서비스를 제공하는 기반시설이다라는 관점인 것이다. 인터넷, 컴퓨터네트워크, 서로 멀리 떨어져있는 두 컴퓨터 사이에서 돌아가는 어플리케이션 프로그램에 전달 서비스를 제공해주는 인프라, 기반시설이다라는 관점으로 볼 수 있다.

 

또한 이 관점에서는 앱들에게 programming interface를 제공하는 기능정도로 생각하면 된다. 즉 API (Application Program Interface)를 제공하는 관점으로 볼 수 있다. 사용자의 입장에서는 네트워크의 구성요소는 별로 관심이 없다. 사용자 입장에서는 컴퓨터 시스템 내에서 데이터를 읽고 쓰는 것처럼 그것을 불러서 쓸 수 있는 것이다. 

 

즉 인터넷을 바라보는 두 번째 관점 service view는 철저히 사용자의 입장에서 생각한 관점이라고 할 수 있다. 


5월 23, 2024

해시 테이블에서 충돌(collision)/ 적재율 (load factor) 개념

1. Hash Table 충돌

hash table에서는 충돌을 줄이는 것이 알고리즘의 성능을 높이는 데 핵심 이슈이다. 

여기서 충돌은 한 원소를 해싱해서 저장하려고 하는 상황에서 이미 다른 원소가 그 자리를 차지한 상황을 뜻한다.


2. Hash Table 충돌 원인


예를 들어, 

hash table 예시

위와 같은 그림의 hash table이 있다고 하자. 여기서 hash 함수는 간단히 h(x)= xmod5라고 해보겠다. 즉, x를 5로 나눈 나머지라는 것이다. 이럴 때 처음으로 9라는 숫자가 들어간다면,

 

9는 hash 함수에 따라서 9 mod 5 즉, 4의 위치에 저장이 되는 것이다. 

 



hash 함수에 9가 들어간 모습

위 그림처럼 말이다. 여기까지는 문제가 없다. 하지만 만약에 14가 추가로 해시 테이블에 들어가고 싶다면 어떻게 되는가?

그러면 또한 hash 함수에 의해 14 mod 5를 계산한 4 자리에 14를 넣고 싶어한다. 하지만 이미 4 자리에는 9가 있기 때문에 충돌이 일어나는 것이다. 



3. 충돌, load factor 정의


이렇게 한 원소를 해싱이란 방법을 통해 저장하려고 하는데 다른 원소가 그 전에 해당 자리를 차지한 상황을 충돌 (collision)이라고 한다. 간단히 말해서 해시 테이블의 한 주소를 두개 이상의 원소가 다투는 상황과 유사하다고 보면 된다. 

 

또한 해시 테이블에서 자주 등장하는 용어로는 load factor (적재율) 이라는 개념이 있다. 위에서 볼 수 있듯이 해시 테이블의 성능을 높이기 위해서는 충돌을 줄여야 하고 그렇기 위해서는 해시 테이블에 원소가 차 있는 비율이 성능에 중요하게 작용한다. 여기서 해시 테이블에 원소가 차 있는 비율을 우리는 load factor (적재율)이라고 하는 것이다.

 

해시 테이블의 전체 크기가 m이라고 가정하고, 테이블에 저장되어 있는 원소의 개수가 n개라고 가정하면 적재율은 n/m이라고 표현할 수 있다. 위 그림에서는 전체 크기 5 중에서 1개만 차 있으므로 적재율은 1/5이 되는 것이다. 주로 load factor는 α로 표현하는 경우가 많다. 


4. 충돌을 막기 위한 방법


또한 위에서도 언급했듯이 충돌이 일어나면 해시 테이블의 성능은 굉장히 안좋아지기 때문에 이를 해결할 수 있는 방법이 필요하다. 

 

충돌을 막기 위한 방법으로 chaining이라는 방법과 open addressing이라는 방법이 존재한다.

 

이 두 방법은 다음 포스팅에서 소개하도록 하겠다. 


4월 07, 2024

Wireless access network

1. Wireless Access Network

end system을 router로 연결시키는 access network를 wireless access network라고 한다. 말 그대로 '무선' 에 초점을 맞춘 개념이다. 

 

wireless access network에는 크게 두 가지 종류가 있는데 오늘은 이 두 종류를 살펴보겠다.

 

1) wireless LANs: 

LAN은 Local Area Network의 약자로 local area 직경 1km 이내에 device가 연결될 때 그것을 LAN이라고 한다. 이는 하나의 빌딩, 오피스, 집을 무선으로 연결시키는 것이고 이 때 사용하는 것이 802.11에서 나오는 각종 wifi protocol인 것이다. 조금 더 높은 속도, 안정적인 전송이 가능하게끔 하기 위해 802.11 b/g/n 등 다양한 버전이 나왔고 최근에는 802.11 ay가 나와 20 Gbps 무선촉감인터넷을 가능하게끔 하고 있다. 

 

2) wide-area wireless access:

wide area network를 의미하고 LAN보다 더 넓은 개념이다. 이것의 대표적인 예시가 cellular network이다. cellular 라는 단어를 쓰는 이유는 여러 개의 cell을 써서 넓은 영역을 커버한다고 해서 붙여진 이름이다. cellular network는 수십km, 수백km 까지 커버가 가능하다. 이름이 의미하는 바처럼 cell을 계속해서 확장하면 되기 때문이다. cell 사이에 통신이 가능해야 하기 때문에 cellular network가 여러 네트워크 중에서 어렵고 복잡한 축에 속한다. 3G, 4G, LTE 등 다양한 것이 나왔는데 이는 wireless LAN보다는 속도가 느리지만 6G로 가면 유선 광케이블정도까지 속도를 높일 수 있다고 한다.