Published on

파이콘 한국 2023 참석 후기

Authors
  • avatar
    Name
    마롱
    Twitter

파이콘 행사 소개

파이콘은 파이콘 커뮤니티에서 주최하는 파이썬 관련 기술 컨퍼런스입니다. 파이콘 한국 뿐만 아니라 PyCon US, EuroPython 등 해마다 다양한 국가에서 열리는 파이콘 행사가 있습니다. 하나의 기술 언어를 주제로 열리는 컨퍼런스를 놓고 봤을 때 파이콘이 가장 규모가 크고 역사가 깊은 것 같습니다.

올해는 코로나 이후 처음으로 크게 열리는 파이콘이어서 기대가 되었습니다. 파이콘 한국 2023는 8월 12일부터 13일까지 이틀간 진행되었고 저는 13일만 참석했습니다.

세션 들으며 메모한 내용

각 세션은 20분 또는 40분 분량으로 구성되어 있었고, 세 개의 공간에서 동시 진행되었습니다.

Pantsbuild 로 Django 모노레포 마이크로서비스 구현하기 - 김순

백엔드의 모노레포 사례는 많이 접하지 못해 잘 몰랐는데 pantsbuild라는 걸 새롭게 알게되어 좋았습니다.

메모
  • 모노레포 언급 in 《구글 엔지니어는 어떻게 일하는가》

  • pants + pex

    Pants 2 is a fast, scalable, user-friendly build system for codebases of all sizes. It's currently focused on Python, Go, Java, Scala, Kotlin, Shell, and Docker, with support for other languages and frameworks coming soon.

    pex is a library for generating .pex (Python EXecutable) files which are executable Python environments in the spirit of virtualenvs. Build systems such as PantsBuck, and pygradle also support building .pex files directly.

    • pants: 빌드 도구, 모노레포 빌드에 적합하여 많이 사용됨
    • pex: 파이썬 애플리케이션을 하나의 실행파일로 만들어주는 도구. pants.pex 확장자 파일로 빌드해줌
  • 모노레포 vs. 멀티레포

    • 모놀리틱 ≠ 모노레포
    • 마이크로서비스 ≠ 멀티레포
    • 모노레포
    • 멀티레포
  • 모노레포 슬라이싱 원칙

    • 커져가는 레포의 속도 저하 문제를 해결한다.
  • 배포 과정

    • pex → Docker → ECR
  • 파일 구조

    • payhere/app_services/my_service
    • "app service"라는 배포 목적 단위로 폴더를 관리
    • 장고의 app은 여러 서비스에서 사용이 가능하도록 함
  • 도입 과정에서의 이슈들

    • 장고의 숨겨진 의존성 추론이 어렵다.
    • 의존관계가 뒤섞여서 많은 앱이 INSTALLED_APPS에 포함되기도 했다.
  • 결론

    • 장고 모노레포 마이크로 서비스
      • 단순한 보일러플레이트 코드를 통한 도커 이미지 생성
      • 종속성 유추를 통한 패키지 빌드
      • 하나의 코드베이스 안에서 유연하게 배포 분리
    • 향후 계획
      • CI/CD 시간 개선
      • 기존 코드와의 종속성 연관도 구분에 대한 고민 필요

Python으로 전자음악 작곡하기 - 유태영

생소한 주제라서 재밌게 들었고 스포티파이의 오픈소스인 pedalboard도 처음 접해서 신기했습니다.

메모
  • 컴퓨터에게 음악은 숫자(sample)의 연속이다.
    • "It's just streams of numbers!" - EuroPython 스포티파이팀 발표
  • 디지털 음악을 만들려면?
    • 3분 길이의 노래는 800만개의 샘플이 필요하다.
    • np.random() 이용해서 랜덤한 숫자들로 노래를 만들어 봄 → 그냥 노이즈 느낌!
    • 신디사이저: 오디오 신호를 생성하는 전자 악기
      • 신디사이저의 아이디어를 이용해서 구현해보자!
  • pedalboard
    • 스포티파이에서 개발한 오픈소스
    • 악기 소리를 만들고 이펙트도 줄 수 있음
  • 악기 소리를 모두 만들어 볼 수 있다.
    • 만들고 싶은 소리 → 파형(예: sine) / 효과(예: reverb)를 조합하여 합성 → 반복
  • numpy + pedalboard로만 구현한 음악을 들려주었음 → 나름 좋았음
  • 결론
    1. 컴퓨터에게 음악은 -1에서 1 사이의 연속된 숫자들이다.
    2. numpy, pedalboard를 이용해서 신디사이저를 구현하고 음악을 만들어낼 수 있다.
    3. 중요 키워드
    • 전자음악
    • 신디사이저
      • 이 발표에서는 numpypedalboard를 이용해서 직접 신디사이저를 구현한 얘기를 들려주었지만, 사실 이미 잘 구현되어 있는 신디사이저가 많고 무료로 제공되는 것도 있다.
      • Surge: 오픈소스
      • Vital: 현업에서 사용, 무료플랜
    • Sound Design: 원하는 소리를 만들어내는 법
      • 만들고 싶은 소리가 있을 때 "Hihat Sound Design" 이런 키워드로 검색해보면 된다.

파이썬에서의 병렬 처리 - 김현우

메모
  • 병렬 처리를 접하게 된 계기
    • 앱의 느린 연산 속도 개선
      • AI 알고리즘 연산이 포함됨
    • 기존 사이클
      • while True 무한반복문 안에 함수 4개 존재
      • 총 80s 소요 → 각각 동시에 돌려서 50s(가장 오래걸리는 함수 기준) 소요되게 함
  • 멀티 프로세싱 vs. 멀티 스레딩 어떤 걸 선택해야 할지?
    • 여기서는 멀티 프로세싱 선택: 일부 프로세스에 문제가 생겨도 다른 프로세스에 영향을 주지 않아서
  • while True 안에서 프로세스 4개 생성 후 start() 호출하는 방식
    • 다른 프로세스를 기다리지 않음 → join() 이 필요하다.
  • 결론
    • 멀티 프로세싱
      1. 수행될 작업들의 선행 관계 정의
      2. join()으로 다른 작업 대기

Python DDD - 신동현

발표에서는 DDD에 대한 이론적인 설명을 주로 해주셨고, 개인적으로 Q&A 시간이 더 재밌었던 것 같습니다.

메모
  • DDD
    • 소프트웨어가 해결하려는 문제(도메인)에 집중하는 소프트웨어 개발 방법론
    • 장점
      • 소프트웨어와 비즈니스가 이원화되는 것을 방지
        • 팀 내 커뮤니케이션 비용 감소
      • 요구사항 변경이나 인프라 변경에 유연
        • 느슨한 결합 기반으로 변화에 유연
        • 유지보수가 쉽고 확장 가능
  • DDD에 대한 이론적인 설명
    • Structure
      • Domain Layer
      • Infrastructure Layer
      • Application Layer
      • Presentation Layer
    • Bounded Context
    • Entity, Value Object
    • Repository, Use Case
    • Request, Response
  • Q&A
    • 파이썬으로 개발중인데 도메인에서 외부 디펜던시를 생각보다 많이 쓴다. 예를 들어 numpy 등. 이런걸 인프라 레이어로 빼야 되나?
      • 실제로 pydantic 도 인프라 레이어 말고 도메인 레이어에 포함시킨다. 순수 파이썬이라고 하긴 했지만 포기하는게 있긴 하다.
    • 파이썬 DDD 사례는 많이 접하지 못했는데 어려운 점?
      • 자바는 인터페이스를 구현하는 방식이 많은데, 나는 인터페이스를 쓰지 않고 유연하게 디자인했다. 그래도 크게 문제되지 않는다. 누군가 이걸 보고 DDD가 아니라고 한다면 나는 이건 Python DDD라고 할거다(ㅋㅋㅋ). 구현체 1-2개일때는 그냥 바로 구현했다.
    • 현업에서 사용할 때 협업 경험 어떤지?
      • 우선 팀원들이 DDD를 잘 알지 못하거나 필요성을 명확히 하지 않으면 적용하지 않는게 좋을 것 같다. 개발할 때는 내가 인터페이스 작성하고 다른분이 구현체 작성하는 식으로 협업하기도 했다.
    • 레이어 늘어나면 테스트도 늘어날텐데 접근 방법?
      • 내 원칙은 모든 걸 테스트할 필요는 없다고 생각한다. 주요한 비즈니스 로직이나 integration test에 집중한다. 모든 여정을 커버할만한 테스트 코드는 어렵고 이점이 그리 크지 않다고 생각한다.
    • FastAPI dependency injector 꼭 사용해야 하는지? 왜 사용했는지?
      • 함수를 Batch, CLI 등에서도 활용하기 위해, FastAPI에 의존하지 않기 위해 사용했다.
    • 장고 MVC 패턴에서는 개발할 때 뷰/시리얼라이저/모델 중 어디를 고쳐야 할지가 애매할 때가 있는데 DDD에서는 어딜 고쳐야 하는지가 명확하다고 느꼈다.

오픈소스와 함께 성장하기(Feat. Django) - 배두식

실제로 오픈소스에 기여한 경험을 바탕으로 얘기해줘서 재밌고 유익했습니다.

메모
  1. 오픈소스와 성장
  • 1.1. 기술적 성장
    • 코드 first
      • 회사 -> 비즈니스 first, 오픈소스 -> 코드 first
      • 오픈소스는 비즈니스적 임팩트보다 코드의 안정성과 확장 가능한 코드 스타일을 먼저 추구하기 때문에 일정보다 코드의 퀄리티가 먼저입니다.
      • 퀄리티 높은 코드리뷰를 받을 수 있습니다.
    • 좋은 프로젝트에 필요한 요소들
      • 테스트 코드, 티켓 관리, CI/CD, 문서화, 코드리뷰
      • 장고는 기본적으로 워크플로우가 10개 정도 되고, DB 쪽 코드를 건드리면 워크플로우가 20개 정도 돌아간다.
    • 다양한 기술 경험
      • 평소에 경험할 수 없는 다양한 레이어(ORM, DB, Network Framework 등)의 개발을 경험할 수 있습니다.
    • 오픈소스로 코드로 공부하기
      • BaseDatabaseWrapper 코드를 참고한 경험
  • 1.2. 커뮤니케이션 성장
    • 영어 실력 및 커뮤니케이션 능력 성장
      • 개발 용어
      • 리뷰 텀이 회사보다 길기 때문에 효율적으로 커뮤니케이션하는 능력 성장
    • 글로벌 네트워크
  • 1.3. 정서적 성장
    • 좋은 코드 그리고 개발자에 대한 회고
      • 안정적인 코드를 위해서는 거버넌스와 다양한 규칙, 도구들이 필수적이다.
      • 회사내에 빠른 이터레이션 -> 오픈소스처럼 영향력이 크고안정적인 프로젝트 이터레이션 -> 좋은 밸런스에 대한 고민
      • 빠르지 않아도 괜찮다.
      • 편한 인터페이스 뒤에는 복잡한 구현이 있다.
      • 코드 리뷰에 대한 긍정적인 믿음.
      • 오픈소스 사용자에서 기여자로서의 시각.
    • 성취감
  1. How to Start 오픈소스
  • 2.1. 프로젝트 선정
    • 내가 제일 자주 사용중인 라이브러리 혹은 프레임워크
    • 평소에 관심있던 분야 또는 소프트웨어
    • 버그를 발견한 프로젝트
  • 2.2. 컴포넌트 또는 패키지 정하기
    • 장고 컴포넌트: 약 30개 이상
  • 2.3. 이슈 찾기
    • Start with Good first issue → 대부분의 프로젝트는 첫 기여자를 위한 라벨이 존재.
    • 간단하게 scraping 코드를 작성해서 관련 이슈를 alerts 받는 것도 좋음.
  • 2.4. 코드 읽기
    • 테스트 코드 활용하기
    • 코드와 관련된 PR 찾아보기
    • ChatGPT 활용하기: 코드 주고 "설명해줘"
  1. 함께 오픈소스 기여하기!
  • OSS 오픈소스 프런티어
  • OSS 오픈소스 컨트리뷰톤
  • Sprint 참여하기

참여 소감

작년에는 세션을 영상 송출로 진행을 해서 세션보다는 다른 개발자분들과 현장에서 이야기 나누는 시간에 더 집중을 했었습니다. 그러면서 다른 회사에서는 어떻게 일하고 있는지, 다른 개발자분들은 어떤 고민을 갖고 있는지 알 수 있어서 좋았던 기억이 있습니다.

그런데 올해에는 어쩌다보니 세션을 듣는 것에 더 집중을 하게 되어서 다른 개발자분들과 얘기를 나누지 못한 것 같아 조금 아쉽습니다. 내년에는 이 경험을 바탕으로 적절히 시간을 분배해서 참석해야겠어요.

본인의 경험을 바탕으로 다른 사람에게 새롭거나 어려울 수도 있는 얘기를 들려주는 세션도 있었지만, 초보자들을 대상으로 이미 알려진 얘기를 요약해서 들려주는 세션도 있었습니다. 발표의 문턱이 제 생각만큼 엄청 높지 않을 수도 있겠다는 생각을 하면서 언젠가는 저도 발표를 해보고 싶다고 생각했어요.

그리고 언젠가 다른 나라에서 열리는 파이콘도 가보고 싶다는 생각을 했습니다.