Flask restx를 사용하여 API를 구축할 일이 있어 ORM을 사용하여 데이터베이스와 연결하였다. 데이터베이스 연결 및 ORM을 사용할 수 있도록 제공되는 파이썬 라이브러리로는 SQLAlchemy가 있다. SQLAlchemy를 사용하면 쿼리를 코드에서 실행할 수 있으며 ORM을 통해 데이터베이스와 연결 후 작업이 가능하다. 먼저 데이터베이스와 연결하는 작업이 필요하다. 가장 먼저 sqlalchemy.create_engine 함수를 이용하여 데이터베이스와 연결해 주는 엔진을 만들어야 한다. 나는 postgresql을 사용하고 있으며 "postgresql://db id:db pw@ip:port/db 이름"을 사용하여 엔진을 생성해주었다. 데이터베이스와의 소통을 관리해주는 세션을 로드하여 사용하여야 한다..
최근에 프로그램 성능 향상을 위해 병렬 처리를 하고자 했으며, 이 포스팅은 스레딩을 사용할 것이냐 멀티 프로세스를 사용할 것이냐, 무엇이 더 적합한가에 대해 알아보고 고민을 하며 정리한 글이다. 1. 프로세스 프로세스는 프로그램이 실행되는 하나의 instance로 컴퓨터에서 연속적으로 실행 중인 프로그램을 의미한다. 각 프로세스는 각각 메모리 공간을 가지며 데이터를 저장하기 때문에 여러개의 프로세스를 사용할 때 하나의 프로세스가 죽어도 다른 프로세스에 영향을 끼치지 않아 작업이 중단되지 않는다. 2. 스레드 스레드는 하나의 프로세스 내에서 실행되는 흐름의 단위로 프로세스의 component이다. 하나의 프로세스에 여러 쓰레드가 생성될 수 있으며 부모 프로세스의 메로리 공간을 공유하기 때문에 하나의 프로그..
우분투에 익숙해져 윈도우에서 vscode 및 python을 쓰는 것이 어색해져버린 나머지 가상환경 생성 방법도 까먹어버린 것이다.... ssocr이라는 이름의 가상환경을 vscode에서 만드려고 했으나 우분투에서 vscode를 사용하면서 쓰던 conda create -n 명령어는 통하지 않았다. 찾아보니 윈도우 환경에서는 venv 명령어를 사용하여 가상환경을 생성한다고 한다. 가상환경을 생성하고자 하는 workspace 폴더로 이동한 후 python -m venv ssocr을 입력 해 준다. python -m venv ssocr 위의 명령어로는 가상 환경이 생성되기는 하지만 vscode 내에서 python interpreter 선택이 안되기 때문에 .exe 파일을 직접 선택해야 한다. vscode에서 C..
gstreamer 기초부터 문법은 아래 튜토리얼 링크와 개념을 설명 해 둔 다양한 블로그에서 자세히 볼 수 있다. 튜토리얼 : https://gstreamer.freedesktop.org/documentation/tutorials/index.html?gi-language=python 개념 설명 블로그 : https://medium.com/may-i-lab/gstreamer-gstreamer-%EA%B8%B0%EC%B4%88-da5015f531fc gstreamer는 우분투에 기본적으로 설치되어 있는 경우도 있기 때문에 확인이 필요하다. which gst-launch-1.0 해당 명령어를 입력했을 때 /usr/bin/gst-launch-1.0 위와 같이 나온다면 우분투에 gstreamer가 설치가 되어 있..
드디어 프로그래머스 레벨 1의 모든 문제를 다 풀었다!! 뿌듯- - 비밀지도 - https://programmers.co.kr/learn/courses/30/lessons/17681 코딩테스트 연습 - [1차] 비밀지도 비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다 programmers.co.kr 이진수로 바꿀 때 bin 함수를 사용하였다. 처음엔 2개의 리스트를 순서대로 bin 함수를 사용하여 이진수를 바꾼 후 한번 더 for문을 사용하여 1과 0을 구분하려고 했다. 하지만 이중 for문은 너무 비효율적인 것 같아 다른 방법을 찾아 보다가 bin(i|j)라는 방법을 ..
https://programmers.co.kr/learn/courses/30/lessons/86491 코딩테스트 연습 - 최소직사각형 [[10, 7], [12, 3], [8, 15], [14, 7], [5, 15]] 120 [[14, 4], [19, 6], [6, 16], [18, 7], [7, 11]] 133 programmers.co.kr 가로가 세로보다 작은 경우에는 회전을 시켜서 보관을 할 수 있기 때문에 가로와 세로의 값을 변경하도록 했다. 이 과정이 for문 안에서 실행이 되었고 이 때 가로와 세로의 값을 변경 하면 기존 값에 덧씌워지기 때문에 제대로 변경이 되지 않는다. 때문에 똑같은 값을 가진 sizes를 복사한 리스트가 필요했다. 여기서 슬라이싱으로 복사([:])를 하니 for문 안에서 ..
https://programmers.co.kr/learn/courses/30/lessons/42889 코딩테스트 연습 - 실패율 실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스 programmers.co.kr 처음 문제를 읽고 이해하는데 한참 걸렸다... 입출력 예시 설명을 보고 겨우 이해를 했고, 결론은 실패율을 구하는 것이 아니라 실패율이 가장 높은 스테이지부터 순서대로 출력을 해야하는 문제였다. 정답 코드 def solution(N, stages): answer = [] all_num = len(stages) num = {} for i in range(1, N+..
https://programmers.co.kr/learn/courses/30/lessons/68935 코딩테스트 연습 - 3진법 뒤집기 자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 n은 1 이상 100,000,000 이하인 자연수 programmers.co.kr 10진수를 n진수로 바꾸는 코드만 알고 있다면 금방 풀 수 있는 문제이다. 10진수를 n진수로 바꾸는 코드 inv_three_str = '' while n >= 1 : n,b = divmod(n,3) inv_three_str += str(b) three_str = inv_three_str[::-1] while문을 통..
https://programmers.co.kr/learn/courses/30/lessons/1845 코딩테스트 연습 - 폰켓몬 당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다. programmers.co.kr 굉장히 간단하게 풀 수 있는 문제인데 너무 어렵게 생각해서 시간 초과 왕창 맞았던 문제이다. 첫번째 시도 - 시간 초과 실패 from itertools import combinations as cb def solution(nums): answer = 0 result = [] for numb in cb(nums, int(len(nums)/2)) : result...
https://programmers.co.kr/learn/courses/30/lessons/12982 코딩테스트 연습 - 예산 S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는 programmers.co.kr 처음에 문제를 보고 모든 경우의 수를 다 생각해야 하나 고민에 빠졌었다. 곰곰히 생각해보니 그럴 필요 없이 for문 하나만으로도 해결을 할 수 있을 것 같았다. 정답 풀이 def solution(d, budget): answer = 0 d = sorted(d) for i in range(len(d)) : if budget >= d[i] : budget -= d[i]..