연산 관련 개념

  • 연산(Operation): 프로그램에서 데이터를 처리하여 결과를 산출하는 것

  • 연산자(Operator): 연산에 사용되는 표시나 기호

  • 피연산자(Operand): 연산되는 데이터
  • 연산식(Expressions): 연산자와 피연산자를 이용하여 연산의 과정을 기술한 것

연산자 정리표

연산자 종류

연산자

피연산자

산출값

기능 설명

산술

+, -, *, /, %

이항

숫자

사칙연산 나머지 계산

부호

+, -

단항

숫자

음수와 양수의 부호

문자열

+

이항

문자열

문자열을 연결

대입

=, +=, -=, *=, /=, %=,

&=, ^=, |=, <<==, >>==, >>>==

이항

다양

우변의 값을 좌변의 변수에 대입

증감

++, --

단항

숫자

1만큼 증가/감소

비교

==, !=, >, <, >=, <=,

instanceof

이항

boolean

값의 비교

논리

!, &, |, &&, ||

단항

이항

boolean

논리적 NOT, AND, OR 연산

조건

(조건식) ? A : B

삼항

다양

조건식에 따라 A또는 B 하나를 선택

비트

~, &, |, ^

단항

이항

숫자

boolean

비트 NOT, AND, OR, XOR 연산

쉬프트

>>, <<, >>>

이항

숫자

비트를 좌측/우측으로 밀어서 이동


연산의 방향과 우선순위

연산자

연산방향

우선순위

증감(++,--), 부호(+,-), 비트(~), 논리(!)

높음

산술(*,/,%)

 

산술(+,-)

 

쉬프트(<<, >>, >>>)

 

비교(<, >, <=, >=, instanceof)

 

비교(==, !=)

 

논리(&)

 

논리(^)

 

논리(|)

 

논리(&&)

 

논리(||)

 

조건(?:)

 

대입(=, +=, -=, &=, /=, %=, &=, ^=, |=, <<=, >>=, >>>=)

낮음


증감 연산자( ++ , -- )

  • 전위형: 피연산자 앞에 위치, 다른 연산보다 증감 먼저 수행 ( int i = 0; ++i )
  • 후위형: 피연산자 뒤에 위치, 다른 연산 수행 후 증감 실행 ( int j = 0; j++; )

논리 연산자( &&, ||, &, |, ^, !)

  • 일반논리AND연산자, 논리곱(&&): 피연산자 모두 true일 경우 연산 결과 true
  • 일반논리OR연산자, 논리합(||): 피연산자 중 하나만 true이면 연산 결과는 true
  • 배타적 논리합(^): 피연산자가 하나는 true이고 다른 하나가 false일 경우에만 연산 결과 true

논리 부정 연산자(!), (=not 연산자)

  • 참 또는 거짓을 부정한다.
  • !true → false
  • !false → true

덧셈연산자(+) / 문자열 연결 연산자(+) 비교

  • print( 4 + 5 ) => 정수 + 정수 => 9 // 덧셈연산자로 더하기 연산 수행
  • print( "4" + 5 ) => 문자열 + 정수 => "45" (문자열) // 문자열 연결 연산자로 4와 5 문자열을 연결
  • print( "4" + "5") => 문자열 + 문자열 => "45"(문자열) // 문자열 연결 연산자로 4와 5 문자열을 연결

0으로 나누기 또는 나머지 연산을 수행할 수 없음(오류 발생)

  • 실수를 0으로 나누면 무한대(Infinity) 결과값
  • 실수를 0으로 나머지 구하기 하면 NaN(Not a Number)결과값

조건연산자

  • 형식 => 항1 : 항2 : 항3;
  • 항1이 참이면 결과값은 항2
  • 항1이 거짓이면 결과값은 항3



클래스 선언 형식

[접근지정자][기타제어자] class 클래스명 [extends Super클래스][implements 인터페이스…]
{
    클래스 내용
}

  • 클래스는 객체를 표현한다.

  • [ ]: 생략 가능

  • 접근지정자(접근제한자): public, protected, default(기본), private     

  • { }: 클래스/메소드/생성자의 내용이 들어가는 블록이다. 빈 내용이더라도 블록은 꼭 써야 한다.
  • 기타제어자: static, final, abstract, native, transient, synchronized, volatile, strictfp 등

주의사항

  • 클래스명은 반드시 대문자로 시작
  • 자바언어는 대소문자 구별
  • 하드코딩(개발도구를 사용하지 않는 코딩) 시, 저장 확장자명을 .java로 할 것


생성자 선언 형식

[접근지정자]class 클래스명(파라미터) 

    생성자 내용
}

  • 선언한 Class가 실제로 생성될 때 실행되는 작업을 기술하는 공간이다.

  • [ ]: 생략 가능

  • 접근지정자(접근제한자): public, protected, default(기본), private     

  • { }: 클래스/메소드/생성자의 내용이 들어가는 블록이다. 빈 내용이더라도 블록은 꼭 써야 한다.
  • 파라미터: 생성자를 통해 클래스를 생성할 때 사용되는 인자값을 받아오는 변수 선언 부

주의사항

  • 생성자는 클래스명과 동일해야 한다.
  • { } 블록 안의 내용이 빈 공간인 것은 기본생성자이다. 그리고 기본 생성자는 생략 할 수 있다. 자바 컴파일러가 자동으로 생성한다.

함수 선언 형식

[접근제한자] [기타제어자] 리턴자료형 함수명([파라미터]) 

    [return 리턴값;]
}

  • 반복되어지는 코딩을 함수로 만들면 코드의 중복이 줄어든다.

  • 함수를 사용하면 구조적 프로그래밍이 가능하다.

  • 함수를 만들기 전에 생각해야할 3가지: 기능, 매개변수(파라미터), 리턴값(리턴자료형)

함수를 호출하는 방법

  • Call by Name: 파라미터 없이 함수명으로만 호출, 예) swap();
  • Call by Value: 파라미터에 값을 주고 호출, 예) swap(30);
  • Call by Reference: 파라미터에 참조 변수 값을 주고 호출, 예) swap(참조변수);
  • Call by Point: 포인트 주소값으로 호출(C언어에서 사용)

메인 함수 선언 형식

public static void main(String[] args)
{
// 실행 내용
}
  • 클래스를 만들고 실제로 실행하기 위해서는 메인(main) 함수가 필요하다.

  • 운영체제로부터 메모리를 할당 받아 프로그램을 실행하는 시작 지점이다.

  • 꼭 암기하자!!


자바는 객체지향 프로그래밍 언어이다. 본격적인 자바 소개에 앞서 프로그래밍 언어에 대해 알아보자.



프로그래밍 언어란?

  • 컴퓨터가 이해할 수 있는 언어는 0과 1로 이루어진 이진 코드(binary code)의 기계어(machine language)이다.

  • 그래서 사람과 컴퓨터가 대화하기 위해서는 사람의 언어와 기계어의 다리 역할을 하는 프로그래밍 언어(programming language)가 필요하다.

  • 프로그래밍 언어는 고급 언어와 저급 언어로 분류 할 수 있다.

고급언어

  • 고급 언어는 컴퓨터와 대화할 수 있는 언어 중에서 사람이 쉽게 이해할 수 있는 언어를 말한다.
  • 즉, 사용자 입장에서의 언어로써 우리가 일반적으로 프로그래밍 언어라고 부르는 C, C++, Java 등이 대표적인 예이다.
  • 고급 언어로 작성된 소스(source)는 컴퓨터가 바로 이해할 수 없기 때문에(기계어가 아니므로), 컴파일(compile) 과정을 통해서 컴퓨터가 이해할 수 있는 기계어로 변환해줘야 컴퓨터가 사용할 수 있다.

  • 컴파일 해주는 것을 컴파일러(compiler)라고 하며, 자바에서는 javac.exe가 담당한다.

  • 우리가 흔히 말하는 프로그램(program)이란 컴퓨터에서 특정 목적을 수행하기 위해 프로그래밍 언어로 작성된 소스를 기계어로 번역한 것을 말한다.

저급언어

  • 저급 언어는 기계어에 가까운 언어로, 어셈블리어가 대표적인 저급 언어이다.
  • 사람이 이해하기 어려워서 배우기 매우 까다롭다.

자바의 역사

  • 자바는 1991년에 썬 마이크로시스템즈(Sun Microsystems)사에서 제임스 고슬링(James Gosling)이 다른 연구원들과 함께 고안한 오크(Oak)라는 언어에서 시작되었다.

  • 오크는 처음에 가전제품에서 사용될 목적이었으나, 인터넷의 등장과 함께 인터넷에서 실행되는 프로그래밍 언어로 사용되었고, 이름을 자바로 변경하였다.

  • 1995년에 자바 1.0을 발표하였고, "Write Once, Run Anywhere"(한번 쓰고 어느 곳에서도 실행)를 약속하였다.

  • 1995년~1999년까지는 윈도우 프로그램 개발이 주류여서 C++언어에 비해 자바는 열세였다. 또, 메모리 및 CPU를 지나치게 많이 사용한다는 문제점이 있었다.

  • 하지만, 1999년도부터 인터넷이 활성화되면서 웹 애플리케이션 구축을 위해 자바 활성화되었다. 단 한번 작성으로 모든 곳에서 실행 가능한 언어는 자바뿐이었기 때문이다.


자바의 특징

자바는 이식성이 높은 언어이다.

  • 이식성이란 서로 다른 실행 환경을 가진 시스템 간에 프로그램을 옮겨 실행할 수 있는 것을 말한다.

  • 예를 들면 윈도우 운영체제에서 실행하는 프로그램을 리눅스 또는 유닉스에서 실행할 수 있으면 이식성이 높은 것이다.

  • 자바는 자바 실행 환경(JRE:Java Runtime Environment)이 설치되어 있는 모든 운영체제에서 실행 가능하다.

자바는 객체 지향 언어이다.

  • 프로그램을 개발하는 기법으로 부품에 해당하는 객체들을 먼저 만들고, 이것들을 하나씩 조립 및 연결해서 전체 프로그램을 완성하는 것을 객체 지향 프로그래밍(OOP, Object Oriented Programming)이라고 한다.

  • 객체 지향 프로그래밍에 사용되는 언어를 객체 지향 언어라고 한다.
  • 자바는 객체를 만들기 위해 설계도인 클래스를 작성하고, 객체와 객체를 연결하여 목적에 맞는 프로그램을 만들어 낸다.
  • 자바는 객체 지향 언어의 특징인 캡슐화, 상속성, 다형성을 완벽하게 지원한다.

자바는 함수적 코딩 스타일을 지원한다.

  • 객체 지향 프로그래밍 이전에 Lisp 또는 Scheme와 같은 함수적 프로그래밍 언어들이 있었지만 큰 호응을 얻지 못했다.
  • 최근에 대용량 데이터 병렬 처리와 이벤트 지향 프로그래밍을 위해 함수적 프로그래밍이 다시 부각되고 있다.
  • 자바는 자바 8부터 람다식(Lambda Expressions)을 지원하여 함수적 프로그래밍을 지원한다.

  • 람다식을 사용하면 컬렉션의 요소를 필터링, 매핑, 집계 처리하는데 쉬워지고, 코드가 매우 간결해진다.

자바는 메모리를 자동으로 관리한다.

  • C++은 메모리에 생성된 객체를 제거하기 위해 개발자가 직접 코드를 작성해야 한다. 만약 이 작업을 성실하게 해주지 않으면, 프로그램은 불완전해지고 갑자기 다운되는 현상을 겪게 된다.

  • 자바는 개발자가 직접 메모리에 접근할 수 없도록 설계되었으며,. 메모리는 자바가 직접 관리한다.
  • 객체 생성 시 자동으로 메모리 영역을 찾아서 할당하고, 사용이 완료되면 쓰레기 수집기(Garbage Collector)를 실행시켜 자동으로 사용하지 않는 객체를 제거한다.

  • 자바 개발자는 메모리 관리의 수고를 덜고, 핵심 기능 코드 작성에 집중할 수 있다.

자바는 다양한 애플리케이션을 개발할 수 있다.

  • 자바는 다양한 운영체제에서 실행되는 프로그램을 개발할 수 있다.
  • 또, 단순한 콘솔 프로그램에서부터 클라이언트용 윈도우 애플리케이션, 서버용 웹 애플리케이션, 그리고 모바일용 안드로이드 앱 등 거의 모든 곳에서 실행되는 프로그램을 개발 할 수 있다.

  • 자바는 다양한 운영체제에서 사용할 수 있는 개발 도구와 API를 묶어 에디션(Edition) 형태로 정의하고 있다.

멀티 스레드(Multi-Thread)를 쉽게 구현할 수 있다.

  • 운영체제에 따라서 멀티 스레드를 구현하는 방법이 다르지만, 자바는 스레드 생성 및 제어와 관련된 라이브러리 API를 제공하므로 운영체제에 상관 없이 멀티 쓰레드를 쉽게 구현할 수 있다.

동적 로딩(Dynamic Loading)을 지원한다.

  • 자바 애플리케이션은 클래스로부터 생성 된 여러 개의 객체가 서로 연결되어 실행된다.

  • 애플리케이션 실행 시 모든 객체가 생성되지 않고, 객체가 필요한 시점에 클래스를 동적 로딩해서 객체를 생성한다.

  • 또, 개발 완료 후 수정 사항이 발생하더라도 해당 클래스만 수정 하면 되므로 전체 애플리케이션을 다시 컴파일 할 필요가 없다. 따라서 유지보수를 쉽고 빠르게 진행 수 있다.

막강한 오픈 소스 라이브러리가 풍부하다.

  • 자바는 오픈 소스(Open Source) 언어이므로 자바 프로그램에서 사용하는 라이브러리 또한 오픈소스의 양이 방대하다.
  • 고급 기능을 구현하는 코드를 작성하는 대신 검증된 오픈소스 라이브러리를 사용하면 애플리케이션 개발 기간을 단축하여 생산성을 높이고 안정성도 높일 수 있다.

사물인터넷(IoT, Internet of Things)



  



  오프라인의 산업을 크게 확장시킨 18세기 중반 영국에서 시작된 산업혁명에 이어, 온라인 산업을 크게 확장시킨 20세기 정보화 혁명이 있었고, 우리는 얼마전까지 정보화 시대에 살았다. 그러나 지금은 초연결 혁명이 일어나고 있다. 물리적 공간과 가상 공간이 결합하여 모든 것이 인터넷과 연결되는 시대, 우리는 이를 사물인터넷 시대라 부른다.

  스마트팩토리, 스마트카, 스마트홈이라는 말을 들어본 적이 있는가? 직역하자만 똑똑한 공장, 똑똑한 자동차, 똑똑한 집이라는 뜻인데 어떻게 사물이 똑똑해질 수 있다는 것인가? 이는 사물인터넷을 개념을 이해하면 답을 구할 수 있다. 2000년대 후반, 유럽의 한 RFID 학회에서 언급된 사물인터넷 개념은 SF 공상영화에서나 나올 법한 일들로 치부되었다. 그러나 2015년 현재, 우리는 많은 기기들과 연결되고 있다. 우리가 늘 손아 쥐고 다니는 스마트폰을 중심으로, 센서와 통신시스템을 가진 사물들과 연결되면서 더 스마트한 삶을 누릴 수 있게 되었다.


 정의


  사물인터넷 기술이란 전홍배(2015)에 따르면, 물들이 네트워크 통신기술을 이용해 서로 소통할 수 있는 프레임워크 및 연관기술들을 지칭하는 말이다. 고유 ID 및 센서와 통신 기능을 탑재한 우리 주변의 사물들이 유무선 통신 네트워크에 연결되어 스스로 정보를 수집 및 분석하고, 이를 기반으로 사람과 사물, 사물과 사물에 대한 모니터링 및 제어, 최적의 서비스 제공을 통해 인간의 삶을 더욱 이롭게 하는 기술이다.
  즉, 각각의 사물들은 각각의 ID를 가지며, 하나의 객체로써 작동하는 것이다. 현재 우리의 모습과 사물인터넷 시대의 모습을 한 번 비교해보면, 현재 우리는 집에 들어가기 위해서는 현관문을 직접 열어야 하며, 집에 들어온 후 불을 키기 위해서는 직접 스위치를 켜야 한다. 냉방 혹은 난방을 위해 난방기 또는 에어컨을 리모콘을 통해 가동시켜야 한다. 샤워를 하기 위해 화장실 불을 키고 샤워기를 틀어야 하며, 적절한 온도를 맞추기 위해 그 순간엔 장인의 손이 되어 온도를 맞춘다.




  반면, 사물인터넷 시대에서는 현관문 앞에 서면 자동으로 주인을 식별하고 문이 열린다.(식별하기 위한 도구는 생체정보 인식, 카메라 인식 등 여러가지가 있을 수 있다.) 집에 들어서면 설정된 방식대로 (전기를 아끼기 위해 일부러 불을 안 킬수도 있고, 자동으로 내 방만 불이 켜지게끔 설정할 수도 있다) 불이 켜지고, 디지털 온도계가 학습된 적정 온도를 맞춰주기 위해 자동으로 냉/난방기를 가동시킨다. 이 후 화장실에 들어가 샤워기를 켜면 학습된 적정 온도의 물이 나온다.
  이 정도면 별거 아니라고 생각할지도 모르겠지만, 이처럼 하나의 기계가 스스로 정보를 수집 및 분석하여 학습하고, 다른 사물과 통신하며 제어할 수 있고, 공유할 수 있는 사물들이 집 뿐만 아니라 도처에 존재하게 된다면 어떨까? 우리가 상상속에 생각하던 공상과학들이 현실이 될 수 있다. 
  앞어 스마트카를 언급 했었는데, 무인자동차는 주변 사물들을 인식하며 학습된 알고리즘을 통해 움직일 것이다. 하지만, 더 중요한 것은 다른 사물들과 정보 공유이다. 주행 중이던 앞 차가 급정거를 했을 때, 앞 차가 급정거 직전에 스스로 판단하여 급정거 할 요인이 생기면 바로 뒷차에 정보를 공유한다고 생각해보자. 앞차가 급정거 후에, 뒷차가 '앞차가 급정거 했다'는 정보를 받고 자신도 급정거를 하는 동작을 수행하는 것보다, 더 빠르게 속도를 줄이는 동작을 수행하여 더 정확한 자동운전 기능이 실행될 수 있다. 이러한 기능은 지난 2015년 2월 11일 발생한 영종대교 106대 추돌사건과 같은 일은 더 이상 생기지 않을 것이다.



 특징

 1. 쌍방향과 가시성
  사물인터넷은 각각의 사물들이 쌍방향으로 의사소통이 가능한 특징을 가진다. 스마트폰이 나온 이후, 우리는 쌍방향 생활을 '수동적'으로 해왔다. TV영상, 뉴스 등을 보고 바로 댓글을 달아 자신의 의사를 표현할 수 있었다. 앱을 통해 여러 서비스를 이용할 때만 수동적으로 단방향의 정보를 보내거나 받아왔다.
  그러나 사물인터넷 시대의 사물들은 스스로 정보를 수집하고 처리하고 공유하며 각각의 사물들이 연결되며 '능동적'으로 의사소통을 한다. 앞서 스마트카 예를 들었던 것처럼, 스스로 판단하여 주변 사물들에 정보를 전달하며, 그 사물들이 재전송할 필요가 있는 정보는 또 바로 받아서 처리한다. 이러한 능동적인 쌍방향 의사소통은 무한한 인터넷 세계 속에서 더욱 더 많은 정보를 창출하여 정보의 양이 어마어마하게 늘어날 것이다. 또 각 객체들이 도처에 존재하므로 정보의 흐름을 쉽게 알 수 있는 '가시성'도 확보될 것이다.

  2. 클라우드 컴퓨팅과 연결
  모든 사물들이 정보를 수집하고 처리하고 저장하는 등의 일을 수행하며서 그 정보들을 계속 쌓아놓고 있는다면 저장용량이 많이 필요할 것이다. 이는 사물들의 크기가 커지고 비용이 증가할 수 밖에 없다. 그러나 이러한 정보들을 클라우드 컴퓨팅을 통해 웹상에 정보를 저장한다면 사물 자체에 드는 비용은 크게 줄어들 것이며, 사물인터넷 시대의 개막을 더욱 앞당길 것이다. (아니, 이미 열렸다고 보며 확장 속도를 촉진시킬 것이다)
  또, 하나의 사물이 모든 정보를 처리한다면 그 주변의 비슷한 기능을 수행하는 사물들과 처리하는 정보와 중복되는 것이 많을 것이다. 이느 큰 낭비이며, 하나의 사물이 가져야할 사양이 높다는 것을 의미한다. 그러나 클라우드 컴퓨팅을 통해 사물들간에 실시간으로 필요한 정보를 주고받으며, 정보를 처리한다면 더 효율적으로 정보를 처리할 수 있다. 그리고 사물들이 가져야할 사양이 높을 필요가 없어, 이 또한 비용을 감소시킨다.

  3. 융합 및 통합을 주도
  미래창조과학부외 관계부처 합동으로 이뤄진 '정보통신전략위원회'(2014)에 따르면 ICBM(IoT, Cloud, Bigdata, Mobile) 융합형 서비스를 발굴하여 창의적인 사물인터넷 시장을 창출하고 확산시키는 것을 처번째 과제로 삼았다. 이처럼 사물인터넷은 독립적으로 가능할 수 없고, 사물들이 정보를 처리하고 공유하기 위한 클라우드 서비스와 수많은 정보들을 처리하는 빅데이터, 그리고 어느 곳에서나 연결될 수 있는 모바일이 서로 융합하여야만 가능한 것이다. 이러한 융합은 기존에 볼 수 없었던 새로운 산업을 만들 뿐만 아니라, 기존의 산업들간에 '새로운 연결' 도 만들어낼 수 있다.

  4. Service-oriented Business Model의 지향
  사물인터넷 시대의 비즈니스 모델은 서비스 지향적이다. 즉, 사물인터넷 요소가 들어간 어떠한 제품을 파는 것이 목적이 아니라, 그 제품을 통해 지속적으로 서비스를 제공해야하는 것이다. 단순하게 설정된 특정 온도로 집안 전체의 온도를 조절할 수 있는 디지털 온도계를 사는 것이 아니라, 온도계가 스스로 학습하여 지속적으로 적절한 온도를 맞춰주는 것이다. 우리가 지속적으로 사용하는 많은 물품들이 제품 그 자체로써 좋아서 사용하는 것이 아니라, 그 제품이 제공하는 서비스를 지속적으로 사용하기 때문이다. 스마트폰도 아무리 좋은 제품이라도 제공하는 서비스가 형편없으면 사용하지 않는 것과 같다.



 요소 기술


  1. 사물ID
  사물인터넷 시대에서는 각각의 사물들이 주체가 된다. 각 사물들은 서로 정보를 공유해야 하고, 사람과 연결을 해야 한다. 이 때 각 사물들이 사물ID를 가지고 있어야만 원하는 특정 사물에 연결이 가능하다. 우리가 인터넷을 사용할 때도 IP주소를 받는 것과 동일하다.

  2. 사물 정보 디바이스
  사물인터넷 시대의 각 사물들은 주변을 인식하는 센서(Sensor), 정보를 수집하고 처리하고 판단하는 컴퓨터(Chipset), 다른 사물들과 연결하는 통신기능, 저전력 기술, 초소형 기술이 집합되어 구성된 디바이스다. 이 중 센서 기술이 가장 중요하다. 각 사물들은 정보를 얻기 위해 먼저, 주변 환경을 인식해야 한다. 그렇기 때문에 센서 기술이 사물의 기능의 척도가 되어 가장 중요하다.

  3. 네트워크
  네트워크 기술은 사물이 각 사물들, 플랫폼과 연결하는데 중추적인 역할을 한다. 기존의 통신 및 네트워크 기술에는 WLAN, Wi-Fi, 3G/LTE, Bluetooth, NFC 등이 있다. 각 네트워크 기술들마다의 특징과 필요성에 따라 달리 사용되어진다. 이러한 통신 기술에는 표준이 중요한데, 아직 사물인터넷 네트워크 프로토콜 표준은 정해지지 않았다. MQTT(Message Queuing Telemetry Transfer) 프로토콜이 사물인터넷 표준으로 대두되고 있다.

  4. 플랫폼&서비스
  사물인터넷에서 플랫폼의 역할은 디바이스에서 수집한 데이터의 저장, 관리, 가공, 분석 및 제공까지의 모든 일련의 처리 기술들이 플랫폼 하에서 작동이 시키는 것이다. 전홍배(2015)에 따르면, 플랫폼 기술요소에는 쿼리엔진/리포팅, 제어/관리, 미들웨어 기술들이 있으며, 서비스 요소 기술로는 자율컴퓨팅, 초소형OS, 상황인지, 위치인식 기술들과 같은 소프트웨어 기술들과 데이터의 처리, 저장 및 분석 기술, 보안과 관련한 암호화, 개인정보보호 요소 기술들이 있다.
  쉽게 말하면, 도처에 있는 각 사물들이 보내오는 데이터를 저장부터 제공까지의 과정들을 통합적으로 수행하는 것이다. 그래서 여러 기업들이 앞다투어 사물인터넷 플랫폼을 구축하고 입지를 세우려는 것이다. 예를 들면, 삼성 스마트홈이라고 한다면 집안의 여러 스마트 기기들이 삼성이 제공하는 플랫폼 하에서 작동이 되어야 서로 데이터를 주고 받고, 사용자는 각 사물들을 하나의 플랫폼 하에서 조작, 관리 및 통제 할 수 있게 된다.


 참고문헌

전홍배(2015), "사물인터넷 기술의 개념, 특징 및 전망", Entrue Journal of Information Technology Vol.14, No.1 / Special Issue 2015.
미래창조과학부 외 관계부처 합동(2014), "사물인터넷 기본계획", 2014년 5월 8일.


빅데이터 이해하기

빅데이터란 무엇인가?

빅데이터(Big Data)란 기존 방식으로 저장/관리/분석하기 어려울 정도로 큰 규모의 자료를 의미한다. 데이터의 결합된 정보의 복잡성과 분석과정에서 요구되는 Speed도 기존의 의미와 구별된다(디지에코 보고서, 2015).

McKinsey(2011)에 따르면, 빅데이터는 DB의 규모에 초점을 맞춘 정의로 일반적인 데이터베이스 소프트웨어가 저장, 관리, 분석할 수 있는 범위를 초과하는 규모의 데이터를 의미한다. 반면, IDC(2011)는 빅데이터를 DB가 아니라 업무수행에 초점을 맞춰 정의한다. 빅데이터는 다양한 종류의 대규모 데이터로부터 저렴한 비용으로 가치를 추출하고 (데이터의) 초고속 수집, 발굴, 분석을 지원하도록 고안된 차세대 기술 및 아키텍처이다.

이처럼 빅데이터는 다양하게 정의된다. 결론적으로, 빅데이터는 단순한 데이터의 양의 증가 혹은 규모뿐 만 아니라 데이터를 분석 기법, 데이터 분석을 위한 소프트웨어 등의 기술 등의 모든 개념을 포괄한다.

빅데이터의 출현 배경

인터넷이 상용화 된 1990년대 이후, 지금까지 쌓여온 수많은 데이터와 더불어 2009년 스마트폰이 대중화 되면서 기하급수적으로 늘어난 데이터와 실시간으로 생성되는 수많은 데이터들이 정리되지 않고 있다.

그림 1 – Every 60 Seconds (HP Business Whitepaper, 2012)

스마트폰의 등장과 보급의 확대로 사람들이 언제 어디서든 인터넷을 이용할 수 있다. 또, SNS를 통해 실시간으로 자신의 의견을 직간〮접적으로 표현한다. 트위터나 페이스북 등에 어떤 제품과 서비스에 대한 글을 남긴다. 또, '배고프다', '졸리다' 등의 기본욕구(need)를 표출하기도 하며, 무엇인가를 사고 싶거나 여행을 가고 싶다는 등의 욕구(want)를 표현한다. [그림 1]과 같이 1분마다 엄청난 데이터들이 생성되고 있다.

그림 2 – 미국 업종별 데이터 현황(McKinsey Global Institute, 2011)

[그림 2]에서 보는 것과 같이 미국 업체들이 2009년 까지 쌓아온 데이터의 양의 총합을 합한다면 약 17,283 TB이다. 이는 약, 16.88 PB이다. 6년전 자료이지만, 그간 쌓아온 데이터의 양이 엄청나다.

그림 3 – 전 세계 데이터의 양(IDC, 2014)

IDC(2014)에 따르면, 2013년 전 세계의 데이터는 4.4 ZB에 이르고, 2020년에는 무려 44 ZB에 이를 것이라고 추정한다. 그만큼 산업에서 쌓여온 데이터 양이 엄청나고 실시간으로 생성되는 데이터의 양이 계속 증가하고 있다.

데이터의 양이 엄청나게 증가하고 있는 반면, 데이터를 처리하는 기술이 발전함에 따라 데이터를 저장하는 하드웨어의 가격이 낮아지고 있다.

그림 4 – 세계 정보 저장 수용량(Hilbert, M., & Lopez, P. 2011)

[그림 4]를 보면 1993연 3% 수준에 불과했던 디지털 데이터는 2002년 디지털 시대를 시작으로, 2007년 기준 전 세계의 정보 중 94%가 디지털로 저장되어 있다. 최근에는 클라우드를 통해 데이터를 저장하고 있는 추세이므로 디지털 상의 정보는 더욱 더 늘어날 것으로 전망 된다. 클라우드도 물리적으로는 하드웨어로 이루어진 데이터 센터를 기반으로 디지털 상에 존재하는 것이지만, 기존 저장장치의 한계를 뛰어넘어 공간의 한계를 극복하였다.

그림 5 – 저장 장치의 기가바이트 당 달러 가격(Gartner, 2013)

[그림 5]를 보면, 기가바이트 당 달러의 가격이 기하급수적으로 낮아지고 있고, 속도 면에서 하드디스크에 우위를 점하고 있는 SSD가 2017년에는 하드디스크와 비슷한 가격을 가지게 될 것이다. 또, 기존에 하드디스크를 능가하는 저장 용량을 가지게 된다.

결론적으로, 산업 내 방대한 데이터의 축적, 실시간으로 생성되는 데이터의 양의 지속적인 증가, 전 세계 데이터 양의 증가, 데이터 저장 장치의 발전, 데이터 처리 기술의 발전 등 복합적인 원인으로 인해 빅데이터가 출현한 것이다.

빅데이터의 기본 형태와 종류

"데이터란 숫자, 영상, 단어의 형태로 된 의미의 단위를 뜻한다. 이러한 의미를 가진 Datum (데이터의 단수)이 여러 개의 집합체를 이루어 Data 를 형성하게 되면 자료가 되며 이런 다양한 자료를 바탕으로 의미 있는 가치가 형성되면 정보(Information)라고 부르게 된다."(DLAB, 2014)

데이터를 기본 형태에 따라 구분하면 [표 1]과 같다. "차가 빠르다"는 질적 자료이고, "도로에 차가 50대 있다"는 양적 자료이다. 양적 자료도 이산형 자료와 연속형 자료로 나뉘는데, 쉽게 말하면 이산형 자료는 셀 수 있는 계산 자료이고, 연속형 자료는 셀 수 없는 측정 자료이다. 예를 들면, "도로에 차가 50대 있다"는 이산형 및 계산 자료이지만, 각 차의 주행 속도는 측정되는 자료인 것이다.

질적 자료

(Qualitative Data)

양적 자료

(Quantitative Data)

이산형 자료

(Discrete Data)

연속형 자료

(Continuous Data)

계산 자료

(Counted Data)

측정 자료

(Measured Data)

표 1 - 데이터의 기본 형태에 따른 구분

데이터는 또 정형 데이터와 비정형 데이터로 구분할 수 있다. 정형 데이터는 단순한 형태로 정리가 잘 되어있어 분석하기 쉬운 데이터 형태이다. 기존에 데이터 분석에 주로 사용되던 형태이다. 반면, 비정형 데이터는 복잡한 형태로 잘 정리가 안 되어 있어 분석하기 힘든 데이터 형태이다. 정형 데이터는 기존의 기업 또는 기관에서 주로 가지고 있는 고객 정보와 매출 등이 있다. 비정형 데이터는 소셜 데이터와 영상, 이미지 등의 다양하고 복잡한 형태의 데이터들을 통칭한다. 반정형 데이터는 데이터 속성인 메타데이터를 가지며 일반적으로 스토리지에 저장되는 데이터 파일이다.

정형 데이터

고정된 필드에 저장된 데이터

RDBMS

반정형 데이터

고정된 필드는 아니지만 스키마를 포함하는 데이터

XML, HTML

비정형 데이터

고정된 필드에 저장되어 있지 않은 데이터

텍스트, 이미지, 동영상

표 2 - 데이터의 형태에 따른 구분

스마트폰의 보급률이 증가됨에 따라 소셜 데이터, 영상, 이미지, 음성 등의 정리하기 어려운 비정형 데이터의 수도 많이 생겨나고 있다. 기존에 데이터 분석 기법은 정형 데이터를 분석하기엔 용이했지만, 정리가 안 되고 복잡한 비정형 데이터를 분석하기 어려워지면서, 빅데이터 분석 기법들과 관련 하드웨어들이 주목을 받고 있다.

빅데이터의 특징

빅데이터는 단순히 큰 데이터가 아니라 부피가 크고, 변화의 속도가 빠르며, 속성이 매우 다양한 데이터라는 세 가지 특징을 가진 큰 데이터를 빅데이터로 정의할 수 있다. (한국방송통신전파진흥원, 2013). 앞에서 계속 말해왔듯이, 빅데이터는 말 그대로 큰 데이터로 그 크기가 엄청나다. 또, 기존의 정형 데이터가 아닌 비정형 데이터가 계속 증가하고 있고, 영상, 이미지, 소셜 미디어 등 다양하게 존재하고 있다. 속도 측면에서는, 예전에는 어제의 데이터를 가지고 오늘 활용한다면, 빅데이터는 현재의 데이터를 처리하는 실시간 데이터를 말한다.

그림 6 – 빅데이터의 3가지 특징(3V),

(출처 : "빅데이터:산업 지각변동의 진원", 삼성경제연구소, 2012)

최근에는 기존의 3V 특징에 진실성(Veracity), 시각화(Visualization), 가치(Value) 등의 6V 개념으로 확대되고 있다. 앞서 말한 빅데이터의 3V 특징이 빅데이터의 본질이고, 추가된 3V는 그 빅데이터 분석의 개념이다. 수 많은 데이터 중에서 의사결정에 활용할 수 있는 진실된 데이터를 찾고 이를 시각화하여 비즈니스에 실현될 가치를 전달하는 것이 빅데이터 분석의 핵심이기 때문이다. 즉, 확장된 개념의 빅데이터는 기존의 빅데이터의 특징과 분석을 포함하는 개념이다. 그래서 최근에는 빅데이터 분석을 결과를 쉽게 보여주기 위해 인포그래픽과 같은 다양한 시각화 기법을 활용하는 사례가 늘고 있다. 이미 빅데이터 디자이너라는 직군이 생겨날 정도이다.

빅데이터를 통해 기회를 잡아라

기업들은 빅데이터 속에서 Business Intelligence(BI)를 도출함으로써 새로운 기회를 가질 수 있다. 그래서 데이터 관련 기업들은 각종 데이터 분석 소프트웨어와 솔루션, 데이터 센터, 클라우드 서비스 등을 기업들에게 제공하고 이익을 취하기 위해 빅데이터를 키워드 마케팅으로 활용하고 있다. 다르게 생각하면, 기존에도 행해오던 데이터 분석을 마치 새로 시작하는 것처럼 들리기도 한다. 빅데이터가 데이터 관련 기업들의 마케팅 용어이든 아니든, 넘쳐나는 데이터 속에서 유용한 정보를 찾게 해주는 빅데이터가 기업들에게 다가오는 파괴적인 미래를 대비할 혜안을 가져다 줄 것임에는 틀림없다. 또한, 개발도상국들과 제 3세계에 인터넷의 보급률이 높아지고 스마트폰이 대중화 된다면 데이터의 증가율은 더욱 높아질 것이고, 기회를 찾는 수많은 비즈니스맨들에게는 빅데이터를 분석을 활용하여 데이터의 홍수 속에서 진주를 발견할 수 있을 것이다.

참고문헌

DLAB(2014), 초보자를 위한 빅데이터 이해하기.

디지에코 보고서 Issue&Trend(2015), Big Data의 이해와 활용.

삼성경제연구소(2012), 빅데이터:산업 지각변동의 진원.

한국방송통신전파진흥원(2013), 빅데이터 활용단계에 따른 요소기술별 추진동향과 시사점.

Gartner(2013), Market Trends: Evolving HDD and SSD Storage Landscapes.

HP Business Whitepaper(2012), Harness the power of Big Data,

Hilbert, M., & Lopez, P.(2011), The World's Technological Capacity to Store, Commuicate, and Compute Information. Science, 332(6025), 60-65.

IDC(2011), Extracting Value from Chaos.

McKinsey Global Institute(2011), Big data: The next frontier for innovation, competition, and productivity.



+ Recent posts