목록분류 전체보기 (67)
The Boxer
elasticsearch 오픈소스 풀텍스트 검색 및 분석 엔진 방대한 양의 데이터를 거의 실시간으로 저장, 검색, 분석할 수 있도록 지원하는 검색 엔진 복잡한 검색 기능이 포함되어야 하는 어플리케이션에 사용 사용 예시 자동완성 검색 초성검색 부분일치 한영 변환 오타 검색어 제안 역인덱스 elasticsearch는 저장, 검색, 분석에 특화된 저장소로 볼 수 있다. 특히 방대한 양의 데이터에 대해서 거의 실시간으로 검색이 가능한데 이걸 가능하게 하는게 역인덱스(inverted index) 구조이다. 역인덱스: 단어나 숫자 같은 정보에 대한 정보를 분할하여 매핑 정보를 저장하는 구조 매핑정보를 통해 해쉬 테이블 방식으로 저장되어 검색하는데 O(1)의 시간이 소요된다. elasticsearch는 예시의 문장을..
cloudwatch log에 대한 대화식 검색 기능 쿼리문을 통해 cloudwatch 내 log를 조회한다 알아둘 점 최대 20개 그룹의 로그 조회 가능 timeout: 15 min 쿼리 결과는 7일동안 유효함 쿼리되는 데이터 양에 따라 요금이 부과된다 상세 사항 지원하는 로그 필드 cloudwatch로 전송된 모든 로그에 대해 log insight는 다음 5개 필드를 자동으로 생성하여 관리한다. @message: 로그 메세지 원본 @timestamp: 로그가 찍힌 timestamp @ingestionTime: cloudwatch가 로그를 수신한 시간 @logStream: 로그 이벤트가 추가된 로그 스트림 명 @log: 로그 그룹 식별자 log insight가 생성하는 모든 로그에는 @ 어노테이션이 붙는..
scan에 대한 성능 데이터 조회시 전체 테이블이나 보조 인덱스를 스캔하는 방식 전체 테이블 데이터를 조회하여 필터 조건을 걸어 결과 추출 요청한 값을 찾기 위해 항상 전체 테이블을 조회하기 때문에 매우 비효율적 때문에 웬만한 경우에는 scan이 아닌 query를 통해 원하는 값을 조회하도록 해야 한다. 급격한 read 요청 증가 strongly consistent read은 2개의 RCU를 소비한다. scan은 기본적으로 eventually consistent read방식으로 데이터를 조회하며, 최대 1MB 용량(페이지)의 데이터 조회 가능 따라서 최대 (1MB / 4KB) / 2 = 128개의 RCU를 소비하게 되며 strongly consistent read의 경우 256개의 RCU 소비 이렇게 큰..
해당 포스팅은 https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-concepts.html#gettingstarted-concepts-function 를 읽고 정리한 내용입니다. AWS lambda 서버리스 컴퓨팅 서비스 클라우드상의 컴퓨팅 인프라에서 코드를 실행하고, 서버에 대한 유지, 관리, 용량 프로비저닝, 보안 패치, 모니터링, 로깅 등의 운영 관련 작업은 lambda가 수행한다. aws는 역할별로 리소스가 나눠져 있다. 기본 개념 function lambda에서 코드 실행을 위해 호출하는 리소스 function에 lambda에서 실행할 코드를 배포하며, 요청이 들어올 때 마다 function에 올린 코드를 실행 혹은 aws 다른 서비스가 f..
cloudwatch: aws의 인프라 및 어플리케이션에 대한 관제 서비스 알림 기능: cloudwatch에서 제공하는 기능으로 지정한 메트릭 값을 지속적으로 측정하여 설정한 기준값을 넘어가는 경우 지정한 채널로 알림 발송 기본적으로 알아야 할 개념 metric: 알림을 보내는데 측정하는 데이터. 메트릭 값이 지정한 조건을 벗어난 경우 알림 전송 alarm state OK: 모든 메트릭 값이 정의한 threshold 이내인 상황 ALARM: 모든 메트릭 값이 정의한 threshold를 벗어난 상황 INSUFFICIENT_DATA: 메트릭이 비정상적이거나 충분하지 않은 데이터가 쌓인 경우 topic: 알림이 전송될 경우 메세지를 수신하며, 해당 topic을 구독하는 클라이언트에 메세지 전송 amazon sn..
pydantic 모델 파싱시 주의 사항 request나 response로 넘어온 body data를 pydantic이 model로 파싱하는 과정에서 정의된 필드가 비어있는 경우 에러를 던진다. 에러가 발생하는 예시 from pydantic import BaseModel class Foo(BaseModel): id: int name: str def service_method() -> dict: return { "name": "testing" } def controller_method() -> Foo: result = service_method() return Foo(**result) controller_method() pydantic은 모델로 데이터를 파싱하는 과정에서 파싱이 불가능한 값이 ..
fastapi를 공부하면서 의존성을 주입할 때 어떻게 처리되는지 궁금하여 공부한 내용을 정리한다. 의존성 관리 기존에 내가 사용하던 nestjs 프레임워크는 프레임워크 자체에서 DI container를 내장하고 있었고, provider를 통해 container 등록하여 사용하던 방식이었다. fastapi는 조금 다른것으로 보인다. 따로 DI container는 존재하지 않으며, 요청이 들어오면 요청에 대한 처리를 위해 필요한 의존성만 주입받는다. 의존성 주입이 가능한 객체는 callable한 객체이며, 실행을 통해 리소스를 반환해야 한다. 기본 작동 원리 main.py from typing import Union from fastapi import FastAPI,Depends from service im..
druid 오픈소스 분산 데이터 저장소 핵심 디자인: 데이터 웨어하우스, 시계열 DB, 검색 시스템으로 부터 고성능 실시간 분석 DB 제공 다차원 데이터: 1차원 정보(row)를 지정된 필드(dimension)을 통해 지표(metric)로 표현한 데이터 Usecase 주로 전반적인 지표 흐름을 조회하는 용도로 사용 클릭 스트림 분석 부정 분석 시스템 네트워크 성능 모니터링 서버 성능 분석 공급망 분석 어플리케이션 성능 분석... 사용하면 안되는 경우 정확한 데이터를 조회하는 경우 1차원 데이터(row) 에 대한 정확한 데이터 조회 인덱싱 방식 다차원 데이터에 대한 빠른 쿼리 결과 제공을 위해 세그먼트(time interval) 단위로 인덱싱 쿼리를 수행하는 시점이 아니라 데이터를 저장하는 시점에 인덱싱 ..
의존 관계 객체 B의 기능이 추가 변경되었을 때 객체 A에 영향이 미치면 A가 B를 의존한다고 한다. class Service: def __init__(self): self.repository = UserRepository() 위 예시에서 Service 클래스는 UserRepository 클래스를 사용하고 있다. 여기서 UserRepository 의 기능이 바뀌거나 추가되면, Service 가 영향을 받는다. 정리하자면 하나의 객체가 다른 객체를 사용하면 의존 관계가 있다고 표현한다. 의존성 주입 토비의 스프링에서는 다음의 세가지 조건을 충족하는 작업을 의존성 주입으로 정의한다. - 의존관계는 사용할 오브젝트에 대한 레퍼런스를 외부에서 제공(주입)해줌으로써 만들어진다. - 런타임 시점의 의존관계는 컨테이..
python에서 클래스 python에서는 클래스를 객체로 취급한다. class Foo: pass 이렇게 클래스를 선언하는건 Foo 라는 이름의 객체가 메모리에 올라갔다는 것을 의미한다. foo = Foo() 위에서 말했던 것 처럼 python에서는 클래스도 객체이기 때문에 Foo 라는 객체가 생성됨과 동시에, Foo 클래스를 통해 foo 라는 객체를 생성했다는 의미가 된다. 클래스도 객체이므로 변수 할당, 메서드 인자로 전달 등이 가능하다. class Foo: pass def print_object(v): print(v) print_object(Foo) var = Foo print(var) type type은 2가지 기능을 갖고 있다. 자료형 확인 일반적으로 우리가 아는 기능인 자료형 확인이다. type..