주니어 개발자의 성장일기

  • 오픈소스 기여하기 회고 1 (feat. Django Contributor)

    안녕하세요, 오랜만에 블로그 포스팅으로 찾아왔습니다. 회사에서도 바쁜 시간을 보냈고 여러 오픈소스에 관심을 가지면서 시간을 보냈던 것 같습니다. 오늘은 틈나는대로 관심을 가지고 있던 오픈소스 생태계에서 Django Contributor가 된 경험을 공유하려고 합니다. 바로 시작하겠습니다! 오픈소스 Contributor 되기로 마음 먹기 시작하기 전 오픈소스와 관련된 여러 글들을 읽어 보았는데 공통적으로 하는 말이 꽤나 고되며, 시간이 많이 소요된다라는 말들을 종종 볼 수 있었습니다. 하지만 그럼에도 불구하고 장점이 더 많았고 무엇보다 너무 해보고 싶었던 일이었기에 올해 안에는 오픈소스에 기여를 무조건 해보자 라는 마음가짐으로 시작했습니다. 제가 오픈소스를 시작하면서 기대했던 효과는 다음과 같습니다. 각국..

  • [테스트]테스트 커버리지 0%에서 98%까지의 경험기 1

    개발을 하며 수도 없이 들어왔던 테스트 코드의 중요성, 과연 어떻게 시작해야 할까? 라는 의문점과 함께 시작한 프로덕션 환경에서의 테스트 커버리지 0%에서 98%로 만들기까지의 경험을 공유해보려고 합니다. 테스트? 그거 어떻게 작성하는건데? 테스트 코드를 작성해보았던 경험이 없었기에 맨 처음에는 도저히 어떻게 작성 해야하는지에 대해 감이 잡히지 않았습니다. 여러 자료들을 보며 공부하면서 처음 만들었던 테스트케이스는 특정한 API의 엔드포인트에 테스트 client를 통해 요청을 보내고 정상적인 응답(status 200)이 오는지에 대해서 검증하는 것이었습니다. 코드의 모든 부분에 대해서 작성을 하지는 않았고 새롭게 추가 기능을 개발할 경우에 테스트를 함께 작성하고는 했습니다. 하지만, 단순히 응답만을 as..

  • 앱 스토어 인앱결제 서버 알림 Signature 검증 구현기 (feat. X.509 인증서란?)

    안녕하세요, 오늘은 앱 스토어 인앱결제 시스템 구현을 위해 사용되어지는 App Store Server Notification에서 수신 받는 데이터를 검증하는 방법에 대해서 이야기 해보려고 합니다. https://developer.apple.com/documentation/appstoreservernotifications Apple Developer Documentation developer.apple.com App Store Server Notification 란? 앱 스토어에서 인앱결제에 대한 상태 변화들을 실시간으로 알려주는 Server to Server 서비스입니다. 구매, 취소, 환불, 갱신, 만료 등 인앱결제 상품에서 발생하는 이벤트들을 수신할 수 있습니다. 수신받는 서버는 수신된 데이터를 가지..

  • [SQLAlchemy]dict 타입의 값 변경을 감지하지 못하는 이슈, 트러블 슈팅

    안녕하세요, 오늘은 SQLAlchemy에서 지원하는 Mutation Tracking을 사용하던 중 겪었던 이슈에 대한 해결 과정을 공유하려고 합니다. 설명하기 앞서, Mutation Tracking이란 무엇인지 알아보겠습니다. https://docs.sqlalchemy.org/en/14/orm/extensions/mutable.html#module-sqlalchemy.ext.mutable Mutation Tracking — SQLAlchemy 1.4 Documentation Mutation Tracking Provide support for tracking of in-place changes to scalar values, which are propagated into ORM change events o..

  • [Django]검색 퍼포먼스를 향상하기까지의 과정

    [Django]검색 퍼포먼스를 향상하기까지의 과정

    어느 서비스든 마찬가지로 운영됨에 따라 누적으로 쌓이는 데이터들이 존재합니다. 저의 경우에는 메시지 테이블이 그러하였는데, 총 row가 약 50m을 넘었습니다. 따라서, 메시지의 검색 날짜기간을 길게 해둔다면 결과가 나오는데까지 15초 이상이 걸리기도 하였습니다. (첫 검색 이후에는 약 2초 내외로 걸렸습니다.) 실제로 검색 기능은 자주 이용되기 때문에 개선이 필요하다고 생각되어 Django에서 퍼포먼스를 향상시켜보기로 하였습니다. 1. 프로파일링이 먼저 테이블의 row수가 절대적으로 많기 때문에 당연히 검색은 느릴 것이라고 생각되었습니다. 하지만, 생각하는 것과는 다른 곳이 문제였던 일이 종종 있었기에 프로파일링을 앞서 진행하였습니다. Query Inspector, silk, cProfile, Debu..

  • [Python]파이썬 비동기 프로그래밍 동작 원리에 대해서 (feat. 이벤트 루프)

    [Python]파이썬 비동기 프로그래밍 동작 원리에 대해서 (feat. 이벤트 루프)

    안녕하세요, 오늘은 파이썬 비동기 프로그래밍 동작 원리에 대해서 알아보려고 합니다. 파이썬의 비동기는 이벤트 루프를 통해 동작하고 있다는 정도의 이해만 한 채로 개발을 하다 보니 문득 내부 동작은 어떻게 이루어지는지가 궁금하여 공부해보게 되었습니다. 또한 애초에 파이썬은 동기 방식으로 동작하도록 설계되었기 때문에 어떻게 비동기 프로그래밍을 지원하는지도 궁금했습니다. (Python은 3.4부터 asyncio가 표준 비동기 라이브러리로채택되었습니다.) 코루틴이란? (coroutine) 파이썬의 비동기 프로그래밍을 이해하기 위해서는, 먼저 코루틴에 대한 이해가 수반되어야 합니다. 이 글에서는 간단하게 설명하고 넘어가도록 하고, 추후 다른 포스팅에서 코루틴에대해 상세히 다뤄보도록 하겠습니다. 간단하게 설명하자..

  • 좋은 변수명을 짓는 것에 대하여 (feat. 읽기 좋은 코드가 좋은 코드다)

    개발자라면 늘 고민하게 되는 부분이 있습니다. 바로 "변수명, 함수명을 어떻게 지어야 할까?" 에 대한 이야기 입니다. 변수명을 짓는 것에 늘 고민이 많은 것은 사실이지만, 대부분은 습관에 의해 자주 사용한 변수명만 사용하게 되는 것 같습니다. 혹은 너무 생각을 많이한 나머지 잘 사용되지 않거나 어색한 네이밍이 나오기도 합니다. 대체 어떻게 지어야 명확하고 모두가 이해하기 쉬울까..라는 생각을 하다가 알게된 책이 있어 읽으면서 좋았던 내용을 정리해보고자 합니다. http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9788979149142 읽기 좋은 코드가 좋은 코드다 - 교보문고 더 나은 코드를 작성하는 간단하..