2024/10 20

[Python] 예외 처리 - try / except / else / finally

개요프로그래밍을 하다 보면 수많은 오류를 직면하기 때문에 예외 처리는 거의 필수에 가까운 요소에 해당한다. 내 경우에는 보통 try - except 문을 사용해 예외가 발생한 경우에 대해서만 처리하는 상황이 대다수였는데, 최근에 예외가 발생하지 않은 경우에 실행되는 else문이 별도로 있다는 것을 알게 되었다. (Java에는 없었던 것 같다…….)그래서 이번 글에서는 Python에서의 예외 처리 흐름에 대해서 간단히 짚고 넘어간다.  try - except가장 기본적인 구문으로, try 절 내에 코드 실행 중 에러가 발생하는 상황을 처리하기 위함이다.try: raise Exceptionexcept: print("Oops! Something wrong.")except 구문에 처리할 예외를 지정하..

Python 2024.10.17

[Airflow] Web의 Auto-refresh 기능

개요Airflow WebServer는 Dag의 상태를 일정 주기마다 새로 고침하는 auto-refesh 기능을 제공한다.다만 이 기능은 Dag가 너무 많거나, Dag의 Task가 많으면 너무 많은 데이터를 너무 잦게 데이터베이스에서 조회하게 되어 시스템 부하를 줄 수도 있는 것 같다. 때문에 기본적으로 비활성화 상태를 기본으로 둘 수 있는 방법을 찾았는데, 그런 기능은 지원하지 않는 것으로 보인다.이번 글에서는 Auto-refesh 관련 설정에 대해서만 간단히 짚고 넘어가려고 한다.  관련 설정auto_refresh_intervalAuto-refesh 기능이 켜져있을 때 Dag 데이터가 자동으로 새로고침되는 빈도에 해당된다.airflow.cfg나 환경변수로 설정할 수 있는데 Webserver 관련 설정값..

Apache Airflow 2024.10.16

[Celery] inspect - Worker 설정값 확인

개요2024.09.26-[Celery/Flower] 설치 및 실행에서 기본적인 구성으로 Celery를 설치하고 실행해 보았는데, Celery의 현재 설정 등을 확인하는 방법을 알아두어야 할 것 같다.방법을 적어둔다.  CLIcelery cli의 inspect 명령은 Celery worker를 검사하는 기능을 제공한다. celery inspect [OPTIONS] {report|conf|query_task|clock|ping|stats|sched uled|reserved|active|revoked|registered|objgraph|memsamp le|memdump|active_queues} 그중에서도 설정값은 report나 con..

Apache Airflow 2024.10.15

[Python] iterable와 iterator

개요평소 list나 set 등을 iterable 한 객체라고 말해왔는데, 관련 개념을 조금 더 명확하게 정리할 필요가 있어서 정리한다.  iterableiterable이란 멤버들을 순회할 수 있는 객체를 의미한다. 순회당하는 객체를 iterable 하다고 말하며, Python에서는 list, string, drictionary, tuple, set 등이 해당된다.참고로  __iter__() 함수를 가진 객체는 전부 iterable에 해당하고, 다음과 같은 코드로 객체가 iterable인지 확인할 수도 있다.from typing import Iterableprint(isinstance(list(), Iterable))print(isinstance(set(), Iterable))print(isins..

Python 2024.10.14

[MySQL] GROUP_CONCAT으로 압축한 행 풀기

개요2024.09.10-[MySQL] GROUP_CONCAT - 그룹 별 행 압축에서 특정 컬럼에 대해 그룹 별로 압축하는 GROUP_CONCAT 함수를 알아보았다. 이번 글에서는 JSON_TABLE, JSON_ARRAY를 활용하여 압축한 행을 다시 풀어내는 방법을 적어본다.  예제 데이터다음과 같은 예제 데이터를 사용하여 방법을 적어둔다.| type | names || ------- | -------- || cooker | 뒤집개 || fruit | 수박,사과,사과 | DDL더보기CREATE TABLE objects ( type varchar(50), names varchar(100));INSERT INTO objects VALUES ('cooker ', '뒤집개');INS..

Database 2024.10.11

[MySQL] JSON_TABLE - JSON 데이터를 테이블로 변환

개요2024.09.23-[MySQL] JSON 다루기에서 MySQL에서 JSON 형식의 데이터를 추가하고 조회하는 방법을 알아보았다.이번 글에서는 JSON 데이터를 테이블 형태로 변환하는 함수인 JSON_TABLE 함수의 사용 방법을 적어둔다.  JSON_TABLEJSON_TABLE(expr, path COLUMNS (column_list) [AS] alias)JSON_TABLE은 JSON 데이터를 표형식 데이터로 변환하는 함수로 MySQL 8.0에서 도입되었다. 매개변수는 다음과 같다.- expr : 테이블로 변환할 JSON 데이터- path : 테이블 행을 생성하는데 사용하는 JSON 경로- column_list : 테이블 열을 생성하는데 사용하는 JSON 경로 예시와 함께 사용 방법을 적어둔다.  ..

Database 2024.10.10

[MySQL] JSON 다루기

개요최근 MySQL에서 JSON 데이터를 지원하고 있다는 것을 알게 되었다. 간단히 읽고 쓰는 방법을 확인해 보자.   JSON 타입MySQL 데이터베이스의 테이블에서 JSON 데이터를 다루기 위해서는 테이블 컬럼의 데이터형이 JSON이어야 한다.CREATE TABLE employees ( id integer AUTO_INCREMENT primary key, name VARCHAR(200), profile JSON);  INSERTJSON 데이터는 문자열 또는 JSON_OBJECT를 사용하여 입력할 수 있다. 1. 문자열로 입력하기INSERT INTO employees(name, profile) VALUES ('홍길동', '{ "age" : 30, "gender" : "man", "부서": "개발" }'..

Database 2024.10.08

[Pandas] 데이터프레임 생성 시 ValueError: All arrays must be of the same length

현상다음과 같은 JSON 형식의 데이터가 있다고 하자.{ 'Singer' : 'James', 'Titles': ['a', 'b', 'c'], 'Albums' : [1, 2]}이 데이터를 1행 3열의 데이터프레임으로 생성하려고 한다. 하지만 기본적으로 리스트의 원소 수만큼의 행을 가진 데이터프레임을 만들게 끔 되어 있기 때문에 생성을 시도하면 다음과 같은 에러가 발생한다.ValueError: All arrays must be of the same length꼼수를 부려 데이터프레임을 만들어 보자.   방법데이터프레임을 생성할 때 DataFrame 생성자 말고 from_records, from_dicts과 같은 함수를 사용할 수도 있다. 이중 from_dicts 함수는 orient라는 매개변..

[Algorithm] 서로 다른 두 범위가 겹치는지 확인하기

개요다음과 같이 두 개의 범위가 있다고 할 때,├───A───┤ ├───B───┤두 범위에 서로 겹치는 부분이 있는지, 없는지 판단하고 싶다. 간단한 방법이 있는지 알아본다.   경우의 수서로 다른 두 개의 범위가 위치할 수 있는 경우의 수부터 알아보자. 1. 범위 A의 최댓값이 범위 B의 최솟값보다 작은 경우max(A) ├───A───┤ ├───B───┤ 2. 범위 A의 최대값이 범위 B의 최솟값보다 크거나 같으면서 범위 B의 최댓값보다 작거나 같은 경우min(B) ├───A───┤ ├───B───┤ 3. 범위 A의 최소값이 범위 B의 최솟값보다 크거나 같으면서 범위 B의 최댓값보다 작거나 같은 경우min(B) ├───A───┤├───B───┤ 4. 범위 A의 ..

Algorithm 2024.10.04

[Python] Template - 문자열 템플릿

개요Python에서는 f-string이라는 간편하고 강력한 방법으로 문자열 포맷팅을 제공해주고 있는데, 간혹 일부 값만 치환해야 하는 상황에서는 사용할 수 없는 경우가 있었다. python에서 기본적으로 제공하는 %-포맷팅이나 str.format 함수도 확인을 해봤는데, 아무래도 제공하지 않는 기능인 것 같다.이번 글에서는 문자열을 포맷팅하는 또 다른 방법인 Template이라는 기능을 소개하려고 한다.  TemplateTemplate은 string의 기능으로 간단한 문자열 포맷팅을 제공하는데, 여기서 말하는 간단하다는 말은 Python의 다른 내장 문자열 포맷팅 기능보다 번역하기 쉽게 만들어졌다는 의미이다. (코드 관점에서의 이야기인 듯?)string.Template은 $를 기반으로 문자열 치환을 제공..

Python 2024.10.02
1 2