한눈에 살펴보는 PostgreSQL


NHN에서는 CUBRID라는 오픈소스 DBMS를 개발하고 있으며 사내외 여러 서비스에 적용해 안정적으로 운영하고 있습니다. 여기서 살펴볼 PostgreSQL도 오픈소스 DBMS며, 여러 나라의 다양한 개발자들의 자발적인 노력으로 개발되고 있습니다. 오픈소스 프로젝트로는 상당히 긴 역사인 15년 이상의 오랜 역사를 가지고 있고 최근에는 1년 여만에 새로운 버전인 9.2 버전을 출시했습니다. 이 글에서는 꾸준히 발전해 가는 PostgreSQL가 어떤 데이터베이스인지 알아보겠습니다.

PostgreSQL을 알아야 할 이유

PostgreSQL(http://www.postgresql.org) 은 북미와 일본에서는 높은 인지도와 많은 인기를 얻고 있는 RDBMS다. 국내에서는 아직 잘 사용하지 않고 있지만, 기능과 성능면에서 매우 훌륭한 RDBMS이기 때문에 PostgreSQL가 어떠한 데이터베이스인지 시간을 들여 알아볼 필요는 있다.

PostgreSQL(포스트-그레스-큐엘 [Post-Gres-Q-L]로 발음)은 객체-관계형 데이터베이스 시스템(ORDBMS)으로, 엔터프라이즈급 DBMS의 기능과 차세대 DBMS에서나 볼 수 있을 법한 많은 기능을 제공하는 오픈소스 DBMS다. 실제 기능적인 면에서는 Oracle과 유사한 것이 많아, Oracle 사용자들이 가장 쉽게 적응할 수 있는 오픈소스 DBMS가 PostgreSQL이라는 세간의 평 또한 많다.

역사

PostgreSQL의 조상에는 여러 제품이 있는데, 그중 Ingres(INteractive Graphics REtrieval System)는 PostgreSQL의 시조라고 할 수 있다. 이 Ingres는 현재까지도 활발하게 활동하고 있는 데이터베이스 계의 거장 Michael Stonebraker가 시작한 프로젝트다.

postgresql1

그림 1 Michael Stonebraker(원본 출처: https://www.facebook.com/michael.stonebraker)

이 Ingres는 1977년 미국 버클리대학에서 시작한 프로젝트다. 이후 Ingres를 잇는 Postgres(Post-Ingres)라는 또 다른 프로젝트 또한 그의 손을 거쳐 탄생됐다. 1991년 Postgres 버전 3이 출시되면서 많은 사용자를 확보했으나 사용자 지원에 대한 부담이 증가해 결국 프로젝트는 1993년에 종료됐다. 이후에도 Postgres는 현재의 Informix 제품에 상당 부분 영향을 준 것으로 알려져 있다(Postgres를 상용화한 Illustra는 1997년 Informix에 인수됐고 2001년에 Illustra는 IBM에 인수됐다).

postgresql2

그림 2 제품 변천사

하지만 Postgres 사용자와 학생들이 프로젝트 종료 선언과 별개로 Postgres의 개발을 계속 진행했고, SQL 지원과 구조 개선을 통해 Postgres보다 40% 정도 빠른 성능을 보여 주는 Postgres95를 만들어 냈다.

이 Postgre95는 1996년 오픈소스가 되면서 Postgres를 계승했다는 것과 SQL을 지원한다(Postgres는 SQL이 아니라 QUEL이라는 언어를 지원했다)는 것을 반영하기 위해 현재의 PostgreSQL로 이름을 변경한 후 1997년 최초 버전을 6.0으로 정해 PostgreSQL을 출시했다.

이후에도 PostgreSQL은 오픈 소스 커뮤니티에 의해 최근까지도 활발히 개발되고 있으며 2012년 10월 현재 9.2 버전까지 출시됐다.

또한 개방된 라이선스(BSD나 MIT 라이선스와 비슷하게 상용적인 사용과 수정을 허용하며 단, 사용 중 발생하는 문제에 대해 법적 책임이 없음을 명확히 함)의 특징으로 인해 20종 이상의 다양한 분기(fork)가 존재했으며, 그중 많은 수가 PostgreSQL에 다시 영향을 주거나 혹은 사라졌다.

PostgreSQL의 로고는 'Slonik'이라는 이름을 가진 코끼리다. 코끼리를 로고로 사용하게 된 정확한 근원은 찾을 수 없으나 과거의 흔적을 뒤져 보면, 오픈소스화된 직후 한 사용자가 아가사 크리스티의 소설 '코끼리는 기억한다'에서 착안해 제안한 것으로 보인다. 이후 모든 공식적인 자리에서 이 코끼리 로고는 빠지지 않고 등장하게 됐다. 코끼리는 크고 강하고 믿음직하며 기억력이 좋다는 이미지 때문에 Hadoop이나 Evernote도 코끼리를 공식 로고로 사용하고 있다.

postgresql3

그림 3 PostgreSQL의 로고*

기능 및 제한

PostgreSQL은 관계형 DBMS의 기본적인 기능인 트랜잭션과 ACID(Atomicity, Consistency, Isolation, Durability)를 지원한다. 또한 ANSI SQL:2008 규격을 상당 부분 만족시키고 있으며, 전부를 지원하는 것을 목표로 현재도 기능이 계속 추가되고 있다.

또한 PostgreSQL은 기본적인 신뢰도와 안정성을 위한 기능뿐만 아니라 진보적인 기능이나 학술적 연구를 위한 확장 기능도 많이 가지고 있다. PostgreSQL의 기능을 대략적으로 열거해 보더라도 상당히 많은 기능을 가지고 있음을 알게 된다.

  • Nested transactions (savepoints)
  • Point in time recovery
  • Online/hot backups, Parallel restore
  • Rules system (query rewrite system)
  • B-tree, R-tree, hash, GiST method indexes
  • Multi-Version Concurrency Control (MVCC)
  • Tablespaces
  • Procedural Language
  • Information Schema
  • I18N, L10N
  • Database & Column level collation
  • Array, XML, UUID type
  • Auto-increment (sequences),
  • Asynchronous replication
  • LIMIT/OFFSET
  • Full text search
  • SSL, IPv6
  • Key/Value storage
  • Table inheritance

이외에도 엔터프라이즈급 DBMS의 다양한 기능과 새로운 기능을 자랑하고 있다.

PostgreSQL의 일반적인 제한 사항은 아래와 같다.

표 1 기본 제한 사항

항목제한 사항
최대 DB 크기(Database Size)무제한
최대 테이블 크기(Table Size)32TB
최대 레코드 크기(Row Size)1.6TB
최대 컬럼 크기(Field Size)1 GB
테이블당 최대 레코드 개수(Rows per Table)무제한
테이블당 최대 컬럼 개수(Columns per Table)250~1600개
테이블당 최대 인덱스 개수(Indexes per Table)무제한

로드맵

2012년 10월 기준 최신 버전은 9.2이다. PostgreSQL의 발전 과정을 연도별로 간단히 정리하면 <그림 4>와 같이 나타낼 수 있을 것이다.

postgresql4

그림 4 연도별 발전 과정(원본 출처: http://momjian.us/main/writings/pgsql/features.pdf)

버전별 주요 기능은 다음과 같다.

표 2 버전별 주요기능

버전출시주요 기능
0.011995Postgres95 릴리스
1.01995저작권 변경, 오픈소스화
6.0 ~ 6.51997 ~ 1999PostgreSQL로 이름 변경 Index, VIEWs and RULEs Sequences, Triggers Genetic Query Optimizer Constraints, Subselect MVCC, JDBC interface,
7.0 ~ 7.42000 ~ 2010Foreign keys SQL92 syntax JOINs Write-Ahead Log Information Schema, Internationalization
8.0 ~ 8.42005 ~ 2012Microsoft Windows Native 버전 지원 Savepoint, Point-in-time recovery Two-phase commit Table spaces, Partitioning Full text search Common table expressions (CTE) SQL/XML, ENUM, UUID Type Window functions Per-database collation 복제, Warm standby
9.02010-09Streaming 복제, Hot standby Microsoft Windows 64bit 버전 지원 Per-column conditional trigger
9.12011-09기능 차별화 Synchronous 복제 Per-column collations Unlogged tables K-nearest-neighbor indexing Serializable isolation level Writeable CTE (WITH) SQL/MED External Data SE-Linux integration
9.22012-09성능 최적화 linear scalability to 64 cores CPU 전력 소비량 감소 Cascade streaming 복제 JSON, Range Type Lock management 개선 Space-partitioned GiST index Index-only scans (covering)

이후 PostgreSQL 9.3 버전은 2013년 3분기 출시를 목표로 현재 개발이 진행 중이며, 주요 기능으로는 관리 기능 개선, Parallel query 지원, MERGE/UPSERT 지원, Multi-Master 복제, Materialized View 기능, 다중 언어 지원 개선 등이 계획되어 있다. 더 자세한 내용은 http://wiki.postgresql.org/wiki/Todo 에서 살펴볼 수 있다.

내부 구조

PostgreSQL의 프로세스 구조를 간단히 살펴보면 다음과 같다.

postgresql5

그림 5 프로세스 구조

클라이언트는 인터페이스 라이브러리(libpg, JDBC, ODBC 등의 다양한 인터페이스)를 통해 서버와의 연결을 요청(1)하면, Postmaster 프로세스가 서버와의 연결을 중계(2)한다. 이후 클라이언트는 할당된 서버와의 연결을 통해 질의를 수행(3)한다(그림 5).

서버 내부의 질의 수행 과정을 간단히 살펴보면 다음과 같다.

postgresql6

그림 6 쿼리 수행 절차

클라이언트로부터 질의 요청이 들어오면 구문 분석 과정(1)을 통해 Parse Tree를 생성하고 의미 분석 과정(2)를 통해 새로운 트랜잭션을 시작하고 Query Tree를 생성한다.

이후 서버에 정의된 Rule에 따라 Query Tree가 재 생성(3)되고 실행 가능한 여러 수행 계획 중 가장 최적화된 Plan Tree를 생성(4)한다. 서버는 이를 수행(5)하여 요청된 질의에 대한 결과를 클라이언트로 전달하게 된다(그림 6).

서버의 쿼리 수행 과정에서는 데이터베이스 내부의 시스템 카탈로그가 많이 사용되는데, 사용자가 함수나 데이터 타입은 물론 인덱스 접근 방식 및 RULE 등을 시스템 카탈로그에 직접 정의할 수도 있다. 따라서 PostgreSQL에서는 이것이 기능을 새로 추가하거나 확장하는데 있어 중요한 포인트로 활용된다.

데이터가 저장되는 파일들은 여러 개의 페이지들로 구성되며, 하나의 페이지는 확장 가능한 slotted page 구조를 가진다(그림 7, 그림 8).

postgresql7

그림 7 데이터 페이지 구조

postgresql8

그림 8 인덱스 페이지 구조

개발 프로세스

PostgreSQL의 개발 프로세스 모델은 다음의 문장으로 설명할 수 있다.

"소수 주도의 커뮤니티 기반 오픈 소스 프로젝트"

이는 Linux, Apache, Eclipse 프로젝트와 같이 소수의 관리자와 다양한 개발자 그리고 다수의 사용자가 프로젝트 구성원을 이루고 있으며, 소수의 관리자 그룹(Core Team)은 다수의 사용자로부터의 요청과 피드백을 수집(우선순위를 정하기 위해 투표 방식을 활용하기도 한다. 자세한 내용은 http://postgresql.uservoice.com 를 참조한다.)하여 제품의 방향을 결정하고 코드의 최종 승인 및 릴리스 권한을 행사한다(MySQL 또는 JBoss와 같은 기업 관리형 개발프로세스와는 다른 모델로 분류됨).

개발자 그룹은 코드 커미터, 코드 개발자/기여자로 구성되어 있으며 이들은 미국, 일본, 유럽 등의 여러 나라에 분포되어 있다.

다양한 개발자들에 의해 개발된 코드는 다양한 리뷰 과정(Submission Review, Usability Review, Feature Test, Performance Review, Coding Review, Architecture Review, Review Review)과 Core Team의 승인을 거처 제품에 반영이 된다. 커뮤니티에서는 오래 전부터 사용해오던 메일링 리스트가 주로 사용되고 있으며, 매뉴얼을 포함한 다양한 문서들이 공식 홈페이지(http://www.postgresql.org) 에서 잘 관리되고 있다.

경쟁 제품

PostgreSQL은 엔터프라이즈급 상용 데이터베이스와 비교되기를 원하나 주로 유명 오픈소스 DBMS가 비교 대상이 된다. 오픈소스 DBMS의 캐치프레이즈로 제품 특징만을 나열해 보면 다음과 같다.

  • PostgreSQL: The world's most advanced open source database
  • MySQL: The world's most popular open source database
  • Firebird: The true open source database
  • CUBRID: Open Source Database Highly Optimized for Web Applications
  • SQLite: self-contained library, serverless, zero-configuration, transactional SQL database engine

캐치프레이즈만으로 제품을 비교하긴 어려우나 PostgreSQL은 진보와 개방을 표방하고 있음을 알 수 있다.

다음은 PostgreSQL이 경쟁 제품으로 내세우는 제품에 대한 간략한 비교다.

표 3 경쟁 제품 비교

Oracle오랫동안 검증된 방대한 양의 코드, 다양한 레퍼런스. 그러나 비싼 비용이 단점
DB2, MS SQLOracle과 비슷함
MySQL다양한 응용과 레퍼런스. 그러나 기업형 개발 모델과 라이선스 부담
다른 상용 DB오픈소스 DBMS에 의해 세력이 기우는 중
타 오픈소스DB프로젝트에 개발자를 끌어 들이기 위해 힘든 노력 중

이전부터 PostgreSQL 진영은 엔터프라이즈 시장에 진출하려는 시도를 계속 해 왔고, 2004년에는 PostgreSQL을 이용한 전문 기업인 EnterpriseDB(http://www.enterprisedb.com) 가 생겨나 엔터프라이즈 DBMS 시장을 좀 더 확고히 다지기 위한 노력을 기울이고 있다. 대표적인 산출물이 Postgres Plus Advanced Server 제품의 출시다. 이는 오픈 소스 PostgreSQL에 Oracle 호환성 기능(PL/SQL, SQL 구문, 함수, DB Links, OCI 라이브러리 등 지원)과 관리 도구를 추가해 용이한 데이터 및 응용 마이그레이션과 Oracle 대비 20% 이하의 비용 절감을 주무기로 내세우고 있다(그림 10).

postgresql9

그림 10 Oracle 대비 비용 절감 효과(원본 출처)

또한 PostgreSQL 전문가의 교육, 컨설팅, 마이그레이션 및 기술 지원 서비스 등을 제공하는 등의 차별화된 서비스도 제공하며 각종 분야 약 300여 개의 레퍼런스 사이트를 통해 모든 업계에서 사용 가능한 데이터베이스임을 홍보하며 세계 각지에 사용자 층을 늘리고 있는 추세다.

현황, 동향

대부분의 PostgreSQL 사용기를 읽어 보면 알 수 있듯이 PostgreSQL을 사용하는 사람들은 대부분 개발자적인 성향을 가지고 있으며 제품에 대한 애정도와 충성도가 높은 편이다.

그도 그럴 것이 다른 제품과 비교하면 일반적으로 부족하지 않은 기능과 무난한 성능을 가지고 있고, 또 하나 중요한 것은 새로운 개발자를 끌어 들이기에 좋은 입문 조건들을 가지고 있다는 것이다.

프로젝트 페이지에 잘 정리된 매뉴얼, 문서와 300종 이상의 관련 서적, 그리고 세계 각국에서 개최되는 매년 10회 이상의 다양한 세미나와 콘퍼런스 등도 이를 뒷받침하고 있으며 최근에는 전문 잡지까지 등장했다. 이는 모두 왕성한 커뮤니티 활동의 산물이라 할 수 있다.

사용자가 꼽는 PostgreSQL의 대표적인 특징으로는 다음과 같은 것들이 있다.

  • '신뢰도'는 제품의 최우선 사항
  • ACID 및 트랜잭션 지원
  • 다양한 인덱싱 기법 지원
  • 유연한 Full-text search 기능
  • 동시성 성능을 높여주는 MVCC 기능
  • 다양하고 유연한 복제 방식 지원
  • 다양한 프로시져(PL/pgSQL, Perl, Python, Ruby, TCL, 등)/인터페이스(JDBC, ODBC, C/C++, .Net, Perl, Python, 등) 언어
  • 질 좋은 커뮤니티 지원 및 상업적인 지원
  • 잘 만든 문서 및 충분한 매뉴얼 제공

그리고, 다양한 확장 기능과 확장 기능 개발의 용이성 등이 있으며 PostgreSQL만의 차별화된 확장 기능으로 다음과 같은 것들이 있다.

  • GIS add-on 지원 (PostGIS)
  • Key-Value 스토어 확장 기능 (HStore)
  • DBLink 기능
  • Crypto, UUID 등 다양한 함수, 타입 지원

이외에도 실용적이거나 실험적인 많은 확장 기능들이 있다.

이중 최근 들어 많이 회자되는 GIS(Geographic Information System) 기능에 대해 간략히 살펴보자. PostGIS(http://postgis.refractions.net) 는 PostgreSQL에 OpenGIS 규격(http://www.opengeospatial.org/standards/sfs) 을 준수하며 Geographic object를 지원 가능하게 하는 미들웨어 형태의 확장 기능이다(그림 11). 2001년부터 개발됐으며 많은 기능과 성능 개선을 통해 오픈 소스로는 가장 많은 사용자를 확보하고 있다. 상용 제품으로는 Oracle Spatial, DB2, MS SQL Server 등도 있으나 비용 대 성능 측면에서 상용 제품은 그다지 환영 받지 못하고 있다.

게다가 PostGIS/PostgreSQL의 제공 기능이나 성능은 Oracle과 비견할만하다는 벤치마크 자료를 어렵지 않게 구할 수 있다.

postgresql10

그림 11 PostGIS 구조

그리고 최근 동향을 살펴보면 GIS 분야 외에도 클라우드와 관련해서도 PostgreSQL가 많이 회자되고 있다. 최근 DbaaS(DB As A Service)를 제공하는 기업이 늘어나면서 비용과 라이선스 측면에서 유리한 PostgreSQL에 대한 수요가 증가했고 EnterpriseDB 사는 이에 맞추어 클라우드 시장을 겨냥하여 다음의 특징을 갖는 Postgres Plus Cloud Database 제품을 출시했다.

  • Simple setup & web-based management
  • Automatic scaling, load balancing and failover
  • Automated online backup
  • Database Cloning

이는 Amazon EC2, Eucalyptus cloud, Red Hat Openshift development platform cloud 등에서 사용되며 다른 Heroku, dotCloud 등의 많은 클라우드 서비스 업체에서도 PostgreSQL을 사용하는 서비스를 제공하고 있다.

마치며

MySQL을 인수했던 Sun이 2009년 Oracle에 인수되면서 좀더 폐쇄적인 기업형 프로젝트 성향을 보이고 비슷한 시기에 많은 수의 MySQL 개발자들이 떠나게 되자 이를 불안해 하는 MySQL 사용자들은 손쉽게 이전할 수 있는 MySQL의 fork(MariaDB, Drizzle, Percona 등)뿐만 아니라 20년 이상 잘 지속되어 개발되고 있는 PostgreSQL으로의 이전에도 신경을 쓰고 있는 듯 하다.

미국의 유명한 취업 포털 회사인 indeed(http://www.indeed.com) 의 PostgreSQL과 MySQL 관련 업무에 대한 구인 증가율 추이(그림 9)를 보면, 2011년 들어서는 MySQL의 구인 증가율이 한풀 꺾인 듯 보이나 PostgreSQL 업무 구인은 꾸준히 증가하고 있는 것으로 보인다.

postgresql11

그림 12 indeed의 구인 증가율 추이(원본 출처)

검색 사이트에서의 검색 빈도를 보면 MySQL의 추세가 지속적으로 줄어들고 있고 전체적으로 PostgreSQL의 추이는 거의 변동이 없는 것으로 보이나 국내에서는 2010년 중반 이후 지속적인 증가 추세를 보이고 있다.

물론 아직까지도 PostgreSQL 보다는 MySQL의 인기도나 사용률이 월등히 높은 편이다. 이런 추이들로 정확한 현황이나 향후 추세를 알 수는 없겠지만 대략적으로는 MySQL의 인기도가 하락하면 PostgreSQL의 인기도가 상승할 것이라고 짐작할 수는 있을 것이다.

아직은 MySQL의 인기도를 꺾을 파괴력을 지니지는 않았으나, 이를 대비하여 PostgreSQL 오픈 소스 프로젝트 진영에서는 다음과 같은 노력을 지속적으로 하고 있으며

  • 기본적인 DBMS 기능의 신뢰도 증대
  • 진보적이며 차별화된 기능 확장
  • 오픈 소스 개발자의 지속적 확충

또한 비지니스의 목적이 강한 EnterpriseDB 진영에서는 다음과 같은 행보가 지속적으로 이루어 지고 있다.

  • 엔터프라이즈 시장에서의 영역 확대
  • 클라우드 시장에서의 영역 확대
  • Oracle 및 MySQL을 대체하기 위한 노력


인터넷 검색 및 데이터 수집을 하고 싶다...

라는 생각에 기술을 알아보는 중 

크롤링이라는 기술이 있다고 한다.


크롤링이란 무엇 일까?

Web Scraping(웹 크롤링) 이란?

[펌] 네이버 블로그
(http://m.blog.naver.com/potter777777/220605598446)

컴퓨터 업계에서 일하는 사람들은 "크롤링", "크롤러", "크롤링 알바" 이런 말을 들어본 적이 있을 겁니다. 저도 친구들이나 선배들이 회사에서 크롤링하는 알바를 했다는 경험담을 많이 들었습니다. 개인 프로젝트를 하면서 혹은 팀 프로젝트를 하면서 크롤링 할 일이 있었습니다. 하지만, 어떻게 하는지 몰랐죠.

 여러 사람들에게 조언을 구하고 구글의 힘을 빌려서 제가 원하는 정보를 파싱해서  DB에 넣는 데에 성공했습니다. 원하는 데이터가 잘 나와서 눈물이 앞을 가리더군요. 사람들에게 스크린샷을 찍어서 보내면서 "내가 한거라고 ㅠㅠ" 3일 밤을 새면서 고생했어요. "잘했어... (토닥토닥)" 아 논지를 벗어 났군요.

우리가 흔히 부르는 웹 크롤러 크롤링의 정식명칭은 'Web Scraping' 입니다. 외국 자료를 찾으려고 하니까 'Web Crawling' 보다는 'Web Scraping' 이라는 용어를 자주 사용하더군요.

"Web scraping is a computer software technique of extracting information from websites."
-> 웹 크롤링이란 컴퓨터 소프트웨어 기술로 웹 사이트들에서 원하는 정보를 추출하는 것을 의미합니다.

 웹 크롤러란 인터넷에 있는 웹페이지를 방문해서 자료를 수집하는 일을 하는 프로그램을 말합니다. 이때 한 페이지만 방문하는 것이 아니라 그 페이지에 링크되어 있는 또 다른 페이지를 차례대로 방문하고 이처럼 링크를 따라 웹을 돌아다니는 모습이 마치 거미와 비슷하다고 해서 스파이더라고 부르기도 합니다. 엄청난 분량의 웹문서를 사람이 일일 구별해서 모으는 일은 불가능에 가깝습니다. 때문에 웹 문서 검색에서는 사람이 일일이 하는 대신 이를 자동으로 수행해 줍니다. 

예를 들면, "멜론 사이트에서 현재 음악 차트 순위 자료가 필요하다."고 해보겠습니다. 물론, 사이트에 가서 일일이 보고, 엑셀에 값을 넣고 정리해서 상사에게 보고하는 사람들도 있을 겁니다. 하지만 이 데이터를 다른 프로그램이나 무언가를 만들 때 사용하려면 DB 형태로 저장해 놓을 필요가 있습니다.

카테고리, 순위, 발매일, 제목, 앨범제목, 그룹이름 등등... 차트에도 여러 정보가 있겠죠.

 웹은 기본적으로 HTML 형태로 되어 있는 건 다들 아실 겁니다. 저희가 눈으로 볼 수 있다면, 해당 정보가 HTML 형태로 어떻게 보여지는지도 '페이지 소스 보기' 또는 '개발자 검사' 로 볼 수 있습니다. 이런 소스들은 보통 개발자들이 어떤 정형화된 형태로 관리하고 있습니다. 때문에 규칙이 생기죠. 이런 규칙을 분석해서 우리가 원하는 정보들만 뽑아오는 것을 웹 크롤링 작업이라고 생각하시면 됩니다.

 한국에서도 웹 크롤링 할 일이 많기 때문에 알바를 구하는 구인 광고도 본 적이 있고 네이버, 다음, 구글 등등 여러 포털 사이트 블로그에 크롤링 하는 방법을 치면 나오는 정보들도 많습니다. 가장 많이 나오는 것이 Python으로 크롤링 하는 소스들이 제일 흔하죠. 현재 파이썬이 가장 떠오르는 언어이죠? 하지만 저는 파이썬보다는 현재 루비와 레일즈를 주로 공부하고 있어서 루비로 크롤러 개발을 할 수 있는 방법을 찾아보았습니다.

 저는 다음 블로그 포스팅부터 몇 차례에 걸쳐서 제가 주로 포스팅하는 언어인 'Ruby' 와 'Rails' 그리고 'nokogiri' 라는 잼(gem)을 이용하여 크롤링하는 방법에 대해서 포스팅 할 예정입니다. 한국에서 nokogiri로 스크래핑하는 것에 대한 방법을 기술한 자료는 그렇게 많지 않았습니다. 일주일 내내 찾아도 제대로 된 것이 2개? 1개? 정도 였고 정보도 통틀어 10개를 넘지를 않았습니다. 그래서 루비와 노코기리로 크롤링 하는 방법을 찾는 분들을 위해서 노코기리 잼 분석부터 레일즈로 띄우는 방법까지 자세히 포스팅하겠습니다.

자세한 웹 크롤링에 대한 정의는 아래 '위키 피디아를 참조'하시기 바랍니다.
https://en.wikipedia.org/wiki/Web_scraping

그리고 외국 자료들이 더 정확하고 유용하니, 웹 크롤링 웹 크롤러로 검색하기 보다는 "Web Scraping with something" 이런 식으로 검색하여 원하는 정보를 찾아서 활용하시기 바랍니다.



위 블로그 분의 좋은 이야기를 듣고, 

내가 필요한 Scraping을 만들기 위해


Python으로 작성을 시도해 볼려고 한다.

SBS 로봇기자, 나리

지난 9일, 제19대 대통령 선거가 치러졌습니다. 많은 분들이 인터넷에서 선거 관련 기사를 찾아보셨을 텐데요. 여러분이 읽은 기사들 중 일부는 사람이 아닌 ‘로봇’이 썼다는 것, 혹시 알고 계셨나요? 과연 어떤 기사인지, 어떻게 로봇이 기사를 썼는지 살펴보도록 해요.

SBS는 19대 대선에서 인공지능(AI)를 활용한 로봇 기사를 선보였습니다. 나리(NARe)로 명명된 로봇기자는 인공지능 로봇기자(News by Artificial intelligence Reporter)의 약자로, SBS 뉴스와 서울대 로봇저널리즘팀(이준환, 서봉원 교수)이 공동 개발했습니다.

사람보다 빠르고 정확했다

인공지능 로봇기자 나리(NARe)는 중앙선거관리위원회가 실시간으로 제공하는 데이터를 계산하고 분석해 자동으로 기사를 작성했습니다. 실시간 전국 투·개표율과 지역별 상세 투·개표 상황 등 특정한 조건이 달성됐을 때 유형별로 수십 개에 달하는 기사를 순식간에 작성해 냈습니다. 데이터를 바탕으로 사실을 전달하는 ‘스트레이트 기사’는 문장 구조에 맞게 데이터만 배치하면 작성이 가능합니다.

출처: SBS 뉴스 기사

나리가 작성한 기사는 사람이 일일이 수치를 계산하고 입력해 기사를 작성하는 것보다 훨씬 신속하고 정확했다고 하는데요. 문장 역시 로봇이 썼다고 믿을 수 없을 만큼 자연스러웠습니다. 나리가 쓴 기사는 SBS 뉴스 홈페이지와 포털사이트 등에서 확인할 수 있습니다.

기자 알파고, 점차 늘어날 것

사실 인공지능 기자가 신문기사를 쓰기 시작한 것은 이미 몇 년이 되었습니다. 미국의 LA 타임스, 로이터, AP통신, 블룸버그 등의 외신은 일찍부터 로봇 기자 시스템을 도입했습니다. LA 타임스는 지진 발생 보도에 로봇을 활용하는데요, 미국 지리조사청이 지진 정보를 감지하고 데이터를 제공하면, LA 타임스의 로봇이 데이터를 바탕으로 즉시 기사를 작성합니다. 2014년 3월 LA에서 강도 4.4의 지진이 발생했을 때, LA 타임스는 8분 만에 속보를 낼 수 있었습니다.

출처: LA타임스

앞으로 단순하거나 건조한 기사는 로봇 기자가 작성하는 것으로 대체될 텐데요, 다만 기자라는 직업이 사라지지는 않을 것입니다. 로봇 기자가 데이터를 기반으로 한 기사를 작성할 때, 인간 기자는 기획 기사나 심층 기사, 논설 등을 작성할 수 있을 것입니다. 기사 작성 시 필요한 정보 수집과 분석을 인공지능에게 맡기고, 고품질 기사로 경쟁력을 높이는 사례도 늘어날 것으로 전망됩니다.

출처 : http://naver.me/GgMopgEx

● 개인정보처리방침 ●

 본인은 (이하 '회사'는) 고객님의 개인정보를 중요시하며, 이용자가 회사의 서비스(이하 개인 블로그 또는 "개인"라 함)를 이용함과 동시에 온라인상에서 회사에 제공한 개인정보가 보호 받을 수 있도록 "정보통신망 이용촉진 및 정보보호"에 관한 법률을 준수하고 있습니다.

회사는 개인정보처리방침을 통하여 고객님께서 제공하시는 개인정보가 어떠한 용도와 방식으로 이용되고 있으며, 개인정보보호를 위해 어떠한 조치가 취해지고 있는지 알려드립니다.

회사는 개인정보처리방침을 개정하는 경우 웹사이트 공지사항(또는 개별공지)을 통하여 공지할 것입니다.

■ 수집하는 개인정보 항목

 회사는 회원가입, 상담, 서비스 신청 등등을 위해 아래와 같은 개인정보를 수집하고 있습니다.

ο 수집항목 : 이름 , 로그인ID , 비밀번호 , 휴대전화번호 , 이메일 , 회사명 , 사업자등록번호, 부서 , 직책 , 회사전화번호 , 회사주소, 업종, 업태, 대표자명, 팩스

ο 개인정보 수집방법 : 홈페이지(회원가입 및 정보변경), 서비스 도입 허브기업으로부터의 제공, 제휴사로부터의 제공

■ 개인정보의 수집 및 이용목적

 회사는 수집한 개인정보를 다음의 목적을 위해 활용합니다.

ο 서비스 제공에 관한 계약 이행 및 서비스 제공에 따른 요금정산, 콘텐츠 제공 , 구매 및 요금 결제 , 물품배송 또는 청구지 등 발송 , 요금추심
ο 회원 관리
 회원제 서비스 이용에 따른 본인확인 , 개인 식별 , 불량회원의 부정 이용 방지와 비인가 사용 방지 , 가입 의사 확인 , 불만처리 등 민원처리 , 고지사항 전달
ο 마케팅 및 광고에 활용
 신규 서비스(제품) 개발 및 특화 , 이벤트 등 광고성 정보 전달 , 접속 빈도 파악 또는 회원의 서비스 이용에 대한 통계

■ 개인정보의 보유 및 이용기간

 원칙적으로, 개인정보 수집 및 이용목적이 달성된 후에는 해당 정보를 지체 없이 파기합니다. 단, 관계법령의 규정에 의하여 보존할 필요가 있는 경우 회사는 아래와 같이 관계법령에서 정한 일정한 기간 동안 회원정보를 보관합니다.

보존 항목 : 이름 , 로그인ID , 휴대전화번호 , 이메일 , 회사명 , 사업자등록번호, 회사전화번호 , 회사주소,업종,업태,대표자명,팩스
 보존 근거 : 국세청2001년고시 부가세법 시행령에 근거
 보존 기간 : 5년

■개인정보의 파기절차 및 방법

 회사는 원칙적으로 개인정보 수집 및 이용목적이 달성된 후에는 해당 정보를 지체없이 파기합니다. 파기절차 및 방법은 다음과 같습니다.

ο 파기절차

 회원님이 회원가입 등을 위해 입력하신 정보는 목적이 달성된 후 별도의 DB로 옮겨져(종이의 경우 별도의 서류함) 내부 방침 및 기타 관련 법령에 의한 정보보호 사유에 따라(보유 및 이용기간 참조) 일정 기간 저장된 후 파기되어집니다.

별도 DB로 옮겨진 개인정보는 법률에 의한 경우가 아니고서는 보유되어지는 이외의 다른 목적으로 이용되지 않습니다.

ο 파기방법

- 전자적 파일형태로 저장된 개인정보는 기록을 재생할 수 없는 기술적 방법을 사용하여 삭제합니다.


■ 개인정보 자동 수집 장치의 설치·운영 및 거부에 관한 사항
 쿠키등 개인정보를 자동으로 수집하는 장치를 운영하지 않습니다.

■ 이용자 및 법정대리인의 권리와 그 행사방법

 이용자 및 법정대리인은 언제든지 등록되어 있는 자신 혹은 당해 만 14세 미만 아동의 개인정보를 조회하거나 수정할 수 있으며 가입해지를 요청할 수도 있습니다.
이용자 혹은 만 14세 미만 아동의 개인정보 조회·수정을 위해서는 '회원정보'의 '내 정보'를 통하여 가능하며, 가입해지 시에는 '회원정보'의 '해지신청'을 클릭하여 본인 확인 절차를 거치신 후 직접 열람, 정정 또는 탈퇴가 가능합니다. 혹은 개인정보 관리책임자에게 서면, 전화 또는 이메일로 연락하시면 지체 없이 조치하겠습니다.

이용자가 개인정보의 오류에 대한 정정을 요청하신 경우에는 정정을 완료하기 전까지 당해 개인정보를 이용 또는 제공하지 않습니다. 또한 잘못된 개인정보를 제3자에게 이미 제공한 경우에는 정정 처리결과를 제3자에게 지체 없이 통지하여 정정이 이루어지도록 하겠습니다.
회사는 이용자 혹은 법정대리인의 요청에 의해 해지 또는 삭제된 개인정보는 "회사가 수집하는 개인정보의 보유 및 이용기간"에 명시된 바에 따라 처리하고 그 외의 용도로 열람 
 또는 이용할 수 없도록 처리하고 있습니다.

■ 개인정보 관리책임자 및 상담·신고
 고객서비스담당 부서 : 고객지원센터

개인정보취급책임자 성명 : 블로거
 전화번호 : 
이메일 :

귀하께서는 회사의 서비스를 이용하시며 발생하는 모든 개인정보취급 관련 민원을 개인정보취급책임자 혹은 담당부서로 신고하실 수 있습니다. 회사는 이용자들의 신고사항에 대해 신속하게 충분한 답변을 드릴 것입니다.

기타 개인정보침해에 대한 신고나 상담이 필요하신 경우에는 아래 기관에 문의하시기 바랍니다.

1.개인분쟁조정위원회 (www.1336.or.kr/1336)
 2.정보보호마크인증위원회 (www.eprivacy.or.kr/02-580-0533~4)
 3.대검찰청 인터넷범죄수사센터 (http://icic.sppo.go.kr/02-3480-3600)
 4.경찰청 사이버테러대응센터 (www.ctrc.go.kr/02-392-0330)
 

1. 소개

포털 사이트 Daum에서 운영하고 있는 서비스형 블로그. 다음에서 이미 티스토리를 서비스형 블로그로 운영하고 있지만 특이하게도 다음 자체적으로도 서비스형 블로그를 운영하고 있다. 서비스 년도는 네이버 블로그와 마찬가지로 2000년도 초반.

2. 다음 블로그, 버림받는 건가?

다음 측이 티스토리를 인수하면서부터 다음 블로그 서비스 개선이 거의 나아지지 않았다.

단적인 예로 블로그 수익 프로그램인데 네이버의 경우
구글 애드센스 대응책으로 만든 네이버 애드포스트가 있지만, 다음 쪽에선 이렇다 할 블로그 수익 프로그램이 없다. 과거에 애드클릭스라는 광고 프로그램을 네이버보다 훨씬 먼저 런칭했지만 처절한 클릭별 단가에 블로거들의 외면을 받았다. 애드센스 세 개 다 붙이고 그러고도 광고 붙일 자리가 있으면 붙이곤 했지만 블로그를 운영해 본 위키러는 알겠지만 주로 블로그 본문 부근의 목 좋은 자리의 광고가 아니면 클릭률이 나락으로 떨어지는게 보통이다. 결국 사업 종료.

티스토리처럼 스킨을 수정해서 구글 애드센스도 설치할 수 없기에 블로그 수익 생각하신 분들은 당연히 외면할 수밖에 없다. 그래서 우수 블로거 선정이 티스토리보다 쉬운 편.

한때 많은 우수 블로거들이 있었으나 다음 측에서 다음 블로그 서비스 개선을 외면하면서 사용자들이 거의 네이버 블로그로 이전하고 있다.

네이버 블로그와 동시에 서비스를 시작했음에도 불구하고
티스토리, 이글루스조차 독립문서가 있는데 다음 블로그는 없었다가 2015년 10월 7일에서야 독립문서가 생겼다.

블로그 주인이
1년 동안 활동을 안 하면 친구만 글을 남길 수 있다.

네이버 블로그에 비한다면 이용자수가 적은 편이며 카카오 측에서 사명 개편 이후에 다음 블로그에 대해서 관리에 사실상 손을 놓고 있고 그에 따라서 블로그 서비스에 크게 신경을 쓰질 않아서 그나마 충성도 높은 다음 포털 이용자들이 이 블로그를 이용하면서 다음 블로그의 서비스 개선을 그토록 요구하고 있지만 돌아오는 답변은 매번 컨트롤 브이식 답변 밖에 안오고 피드백하려는 노력이 전혀 보이질 않아서 상당히 빈축을 사고 있다.

여러모로 네이버 블로그, 티스토리, 이글루스와 비교해서 본사측에서 신경을 쓰지 않는데다 카카오로 사명 통합 이후 돈이 안되는 사업들을 통폐합하고 있는지라 다음 블로그의 미래는 위태로운 상태. 더군다나 다음 측에서 이미 티스토리 블로그를 운영중이기 때문에 만약 통폐합된다면 티스토리로 모두 통합될 가능성도 있다.

2015 우수 블로그 선정을 티스토리 블로그와 같이 발표해 다음 블로그 서비스 축소 및 폐쇄로 가는 게 아니냐 의혹받고 있다. 실질적으로 2015 우수 블로그 선정자들을 보면 다음 블로그가 적음을 알 수 있다.


2015년 12월 27일 현재, 블로그 메인 페이지에
로또리치류의 사이트 홍보성 글이 2개나 올라와 관리가 전혀 안되고 있음을 드러냈다.


+ 추가


다음 애드핏(adbit) 애드센스 수익장점 비교

Adfit.biz.daum.net  다음의 애드핏 가입 주소이다.



가입 진행 후 화면에서 광고관리를 진행하면 되지만, 17년 4월 13일 접근권한이 없습니다. 라는 문구가 나오면서 아직, 정확한 정책 및 설명을 쉽게 확인할 수가 없다.


http://pro-gen.tistory.com/71 프로젠 님의 글을 보면은 애드센스와 비교글이 나와있지만, 


애드센스 승인과, 애드핏 둘다 승인이 안나는 상태이기 때문에... 

더 많은 컨텐츠와 정보를 정리하기로 다짐하면서

글을 마무리합니다.

+ Recent posts