전체 글
-
Python - PropertyPython 2024. 2. 19. 21:35
1. 사전 지식 - 파이썬 클래스 - 데코레이터 - 클래스로 코드를 작성한 경험 및 인스턴스의 속성(상태)을 다루어본 경험 2. Property은 무엇이고 장점은 무엇이고 항상 써야하는가? Property Python의 property()를 사용하면 클래스에서 속성(상태)을 생성할 수 있음 안정적인 API를 제공하면서 클래스와 객체에 의존하는 사용자의 코드를 깨뜨리지 않고도 코드 변경을 관리할 수 있음(=코드의 유지보수성과 확장성 향상) 일반적인 케이스(아래 예시와 같은)는 인스턴스 속성을 접근/수정/삭제 하는 것임(클래스 속성이 아님) 장점 속성을 정의하는 데 사용되는 문법은 매우 간결하고 읽기 쉬움 인스턴스 속성에 직접 접근하거나 수정하는 것을 피하면서도, 마치 공개 속성처럼 정확하게 접근할 수 있으..
-
Random Id generatorProgramming 2022. 12. 30. 10:03
crypo randomFillSync https://www.geeksforgeeks.org/node-js-crypto-randomfillsync-method/ nanoId - https://github.com/ai/nanoid import { randomFillSync } from 'crypto' const POOL_SIZE_MULTIPLIER = 128 let pool, poolOffset function fillPool(bytes) { if (!pool || pool.length < bytes) { pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER) randomFillSync(pool) poolOffset = 0 } else if (poolOffset ..
-
디자인 패턴Programming 2022. 12. 23. 17:47
* 헤드퍼스트 디자인패턴(개정판), Node.js 디자인 패턴 바이블 책을 보며 이해하고 작성, 참고 또는 직접 작성한 코드를 적어본다. * 구상(Concrete) 클래스: new 키워드를 사용하여 인스턴스를 만드는 클래스(=구현 클래스) * 추상(Abstract) 클래스: 하나의 추상 메소드를 포함하는 클래스로 이를 상속하는 자식 클래스는 추상 메소드를 구현해야함 * 인터페이스(Interface): 클래스의 공통된 기능을 정리한 명세서 * 컨택스트(Context): 사용자가 관심 있는 인터페이스를 정의/문제에 대한 정의,상황 옵저버 전략 패턴 특정 변경이 필요한 부분을 별도의 상호 교환 가능한 (전략) 객체로 추출하여 로직의 변경이 용이하도록 함 추출하여 합성하는 것이 포인트 해당 패턴을 알기전에 합성..
-
API 테스트 툴 - ArtilleryWEB 2022. 9. 6. 22:10
https://www.artillery.io/ Artillery.io | Load & Smoke Testing Keep production reliable, customers happy, and pagers silent. www.artillery.io 기존에는 직접 API를 호출하는 스크립트를 작성했지만 정확하지 않다고 판단하여 테스트 툴을 알아보았다. 설치 방법 - npm install -g artillery@latest - artillery run scenarios.yaml ./scenarios.yaml config: target: 'http://localhost:3000' phases: - duration: 30 # 30초 동안 1초마다 1번 요청 arrivalRate: 1 name: Warm up..
-
몽고 디비 튜닝Database 2022. 8. 22. 19:15
몽고디비 튜닝 # 인덱스, 복합인덱스 1. 쿼리에는 동등(=) 필터에 대한 키를 맨 앞으로 한다. 2. 정렬에 사용되는 키는 다중값 필드 앞으로 한다. 3. 다중값 필터에 대한 키는 마지막에 표시한다. 4. 복합 인덱스의 경우에 정렬을 다르게 하는 게 효과적인지도 확인필요하다. 5. 복합 인덱스의 처음 필드는 단일 인덱스를 따로 만들 필요는 없다. # 쿼리 플랜으로 인덱스 선택하는 지 확인하기 1. 선택한 인덱스를 몽고디비가 알아서 선택하는지, 풀스캔인지, 인덱스스캔인지 https://steady-coding.tistory.com/564 2. Connection pool size - 테스트를 해보면서 결정하지만 일반적인 공식은 core_count*2 + effective_spindle_count 웹 컨테..
-
도커 내부에서 동작하는 크롤러 개발하기Docker 2022. 7. 17. 14:58
1. 크롬, 크롬브라우저 버전 맞추기 / 버전 고정 2. 파이썬 경로를 설정해주는 부분이 필요함 * * * * * root /usr/local/bin/python3.9 /usr/src/app/main.py > /tmp/crawler.log 2>&1 과 같이 하면 파이썬 실행시 발생하는 에러로그들을 확인 할 수 있음. 파이썬 스크립트 내에 로그 라이브러리를 써도 import 과 같은 에러는 실행이 완료 되기 전에 발생하는 에러들로, 이러한 에러 + 전체 로그들을 볼 수 있음 cron 파일은 마지막줄에 한줄 남겨줘야함 안그러면 에러뜸 # install chrome, chrome driver ENV CHROMEDRIVER_DIR="/usr/local/bin" ENV CHROMEDRIVER_VERSION="88..
-
Asyncio - async, awaitPython 2022. 7. 2. 17:40
* 최근 asyncio 를 api 테스트를 하면서 많이 사용하게 되었다. 사실상 지금은 부하테스트용도로 만들긴 했지만 실제 1초에 수만건 이상의 요청을 테스트하기 위한 다른 툴을 나중에 적용해보면 좋을듯 싶다. * 오늘 이 글의 작성 목적은 코드로 구현 하는 것보다는 Asyncio에 대한 히스토리, 개념 등에 조금 더 알고 이해한 내용에 대해 기록하는 것이다. * 파이썬 공식문서와 여러 블로그들을 읽었는데 블로그는 대부분의 내용이 겹쳤다. 파이썬 공식문서가 오히려 더 다양하게 설명되어 있고, 필요한 부분만 적을 예정이다. Asyncio - https://docs.python.org/3/library/asyncio.html A library to write concurrent code using the a..
-
몽고 디비 ReplicasetDatabase 2022. 5. 20. 18:12
참고 링크 (https://docs.aws.amazon.com/documentdb/latest/developerguide/connect-to-replica-set.html) DocumentDB에서 인스턴스 추가 몽고 url 에 ?replicaSet=rs0&readPreference=[읽기방식선택] replicaSet 이름 기본적으로 DocumentDB에서는 rs0으로 지정됨 읽기 방식 선택(쓰기는 primary) 참고 링크(https://www.mongodb.com/docs/v5.0/core/read-preference/#mongodb-readmode-primary) primary: 기본값이며, Primary에서 값을 읽음 primaryPreferred: Primary에서 우선적으로 데이터를 읽음 // ..