[Python] 동시성 프로그래밍 (1) 프로세스, 스레드동시성 프로그래밍은 여러 작업을 동시에 수행할 수 있도록 하는 프로그래밍 기법이다.이는 여러 프로세스나 스레드를 사용하여, 동시에 실행되는 프로그램을 작성하는 것을 포함한다. 동시성 프로그래밍은 특히 멀티코어 프로세서와 네트환경에서 중요하며, 이 방식은 다음과 같은 두 가지 주요 개념들을 포함한다.병렬성 (Parallelism)여러 작업이 동시에 실행되는 것비동기성 (Asynchrony)작업이 시작된 후, 그 작업이 완료될 때 까지 기다리지 않고 다른 작업을 수행 프로세스(Process) 스레드(Thread)멀티코어 프로세서의 발전으로, CPU의 모든 코어를 활용하여 작업을 병렬로 처리함으로써 처리 시간을 단축할 수 있다. CPU는 프로세스를 실행..
[etc] 동기(Synchronous)와 비동기(Asynchronous) 이번에 Tornado 웹프레임워크를 알게되었는데, 해당 웹프레임워크는 비동기 네트워킹을 지원하는 것이 주요 특징이다. 토네이도의 동작 방식을 이해하기 전 동기와 비동기에 대해서 조금 자세히 알아보고자 한다. 프로그래밍에서 동기(Synchronous)와 비동기(Asynchronous)는 작업 처리 방식의 두 가지 주요 패턴이다. 동기(Synchronous)"순서대로" 처리되는 방식이다.말그래도 한 작업이 완료되어야 다음 작업이 시작된다. 예를 들어, 버스가 한 곳에 정차하면 승객이 모두 타고 내린 후에야 출발한다. 승객이 다 탑승할 때까지 기다려야하기 때문이다. 동기 방식은 코드가 간단하고 이해하기 쉬우며, 디버깅이 용이하지만 (문제..
[Tornado] Tornado 알아보기 TornadoTornado는 FriendFeed 에서 개발된 Python 웹 프레임워크이자 비동기 네트워킹 라이브러리다.비차단 네트워크 I/O를 사용하여 Tornado는 수만 개의 개방형 연결로 확장이 가능하다. 따라서 long polling, WebSockets 및 각 사용자에 대해 같이 장기적인 연결 유지가 필요한 애플리케이션에 이상적이다. Threads and WSGI토네이도는 대부분의 Python의 웹프레임워크와 다르게 WSGI(Webserver Gateway Interface) 기반이 아니며, 일반적으로 프로세스 당 하나의 스레드로만 실행된다. 모듈에서 WSGI를 일부 지원하지만, 대부분의 애플리케이션은 WSGI를 사용하는 대신 토네이도 자체 인터페이스..
[K8s][Security] Mutating, Validating이전에 Admission Controller에 대해 포스팅 한 적이 있다. [K8s][CKS] Admission Controller[K8s][CKS] Admission Controller쿠버네티스의 접근제어에는 크게 3가지가 있다.Authentication접속한 사람의 신분을 시스템이 인증Authorization누가 어떤 권한을 가지고 어떤 행동을 할 수 있는지 확인Admissionheywantodo.tistory.com Admission 컨트롤러는 요청이 인증(Athentic)되고 승인된 후에 Kubernetes API 서버에 대한 요청을 가로채어,객체를 변형(Mutating)하고 검증(Validating)한다. Admission Cont..
[etc] STRIDE 위협 모델 개발자와 엔지니어가 개발 수명 주기(SDLC)에서 가능한 일찍 보안을 채택하도록 권장한다.그러한 보안 관행 중 하나가 바로 Treat Modeling(위협 모델링)이다. Threat Models(위협 모델)은 소프트웨어의 보안 위험을 식별하고 완화하는 체계적이고 구조화 된 방법이다.위협 모델을 만드는 다양한 방법과 방법론이 있지만, 그중 하나인 STRIDE라는 프로세스에 대해 알아보고자 한다. STRIDE란?Microsoft에서 대중화 한 프로세스로스푸핑(Spoofing), 변조(Tampering), 부인(Repudiation), 정보 공개(Information Disclosure), 서비스 거부(Denial of Service), 권한 승격(Elevation of Pr..
[Git] 폴더, 파일 이름 변경git의 파일 이동 명령어인 mv를 사용하면 rename과 동일한 효과를 얻을 수 있다.이후 commit을 해주면 원격 저장소에 적용이 된다.git mv old_name new_namerename history를 확인하기 위해 log --patch 명령어를 실행할 수 있다. git log -p -1diff --git a/config.production.json b/config.production.json.examplesimilarity index 100%rename from old_name.txtrename to new_name.txt
[Python] pip freeze 명령어 사용 시 패키지 버전이 제대로 나오지 않을 때현재 서버의 패키지 버전을 확인하여 패키지의 취약점을 검사를 해야하는 일이 있었는데,pip freeze 명령어로 버전을 확인할 때 버전명이 다음과 같이 명시가 되는 경우가 있다.jsonpatch @ file:///home/conda/...찾아보니 pip 19.1 버전부터 일반 버전 지정자 대신 직접 참조를 사용하도록 허용을 한다고 한다.직접 참조는 위와 같이 지정자 @와 명시적 URL로 구성된다. PEP 440 – Version Identification and Dependency Specification | peps.python.orgThis PEP describes a scheme for identifying ve..
[Python][bs4] BeautifulSoup4에서 텍스트로 파싱하기저번에 파이썬으로 웹 크롤링을 할 수 있는 BeautifulSoup 라이브러리에 대해 간략하게 포스팅을 했었다. 이번에 BS4를 이용하여 HTML 문서를 파싱을 해야하는 일이 있었는데, 해당 문서가 tag만 있고 id값이나 class값이 없어 원하는 값을 파싱하기 매우 곤란한 상황이였다...😥 믿을건 태그값 내의 텍스트 밖에 없어서, 이번 포스팅에서 bs4를 이용해 텍스트 데이터를 파싱하는 방법에 대해 알아보고자 한다. BeautifulSoup4의 기본 사용법은 다음 포스팅을 참고하면 된다. [Python] Beautiful Soup(bs4)[Python] Beautiful Soup(bs4)파이썬(Python)에는 여러 웹 스크래핑..
[Python] globglobglob 모듈은 파일 및 디렉토리 경로를 패턴으로 검색할 수 있도록 도와주는 파이썬의 기본 라이브러리다.이를 활용하면 특정 확장자나 이름을 가진 파일을 쉽게 찾아낼 수 있다. 모듈 사용법1. 기본 사용법먼저 모듈을 import 해준다.import globglob은 파일 경로 패턴을 매칭하여 해당하는 파일들의 리스트를 반환한다.간단한 예제로 현재 디렉토리에서 모든 파일을 검색해보자.files = glob.glob(*)print(files)## result['file1.txt', 'scripts.py', 'image.jpg'] 2. 특정 확장자의 파일 검색특정 확장자의 파일만 검색하고 싶다면, 파일명 뒤에 확장자를 명시하면 된다.예를 들어 .txt 파일만 검색해보자.txt_fi..
[MySQL] JSON_TABLE(), JSON_ARRAY()MySQL은 JSON 데이터 타입을 지원하면서 더 강력하고 유연한 JSON 처리를 제공하고 있다.특히 JSON_TABLE 함수는 JSON 데이터를 SQL 테이블처럼 다룰 수 있는 매우 유용한 기능이다. JSON_TABLE과 JSON_ARRAY 함수의 사용법과 예제를 통해 어떻게 JSON 데이터를 더 쉽게 다룰 수 있는지 알아보자.JSON_ARRAY여러 값을 JSON 배열로 생성할 때 사용된다. 이 값은 인자로 들어온 값을 JSON 배열 형식으로 반환한다. 사용법JSON_ARRRAY([val1,[, val2, ...]]) 예시SELECT JSON_ARRAY(1, 'apple', true, NULL);위 쿼리의 결과는 다음과 같은 JSON 배열을 ..
[MySQL] 데이터를 구분자로 Split 하기개요DB 테이블에 컬럼이 다음과 같은 형식으로 되어있는 데이터가 있었는데 구분자를 분리해서 개수가 몇개인지 카운트를 하고싶었다.test_columnsappleapple, bananabanana, pineapplepineapple MySQL에서 특정 문자를 기준으로 split 하는 함수에는 SUBSTRING_INDEX() 함수가 있는데,이 함수는 인덱스에 해당하는 라인만 뽑기 때문에 데이터가 많을 경우 원하는 결과를 얻기 위해선 프로시저를 사용해야 했다..😥 SELECT 문으로 데이터 하나 뽑자고 프로시저를 사용하는 건 너무 과한 것 같아 다른 방법을 알아보기로 했다. JSON_TABLE열심히 서칭한 결과 JSON_TABLE()이라는 아주 좋은 방법이 있었다..
[MySQL] INTERVALINTERVALINTERVAL은 주로 날짜 또는 시간 데이터와 함께 사용되며, 다양한 시간 단위를 더하거나 빼는 역할을 한다.MySQL에서는 특정 날짜 필드에 연산을 수행할 때 매우 간단하게 사용할 수 있도록 지원하고 있다. 날짜 또는 시간에 값을 더하거나 빼기-- 특정 날짜에 값을 더함DATE_ADD(날짜, INTERVAL 값 단위)-- 특정 날짜에서 값을 뺌DATE_SUB(날짜, INTERVAL 값 단위)예를 들어, 다음과 같이 고객의 주문이 완료된 날짜에 3일을 더해 예상 배송일을 계산할 수 있다.SELECT DATE_ADD(order_date, INTERVAL 3 DAY) AS expected_deliveryFROM orders;또한 다음과 같이 주문일이 30일 이상 ..