본문 바로가기

app

(155)
왜 python의 http 헤더 파서는 email 클래스에 있는가??!! 클래스들은 나름의 이유로 클래스끼리의 묶임이나 폴더(패키지)에 상주합니다. 파이썬 코어 소스를 보면서 그중에서 가장 이해가 되지 않는 것은 http 헤더 파서를 email.parser를 통해 동작한다는 것입니다. (이외에도 http 파서를 하기 위해 email.message, email.feedparser, email.utils 등을 사용합니다.) 왜 http.header, http 등의 독립적인 클래스가 아닌 email 클래스에 있는 것일까요?? (parser는 클래스는 regex(정규표현식)를 위해 클래스가 존재합니다. 또한 이 글에서는 헤더에 관한 파서만을 생각했습니다. ) python email클래스는 무슨 일을 하는가? Python Email 패키지는 MIME 및 기타를 포함하는 이메일 메시지를..
Git Push ERROR: Repository not found - mac을 기준으로 작성하였습니다. * 정답이 아닐 수 있습니다. 저의 해결 방안을 적었습니다. github에서 오랫동안 비밀번호를 사용했으니 보안을 위해 바꿔달라는 메일에 선뜻 비밀번호를 바꾸면서 시작되었습니다. 당연히 연동되어 있던 sourcetree, 터미널의 git계정은 당연히 연동이 안되지요. sourcetree의 계정 정보도 삭제 후 다시 등록하고, git의 'git config --global' 명령어를 통해 ".gitconfig"의 내용을 모두 바꿨음에도 레포지토리의 모든 권한이 막혔었습니다. 저의 경우 키체인 삭제를 통해 기존의 내용을 삭제함으로써 해결되었습니다. (키체인 삭제 전에 위의 git config를 다시 설정해 보세요.) 1. 키체인 접근을 선택합니다. 2. 검색에 git을 ..
[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 - ..