서버 프로그래밍(281)
-
MongoDB Aggregate 사용시 동적 연산 및 페이징 처리
정렬 기준이 되는 값을 복잡한 조건에 의해 동적으로 생성해서 정렬하고자 할 경우에는 $let, $cond, $eq 등의 명령을 이용하여 연산을 하고, 연산된 값을 기준으로 정렬을 시킬 수 있다. db.sales.aggregate( [ { $project: { finalTotal: { $let: { vars: { total: { $add: [ '$price', '$tax' ] }, discounted: { $cond: { if: '$applyDiscount', then: 0.9, else: 1 } } }, in: { $multiply: [ "$$total", "$$discounted" ] } } } } } ] ) https://docs.mongodb.com/manual/reference/operator/a..
2020.04.21 -
MongoDB Collection별 검색 결과 합치기
두개의 컬랙션을 Join하는 것이 아니라, 각각 컬랙션별로 검색한 결과를 최종적으로 합치는 방법은 다음과 같다. // Create employees data for testing the union. db.getCollection('employees').insert({ name: "John", type: "employee", department: "sales" }); db.getCollection('employees').insert({ name: "Martha", type: "employee", department: "accounting" }); db.getCollection('employees').insert({ name: "Amy", type: "employee", department: "warehou..
2020.04.20 -
Python Flask 프로젝트를 uWSGI와 nginx로 프로덕션 배포하기
Python Flask Web Server (HTTP) -> uWSGI -> nginx (HTTPS) 으로 배포하여 실제 서비스를 원활하게 할 수 있도록 처리한다. Python의 웹서버를 HTTPS로 구동하기 위해서 이전에 certbot으로 인증 받은 HTTPS 인증서 (pem 파일)을 nginx에서 그대로 사용할 수 있는 점이 편하다. https://blog.rhostem.com/posts/2018-11-20-deploy-flask-with-uwsgi 구글 애널리틱스 API를 사용한 Flask 앱을 uWSGI와 nginx로 배포한 과정 이미지 출처: Link 포스트 통계 기능을 위해 사용한 Google Analytics 서비스 API 이 블로그는 CMS 서비스나 별도의 백엔드 서비스가 연결되어 있지 않..
2020.04.14 -
Python flask_restplus의 Swagger와 Static 폴더 설정 충돌 문제
기존에 Flask로 만들어진 백엔드에 Swagger UI를 적용하려 했더니, static 폴더 설정을 위해 Blueprint 사용하던 것과 뭔가 충돌이 있는 것으로 보였다. 한참을 삽질 끝에 static 폴더용 Blueprint와 REST api용 Blueprint를 각각 만들고 app에 등록하면 된다는 것을 알게 되었다. from flask import Blueprint, render_template from flask_restplus import Api, Resource, apidoc app_blueprint = Blueprint( 'app', __name__, url_prefix='', static_url_path='', static_folder='static', template_folder='st..
2020.03.13 -
Python Flask를 이용한 REST API 서버를 HTTPS로 구동
1. Flask REST API 구현 (80 포트 사용) 2. 도메인 연결 3. certbot을 이용한 사이트 검증 및 인증서 다운로드 4. 다운받은 인증서 파일 (pem 파일)을 이용하여 HTTPS로 웹 서버 실행 - 끝 - 인증서 파일을 이용하여 HTTPS 서버 실행하는 예제 from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!" if __name__ == "__main__": app.run(ssl_context=('cert.pem', 'key.pem')) certbot 설치 및 실행 $ sudo apt-get install software-properties-common $ sudo..
2020.03.11 -
MongoDB Aggregate with Pymongo 관련
전체 기사에서 24시간 이내에 생성된 기사들에 대해서 카테고리별 개수를 구해서 출력하는 쿼리문 db.articles.aggregate( { $project:{ date:{ $dateFromString:{ dateString:'$created_at', format:'%Y-%m-%d %H:%M:%S' } }, category:1 } }, { $match:{ date:{ $gte:new Date(new Date().getTime()-(1000*60*60*24)) } } }, { $group:{ _id:{ category: '$category' }, total:{ $sum:1 } } }, { $sort:{ total:-1 } } ) 문자열로 저장되어 있는 날짜를 날짜 타입으로 바꾸는 방법 { $dateFromS..
2020.02.28