본문 바로가기

개발/파이썬

[TIL] 파이썬 typing 모듈을 사용할 때 Import Error가 나는 경우 파이썬에서 typing 모듈을 사용할 때, circular import 이슈가 발생할 때가 있다. 예를 들어서 # core/alphabets.py from .character import Character class Alphabets(): def __init__(self): self.alphabet_list = [] def add_alphabet(self, character: Character): self.alphabet_list.append(character) def remove_character(self, char: str): for i in range(len(self.alphabet_list)): if self.alphabet_list[i].char == char: del self.alphabet_..
[TIL] JWT 토큰 쿠키에 저장하기 (Flask) JWT 토큰은 JS에서 접근할 수 있는 Localstorage보다 JS에서 접근할 수 없는 httponly cookie에 저장하는 것이 XSS 공격에 안전하다. ( JS를 페이지에서 쓸 수 없게 escaping을 잘 해두면 LocalStorage에 저장하더라도 XSS 공격을 막을 수 있다. ) 단, CSRF 공격에 취약하기 때문에, CSRF 토큰을 만들어서 double checking을 통해 보안에 신경 쓸 필요가 있다. httponly cookie는 프론트가 아닌 서버에서 Response해줄 때 붙여준다. Flask 앱에 아래와 같은 옵션을 지정해주면 flask-jwt-extended라이브러리를 통해 cookie에 jwt를 지정할 수 있다. JWT_COOKIE_SECURE = False # https를..
파이썬 크롤링 공부, 도움받은 자료 모음 크롤링 공부하면서 도움받은 자료들을 공유합니다. BeautifulSoup 기초 HTML 기초 -> 웹 페이지 크롤링 실습하면소 공부하기 좋은 것들 공시크롤링 시리즈 (이 사람 블로그는 공시크롤링 외에도 크롤링 따라하면서 배울 수 있는게 많음) 공시크롤링#1 기업공시시스템 open api 사용하기 공시크롤링#2 기업공시시스템 open api로 매출총이익률 계산하기 공시크롤링#3 기업공시시스템 open api로 다수 기업의 매출총이익률 구하기 WOOSA 블로그 금감원 전자공시(DART) 크롤링: 위랑 같은 사이트를 크롤링하나 다른 것들을 배울 수 있다. 거래소 상장법인목록 크롤링 거래소 일자별 시세 크롤링 셀레니움 (현재 실력으로 긁기 어려운 사이트에 활용) 나만의 웹 크롤러 만들기: Login with S..
파이썬으로 만드는 나만의 커맨드라인 프로그램 #2 - click 지난 시간에는 argparse모듈을 활용해 커맨드 라인 프로그램을 만드는 법에 대해 알아봤습니다. 이번에는 click모듈을 사용하여 커맨드 라인 프로그램을 만드는 법에 대해 소개하겠습니다. click 모듈 argparse뿐만이 아니라 click모듈도 많이 사용됩니다. click모듈은 argparse에서 제공하는 기능을 보다 쉽고, decorator를 사용해 보다 깔끔하게 사용할 수 있게 해줍니다. Flask에서 CLI(Command Line Interface)를 구현하기 위해 사용한 모듈이기도 합니다. click을 사용하여 argparse와 똑같은 코드를 작성해보겠습니다. 이번엔 프로젝트명을 hello 대신 cello를 사용하겠습니다. # cello/main.py import click import sy..
파이썬으로 만드는 나만의 커맨드라인 프로그램 #1 - argparse 데이터 분석을 하시는 분들은 jupyter notebook이라는 키워드가 익숙하실 겁니다. Django 또는 Flask로 웹 개발을 하시는 분들은 django-admin startproject, flask run과 같은 명령어를 많이 쳐보셨을 겁니다. 파이썬으로 이런 명령어 프로그램은 어떻게 만드는 걸까요? 오늘은 파이썬으로 커맨드 라인 프로그램을 만드는 법을 알아보겠습니다. argparse 모듈 먼저 파이썬 표준 라이브러리에서 제공하는 모듈인 argparse에 대해 알아보겠습니다. 우선 다음과 같이 hello 폴더에 똑같은 hello 폴더를 만들고 안에 __init__.py파일과 main.py파일을 만들어줍니다. main.py에는 다음과 같이 입력합니다. # hello/main.py # argparse..
파이썬과 비동기 프로그래밍 #3, 파이썬에서 비동기 프로그래밍 활용하기 지난글에 이은 세번째 글입니다. 지난 글에서 파이썬에서 비동기를 구현하는 법에 대해 알아봤습니다. 이번 글에서는 어떻게 비동기를 활용할 수 있을지에 대해 알아봅시다. 비동기를 사용하면 네트워크 IO의 지연 때문에 낭비되는 시간을 줄일 수 있습니다. 온라인 사전사이트에서 단어들의 의미를 크롤링하는 코드를 작성한다고 가정해봅시다. 동기적인 방식을 사용한다면 아래와 같이 코드를 작성할 수 있습니다. 동기적 방식 # requests와 bs4 설치 필요 import requests import time from bs4 import BeautifulSoup def get_text_from_url(url): print(f'Send request to ... {url}') res = requests.ge..
파이썬과 비동기 프로그래밍 #2, 파이썬에서 비동기 프로그래밍 시작하기 지난글에 이은 두번째 글입니다. 지난 글에서는 비동기 프로그래밍이 의미하는 바와 쓰레딩과 비동기의 차이점에 대해 알아봤습니다. 이번 글에서는 파이썬에서 어떻게 비동기를 구현할 수 있는지에 대해 알아보겠습니다. 용어정리 우선 용어부터 최대한 쉽게 설명해보겠습니다. 파이썬에서 비동기 프로그래밍을 하기 위해서는 이벤트 루프와 코루틴을 이해해야 합니다. 1. 이벤트 루프(Event Loop) 이벤트 루프는 작업들을 루프(반복문)를 돌면서 하나씩 실행시키는 역할을 합니다. 이때, 만약 실행된 작업이 특정한 데이터를 요청하고 응답을 기다려야 한다면, 이 작업은 다시 이벤트 루프에 통제권을 넘겨줍니다. 통제권을 받은 이벤트 루프는 다음 작업을 실행하게 됩니다. 그리고 응답을 받은 순서대로 멈췄던 부분부터 다시 통제권..
파이썬과 비동기 프로그래밍 #1, 비동기 프로그래밍이란 비동기(Asynchronous)란? 이해를 돕기 위해 약간은 비현실적인 예를 들어보겠습니다. 여러분들은 10대의 세탁기를 돌리고, 10대의 커피포트에 물을 끓여야 합니다. 이 일을 하기 위한 방법은 아래와 같이 두 가지 방법이 있습니다. 첫번째 방법 1번 세탁기를 돌린다. 1번 세탁기가 완료될 때까지 기다린다. 1번 세탁기에서 빨래를 수거한다. 2번 세탁기를 돌린다. 2번 세탁기가 완료될 때까지 기다린다. 2번 세탁기에서 빨래를 수거한다. ... (위의 과정 반복) 10번 세탁기를 돌린다. 10번 세탁기가 완료될 때까지 기다린다. 10번 세탁기에서 빨래를 수거한다. 1번 커피포트에 물을 끓인다. 1번 커피포트의 물이 끓기를 기다린다. 1번 커피포트의 물로 녹차를 탄다. 2번 커피포트의 물을 끓인다. 2번..