2024/09 19

[Tornado] httpclient - HTTP 요청

개요이전에 python의 requests를 사용해 http 요청하는 방법을 적어두었었는데, requests 라이브러리 외에 http 요청을 할 수 있는 방법은 여러 가지다. 이번 글에서는 Tornado의 httpclient 객체를 사용해 http 요청을 하는 방법을 적어둔다.  tornado.httpclienttornado.httpclient는 차단/비차단 HTTP 클라이언트 인터페이스다.simple_httpclient, curl_httpclient을 공유하는 공통 인터페이스를 정의하며, 사용자 애플리케이션은 적절한 구현 클래스를 직접 인스턴스화하거나 AsyncHTTPClient를 사용하여 재정의할 수 있는 구현 클래스를 선택할 수 있다. 기본적으로는 simple_httpclient를 사용한다.curl_..

Python 2024.09.30

[Pycharm] 파일 변경 사항 복원

개요Python 개발을 할 때 Pycharm을 사용하고 있는데 간혹 변경한 부분은 다시 원복해야 하는 경우가 종종 있다. 근데 그 양이 많아서 실행 취소로 할 수 없는 수준이라 곤란했었는데, Pycharm에서 파일 변경 사항을 추적하는 기능을 제공해주고 있어 정리한다.  로컬 히스토리로컬 히스토리 기능은 Git과 같은 형상 관리와 별도로 프로젝트에서 발생한 변경 사항을 지속적으로 추적하는 기능이다.커밋 간의 차이점만 추적하는 Git과는 다르게, 코드 편집, 테스트 실행, 애플리케이션 배포 등의 작업을 할 때 프로젝트의 상태를 자동으로 기록한다. 따라서 삭제한 파일을 복원하는 등의 작업을 수행할 수 있게 된다. 다만 Git과 같은 형상 관리를 대체하지 못하고, 보관 주기와 보관 용량에 한계가 있다.  이력..

기타 2024.09.27

[Celery/Flower] 설치 및 실행

개요업무 상 Airflow에서 CeleryExecutor를 사용하고 있어 이전에  2023.08.09-[Python] Celery 란 글로 간단한 개념을 알아보았었다. 하지만 막상 Celery를 들여다보는 상황이 되면 관련 개념 부족을 느끼곤 했다. 때문에 아주 간단하게 Celery를 직접 설치해 보고 실행해 보는 경험에 대한 필요성을 느껴 적어두려고 한다. 공식 문서의 튜토리얼을 참고하여 작성했고, Message Broker로는 Redis를 사용한다. 단순 테스트이기 때문에 환경은 killercoda를 사용한다.  Message Broker 설치Celery를 사용하기 위해서는 Worker 간 Task를 주고받는데 사용할 Message Broker가 필요하다.이 글에서는 redis를 사용한다고 명시했으므..

Apache Airflow 2024.09.26

[MySQL] GROUP_CONCAT - 그룹 별 행 압축

개요여러 값이 저장되어 있는 테이블에서 특정 컬럼에 그룹 별로 값이 어떤 것들이 있는지 확인하고 싶다. 이럴 때는 그룹 별로 여러 행의 데이터를 하나의 필드로 연결하는 GROUP_CONCAT 함수를 사용할 수 있다. 사용법을 적어둔다.  GROUP_CONCATGROUP_CONCAT은 여러 행의 데이터를 하나의 필드로 연결하는데 사용하는 함수이다. 그룹에 NULL이 아닌 값이 포함되어 있으면 문자열 값을 반환하는 집계 함수로, 그룹에 값이 전부 NULL이면 NULL을 반환한다.SELECT GROUP_CONCAT ( [DISTINCT] col_name1 [ORDER BY 절] [SEPARATOR str_val] ) FROM 테이블_이름 GROUP BY 그룹화_기준_열;   예시다음과 같이 물건의 유형과 이름..

Database 2024.09.25

[DBeaver] Connection is read-only. Queries leading to data modification are not allowed.

현상DBeaver를 사용해 MySQL에서 작업을 수행하려고 하는데, 언제부터인가 데이터 SELECT문은 정상적으로 동작하지만 ALTER, WITH, CREATE 등의 SQL을 사용할 때는 다음과 같은 에러가 발생하면서 수행되지 않았다.계속 작업이 불가능한 상태라 해결 방법을 적어둔다.   해결 방법최근 Connection 설정을 편집하면서 실수했는지, rea-only connection 설정을 활성화한 게 원인이었다. 다시 수정해 보자. 1. Connection 설정 편집창 열기Connection 우클릭 > Edit Connection으로 접근할 수 있다. 2. General 탭 > Security 항목 확인Securitydml Read-only connection 설정을 체크 해제한 후 저장한다.   ..

Database 2024.09.24

[Tomcat] 응답에 Server 속성값 지정

개요2024.09.05-[Nginx] server_tokens - 서버 정보 명시 여부 결정에서 nginx 사용 시 서버 정보를 노출하지 않도록 설정을 했었다. 비슷한 설정으로 이번 글에선 Tomcat 사용할 때 응답에 server 정보를 설정해 보자.  기본 설정Tomcat 사용할 때의 서버 정보는 conf/server.xml의 Connector 설정에서 지정할 수 있는 것 같다.  설치 후 기본 설정은 위와 같은데, 기본 설치 후 서비스를 시작하여 Tomcat 서버에 접속해 보면 응답 헤더는 다음과 같다.   server 속성응답 헤더에 server 정보를 임의로 지정할 때는 server.xml의 Connector 부분은 server 속성을 추가하면 된다. server 속성은 http 응..

Linux 2024.09.23

[Nginx] server_tokens - 서버 정보 명시 여부 결정

개요최근 API 서버를 구성하면서 nginx를 사용하고 있는데, response header에서 아래와 같이 서버 정보가 노출되어 잇어 삭제해달라는 요청이 있었다.관련 설정에 대해서 적어둔다.  server_tokensserver_tokens는 오류 페이지만 Server의 Response Header에서 nginx 버전의 출력 여부를 결정한다.server_tokens 값설명onnginx 버전 출력. 기본값offnginx 버전 미출력buildnginx 버전 및 빌드 이름 출력   설정 방법Ubuntu 기준으로 /etc/nginx/nginx.conf에서 값을 설정할 수 있다.user www-data;worker_processes auto;pid /run/nginx.pid;include /etc/nginx/m..

Linux 2024.09.20

[GitLab] Merge Request - Squash 기본 활성화하기

개요2024.08.30-[Git] Squash - 커밋 압축하기에서 여러 개의 작은 커밋을 하나의 커밋으로 압축하는 Squash를 알아보았다.이번 글에서는 GitLab에서 Merge Request를 머지할 때 Squash 기능을 사용하는 방법을 적어둔다.  Merge Request - SquashGitLab에서 Merge Request를 할 때 Squash commits 체크박스를 체크하면 머지할 떄 압축된 커밋 하나와 머지 커밋 하나, 총 두 개의 커밋이 target branch에 추가된다.   기본 옵션 설정레포지터리 설정에서 Merge Request를 생성할 때의 Squash 관련 기본값을 설정할 수 있다. 설정할 수 있는 기본값은 아래와 같다.Do now allow : Squash 미허용. 체크 ..

Git | GitLab 2024.09.19

[Git] Squash - 커밋 압축하기

개요Git으로 프로젝트를 관리하는 경우, commit 이력을 깔끔하게 관리하는 것은 프로젝트의 이력 파악에 도움을 준다. 다만 커밋을 수행한 직후에 사소한 오타 등을 수정하기 위해 다시 커밋을 수행하는 상황에 의해 커밋 이력이 난잡해질 수도 있다. 이런 경우 git squash라는 기능을 이용하여 커밋을 압축하는 방식으로 커밋 이력을 정리할 수 있다.이번 글에서는 git squash를 사용하는 방법을 적어둔다.  Squash사전적으로 squash란 '짓누르다'라는 의미로, git에서는 여러 커밋을 하나의 커밋으로 짓눌러 합치는 기능을 제공한다. 불필요하게 작게 나뉜 커밋을 유의미한 변경 사항을 담은 커밋으로 압축할 수 있게 한다.로컬 레포지터리에서 개발한 내용을 원격 저장소로 올리기 전에 squash를 ..

Git | GitLab 2024.09.13

[Python] singledispatch - Overloading 하기

개요2024.08.28-[Python] multipledispatch - Overloading 하기에서 Python에서 Overloading을 구현하는 방법에 대해서 정리했었는데, multipledispatch가 아니라 functools의 singledispatch를 이용한 방법도 존재하는 것 같아서 적어둔다.  singledispatchfunctools 라이브러리에서 제공하는 singledispatch는 함수를 인자 하나의 데이터 타입에 따라 구현이 결정되는 제네릭 함수로 변환하는 기능을 제공한다. ❓ 제네릭(Generic) 이란?하나의 값이 여러 데이터 타입을 가질 수 있는 기술에 중점을 두어 재사용성을 높이는 프로그래밍 방식함수 등을 정의할 때 인자에 구애받지 않고 같은 이름의 함수를 인자 타입에 ..

Python 2024.09.12
1 2