✨ new ✨
-
[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.09.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.07.23
-
[MySQL] 뉴스 기사 NER 검색 구조 개선기 - 성능과 유지보수성의 균형 맞추기
최근에 새로운 프로젝트에 투입이 되었다.혼자 1,000여개의 사이트를 크롤링해야하는 시스템을 만들어야했다.프로젝트에 배정되었을 때 너무 너무 많은 범위를 혼자 진행해야해서 막막했지만내가 처음부터 주도적으로 할 수 있다는게 얼마나 큰 기회인가! 좋은 기회이니 애정을 가지고 잘 진행해보려한다.완전 새로운 프로젝트는 아니고, 예전에 진행했던 것과 비슷하지만 맨땅부터 시작해야했다.그럼 더 좋다. 개선하고 싶은 부분들이 있었다. 처음으로 바로 개선하고 싶은 부분은 데이터 베이스 쪽이었다. 문제 상황 : 느린 NER 검색크롤링한 뉴스 기사 데이터를 DB에 저장하고, 각 기사별로 NER(Named Entity Recognition) 결과를 리스트 형태로 TEXT 컬럼에 저장하고 있었다. → ner에 ["키워드1", ..
2025.07.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.06.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.06.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.06.06
🔥 hot 🔥
-
[SQLD] 비전공자 현직자의 공부 후기
이번에 2024년 3월 9일에 시행된 SQLD 52회 시험을 응시했다 나는 지금 2년차 개발자인 현직자이며, 비전공자이다. 급하게 공부하기 싫어서 기간은 3주 정도로 잡았으며 평일에는 하루 1-2시간 정도만 공부하고, 주말에는 3-4시간 정도 시간을 투자했다. 1️⃣ 책 구매 제일 유명한 노랭이책을 구매했다. SQLD 준비하면 무조건 이 책을 사야한다는 사람, 굳이 필요없다는 사람이 있었지만 SQLD 내에서는 '수학의 정석'으로 불리고 있었기에 yes24로 바로 구매했다. 근데 알다시피 이 책에는 문제밖에 없다. 이론이 따로 없는데 이론 책은 따로 사고 싶지 않았다. 2️⃣ 이론 공부 책을 사지않고 어떻게 개념 공부를 할 수 있을까 찾아보다가 데이터 전문가 포럼 (빅데이터분석기사... : 네이버 카페 빅..
2024.03.11
-
nginx에 mTLS 인증서 발급하고 검증하기
mTLS 란?mTLS는 "Mutual Transport Layer Security"의 약자로, 클라이언트와 서버 간의 상호 인증을 위한 TLS(Transport Layer Security) 프로토콜의 확장이다. 일반적인 TLS는 서버만 인증하는 반면, mTLS는 클라이언트와 서버 모두가 서로를 인증하는 방식이다. 이를 통해 더 높은 수준의 보안이 제공된다. mTLS의 작동 방식은 서버 인증, 클라이언트 인증, 상호 인증 완료 로 진행되어야 한다. 1. 서버 인증 : 클라이언트 서버의 SSL/TLS 인증서를 확인하여 서버의 신원을 검증한다. 이는 일반적인 TLS 연결에서 이루어지는 단계이다.2. 클라이언트 인증 : 서버 또한 클라이언트로부터 인증서를 요청한다. 클라이언트는 자신의 인증서를 서버에 제출하여 ..
2024.08.16
-
정보처리기사 필기 핵심 요약 | 2과목 : 소프트웨어 개발
✨ 자료 구조- 선형 구조 : 배열, 선형 리스트(연속 리스트, 연결 리스트), 스택, 큐, 테크- 비선형 구조 : 트리, 그래프 ✨ 선형 리스트(1) 연속 리스트- 배열과 같이 연속되는 기억장소에 저장되는 자료 구조- 기억장소를 연속적으로 배정받기 때문에 기억장소 이용 효율은 밀도가 1로서 가장 좋다.- 중간에 데이터를 삽입하기 위해서는 연속된 빈 공간이 있어야 하며, 삽입/삭제 시 자료의 이동이 필요(2) 연결 리스트- 자료들을 반드시 연속적으로 배열시키지는 않고 임의의 기억공간에 기억시키되, 자료 항목의 순서에 따라 노드의 포인터 부분을 이용하여 서로 연결 시킨 자료 구조- 노드의 삽입/삭제 작업 용이- 기억 공간이 연속적으로 놓여 있지 않아도 저장할 수 있다.- 연결을 위한 링크(포인터) 부분이 ..
2025.01.13
-
[gRPC] gRPC과 websocket 비교 정리
기존에 개발했던 서비스에서 클라이언트와 서버 통신을 websocket 으로 구현했다.다 끝내고나서 클라이언트, 서버 통신하는 방법을 좀 더 서치해보고 싶었다그렇게 알게된 gRPC. 정리해보자 ✅ gRPC와 WebSocketgRPC와 WebSocket은 둘 다 네트워크 통신 프로토콜로, 실시간 데이터 전송과 클라이언트-서버 간 상호작용을 가능하게 함gRPCGoogle이 개발한 RPC(Remote Procedure Call) 프레임워크HTTP/2 기반으로 동작하며, 프로토콜 버퍼(Protocol Buffers, Protobuf)를 사용하여 데이터 직렬화를 수행클라이언트는 서버의 메서드를 호출하듯이 원격으로 기능을 실행WebSocketHTML5 표준으로, TCP 소켓 연결을 통해 양방향 통신을 가능하게 함프로..
2024.11.25
-
[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.09.14
-
[노랑이] 오답 | 과목 1 | 데이터 모델링의 이해 1-33
1. 시스템 구현만을 의해 진행하는 사전단계의 작업으로서 데이터베이스 구축을 위한 사전작업의 의미가 있다 X → 모델링은 단지 시스템 구현만을 위해 수행하는 태스크가 아니며, 시스템 구현을 포함한 업무분석 및 업무형상화를 하는 목적이 있다. O 2. 데이터베이스를 구축하는 목적으로 데이터 모델링을 수행하며 업무에 대한 설명은 별도의 표기법을 이용한다. X → 데이터 모델링의 첫번째 목적 : 업무정보를 구성하는 기초 정보들을 일정한 표기법으로 표현하여 정보시스템 구축의 대상이 되는 업무 내용을 정확하게 분석하는 것이다. O 두번째 목적 : 분석된 모델로 실제 데이터베이스를 생성하여 개발 및 데이터관리에 사용하기 위한 것이다. 3. 데이터 모델링을 할 때 유의할 사항 : 중복성 Duplication, 비유연..
2024.02.17
-
MQTT와 Kakfa 비교
개요최근에 진행한 프로젝트 중에 socket 통신으로 데이터를 보내고, responce를 받는 기능을 개발했는데네트워크가 불안정한 환경에서 진행하니까 socket 연결 불안정, 연결 지연 등등 이슈들이 발생해서다음에는 mqtt 혹은 kafka를 사용해봐야겠다 싶어서 서치해보았다.간단한 비교· MQTT : 경량 메시징, 낮은 대기 시간 및 낮은 데이터 트래픽에 적합하다. IoT나 간단한 애플리케이션에 유리하다.· Kafka : 높은 데이터 트래픽 및 메시지 유지 관리가 필요한 대규모 애플리케이션에 적합하다. 안정성과 성능이 중요할 때 유리하다. 좀 더 자세하게 정리✅ MQTT· Message Queuing Telemetry Transport· 제한된 리소스를 가진 장치나 IoT(사물인터넷) 장치 사이에 통..
2024.10.23
-
[SQLD] 37회 기출 문제 풀이
1. 도메인 - 모든 릴레이션(Relation)은 원자값(Atomic)을 가져야한다. - 어떤 릴레이션(Relation)에서 속성 값이 가질 수 있는 값의 범위를 의미한다. - 실제 속성값이 올바르게 되었는지 확인한다. - 속성명과 반드시 동일할 필요는 없다. - 릴레이션의 속성에 대한 데이터 타입과 크기이다. - 속성에 대하여 NOT NULL 제약사항을 설정하여 NULL 값을 허용하지 않는다. - 속성에 값을 입력 할 때 CHECK 기능을 사용해서 입력 값을 검사한다. + 카디널리티에 대한 설명 : 튜플(행)의 수 = 인스턴스의 수 - 중복도가 낮으면 카디널리티가 높다라고 표현한다. - 중복도가 높으면 카디널리티가 낮다라도 표현한다. - 카디널리티는 전체 행에 대한 특정 칼럼의 중복 수치를 나타내는 지..
2024.03.01
-
[노랑이] 오답 | 과목 2 | SQL 기본 및 활용 99-126
100. 테이블 칼럼에 대한 정의 변경 - Oracle ALTER TABLE 테이블 명 MODIFY (칼럼명1 데이터 유형 [DEFAULT 식] [NOT NULL], 칼럼명2 데이터 유형...); - SQL Server ALTER TABLE 테이블 명 ALTER (칼럼명1 데이터 유형 [DEFAULT 식] [NOT NULL], 칼럼명2 데이터 유형...); * SQL Server에서 여러개의 칼럼을 ALTER COLUMN으로 동시에 수정하는 구문은 지원하지 않는다. 101. 트랜잭션의 특성 중 고립성(Isolation)은 어떤 트랜잭션이 수행 중일 때 다른 트랜잭션의 영향을 받아 잘못된 결과를 도출하는 경우가 발생하는 것을 방지하는 것이다. 105. 테이블 생성의 주의사항 - 테이블명은 객체를 의미할 수..
2024.02.24
-
[노랑이] 오답 | 과목 1 | 데이터 모델과 SQL 34-50
35. 정규형 - 제1정규형 : 모든 속성은 하나의 값을 가져야 한다. - 제2정규형 : Entity의 일반속성은 주식별자 전체에 종속이어야 한다. - 제3정규형 : Entity의 일반속성 간에는 서로 종속적이지 않다. 37. 정규화로 인해 조회성능이 저하될 수 있다. 이 때문에 반정규화를 고려한다. 38. 칼럼에 의한 반복적인 속성값을 갖는 형태는 속성의 원자성을 위배한 1차 정규형의 대상이 된다. 반복적인 속성 나열 형대에서는 각 속성에 대해 'or' 연산자로 연결된 조건들이 사용되는데, 이때 어느 하나의 속성이라도 인덱스가 정의되지 않으면 'or'로 연결된 모든 조건절들이 인덱스를 사용하지 않고 한번의 전체 데이터 스캔으로 처리되게 되어 성능 저하가 나타날 수 있다. 또한, 모든 반복 속성에 인덱스..
2024.02.17