PHP 예제로 살펴보는 웹 스크래핑(웹 크롤링)의 원리와 실제

웹 스크래핑(Web Scraping)은 웹 페이지로부터 원하는 정보를 추출하는 기법입니다. 어떤 서비스에서 API가 별도로 제공되고 있지 않지만 웹 페이지로는 정보가 제공되고 있을 때, 웹 스크래핑 기법을 이용하면 원하는 정보를 획득할 수 있습니다.

웹 스크래핑은 흔히 웹 크롤링(Web Crawling)이라고도 많이 불립니다. 물론 엄밀하게 두 단어는 서로 다른 의미입니다. 크롤링은 여러 웹 페이지를 기계적으로 탐색하는 일을 말합니다. 한편 웹 스크래핑은 특정한 하나의 웹 페이지를 탐색하고, 또 소스코드 작성자가 원하는 정보를 콕 집어 얻어낸다는 점에서 크롤링과 차이가 있습니다. 그럼에도 크롤링과 스크래핑은 구현방법이 거의 같기 때문에, 실무에서는 구분없이 많이 불립니다.

이번 포스팅에서는 미국 CNBC 방송의 웹사이트에서 S&P 500 지수의 값을 확인하는 과정을 통해서, 웹 스크래핑의 원리를 설명하고 이를 PHP로 구현합니다. 아울러 구현한 내용을 클래스화하여 좀더 범용적으로 사용할 수 있는 예제코드를 소개합니다.

Continue reading

웹표준을 지키려면 <table> 태그를 사용해서는 안된다는 오해

웹표준 준수와 의미론적 마크업이 새로운 패러다임이 되면서 퍼진 몇 가지 왜곡된 사실이 있습니다. 그 중에서도 가장 잘 알려진 것은 <table> 태그의 사용을 금기로 삼는 것입니다. 언젠가부터 퍼지기 시작한 이러한 오해는 끝내 <table> 태그를 사용한 모든 마크업에 전근대적이라는 오명을 씌우게 되었습니다.

그럼에도 이 주제에 대하여 기술적으로 명확히 규명한 글은 찾아보기 어려운 것 같습니다. 이에 금번 글에서는 <table> 태그를 사용해야 하는 상황이 분명히 있음을 기술문서를 통해 규명하고, 이를 통해 <table> 태그에 덧씌워진 오명을 불식시키고자 합니다.

Continue reading

PHP에서 데이터를 파일로 캐싱(Caching)하기

성능좋은 인프라와 빠른 속도의 DB Query로 아무리 구성하고자 노력한다 하더라도, 캐싱은 여전히 웹프로그램의 성능을 향상시키기 위한 가장 고전적이면서 가장 가성비 높은 해법입니다. PHP에서는 APC와 같은 모듈을 활용하는 것이 일반적이지만, 특정 웹페이지에서 사용하는 데이터를 핀포인트로 캐싱할 때는 이를 직접 구현해보는 것도 선택가능한 대안입니다.

이번 포스팅에서는 일반적으로 PHP에서 변수에 담긴 데이터를 파일로 캐싱하는 방법을 다양한 예제코드를 통해 설명합니다. 이 과정에서 실무에 적용가능한 수준의 예제코드를 몇 가지 선보이고자 합니다. 마지막 단계에서는 PHP의 파일시스템 함수들을 조합하여, 충분한 시간이 지나면 캐싱이 만료되는 TTL(Time to Live)의 구현방법을 모색해볼 것입니다.

Continue reading

PHP 예제로 살펴보는 즉시실행함수의 필요성과 구현방법

즉시실행함수(IIFE, Immediately-Invoked Function Expression)는 소스코드 중간에 익명함수를 실행하여, 임시로 사용할 변수들을 지역변수로 선언하여 사용하는 디자인 패턴을 말합니다. 즉시실행함수가 즐겨 활용되어 온 대표적인 언어는 자바스크립트이지만, 최근에 PHP에서도 7버전에 익명함수가 등장하면서 사용이 가능해졌습니다.

이번 포스팅에서는 먼저 전역변수의 위험성을 살펴봄으로써, 즉시실행함수가 왜 필요한지를 설명합니다. 이어서 자바스크립트와 PHP7에서 작성한 소스코드를 통해 즉시실행함수의 사용방법에 대하여 설명합니다. 마지막으로 즉시실행함수를 사용할 수 없는 PHP5 및 PHP4에서 유사한 효과를 가질 수 있는 소스코드를 소개할 것입니다.

Continue reading

PHP 소스코드에서 R 스크립트 실행하기

데이터와 통계분석에 활용되는 R을 웹 언어에서 실행한다면, 강력한 시너지 효과를 기대할 수 있을 것입니다. 그러나 많은 개발자들의 도전에도 불구하고 이것은 쉽지 만은 않은 과제였는데, 그 이유는 바로 R을 Input File 없이 커맨드라인에서 실행할 수 있는 방법이 녹록치 않았기 때문입니다.

이번 포스팅에서 소개하는 PHP 클래스는, 인자로 받은 R 스크립트를 임시파일로 만들어 쉘 커맨드로 R을 실행한 결과를 반환합니다. 이를 통해서 PHP에서 R 스크립트를 문자열로 만들어 그대로 실행할 수 있습니다. 본 클래스는 리눅스 OS에서 작동하는 것을 전제로 합니다.

Continue reading