Python 16

[python] Flask 배포하기

웹 서버와 SGI 웹 서버란 실제로 사용자의 요청을 받고 응답을 주는 엔진엑스(Nginx), 아파치(Apache) 등을 말하며, 네트워크 통신의 전반적인 부분을 담당한다.Nginx, 아파치와 같은 웹서버와 플라스크 애플리케이션 등 웹 애플리케이션 사이에서는 통신이 필요하다. 서버 게이트웨이 인터페이스(SGI)가 바로 그 통신 규약, 이 규약을 통해 웹 서버는 사용자의 HTTP 요청을 웹 애플리케이션에 전달하고, 애플리케이션의 응답을 다시 사용자에게 전달한다. 플라스크에서의 SGI는 그중에서도 플라스크 웹 애플리케이션과 웹 서버 사이의 통신 방식만을 정의한다. Flask run 만으로도 내부적으로 간단한 WSGI 서버를 실행시킨다.그러나 이것은 운영 환경에서 사용하기엔 부족한 면이 많음 - 성능 이슈 : ..

[Flask] Flask + mysql 연결

Flask에서 DB와 연결을 하려면 여러 방법이 있지만, 일반적으로 많이 사용되는 것은 SQL-Alchemy를 사용하여 연결하는 것이다. SQL-Alchemy는 객체-관계 매핑을 제공하여 파이썬 클래스를 데이터베이스 테이블과 연결을 통해 보다 직관적이고 유지관리를 쉽게 해준다. 데이터베이스 종류는다양하지만, 일반적으로 많이 사용되는 MySQL을 사용한다고 가정한다.Flask에서  DB를 접속하려면, Flask-SQLAlchemy와 mysql연결을 위한 pymysql을 설치한다.  - 필요한 패키지 설치pip install Flaskpip install Flask-SQLAlchemy## db 종류에 따라 선택해서 설치하면 됨pip install pymysql   - 사전 환경설정먼저 PC에 MySQL을 설..

[python] 프로그래머스 지도찾기

https://school.programmers.co.kr/learn/courses/30/lessons/17681 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 비트연산을 통해 #또는 공백을 풀어내는 문제였다. format으로 이진수를 변경할 때, n길이 만큼 공백형태를 변경해야 됬는데, 이부분을 format함수의 zfill 메서드를 사용해서 해결할 수 있었다. 아래에 해결코드이다. def decrypt_secret_map(n, arr1, arr2): decrypted_map = [] for i in range(n): # 두 배열의 각 원소를 이진수로 변..

[python] Stack을 활용한 괄호검사 알고리즘

수식 표기나, 프로그래밍 언어, HTML 문서 등 다양한 분야에서 괄호로 구분문자를 사용한다. 이들은 주로 간단한 데이터나 문자열을 묶어 그룹으로 만들고 그룹으로 끝낸다. 예를 들어 다음과 같은 소스코드가 있을때, array_max.h int find_array_max(int score[], int n) { int i, tmp = score[0]; for (i = 1; i tmp){ tmp = score[i]; } } return tmp; } 해당 프로그램이 정상작동 하려면, 괄호들이 같은 유형들 끼리 쌍을 이루어야 한다. 해당 코드에서 괄호를 검사 시 다음과 같은 조건이 해당되어야 한다. 1. 왼쪽 괄호의 갯수와 오른쪽 괄호 갯수가 같아야 한다. 2. 같은 타입의 괄호에서 왼쪽 괄호가 오른쪽 괄호보다 ..

[python] docker stack + nginx를 이용한 grpc inference 서버 구축

docker swarm 네트워크를 사용하면 각각의 분산된 PC를 하나로 묶을 수 있고, docker swarm의 ingress 네트워크를 사용하여 클러스터를 구축 가능하고, 이를 사용하여 각각 분산된 PC에 docker시스템을 관리 할 수 있다. 특히 ingress네트워크 상에서 docker 시스템 간 로드밸런싱이 가능하여 여러대의 PC에 손쉽게 Inferecne Docker를 구축이 가능하다. 그런데 모든 상황에서 이 로드밸런싱 기능을 사용할 수 있는 건 아니였다. 프로젝트 진행 중, 기존 https 방식의 REST호출을 사용할 때는 분산 로드 밸런싱이 됬지만, GRPC 통신 방식을 사용하면, 로드 밸런싱 기능을 사용할 수 없었다. GRPC 통신을 통해서 로드밸런싱을 하려면 NGINX 프록시 서버로 사..

[Python] 배열의 길이를 2의 거듭제곱으로 만들기

https://school.programmers.co.kr/learn/courses/30/lessons/181857 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 정수 배열 arr이 매개변수로 주어집니다. arr의 길이가 2의 정수 거듭제곱이 되도록 arr 뒤에 정수 0을 추가하려고 합니다. arr에 최소한의 개수로 0을 추가한 배열을 return 하는 solution 함수를 작성해 주세요. def solution(arr): cnt = 0 while len(arr) != 2 ** cnt: if len(arr) == 2 ** cnt: break ..

[Python] 프로그래머스 부족한 금액 계산하기

https://school.programmers.co.kr/learn/courses/30/lessons/82612 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제풀이 def solution(price, money, count): rePrice = 0 total =0 for _ in range(count): rePrice += price total += rePrice if total < money: return 0 return total - money

[Python] 프로그래머스 과일 장수

https://school.programmers.co.kr/learn/courses/30/lessons/135808 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제풀이 def solution(k, m, score): answer = [] n = 0 cycle=len(score) // m # 사이클 수 idx = m ci = 1 # 순번 sort_score = sorted(score, reverse=True) while True: if cycle == 1: # 1번만 돌때는 바로 끝냄 price = calbox(k, m, sort_score, n) an..

[Python] 프로그래머스 중앙값 구하기

https://school.programmers.co.kr/learn/courses/30/lessons/120811 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제풀이 def solution(array): so_array = sorted(array) answer = round(len(array) // 2,0) return so_array[answer]

[Python] 프로그래머스 피자 나눠 먹기(2)

https://school.programmers.co.kr/learn/courses/30/lessons/120815 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제풀이 def solution(n): answer = 1 pizza = 6 while True: if pizza % n == 0: return answer else: pizza += 6 answer += 1