본문 바로가기

블로그

LG CNS 기술블로그 DX Lounge에서 최신 IT 소식을 만나보세요!

AI/Data

데이터 홍수시대, 이제는 선택이 아닌 필수! 동시성 프로그래밍

2016.04.22

안녕하세요! LG CNS 대학생 기자단 박찬호입니다.

최근 하드웨어의 발전은 과거에 상상하지 못했던 산업들을 가능하게 만들고 있습니다. 2012년 아파치에서 발표한 분산처리시스템 하둡이나 최근 연구가 심화되고 있는 인공지능 사업 모두가 하드웨어의 발전에 따른 사례라고 할 수 있는데요.

하지만 소프트웨어의 발전은 이에 비해 더디게 진행되면서, 개발에 사용되었던 기존 언어들이 최신 인프라 구축 또는 빅데이터 처리에 있어 취약점을 보이게 되었습니다. 따라서, 소프트웨어를 개발하는 사람들은 데이터 분산화를 해결하면서도 기기의 성능을 모두 활용할 수 있는 동시성 프로그래밍에 대해 관심을 갖고 설계를 하기 시작했습니다.

오늘은 이 동시성 프로그래밍에 대해 알아보겠습니다.

동시성 프로그래밍의 등장배경

혹시 무어의 법칙이라고 들어보셨나요?

l 무어의 법칙((Moore’s law)

무어의 법칙(Moore’s law)은 인텔의 공동 설립자인 고든 무어가 만든 법칙으로 반도체 집적회로의 성능이 18개월마다 2배씩 증가한다는 경험적인 관찰에 바탕을 둔 법칙인데요. 사람들은 컴퓨터 하드웨어의 발전을 질적인 향상보다 양적인 증가로 처리하기 시작했습니다.

이에 따라 소프트웨어 산업은 양적으로 증가한 하드웨어를 감당할 수 없게 되었는데요. 소프트웨어 개발 전문가 허브 서터(Herb Sutter)는 “공짜 점심은 끝났다”라는 유명한 말을 남김으로써 하드웨어를 따라가지 못하는 소프트웨어 산업에 문제점을 제기했습니다.

l 싱글 스레드와 멀티 스레드의 차이

결국 전문가들은 이러한 분산화의 문제를 해결할 수 있는 멀티스레딩(multi-threading)1 기술을 탑재한 동시성 프로그래밍의 필요성을 느끼게 되었습니다.

멀티스레딩은 위의 그림과 같이 CPU에 작업을 소프트웨어적으로 나눠주는 방식으로, 일을 처리하는 데 있어 잉여 부품 없이 모든 부품을 활용하자는 취지를 가지고 있습니다.

동시성 프로그래밍의 필요성

기존의 자바와 같은 객체 지향언어2들도 멀티스레드를 통한 동시성을 진행하고 있었는데요. 다만 이러한 언어들은 언어의 특성상 다중 처리작업 시 코드가 변경될 수 있다는 큰 단점이 있습니다. 따라서 전체 프로그램의 안전을 보장할 수 없게 되었고, 이러한 점에서 동시성 프로그래밍이 다시 주목 받게 되었습니다.

동시성 프로그래밍은 함수 프로그래밍3의 성향을 보이기도 하는데요. 이는 쉽게 말해서 많은 데이터 속에서도 시스템 고유의 성질을 유지시킬 수 있는 성질을 갖는다는 점을 의미합니다. 따라서 동시성 프로그래밍은 이러한 성질을 바탕으로 분산처리에 이 점을 가져갈 수 있습니다.

동시성 프로그래밍의 특징

동시성 프로그래밍은 이러한 속성들 외에도 시스템적으로 동시성과 병렬성이라는 두 가지 큰 특징도 가지고 있는데요. 이는 하드웨어를 활용하는 대표적 방법론의 차이입니다.

동시성은 기존의 프로그래밍을 하나의 CPU로 1,2,3 순서의 순차작업을 하는 것을 뜻합니다. 하지만 기존 프로그래밍들의 경우에 하나의 작업을 여러 개로 나눠서 우선순위에 따라 처리해왔는데요. 동시성 프로그래밍으로 오면서 아래 그림과 같이 한 번에 여러 개의 함수를 동시에 작동시킬 수 있게 되었습니다.

l Go언어의 Goroutines 동작장면 (출처: https://go-tour-kr.appspot.com/#63)

또 다른 특징인 병렬성은 발전한 CPU를 따라가기 위해 소프트웨어의 성능 향상을 목적으로 스레드를 분산해 멀티 프로세서로 사용함을 의미하는데요. 쉽게 말해 CPU에 부하를 한 번에 얼마씩 물리적으로 나누는가의 문제를 다룬다고 할 수 있습니다.

이러한 특징은 동시성 프로그램이 데이터를 처리할 때 물리적•논리적 부하를 모두 고려한 프로그램임을 보여줍니다. 그러면 이렇게 다양한 특징들이 있는 동시성 프로그래밍이 실제로 어떻게 만들어지고 있고, 발전하고 있는지 알아보도록 하겠습니다.

동시성 프로그래밍의 현황 그리고 앞으로의 전망

① C언어의 장점과 동적 언어의 장점을 동시에, Google 사 Go

Go 언어는 B언어의 창시자이자 유닉스의 아버지 켐 톰슨과 현재 널리 사용되는 UTF-8의 개발자 인 롭 파이크, 썬(Sun Microsystems)의 자바 핫스팟 컴파일러(Java HotSpot compiler) 및 크롬 브라우저의 자바스크립트 엔진 개발에 참여했던 로버트 그리스머가 합동으로 설계했습니다.

Go 언어의 특징은 컴파일 언어로써 컴파일 속도 즉, 실행속도가 매우 빠르고 간결한 것을 알 수 있는데요. 이는 Go언어가 전반적으로 C언어에서 영향을 받았다는 사실을 알 수 있습니다. 하지만 기존 C언어로는 해결할 수 없었던 ‘가비지 콜렉션’4 동시성 문제를 라이브러리5 만으로해결함으로써 좀 더 진화한 프로그래밍임을 보여줍니다.

l 동기 방식과 비동기 방식의 차이

Go 언어의 동시성은 고루틴(GoRoutines)이라는 자체 비동기 메커니즘을 통해 이뤄집니다. 비동기 메커니즘은 작업 진행 시 추가적인 작업 진행에도, 업무의 순서를 늦추지 않고 동시에 진행하는 방법을 말하는데요. 이렇게 각각의 고루틴이 병렬적으로 작동하면서 서로에게 메시지 값을 주고받는 형태를 취함으로써 프로그래밍의 속도를 향상시킬 수 있게 되었습니다.

② 객체지향과 함수프로그래밍이 동시에, 다중패러다임언어 Scala

l 출처: https://namu.wiki/w/Scala

스칼라(Scala)는 ‘확장 가능한 언어(Scalable language)’의 약자로, 기존에 자바언어에 확장과 같은 성격을 보이고 있습니다. 따라서 자바 프로그램과 같이 자바 가상머신(JVM) 위에서 실행되고 같은 라이브러리를 공유함으로써 기존 자바 사용자들의 접근성을 높이는 장점을 가지고 있습니다.

스칼라도 Go와 같은 동시성 문제의 해결책을 가지고 있는데요. 그것은 Actor라고 하는 방식을 통해 이루어집니다. Actor는 자신의 작업함 속(Mailbox) 해당 문제를 순차적 해결하는 것을 통해 동시성의 효과를 극대화하는 특징을 지니고 Message 수신의 긴급화가 아니면 일을 간섭 없이 처리함으로써 비동기적 처리를 합니다.

l Actor의 동작장면

지금까지 하드웨어의 발전에 따라 새롭게 부상하고 있는 동시성 프로그래밍에 대해 알아봤는데요. 우리도 잘 알고 있는 트위터, 링크드인, 넷플릭스, 텀블러, 애플 같은 기업들이 빅데이터의 보조수단으로 동시성프로그래밍을 활용함에 따라 상업적 가치도 증가하고 있습니다.

앞으로 동시성 프로그래밍의 활약 정도에 따라 기존 Java나 C로만 알려져 왔던 프로그래밍 언어의 세계를 Go나 Scala로 대신할 수 있을지, 지켜보고 응원하도록 하겠습니다.

  • 멀티스레딩 기술은 어떤 프로그램이나 프로세스 내에서 실행되는 흐름의 단위인 스레드(Thread)를 프로그램 환경에 따라 둘 이상으로 동시에 실행시켜 CPU의 작업을 나눠주는 방식을 말하며. 다수에 CPU가 동시에 작동하는 것에 목적이 있다. [네이버 지식백과] [본문으로]
  • 객체 지향 프로그래밍(OOP)은 환경에서 사용되는 프로그램 언어의 총칭. 대표적인 객체 지향 언어로는 추상 데이터형 프로그램 언어의 시조라고 할 수 있는 시뮬레이션 언어 시뮬라, 스몰토크 80 등이 있다. 또한 기존 언어에서 객체 지향으로 확장된 것으로는 표와 같은 것이 있다. [네이버 지식백과] [본문으로]
  • 함수 응용을 유일한 제어 구조로 사용하는 프로그래밍 형태. [네이버 지식백과] [본문으로]
  • 기억영역은 일정한 단위로 할당/해방의 제어가 이루어진다. 이 제어에 의한 할당과 해방을 반복하면 확보 하는 크기가 랜덤(random)인 것으로부터 점차로 무효영역(無效領域 : 가비지)이 증대하여 정보수용효율이 저하하여 간다. 특히, 자기디스크, 자기드럼 등, 시스템 공통의 직접 액세스장치상의 파일 영역에 있어서의 상기 문제를 해결하기 위한 가비지 해방이나 파일 재배치를 하기 위한 처리기능을 가비지 콜렉션이라 하며, 해당기능을 가지는 프로그램을 가비지 컬렉터(garbage collector)라고 한다. [네이버 지식백과] [본문으로]
  • 컴퓨터 이용의 효율화를 꾀하기 위해서 이용자가 필요에 따라서 사용하는 표준화된 프로그램 및 서브루틴의 모임을 말한다. [네이버 지식백과] [본문으로]

챗봇과 대화를 할 수 있어요