본문 바로가기

블로그

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

AI/Data

데이터는 어떻게 정리되고 검색될까?

2016.08.17

안녕하세요. LG CNS 대학생 기자단 6기 조서원입니다.

이제는 뗄래야 뗄 수 없는 스마트폰! 스마트폰의 수많은 기능 중 여러분이 가장 자주 사용하는 기능은 무엇인가요?

저는 포털 사이트 검색어 순위를 확인하거나, 궁금한 정보를 찾아보고, 자료를 저장하는 등 인터넷을 많이 활용하고 있는데요. 그러던 어느 날 문득 내가 만들고, 찾아서 이용하는 수많은 데이터들이 어디에 저장되고, 어떻게 보이는가에 대한 원리가 궁금해졌습니다.

수많은 사람들이 생산해 내는 데이터들이 보이지 않는 어딘가에 저장되고 있을 텐데요. 이런 어마어마한 규모의 빅데이터가 어디에서 관리되고, 어떻게 검색 결과로 보이게 되는 것일까요?

그럼 지금부터 ‘빅데이터가 어떻게 처리되어서 검색 결과로 보이는가’에 대한 궁금증을 같이 해결해 보도록 하겠습니다.

빅데이터 분산 처리 기술, ‘Hadoop’

먼저, 빅데이터를 처리, 분석할 때 가장 많이 사용되는 하둡(Hadoop)에 대해 알아볼까요?

① 하둡의 개념

하둡이란, 아파치 루씬 창시자인 미국 프로그래머 더그 커팅(Doug Cuting)이 2004년에 방대한 데이터 처리를 위해 구글의 맵리듀스(MapReduce) 등을 활용해 개발한 시스템으로, 저가의 서버와 하드디스크를 이용해 빅데이터를 상대적으로 쉽게 저장할 수 있는 분산형 파일 시스템입니다.

하둡 등장 이전 대용량 데이터는 슈퍼컴퓨터 등 고가의 장치를 이용해 처리되었습니다. 저장 공간이나 컴퓨팅 자원 부족, 높은 비용 소모에 대한 부담과 관련 기술, 엔지니어의 부족 등의 문제 때문에 기업들은 중요하다고 판단되는 데이터만 분석했는데요. 이로 인해 기존 데이터를 비용 대비 효율적으로 처리할 수 있는 방법론이 꾸준히 요구되었습니다.

이 때 등장한 시스템이 ‘하둡’입니다. 하둡은 여러 개의 일반 컴퓨터를 하나의 컴퓨터인 것처럼 묶어 대용량 데이터를 처리하는 기술입니다.

l Hadoop 로고 (출처: Hadoop 홈페이지)

하둡은 수천 대의 분산된 장비들에 대용량 파일을 저장할 수 있는 기능을 제공하는 분산 파일 시스템(HDFS)과 저장된 파일 데이터를 분산된 서버의 CPU와 메모리 자원을 이용해 쉽고 빠르게 분석할 수 있는 컴퓨팅 플랫폼인 맵리듀스(MapReduce)1로 구성됩니다. 즉, HDFS에 데이터를 저장하고 맵리듀스를 이용해 데이터를 처리합니다.

이전까지 대용량 데이터를 저장하고 처리하기 위해 슈퍼컴퓨터를 썼다면, 하둡의 등장으로 일반 PC 10대를 하나의 슈퍼컴퓨터처럼 대규모 기억장치로 묶어 사용할 수 있어 비용 면에서 큰 절감 효과를 가져오게 되었습니다. 커팅은 이렇게 개발한 기술을 다른 개발자도 자유롭게 가져다 쓰고 발전시킬 수 있도록 소스 코드를 공개하고 있습니다.

② 하둡의 특징

뉴욕 증권거래소에서는 하루에만 1TB에 이르는 거래 데이터가 발생하고, 페이스북에는 30PB가 넘는 사진 DB가 쌓여 있습니다. 기업들은 이러한 빅데이터를 저장하기 위해서 비싼 외부 저장 장치 등을 사용하는 것보다 오픈 소스인 하둡을 사용하는 것이 비용 절감 등에서 유리하고, 설치 및 사용도 쉬워 많이 이용하고 있습니다.

또한, 전문가들은 하둡을 이용하면 빅데이터를 보다 원활하고 효율적으로 분석할 수 있다고 평가합니다. 하둡 프레임워크는 대용량 데이터를 값싸고 빠르게 분석할 수 있게 돕습니다.

기업은 하둡을 활용해 빅데이터 분석에 들어가는 초기 비용을 줄이면서 자사 데이터 시스템과의 호환 문제도 손쉽게 해결할 수 있습니다. 또한 기존에는 슈퍼컴퓨터를 며칠씩 돌려야 했던 데이터도 하둡을 이용하면 x86 서버로 실시간 분석이 가능합니다.

한 예로, 페이스북은 데이터 중 일부인 30PB(미국 국회도서관에 저장된 정보량의 약 3배) 정도를 하둡에 저장한다고 합니다. 대용량 사진 데이터를 작은 데이터로 쪼개 약 2천여 개의 서버가 매 순간 데이터를 처리하기 때문에 사용자는 페이스북에 사진을 쉽게 올리고 받으며, 다른 사람의 페이스북 사진을 클릭과 동시에 볼 수 있습니다.

뿐만 아니라, 사용하기 쉽고 편리하다는 장점은 하둡이 급속도로 퍼지는 데 기여했습니다. 조금만 익히면 사용할 수 있어 기업들은 하둡으로 PC를 병렬로 연결해 빅데이터를 분산 처리하는데 이용하기 시작했고, 편리한 사용자 분석과 사용자 지향의 새로운 서비스를 개발할 수 있게 지원하는 하둡의 기능에 주목했습니다.

마지막으로, 하둡의 특징 중 하나는 메모리나 디스크를 공유하지 않는 다수의 머신에서 실행할 수 있다는 것입니다. 작은 조각으로 데이터를 나누어 그 조각을 배포하고 처리하며 원하는 대상 플랫폼에서 자동으로 결과를 병합 가능하기 때문에, 더욱 편리하게 어디서든 빅데이터 처리가 가능합니다.

고성능 오픈 소스(IR, Information Retrieval) 정보 검색 라이브러리 ‘Lucene’

이번에는 하둡을 기반으로 제작되는 정보 검색 라이브러리 루씬(Lucene)에 대해 알아보겠습니다.

l Lucene 로고 (출처: Lucene 홈페이지)

① 루씬의 개념

하둡 개발자인 더그 커팅(Doug Cuting)에 의해 1999년 개발된 루씬은 자바로 개발된 확장 가능한 고성능 오픈 소스 정보 검색(IR, Information Retrieval) 라이브러리입니다. 대표적으로 색인 기능, 검색 기능, 다양한 나라의 Full Text 분석기 등의 기능을 지원합니다.

이것은 독립된 프로그램이 아니라 단순한 소프트웨어 라이브러리이기 때문에 개발자가 루씬 라이브러리를 이용해 검색 서비스, 애플리케이션 구현 후 사용할 수 있습니다.

② 루씬의 특징

원래 자바로 만들어진 루씬은 펄(Perl)에서 시작해 파이썬(Python), C++와 닷넷(.NET) 등의 언어로 포팅되어 있습니다. 이렇듯 루씬은 서로 다른 언어 간에도 색인 데이터를 100% 호환해서 사용할 수 있도록 설계되어 있습니다.

또한 소프트웨어 프로그램에 색인과 검색 기능을 전문 지식이 없이도 간단하게 추가 가능해 IT 업계에서 많이 이용합니다.

추가적으로, 다양한 나라의 Full Text 분석기(Analyzer) 검색 엔진 기능이 특징적입니다. 개발자들은 색인 기능을 사용할 때, 단순한 문자열을 색인하기보다는 다양한 문서를 색인화하고 검색하는 작업을 합니다. 이때, 루씬을 이용해서는 임의의 바이너리 파일(Binary file)2을 직접 색인하고 검색할 수 없으며, 모두 문자열 형태로 변경된 후에 루씬으로 색인하고 검색할 수 있습니다.

따라서 XML, PDF, HTML, MS WORD 같은 다양한 문서들을 색인화하기 위해서는 각각의 문서를 루씬의 분석기가 이해할 수 있도록 해석(parse)해서 텍스트로 추출해 내는 과정이 필요합니다.

이는 Full-Text(Contents)와 text를 단어로 쪼개는 방법(Analyzer)을 제시하면 알아서 인덱스를 구성해 주고 그것으로 빠른 검색 결과를 얻을 수 있기 때문인데요. 내용 검색을 위해 루씬을 사용하는 것이 효율적입니다.

③ 루씬 개발 사례

루씽을 인덱싱과 검색에 적용한 사례들은 아래와 같습니다.

오픈 소스 검색 엔진 ‘Nutch’

그렇다면, 루씬을 기반으로 개발된 오픈 소스 검색 엔진 너치(Nutch)에 대해 알아볼까요?

l Nutch 로고 (출처: Nutch 홈페이지)

① 너치의 개념

광고가 많은 인터넷 검색 사이트에서 상업적인 요소를 배제한 검색을 구성하고자 진행된 오픈 소스 인터넷 웹 검색 엔진 프로젝트인 너치는 루씬을 기반으로 하여 자바로 구현되었습니다.

이는 오픈 소스 검색 엔진이라는 점에서 기존 기업들의 접근 방식과 차이가 있습니다. 따라서 넛치 검색 엔진의 소스는 완전히 공개되고, 누구나 무료로 이를 자신의 응용 프로그램에 맞게 변형하거나 재사용하는 것이 자유롭습니다.

② 너치의 특징

루씬은 인덱서와 정보 검색사(Searcher)로 구성되어 있고, 루씬 기반의 공개 웹 검색 엔진인 너치는 루씬에 없는 웹 검색에 필요한 모든 기본 요소를 전부 갖춰 웹 검색 용으로 확장한 것인데요.

너치는 루씬을 이용하기 때문에 수억 개 이상의 웹 페이지를 모아 색인, 검색이 가능하며 모듈화가 잘 되어있어 여러 가지 플러그인을 붙일 수 있습니다. 또한 자바로 작성되어 있지만 자료는 특정 언어에 관계없는 형태로 저장할 수 있습니다.

또한 하둡으로 구현하면 효율이 좋기 때문에 저장소 안에 자료가 많아 여러 대의 서버에서 동시에 구현, 가동할 수 있습니다.

③ 너치의 구조

너치의 전체적인 구조는 일반적인 웹 검색 시스템 구조와 유사합니다.

너치를 이용한 검색 절차는 다음 순서와 같습니다.

  1. 웹 서버가 사용자의 검색 요청을 받음
  2. 질의 핸들러(Request handler)가 검색어 가공 후 다수의 색인 검색 서버로 전달
  3. 질의 핸들러가 넘긴 검색어에 대해 나온 여러 색인 서버에서 결과를 점수가 높은 순서로 정렬
  4. 1~2초 후 결과를 주지 않는 색인 서버가 있으면 결과에 포함하지 않고 무시 (2초 안에 결과가 나오도록 보장)

기업 대상 검색 서버 ‘Solr’

마지막으로, 너치(Nutch)가 확장된 기업 대상 검색 서버 솔라(Solr)를 소개하겠습니다.

l Solr 로고 (출처: Solr 홈페이지)

① 솔라의 개념

솔라는 오픈 소스 검색 엔진인 루씬 프로젝트에 기반을 둔 엔터프라이즈 검색 서버로, 기업을 대상으로 더 다양하고 전문적인 기능을 추가하여 개발되었습니다. 이는 루씬을 기반으로 전체 텍스트 검색, 다면적인 검색, 실시간 인덱싱, 클러스터링, 데이터베이스 통합, 다양한 문서 처리 및 검색, 솔라 분산 인덱싱 등의 기능을 지원합니다.

솔라는 모든 기능을 HTTP 프로토콜을 통해 제공하는데요. 여기에는 색인, 검색, 삭제, 업데이트뿐만 아니라 스키마 추가, 업데이트, 리플리케이션 등 모든 기능을 포함합니다. 또한 솔라는 POST와 GET을 이용해 색인을 관리하고 검색을 요청할 수 있습니다.

HTTP 만으로 모든 작업을 할 수 있기 때문에, CURL 등의 도구를 이용해서 간단하게 검색 애플리케이션을 개발할 수 있다는 장점이 있습니다.

② 솔라의 특징

솔라는 단독 애플리케이션 서버 형태로 작동하며, REST 형식의 API를 제공합니다. 문서들은 HTTP를 이용해 XML•Json•CSV•바이너리 등의 형태로 색인, 검색을 요청하고 결과를 받아올 수 있습니다.

‘내가 필요한 자료들은 USB나 하드디스크에 저장하는데, 온라인에 올리는 사진이나 문서 파일들은 어디에 저장되는 걸까? 그리고 그 자료가 어떻게 검색 엔진에서 보이는 걸까?’라는 작은 질문에서 시작하여 이에 대한 원리와 기술에 대해 조사하게 되었습니다.

그동안 간편하게 사용해왔던 기능들이 수많은 개발자들에 의해 끊임없이 논의되고, 업데이트 되고 있기에 사용 가능했던 것을 알게 되었는데요. 점점 데이터가 증가하고, 세분화되면서 추가되고 있는 새로운 기능들도 많았습니다.

이번 조사를 계기로 앞으로는 유용하게 사용하고 있는 기능들의 원리에 대해 한 번 더 생각하고 이용할 수 있을 것 같습니다. 그리고 주어진 기능을 수동적으로만 사용하기보다는, 개선점을 찾을 수 있도록 능동적으로 기술을 대하려는 태도와 생각의 변화가 생기게 되었습니다.

여러분도 평소에 이용하던 기능이나 기술의 원리가 궁금한 적이 있다면, 지금 한 번 검색해 보세요. 원리를 알면 더 유용하게 사용하실 수 있을 것입니다!

  • 맵리듀스(MapReduce): 대용량 데이터를 분산 처리하기 위한 목적으로 개발된 프로그래밍 모델이다. Google에 의해 고안된 맵리듀스 기술은 대표적인 대용량 데이터 처리를 위한 병렬 처리 기법의 하나로 최근까지 많은 주목을 받고 있다. [네이버 지식백과] [본문으로]
  • 바이너리 파일(Binary file): 2진수라는 의미로서 바이너리 파일은 0과 1, 즉 2진수로 이루어진 파일을 의미한다. 컴퓨터 통신에서는 주로 화상, 음성 등의 대부분 파일들이 바이너리 파일로 처리된다. [네이버 지식백과] [본문으로]

챗봇과 대화를 할 수 있어요