파이콘 2022에서 들은 내용과 후기입니다.

logo


1. Keynote: 고등학교에서 파이써니스타로 살아간다는 것

  • 마크다운 헬퍼: ctrl + shift + m
  • 파이썬 개발 예시들 소개

교통법규 위반 AI 신고 챗봇

  • 카카오톡 챗봇으로 신고를 쉽게 하도록 함
  • 카톡을 통해 이미지 선택하고 전송, 신고 접수
  • 이미지 전송 -> AI가 이미지 인식, 자동으로 신청서 양식 작성
  • 카카오톡 서버와 통신할 서버를 Flask로 개발
  • python 카카오톡 챗봇: 유튜브 채널에 가이드 영상 있음

교내 빠른 길찾기

  • 학교 도면 + 길찾기 구현 필요
  • ex) 4층 교실에서 1층 급식실로 가는 가장 빠른 길

급식 신청자 확인 프로그램

  • 학생 정보는 개인정보. 테스트 데이터를 만들어 개발하고 프로그램을 선생님께 전달
  • 아두이노로 LCD 패널 연결하여 구현
  • 학생이 학번 입력하면 신청여부, 당일 배식여부 확인
  • 아두이노와 serial 통신 -> pyserial 라이브러리

도서관 무인 대출 반납기

  • 학교 시스템과 연동 필요
  • 웹 화면 구현, 사진 이미지 인식
  • DLS(독서교육 종합 시스템) 사용해야 함 -> 웹 시스템. selenium으로 브라우저 제어. DLS와 상호작용
  • 클라이언트 다른 요청이나 세션 만료되는 문제 -> Redis 사용하여 들어오는 요청 우선 접수, 나중에 처리하는 방식으로 구현 (대기열 제작)
  • 프론트: vue.js, 백엔드: docker-compose
  • Flask에서 요청 접수, Redis 서버에서 작업 대기열 처리, selenium으로 작업



2. Keynote: Do clinical psychology With Python 해 보았다

  • 임상심리사
  • 심리평가, 심리상담 등 실시하는 직업
  • 심리평가 작성하는 시간이 김, 검사해야 할 종류가 많았음. 검사부터 보고서 작성까지 절차가 복잡함
  • 종합심리평가 (풀배터리 검사)
  • 심리평가 상담 결과를 정리에 활용
    • 9페이지 분량의 수많은 결과 중 원하는 결과만 보고, 시각화
  • 심리 상담에도 파이썬 활용
    • 상담시 아이패드로 colab에 들어가 문항 입력. 그러면 상담사의 구글 드라이브에 저장되도록 함



3. Serverless Python Web Services

  • 서버리스 정의: 클라우드 벤더사들이 제공하는 서버리스 서비스를 통해, 인프라 구축 없이 편리하게 개발할 수 있는 환경
    • 서버리스 서비스: AWS Lambda, GCP 클라우드 펑션, 클라우드 런 등 있음

서버리스 채택 이유

  • 제한적인 개발 리소스를 최대한 효율적으로 활용해야 함
  • API 호출 트래픽 패턴이 불규칙함. 피크 트래픽 시에만 관리하면 됨 traffic
  • 이로 인해 서버 환경에 비해 서버리스 환경에서만 비용 1/3로 줄일 수 있었음
    • 비용 82달러 중 API Gateway 74달러, Lambda 8달러 비중

서버리스 아키텍처

  • 글로벌 서비스 제공 위해 유럽, 아시아 multi region으로 구성
  • Zappa: AWS 서버리스 환경 구성 및 배포 관리해 주는 서버리스 파이썬 웹 서비스 관리 라이브러리. AWS에서 제공하는 건가?
    • 파이썬, 장고, 도커 컨테이너, 자파로 구성
  • 프로세스: Django Project 세팅 -> AWS 환경 설정 -> Zappa 기본 설정 -> Zappa로 배포. 배포 후 Django administration 화면에서 관리 가능
  • 여러 개의 자파 스테이지 구성 가능
    • prod: base 스테이지 아래에 region별 스테이지 구성. cron job들도 실행 가능(스케줄에 맞게 Lambda 함수 실행)
    • 이외 dev, test 스테이지



4. (지루할 틈이 없는) 파이썬과 딥한 동고동락 - 부제 : 원티드랩의 파이썬 고생담

  • FastAPI, SQLAlchemy
    • FastAPI에서 버전 지원 이슈 있었음 (1.4에서 Async 가능한 듯)
    • 두개 툴 알아보기
  • 서비스 서빙 시, 개발 전에 스테이징 단계
  • 스테이징에서는 일부 프로덕션 데이터, 프로덕션에서는 모든 프로덕션 데이터가 있음. 개발 서버는 늘어나는데 데이터는 독립적으로 관리되고 있지 않은 상황



5. Global Interpreter Lock (GIL) 자세히 톺아보기

  • GIL, CPU Io, Thread, C-Binding 등을 이용한 성능 최적화
  • Riiid 데이터 엔지니어

GIL

  • 파이썬의 시작부터 존재한 개념
  • Lock이 존재하는 이유
    • 하나의 공통된 자원에 여러 Worker가 접근할 때, 접근 통제를 통해 메모리 보호
    • 여러 스레드가 있을 때 동시에 하나의 스레드만 접근하도록 함
  • 여러 스레드가 공통으로 접근: Critical Section. lock 있지 않으면 개발자가 의도하지 않은 동작이 발생할 수 있음
  • 파이썬은 gc 통해 사용하지 않는 메모리 정리함
    • reference counting: 사용하지 않는 변수의 메모리 해제
    • 근데 이것도 변수의 일종. 참조가 해제될때 1씩 감소함
    • 멀티 스레드에서는 참조가 되지 않는데 count가 0이 아닐 수도 있음
  • 여러 Task에서 Critical Section에 있는 int 사용. 각각 int += 1 일어날 수 있음
    • 근데 컨텍스트(Task) 스위칭이 발생할 때, int를 0으로 불러와서 += 1 하면 Race Condition에 violoation 일어남?
  • Mutex Lock: 여러 스레드가 공유 자원에 접근하더라도 문제 해결

성능

  • 멀티스레드 환경 하에서 GIL의 동작
  • C-Bindings
    • 이것도 GIL이 제약 있음
    • 코드 실행 중에는 다른 스레드의 코드 실행하지 않고 대기. T1에서 C-Binding 코드 실행 중에는 T2는 대기(같은 공유 자원을 사용 중이더라도) -> 멀티 코어여도 싱글 코어와 실행 시간 비슷함
    • C-Bindings에서 직접 GIL 해제하고 다른 스레드를 실행하도록 해야 함

미래

  • 오늘날은 대부분 멀티 코어 환경
  • 파이썬 GIL은 인터프리터 당 작동
  • nogil flag
    • GIL 없는 CPython 환경. 이 옵션 사용하면 멀티 스레드 성능 이점 있음
    • GIL은 Lock 걸어 스레드가 대기하도록 함. 유휴시간 발생
  • Atomic Operator
    • Lock-free 방식
    • Fetch and Add: Lock Add라는 기능 있어 다른 스레드로부터 안전함



6. Data Engineering in Python

  • Data Korea에서 제공
  • Python Data 오픈소스 생태계 동향

Data Trend 2022

keyword

  • ELT (Extract Load Transform) elt
    • 전통적인 ETL(Extract Transform Load) 방식: 추출 후 적재
    • ELT: 현재 사용하지 않더라도, 가능한 한 모든 데이터 추출 후 필요에 따라 가공. 실무에서는 데이터 선택의 폭이 넓어짐
    • 레이크하우스와 이어짐
  • 레이크하우스 컨셉
    • ELT에서 더 나아가, 데이터 레이크와 데이터 웨어하우스 2가지의 개념을 통합함
    • 데이터 레이크 -> 데이터 웨어하우스 -> 데이터 마트. 이 프로세스를 공통된 뷰에서 공통된 거버넌스로 맞춤
    • 빅데이터 벤더사들이 언급하는 빈도가 높아지고 있음

Data Engineering in Python

  • 파이썬 데이터 에코시스템
  • Spark, Airflow
  • AI/ML 동향
    • shap 라이브러리
      • 게임 이론을 바탕으로 모델을 설명할 수 있도록 만들어짐
      • 각 모델 feature에 따른 모델 출력 설명 가능 (feature importance 개념)
      • 다양한 차트 디스플레이 방식을 설명하여 모델 설명
    • Data Drift Detection data-drift
      • Data Drift: 모델들(위에서 M1, M2)의 feature 분포의 변화와 모델 출력 결과물의 분포 형태를 측정
      • 분포의 차이로 인해 모델이 개선됐을 때 생길 수 있는 이상점들을 미리 탐지
    • Feature Store
      • 2021년부터 대두
      • feast(오픈소스), Google Vertex AI 등 있음 feast
      • 온라인(모델 서빙), 오프라인(모델 학습) 시스템을 일원화시켜 feature 서빙



7. Type Annotation 이용하여 다양하고 복잡한 파이썬 객체를 데이터베이스로 관리하는 법

  • FastAPI를 이용하여 복잡한 json을 사용하는 rest api 구현 중, pydantic 라이브러리 알게 됨
    • 요즘 Django, Flask에 비해 FastAPI가 핫한가 봄
  • pydantic은 json <-> python 객체 상호 변환 가능
  • 이 때 파이썬의 Type Annotation 이용하여, 각 파이썬 클래스의 필드에 대한 데이터 타입도 정의해야 함
  • 객체의 필드 데이터 타입에 데이터베이스 테이블 정의에 필요한 정보를 넣는다면, SQLAlchemy와 같은 ORM을 사용하지 않고도 복잡한 json 데이터를 저장, 검색할 수 있지 않을까? 라는 생각에 시작

파이썬은 다이내믹 타이핑 언어

  • 코딩시 입/출력 변수에 대한 타입 정의 가능
    def first(items:Iterable[str]) -> str:
      return next(items)
    
    • 단 파이썬 인터프리터가 해당 타입 정보를 사용하지는 않음
    • 런타임에 영향을 미치지 않는다고 표현
    • mypy, pyright를 이용하여 타입 체크 가능
  • Type Annotation은 파이썬 객체 안에 저장 가능 -> 수행 도중에 타입 정보 얻어올 수 있음
    sig = inspect.signature(first)
    sig.parameters['items'].annotation # typing.Iterable[str]
    
  • 클래스의 멤버 변수 타입들도 알 수 있음
    class Member():
      name:str
      age:int
    
    Member.__annotations__ # {'name': str, 'age': int}
    
    • 이를 통해 타입 확인하면서 코드 편집 가능

pydantic을 이용한 python 객체 - json 상호 변환

  • 아래와 같이 BaseModel 클래스를 상속
    from pydantic import BaseModel
    from datetime import date
    
    # 내부 필드와 타입 지정
    class Member(BaseModel):
      name:str
      birth:date
    
  • python 객체 to json
    Member(name='Steve Jobs', birth=date(1955,2,24)).json()
    
  • json to python 객체
    Member.parse_raw('{"name": "Steve Jobs", "birth": "1955-02-24"}')
    
  • pydantic 라이브러리는 형 변환 가능한 parsing 라이브러리. 문자열(1955-02-24)을 날짜 형식으로 parsing해 줌



후기

3년 만에 열린 오프라인 컨퍼런스였다. 오프라인 행사는 기본적으로 현장감 있는 강의가 있어야 한다고 생각하는데, 연자가 직접 강의하는 것이 아니라 온라인 녹화 영상을 송출하는 형식이라서 아쉬웠다.

그래도 네트워킹 프로그램들은 꽤 좋았다. 회사별로 마련된 부스에서 채용 설명회를 들을 수도 있었고, 별도로 마련된 네트워킹 공간에서 자유롭게 이야기할 수도 있었다. 데이터 엔지니어로서 전향을 희망하고 있는데(이게 힘들다면 데이터 엔지니어링을 잘 하는 분석가라도), Airflow를 사이드 프로젝트로 한 번 사용해 보면 좋겠다는 방향을 듣게 되었다.

운빨이 너무 좋은 하루였다. OX 퀴즈에서 쉽지 않은 문제에 역배를 걸었는데(왠지 맞는 것 같아서), 최후 2인으로 남아서 책(고성능 파이썬), 발포비타민, 요기요 1만원권을 받게 되었다. 심지어 마지막 로또 추첨 행사에서 추첨도 되는 바람에 마이크로소프트 버티컬 마우스도 얻었다. 내 생일에 열린 파이콘이었는데 선물 받는 느낌도 있었다. 그리고 명동에서 열리는 행사라 중간에 비는 시간에 명동교자를 먹었는데 너무 맛있었다..

다음에는 더 큰 규모로 열렸으면 하는 마음이 있다. 코로나와 함께 하는 시대에 적응하고 있으니, 다음에는 양과 질적으로 더 나아진 행사를 기대한다.