카테고리 보관물: 미분류

아호코라식 Aho-corasick

Ahocorasick은 1975년에 Alfred V. Aho와 Margaret J. Corasick이 고안한 문자열 검색 알고리즘입니다.

입력 텍스트 내에서 유한한 문자열 집합(사전)의 요소를 찾는 사전 매칭 알고리즘의 한 종류로, 모든 문자열을 동시에 매칭합니다.

좀 쉽게 말하면 입력한 긴 문자열에서 찾아냈으면 하는 문자열이 있다면 모두 빠르게 찾아주는 알고리즘입니다.

찾아야 하는 문자열은 미리 정해야 하고 수십만개에서 수백만까지도 쓸 수 있습니다.

Aho-Corasick 알고리즘은 Trie 자료구조를 기반으로합니다. Trie 자료구조는 문자열 검색에 효과적인 자료구조이지만, 문자열 검색이 일어날 때마다 트리를 전부 탐색해야 하는 단점이 있습니다. Aho-Corasick 알고리즘은 이러한 단점을 보완하기 위해, Trie 자료구조를 미리 전처리하여 특정 문자열 집합에서 상호작용하는 부분을 최적화합니다.

Aho-Corasick 알고리즘은 다음과 같은 단계를 거쳐 작동합니다.

  1. 문자열 집합을 Trie 자료구조로 변환합니다.
  2. Trie 자료구조를 이용하여 Failure 함수를 생성합니다. Failure 함수는 각 Trie 노드에서 어떤 문자가 올 때 다음으로 이동해야 할 노드를 결정합니다.
  3. 문자열 검색을 위해 Aho-Corasick 알고리즘은 주어진 문자열을 탐색하면서, Trie 자료구조를 탐색합니다. Failure 함수를 이용하여 검색을 가속화합니다.

Aho-Corasick 알고리즘은 문자열 검색에 효율적이며, 자연어 처리, 네트워크 보안, DNA 염기서열 검색 등 다양한 분야에서 활용됩니다.

Aho-coriaskc은 다중 패턴 매칭(Multiple Pattern Matching)을 해결할 수 있는 방법 중 하나입니다.

하나 이상의 패턴 문자열을 동시에 검색하는 것을 다중 패턴 매칭이라고 하는데 대부분의 문자열 처리 분야에서 매우 중요한 문제 중 하나입니다.

예를 들어, 특정 문자열에서 여러 개의 단어를 찾는 작업을 수행하려면, 이 문자열에서 각 단어를 개별적으로 검색하는 것보다 모든 단어를 한 번에 검색하는 것이 효율적입니다. 이를 위해 다중 패턴 매칭 알고리즘을 사용할 수 있습니다.

다중 패턴 매칭 알고리즘에는 여러 가지 방법이 있는데 대표적인 알고리즘으로는 Aho-Corasick, Rabin-Karp, Boyer-Moore 등이 있습니다. 이들 알고리즘은 각각의 특성과 장단점을 가지고 있으며, 특정한 상황에 맞는 알고리즘을 선택해 쓰는 것이 좋습니다.

참고자료

Python FastAPI

Python의 FastAPI에 대한 소개입니다.

FastAPI는 Python 3.6 이상으로 API를 빌드하기 위한 최신 고성능 웹 프레임워크입니다. FastAPI는 파이썬 표준 타입 힌트를 기반으로 하여 자동 문서화, 데이터 검증, 비동기 지원 등의 기능을 제공합니다.

FastAPI는 Flask나 Django와 같은 다른 웹 프레임워크보다 개발 속도가 200%~300% 빨라진다고 주장합니다. 또한 Node.js나 Go와 비슷한 수준의 성능을 자랑합니다.

FastAPI를 사용하려면 먼저 fastapi 모듈과 uvicorn 서버를 설치해야 합니다3.

pip install fastapi
pip install uvicorn

그 다음, app 객체를 생성하고 app.get 데코레이터를 사용하여 URL과 함수를 연결할 수 있습니다. 예를 들어, ‘/’ URL에 접속하면 ‘Hello World’라는 텍스트를 반환하는 함수를 정의할 수 있습니다.

from fastapi import FastAPI

app = FastAPI()

@app.get('/')
def hello_world():
    return 'Hello World'

마지막으로, uvicorn 명령어로 웹 서버를 실행할 수 있습니다. 이때 포트 번호나 리로드 옵션 등을 설정할 수 있습니다.

uvicorn main:app --reload --port 9999

이렇게 하면 간단한 FastAPI 예제 코드가 완성됩니다. 이 코드는 9999번 포트에서 실행되며, 브라우저에서 http://localhost:9999/ 에 접속하면 ‘Hello World’라는 텍스트가 나타납니다.

SQL의 DDL, DML, DCL

SQL의 DDL, DML, DCL에 대한 간략한 설명입니다.

SQL은 Structured Query Language의 약자로, 데이터베이스에서 데이터를 정의하고 조작하고 제어하는 데 사용하는 언어입니다. SQL은 크게 다음과 같은 세 가지 종류로 나눌 수 있습니다.

  • DDL(Data Definition Language): 데이터베이스나 테이블 등의 객체를 생성하거나 변경하거나 삭제하는 데 사용합니다. CREATE, ALTER, DROP, TRUNCATE 등이 있습니다.
  • DML(Data Manipulation Language): 테이블에 저장된 데이터를 조회하거나 삽입하거나 수정하거나 삭제하는 데 사용합니다. SELECT, INSERT, UPDATE, DELETE 등이 있습니다.
  • DCL(Data Control Language): 데이터베이스에 접근하거나 객체를 사용할 수 있는 권한을 부여하거나 취소하는 데 사용합니다. GRANT, REVOKE 등이 있습니다.

예제 코드는 다음과 같습니다.

-- DDL 예제
CREATE TABLE student ( -- 테이블 생성
    id INT PRIMARY KEY,
    name VARCHAR(20),
    major VARCHAR(20)
);

ALTER TABLE student ADD phone VARCHAR(15); -- 테이블 변경

DROP TABLE student; -- 테이블 삭제

TRUNCATE TABLE student; -- 테이블 내용 삭제

-- DML 예제
SELECT * FROM student; -- 테이블 조회

INSERT INTO student VALUES (1, 'Kim', 'Computer Science', '010-1234-5678'); -- 테이블 삽입

UPDATE student SET phone = '010-8765-4321' WHERE id = 1; -- 테이블 수정

DELETE FROM student WHERE id = 1; -- 테이블 삭제

-- DCL 예제
GRANT SELECT ON student TO user1; -- user1에게 student 테이블 조회 권한 부여

REVOKE SELECT ON student FROM user1; -- user1에게서 student 테이블 조회 권한 취소

Python MySQL warning – Data truncated for column

Python MySQL을 쓰다가 다음과 같은 에러를 만날 때가 있습니다. Pandas의 데이터를 MySQL 테이블 넣거나 할 때 생기는 문제입니다. 경고이기 때문에 큰 문제는 없지만 경고 메세지를 화실하게 해결하고 싶을 때가 있습니다.

Data truncated for column ~

다음과 같이 해결하면 됩니다.

해결책

  • VARCHAR인 경우에는길이를 늘려준다.
  • Numeric이면 소숫점이 몇자리까지 허용인지 보고 미리 round 처리해준다.

비용 이상감지 – Cost Anomaly Detection

비용이상감지

비용 이상감지는 이상감지를 비용과 밀접한 관련이 있는 데이터에 하는 것입니다.

이상감지는 시간에 따른 흐름과 추세의 패턴이 있는 시계열 데이터가 과거의 패턴에서 많이 벗어났는지를 감지하는 모델을 말합니다.

이상감지는 통계적 모델, 기계학습, AI 등 모든 종류의 모델을 다 사용합니다.

이상감지는 주로 사고를 미리 감지하기 위한 것이 많은데 온라인 서비스의 다운 징후, 온라인 서비스 사용자 또는 트래픽의 급증과 급감, 각종 공장 또는 장치의 사고나 고장 위험 등을 위해서 모델을 만들고 운영합니다.

BI와 대시보드, 그라파나, 키바나 같은 것에 연동하거나 별도의 시각화를 만들기도 합니다.

이상감지의 세부 갈래 중 하나인 비용이상감지는 사고 중에서도 비용지불에 대한 이상감지에 중점을 둡니다.

전기료, 수도요금, 클라우드서비스 비용 등과 같은 것입니다.

하지만 전기료, 수도요금은 실시간으로 데이터를 추적하기 어렵고 특별히 이상이 발생하기 어렵기 때문에 이상감지가 유용하지 않습니다. 대신 최근에 많이 사용되는 클라우드 비용 관리에는 큰 효과가 있습니다.

클라우드 비용 이상감지

비용이상감지를 사용하면 클라우드 비용의 과다 지출에 대한 사전 징후를 미리 감지해서 비용 낭비를 방지할 수 있습니다. 체크해야 할 항목이 매우 많기 때문에 어떻게 운영하느냐에 따라 다르겠지만 전체 비용에 대해서 비용을 구성하는 모든 하위 지표를 모니터링해서 그중에 문제를 발생시키는 가장 이상한 지표들을 빨리 감지하는 용도로 쓸 수 있습니다.

광고 캠페인의 비용 이상감지

그외에 광고 캠페인의 운영에 대한 지출 비용에 대한 이상여부를 감지하는데도 사용할 수 있습니다.

광고 캠페인은 최대 지출 비용을 정해두고 사용하는 경우에는 예상했던 기간보다 더 빨리 광고비가 소진되는 것을 발견해서 이상 징후를 감지하고 캠페인 중에 최대 비용을 정하지 않고 신용카드를 등록한 후 집행된 만큼 지불하는 경우에는 매우 유용합니다.