일정한 시간마다 정보를 수집 하고 DB에 저장한 후 REST API로 정보를 제공하는 서비스를 구현하려고 한다.
그전에 앞서 사전 지식을 가지고 있어야 한다.
Sqlite
개인적으로 mongodb를 좋아하고 일반적으로 DB서버를 sqlite를 사용하지 않지만 가볍게 서비스를 구축하려고 하므로 sqlite를 사용하려고 한다.
sqlite는 클라이언트에 최적화된 경량화 버전의 DB이다. 일단 매우 가볍다. 내가 저장한 텍스트 크기와 거의 비슷하게 DB용량이 증가한다. 크롬, 카카오톡 PC버전, 안드로이드 앱이 기본적으로 sqlite DB를 사용한다고 생각하면 그 이유가 있지 않을까? 그리고 호환성이 매우 좋아서 어느 운영체제에서나 편하게 사용, 개발할 수 있다. 또한 읽기 작업을 하는데 매우 빠르다.
단점을 말하자면 sqlite는 다른 디비와 다르게 다양한 자료형을 제공하지 않는다. BLOB(바이너리), NULL(비어있음), INTEGER(숫자), TEXT(문자열)만 제공할 뿐이다. 생각보다 시간을 디비에 자주 저장하고 인덱싱 하는데 이러한 기능은 좀 넣어주었으면 좋겠다.
두 번째 단점으로 사용자가 1명에 최적화되어있다. 디비에 값을 저장하는 동안 디비를 잠그기 때문에 여러 사용자가 쓰기가 많은 작업해야 하는 경우엔 적합하지 않다.
어려운 쿼리는 제외하고 테이블을 생성하고 값을 넣고 조회하는 방법만 알아보자. 추가적인 설명은 DB에 관한 내용이므로 패스하겠다.
윈도우는 작업 스케쥴러라는 프로그램으로 기본적으로 내장되어 있어서 크론탭을 사용할 필요가 없다. 일반적인 사용자는 작업 스케줄러 사용법을 잘 모르고 있다. 오히려 악성코드가 자동실행을 위해 사용되는 기능으로 주로 사용된다. 윈도우의 작업스케줄러가 있다면 리눅스에는 크론탭이 존재한다.
크롤링을 하여 디비에 결과를 저장하는 프로그램을 만들어도 단발성이면 사람이 주기적으로 실행해야 하는 문제가 있다. 이러한 프로그램을 아주 작게 마이크로 단위로 서비스를 만든 뒤 크론탭으로 주기적으로 실행하도록 구현하면 도커에 컨테이너를 띄우기도 용이하다.
리눅스의 크론탭 사용방법은 다음과 같다. 어떤식으로 작업할지 쉘스크립트를 만들고 그 스크립트 파일을 어떤 식으로 작동시킬지 시간설정을 하면 된다.
주기적으로 필요없는 로그파일을 삭제하는 쉘스크립트를 만들고 하루에 한번씩 14시 20분에 실행하도록 해보자.