MongoDB Bucket Pattern
·
개발
The Bucket Pattern타임시리즈 데이터를 효율적으로 저장하고 읽기 성능을 최적화하기 위해 데이터를 그룹화하여 저장하는 디자인 패턴 Main Idea데이터를 일정 범위(시간, 범위, 키)에 따라 그룹화하여 하나의 문서에 저장. 다수의 작은 문서 대신, 관련 데이터를 하나의 버킷에 모아 읽기/쓰기 성능을 최적화Additional그룹화 기준은 무엇으로 할 것인가?조직id 별로 매출을 모아서 확인할 수 있어야함모든 조직에 대한 매출 합계를 확인할 수 있어야함하나의 bucket에 들어가는 데이터의 양은 어떻게 할 것인가?!하나의 문서에는 16MB를 초과하지 않아야함16MB의 크기는 어느정도일까?!timestamp 는 약 20바이트{ "_id": "sensor1", "bucketStart": "202..
고민 4일차
·
개발
ROI가 분명한 결과물open api spec을 활용한 type-gen을 활용하여 개발을 한 것 Client/Server 간의 소통 비용을 엄청 줄임Server의 수정이 발생하면 즉시 client가 알 수 있음 개선이 필요한 곳Sales statistics를 어떻게 저장하고 불러올 지?누적 데이터를 효율적으로 저장하고 불러오기 위함매번 쿼리를 날리는 것이 아닌 과거 데이터는 추가 요청 없이 불러올 수 있도록?!DB는 mongtoDB 사용 중이므로 bucket pattern을 사용할 것인가?누적 데이터를 처리하는 스케줄러를 만들것인지? 스케줄러는 오버엔지니어링?? ROI 판단을 해 볼 필요가 있을 듯테스트 코드단순 커버리지를 높이는 것이 아닌 실질적으로 필요한 테스트에 대한 코드를 작성 동작 방법과 구현이..
어떤 것을 개선할 것인가?
·
개발
하고 싶은 것?라이브러리 분석/파악jacksonstripe sdk의 구조를 우리 서비스에 맞춰보기exception handler 올바르게 이해하고 있는지@Transaction의 원리와 순서지금 보다 더 나은 설계 방향 제시?더나은 설계란? 이를 증명하기 위한 수치 데이터는 어떻게 측정할 것인가?현재 문제점?webhook을 실행 중인 모든 local server에서 받으면서 webhook logic이 모든 로컬 서버에서 실행됨. 이를 해결하는 방법?!내가 발생시킨 이벤트만 응답하도록?편하게 webhook listening을 껐다 킬 수 있도록개선 할 수 있는 것?정확한 ROI 판단을 위하여 쌓을 수 있는 데이터가 무엇이 있을지 고민하기성능 개선을 여부를 확실하게 파악할 수 있는 데이터들이 필요 -> 수치화..
맨날 헷갈리는 파이썬 deque 문법
·
개발
- deque : 앞 뒤에서 데이터를 처리할 수 있는 양방향 자료형-  dq.append(x) : 덱의 오른쪽으로 원소 삽입- dq.pop() : 오른쪽 원소 제거 후 반환- dq.appendleft(x) : 왼쪽 끝에 요소를 추가- dq.popleft(): 왼쪽 원소 제거 후 반환- dq.count(x) : x의 갯수를 반환- dq.remove(x) : x가 가장 먼저 등장되는 곳을 제거
맨날 헷갈리는 파이썬 문법 defaultdict()
·
개발
- defaultdict()는 딕셔너리를 만드는 dict 클래스의 서브 클래스임- 주어진 객체의 기본값을 딕셔너리 값의 초깃값으로 지정가능함 from collections import defaultdictint_dict= defaultdict(int)int_dict["key"] // 이렇게 선언하게되면 값을 지정하지 않은 키는 0으로 초기화됨list_dict = defaultdict(list)list_dict["key1"] // 이렇게 선언하게되면 빈 리스트로 초기화
맨날 헷갈리는 파이썬 hash table
·
개발
- hash table은 key/value로 데이터를 저장하는 자료구조- 데이터 검색하는 경우 많이 사용- key에 해시 함수를 적용해서 고유한 index를 생성하고 Index를 활용하여 값을 저장 및 검색함. (O(1))- python에서 hash table은 굉장히 간단하게 사용 가능. 딕셔너리/튜플 타입이 hash table을 사용함
맨날 헷갈리는 파이썬 리스트 문법
·
개발
- `reverse()` :  리스트를 거꾸로 뒤집음>>> a = [1,2,3]>>> a.reverse()>>> a[1,2,3] - `sort` : 정렬, 기본값은 오름차순! key옵션과 함께 사용 가능. key 옵션에 지정된 함수의 결과에 따라 정렬>>> a = [4,2,6]>>> a.sort()>>> a[2,4,6]>>> a = [1,2,3]>>> a.sort(reverse=True)[3,2,1]>>> m = "안녕하세요 나는 윤주다">>> m = m.split()>>> m ["안녕하세요", "나는" , "윤주다"]>>> m.sort(key=len)>>> m["나는", "윤주다", "안녕하세요"] - `sorted` 정렬된 리스트를 반환!- `reversed` iterable한 객체를 반환하기에 li..
맨날 까먹는 파이썬 문법
·
개발
Dictionary - 딕셔너리 타입은 immutable한 key와 mutable한 value로 맵핑 되어 있는 순서가 없는 집합//일반적인 형태{'a': 1, 'b': 2}- key로는 immutable한 값만 사용 할 수 있음 (예를 들어, int/tuple/float/bool 사용 가능 but set/list/dict 사용 불가)- key가 중복되면 마지막 값으로 덮어씌워짐- mutable한 객체이기에 키로 접근하여 값 변경가능>>> dic["key"] = "any value">>> dic{ 'key' : "any value" }- 리스트 속의 리스트/튜플 또는 튜플과 리스트/튜플을 dict로 변형 가능>>> this_is_list = [ ["testKey", 1], ["testKey2",2] ]>..