최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday

티스토리 뷰

 

데이터에 대한 내용 설명이 많이 부족해서, 복습 할 겸 내용설명을 충분하게 곁들이고 다시 정리하고 넘어가기로 한다.

 

데이터와 속도표현에 대한 설명 말미에는 실무에서 쓸 수 있도록 자바스크립트와 php의 함수 표현과 사용법에 대해 

 

알아보도록 한다! 너무 상세한 깊이있는 전문 지식 대신 기초자료에 근거하여 핵심만 알기쉽게 서술형으로 설명하도록 노력하겠다.^^

 

 

   데이터에 대해 알아야 할 이유

 

우리가 쓰는 데이터 단위에는 흔히 컴퓨터에서 사용하는 bit, Byte, KB, MB, GB... 등이 있고

 

인터넷 속도 단위로는 bps, kbps, Mbps, pps 등 이 있다.

 

네트워크 관련 작업하는 데에 있어서 용량 표현과 전환에 대한 함수는 반드시 필요하고

 

그 기반에는 이러한 데이터 수치와 관계에 대한 이해가 밑바탕 되어야 하기 때문에  정리하여 어카이브로 남겨두겠다.

 

 

   데이터의 ON / OFF와 CPU

 

[ O / | ]   전자기기의 전원부를 보면 이런 마크가 있다.

 

이니셜이나 축약어를 좋아하는 우리나에서는 O하나만 보고 On  = 켜짐으로 보여질 수 도 있겠지만..^^ 사실은 정반대이다.

 

우리가 흔히 부르는 프로세서 즉 '반도체'에서는 전류를 흘렸다 끊었다 하면서 정보를 기억하고 나타내는데

 

흐르면 '1', 끊어지면 '0'을 가지고 제어한다. 따라서 0과 1로 이루어진 전기를 표현하기 위해 매우 적절한 2진수라는 진법으로 

 

숫자를 처리하고 있다.

 

여기까지의 내용을 대강이라도 이해했다면 아래 내용을 다시 보자.

 

[ 0 / 1 ] 

 

위에서 알파벳처럼 보였던 O / I 가 숫자로 바뀌어서 보이고 이젠 더 이상 헷갈릴 일이 없다.

 

1이면 동작, 0이면 정지.

 

흥미로운 사실을 위해 CPU와 관련된 이야기를 조금 덧붙이자면 CPU는 '트랜지스터'라는 CMOS형 트랜지스터를 사용한다.

 

실리콘 기판과 소스의 전극을 접지하고 전극에 일정한 전압을 조정하면 채널(하단 그림참조) 이라고 하는 전자의 통로가 만들어진다.

 

 

바로 여기에서 전류를 흘리고 끊으며 0과 1에 의한 2진수 연산을 하게 된다는 것이다.

 

CPU에서 1GHz, 2.7GHz 과 같이 클럭(Clock)이라는 처리 속도를 표현하는데

 

CPU의 클럭은 바로 이 '0'과 '1'로 이루어진 작업을 처리하는데 있어서 몇 번 꺼지고 켜지는가에 대한 숫자이다.

 

3GHz 의 경우 초당 30억번 꺼지고 켜진다는 어마어마한 동작 속도이다.

 

새로운 CPU가 출시 될때마다 흔히 나노공정 이라는 말을 자주 듣는데 트랜지스터가 양이 많아 질 수록 발열도 많이 발생하게 된다.

 

그렇기 때문에 CPU의 발열을 제어하면서 성능을 더 향상 시키기 위해서 제조공정을 더욱 미세화하여 트랜지스터를 보다 

 

작게 만드는 것이다. 그러면 집적도가 높아져서 사이즈도 작아지고, 소비전력도 낮아지고, 속도도 빨라지고, 같은 면적에 더 많은

 

기능을 넣을 수 있게된다. 

 

더욱 전문적인 내용과 전류의 상황에 대해서 읽어보고 싶으면 여기( http://www.hwlab.com/printF.php?subcode=8261 )를 

 

참고하도록 한다.

 

2014년 8월 기준으로 인텔(INTEL)사에서 최초로 14나노미터(nm)공정으로 제작된 마이크로아키텍처를 양산하고 있는데

 

나노미터는 머리카락의 1/ 1000 굵기, 10억분의 1m 이다.

 

 

   2진수와 데이터의 첫 단위 bit (비트)

 

위의 글을 통해서 컴퓨터는 2진수로 0과 1로만 처리함을 충분히 이해했고, 그렇다면 2진수의 표현 방법에 대해서 알아보자

 

2진수의 계산법은 1,2,4,8,16,32,64 처럼 2씩 곱하여 증가한다.

 

0 0 1 1(2) 의 경우 

 

  2진수 : 0   0    1    1

10진수 : 0 + 0 + 2 + 1 = 3

 

1 1 1 1(2) 의 경우 

 

  2진수 : 1   1    1    1

10진수 : 8 + 4 + 2 + 1 = 15

 

....쉽다.. 마지막으로 한개만 더해보자

 

11011(2) 의 경우

 

  2진수 : 1     1      0      1    1

10진수 : 16 + 8 + 0(4) + 2  + 1 = 27

 

윈도우7 기준으로 아래와 같이 계산기를 실행시키면 프로그래머용 모드에서 

 

Bin(Binary) = 2진수 모드에 11011을 넣고 DEC(Decimal) = 10진수 모드로 바꾸면 27로 바뀐다.

 

장문의 2진수를 일일이 계산할 필요는 없다는 것이다.

 

 

이러한 2진수를 가지고 컴퓨터에는 보통 8bit를 최소 단위로 사용하고 있다.

 

8비트.. 많이 들어본 것 같다... 바로 우리 어릴적 패밀리 게임기의 처리용량이 바로 이 8비트를 기반으로 한 CPU연산인 것이다.

 

다음을 진법을 보면 여기에는 익숙한 개념이 등장한다.

 

8 bit
 2진수 10진수 
 0000 0000
 0000 1111 15 
 1111 1111 255 

 

8비트는 0에서 255까지 갯수(Length)로는 256개의 상태를 표현할 수 있다.

 

바로 DOS용 게임을 할 때 그래픽 카드옵션에서 왜 그토록 256컬러 선택 부분이 많았는지 이해가 갈 것이다.

 

당시에는 256칼라가 8bit로 표현할 수 있는 최고품질이었던 것이다.

 

 

DOS에서 VGA모드를 이용하여 256컬러를 사용한 추억의 게임 페르시안 왕자.

 

그래픽 카드가 떨어지면 16색 이하나 단색(흑백)으로 표현되는 저 클럭모드를 맛보기도 했다.

 

 

   Byte (바이트)
 

기술이 발전하고 시간이 지나면서 비트라는 단위는 다루기에 너무 작고 불편해졌다.

 

그래서 8개의 비트를 묶어서 1 바이트라고 표현한다.

 

비트와 바이트의 관계는 다음의 표를 보면 쉽게 이해가 갈 것이다.

 

Byte
 8bit 1Byte
 16bit 2Byte 
 32bit 4Byte 
 64bit 8Byte 

 

 
 
   bit, Byte, KB, MB, GB, TB, PB, EB, ZB, YB...
 
비트와 바이트의 관계 이후에는 일정한 숫자의 자릿수 단위로만 표현 되기때문에 단위 변환의 관계에 있어서 KB 이후로 모두 동일하다.
 
바이트가 1024개 모이면 킬로바이트, 
 
킬로바이트가 1024개 모이면 메가바이트 
 
메가바이트가 1024개 모이면 기가바이트 
 
기가바이트가 1024개 모이면 테라바이트 
 
테라바이트가 1024개 모이면 페타바이트 
 
페타바이트가 1024개 모이면 엑사바이트 
 
엑사바이트가 1024개 모이면 제타바이트 
 
제타바이트가 1024개 모이면 요타바이트 
 
.... 
 
이런식으로 반복된다.
 
10의 3승인 1000단위로 가는것이 아니라 그 근사수로 2의 10승인 1024로 끊어진다는 점에 유의해야 한다.
 
예를 들어 80GB(80,000MB)라 하더라도 1,024MB의 80배하여 81,920MB가 되는 게 아니다.
 
1,024MB x 75배쯤 하여 76,800MB 정도로 제작한 다음 통상 80GB로 이름을 붙여 출시한다.
 
그래서 우리가 실제 디스크를 연결하면 80GB보다 부족하게 표시된다. 그렇기 때문에 하드디스크 단위에서는
 
1,024는 그냥 1,000으로 생각해도 무관하다. ( 1024단위와 1000단위의 하드디스크 관계, 출처 : http://it.donga.com/93/ )
 
덧붙여서 바이트는 대문자 B(Byte)를 써야 하며, 비트는 소문자 b(bit)로 표기한다. 비트는 8분의1바이트를 뜻하기 때문이다.
 
데이터 용량 단위
 8bit 최소단위 
1Byte 8bit 
 1KB 1024Byte 
 1MB  1024KB
 1GB 1024MB 
 1TB  1024GB
 1PB  1024TB
 1EB 1024PB 
 1ZB  1024EB
 1YB  1024ZB

 

* 글을 쓴 2014년 현재, PB(페타바이트) 부터는 아직 저장장치로 공식 출시되지 않았다.

 

   네트워크에서의 전송속도

 

네트워크 통신 분야에서 전송 속도란 한 지점에서 다른 지점으로 데이터가 이동하는 속도를 의미한다.

 

이것의 단위는 보통 '1초 동안의 수신하는 데이터양'을 나타낸다. 

 

단위로는 초당 비트수(bps : bit per second)를 가장 많이 사용한다. 필요에 따라 초당 문자수(cps : character per second)등을 

 

쓰기도 한다. 일반적으로 하나의 character는 8bit 를 의미한다.

 

또한 컴퓨팅에서 표현하는 비트레이트(bitrate)는 특정한 시간 단위(이를테면 초 단위)마다 처리하는 비트의 수 이다.

 

마찬가지로 비트레이트 또한 초당 비트 수(비트/초 또는 bps)를 사용하여 계산한다. 여기에 킬로,메가,기가,테라와 같은 접두어가 붙는다.

 

 

   인터넷 전송속도

 

- 2018.12.27 수정 : 제보 dsffs 님

 

전송속도인 bps를 B/s 단위로 우리가 알기 쉽게 도출하기 위해 

개념과 공식을 일관되게 수정하였습니다.

 

인터넷 전송 속도를 측정하는 단위로 위에 언급했던 'bps' 를 사용하게 되는데 bps단위는 1024가 아니라 항상 1000 단위이다.

 

bps
 1bps  bit per second
 1Kbps 1,000bps 
 1Mbps 1,000Kbps 

 

그런데 인터넷 서비스 업체에서는 흔히 '100메가'급 속도 라는 말을 자주 표현하는데 이는 100MB를 뜻하는 것 아니다. 

 

'100메가 + 비트퍼세컨트' 라고 표현해야한다. 100MB -> 100Mbps

 

본격적으로 단위를 환산하기 위해서 다음의 개념을 숙지해야한다.

 

bps를 B/s 단위로 변환하기 위해서는 공통점이 있는데 

다음의 예제를 보며 공식을 도출해보자

 

B/s ??? : 1Byte는 8bit, 1개의 문자인 1 Character와 같고 

              이는 8bps = 1cps 이며
               1Byte/s = 1Byte per seconds = 1B/s  와 같다

 

1bps = 1/8cps = 0.125cps = 0.125Byte/s = 0.125B/s

 

1Bps = 8bps = 8/8cps = 1cps = 1Byte/s = 1B/s

 

10Mps = 10,000,000bps = 10,000,000/8cps = 1,250,000cps = 1,250,000Byte/s

          = 1,250KByte/s = 1.25MB/s

 

공식 : 전송속도인 bps를 B/s 로 변환하기

 

  bps / 8 = B/s


    또는

  bps * 0.125 = B/s

 

 

공식을 대입해서 결과를 얻기까지의 과정을 표로 나타내 보았다.

 

속도를 나타내는 단위 bps에 대한 용량 환산
 1bps 1/8cps = 0.125cps  0.125Byte 0.125B/s 
 8bps 8/8cps = 1cps   1Byte 1B/s 
 1kbps 1000/8cps = 125cps  125Byte  0.125KB/s 
10Mbps  10,000,000/8cps = 1,250,000cps  1,250,000Byte  1,250 KB/s1.25 MB/s 
100Mbps 100,000,000/8cps = 12,500,000cps 12,500,000Byte 12,500 KB/s = 12.5 MB/s
 1Gbps 1,000,000,000/8cps = 125,000,000cps  125,000,000Byte 125,000 KB/s = 125 MB/s = 0.125 GB/s 

 

위에 언급했던 100메가 인터넷에 대한 속도도 100Mbps/8 = 12.5MB/s가 나오고, 인터넷 다운로드 시 1초당 12MB를 전송한다는 의미.

 

실제로는 여러가지 요소에 의해서 약 8~9MB 내외로 나온다고 한다. 광고 내용처럼 100% 100Mbps가 나오지 않는다.

 

(하지만 2014년 현재,  8~9MB정도의 속도가 보장되면 이 정도도 매우 훌륭한 인터넷 속도라 할 수 있다.)

 

 

   pps : packet per second

 

보통 네트워크 장비의 성능을 측정할때 많이 사용하는 단위가 바로 pps

 

의미는 1초에 패킷을 몇개를 보낼수 있냐 하는 측정 단위라고 생각하면 된다.

 

pps는 초당 패킷이 몇개 통과 하느냐는 얘긴데..

 

Ethernet 상에서 64Byte~1518Byte의 패킷 크기를 가진것들이 돌아다닙니다.

 

그럼 pps라는 단위는 용량으로 표현하기 좀 힘들죠..

 

대부분 인터넷 상에서 돌아 다니는 패킷의 크기는 64~128Byte가 대부분이고

 

그 중에서도 대부분이 최소 크기인 64Byte 입니다.(예: HTTP 트래픽)

 

그래서 pps랑 용량간의 관계는 정비례 관계는 아니지만 

 

1packet = 64Byte 라는 공식으로 계산하시면 얼추 맞습니다.

 

보통 스위치나 라우터를 제조하는 업체에서 pps 계산시 64byte로 하면 

 

더 높은 pps로 표시되기 때문에 대부분이 64Byte로 계산해서 사용합니다.

 

그러나 사실 2가지로 나눕니다.

 

최소 바이트의 packet으로 나눈 수 하고

 

mixed mode라 해서 64Byte~1500Byte까지 섞어서 보내는 모드로 구분합니다.

 

결론적으로, pps는 대역폭상에서 초당 얼마의 패킷을 처리할 수 있는 지

 

성능에 초점을 맞춘 단위라고 할 수 있습니다. 

 
(http://dokydoky.tistory.com/219)
 
 

   함수화

 

 

자 이제 마무리 시간이다. 모든 개념들을 우리가 프로그래밍 상에서 쉽고 편하게 쓸 수 있도록

 

자바스크립트와 서버사이드 언어로 표현 해 보도록 하자.

 

 

 

javascript : Byte에대한 KB, MB.. 단위환산

 

function fnByteToMB($num, $len) { 	var byte = $num; 	var kb = byte / 1024; 	var mb = kb / 1024; 	return mb.toFixed($len) + 'MB'; //소수점이하n자리 (n+1에서 반올림됨) }  function fnByteToKB($num, $len) { 	var byte = $num; 	var kb = byte / 1024; 	return kb.toFixed($len) + 'KB'; //소수점이하n자리 (n+1에서 반올림됨) }  console.log( fnByteToMB(5612823, 2) ); //5.35MB 

Byte를 KB로 바꾸기위해서는 1024로 한 번 나누고, MB로 바꾸기 위해서는 1024를 두 번 나누어 주면 되므로 

 

위의 함수와 같은 형태로 사용하면 된다. 

 

혹시나 소수점 표기에 제한이 있을 경우 toFixed메서드를 사용하여 소수점 이하까지만 표시하되 

 

소수점 이하+1 에서 반올림하여 표시한다.

 

 

javascript : kbps를 KB/s로 

 

function fnkbpsToKBs($kbps, $len) { 	var bps = parseInt($kbps, 10) * 1000; 	var cps = bps / 8; 	var KBs = (cps / 1000); 	return KBs.toFixed($len) + 'KB/s'; //소수점이하n자리 (n+1에서 반올림됨) }  console.log( fnkbpsToKBs(1, 3) ); //0.125KB/s 

8을 나누고 곱하는 공식을 잘 기억하고 있다면 bps -> b/s 로 표시할 때에는 8을 나눠야 한다는 것을 알고 있을 것이다.

 

인자로 넘어온 $kbps를 1000을 곱하여 bps로 만들어준뒤 8을 나눈다.

 

다시 1000을 나누어서 KB/s 단위로 표현하고

 

혹시나 소수점 표기에 제한이 있을 경우 toFixed메서드를 사용하여 소수점 이하까지만 표시하되 

 

소수점 이하+1 에서 반올림하여 표시한다.

 

 

javascript : Byte를 kbps로

 

function fnByteToMB($num, $len) { 	
  var byte = $num; 	
  var kb = byte / 1024; 	
  var mb = kb / 1024; 	
  return mb.toFixed($len) + 'MB'; //소수점이하n자리 (n+1에서 반올림됨) 
}  

function fnByteToKB($num, $len) { 	
  var byte = $num; 	
  var kb = byte / 1024; 	
  return kb.toFixed($len) + 'KB'; //소수점이하n자리 (n+1에서 반올림됨) 
}  
console.log( fnByteToMB(5612823, 2) ); //5.35MB

8을 나누고 곱하는 공식을 잘 기억하고 있다면 b/s -> bps 로 표시할 때에는 8을 곱해야 한다는 것을 알고 있을 것이다.

 

인자로 넘어온 $Byte를 8을 곱하여 bps로 만들어준뒤

 

다시 1000을 나누어서 kbps로 표현하고

 

혹시나 소수점 표기에 제한이 있을 경우 toFixed메서드를 사용하여 소수점 이하까지만 표시하되 

 

소수점 이하+1 에서 반올림하여 표시한다.

 

 

 

javascript : bps에 따른 단위 변환 - bps,Kbps,Mbps, Gbps,Tbps

 

function fnkbps($num, $len) { 	var bps = $num; 	 	if( bps >= 1000 * 1000 * 1000 * 1000){ // T 		var Tbps = bps / (1000 * 1000 * 1000 * 1000); 		return Tbps.toFixed($len) + 'Tbps';  	}else if( bps >= 1000 * 1000 * 1000){ // G 		var Gbps = bps / (1000 * 1000 * 1000); 		return Gbps.toFixed($len) + 'Gbps';  	}else if( bps >= 1000 * 1000 ){ // M 		var Mbps = bps / (1000 * 1000); 		return Mbps.toFixed($len) + 'Mbps';  	}else if( bps >= 1000  ){  //k 		var kbps = bps / 1000; 		return kbps.toFixed($len) + 'Kbps';  	}else if( bps < 1000 ){ //1000미만 bps 		return bps + 'bps'; 	} } 

bps를 가지고 각각 bps, Kbps, Mbps, Gbps, Tbps로 단위를 변환시켜주는 함수.(별거없는 노가다 수준이다)

 

 

javascript : pps에 따른 단위 변환 - pps,Kpps,Mpps, Gpps,Tpps

 

function fnpps($num, $len) { 	var pps = $num; 	 	if( pps >= 1000 * 1000 * 1000 * 1000){ // T 		var Tpps = pps / (1000 * 1000 * 1000 * 1000); 		return Tpps.toFixed($len) + 'Tpps';  	}else if( pps >= 1000 * 1000 * 1000){ // G 		var Gpps = pps / (1000 * 1000 * 1000); 		return Gpps.toFixed($len) + 'Gpps';  	}else if( pps >= 1000 * 1000 ){ // M 		var Mpps = pps / (1000 * 1000); 		return Mpps.toFixed($len) + 'Mpps';  	}else if( pps >= 1000  ){  //k 		var Kpps = pps / 1000; 		return Kpps.toFixed($len) + 'Kpps';  	}else if( pps < 1000 ){ //1000미만 pps 		return pps + 'pps'; 	} } 

pps를 가지고 각각 pps, Kpps, Mpps, Gpps, Tpps로 단위를 변환시켜주는 함수.(별거없는 노가다 수준이다)

 

 

php : 클라이언트가 아니라 서버에서 Byte를 bps로 변환

 

  function fnByteTobps($byte, $len=2){  	$byte = (double)$byte; 	$bps = ($byte * 8) / 60;  	if( $bps $gt;= 1000 * 1000 * 1000 * 1000 ){ 		$bps = ( $bps / ( 1000 * 1000 * 1000 * 1000 ) ); 		$bps = number_format($bps, $len) . ' Tbps'; 	}else if( $bps $gt;= 1000 * 1000 * 1000 ){ 		$bps = ( $bps / ( 1000 * 1000 * 1000 ) ); 		$bps = number_format($bps, $len) . ' Gbps'; 	}else if( $bps $gt;= 1000 * 1000 ){ 		$bps = ( $bps / ( 1000 * 1000 ) ); 		$bps = number_format($bps, $len) . ' Mbps'; 	}else if( $bps $gt;= 1000 ){ 		$bps = ( $bps / 1000 ); 		$bps = number_format($bps, $len) . ' kbps'; 	}else if( $bps < 1000 ){ 		$bps = number_format($bps, $len) . ' bps'; 	} 		return $bps; } //echo ( fnByteTobps(125) ); //1.00 kbps echo ( fnByteTobps(7592534) ); 

 

Byte를 가지고 bps로 만들기 위해서 * 8을 하고 60을 나눈다.

 

number_format()메서드를 이용하여 소수점을 맞춰준다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

댓글