PEP8을 한국어로 번역한 문서사이트 | pep8-in-korean
Insertion sort
(삽입 정렬)와 Merge sort
(병합 정렬)를 결합하여 만든 하이브리드 정렬.Tim sort
는 안정적인 두 정렬 방법을 결합했기에 안정적sort()
, sorted()
에 사용된 알고리즘O(nlogn)
정렬 알고리즘의 단점을 최대한 극복함읽어 보기 : https://questionet.tistory.com/61
정렬 알고리즘을 비교한 표
읽어 보기 : d2.naver/helloworld - Tim sort에 대해 알아보자
온라인 프라이버시와 익명성을 지키기 위한 도구
Proxy(프록시 서버)
proxy | HTTP 프록시 서버 | SOCKET 프록시 서버 |
---|---|---|
사용 목적 | 가장 간단하면서 기본적인 프록시 서버 유형, 웹 트래픽 (HTTP와 HTTPS) 리다이렉트하는 작업을 함 | 이 서버는 서비스 역량을 웹 검색에 한하지 않음 |
장점 | 오직 HTTP 요청만 처리할 수 있어 속도가 빠름, 간편한 익명 웹 검색 목적에 비용 효과적(무료 웹 프록시 서비스) | SMTP, FTP, 토렌트 같은 HTTP가 아닌 트래픽을 지원 |
단점 | 트래픽 암호화x | 웹 프록시 서버와 같은 보안 문제 발생 가능 |
웹 트래픽 제한 | 웹 프록시 서버보다 느리다 | |
무료 웹 프록시는 보안성이 떨어짐 |
VPN(Virtual Private Network)
비교 | Proxy | VPN |
---|---|---|
보안성 | 취약함 | 강함 |
익명성 | 보장되지 않음 | 보장됨 |
비용 | 대부분 무료 | 유료 서비스가 더 높은 품질 |
동작 위치 | 브라우저 | 방화벽 |
프로토콜 | HTTP, TELNET, SMTP, FTP | PTTP, L2TP, IPsec |
추천되는 작업 | 간단한 웹 작업 | 복잡한 작업 |
읽어 보기 : 파이썬과 동시성 (멀티스레드, 멀티프로세스, 비동기)
async/await
구문을 사용 하여 동시성 코드를 작성하는 라이브러리를 사용coroutine
은 single thread에서 대기시간을 줄여 CPU의 활용을 극대화 시킴비동기 함수를 사용하면 CPU의 유휴 시간을 줄여 전체 프로그램 효율을 향상 시킬 수 있다.
Thread 를 사용한 동시성과의 비교
보통 동시에 여러가지 작업을 처리하게 하려면 별도의 쓰레드를 생성해서 작업을 할당하는데, 파이썬에서는 GIL(Global Interpreter Lock)으로 인해
한 번에 한 쓰레드만 파이썬 코드를 실행할 수 있기 때문에 여러 쓰레드를 쓰는 것이 오히려 비효율적이다.
단, 위 내용은 CPU bound 작업을 할 때에만 해당하는데, 파이썬은 I/O bound 작업들을 할 때에는 GIL 을 해제하여 다른 쓰레드가 이어서 작업을 진행할 수 있도록 되어있어
I/O bound 작업들에 대해서는 여러 개의 쓰레드를 사용해서 효율적인 동시 처리가 가능하기 때문이다.
파이썬에서는 threading 라이브러리나 concurrent 라이브러리를 이용한 멀티쓰레딩이 가능하고, 3.4 부터는 generator 에서 부터
진화해 오던 코루틴을 이용한 비동기 라이브러리인 asyncio 가 추가되어서 좀 더 쉬운 동시적인 처리를 지원하게 되었다.
asyncio 는 threading 과는 달리 하나의 쓰레드를 사용하여 작업들을 동시적으로 처리한다.
출처 : https://nachwon.github.io/asyncio-and-threading/
가벼움과 높은 성능을 목표로 한 웹 서버 소프트웨어 (=경량 웹 서버)
Apache 서버와의 차이
Event-Driven
구조로 동작하기 때문에 한 개 또는 고정된 프로세스만 생성하여 사용Apache | Nginx | |
---|---|---|
동작 방식 | 멀티 스레드 | 단일 스레드 |
장점 | 웹서버 자체 내에서 동적 컨텐츠 처리 | 제한된 리소스로 여러 요청을 효율적으로 처리 |
단점 | 트래픽 부하 시 여러 요청을 동시에 처리 불가 | 동적 컨텐츠 처리불가->외부 프로세스로 전달,렌더링 후 다시 전송 (프로세스 속도 저하) |
사용 목적 | 다양한 동적 모듈이 사용되는 웹 사이트 | 트래픽이 많은 정적 컨텐츠 웹 사이트 |
OAuth2(Open Authorization, Open Authentication 2) : 인증을 위한 표준 프로토콜.
구글, 페이스북, 카카오 등에서 제공하는 Authorization Server를 통해 회원 정보를 인증하고 Access Token을 발급받고 그것을 이용해 타사의 API 서비스를 이용할 수 있다.
도메인 네임 시스템(Domain Name System, DNS)
호스트의 도메인 이름을 호스트의 네트워크 주소로 바꾸기 위해 개발됨(반대의 변환도 가능)
www.example.com
과 같은 주 컴퓨터의 도메인 이름을 192.168.1.0
과 같은 IP 주소로 변환하고 라우팅 정보를 제공하는 분산형 데이터베이스 시스템CI (지속적 통합 : Continuous Integration)
개발을 하면서 ‘코드에대한 통합’을 ‘지속적’으로 진행함으로써 품질을 유지하는 것 (=빌드 및 테스트 자동화)
CD (지속적 배포Continuous Deploy 또는 Delivery)
CI 프로세스를 통해 개발중에 지속적으로 빌드와 테스트를 진행하고,
이를 통과한 코드에 대하여 테스트서버와 운영서버에 곧바로 그 내용을 배포해 반영하는 것 (=배포 자동화)
CircleCI
, Travis
, Jenkins
같은 툴을 이용하면 CI/CD 자동화 솔루션을 편하게 구현하도록 도와줌
UDP (User Datagram Protoco : 사용자 데이터그램 프로토콜)
데이터를 데이터그램 단위로 처리하는 프로토콜
HTTP 1.1의 문제점
HTTP 1.1은 기본적으로 Connection당 하나의 요청을 처리하도록 설계되어 있음. -> 동시 전송 문제와 다수의 리소스를 처리하기에 속도와 성능 이슈를 가짐
HTTP 2.0의 등장 : 속도와 성능 향상
도메인 : 사용자가 검색하는(=기억하기 쉬운) 주소 (건물명 ex.위워크)
호스팅 : 웹사이트를 작동 시키는 컴퓨터 (건물)
IP주소 : 실제 주소 숫자로 이루어진 (건물의 등기부등본상 주소지)