본문 바로가기

프로그래밍49

Jira label 필드 추가하기 label 필드 레이블 필드를 추가해두면 지라 검색 시 관련된 이슈를 편하게 찾을 수 있다. 티켓의 수가 많을 경우, 레이블을 하나씩 손으로 작성해주기는 귀찮기 때문에 파이썬의 JIRA Package를 활용해서 추가해줬다. from jira import JIRA class JiraAPI: def __init__(self, url:str, auth:set): self.options = {'server': url} self.jira = JIRA(self.options, basic_auth=auth) def set_labels(self, issue_ids:str, labels:list): for issue_id in issue_ids: issue = self.jira.issue(issue_id) for lab.. 2023. 10. 22.
C++ 17에서 폴더/파일 구분하기 경로를 입력받아 폴더인지 파일인지 확인하기 C++ 17로 윈도우에서 프로그램을 만들면서 폴더와 파일을 구분해야하는 경우가 생겨 아래 코드를 찾게되었다. 찾은 코드는 테스트 시 작동에는 문제가 없었지만 문자열을 LPCWSTR (WCHAR *)로 받아야 한다는 사소한 단점이 있었다. 혹시 String 클래스를 사용해 입력받은 경로가 폴더인지 파일인지 구분할 수 있는 방법이 있는지도 찾아봤지만, 검색을 해봐도 찾지 못했다.. int isFolder(LPCWSTR path) { /* args: LPCWSTR fileName : 파일의 full path return: int code : 폴더는 1, 파일은 0, 에러는 -1 summary: 폴더인지 파일인지 구분 */ WIN32_FIND_DATA wInfo; HA.. 2023. 5. 19.
QR-CODE 생성하기 python으로 QR-CODE 생성하려면 아래 qrcode[pil] 패키지를 import 한다. pip install qrcode[pil] 아래 코드를 사용하면 png 형식으로 qrcode를 만들 수 있다. import qrcode img_url = qrcode.make("https://hwan001.co.kr/") img_url.save("qrcode.png") 2023. 3. 29.
FastAPI와 Ajax로 SSH 서버 상태 체크하는 웹 서버 만들기 개요 및 구성 웹 페이지에서 여러 대의 SSH 서버가 연결이 가능한지 여부를 UI로 확인하고 싶어서 만들었다. 구성은 Front, Back, SSH Server로 되어 있고 Front, Back은 Ajax를 사용하여 Json으로 데이터를 주고 받는다. Front는 HTML과 Javascript, jquery-3.6.3.js의 ajax, Back은 FastAPI로 작성해 두었고 서버의 SSH 연결 상태를 확인하기 위해서 paramiko 패키지를 사용한다. 아래는 서버의 1대의 상태를 체크하는 과정을 요약한 그림이다. Front UI는 Server Count에 서버의 대수를 입력하면 아래처럼 해당 수에 맞춰 인터페이스가 추가된다. localStorage를 사용했기 때문에 페이지가 새로 고침되어도 해당 인터페.. 2023. 2. 19.
[Python] requirements.txt로 패키지 설치하기 requirements.txt 파이썬으로 만든 코드에서 필요한 패키지를 쉽게 표현하기 위해 사용된다. 내부는 아래처럼 필요한 패키지들의 이름을 적어준다. pandas==1.3.5 numpy tensorflow tqdm pandas_datareader finance-datareader beautifulsoup4 yfinance pymongo yahoo_fin requests_html flask flask-cors flask_restx pytest == 을 사용하여 필요한 버전을 명시해줄 수도 있다. 패키지 설치 Python에서 패키지를 설치할 땐 pip 명령어를 사용한다. 위의 파일을 사용하여 패키지를 설치하려면 아래 명령어를 사용하면 된다. pip install -r requirements.txt 하지만.. 2023. 1. 12.
FastAPI FastAPI FastAPI는 Python 3.6이상의 API를 빌드하기 위한 빠르고 현대적인 웹 프레임워크이다. 웹 부분을 위한 Starlette와 데이터 부분을 위한 Pydantic 덕분에 NodeJS와 Go에 대등할 정도로 높은 성능을 가지고 있으며, 빠른 코드 작성이 가능하다. 직관적이고 쉬운 코드로 인해 휴먼 에러가 약 40%(내부 개발팀 테스트 기준) 감소했다고 한다. 또한 API에 완전히 호환되는 개방형 표준을 기반으로 하여 Swagger(OpenAPI)와 json Schema를 지원한다. 개인적으로는 Flask와 문법이 비슷하지만 기본적으로 추가된 기능이 많고 Django보다는 자동화(?)는 덜 되었지만 훨씬 가볍고 빠르다는 느낌을 받았다. 자세한 내용은 아래 공식문서를 참고 https:/.. 2023. 1. 12.
[Python] 디렉토리 내부의 동일한 파일 찾기 이름이나 확장자는 다르지만 사실 동일한 파일이 있다. 이 2개의 파일을 코드로 구분하려면 어떻게 해야 할까? 그리고 디렉토리 내에 그런 파일들이 여러개 있다면 어떻게 찾을 수 있을까? 아래 파일은 get_tickers.py를 복사하여 .txt로 확장자를 바꾼 동일한 파일이다. 2개의 파일이 사실은 같다는 걸 코드로 확인해보자. 파일이 동일하다는 걸 확인하려면 파일 전체를 해쉬로 만들어 값을 비교해보면 된다. 코드로 작성해보자. import hashlib def my_hash(file): with open(file, 'rb') as f: read_data = f.read() hash = hashlib.sha512() hash.update(read_data) hexSHA512 = hash.hexdigest(.. 2022. 12. 10.
[Python] Docstring Docstring 파이썬은 자료형이 명시되지 않기 때문에(언어의 동적 특성) 파이썬에서의 문서화는 매우 중요하다. 문서화를 위해서 파이썬은 docstring이라는 문서화 문자열 기능을 제공하고 """ 문서화 문자열입니다. """ 처럼 표현할 수 있다. docstring은 모듈, 클래스, 함수에 붙일 수 있고 각 객체의 __doc__ 속성에 접근하여 문자열을 가져올 수 있다. 어떤 대상에 docstring을 작성할 지에 따라 적어야하는 내용들도 달라진다. *더 많은 내용은 https://peps.python.org/pep-0257/ 를 참고 모듈 docstring 각 모듈에는 최상위 docstring이 필요하다. docstring의 첫문장은 모듈의 목적을 기술하는 한 문장으로 구성되며 이후는 모듈의 동작을.. 2022. 11. 27.
[Python] OS 모듈 : 디렉토리 전체 탐색하기 (하위 디렉토리까지) 디렉토리 탐색 모든 하위 디렉토리 내부 파일까지 포함된 전체 파일의 목록을 가져오기 위해 파이썬으로 코드를 작성하려고 한다. 그런데 디렉토리(또는 폴더) 내부에 하위 디렉토리가 있다면? 그리고 그 디렉토리 내부에 하위 디렉토리가 있는지 없는지 모른다면? 코드를 어떻게 작성해야 될까? 먼저 파이썬에서 경로를 다루기위해 os 패키지를 import 했다. 그리고 아래와 같은 디렉토리 구조(주석)를 만들어 둔 뒤 하위 디렉토리 어딘가에 FindMe.txt 파일을 숨겨두었다! #Find_TMP #┣━1234 #┗━TEST # ┗━TEST1 import os os 모듈 내부의 메소드들을 사용해서 FindMe.txt 파일이 어디에 있는지 찾아보자. os.listdir() 메소드를 사용하면 입력한 폴더 내부에 존재하는.. 2022. 11. 20.
[백엔드] Flask에서 JWT 토큰 생성하기 flask_jwt_extended flask에선 flask_jwt_extended라는 이름으로 jwt 토큰에 대한 기능을 제공해준다. 토큰 인증에 대한 테스트는 POSTMAN으로 했고, JWT에 대한 내용은 아래 글을 참고하면 좋을 것 같다. https://hwan001.tistory.com/277 [python] JWT 모듈 JWT (Json Web Token) JWT는 웹 표준(RFC 7519) 으로 두 개체 사이에서 JSON을 사용하여 정보를 안전성 있게 전달해준다. 웹에서 로그인을 하거나 인증을 받게되면 보통 세션을 사용하여 인증 정보를 기 hwan001.co.kr Access 토큰 생성하기 config.py flaskJwt_secret_key = "secret_key" flask_admin_id.. 2022. 9. 18.
[python] JWT 모듈 JWT (Json Web Token) JWT는 웹 표준(RFC 7519) 으로 두 개체 사이에서 JSON을 사용하여 정보를 안전성 있게 전달해준다. 웹에서 로그인을 하거나 인증을 받게되면 보통 세션을 사용하여 인증 정보를 기록하는데, JWT는 토큰 내부의 Signature에 해당 정보를 기록한다. JWT를 사용할 경우 인증을 위해 웹 브라우저의 세션 공간을 사용하지 않고 인증 여부를 알 수 있기 때문에 확장성이 좋다. 또한 생성 시 권한을 지정할 수 있어 각 토큰별로 기능을 제어할 수 있고 플랫폼에 종속적이지 않다. JWT의 구조는 Header.Payload.Signature로 나뉘어져 있다. Header는 토큰의 typ(해당 토큰의 타입)과 alg(해싱 알고리즘)을 Payload는 토큰에 담을 정보를 .. 2022. 9. 13.
백엔드 로드맵 정리 백엔드 공부를 하다보면 볼 수 있는 로드맵 이미지이다. 각 내용을 정리하고 개인적으로 필요하다고 생각하는 내용들도 조금 추가해 보았다. Internet How does the internet work? 패킷과 프로토콜을 OSI 7을 기반으로 설명 A PC의 프로그램에서 B PC에 위치한 프로그램으로 패킷이 전달되는 과정 Private IP와 Public IP 라우터와 스위치 전송 계층의 전송 장비 CIDR, 서브네팅, 클래스 What is HTTP? HTTP가 무엇인지에 대한 설명, 아래 요소들을 설명하면 되는데 조금 더 나가면 브라우저에 대한 내용과 HTTPS와의 차이를 같이 말할 수 있을 듯 하다. 브라우저에 대한 이야기 (7계층에 위치한 프로그램의 일종) HyperText Transfer Proto.. 2022. 9. 12.
[Python] Yahoo_fin 모듈 Yahoo_fin 모듈 yahoo_fin은 시가총액, 배당수익률, 종목에 대한 최신 정보를 제공하는 Python 3 패키지이며, 아래 추가 기능들을 제공한다. 손익 계산서/ 대차 대조표/ 현금 흐름표/ 재무 상태 표 보유자 정보 및 분석가 데이터 스크래핑 가상자산(암호화폐) 데이터 현재 거래일 실시간 주가 및 거래 상위 종목 옵션 가격 및 만료 날짜 검색 모듈 수입 캘린더 기록 금융 뉴스 RSS 피드 스크랩 yahoo_fin은 stock_info module, options module 두 가지 모듈로 구성된다. 자세한 옵션이 궁금하면 아래 링크들에서 찾아보자. https://algotrading101.com/learn/yahoo-finance-api-guide/ Yahoo Finance API - A .. 2022. 9. 11.
[Script] 쉘 스크립트 모음 passwd에 stdin으로 패스워드 전달하기 usernam="root" password="12345" echo $password | passwd --stdin $username 여러 파일에서 특정 키워드 찾기 keyword="alias" path="/root/" filename=".bash_profile" grep $keyword `find $path -name $filename` 여러 파일에서 특정 문자열 변경하기 source="127.0.0.1" dest="192.168.0.100" path="/etc/" filename="ifcfg-*" sed -i s/$source/$dest/g `find $path -name $filename` 여러 파일에서 (특수기호 공백 제외하고) 특정 문자열 검색 #!/.. 2022. 9. 1.
[Windows Programming] 모니터 제어 명령 세트(MCCS)를 활용한 모니터 제어 프로그램 프로그램 제작 이유 만약 PC와 모니터가 2대씩 있을 때 각 PC를 둘 다 듀얼 모니터로 사용하고 싶다면 어떻게 하는게 좋을까? 가장 쉽게 문제를 해결하려면 매번 사용하는 PC의 HDMI 케이블을 바꿔서 연결하면 된다! 만약 그것도 귀찮다면 KVM 스위치를 구매해 연결해두고 필요한 PC의 버튼이나 단축키를 눌러서 사용하면 된다. (망 분리 환경이라면 보통 Aten과 같은 회사의 보안 인증이 된 제품을 지급해준다. 하지만 개인이 구매하기 어렵고 비싸다..!) 하지만 PC를 사용하다보면 양쪽 PC를 동시에 활용해야하는 경우가 꽤 많았고 개인적으로 KVM에서 듀얼 모니터 설정이 더 어려웠던 것 같다. 차라리 아래처럼 케이블을 전부 연결해두고 모니터 버튼으로 필요할 때마다 입력소스를 바꿔주는게 더 편하다. 많이.. 2022. 8. 7.
[Python] Paramiko 모듈 Paramiko 원격 장치에 대한 보안 연결을 위한 모듈로 SSH/ SFTP 연결 시에 사용한다. 만약 설치 중 에러 발생 시 pip를 업그레이드하고 의존성이 있는 라이브러리를 설치해준다. 코드 pip install paramiko # requirements.txt - paramiko import sys import subprocess try: import paramiko except: subprocess.check_call([sys.executable,'-m', 'pip', 'install', '--upgrade', 'pip']) subprocess.check_call([sys.executable,'-m', 'pip', 'install', '-r', 'requirements.txt']) import p.. 2022. 7. 7.
[Win32 API] GetCurrentDirectory : 현재 디렉토리 위치 구하기 MSDN https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-getcurrentdirectory GetCurrentDirectory function (winbase.h) - Win32 apps Retrieves the current directory for the current process. docs.microsoft.com Header #include Syntax DWORD GetCurrentDirectory( [in] DWORD nBufferLength, [out] LPTSTR lpBuffer ); Parameters - [in] DWORD nBufferLength : NULL을 포함한 문자열 변수의 길이 - [out] LPT.. 2022. 6. 1.
[Win32 API] PathFileExists : 파일 존재 여부 확인하기 MSDN https://docs.microsoft.com/en-us/windows/win32/api/shlwapi/nf-shlwapi-pathfileexistsa PathFileExistsA function (shlwapi.h) - Win32 apps Determines whether a path to a file system object such as a file or folder is valid. docs.microsoft.com Header #include #pragma comment(lib, "Shlwapi.lib") Syntax BOOL PathFileExistsA( [in] LPCSTR pszPath ); Parameters - 파일의 절대 경로를 LPCTSTR 타입으로 넣어줌. ( ex) L.. 2022. 6. 1.
[PowerShell] 작업 스케줄러로 휴지통 자동 비우기 명령어로 휴지통 비우기 아래 명령어를 활용하면 파워쉘로 휴지통을 비울 수 있다. PowerShell.exe -NoProfile -Command Clear-RecycleBin 만약 cmd에서 지우고 싶다면 아래처럼 활용이 가능하다. cmd.exe /c "echo Y|PowerShell.exe -NoProfile -Command Clear-RecycleBin" 윈도우 작업 스케줄러 활용하기 위 명령어들을 정해진 날짜, 시간, 조건 등에 자동으로 시행하기위해 윈도우 작업 스케줄러를 사용했다. 작업 스케줄러를 열어준 뒤 새 작업을 만들어준다. 트리거 탭으로 이동해 새로만들기 버튼을 눌러주면, 작업이 수행되는 조건(트리거)를 지정할 수있다. 매일 18시에 자동으로 실행되게 설정해 주었다. 동작 탭으로 이동해서 위.. 2022. 5. 15.
[Windows] CallBack 함수 CallBack 함수 함수는 일반적으로 프로그래머에 의해 작성되고 호출된다. CallBack 함수는 일반적인 함수와 비슷하지만, 호출되는 시점이 시스템(이벤트)에 의해 결정된다는 차이가 있다. 윈도우 API를 공부하면 가장 처음 배우는 Window를 띄우는 코드(링크)에서도 콜백 함수인 윈도우 프로시져를 볼 수 있는데, 해당 콜백함수(프로시져)는 WinMain에서 WndClass.lpfnWndProc=WndProc; 로 WNDCLASS 구조체에 등록된 뒤에 RegisterClass(&WndClass); 되어진 이후 따로 호출하지 않는다. 하지만 구조체의 정보가 등록된 이후는 WinMain 내부의 메시지 루프인 while(GetMessage(&Message, NULL, 0, 0)) { TranslateMe.. 2022. 5. 7.