Javascript Node.js

Node.js에서 CSS 선택자로 간편하게 웹 스크래핑(웹 크롤링)을 하는 방법

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

웹 스크래핑의 원리에 대해서는 이전 글인 웹 스크래핑(웹 크롤링)의 원리에서 다루었습니다. 이번 글에서는 Node.js에서 패키지 2가지를 조합하여 손쉽게 구현한 웹 스크래핑 함수 예제코드를 소개합니다.

(more…)

Continue reading

Data Mining R

R에서 CSS 선택자로 간편하게 웹 스크래핑(웹 크롤링)을 하는 방법

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

웹 스크래핑의 원리에 대해서는 이전 글인 웹 스크래핑(웹 크롤링)의 원리에서 다루었습니다. 이번 글에서는 Ruby에서 패키지 2가지를 조합하여 손쉽게 구현한 웹 스크래핑 함수 예제코드를 소개합니다.

(more…)

Continue reading

Backends Ruby

Ruby에서 CSS 선택자로 간편하게 웹 스크래핑(웹 크롤링)을 하는 방법

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

웹 스크래핑의 원리에 대해서는 이전 글인 웹 스크래핑(웹 크롤링)의 원리에서 다루었습니다. 이번 글에서는 Ruby에서 패키지 2가지를 조합하여 손쉽게 구현한 웹 스크래핑 함수 예제코드를 소개합니다.

(more…)

Continue reading

Backends Python

Python에서 CSS 선택자로 간편하게 웹 스크래핑(웹 크롤링)을 하는 방법

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

웹 스크래핑의 원리에 대해서는 이전 글인 웹 스크래핑(웹 크롤링)의 원리에서 다루었습니다. 이번 글에서는 Python의 패키지 2가지를 조합하여 손쉽게 구현한 웹 스크래핑 함수 예제코드를 소개합니다.

(more…)

Continue reading

Backends PHP

Laravel에서 SHA-2(SHA-256, SHA-512)를 구현하여 사용자 비밀번호 암호화 해싱함수로 사용하기

Laravel은 사용자 비밀번호를 암호화하기 위한 해싱함수로 Bcrypt와 Argon2를 제공합니다. 이 중에서 디폴트 함수인 Bcrypt는 현재까지 등장한 해시함수 중 가장 안전한 방식 중 하나로 알려져 있습니다. 때문에 대부분의 프로젝트에서는 Laravel의 기본 해싱함수를 변경할 필요가 없습니다.

그럼에도 여전히 암호화를 위해 SHA-2 방식을 채택해야 하는 상황이 있습니다. 특히 대한민국의 경우에는 공적기관의 보수적인 보안정책으로 인해 이러한 필요가 생기기도 합니다. 이 때는 Laravel의 기본 해싱함수를 직접 구현하여 변경해야 합니다.

이번 포스팅에서는 SHA-512 방식의 Hasher 클래스를 구현하고, 이를 Laravel에 바인딩하여 비밀번호를 암호화하기 위한 해싱함수로 사용하는 방법을 소개합니다. 또한 이를 구현하기 위해 관련 기술문서와 소스코드를 찾아들어가는 과정을 생략없이 다루어, 향후에 여러분이 자신만의 새로운 서비스를 Laravel에 추가할 때 단서가 될 수 있게 하려 합니다.

(more…)

Continue reading