한국 파이콘 2023 후기

한국 파이콘 2023 후기

코로나19 이후 약 4년만에 열린 파이콘 행사였다. 올해는 그간 팬데믹 상황에서 진행하지 못했던 여러 컨퍼런스와 밋업들이 서로 열을 올려 개최하고 있는 해인 것 같다.

주요 키워드

  • Rust + Python
  • Poetry
  • Django
  • 업무 자동화

내가 떠올린 키워드

  • 오픈 소스 커뮤니티
  • 마이크로 서비스와 모놀리식 서비스
  • 레거시 전환
  • Python에서 타 언어를 바라보는 시선
  • Python과 교육

Rust + Python

이번 파이콘에서는 Rust에 대한 언급이 꽤 많았다. Rust를 좋아하는 Python 개발자, CPython처럼 RustPython을 발전 시키려는 움직임. 여러 세션에서 다루는 것을 보고 오히려 Rust에도 관심을 가져봐야겠다는 생각을 하게 됨.

Poetry

파이콘에 와서 처음 들어봤다. 사실 파이썬은 아주 단순한 웹 크롤러나 로컬 환경에서 파일, 텍스트 처리를 위한 작업만을 해왔기 때문에 의존성 패키지 관리도구에 대해서는 크게 고민을 하지 않았다. 내 코드가 다른 곳에 공유되거나 협업을 요구하는 일이 없었기 때문인 것 같다. Poetry에 대해서 설명을 들어보면서 개발된 배경과 pip의 특징을 함께 알 수 있었다. 단순히 의존성 패키지 관리 도구를 넘어 다양한 목적으로 활용하고 있는 것 같다.

Django

프레임워크에 대해서도 여러 세션에서 다루었는데 특히 Django에 대해 다루는 이야기가 많았다. Flask, FastAPI와 함께 대표적으로 사용되는 프레임워크고 아직 파이썬 생태계에서 가장 많이 사용되고 있다. 하지만 과거와 비교해서는 임펙트가 꽤나 희석되었다. 그래도 이 3가지 프레임워크의 용도는 분명해서 당분간 하나의 프레임워크가 다른 프레임워크를 대체하는 일은 벌어지지 않을 것 같다.

업무 자동화

역시나 파이썬의 강점은 단순한 업무를 쉽게 자동화 시킬 수 있다는 점이었고 이에 더불어 슬랙 봇이나 웹훅, ChatGPT, 챗봇AI를 활용하는데 강력함을 보여줬다. 특히 서버리스로 운영하면서 비용을 최소화하여 운영하는 사례는 굉장히 인상적이었다. 이런 자동화와 관련된 세션을 듣다보니 공통점이 있었는데 모두 DevOps SRE 엔지니어였다는 점이다. SRE 업무 영역에 대해서 내가 너무 깊지 않은 이해가 있었나 싶을 정도로 다양한 일을 했고 백엔드 개발과의 영역이 굉장히 모호한 점을 느꼈다. 서비스 개발 백엔드와 SRE 개발 백엔드로 시야를 확장하게 되는 계기가 되었다.

오픈소스 커뮤니티

파이썬하면 오픈소스 생태계와 밀접한 것은 너무나 당연하게 생각해왔고 이번에 다시금 체감하게 되었다. 오픈소스 컨트리뷰터 경험 사례를 들려주고 여기서 느낌점과 오픈소스의 공유 문화를 전파하는 등의 문화가 너무 가슴이 뛰었다. 시작이 반이지만 아직 나는 그 시작의 문턱을 넘지 못했다. 오픈소스 커뮤니티로의 진입에서 파이썬은 분명 강력한 기회를 제공하는 위치에 있다. 오픈소스 = 파이썬의 공식을 다시 확인하는 시간이었다.

마이크로 서비스와 모놀리식 서비스

요즘 많이 하는 고민이다. 과연 MSA가 최선일까?에 대한 물음에 대해서 점점 명확한 답을 내리기 어려워지고 있음을 느끼고 있다. 자바진영에서 무조건 JPA를 외치던 것과 같이 MSA도 만능 아키택쳐로 군림하던 시절이 있었고 지금도 유효하다. 모두 MSA를 꿈꾸고 있고 MSA로의 전환을 위해 모놀리식 형태의 레거시를 깨부수고 있을 것이다. 그런데 과연 모놀리식이 무조건 나쁜 것일까? 서비스 간 Rest Call 방식이 최선일까? 흑백 논리에 벗어나서 이제는 중간 입장에서 생각해보게 되는 것 같다. 어떻게 보면 현실의 타협으로 보일 수도 있고 어떻게 보면 원점부터 다시 고민하는 모습일 수도 있다. 파이콘에서는 Django MVC 모델을 소개하면서 간접적으로 나와 같은 생각에 대해 물음을 던져주었다. 과연 어플리케이션에서의 성능이 서비스를 잘게 쪼개야 할 정도의 중대한 이슈일까? 어플리케이션의 보틀넥은 대부분 Database의 성능에 좌우되고 고성능을 요구하는 어플리케이션은 애초에 RDB 액세스를 최소화하거나 없앤다. 이 부분에서 성능을 위해 MSA로 간다는 생각이 어색해보임을 느꼈다. 이 고민은 한동안 계속하게 될 것 같다.

레거시 전환

파이썬에서의 가장 많이 언급되는 레거시 전환 사례는 Python2 -> Python3 마이그레이션이다. 지금 시점에서 신규 파이썬 프로덕트는 당연히 3버전이겠지만 불과 몇 년전만 해도 3버전이 있었음에도 2.7버전을 쓰던 시절이 있었다. 이유는 아직 검증도 안됐고 라이브러리가 2버전에서 3버전으로 넘어온게 많지 않아 대체가 어렵다는 이유였다. 지금은 그런 이유는 대부분 해소가 되었다. 그렇다면 2버전에서 3버전으로 못넘어갈 이유는 없었다. 하지만 이걸 누가 마이그레이션하지? 라는 문제가 남아있던 것이다. 결국 누군가 총대 메고 마이그레이션을 해야한다는 결론에 이르렀다는 것은 다른 사례에서 알게 되었고 빅뱅 방식의 전환, 부분 전환 모두 적절하지 않음을 알게 되었다. 두 가지 방법에서는 후자를 대부분 선택했는데 조건이 있었다. 레거시와 새 버전의 시스템이 공존했고 부분적으로 중요한 기능부터 옮긴 후 모니터링을 하고 하나씩 이슈를 쳐가면서 전환을 해야한다는 점이었다. 결국 어디서도 한번에 깔끔하게 전환 할 수 없고 전환하는 과정에서 발생하는 이슈를 바로 바로 해결해가면서 전환해야하는 것을 감내해야 하는 것으로 다시 한번 느끼게 되었다.

Python에서 타 언어를 바라보는 시선

파이썬 행사에서 타 언어에 대한 비교 언급은 이상하리만큼 없었다. 있었다면 정적타입언어와 동적타입언어의 차이에서 나오는 잠깐의 언급? 정도였고 그럴 수 있는 것은 태생과 환경이 경쟁하지 않아도 되는 상황에 의함으로 이해하고 있다.

자바로 예를 들면 “응, 자바? 자바는 자바 알아서 해~ 우린 우리대로 잘 크고 있어~” 이런 느낌이다.

자바와 파이썬에 대해서는 둘 중 하나를 선택하는 것이 아닌 용도에 따라 둘 다 사용하고 그 밖에 언어도 모두 수용한다는 기저가 깔려있기 때문에 다른 언어에 대한 비교가 커뮤니티 안에서 조차 없었던 것 같다. 이러한 모습은 파이썬이 가지고 있는 자신감에 있다고 생각한다. 심지어 파이콘에서 고퍼콘 행사 PR도 적극적으로 하는 모습을 보고는 애초에 언어 간 다툼과 논쟁이 이곳에서는 의미 없음을 느꼈다.

Python과 교육

두번째 날 마지막 세션으로 듣게 되었다. 가장 흥미로웠던 세션이었고 Q&A 시간이 좀 더 있었더라면 의견을 내면서 토의를 해봤을 법도 한 주제였다. 하버드에서 CS50 커리큘럼의 파이썬 비중이 높아진 배경과 라즈베리파이가 생겨난 과정을 들어보면서 파이썬이 컴퓨팅 교육에서의 가장 적합한 언어라는 점에서는 어느 곳에서도 부정하지 못함을 설명해주었다. 반대로 이런 인식으로 인해 각종 코딩 교육과 기본 교과목에 파이썬이 자리잡게 됨으로써 파이썬이 개발하는 재미가 아닌 평가의 도구로 변질되는 것에 대한 우려를 함께 설명해주었다. 이 세션을 듣게 되면서 유사 과거의 수학 과목에 대해 지금의 우리가 갖는 인식으로 오는 과정을 컴퓨팅 과목이 그대로 따라가지 않을까라는 걱정을 하게되었다.

나 역시 수학을 포기하다시피 했고 반대로 컴퓨터에 대해서는 어떻게든 알아가고 싶었던 서로 상충되는 경험을 했었던 기억이 있다. 그럼 이 둘의 차이는 무엇이었을까?

수학은 당시 이걸 배워서 어디에 쓸 수 있을까?에 대한 답을 얻지 못했고 그만큼 동기를 발생시키기 어려웠다. 반대로 컴퓨터는 내 눈앞에 결과가 바로바로 나타나면서 내가 이걸하면 뭐든 할 수 있겠다는 확신이 생기게 되었다. 그런데 이런 양상이 컴퓨터 교육에서도 이어질 것 같은 불안감이 올라온다. 시작부터 조건문, 반복문, 알고리즘 등을 접하게 되었을때 어떤 생각을 하게 될까? 수학과 비슷할 것임이 내 머릿속에서는 지배적이다. 수학처럼 문제를 풀고 해결하는 것에 흥미를 느끼는 친구들이라면 이런 컴퓨터 과목에도 동일하게 흥미를 느끼겠지만 모두가 그런 것은 아닐 것이고 단순히 로직과 알고리즘 문제를 푸는 것만으로는 전반적인 컴퓨터 활용의 능력을 판단하기는 어려움이 있다.

오히려 이러한 과정과 일률적인 교육들이 역효과를 내지 않을까 내심 걱정된다. 한편으로는 다행이라고 생각하는게 아직 기본 교육과정에 프로그래밍이 편입되지 못한 상황에서 나의 자녀는 흥미를 느끼고 알아서 지식을 습득하고 있다는 점과 그리고 그걸 내 자신이 재미있게 설명해줄 수 있다는 점이다.

나의 경우 정형화된 교육은 흥미보단 평가를 초점으로 바라보다보니 자녀가 흥미를 느낄때는 더욱이 교육기관을 보내지 않는다. 대신 더 흥미를 느낄 수 있도록 자료를 찾아주고 옆에서 계속 대화하고 지원해주는 방법을 유지하고 있다. 아이들의 흥미와 꿈은 성장기에 수시로 바뀌고 이렇게 바뀌는 과정에서 하게 된 경험은 성인이 되었을때 분명 넓은 시야를 가질 수 있는 자양분이 될 것이라고 생각하고 있다. 성장기에는 오히려 더 많은 것을 보여주고 더 다양한 것을 하게 끔 하는 것이 집중식 교육보다 더 가치있다고 생각한다.

마치며..

뭔가 파이콘으로 시작해서 교육관으로 마무리된 기분이다. 하지만 그만큼 다양한 생각을 하게 된 시간이었고 자녀와 함께 했기 때문에 더 특별했던 시간이었다. 별로 기대하지 않았지만 기대 이상으로 집중하는 모습을 보면서 정말 재미있어한다는 기분을 느꼈다. 이 정도라면 앞으로 계속 개발자 커뮤니티나 컨퍼런스에 기회가 된다면 같이 참석해도 될 것 같다. 개발적인 부분 외에도 사회에 나와서 어떤 것을 고민하고 실제로 어떤 일을 하는지 허물 없이 보여줄 수 있는 뜻깊은 시간이었다.

그 동안 하는 일에 대해서 말로 설명하기 쉽지 않았는데 이번을 계기로 아빠가 어떤 일을 하는지 눈으로 보여줄 수 있는 소중한 시간이었다.


파이콘 키워드 메모

  • Ruff : Flake8보다 40배 빠른 python linter
  • PyPI Status: 파이썬 생태계에서 인기있는 라이브러리의 트랜드를 알 수 있음.
  • Pylyzer(파이라이저): RustPython Parser를 사용하고 있음.
  • Seahorse-lang – 블록체인 개발 도구 (Python -> Rust)
  • pip를 대체하는 의존성 패키지 관리 도구: Poetry by 당근마켓
  • Black: Python 컨벤션 포매팅 라이브러리
  • Python2 -> Python3를 마이그레이션하면서 CPython을 사용함 by 네이버 서치 SRE팀
    • Python3 마이그레이션 이슈: int 타입의 범위를 제한하지 않음 int, long -> int만 사용됨, 유니코드 지원
    • 2to3 라이브러리: Python2에서 Python3로 마이그레이션을 도와주는 라이브러리
    • 마이그레이션 과정
      • 25%의 트래픽만 To-Be 버전으로 동작하도록 카나리 배포 적용
      • As-Is와 To-Be에 시스템을 로그 데이터 비교
      • 모니터링을 통한 문제의 발견:
        • 상위 1% 엔드포인트 응답시간 증가 확인
        • response body length 증가 이슈: gzip 압축 동작이 되지 않음을 확인하여 이슈 해결
      • 성능 체크
        • 최대 CPU 사용률: 11% 감소
        • 최대 메모리 사용량: 23% 감소
        • API 평균 응답 시간: 20% ~ 40% 감소
          • 모든 API: -20%
          • 렌더링 API: -40% (이미지를 생성하는 API)
      • 후속 작업 Deadcode 제거
        • 사용하지 않는 코드 추출
        • As-Is(Python2) 문법으로 짜여진 코드 삭제
  • 기존 Redis 분산락을 적용했음에도 경합이 발생하는 이슈를 해결 by lablup Devops 백엔드팀
    • Leader 프로세스만 처리를 담당하고 Managed 프로세스는 일방향으로 복제하는 Raft 알고리즘으로 구현
    • Rust -> Python 코드 포팅
    • Rust의 강력한 기능을 Python에 결합하기 위한 라이브러리: PyO3

관련 링크

%d 블로거가 이것을 좋아합니다: