TWIL 12주차, Cache

Matthew Woo·2022년 5월 29일
0

TWIL

목록 보기
12/16

이번 주는 뭔가 더 많이 공부했다는 체감상 느낌이 들었다. 계속 붙잡고 있던 아키텍처를 이번 주에는 안봐서 그런가?

이번 주에는 캐시 관련해서 찾아본 것들이 좀 있는데 파이썬 코드들은 데코레이터가 많이 나왔고 봐둔게 도움이 꽤 되었다.

우선 파이썬 기본으로 내장된 lru_cache를 보고 간단하게 블로그 글도 이번주는 하나 남길 수 있엇다. (lru_cache 본 것 대충 정리)

다음 주에 개별 캐싱 요소에 TTL 적용된 코드를 볼 것 같다.

https://realpython.com/lru-cache-python/

처음에는 이걸 봤는데 TTL 캐시라면서 일정 시간이 되면 전체 캐시를 다 비워버리는 다소 황당한 캐시였다. 그래도 데코레이터를 봐둔게 코드 보는데 확실히 도움이 되었다.

class Person:
    def __init__(self, name):
        self._name = name
        
    @property
    def name(self):
        return self._name
    
    @name.setter
    def name(self, value):
        self._name = value
# result of Person.__dict__
mappingproxy({'__module__': '__main__',
              '__init__': <function __main__.Person.__init__(self, name)>,
              'name': <property at 0x7f83581c46d8>,
              '__dict__': <attribute '__dict__' of 'Person' objects>,
              '__weakref__': <attribute '__weakref__' of 'Person' objects>,
              '__doc__': None})

class 에서도 decorator 쓰인거 볼 때 마다 어떻게 동작하는지 원리가 궁금했는데 데코레이터를 보고나니 이해가 되었다.
특정 값이 property로 매핑되고 property fget, fset, (delete하는거 하나 더 있었는데) 인자로 메소드를 연결해놔서
해당 값에 접근하면 연결된 property method로 접근하게 되는 방식으로 되어 있다.


https://meetup.toast.com/posts/251
요 링크는 회사에서 CTO님께서 한번 읽어보라고 주신 글인데 재밌었다. 재밌었던 포인트는.. 아래와 같다. 나의 슬랙캡처

Matthew 4 days ago
라스에게 봤냐고 여쭤본 이유는 링크 본문에 나오는 아래 글이요
Hot Key 문제가 발생하면, 가장 쉽게 생각 할 수 있는 대안은 읽기 분산입니다. 하나의 마스터에 여러개의 슬레이브를 추가하고, 어플리케이션에서는 여러대의 서버에서 데이터를 읽어오는 방식입니다. 하지만 이런 구성에서 장애가 발생해서 페일오버가 발생하게 된다면 상황이 복잡해집니다. 생각지도 못한 장애와 병목이 발생할 가능성이 존재합니다.
슬레이브 추가하고 이런 구성에서 장애가 발생할 경우 상황이 복잡해진다는데 이런 구성에서 어떤 장애들이 발생할지, 어느 상황들이 좀 있을지 라스는 어떤 상황을 생각했는지 궁금했어요 ㅋㅋㅋ 마스터에서 계속 복제를 해줘야하는데 문제가 생겨서 복제가 더 이상 안되고, 슬레이브들끼리 새로운 마스터 선출함에 있어서 문제가 발생한다던가.. 저는 멧돼지를 제대로 안본게 여기서 티가 나는군요 ㅎㅎ 확실히 읽기 분산처리를 서버분산으로만 처리한다면 아찔하겠는건 느껴집니다 ㅋㅋㅋ 쫄깃하겠네요
짧지만 재밌는거 같아요, 이 글 때문에 Hot key, Big key라는게 있구나라는 걸 알았고 앞에 prefix 를 붙여서 키를 복제해놓고 random read하는 방법이 참신(?)하네요. 한편으로 드는 생각은 Hot key라는 것이 시점에 따라 Hot key 가 요청이 줄어서 식었(?)다가 Hot key 가 다시 되는 시점이 불규칙 적일 수도 있고 정기적이라도 이를 따로 관리해줘야겠네요.(이로 인한 리소스는 어떻게 소요될지^^;) 정기적으로 Hot Key관리를 한다해도 이걸 소비하는 측에도 해당 키가 Hot key라는 것을 인지되고 sync를 맞춰줘야하구요. Sync가 안맞는 경우를 생각해보면, Hot key인데 prefix를 붙이지 않고 요청할 경우를 대비해서 prefix 없는 원본 키도 보유하는 경우 문제가 크게 없을 것 같아요. 헌데 더 이상 Hot key가 아닌데 prefix 를 붙여서 요청하면 prefix를 없애고 재시도를 처리를 해줘야할거 같구요.
또 재밌었던건 압축에 관한 부분이에요. Nginx에서 압축기능 제공하는게 있는걸로 아는데 nginx가 아니더라도 압축하는 데이터가 어떤 데이터냐에 따라 압축하는 알고리즘이나 방식이
여럿 있을 것 같고 어느 레이어에서 압축하고 어느 레이어에서 압축데이터를 다시 decode하는게 효율적일까 뭐 그런 생각이 들어서 재밌었던 글인거같습니다. (edited)

Matthew 4 days ago
다시 생각해보니 Hot key sync 는 크게 어렵지 않을거 같아요.
요청하는 키가 Hot key로 등극(?) 했을 떄는 다음 요청부터는 prefix를 붙이도록 response를 해주고 Hot key로 prefix 붙여서 요청했는데 hot key가 아닐 경우에는 이제 그거 hot key 아니니까 다음부터는 prefix 빼고 요청하라고 응답하면 간편할거같아요

이런 생각을 했는데 또 읽은 라스의 반응은 코멘트 말이 많은걸 보아 뭔가 더 공부할 포인트나 모르는 부분이 많은 것 같아 좋다 ㅋㅋㅋ. 내가 뭘 모르는지 인지하고 넘어가면 그걸 나중에 채우는 순간에 재밌게 해당 부분을 공부할 수 있게 된다.


https://instagram-engineering.com/dismissing-python-garbage-collection-at-instagram-4dca40b29172#.koitdzt7n
이 글은 인스타그램에서 django쓰면서 gc를 없앤이유, 라는 책인데 파이썬 gc가 어떻게 동작하는지 모르다보니 몇번 시도 해보다가 나중에 다시 읽어보는게 좋겠다 싶었다.

코드리뷰 관련해서 영상을 하나 봤는데 코드 리뷰만 받다가 이제 슬슬 코드리뷰도 할텐데 많은 도움이 되었다.
https://www.youtube.com/watch?v=ssDMIcPBqUE&t=5582s

클린코드
클린코드도 좀 봤다. 클린코드, 클린아키텍처를 보다가 답답한건 자바언어를 몰라서 파이썬 예제를 찾는다거나, 예제 코드가 모르는 언어다 보니 불편했는데, 그냥 나오는 예제 수준의 자바 코드는 검색해가며 보니 정말 별거 아니다 싶다. 자바 언어자체가 그렇다는게 아니라 책에 나오는 예제정도는 뭐..
예전에 코딩 아무것도 모를 때 접한 자바는 정말 어려웠는데 파이썬이나 객체 개념이 어색하지 않다보니 클린 시리즈 책에 나오는 정도는 모르는 코드 키워드는 검색하면서 보니 쉽게 보인다. 진즉 왜 이렇게 안봤을까하는 생각이 든다.

이번 주는 다채롭게(?) 공부도 많이 한 것 같아 좋다. 맥주가 꽤나 아니 너무 땡겨서 캔 한잔 하고 취해서(술찌) 사십 분 누워서 핸드폰 보다가 이걸 쓰고 있긴한데 여전히 휴대폰 사용시간을 줄이는 건 숙제다.

출퇴근 시간이나 왔다갔다하면서 주식 관련된 것도 좀 보는 편인데 요새 장이 워낙 안좋다보니 현금을 들고 지켜보는 것도 나쁘지 않겠다는 생각에 주식 관련된걸 덜 보면서 소모 컨텐츠를 보는 시간도 좀 늘었다. 채권을 좀 사려고 채권을 좀 알아봐야하는데 흠 아무튼 그래도 기분 좋은 5월 마지막 주 였다.

profile
Code Everyday

0개의 댓글