Pro Yearly is on sale from $80 to $50! »

Banksalad recipe - Python flavor

Banksalad recipe - Python flavor

뱅크샐러드의 정기 컨퍼런스, 3차 콘샐러드에서 발표한 백엔드팀의 파이썬 이야기입니다. 백엔드팀이 왜 파이썬을 사용하고, 어떤 방식으로 활용하고 있는지 얘기하며, 같이 잘 일하기 위해 어떤 노력을 하고 있는지 소개합니다.

22b02091761ba790122dd89436bce02c?s=128

Winter Jung

March 16, 2019
Tweet

Transcript

  1. 뱅크샐러드 파이썬맛 레시피 정겨울

  2. 정겨울 Jung Winter 뱅크샐러드 백엔드 엔지니어 발표자

  3. Index 재료 01 조리법 02 식사 03

  4. Index 환경 01 패턴 02 협업 03

  5. Index 환경 01 패턴 02 협업 03 어떤 환경에서 파이썬을

    사용하게 되었나
  6. Index 환경 01 패턴 02 협업 03 어떤 환경에서 파이썬을

    사용하게 되었나 어떤 방식으로 사용하고 있나
  7. Index 환경 01 패턴 02 협업 03 어떤 환경에서 파이썬을

    사용하게 되었나 어떤 방식으로 사용하고 있나 어떻게 함께 잘 사용하는가
  8. 오늘은 백엔드 팀의 파이썬 이야기 데이터팀의 이야기가 궁금하다면 1차 콘샐러드!

    Disclaimer
  9. 백엔드팀의 환경 01

  10. 01 환경 린(Lean)한 학습

  11. 01 환경 ⚒ 빠른 개선과 배포 린하게 움직여 제품에 반영하고

    사용자의 피드백을 통한 개선의 반복 → 빠른 실행과 저렴한 학습!
  12. 01 환경 마이크로서비스 아키텍쳐 파이썬 ⚙

  13. 01 환경 네트워크 IO가 많은 MSA 환경

  14. 01 환경 네트워크 IO가 많은 MSA 환경 → 적극적인 비동기

    활용
  15. 01 환경 gevent 경량 스레딩 방식 이벤트 루프 비동기 방식

  16. gevent ҃۝ झۨ٬ ߑध 01 환경

  17. 01 환경 이벤트 루프 비동기 방식

  18. 01 환경 이벤트 루프 비동기 방식 어떤 방식이든 비동기면 원하는

    성능 달성 가능 가장 일반적인 익숙한 패턴 언어 레벨에서 나이스한 문법 제공 특정 파이썬 라이브러리 종속으로 인한 장벽 방지
  19. 01 환경 파이썬 3.7과 함께하는 뱅크샐러드 비동기의 장점을 최대한 활용가능한

    런타임 버전
  20. 01 환경 Python 3.5 New syntax async/await a @ b

    *, ** unpacking 동작 확장 (e.g. {'x': 1, **{'y': 2}}) New modules typing
  21. 01 환경 Python 3.6 New syntax F 문자열 포매팅 f'Answer

    is {value}' 변수 타입 힌팅 async 제네레이터
  22. 01 환경 Python 3.7 New modules dataclasses Enhancement ࡈۄ૓ typing

    ݽٕ ഛ੢ػ asyncio ݽٕ о੢ ࡅܲ CPython ߡ੹ ✨
  23. 파이썬을 사용하는 패턴 02

  24. 02 패턴 ⚠ 조금 길 수 있습니다

  25. 02 패턴

  26. 02 패턴

  27. 02 패턴 애플리케이션

  28. 02 패턴 애플리케이션 테스트

  29. 02 패턴 - 애플리케이션 Sanic - 비동기 웹 프레임워크 sanic

  30. 02 패턴 - 애플리케이션 aiohttp와 flask sanic

  31. 더 빠르고 간결한 문법과 확장된 기능을 제공하며 잘 관리되고 있다

    02 패턴 - 애플리케이션 sanic
  32. জ ಂషܻ ಁఢ 02 패턴 - 애플리케이션 크게 다르지 않아

    보이지만 sanic
  33. ۄ਋౴ 02 패턴 - 애플리케이션 중첩가능하고 추상화된 블루프린트 일일이 넘기는

    메서드, 경로와 함수 ؘ௏ۨ੉ఠ ցޖ જই sanic
  34. Ӗ۽ߥ ࣁ࣌җ ܻझց 02 패턴 - 애플리케이션 내가... 직접... append...?

    @=(^o^)@ 데코레이터 sanic
  35. 02 패턴 - 애플리케이션 sanic ஶೖӒ ಂషܻ ಁఢ

  36. 02 패턴 - 애플리케이션 sanic ஶೖӒ ಂషܻ ಁఢ

  37. 02 패턴 - 애플리케이션 ௿ܽইఃఫ୛ 클린아키텍쳐

  38. 02 패턴 - 애플리케이션 제품 관점 협업 관점 개발 환경

    관점 WHY? 클린아키텍쳐
  39. 도메인을 중심으로 개발 가능 02 패턴 - 애플리케이션 클린아키텍쳐

  40. 공통된 구조를 통해 유지보수성 증가 02 패턴 - 애플리케이션 클린아키텍쳐

  41. ҕాػ ҳઑ 02 패턴 - 애플리케이션 클린아키텍쳐 Service A Service

    B
  42. 일관성 있는 코드 확장 02 패턴 - 애플리케이션 클린아키텍쳐

  43. 다른 서비스나 DB에서 값을 꺼내오는 로직
 data의 repository 우리의 도메인을

    표현하는 자료 구조
 entity 유저와 거래내역을 사용하는 비즈니스 로직
 service 엔드포인트 라우팅
 route / presentation / http 02 패턴 - 애플리케이션 클린아키텍쳐
  44. entity + dataclass = 02 패턴 - 애플리케이션 비즈니스 로직엔

    entity만 타입 힌트와 함께
 풍부하게 표현 가능한 dataclass 클린아키텍쳐
  45. 02 패턴 - 애플리케이션 필요할 땐 dict로 바꿔서 클린아키텍쳐 entity

    + dataclass =
  46. 이렇게 만든 앱을 02 패턴 - 애플리케이션 docker

  47. Docker 컨테이너로 02 패턴 - 애플리케이션 docker

  48. 02 패턴 - 애플리케이션 docker ݣ౭ झప੉૑ ࠽٘ 파이썬도 할

    수 있다!
  49. 300 MB 100 MB 02 패턴 - 애플리케이션 docker

  50. 만들었는데 제대로 만든거 맞나 02 패턴

  51. 02 패턴 애플리케이션 테스트

  52. 02 패턴 - 테스트 pytest unittest + nose < pytest

    간결하고 깔끔한 테스트 코드 읽기 쉬운 에러 리포트 fixture 플러그인 pytest
  53. 02 패턴 - 테스트 pytest unittest + nose < pytest

    간결하고 깔끔한 테스트 코드 읽기 쉬운 에러 리포트 fixture 플러그인 pytest 모든 unittest 코드는 pytest로 테스트 가능
  54. 02 패턴 - 테스트 간결하고 깔끔한 테스트 코드 The cleaning

    hand of pytest pytest
  55. 02 패턴 - 테스트 간결하고 깔끔한 테스트 코드 The cleaning

    hand of pytest pytest 일일이 기억해 사용해야 하는 assertXXX 패밀리
  56. 02 패턴 - 테스트 간결하고 깔끔한 테스트 코드 The cleaning

    hand of pytest setUp, tearDown 를 사용하면 더 차이나는 코드 pytest 일일이 기억해 사용해야 하는 assertXXX 패밀리 네이티브 문법을 활용해 가독성 확보
  57. 02 패턴 - 테스트 pytest 읽기 쉬운 에러 리포트

  58. 02 패턴 - 테스트 pytest fixture와 플러그인 fixture와 pytest의 내장

    기능을 통해 테스트 로직에 집중
  59. 02 패턴 - 테스트 pytest fixture와 플러그인 Pytest۽ Flask੄ DB

    పझ౟ ജ҃ ҳ୷ೞӝ Python pytest fixture Switching from nose to py.test at Mozilla
  60. 02 패턴 - 테스트 DB పझ౟ pytest Mocking한 repository service에

    mocked repository를 전달해 내부 로직에 사용
  61. 02 패턴 - 테스트 외부 API 테스팅 aioresponses를 활용한 mocking

    pytest
  62. 02 패턴 - 테스트 외부 API 테스팅 어떤 URL로 요청이

    오면 정해진 응답을 반환 pytest
  63. 02 패턴 - 테스트 외부 API 테스팅 실제 로직은 mocking을

    고려하지 않고 평소같이 작성 pytest ਗېח పझ౟ ௏٘ী ੓חѱ ইפۄ ࢲ࠺झ ௏٘ী ઓ੤ೞח ࠗ࠙
  64. 02 패턴 - 테스트 외부 API 테스팅 클라이언트가 해당 API를

    호출했을 때 정해진 응답 pytest
  65. 02 패턴 - 테스트 외부 API 테스팅 mocking에는 한계가 존재


    다만 외부 API의 응답을 보장하는건 여기서 다룰 책임은 아님 pytest
  66. 02 패턴 - 테스트 커버리지 Coverage pytest-cov۽ ழߡܻ૑ ܻನ౟ ࢤࢿ


    ழߡܻ૑ח ݾ಴о ইצ ࢚క
  67. 02 패턴 - 테스트 isort pylint Optional[black] 린트와 스타일

  68. 02 패턴 - 테스트 isort 린트와 스타일 -

  69. 02 패턴 - 테스트 Git hook Git hook을 통한 테스트

    자동화 $ ./bin/install_hooks.sh
  70. 02 패턴 - 테스트 Git hook Git hook을 통한 사전

    테스트 실수 방지 오늘 할 일을 내일로 미루지 말자 빠른 피드백을 통한 지속적인 코드 품질 관리 bin/pre-push
  71. 함께하는 개발 03

  72. 03 협업 isort pylint Optional[black] 사실 협업의 영역 코드 컨벤션

  73. Rainist/styleguide 03 협업 코드 컨벤션 트레일링 콤마, 1줄의 최대 길이,

    indent, 네이밍 등
  74. 03 협업 코드 컨벤션 전원 합의를 거친 코드 컨벤션 이슈와

    PR
  75. 03 협업 프로젝트 템플릿 앞서 말했던걸 템플릿으로 관리 docker, CI

    설정, 컨벤션, hook, 폴더 구조 등
  76. Rainist/python 03 협업 프로젝트 템플릿 Rainist Python project template based

    on Cookiecutter
  77. Rainist/python 03 협업 프로젝트 템플릿 Rainist Python project template based

    on Cookiecutter ✨ ✨
  78. 03 협업 GitHub ഈস੄ ੢ GitHub
 э੉ ੜ ॳӝ

  79. ISSUE_TEMPLATE.md
 맥락 파악 + 레거시화 + 의사소통 비용 감소 PULL_REQUEST_TEMPLATE.md


    코드 리뷰 효율 향상 + 체크리스트를 통한 실수 방지 03 협업 GitHub Issue / PR మ೒݁
  80. 03 협업 GitHub Issue / PR మ೒݁

  81. 03 협업 GitHub Issue / PR మ೒݁

  82. 03 협업 GitHub 이슈 라벨링

  83. 03 협업 GitHub 이슈 라벨링

  84. 03 협업 GitHub 이슈 라벨링

  85. 03 협업 GitHub 이슈 라벨링

  86. 03 협업 코드리뷰 (c) 2008 Focus Shift/OSNews/Thom Holwerda 건강한 코드리뷰

    문화를 위해
  87. 03 협업 코드리뷰 코드리뷰는 500줄 이내로

  88. 03 협업 코드리뷰 코드리뷰는 500줄 이내로

  89. 03 협업 코드리뷰 리뷰어를 위한 정보 제공

  90. 03 협업 코드리뷰 컨텍스트 공유를 위한 자리 마련 -

  91. 03 협업 코드리뷰 서로서로 리뷰 요청

  92. Remind 환경 01 패턴 02 협업 03

  93. Remind 환경 01 패턴 02 협업 03 빠른실행과 저렴한학습 MSA와

    파이썬
  94. Remind 환경 01 패턴 02 협업 03 빠른실행과 저렴한학습 MSA와

    파이썬 sanic 클린아키텍쳐 docker pytest lint
  95. Remind 환경 01 패턴 02 협업 03 빠른실행과 저렴한학습 MSA와

    파이썬 sanic 클린아키텍쳐 docker pytest lint 컨벤션 템플릿
 GitHub 코드리뷰
  96. 오늘 백엔드 팀의 파이썬 이야기

  97. Thank You