본문 바로가기
  • 👩🏻‍💻 🌮 💬

분류 전체보기161

[Airflow] TriggerDagRunOperator 사용할 때 duplicate key value violates unique constraint "dag_run_dag_id_execution_date_key" 개요Airflow을 활용하여 크롤링을 진행하고 있었다.하나의 DAG가 특정 DAG를 한번에 여러번 trigger 하는 프로세스인데지금 계속 크롤링 사이트가 늘어나는 과정에 있었다. 크롤링 사이트가 300개 가까이 늘어나고, 하나의 DAG를 300개 가까이 호출하다가 오류가 발생했다. 에러는 trigger_internal_dag task가 Fail 확인해보자error message: run_id 중복 오류sqlalchemy.exc.IntegrityError: (psycopg2.errors.UniqueViolation) duplicate key value violates unique constraint "dag_run_dag_id_execution_date_key" trigger_internal_dag은.. 2025. 9. 14.
PDF에 있는 text를 빠르게 가지고 오자 ! feat. 시간복잡도 회사 프로젝트 중 .. 크롤링을 하고 있었다뉴스 기사들을 가지고 오는 크롤링이었는데,기사 내에 pdf가 있으면 파일을 다운받아서 간단하게 text만 추출해서 DB에 넣어준다. 근데 pdf가 있는 기사와 없는 기사를 스크리핑하는데 시간 차이가 많이 난다고 느꼈다.그래서 함수를 찾아갔다. 기존에 있던 코드:def current_extract_pdf_text(pdf_url): start_time = perf_counter() response = requests.get(pdf_url, headers={'User-Agent': random.choice(user_agents)}) response.encoding = response.apparent_encoding response.rais.. 2025. 7. 23.
[MySQL] 뉴스 기사 NER 검색 구조 개선기 - 성능과 유지보수성의 균형 맞추기 최근에 새로운 프로젝트에 투입이 되었다.혼자 1,000여개의 사이트를 크롤링해야하는 시스템을 만들어야했다.프로젝트에 배정되었을 때 너무 너무 많은 범위를 혼자 진행해야해서 막막했지만내가 처음부터 주도적으로 할 수 있다는게 얼마나 큰 기회인가! 좋은 기회이니 애정을 가지고 잘 진행해보려한다.완전 새로운 프로젝트는 아니고, 예전에 진행했던 것과 비슷하지만 맨땅부터 시작해야했다.그럼 더 좋다. 개선하고 싶은 부분들이 있었다. 처음으로 바로 개선하고 싶은 부분은 데이터 베이스 쪽이었다. 문제 상황 : 느린 NER 검색크롤링한 뉴스 기사 데이터를 DB에 저장하고, 각 기사별로 NER(Named Entity Recognition) 결과를 리스트 형태로 TEXT 컬럼에 저장하고 있었다. → ner에 ["키워드1", .. 2025. 7. 23.
[SSH] SSH 세션에 따라 환경 변수가 다른 이슈 개요같은 서버에서A PC → SSH 접속 → 앱 실행 시 cuDNN 에러 + core dumpB PC → SSH 접속 → 동일 앱 실행 시 정상 작동 확인B PC에서는 fastapi 앱이 정상적으로 실행되는데, A PC에서는 동일 앱 실행 시 아래와 같은 에러메세지가 출력된다.Unable to load any of {libcudnn_cnn.so.9.1.0, libcudnn_cnn.so.9.1, libcudnn_cnn.so.9, libcudnn_cnn.so}Invalid handle. Cannot load symbol cudnnCreateConvolutionDescriptorAborted (core dumped) → cnDNN 라이브러리를 찾지 못함→ 현재 세션에서 libcudnn_cnn.so.* 라이브러.. 2025. 6. 27.
[gradio] 애플리케이션에 path parameter 붙여서 특정 경로로 서빙하기 개요gradio로 올린 애플리케이션이 하나 있었는데~애플리케이션 하나더 추가해서 2개 올리고,{domain}/a{domain}/b이렇게 path parameter로 구분해서 올리고싶어서 도전~ 확인기존에 코드가 어떻게 되어있었냐면,def greet(name): return f"Hello, {name}!"gr_app = gr.Interface(fn=greet, inputs="text", outputs="text")gr_app.launch(server_name="0.0.0.0", server_port=8003) 이렇게 단순하게 8003 포트로 올라가는 애플리케이션이었다. 시작할때, 챗지피티한테 물어보니Gradio Blocks 기반 앱 생성 후 `path` 설정하고FastAPI 앱에 마운트하는 방법을 알.. 2025. 6. 20.
github으로 docker image 공유하기 (Docker packages > Containers) 개요Docker image를 github을 통해 고객에게 공유하려 함Docker packages > Containers 진행1. Access Token 발급https://github.com/settings/tokens → "Generate new token (classic)" 2. token name, expiration, scopes 입력 및 선택 3. 생성된 토큰 저장하기 (바로 hide됨) 4. Docker loginecho | docker login ghcr.io -u --password-stdinLogin Succeeded→ 확인되면 로그인 완료된 것 5. build imagedocker build -t ghcr.io//: . example:docker build -t ghcr.io/hyer.. 2025. 6. 6.
[MySQL] match ... against 한글자 검색 오류 (innodb_ft_min_token_size, ngram_token_size) 개요SELECT * FROM articles_cn WHERE MATCH(ner_text) AGAINST('火' IN BOOLEAN MODE); 이 쿼리로 검색을 하니, 아무것도 출력받지 못했다. 혹시나 해서 다른 쿼리를 사용해 검색했을 땐SELECT * FROM articles_cn WHERE JSON_CONTAINS(ner, '"火"'); 잘 나온다.. 뭐 때문에 안나오는 걸까? 확인CREATE TABLE `articles_cn` ( `id` int unsigned NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `content` text NOT NULL, `ner` json, `ner_text` text, PRIMARY KEY (`id`.. 2025. 5. 30.
[MySQL] Mac에 my.cnf 파일이 없다 (mysql 다운받아서 직접 설치했을 경우) 개요한 글자 검색을 위해 ngram_token_size를 default 2에서 1로 수정하려고 하는데, my.cnf 파일을 찾을 수 없다!homebrew로 설치한 게 아니고 직접 다운로드해서 설치해서 그런가 .. 확인1️⃣ config 파일 확인mysql --help | grep -A 1 "Default options"Default options are read from the following files in the given order:/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf mysql은 왼쪽부터 순서대로 my.cnf를 찾는다. 2️⃣ 첫번째 경로( /etc/my.cnf )에 my.cnf를 생성해준다. (왜냐면 .. 직접.. 2025. 5. 30.
[MySQL] 검색 쿼리 성능 비교 개요- ner을 포함하는 기사들을 출력할 때, 효율적으로 검색하기 위한 쿼리 성능 비교 1) JSON_CONTAIN 2) MATCH … AGAINST 3) MATCH … AGAINST + REGEXP- 100,000개의 article로 진행 확인EXPLAIN ANALYZE 로 분석을 진행했다. 1. JSON_CONTAINEXPLAIN ANALYZE SELECT * FROM articles WHERE JSON_CONTAINS(ner, '"삼성"');-> Filter: json_contains(articles.ner,('"삼성"')) (cost=10185.55 rows=98728) (actual time=0.148..102.554 rows=27555 loops=1)-> Table .. 2025. 5. 28.