웹에서 데이터를 가지고 오다 보면 느끼실 텐데, 데이터를 가지고 오는 속도가 꽤 걸립니다.
이게, 코드상, 주식 데이터 가지고 와라 (stockCrawler.py 의 42, 91, 148줄) 하면 내부에서 웹페이지를 열었다 닫았다 하면서 데이터들 가지고 오기 때문에, 한 두종목이면 금방 하지만, 한국 주식 시장의 2천개 넘는 종목이나, 미국 주식 시장의 S&P, NASDAP 종목 3,4천여 개 가지고 오려면 시간이 꽤 걸립니다.
그래서 처음에 데이터를 가지고 올 때는 3년치 데이터를 가지고 오고, 이후에는 1주일(설날 / 추석 같은 휴일처럼 1주일동안 쉬는 주일을 생각해서) 데이터만 가지고 오도록 하면 데이터 요청양도 줄어들고, 갱신 시간도 빨라질 것 입니다.
이를 구현하려면 처음 데이터는 가지고 왔을 때 이를 하드 디스크에 저장하고, 추후 필요(프로그램 재 실행 시) 이 데이터를 우선 로딩 하는 로직이 필요합니다.
데이터를 저장 로딩 방법에는 여러가지가 있습니다.
가장 간단한 건, 그냥 데이터를 메모장에서 쓰는 text 파일로 저장하는 방법입니다. (보통 이런 데이터는 확장자를 csv로 저장합니다)
엑셀파일은 어떠냐라고 하실수도 있는데, 엑셀 파일 경우, ms office 라이브러리 읽고 그걸로 저장 / 로딩해야 하는것에 반해, csv파일 경우 그냥 텍스트 파일에 , 로 컬럼 구분된 값이라 보통 언어 배울 때 기본중에 기본 텍스트 파일 읽고/저장 하는 부분을 응용해서 바로 구현 할 수 있기 때문에 많이 사용하는 편입니다.
그런데 이렇게 저장하면 문제가 데이터를 일부분만 가지고 오고 싶을 때라던가 (작년 데이터 로만 시뮬레이션 해보고 싶다던가) 여러 조건에 제약이 발생합니다.
그래서 데이터를 다루는 언어 SQL에 대해서 간단히 집고 SQLite 를 사용해서 주식 데이터를 저장 / 로드 하는 방법에 대해서 기술 하도록 하겠습니다.
간단한 sql 문법에 대해서
데이터를 조회 / 입력 / 수정에 대해서 표준 언어가 있는데 이를 SQL문법이라고 합니다.
원래 아래와 같은 문법을 많이 사용하는데, SQL은 강제가 아니라, 제품에 따라 문법의 차이가 있습니다. (MSSQL은 TOP 이니 VARCHAR 같은 키워드가 있고, MYSQL은 LIMIT 란것도 있고 오라클도 몇몇 있습니다)
다만 공통중 공통만 기술하면 아래와 같고, 아래 예시는 Sqlite 를 기준으로 작성했습니다.
문법 |
설명 |
예시 |
CREATE |
엑셀 시트 같이 데이터를 넣을 테이블을 생성합니다. |
CREAET TABLE [테이블이름] ([컬럼 명] 타입) 타입은INT, FLOAT, TEXT등이 있고, 속성으로 PRIMARY KEY 라는 중복 없는 컬럼은 하나 지정을 해주는 게 중요합니다. (그래야 데이터를 집어서 찾기 편하거든요) |
SELECT |
엑셀 시트에서 특정 값을 검색하는 명령어입니다. |
SELECT * FROM [테이블이름] WHERE 조건 ORDER BY [정렬 컬럼 명] |
INSERT |
하나의 행을 입력합니다. |
INSERT INTO [테이블이름] (컬럼 명) VALUES(입력 컬럼 값들) |
UPDATE |
테이블 데이터를 수정합니다. |
UPDATE [테이블이름] SET 컬럼 명 = 변수 WHERE 조건 |
DELETE |
테이블 데이터를 삭제합니다. |
DELETE FROM [테이블이름] WHERE 조건 |
DROP |
테이블을 삭제합니다. |
DROP TABLE [테이블이름] |
이런 SQL문 연습은 그림과 같이 SQLite DB Browser 로 SQL 실행으로 확인 가능합니다.
검색 조건이나 사용법에 대해 더 자세히 알고 싶으시면, 구글로 SELECT SQL 식으로 검색하시면 다양한 예문을 검색할 수 있습니다.
여기서는 간단한 쓰임 정도 기술 하였고 이에 대해서는 하기에 자세히 기술 하겠습니다.
'재테크 > 주식 알람 시스템 만들기' 카테고리의 다른 글
5. 주식 차트 그리기 (0) | 2020.11.08 |
---|---|
4-1 주식 데이터 저장 (sqlite) (0) | 2020.11.08 |
3. 주식 데이터 (0) | 2020.11.07 |
2. 주식데이터 가지고 오기 (0) | 2020.11.07 |
1. 프로그램 설계 (0) | 2020.11.07 |