전체 글 1150

[OOP] 객체 지향 - 추상화

개요객체 지향 프로그래밍(Object Oriented Programming, OOP)이란, 데이터를 입력받아 순서대로 처리하고 결과를 도출하는 절차적 프로그래밍(Procedure Programming) 관점에서 벗어나 여러 객체가 유기적으로 협력하면서 데이터를 처리하는 프로그램 설계 방식을 말한다.객체 지향 프로그래밍은 프로그램을 단위로 구분하여 프로그램을 유연하고 쉽게 변경할 수 있도록 만든다. 물론 객체 지향 프로그래밍의 장점을 잘 살릴 수 있도록 프로그램을 설계하기 위해서는 객체 지향 프로그래밍의 특징을 잘 이해하고 있어야 한다.이번 글에서는 객체 지향 프로그래밍의 특징 중 하나인 추상화(Abstraction)에 대해서 정리해보려고 한다.   추상화사전적으로 추상화란, 사물이나 표상을 어떤 성질, ..

기타 2024.09.06

[Python] 추상 클래스 (Abstract class)

개요최근 Python으로 Class를 직접 정의하여 작업하는 경우가 잦은데, 슬슬 추상 클래스나 인터페이스에 대한 수요가 생기기 시작했다.이번 글에서는 추상 클래스에 대한 개념을 되짚어보면서 Python으로 추상 클래스를 정의하는 방법을 적어둔다.   추상 클래스추상 메서드(Abstract Method)란 구현 없이 선언만 되어 있는 메서드를 말한다. 그리고 추상 클래스는 하나 이상의 추상 메서드를 가진 클래스를 말한다. 추상 클래스를 상속한 자식 클래스가 추상 메서드를 반드시 구현하도록 강제하여 기능을 확장하고자 할 때 사용한다. 클래스이기 때문에 변수나 일반 메서드를 정의할 수 있지만, 직접 객체를 생성할 수 없다는 특징이 있다. 추상 클래스는 추상화라는 기법을 클래스에 접목시킨 것으로, 객체를 구조..

Python 2024.09.05

[Tornado] on_finish 함수 비동기화 (?)

개요Tornado로 개발한 애플리케이션에서 Redis를 비동기로 연결하여 사용하고 있다. from tornado.web import RequestHandlerimport redis.asyncio as redisclass BaseHandler(RequestHandler): def prepare(self): self.redis_connection = redis.Redis() def on_finish(self): self.redis_connection.close()그러나 테스트를 해보니 Redis의 연결을 종료하는 시점에 다음과 같은 에러가 발생하는 것을 발견했다./home/brian/repos/medigator/venv/lib/python3.8/site-pa..

Python 2024.09.04

[Python] Redis - 비동기 연결

개요2023.06.03-[Python] redis 사용하기, 2024.08.07-[Python] redis - pub/sub 구현하기에서 Python redis 라이브러리를 사용해 Redis에 접속해 메세지를 다뤄봤다.공식 문서를 보니, Python redis는 비동기 처리도 지원하고 있었다. 이번 글에서는 비동기 방식으로 redis에 접속하고 메세지를 보내는 방법 등을 적어둔다.  import비동기 방식으로 redis를 사용할 때는 redis.asyncio를 import하여 사용한다. 보통 redis라고 축약하여 사용하는 것 같다.import redis.asyncio as redis참고로 redis.asyncio의 모든 함수는 코루틴이다. 필연적으로 asyncio도 함꼐 import하여 사용하게 된다...

Python 2024.09.03

[Git] git tag - 특정 태그로 이동

개요최근 소스 레포지터리의 특정 태그 버전으로 이동해야 하는 일이 있었는데, 방법을 잘 모르고 있어서 적어둔다.   Tag무언가를 표시할 때 사용하는 태그는 Git에서도 중요한 특정 커밋을 표시하기 위해서 사용한다. 즉, 커밋을 가리키는 링크와 비슷한데, 보통 v1.0.0, v1.1.0 등으로 릴리즈를 할 때 사용한다.태그에는 Lightweight, Annotated라는 두 가지 종류가 존재한다. Lightweight 태그는 단순 특정 커밋에 대한 포인터에 해당하는 반면, Annotated 태그는 태그 생성자의 이름, 이메일, 태그 생성일, 태그 매시지 등을 Git 데이터베이스에 저장한다. 일반적으로 태그를 생성할 때는 Annotated 태그로 생성하여 사용한다.   태그 생성태그는 git tag 명령으..

Git | GitLab 2024.09.02

[Python] Datetime - isoformat

개요최근 Airflow 2.5.1 버전에서 2.8.2 버전으로 업그레이드 테스트를 진행하고 있는데, Airflow의 Dag run context의 execution_date 값의 문자열 형식이 다음과 같이 바뀐 것 같다. 스케쥴에 의한 트리거매뉴얼 트리거2.5.12024-07-31T00:00:00+00:002023-05-10T01:51:17.686430+00:002.8.22024-07-31 00:00:00+00:002023-05-10 01:51:17.686430+00:00execution_date 값의 문자열 데이터를 파싱 하는 부분이 있어서... 변경된 형식을 기존 형식으로 변경하고 싶다.확인해 보니 기존 형식이 ISO 8601 형식인 것 같다. python에서 datetime 값을 ISO 8601 형..

Apache Airflow 2024.08.30

[MySQL/JDBC] User does not have access to metadata required to determine stored procedure parameter types.

현상JDBC를 통해 MySQL에서 사용 중인 프로시저 정보를 확인하려고 하면 아래와 같은 메시지와 함께 실패하는 경우가 있다.User does not have access to metadata required to determine stored procedure parameter types. If rights can not be granted, configure connection with "noAccessToProcedureBodies=true" to have driver generate parameters that represent INOUT strings irregardless of actual parameter types.대충 보면 권한 문제처럼 보이는데…… 문제를 해결해보자.   원인에러 메시지..

Database 2024.08.29

[Python] redis - pub/sub 구현하기

개요2024.07.30-[Redis] Pub/Sub 개념, 2024.07.31-[Redis] Pub/Sub - 테스트에서 Pub/Sub 개념을 알아보고 간단히 테스트해 봤는데, 이번 글에서는 Python을 이용해 redis Pub/Sub 기능 구현해보려고 한다. + Python redis 라이브러리의 기본적인 사용법은 2023.06.03-[Python] redis 사용하기를 참고한다.  SubscribePython redis 라이브러리는 채널을 구독하고 새 메세지를 수신할 수 있도록 하는 pubsub 객체를 제공한다.import redisr = redis.Redis(host='localhost', port=6379, decode_responses=True)pubpub = r.pubsub()pubpub.s..

Python 2024.08.28

[MySQL] DIV - 나눈 몫 계산

개요프로그램에서 동작하고 있는 쿼리를 분석하다 모르는 예약어가 있어 정리해 둔다.  DIVx DIV y DIV는 두 수를 나눴을 때 그 몫을 반환하는 함수이다.(보통 데이터베이스 상에서 사칙연산과 관련된 함수를 쓸 때 괄호 안에 매개변수를 전달해 왔어서 몰랐다…….)두 수를 나눈 실수형 데이터를 반환하는 나눗셈(/) 연산자와 달리, DIV는 두 수를 나눈 몫에 해당하는 정수형 데이터를 얻을 수 있다.   테스트나눗셈 연산자와 DIV의 실행 결과를 비교한다. - 나누어 떨어지는 수SELECT 10 / 5 , 10 DIV 5 실행 결과| 10 / 5 | 10 DIV 5 || ------ | -------- || 2.0000 | 2 |  - 나누어 떨어지지 않는 수SELECT 11 / 5 ..

Database 2024.08.27

[Redis] List 다루기

개요2023.06.01-[Redis] redis-cli로 데이터 읽고 쓰기에서 set, get 명령으로 문자열 데이터를 읽고 쓰는 방법을 살펴보았었다. 이번 글에서는 Redis에서 List를 다루는 방법을 정리해 본다.  ListRedis는 리스트 형태의 데이터 타입을 지원한다.LPUSH, RPUSH 명령으로 데이터를 추가하고 LPOP, RPOP 명령으로 데이터를 꺼낸다. 데이터를 조회할 때는 LRANGE, LLEN 명령을 사용한다.  명령어LPUSHkey의 리스트 왼쪽에 원소를 추가한다.LPUSH key element-- 예시LPUSH mylist 0다음과 같이 mylist라는 키에 값이 1인 원소를 가진 리스트가 있다고 하자.이 리스트에 LPUSH로 0을 추가하면 다음과 같은 상태가 된다.mylist..

Database 2024.08.26