• 0) Python 은...
    • Life is too short, You need python.
    • 개발자스러운 문법 : ex) if 4 in [1,2,3,4]: print ("4가 있습니다")
    • Compiler Vs Interpreter
    • 구세대 OOP 랭귀지
      • 명사중심적 프로그래밍.
      • Object == 명사 , Method == 동사
      • 객체 정의해 두고, 해당 메쏘드를 개발하는 구조. (오류가있고, 모호할수있다)
    • 차세대 Functional Programing 랭귀지
      • 동사중심적 프로그래밍.
      • function == 변하지않는 정의역에 '값'을 받아서 -> 해당되는 치역에 '값'으로 처리.
      • functional == immutable한 input을 -> (Parrelal하게) -> immutable한 output으로 처리.
      • 동작(함수)를 정의해두고, IN&OUT을 개발하는 구조. 
      • 근대 왜? 함수형 프로그래밍이 떳냐!?!?
        • Transistor Vs Frequency
          • CPU 속도의 물리적 한계 봉착!!!
          • 무어의 법칙 : 트랜지스터 성능은 24개월마다 2배로 증가한다.
          • 즉, 이젠 CPU Core를 늘려~ 병렬처리를 잘해야 한다.
        • mutable VS immutable
          • Multi-Thread 병렬처리를 잘하기 위해선, Thread-safe한 보장 해야한다.
          • 하지만, 개발자가 직접 배타제어(Mutual Exclusion) 하는것은... 매우 고단해 왔다.
          • 즉! immutable 하게 데이터를 다루는 Functional Language가 등장.
        • input -> (function) -> output -> (function) -> output -> ...
          • 각각에 State는 immutable 하기 때문에, 각각에 처리는 Thread-safe 함.
          • 즉, 각각 독립적으로 병렬처리가 가능하여, Scalable이 아주 뛰어나게 됨.
    • ...
  • 1) 기본문법
    • 1-1) 자료형
      • 숫자 : Integer, Floating(4.24E10), 8-16진수(0o177, 0x8ff), 복소수(1+2j)
      • 문자 : print("I eat %d you eat %s" % (num, str)) , 다양한기능 a.upper(), a.count(‘?'), a.find(‘?'), a.split(':')
      • 리스트 : [1, 2, ['Like', ‘A'], ‘4’] , list[2:4] , a.append([5,6]) , a.sort() , a.reverse() , a.remove(3)
      • 튜플 : ('a', 'b', ('ab', 'cd')) , 리스트와 비슷함 , 값을 바꿀 수 없음.
      • 딕션어리 : {'name':[‘lee’,’이이’], ‘age':'14'}; , d.keys() , d.clear() , d.get(‘key') , ‘key’ in d
      • 집합 : set("Hello")=={'e', 'l', 'o', 'H'} , &교집합(intersection) , |합집합(union) , -차집합(difference)
    • 1-2) 함수
      • def 함수명(파라미터):
        • <수행할 문장1>
        • <수행할 문장2>
        • ...
      • def sum(nums, *args): // *을 통해 복수개 인풋
        • for i in args:
          • nums = nums + i
        • return sum, -1*sum // ‘튜플’(복수개) 아웃풋
    • "그럼, 파이썬은 call-by-value 일까? call-by-reference 일까?"
      • 결론부터 말하면, passed-by-assignment 이다. 즉, 어떤값을 전달하느냐? 따라 다름!
      • ...
    • 1-3) 클래스
      • class Member( ):
        • name = "My Name is"
        • def __init__(self, nick):
          • self.name += nick
        • def __del__ (self, nick): 
          • try: 
            • print("...")
          • except ConsoleError as e
            • prient(e)
            • raise TestError
      • // self (함수 첫번째 argument로 꼭 써야) 
      • // __init__ (인스턴스를 만들 때 실행, 생성자)
      • // __del__ (인스턴스를 종료 때 실행, 소멸자)
    • 1-4) 모듈
      • 함수, 변수, 클래스 모은 라이브러리 파일
      • import 모듈이름 (from mod1)
      • from 모듈이름 import 모듈함수 (from mod1 import sum, sub, … )
      • from __future__ import print_function
        • __future__ 파이썬 2와 3의 버전차이 문제방지 및 호환
        • print "hello", "world" # Python3 Error
        • print("hello", "world") # Print tuple on python2
        • print("hello", "world") # Works on both version
      • if __name__ == "__main__": 
        • // 메인
    • 1-5) 네임스페이스
      • __name__ :
        • 파이썬 인터프리터가 내부적 namespace 으로 사용되는 특별한 변수.
        • 'import 모듈' 하면, __name__ 는 해당 "모듈이름" 값을 namespace으로 할당.
        • 'python 모듈' 하면, __name__ 는 "__main__" 라는 namespace으로 할당.  
    • 1-6) 패키지
      • 파이썬은 Package = Dir + Module 구조로 만들어서, 모듈간 충돌도 방지하는 식.
      • 예)
        • Dir0
          • __init__.py 
          • SubDir1
            • __init__.py
            • module1.py
          • SubDir2
            • __init__.py
            • module2.py
      • import dir0.subdir1.module1, 이후 dir0.subdir1.module1.함수() 식으로 호출.
      • from dir0.subdir2 import module2 이후, module2.함수() 식으로 호축.
      • __init__.py 의미
        • : Python 3.3 이전에서는 해당 파일이 있어야~ 해당 디렉토리가 패키지의 일부임을 알려줌.
        • : 해당 디렉토리에서 공통적으로 사용할 코드가 있으면, 여기에 작성하면 됨.
      • __all__ : ...
    • 1-7) "with some() as thing" 구문
      • 객체 클래스 내부적으로, __enter__() 및 __exit__() 를 구현해두면...
      • 실제 'with 구문'이 실행될때~ context-manager 의해서 __enter__() 가 수행되고 -> as 으로 결과반환.
      • 해당 블록이 끝나게 되면~ 당연히 __exit__() 가 자동으로 호출된다! 
    • 1-8) 내장함수
      • abs(x); chr(i); isinstance(object, class); filter(func,list); list(s); map(func,s); lambda a,b : a+b; range([start,] stop [,step]); sorted(s); type(object); zip();
    • 1-9) 외장함수
      • sys, pickle(객체를 파일로 Save/Load), StringIO, OS, time, calendar, random, _thread, ... 
  • 2) 모듈 t!ps
    • requests
      • Response Object : https://www.w3schools.com/python/ref_requests_response.asp
      • https://requests.readthedocs.io/en/latest/user/quickstart
      • https://requests.readthedocs.io/en/latest/user/advanced
        • "Post Multipart/form-data" 검색
        • "Do not set the Content-type header yourself, leave that to generate"
        • 예)
          • files = {}
          • with open(file_path, 'rb') as f:
            • files['키'] = (os.path.basename(file_path), f.read(), 'application/octet-stream')
          • requests.post('http://...', files=files)
    • ...
  • 메모장
    • (1) 가상환경 
      • 파이선 2.x 혹은 3.x 등 다양한 라이브러리간의 충돌을 막기위해 독립적인 가상환경 필요.
      • "pip install virtualenv" 으로 관리툴 설치. (pip install pip --upgrade)
      • "virtualenv venv" 으로 독립적인 가상환경 생성.
      • (특정 버전의 파이선으로 생성법)
        • virtualenv --python=c:\Python25\python.exe venv2
        • virtualenv -p python3 venv3
      • 윈도우 활성 : "venv\Scripts\activate" 실행
      • 윈도우 비활성 : "venv\Scripts\deactivate" 실행
      • (리눅스 수동 활성/비활성 : source ~/venv/bin/activate 및 deactivate) (자동 활성은 vi .bashrc 작성)
      • "pip list" 를 통해서, 해당 가상환경의 라이브러리를 확인하면 됨.
    • (2) 라이브러리 다운로드
      • pip 인스톨 = "pip install pymysql" 하면, 해당 가상환경에 설치
      • pip 다운로드 = "pip download pymysql" 하면, wheel이 다운로드 됨.
      • pip 소스 다운로드 = "pip download pymysql --no-binary=:all:"하면, 압푹파일 다운됨!
      • (옛날에는 pip install pymysql --upgrade --download="./" --no-use-wheel 이런식으로 했었음...)
    • (3) Windows 개발환경에서 Pillow 설치 오류 해결
      • https://aprkal12-6.tistory.com/1
      • 뭔가... PyCharm 터미널에서 꼬인거 같다... 뭐지???
      • 결론 : easy_install -U pip
  • "python html to image" 삽질
    • imgkit :
      • 로컬에서 pip하고, 코딩돌리는데~ wkhtmltopdf가 설치 안되어 있다고 오류남.
      • 어차피 'AWS Lambda'에 wkhtmltopdf가 설치되어야 하니... 관련작업 리써치.
      • 일단, imgkit를 Layer으로 추가하고, 'AWS Lambda'에서 돌려봄. (당연 역시 wkhtmltopdf 오류)
      • wkhtmltopdf는... pip라이브라리가 아니라... 어떻게? Layer으로 추가 해야할지 난감.
        • https://tech.mybuilder.com/compiling-wkhtmltopdf-aws-lambda-with-bref-easier-than-you-think 등등의 식은... Windows 환경에서는 막힘.
        • wkhtmltopdf 바이너리를 'AWS Lambda' 코드업로드로 해서... 해보면, 권한이슈 나옴.
        • https://github.com/brandonlim-hs/wkhtmltopdf-aws-lambda-layer 식의로 ARN을 Layer에 추가가능!
      • 결과적으로 imgkit.from_url() , imgkit.from_file() , imgkit.from_string() 다했는데... CSS 렌더링 잘안됨... 18
      • (wkhtmltopdf 에서 'Windows 다운로드'도 제공되고, 압축풀면~ 바이너리도 있음! 실행해보면... 역시 CSS 이슈)
    • webkit2png : pip 해보고, git클론하여~ 셋업해봤는데... 바이너리 실행이 잘 안됨.
    • pyfpdf : pip하여 코드돌렸는데~ html 랜더링을 못하고 있음...
    • xhtml2pdf : pip하여 코드돌렸는데~ html 랜더링이 이상함...
    • htmlcsstoimage.com : 그냥 돈주고 API으로 처리 해야하나... ㅠㅠ

-끝-

'랭귀지&프레임웤' 카테고리의 다른 글

FastAPI  (0) 2022.06.15
"certificate verify failed: unable to get local issuer certificate"  (0) 2021.05.30
STS 개발  (0) 2019.11.06
Spring Cloud 란?  (0) 2019.11.06
Spring Batch 란?  (0) 2019.11.06

+ Recent posts