숫자 앞의 접두어 0x, 0o, 0b의 의미는 무엇일까?
프로그래밍 소스코드에서는 종종 숫자 앞에 접두어 0x, 0o, 0b가 붙는 경우가 있습니다. 이 접두어는 이어지는 숫자가 각각 16진수, 8진수, 2진수임을 의미합니다. 실제 소스코드에서는 아래와 같이 등장하는데, Python, Ruby, Javascript 등의 언어에서 모두 같은 형태를 가집니다.
(more…)프로그래밍 소스코드에서는 종종 숫자 앞에 접두어 0x, 0o, 0b가 붙는 경우가 있습니다. 이 접두어는 이어지는 숫자가 각각 16진수, 8진수, 2진수임을 의미합니다. 실제 소스코드에서는 아래와 같이 등장하는데, Python, Ruby, Javascript 등의 언어에서 모두 같은 형태를 가집니다.
(more…)Laravel은 사용자 비밀번호를 암호화하기 위한 해싱함수로 Bcrypt와 Argon2를 제공합니다. 이 중에서 디폴트 함수인 Bcrypt는 현재까지 등장한 해시함수 중 가장 안전한 방식 중 하나로 알려져 있습니다. 때문에 대부분의 프로젝트에서는 Laravel의 기본 해싱함수를 변경할 필요가 없습니다.
그럼에도 여전히 암호화를 위해 SHA-2 방식을 채택해야 하는 상황이 있습니다. 특히 대한민국의 경우에는 공적기관의 보수적인 보안정책으로 인해 이러한 필요가 생기기도 합니다. 이 때는 Laravel의 기본 해싱함수를 직접 구현하여 변경해야 합니다.
이번 포스팅에서는 SHA-512 방식의 Hasher 클래스를 구현하고, 이를 Laravel에 바인딩하여 비밀번호를 암호화하기 위한 해싱함수로 사용하는 방법을 소개합니다. 또한 이를 구현하기 위해 관련 기술문서와 소스코드를 찾아들어가는 과정을 생략없이 다루어, 향후에 여러분이 자신만의 새로운 서비스를 Laravel에 추가할 때 단서가 될 수 있게 하려 합니다.
(more…)웹 스크래핑(Web Scraping) 또는 웹 크롤링(Web Crawling)은 웹 페이지로부터 원하는 정보를 추출하는 기법입니다. 어떤 서비스에서 API가 별도로 제공되고 있지 않지만 웹 페이지로는 정보가 제공되고 있을 때, 웹 스크래핑 기법을 이용하면 원하는 정보를 획득할 수 있습니다.
웹 스크래핑의 원리에 대해서는 이전 글인 웹 스크래핑(웹 크롤링)의 원리에서 다루었습니다. 이번 글에서는 PHP에서 몇 가지 패키지를 조합하여 손쉽게 구현한 웹 스크래핑 함수 예제코드를 소개합니다.
웹 스크래핑(Web Scraping)은 웹 페이지로부터 원하는 정보를 추출하는 기법입니다. 어떤 서비스에서 API가 별도로 제공되고 있지 않지만 웹 페이지로는 정보가 제공되고 있을 때, 웹 스크래핑 기법을 이용하면 원하는 정보를 획득할 수 있습니다.
웹 스크래핑은 흔히 웹 크롤링(Web Crawling)이라고도 많이 불립니다. 물론 엄밀하게 두 단어는 서로 다른 의미입니다. 크롤링은 여러 웹 페이지를 기계적으로 탐색하는 일을 말합니다. 한편 웹 스크래핑은 특정한 하나의 웹 페이지를 탐색하고, 또 소스코드 작성자가 원하는 정보를 콕 집어 얻어낸다는 점에서 크롤링과 차이가 있습니다. 그럼에도 크롤링과 스크래핑은 구현방법이 거의 같기 때문에, 실무에서는 구분없이 많이 불립니다.
이번 포스팅에서는 미국 CNBC 방송의 웹사이트에서 S&P 500 지수의 값을 확인하는 과정을 통해서, 웹 스크래핑의 원리를 PHP 예제코드를 통해 설명합니다.
(more…)성능좋은 인프라와 빠른 속도의 DB Query로 아무리 구성하고자 노력한다 하더라도, 캐싱은 여전히 웹프로그램의 성능을 향상시키기 위한 가장 고전적이면서 가장 가성비 높은 해법입니다. PHP에서는 APC와 같은 모듈을 활용하는 것이 일반적이지만, 특정 웹페이지에서 사용하는 데이터를 핀포인트로 캐싱할 때는 이를 직접 구현해보는 것도 선택가능한 대안입니다.
이번 포스팅에서는 일반적으로 PHP에서 변수에 담긴 데이터를 파일로 캐싱하는 방법을 다양한 예제코드를 통해 설명합니다. 이 과정에서 실무에 적용가능한 수준의 예제코드를 몇 가지 선보이고자 합니다. 마지막 단계에서는 PHP의 파일시스템 함수들을 조합하여, 충분한 시간이 지나면 캐싱이 만료되는 TTL(Time to Live)의 구현방법을 모색해볼 것입니다.