슬래시 24를 참가했을 당시 토스 증권이 데이터 웨어하우스를 설계 할 때 발생했던 문제들의 해결 과정을 설명한 세션을 보고 작성한 글입니다.해결하고자 한 문제데이터 분석 전 필요한 데이터를 찾고 필터링 하기까지의 전처리 시간이 오래걸리고 복잡- ex) 의사 결정자가 체결된 월간 주문건수를 살펴봐 한다면, 주문테이블 체결테이블등에 관련된 테이블들을 다 찾아봐야 하고 날짜별로 필터링 해야하는 등 복잡데이터 필터링을 미리 해둔 데이터가 있으면 위와 같은 전처리 시간을 줄일 수 있지 않을까?데이터 필터링을 미리 해두어 저장하자필요 데이터가 어떤것인지 기준을 잡기 위해, 자주 인입되는 질문들을 유형화유저가 언제 방문했는지 (방문시점)일, 주, 월 단위로 몇 명인지 (기간)이탈/복귀/신규 유저 중 어떤 카테고리에 ..
분류 전체보기
후기"이런걸 만들어 두면 좋지 않을까?" 라는 아이디어들은 아이디어에서 끝나는 경우가 많았던거 같다.일을 위한 일이 되기 때문일지도 모르지만, 안해본 일이라는 리스크가 아이디어 실행을 막는 가장 큰 요인이라고 생각한다.!이번 Slash 24 컨퍼런스에서 발표하는 사람들의 공통점은, 그럼에도 불구하고 아이디어를 실행에 옮기고 생산성에 기여한 사람들이라는 생각이 들었다.물론 세션마다 얘기하는 주제가 천차만별이지만 흐름 들은 대부분 이와 같았다.지금 운영중인 코드들은 관리(혹은 유저경험과 생산성) 관점에서 별로인데 개선 할수 없을까 생각했습니다.개선을 하려고 하는데 관련 기술이 없을까 찾아봤습니다.에이 없네 직접 만들어야겠다 (?!)(만든 이후) 이러한 성과가 나왔구요, 이러한 점이 개선되었고 또 이러한 부분..
1.2.1 소프트 파싱 vs. 하드 파싱내부 프로시저를 캐싱해두는 공간을 라이브러리 캐시 라고 한다.서버 프로세스와 백그라운드 프로세스가 공통으로 액세스하는 데이터와 제어 구조를 캐싱하는 공간을 SGA 라고 하는데 라이브러리 캐시는 SGA 의 구성요소이다.SQL 을 파싱한 후 해당 SQL 이 캐시에 존재하는지 확인하는데,캐시에서 찾으면: 바로 실행단계로 넘어간다, 이를 소프트 파싱 이라고 함캐시에서 못찾으면: 최적화 및 로우 생성 단계까지 모두 거치는 것을 하드 파싱 이라고 한다.SQL 최적화 과정을 hard 라고 표현하는 이유는 최적화에 많은 단계가 있고, 고려해야 할 부분이 많아서이다.따라서, 라이브러리 캐시가 존재한다.1.2.2 바인드 변수의 중요성SQL 은 이름이 없다SQL 이름이 없다, SQL ..
1.1.1 구조적, 집합적, 선언적 질의 언어SQL은 "Structured Query Language", 말그대로 구조적 질의 언어이다.SQL 은 구조적이고, 집합적이고, 선언적인 질의 언어이다. 원하는 결과집합을 구조적 집합적으로 선언하지만, 그 집합을 만들어 내는 과정은 절차적일 수 밖에 없다즉, 그 과정을 대신해주는 프로시저가 필요한데, 그게 바로 SQL 옵티마이저이다.DBMS 내부에서 프로시저를 작성하고 컴파일 해서 실행 가능한 상태로 만드는 것을 SQL 최적화 이라고도 한다.1.1.2 SQL 최적화SQL 을 실행하기 전 최적화 과정은 아래와 같다.SQL 파싱 : SQL 파서가 파싱을 진행한다.SQL 문을 분석해서 파싱트리 생성, 문법이나 의미적으로 오류 있는 지 확인한다.SQL 최적화 : 옵티마..
*아래에서 사용될 함수(go, curry...)들은 이전 포스트들에서 설명되어 있습니다.📗Promise vs CallbackPromise 형식의 코딩과 Callback 형식의 코딩에는 많은 차이가 있다.첫번째로 가독성이다,function add10(a, callback) { setTimeout(() => callback(a + 10), 100); }//콜백이 겹겹히 쌓이면 안에 로직 보기가 힘들다.add10(5, res => { add10(res, res => { add10(res, res => { add10(res, res => { add10(res, res => { // 콜백지옥이 발생할수 있다. }); }); }); });});function add20(..
*아래에서 사용될 함수(go, curry...)들은 이전 포스트들에서 설명되어 있습니다.📗함수형 프로그래밍에서 reduce 와 take의 역할어떠한 데이터를 최종적으로 만들어 낼 것인가? 에서 결과를 만들어주는 reduce와 take 계열의 함수들은 중요하다.앞에서는 지연평가를 이용하여 함수를 살펴보았고, 실제로 평가가 미루어져서 마지막 take에서 부터 연산이 실행함을 알 수 있었다.그렇다면 다시 말해, reduce와 take계열의 함수는 연산의 시작점 이라고 볼 수 있을 것이다.queryStr 함수 생성으로 알아보는 함수형 프로그래밍적 사고아래 코드 queryStr 함수 실행시의 주석을 보면은L.entries = function* (obj) { for (const k in obj) yield ..