- DB Lock을 처음 경험한 날31514나의 업무 중에 특정 CSV 파일을 읽어, 데이터를 파싱하고 테이블에 풀리프레쉬 방식으로 삽입하는 작업이 있다.백엔드 개발자의 요청으로 해당 스크립트를 실행했는데, 데드락에 걸리는 상황이 발생했다. 일단 원인은 나의 스크립트 안에 테이블을 삭제하고 다시 생성하는 코드가 포함되어 있는데, 이 타이밍에 백엔드 개발자가 데이터를 조회했기 때문에 락(Lock)이 발생했다. 위 이미지는 `t_pole_image`라는 테이블에 `AccessExclusiveLock`이 걸린 모습이다.`AccessExclusiveLock`은 가장 강력한 테이블 락(Lock)으로, 해당 테이블의 모든 작업을 차단한다.빨간색 박스 안에 있는 두 줄을 살펴보면, 하나의 세션에서는 `AccessExclusiveLock`을 획득(`grante..
- 2025-03-18 12:02:58(21일 전)
- LATERAL JOIN에 대해 알아보자.31514LATERAL JOIN은 SQL에서 제공하는 강력한 쿼리 기능으로, 일반적인 JOIN과는 다르게 작동한다.LATERAL JOIN의 특징은 오른쪽 테이블이 왼쪽 테이블의 각 행을 참조할 수 있다는 점이다.파이썬 코드로 표현하면 다음과 같다.for row1 in 왼쪽_테이블: for row2 in 오른쪽_테이블: # 작업 SQL 쿼리문은 다음과 같이 작성되는데, 일반 JOIN문과 달리 ON 조건이 없는 것을 확인할 수 있다.-- 왼쪽 테이블 당 매칭되는 오른쪽 테이블의 행을 3개씩만 가져오고 싶은 경우SELECT *FROM 왼쪽 테이블 leftCROSS JOIN LATERAL ( SELECT * FROM 오른쪽 테이블 WHERE 특정 조건 LIMIT 3) right; ..
- 2025-03-17 17:56:28(22일 전)
- SQLAlchemy와 psycopg2 중 어느 것을 사용할까?31514Pandas 데이터프레임을 Postgres 테이블에 적재하는 작업을 하면서 고민했던 내용에 대해 정리한 글이다.데이터프레임을 Postgres 테이블에 적재하는 방법에는 여러 가지가 있지만, 그 중에서도 SQLAlchemy 라이브러리와 psycopg2 드라이버를 비교하려고 한다. SQLAlchemySQLAlchemy는 ORM이자 DB API 역할을 하는 라이브러리이며, `create_engine()`을 사용하여 데이터베이스 연결을 관리한다.Connection Pool을 관리하여 재사용 가능한 DB 연결을 제공하고, `pandas.to_sql()`을 사용하여 데이터프레임을 테이블에 쉽게 적재할 수 있다.하지만 ORM이기 때문에 직접 SQL을 실행하는 psycopg2보다 다소 느릴 수 있다. psycopg2..
- 2025-03-06 14:45:37(33일 전)
- Pandas의 벡터 연산31514최근에 회사에서 ETL 작업을 수행하면서, DB에 있는 테이블을 불러와 변환 작업을 한 뒤 새로운 테이블에 적재하는 일을 진행했다.변환 작업은 Pandas를 사용했고, 이 과정에서 성능 향상을 고민하면서 알게된 벡터 연산에 대해 정리하려고 한다. 데이터프레임을 다룰 때 여러 가지 방법이 존재한다.`for문`, `iterrows()` 메서드, `apply()` 메서드와 같이 레코드를 하나씩 다루는 방법과 벡터와 같이 모든 레코드를 한 번에 다루는 방법이 있다.당연하게도 처리 속도 측면에서 벡터 연산이 우월하며, `for문`, `iterrows()`, `apply()` 중에서는 `apply()`가 가장 빠르다. 레코드를 하나씩 다루는 방법을 스칼라라고 하는데, 다음과 같은 특징을 가지고 있다.`for문` :..
- 2025-03-06 14:32:55(33일 전)
- [Shorts] 컴파일러 & 링커31514컴파일러컴파일러는 구문 분석을 통해 문자열로 이루어진 코드를 기계어로 변환함구분 분석은 의미 분석 -> 중간 코드 -> 어셈블리어 -> 기계어의 과정을 거침위 과정을 거치면 객체 파일(object file)이 생성됨 링커링커는 컴파일러가 생성한 여러 객체 파일을 묶어서 실행 파일을 생성함이 외에도 심벌 해석과 재배치도 진행함
- 2025-02-25 09:35:16(42일 전)
- [Shorts] 프로그래밍 언어의 탄생31514천공에 구멍을 뚫어 CPU의 언어로 코드를 작성함기계어를 인간이 이해할 수 있는 단어와 대응시켜 어셈블리어를 만듦인간의 추상적인 표현을 기계가 자동으로 인식할 수 있도록 하기 위해서 조건문, 반복문, 구문, 함수 등과 재귀 + 트리 구조를 사용하여 컴파일러를 만듦서로 다른 기계어를 인식하는 CPU들을 위해 가상 머신(인터프리터)를 만들어서 영어와 같이 표준을 만듦
- 2025-02-24 08:43:45(43일 전)
- [Elasticsearch] 백업 설정하기31514최근에 개인적으로 진행하고 있는 팀 프로젝트에서 사용하는 Elasticsearch의 모든 인덱스가 알 수 없는 이유로 모두 삭제되었다.다행히 복구할 수 있는 방법을 찾게 되었지만, snapshot을 활용하여 복구할 수 없어서 불편한 경험을 했다. 이번 기회에 데이터 스토리지 복구에 대한 중요성을 몸소 깨닫고, elasticsearch의 스냅샷 설정에 대해 적어두려고 한다.단, 내가 사용하고 있는 elasticsearch 서버는 도커로 운영되지 않음을 밝힌다. snapshot 파일 저장 경로 설정파일 저장 경로 생성`sudo mkdir -p /mnt/elasticsearch-backup` 권한 할당`sudo chown -R elasticsearch:elasticsearch /mnt/elasticsearch..
- 2025-02-18 13:42:38(49일 전)
- [Shorts] 윈도우가 디스크에 파일을 저장하는 법31514요즘 백업 업무를 지속적으로 하다 보니, 두 폴더의 크기를 비교할 일이 많아졌다.근데 문득 다음과 같이 크기와 디스크 할당 크기가 왜 서로 다른 지 궁금해졌다.그 이유는 윈도우가 특정 파일을 저장할 때 클러스터 단위로 저장하기 때문이다.예를 들어 클러스터 단위가 4KB라면, 1KB 짜리 파일을 저장할 때도 최소 4KB를 사용한다. 이에 따라 자연스럽게 디스크 할당 크기가 더 커지는 상황이 발생한다.
- 2025-02-12 15:47:08(55일 전)
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)