본문 바로가기

app/python

(51)
왜 python의 http 헤더 파서는 email 클래스에 있는가??!! 클래스들은 나름의 이유로 클래스끼리의 묶임이나 폴더(패키지)에 상주합니다. 파이썬 코어 소스를 보면서 그중에서 가장 이해가 되지 않는 것은 http 헤더 파서를 email.parser를 통해 동작한다는 것입니다. (이외에도 http 파서를 하기 위해 email.message, email.feedparser, email.utils 등을 사용합니다.) 왜 http.header, http 등의 독립적인 클래스가 아닌 email 클래스에 있는 것일까요?? (parser는 클래스는 regex(정규표현식)를 위해 클래스가 존재합니다. 또한 이 글에서는 헤더에 관한 파서만을 생각했습니다. ) python email클래스는 무슨 일을 하는가? Python Email 패키지는 MIME 및 기타를 포함하는 이메일 메시지를..
[python] 서버를 만들어보자(1) echo-server 소켓 프로그램이 네트워크에서 데이터를 송수신할 수 있도록, “네트워크 환경에 연결할 수 있게 만들어진 연결부”가 소켓이며, 소켓은 일반적으로 클라이언트 및 서버 상호작용에 사용됩니다. 보통 OSI 7 Layer(Open System Interconnection 7 Layer)의 네 번째 계층인 TCP(Transport Control Protocol) 상에서 동작하는 소켓을 주로 사용하는데, 이를 "TCP 소켓" 또는 "TCP/IP 소켓"이라고 부릅니다. (UDP에서 동작하는 소켓은 "UDP 소켓"이라고 합니다.) - 해당 포스트에서는 TCP 소켓을 다룹니다. 소켓의 실행 흐름 서버 1. socket() API가 통신을 위한 종료점을 작성하고 소켓 객체를 리턴한다. 2. Bind() 네트워크 엑세스를 위해..
[python] 서버의 기본 동작 방식 2 - 내용이 길어서 두개로 나눴습니다. 전편을 읽고 오는게 도움이 됩니다. - 해당 글은 python 3.6을 기준으로 작성하였습니다. 앞써 서버의 시작과 유저의 요청을 받기 위해 어떠한 동작들이 일어나는지 살펴 보았습니다. 그러면 유저가 요청을 보냈을 때 서버에서는 어떠한 동작들이 일어나는걸까요? 4. 포트에서 request까지 다시 공식 문서를 보시면 https://docs.python.org/3.6/library/http.server.html """ class http.server.BaseHTTPRequestHandler(request, client_address, server) This class is used to handle the HTTP requests that arrive at the se..
[python] 서버의 기본 동작 방식 - 해당 글은 python 3.6을 기준으로 작성하였습니다. - mac 환경에서 작성하였으며, 다른 운영체제에서는 다르게 동작할 수 있습니다. 1. 유저 요청에서 서버까지 브라우저를 통해 사이트를 접속하면 위의 그림과 같이 (1) 유저는 서버에 요청을 보내고 (2) 서버에선 요청을 받아 처리한 후 (3) 응답 메시지를 유저에게 전달하고 (4) 브라우저는 우리에게 화면을 보여준다 유저들의 간단한 url 입력만으로 위의 동작이 발생하며, 세부적으론 http의 통신 규약 , DNS탐색, 라우터 통신, 응답받은 데이터를 통한 브라우저의 디스패치, 랜더링의 많은 일들이 일어나게 됩니다. 이러한 많은 일들을 뒤로하고 우리의 백엔드 개발자들은 다양한 프레임워크를 통해 서버를 쉽게 구동하고, 웹서버를 실행하여 유저에게..
python heap 구현 소스 # -*- coding: utf-8 -*- class Heap: def __init__(self): self.arr = [] def reheap_down(self, idx): if (idx*2) + 1 right: large = idx * 2 + 1 else: large = idx * 2 + 2 if self.arr[idx] < self.arr[large]: self.arr[idx], self.arr[large] = self.arr[large], self.arr[idx] self..
python zen (계속 갱신중) 1. get list element in a list of tuples a = [(1, u'abc'), (2, u'def')] # 기존 방법 def _seperate(l_wstnid_and_weight): l_wstnid, l_weight = [], [] for k, w in l_wstnid_and_weight: l_wstnid.append(k) l_weight.append(w) return l_wstnid, l_weight print(_seperate(a)) # 간략하고 쉽게 unzip = list(zip(*a)) print((unzip[0], unzip[1])) 2. zip a = dict(one=1, two=2, three=3) b = {'one': 1, 'two': 2, 'three': 3} c ..
python datetime / date from datetime import datetime, timedelta import pytz # 현재 시간 now = datetime.now() print(now) # 시간 지정 생성 set_datetime = datetime.strptime('2019-12-31 00:00:00', '%Y-%m-%d %H:%M:%S') print(set_datetime) # datetime to date set_date = datetime.strptime('2019-12-31 00:00:00', '%Y-%m-%d %H:%M:%S').date() print(set_date) # 정각으로 설정하기 datetime.combine(now, datetime.min.time()) # 시간 더하기 뺴기 before = now - ..
pycharm 프로젝트 시작시 venv 셋팅 python 프로젝트를 할때마다 환경 설정이 다르기 때문에 (python 버전이나 설치 패키지들.) virtualenv 모듈을 통해 가상환경을 만들어 줘야 합니다. 해당 포스팅은 pycharm에서의 virtualenv 셋팅에 대한 글입니다. (mac 환경에서 진행하였으며, python3.7 / pip3 를 기본으로 하였습니다.) 0. pycharm에서 가상환경 생성하기(생성 및 적용까지 빠르게 하기) pycharm-> preferences -> project -> python interpreter -> 인터프린터 선택에서 show all 클릭!! add (+) 버튼 클릭 new environment 에서 원하는 경로로 설정하고 OK! 끝! 0. pip 패스 설정 (pip가 동작 안할때) 더보기 먼저 하단..