공공 데이터 포털을 크롤링 하는 중 발생한 에러들을 정리해보려고 한다. 참고로 https://www.data.go.kr/tcs/dss/selectDataSetList.do?dType=FILE¤tPage=1&perPage=100 에서 currentPage만 변경해가며 모든 데이터를 긁어오고자 했다. dType은 FILE, API, STD 세 가지 종류이며 각각 작성일 기준 618 페이지, 109 페이지, 2페이지이다. 각 페이지는 perPage=100이므로 100개의 데이터가 있다. couldn't find lxml bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: lxml. Do you need ..
process VS thread multiprocessing과 multithreading의 차이는 process와 thread의 차이에서 기인한다. 먼저 process와 thread가 어떤 역할을 하는지부터 알아야한다. 위의 그림을 바탕으로 쉽고 빠르게 이해해보자. 먼저 CPU 하나에서 진행되는 작업을 process라고 하고, 하나의 process는 여러 개의 thread를 포함하고 있다. 이 때 하나의 process 내 thread 들은 메모리를 공유할 수 있다. 그리고 두 가지의 실행방법이 있는데, 첫 번째는 한 process 내의 여러 thread를 실행하는 것으로, concurrent execution이라고 한다. 이는 곧 multithreading이다. 두 번째는 여러 process를 동시에 실..
nohup nohup이란 no hang up의 약자로, 뜻 그대로 끊지 말라는 명령어라고 생각하면 된다. nohup은 프로세스를 실행한 터미널의 세션 연결이 끊기더라도 지금 실행시킨 프로그램을 종료시키지 않도록 하는 명령어이다. 즉, 프로그램을 데몬의 형태로 실행시키는 것으로 로그아웃으로 세션이 종료되더라도 프로그램이 종료되지 않는다. 이전에 Daemon에 대해 포스팅한 적이 있는데, 그렇다면 nohup은 백그라운드(&) 실행과 어떤 점이 다를까? Daemon 포스팅 https://im-so-so.tistory.com/95 nohup 명령은 프로그램을 데몬의 형태로 실행시키는 것이라 로그아웃 등과 같이 세션 연결이 끊기더라도 프로세스가 계속 동작된다. 하지만 실행시키면 대기 상태가 발생하고 Ctrl+C를..
비동기 프로그래밍 비동기 프로그래밍은 DB나 API와 연동 과정에서 발생하는 대기 시간을 낭비하지 않고 그 시간에 CPU가 다른 처리를 할 수 있도록 하는데, 이를 non-blocking하다고 한다. 반대로 동기 프로그래밍의 결과가 나올 때 까지 코드 실행이 중단되는 형태를 blocking이라고 한다. 동기와 비동기의 차이는 간단하게 다음과 같다. 동기(synchronous) 처리 : 특정 작업이 끝나면 다음 작업을 처리하는 순차처리 방식 비동기(asynchronous) 처리 : 여러 작업을 처리하도록 예약한 뒤 작업이 끝나면 결과를 받는 방식 대규모 애플리케이션에서 병렬 처리, 네트워크 통신, DB 연동 등을 효율적으로 수행하기 위해서는 비동기 프로그래밍이 필수적이기 때문에, 핵심적인 async awa..
FastAPI vs Flask 파이썬에서 웹 개발을 위해 사용하는 두 가지 프레임워크 FastAPI와 Flask를 간단하게 소개했었다. 얼핏 보기엔 비슷한 기능을 가지고 있지만 사용하는 상황이 다른 것 같아 보였다. 그렇다면 두 프레임워크는 어떤 점에서 차이가 있는지 비교해보고, 어떤 경우 사용하면 좋을지 알아보도록 하자. FastAPI 포스팅 https://im-so-so.tistory.com/117 Flask 포스팅 https://im-so-so.tistory.com/119 비교하기 FastAPI는 풀스택 프레임워크, Flask는 마이크로 프레임워크 풀스택 프레임워크 : 다양한 편리한 기능을 제공(데이터 유효성 자동 검사, 문서화 및 보안, JSON 및 폼 데이터 파싱, API 요청 처리, 웹 소켓 ..
Flask Flask는 Micro Web Framework, 즉 간단한 웹사이트 혹은 간단한 API 서버를 만들 때 사용하는 파이썬 웹 프레임워크이다. Micro Web Framework라는 소개에 걸맞게 가벼운 기능으로, 가볍게 배우고, 가볍게 사용하고, 가볍게 배포할 수 있다는 장점이 있다. Django에 비해서는 기능이 적기 때문에 복잡한 개발에는 적절하지 않을 수 있다. 하지만 본인이 원하는 개발 환경, 어플리케이션에 따라 선택하는 것이 좋아보인다. 공식 문서 https://flask-docs-kr.readthedocs.io/ko/latest/index.html 시작 from flask import Flask app = Flask(__name__) @app.route('/') def hello_w..
pydantic pydantic은 파이썬에서 가장 많이 사용하는 데이터 유효성 검사 및 설정 관리 라이브러리이다. Python Type Annotation을 사용한 유효성 검사는 제공된 유형 및 제약 조건을 준수하는 모델을 구축하는 목적을 가지고 있다. 즉, pydantic은 입력 데이터가 아닌 출력 모델의 유형과 제약 조건을 보장한다. 공식 문서 https://docs.pydantic.dev/latest/ 유효성 검증 User의 name은 문자열, age는 정수로 지정한다. from pydantic import BaseModel class User(BaseModel): name: str age: int user1 = User(name='john', age=15) print(user1) user2 = U..
FastAPI FastAPI는 현대적이고, 빠르며(고성능), 파이썬 표준 타입 힌트에 기초한 Python3.6+의 API를 빌드하기 위한 웹 프레임워크라고 공식 문서에서 설명하고 있다. 웹 개발, API 개발을 해당 프레임워크를 통해 python으로 간단하게 구축 가능하다. 공식 문서 https://fastapi.tiangolo.com/ 특징 고성능: Starlette, Pydantic의 도움을 받아 NodeJS 및 Go와 대등할 정도로 매우 높은 성능을 가진다. 가장 빠른 파이썬 프레임워크 중 하나 빠른 코드 작성: 약 200%에서 300%까지 기능 개발 속도 증가 적은 버그: 사람(개발자)에 의한 에러 약 40% 감소 직관적: 훌륭한 편집기 지원. 모든 곳에서 자동완성 지원. 적은 디버깅 시간 쉬움:..
datetime hour 추출 후 zfill datetime column에서 시간만 추출하고자 한다. 이 때 1시를 '1'이 아닌 '01'로 기록하고자 한다. 즉, 남은 자리를 0으로 채워 길이 2의 문자열로 변경하는 zfill을 사용한다. python 내장 함수로 str.zfill이 있는데, 이를 pandas series에서도 사용할 수 있는 pandas.Series.str.zfill 함수가 있다. 공식 문서 https://pandas.pydata.org/docs/reference/api/pandas.Series.str.zfill.html https://docs.python.org/3/library/stdtypes.html#str.zfill 1. datetime hour 추출 df라는 pandas.Da..
anaconda 파이썬으로 개발을 하다 보면 가상환경을 만들어 그 위에서 작업해야 하는 경우를 필연적으로 만난다. 그 이유는 프로젝트마다 사용하는 환경의 패키지가 다르고, 버전이 다르기 때문일 것이다. 따라서 독립적인 작업환경에서 패키지 및 버전 관리를 위한 가상의 환경을 구축할 필요성을 느낀다. 이를 도와주는 프레임워크인 anaconda를 사용해 보자. 설치 https://www.anaconda.com/download 가상환경 관리 Anaconda Prompt를 실행하여 진행한다. (Bash도 가능) 생성 conda create -n 가상환경이름 python 특정 버전을 적용하고 싶다면, 다음과 같이 생성한다. conda create -n 가상환경이름 python=3.9 나의 경우 python=3.9 ..