분류 전체보기 26

급격한 db 데이터 증가에 대처하는 방법 - Sharding

데이터 베이스에 급격스런 데이터가 추가 되었을 때 전략데이터 베이스에 급격스런 데이터가 추가 되면 성능에 큰 하자가 생길 때가 있다. 이럴 경우 어떤 방식으로 데이터를 분산할까? 1. DB Sharding2. DB Partitioning3. Replication4. Distributed db system 다음과 같은 전략이 사용될 수 있을 것이다. 이중 이번엔 sharding에 대하 기록하도록 한다. 1. 샤딩이랑 무엇인가?샤딩(sharding)은 db를 나누어 다른 machine(샤드(shard) 라고 불린다)에 db를 저장하는 방식을 말한다.  2. 샤딩의 전략A. 수평적 샤딩(Horizontal Sharding)  row단위로 테이블을 나누어 갹 샤드마다 row의 범위를 지정하여 저장한다. 위의 그..

DB 2024.05.27

poetry add 혹은 pipenv install 무한로딩

venv를 통한 pip install은 정상 작동되지만  poetry 혹은 pipenv와 같은 패키지 매니저를 쓸때 패키지 설치가 안될때가 있다. 이때 keyring인증이 문제인 경우가 있다 poetry add -vvv 패키지이름 poetry의 경우 위 -vvv커맨드를 입력하면 상세 로그가 나온다이때 만약 keyring인증에서 넘어가고 있지 않다면export PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring 를 .bashrc 또는 .bashpofile에 등록하면 된다. 만약 위 방법으로 해결은 안되지만 검색이 필요할땐 다음 단어를 넣어 검색하는걸 추천한다. poetry add stuck / hang

python 2024.05.08

Clean-architecture 계층 Use Case layer

프로그램에서 가장 중요한 영역 use case1. 어떤 내용이 들어갈까?use case 계층은 프로그램(프로젝트) 혹은 앱에 있어 가장 중요한 부분이다.비즈니스 룰이 바로 이 계층에 들어간다.사용하는 진짜 데이터를 가공하는 부분이 비즈니스 룰의 역할이다. 예를 들어 사용자 로그인, 특정필터를 사용한 검색수행 그리고 은행의 트랜잭션 작업이 이에 해당한다.※ 비즈니스 룰이란 시스템의 가장 코어한 부분의 내용이다 2. User Case계층의 특징이 계층은 최대한 작으면 작을수록 좋다.작은 기능을 하나씩 고립 시키는 것(수정하거나 고칠때 이부분만 고치면 된다는 의미다.)작은 기능 하나씩 독립적으로 만들어 테스트하기 좋고 유지보수하기 좋게 만들어야한다.use case를 통해 entities에 접근할수 있어야 하며..

architecture 2024.04.29

Clean-architecture 계층 entities layer

clean architecture의 가장 안쪽의 있는 계층Entities layer에 대해 정리한다. 1. 어떤 내용이 들어갈까?이 계층은 도메인 모델의 구현체가 들어가게 된다.간단히 말하자면 앱을 만들때 상호작용하는 특정한 구현체들이 들어간다 보면된다. ※ 단, String 같은 파이썬에서 전반적이고 일반적인 사용되는 모델이 들어가는게 아니라, 앱 기준으로 특징을 기준으로 고립시켜 사용할 모델을 넣는다.ex) 예약 플랫폼에서 delux Room, suite room  책 clean-architectures-in-python에서는 다음과 같이 말하고 있다.If your project was a tool to analyse medieval manuscripts, however, you might need ..

architecture 2024.04.29

클린 아키텍쳐 파이썬- django

Clean- Architecture란 무엇일까?  clean- architecture가 2021년 유럽 장고콘에서 다뤼졌다.기존의 django 구조에는 어떤 문제가 있었길래 이런 clean architecture가 소개 된걸까? 기존 Django Architecture의 문제점은?※ 비즈니스 로직을 어디에 두어야 할까?Views → 읽기 힘들다, 다시쓰기 힘들다Models → 모델의 dependency를 너무 복잡하게 생성한다. (즉, 수정하기 힘들다 능동적 db대응 힘듬)Forms → 이건 UI에 묶여있는 로직이라 불가하다- 위의 모든 파트는 unit test하기 힘들고 share하기도 힘들다. 해결책은 무엇일까?특정한 layer에 고립된 비즈니스 로직을 만들자이런 layer들을 use cases la..

architecture 2024.04.25

spark memory 관리

spark 1.6+ 부터 spark는 StatciMemoryManager에서  UnifiedMemoryManager로 메모리 관리 모델을 바꾸었다  On - heap memory- jvm에서 관리되는 메모리 영역으로 우리가 spark.executor.memory로 정하는 메모리 크기가 할당된다.- GC가 작동되며 GC에 의해 메모리관리가 이루어진다.Spark executor의 메모리 구조보통 스파크의 executor의 메모리는 spark.executor.memory 옵션을 통해 정한다.spark.executor.memory옵션은 executor의 java heap memory의 양을 결정한다.  그럼 이 memory는 어떻게 관리 될까? spark의 oom 그리고 spill data를 막기 위해서 mem..

spark 2024.02.27

Repartiotion 방법

https://code-lib.tistory.com/13 Spark partition 이해하기 스파크에서 분산 병렬처리를 위해서 Partition에 대한 이해는 필수 스파크 작업의 가장작은 단위는 task다 그리고 task는 1개의partition이다 1 task == 1 partition task는 core에 할당되고 이 core들의 집합은 1 code-lib.tistory.com partition이해하기에서 추가적인 설명을 덧붙이고자 한다. 1. spark.default.parallelism VS spark.sql.shuffle.partitions spark.default.parallelism이란? join, reduceByKey 같이 RDD에서 적용되는 파티션을 다룰때 사용된다. 오직 RDD단에만 ..

spark 2024.02.16

Spark partition 이해하기

스파크에서 분산 병렬처리를 위해서 Partition에 대한 이해는 필수 스파크 작업의 가장작은 단위는 task다 그리고 task는 1개의partition이다 1 task == 1 partition task는 core에 할당되고 이 core들의 집합은 1개의 executor가 담당한다 (보통 spark에서는 1~5개를 1개의 executor에 할당한다 그 이상은 경험적으로 spark성능에 좋지 않은 영향을 준다.) ※ 단 core != task 명심해라. spark.task.cpus 설정 옵션을 보면 Number of cores to allocate for each task.라고 설명 되어있다. 즉 task한개에 여러개의 core가 붙을 수 도 있다. 하지만 기본값은 1이다 즉 1개의 task에 기본적으로..

spark 2024.02.16

자주사용되는 spark config

spark.executorEnv.[EnvironmentVariableName] -> 각 executor의 환경 변수를 지정한다. 더보기 주로 사용되는 환경변수 spark.executorEnv.JAVA_HOME -> 자바 홈 디렉토리 설정 spark.executorEnv.PYSPARK_PYTHON -> 파이썬 환경 디렉토리 설정 spark.pyspark.python -> driver와 executor의 Python binary를 설정 (Pyspark용) -> python binary란 python 실행파일이라 생각하면 쉽다. spark.archives -> driver와 executor노드에 공통으로 사용될 파일을 만든다. (archiving) (사용되는 형식은 .jar, .tar.gz, .tgz and ..

spark 2024.02.13

class 적응하기 2

자 지난번 Class 적응하기 1 에서 이어나가고자 한다. https://code-lib.tistory.com/8 class 적응하기 1 처음 프로그래밍을 시작한 학생에게 class는 왜 쓰는가에 대한 고민이 있을것이다. 초보가 혼자서 코드를 만들 땐 생각보다 class는 안쓰고 전부 하드 코딩과 함수로만 만드는 경향이 있다. 많은 code-lib.tistory.com 이전 글 요약 Class파이어뱃을 만들면 될까? 똑같이 class를 만들면 되지라고 생각할 것 이다. 그런데 마린이랑 파이어뱃의 차이가 뭘까? 위에서는 체력, 공격력, 방어력만 정의 했지만 실제에선 소형인지 중형인지 아니면 대형인지? 도트는 어떻게 되있는지, 목소리는? 생산될때 속도는? 전부 다르게 정의 할것이다. 하지만 움직이는것은 마린..

python 2024.01.30