본문 바로가기

python

[파이썬] 파이썬의 타입 힌트 PEP 484에 대한 소개Python 3.5 버전에는 다음과 같은 형식으로 IDE와 코드 가독성에 도움을 줄 수 있도록 함수의 인자와 반환값에 대한 타입 힌트가 처음으로 도입 되었다.def greeting(name: str) -> str: return 'Hello ' + name그리고 후에 나온 3.6 버전에서는 인자와 반환값 만이 아니라 변수에도 타입 힌트 표기가 가능해졌다.def greeting(name: str) -> str: s: str = 'Hello ' + name return s타입 힌트의 의의와 목표타입 힌트 기능은 타입 표시에 관한 표준 구문을 제공하고, 더 쉬운 정적 분석과 리팩토링 및 타입 정보를 추론하는 것에 대한 도움을 주기 위해 만들어졌다.예를 들어 예상하지 못한 타입이 변수에 .. 더보기
[GraphQL] 3. GraphQL에서의 인증 // Authentication in GraphQL 1. GraphQL에서의 인증 방식GraphQL은 플랫폼 독립적이고 기존의 REST API와는 완전히 다르기 때문에 GraphQL에서의 인증은 큰 문제라고 생각할수도 있지만 인증은 그렇게 어렵지 않다. 기존의 JWT(Json Web Token)을 충분히 이용 가능하다JWT 토큰을 전달하는 위치가 헤더에서 쿼리나 뮤테이션의 인자로 바뀌었을 뿐이다. 우리가 GraphQL 서버를 만들떄 사용하는 Flask와 Graphene에서 인증을 처리하는 것도 기존 Flask에서 Flask-JWT-Extended나 Flask-JWT-Simple을 사용했던 것처럼 Flask-GraphQL-Auth를 사용하면 그저 쿼리 리솔버나 뮤테이션에 인증 데코레이터를 적용해 우리가 익숙하게 사용하던 JWT(Json Web Token)를.. 더보기
[GraphQL] 2. Graphene에 MongoDB(MongoEngine) 연동하기 // MongoDB and Graphene MongoEngine과 Graphene 우리가 만든 GraphQL 서버에 DB를 연결해 보자. 기본적으로 웹 서버는 클라이언트의 요청을 따라 DB를 조회하거나 삭제, 수정, 추가를 한다. 우리의 GraphQL 서버도 쿼리가 들어오면 쿼리에 맞추어 DB를 조회하고, 뮤테이션 요청이 들어오면 DB에 항목을 추가, 수정하거나 삭제한다.graphene에 쿼리 요청이 들어온다면 graphene은 그 요청을 받아서 resolver에서 요청된 조건대로 DB에 조회를 하고 그 결과물을 스키마에서 반횐하기로 정의된 필드에 바인딩해 클라이언트가 요청한 방식대로 전달한다.따라서 우리가 resolver를 작성하기 위해서는 MongoDB ORM인 Mongoengine의 도큐멘트를 GraphQL 필드에 바인딩하는 유틸리티 함수인.. 더보기
[GraphQL] 1. 파이썬과 플라스크로 기본적인 GraphQL 서버 만들어보기 // GraphQL with Flask(Python) GraphQL 시스템 알아보기 GraphQL 서버를 만들려면 GraphQL API를 구성하는 요소들에 대해 알아볼 필요가 있다. GraphQL API는 다음의 요소로 이루어진다. 스키마: DB 스키마가 테이블과 릴레이션을 정의하는 것처럼 GraphQL 스키마는 뮤테이션, 쿼리, 타입과 Enum 등 GraphQL 시스템을 정의한다. 쿼리: CRUD의 Read를 담당하는 부분이다 필드: 쿼리의 속성, DB의 테이블 역할을 수행하고 반환값을 결정한다. 뮤테이션: CRUD의 Create, Update, Delete를 담당한다 리솔버: 쿼리나 뮤테이션 요청이 들어올 때마다 요청에 맞게 리턴값을 만들어 내는 로직 부분이다. 즉, GraphQL 시스템은 스키마로 시스템의 구조를 정의하고, 리솔버에서 행동을 정의한다... 더보기
[GraphQL] 0. 왜 GraphQL을 쓸까? // Why GraphQL? 현재 수많은 웹 서비스와 API들은 REST API를 사용하여 클라이언트-서버 간 통신을 수행한다. 물론 REST API는 좋은 방식이지만 다음과 같은 문제점이 생긴다. 첫번째, 수많은 양의 엔드포인트들 두번째, 데이터가 원한것보다 너무 많음 세번째, 여러가지 데이터를 사용하기 위해 요청을 여러번 해서 데이터를 받아와야 함 (N+1 문제) 네번쨰, 응답 데이터의 구조를 API 도큐멘트 없이 알 수 없다. 그러나 ✨GraphQL✨이란게 있다! GraphQL을 간단히 설명해 보자면 클라이언트-서버 간 통신을 위해 기존 REST에서 사용하는 엔드포인트 방식 대신 DB에 날리는 SQL 쿼리처럼 API 서버를 대상으로 하는 쿼리 언어(Application Query Language)를 사용하는 방식이다. Grap.. 더보기
[Python] 파이썬로 ArXiv 크롤링하기 pyArXiv 0.0.3이후로는 이하 블로그 글과 구조가 많이 달라졌습니다...파이썬은 urllib, bs4.BeautifulSoup, requests같이 크롤링을 위한 라이브러리를 다수 제공한다. 오늘은 간단히 ArXiv 파서를 만들어 보면서 얻었던 크롤링 경험을 포스팅 해보자 한다. 문제의 시작은 ArXiv 논문 다운로드에서 출발했다. ArXiv는 논문 번호로 조회와 다운로드가 가능하다. 하지만 다운로드 할때 논문 이름 대신 논문 번호로 pdf이름이 받아진다. 결국 논문 정리할 때 일일이 열어보고 아 이거 아니네 하는일이 빈번해서 받을때 논문 이름으로 다운받게 해주는 파이썬 크롤링 패키지를 만들기로 했다.pyArXiv 패키지는 두개의 메소드를 가진다. 하나는 논문 번호로 논문 정보를 찾는 query .. 더보기
[Python] pypi에 패키지 업로드하기 1. PyPi란?파이썬 개발자라면 줄창 쳐대는 pip 뭐시기 하면 받아오는 패키지 저장소이다. node의 npm 역할이라고 보면 된다.2. 왜 올릴까항상 프로그래밍 하면서 쓸만한 유틸리티나 함수같은걸 자주 만드는데 이걸 올려서 나중에 쓰기 편하게 하고싶어서 올린다. pip로 인스톨해서 import 하면 진짜 간편하다. 그리고 솔직히 말해서 파이썬 패키지 관리자라는게 좀 간지가 나기 때문이기도 하다.3. 파이썬 패키지 구성하기적기 귀찮다...깃허브 레포지토리 던져줄 테니까 이거 보고 알아서 구성해 보세요대략 이정도로 구성됨/ - <패키지 이름 폴더> -> blah_blah.py - setup.py - __init__.py - LICENSE - ... - README4. 어떻게 올리지?각설하고 일단 프로젝트.. 더보기