분류 전체보기 1188

[Linux] unixODBC - MySQL 연결

개요 2023.05.02 - [Ubuntu] unixODBC 설치에서 unixODBC를 설치했는데, 이 글에서는 unixODBC를 이용해 MySQL에 연결하도록 구성한다. 연결할 MySQL은 8.0.32이다. 구성 환경 - AWS EC2 - Ubuntu 20.04 LTS arm64 - MySQL 8.0.32 지난 글과 마찬가지로 최대한 root 권한을 덜 사용하는 방식으로 진행한다. 드라이버 설치 unixODBC로 데이터베이스를 연결하기 위해서는 데이터베이스 드라이버가 필요하다. unixODBC로 연결할 수 있는 데이터베이스는 https://www.unixodbc.org/drivers.html에서 확인할 수 있다. 이 글에서는 MySQL과 연결할 수 있도록 MySQL ODBC Connector를 설치해야..

Linux 2023.05.03

[Ubuntu] unixODBC 설치

unixODBC ODBC(Open DataBase Connectivity)란 데이터베이스에 접근하기 위한 소프트웨어의 표준 규격으로 마이크로소프트가 만들었다. ODBC에 정해진 순서에 따라 프로그램을 사용하면 어떤 DBMS를 사용하는지 고려하지 않고 접근할 수 있다. unixODBC는 ODBC API를 구현하는 오픈 소스로 유닉스, 리눅스, macOS 등에서 빌드하여 사용할 수 있다. 이 글에서는 root 권한을 최대한 덜 사용하는 방식으로 Ubuntu 20.04 LTS에 unixODBC를 설치하는 방법을 적어둔다. 데이터베이스 연결 구성은 다른 글에 진행한다. 설치 1. 필요 패키지 설치 unixODBC 설치에 필요한 패키지를 설치한다. apt update apt install build-essenti..

Linux 2023.05.02

[Python] Pandas - Dataframe 차집합 구하기

개요 2022.12.25 - [Python] Pandas - 데이터프레임 합성 1 (merge / join)에서 두 데이터프레임에 대한 INNER JOIN과 OUTER JOIN(left, right, full)에 대해서 살펴봤다. 이 글에서는 두 데이터프레임에 대한 LEFT ANTI JOIN, RIGHT ANTI JOIN... 즉, 차집합을 구하는 방법을 정리한다. 예시 데이터 예시로 아래의 데이터프레임 두 개를 사용하여 글을 작성한다. import pandas as pd df1 = pd.DataFrame( [ (1, 345, 'B', True), (2, 100, 'C', False), (3, 300, 'B', False), (4, 151, 'A', False), (5, 212, 'A', True) ],..

[Python] 파일 존재 여부 확인 / 삭제

개요 Python으로 서버에 저장되어 있는 파일을 다루어야 한다. 이 글에서는 서버에 원하는 파일이 있는지 확인하고 삭제하는 방법을 적어둔다. 경로 존재 여부 확인 os.path.exists는 입력받은 경로가 존재하는지 확인하여 bool 데이터를 반환한다. import os if __name__ == '__main__': file_path = 'D:\\PycharmProjects\\airflow_test\\val_test.py' dir_path = 'D:\\PycharmProjects\\airflow_test' print(f'{file_path}: {os.path.exists(file_path)}') print(f'{dir_path}: {os.path.exists(dir_path)}') 파일 여부 확인 ..

Python 2023.04.30

[NAS] Synology NAS - 차단된 IP 해제

개요 Synolgy NAS에 접속하려고 했더니 아래 그림과 같이 IP 차단 안내 메시지와 함께 접속이 되지 않았다. 로그인 실패 횟수가 많아서 차단된 것으로 보이는데, 해제하는 방법에 대해 정리한다. 자동 차단 Synology NAS에서 제공하는 자동 차단 기능은 로그인 시도 실패 횟수가 너무 많은 클라이언트의 IP 주소를 차단하여 보안을 향상하는 것을 목적으로 한다. 지정한 시간(분) 내에 지정한 로그인 시도 실패 횟수를 초과하는 경우, 로그인을 시도한 IP를 자동으로 차단하는 방식으로 동작한다. 무차별 공격으로 계정 정보가 유출되는 위험을 줄여준다. 차단 IP 해제 차단된 IP를 해제하는 방법은 아래와 같다. 1. Synology NAS 접속 > 제어판 > 보안으로 이동 만약 제어판 아이콘 목록에서 ..

기타 2023.04.29

[Airflow 2.x] context 변수 사용하기

개요 기존 작성한 2022.08.19 - [Airflow] XComs 2022.08.11 - [Airflow] PythonOperator 매개변수 전달 에서 PythonOperator를 이용한 task에서 현재 Dag에 대한 정보를 접근할 때 provide_context라는 매개변수에 True 값을 전달했다. t1 = PythonOperator( task_id='print_string', python_callable=print_statement, params = {"name": "passwd", "job": "user"}, provide_context=True, dag=dag, ) 하지만 Airflow 2에서는 더 이상 provide_context를 사용하지 않는다. 참고 : https://airflow..

Apache Airflow 2023.04.28

[Python] subprocess.Popen - 시스템 명령어 실행

개요 2023.02.08 - [Python] 시스템 명령어 실행에서 정리하지 않았던 subprocess.Popen 객체에 대해 추가적으로 정리한다. Popen 객체 이전 글에서 살펴봤던 subprocess.run은 내부적으로 Popen 객체를 통해 동작한다. subprocess.run은 명령어 실행 후 종료할 때까지 대기하지만 Popen은 백그라운드 프로세스로 실행하며 세밀하게 시스템 명령을 사용할 수 있다. class subprocess.Popen(args, bufsize=-1, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=True, shell=False, cwd=None, env=None, unive..

Python 2023.04.27

[Airflow] @task 의존성 설정

TaskFlow 2023.04.22 - [Airflow] with, @dag를 이용한 DAG 선언 2023.04.23 - [Airflow] @task를 이용한 Task 선언 위 두 개 글에서 데코레이터를 이용해 Dag와 Task를 선언하는 방법을 정리했는데, 데코레이터를 이용한 선언 방법은 TaskFlow API를 이용한 방법이다. TaskFlow는 종속성을 자동으로 계산하고 XCom을 이용해 task 간 입출력 이동을 처리한다. 이 글에서는 @task로 생성한 Task의 의존성을 설정하는 방법을 정리한다. 함수 정의 Task로 생성할 함수를 먼저 정의한다. 간단히 데이터를 읽고, 읽은 데이터에서 나이 데이터만 추출해서 총합을 출력하고자 한다. def data_load(): data = [ {"name"..

Apache Airflow 2023.04.26

[Ubuntu] Systemd service 등록

systemd service systemd에 대해서 몇 번 곁다리로 다루었는데, systemd(System daemon)은 시스템 부팅 시 가장 먼저 생성된 후 다른 프로세스를 실행하는 init 역할을 대체한다. 대부분의 리눅스 시스템에 공식적으로 채택되었다. service는 특정 상항에 따라 시작하거나 중지되는 background process를 말한다. systemd service file은 systemd가 구문 분석하고 이해할 수 있는 형식으로 작성된 파일로, 사용자가 지시한 작업을 수행한다. 대부분의 리눅스 배포판에서 systemd를 사용하고 있어, 이 글에서는 systemd가 관리할 서비스를 생성하고 등록하는 방법을 정리한다. .service 파일 구조 systemd가 관리하는 서비스 파일의 확..

Linux 2023.04.25

[MySQL] 실행 중인 프로세스 kill

개요 RDS burstbalance가 0으로 떨어져서 원인 파악을 확인하는 과정에서 장시간 실행 중인 것으로 의심되는 쿼리가 있었다. 확인해 보고 정리하고자 한다. 실행 프로세스 확인 현재 실행 중인 프로세스의 목록과 상태를 확인한다. SHOW processlist; -- 전체 쿼리 보기 SHOW FULL processlist; 참고 : 2021.11.08 - [MySQL/MariaDB] 프로세스 목록 확인 의심하고 있던 쿼리가 실행 중인 상태인 것을 확인할 수 있었다. 프로세스 종료 실행 프로세스를 종료시키는 방법은 리눅스 프로세스 종료와 비슷하게 kill 명령어를 사용한다. kill -- 예시 kill 16644247 프로세스가 정상적으로 종료됐는지 확인한다. 참고 문서 https://hosim.ti..

Database 2023.04.24