일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 코드 계약
- 레디스 동시성
- 알람 시스템
- 이분탐색
- 완전탐색
- 쿠키
- AWS
- 좋은 코드 나쁜 코드
- 구현
- 디버깅
- 검색어 추천
- prg 패턴
- gRPC
- 트랜잭샨
- spring event
- 누적합
- piplining
- 숫자 블록
- 객체지향패러다임
- 수신자 대상 다르게
- 깊게 생각해보기
- 프로그래머스
- 결제서비스
- 셀러리
- 백준
- 카카오
- docker
- branch 전략
- jwt 표준
- BFS
- Today
- Total
코딩관계론
[테마주 프로젝트] 속도 개선을 위한 DB 도입 본문
프로그램 개요
당일 상한가 종목이 속한 테마주와 해당 테마에 관련된 종목들을 사용자에게 카카오톡을 이용해 자동으로 전달한다.
스크랩핑 구조
네이버 금융 페이지에 들어가면 테마와 관련된 정보들을 찾을 수 있다. 해당 테마명을 클릭하면 그림 1처럼 테마에 해당하는 종목들을 확인할 수 있다.
하지만 그림 1에서 보이듯이 주식에 테마란 매우 많다. 단일 페이지가 아니라 총 7페이지로 구성되어 있었다. 인터넷이 빠른 환경에서 실행하면 사용자에게 빨리 알람을 주었지만, 느린 환경에서 실행하면 상당한 시간이 필요했다.
즉 크롤링 속도가 프로그램 실행 속도에 영향을 미쳤다.
속도 개선을 위한 DB도입
처음에는 아래와 같이 하나의 필드에 다수의 정보를 입력했었다. 실행되는 시간은 빨라졌지만 아래의 설계 방식은 DB의 정규화에 위배되었다.
아래의 같은 방식을 유지하게 되면 갱신 이상 현상이 발생한다.
예를들면 '희귀금속 테마주'에서는 'LX인터내셔널'이지만 'AI' 테마주에서는 LX인터내셔널 상호가 LX AI일 수도 있다.
위 현상을 방지하려면 정규화를 수행해야 한다
아래의 사진 2같은 경우는 1정규화 위반임으로 이를 해결해보자
아래의 그림 3과 같이 테이블을 나눈다면 1차 정규화 문제를 해결할 수 있다. 테마를 기준으로 이너 조인을 수행한다면 해당 테마에 속하는 주식들을 확인할 수 있다.
2차 정규화에 실패하면 나타나는 "부분 함수 종속" 역시 발생하지 않고, 3 차 정규화에 실패하면 나타나는 특징인 이행 종속 역시 발생하고 있지 않다.
결론
이러한 DB 테이블을 구성하여 이상 현상을 해결했고, 프로그램의 실행 시간도 환경에 구애 받지 않고 일정하게 유지하도록 개선에 성공했다
부분 함수 종속: 릴레이션에서 종속자가이 기본키가 아닌 다른 속성에 종속되거나, 기본키가 여러 속성으로 구성되어 있을경우 기본키를 구성하는 속성 중 일부만 종속되는 경우입니다.
이행 종속: 릴레이션에서 X, Y, Z라는 3 개의 속성이 있을 때 X→Y, Y→Z 이란 종속 관계가 있을 경우, X→Z가 성립될 때 이행적 함수 종속이라고 합니다. 즉, X를 알면 Y를 알고 그를 통해 Z를 알 수 있는 경우를 말합니다.