본문 바로가기

Coding/설계 | 경험14

FastAPI에서 이벤트 다루는 방법 개요 상황에 따라서 이벤트를 발생시킬 필요성을 느낄 때가 있다. 하나의 메소드가 너무 많은 책임을 가지고 있어서 책임을 분리하고 싶을 경우, 너무 많은 객체와 연관되어 있어서 의존성을 분리하고 싶을 경우 등 이벤트로 처리해야하는 상황이 심심치 않게 발생한다. 스프링의 경우 ApplicationEventPublisher라는 인터페이스가 존재하고 해당 인터페이스를 사용하면 개발자는 별다른 설정을 해줄 필요 없이 이벤트를 발행할 수 있다. (참고: https://hides.tistory.com/1084) 요즘 스프링을 꾸준히 공부하고 있는데, 스프링에는 위처럼 이벤트를 다루는 인터페이스뿐만 아니라 엔터프라이즈 레벨의 아키텍처를 설계할 때 도움이 될만한 기능이 기본적으로, 또는 라이브러리 형태로 제공해주는 경우.. 2021. 12. 15.
FastAPI SQLAlchemy 연동하며 발생한 문제 정리 개요 기존과 다른 패러다임을 가진 비동기 프레임워크 FastAPI와 SQLAlchemy를 연동하는 과정에서 발생했던 문제들과 어떠한 형태로 해결했는지에 대해 다뤄본다. 사전 지식 SQLAlchemy는 scoped_session() 함수를 활용하여 Thread-local한 세션을 생성할 수 있다. 이 때 scopefunc 라는 인자에 특정한 함수를 콜백 형태로 넣어주게 된다면 세션 사용 시 아래와 같은 로직을 통해 세션을 관리하게 된다. session.registry.registry에 키/밸류 쌍의 딕셔너리를 생성한다. scopefunc에 넣어준 함수를 통해 키를 결정하고(가져오고) 해당 값을 통해 session.registry.registry에 접근하여 사용할 세션을 가져와서 사용한다. 추후 sessio.. 2021. 5. 24.
Stripe 결제 시스템 도입하기 1. 개요 기존 해외결제의 경우 아임포트를 통해 페이팔 결제 시스템을 사용하고 있었다. 사용상의 불편함은 없었지만 데이터 분석 결과 나름 치명적인 문제가 하나 발견되었는데, 바로 결제용 팝업 창이 새롭게 뜨는 문제였다. 이게 왜 문제가 되는 걸까? 데이터 분석팀을 통해 유저 행동을 분석해보니 결제창이 뜬 이후 이탈하는 빈도가 굉장히 높은 모습을 찾을 수 있었고, 이 또한 가설이지만 모달/팝업 없이 같은 페이지에서 카드 번호등을 입력하여 결제하는 방식을 제공한다면 보다 높은 결제를 유도할 수 있을 것이라 판단했다. 따라서 결제를 위한 모달 창이나 팝업이 뜨는것이 아닌 임베디드 형태로 페이지내부에 삽입할 수 있는 방법을 찾아보기 시작하였다. 그러다 찾아낸 서비스가 바로 Stripe이다. 이미 해외에서는 유명.. 2020. 12. 10.
Kollus 서비스를 통해 동영상 플랫폼 제작하기 1. 개요 사용자에게 영상을 제공하는 기능이 요구사항으로 등장하였다. 처음으로 살펴본 서비스는 AWS에서 제공하는 미디어 서비스였다. 타 플랫폼을 이용하게되면 해당 플랫폼에서 만든 규칙을 따라야하기 때문에 여러가지 제약사항이 발생할 수 있기에 AWS 서비스를 살펴봤었는데, 몇가지 사항들때문에 직접 구현하지 않기로 결정했다. 첫 번째로, 개발 기간이 늘어난다. 위 요구사항은 언제든지 변할 가능성이 충분한 요구사항이었고 영상을 제공하는 기능 자체는 매니지드 서비스의 장점으로 인해 손쉽게 구현이 가능하겠지만, 한번도 사용해보지 못한 서비스이기 때문에 개발 기간을 정확하게 산정하기가 어려웠다. 두 번째로, 녹화 방지 등 DRM기능이 필요했다. 하지만 그러한 기능까지 서칭하고 구현하기에는 시간적, 비용적인 무리가.. 2020. 12. 9.
Codelog 제작기 1. 개요 나는 시간이 날 때 마다 개발 관련 웹서핑을 한다. 이렇게 간간히 지식을 쌓는 것은 나름 좋은 습관이었는데, 몇가지 문제가 있었다. 각잡고 보는게 아닌 이상 하나의 글을 끝까지 보기가 힘들다는 것이다. 그래서 내 휴대폰 브라우저에는 항상 100개가 넘는 창이 열려있었다. 물론 끝까지 읽은 글들은 절반정도밖에 되지 않는다. 그래서 막연히 생각만 했었다. URL을 모아두는 Repository Site를 하나 만들면 참 좋을 것 같다고. 마침 어떤 토이 프로젝트를 해볼까 고민하던차였고 이번에 만들어보기로 했다. 원래 계획했던 기간은 2일이었는데 역시나 작업을 진행하면서 여러가지 트러블 슈팅을 직면하였고 결과적으로 4일 조금 넘게 걸려 현재는 성공적으로 배포를 완료한 상태이다. 위와 같은 생각의 흐름.. 2020. 1. 13.
Monolithic에서 MSA로의 전환기 1. 개요이전에 다니던 회사의 시스템은 하나의 모놀리틱 서버와 핵심 알고리즘을 수행하는 마이크로 서비스하나로 구성되어 있었다. 또한 PHP로 작성되어 있었는데, 입사 시점과 맞물려 Python으로의 스택 이전과 동시에 특정 도메인을 Microservice Architecture로 분리하는 계획이 잡혀있었다. 돌이켜보면 정말 즐거운 일이었고 챌린징한 업무였기에 많은 성장을 이뤄 냈던 작업이라고 생각한다. 요즘 MSA가 많은 주목을 받으며 인터넷에서도 쉽게 관련 정보를 찾아볼 수 있는데, 실제 실무를 진행하며 느꼈던 점과 과정에 대해 남겨본다. 또한 본 포스팅은 전환했던 과정을 실무 중점적으로 설명하는 포스팅이므로  Monolithic Architecture, Microservice Architecture에.. 2019. 12. 16.