본문 바로가기

분류 전체보기847

SQLAlchemy AsyncSession으로 비동기 적용하기 개요 현재 서버 프레임워크로 FastAPI를 사용하고 있었고 SQLAlchemy는 1.3대 버전을 사용중이었다. 따라서 DB쪽은 여전히 동기형태로 작업이 진행되기 때문에 비동기 프레임워크의 장점을 제대로 살리지 못했다. 물론 database, peewee등 비동기 ORM이 존재하지만 팀 내 구성원간의 러닝커브등을 고려하여 기존에 사용하던 SQLAlchemy를 그대로 사용중이었다. 하지만 SQLAlchemy 1.4버전부터 비동기 처리를 지원하기 시작했고 그에 따라 마이그레이션을 준비하며 테스트하는 과정을 간단하게 담아본다. create_async_engine from sqlalchemy.ext.asyncio import create_async_engine engine = create_async_engine.. 2022. 3. 18.
바이낸스 회원가입하는 방법 총정리 개요 예전에 바이낸스(Binance)라는 해외 코인거래소 사이트의 회원가입 방법에 대해 포스팅한 적이 있습니다. 그 이후 한국에도 공식적으로 바이낸스 코리아라는 사이트가 생겼지만 2021년 한국에서 철수했다는 기사를 접할 수 있었는데요. 크게 달라진 점은 없지만 이전과는 사이트의 UI나 회원가입할 때 필요로 하는 정보들이 조금씩은 달라졌기에 최신의 정보를 제공하기 위해 다시 한번 바이낸스 사이트에 가입하는 방법에 대해 자세하게 포스팅합니다. 가입 방법 먼저 아래 링크를 클릭하여 바이낸스 회원가입 페이지로 접속합니다. https://accounts.binance.me/en/register 접속하면 위와 같이 국가를 선택하는 팝업창이 하나 뜨게 됩니다. 기본적으로 대한민국이 선택되어 있을텐데요. 아래에 있는.. 2022. 2. 9.
Spring Hibernate EventListener로 엔티티 변경 감지하는 방법 개요 현재 토이 프로젝트에 간단하게 CQRS 아키텍처를 도입해보고 있다. 따라서 쓰기DB, 읽기DB 총 2개의 데이터베이스가 존재하고 쓰기 요청이 오는 경우 쓰기DB에 데이터를 기록함과 동시에 SQS에 이벤트를 발송하고 있다. 그리고 읽기DB에서는 해당 SQS를 컨슈밍하고 있다가 변경 이벤트가 들어오면 내부적으로 동기화를 진행하는 형태이다. 위 요구사항에 따라 엔티티에 변경사항이 생긴다면 감지한 후 이벤트를 발생해줘야하기 때문에 관련 이벤트 리스너를 찾아봤는데, Hibernate의 EventListener를 활용하면 손쉽게 가능하다는것을 알게 되었다. JPA에서 이벤트 리스너를 제공해주지만 Hibernate의 기능을 사용해야 좀 더 세분화하여 활용할 수 있다고 하여 사용하게 됐다. (참고: https:/.. 2022. 1. 21.
Spring AWS SNS + SQS로 이벤트 처리하는 방법 개요 요즘 MSA, CQRS 등 아키텍처에 관한 흥미로운 주제들이 많다. 이러한 아키텍처적인 관점에서 항상 등장하는 부분이 바로 Event driven을 통한 loose coupling이다. CQRS를 예를 들어서 설명해보자. 데이터를 저장하는 명령 요청이 들어오면 쓰기DB에 데이터를 적재하고 읽기DB와의 데이터 동기화를 위해 메시지를 발행한다. 그리고 읽기DB에서는 메시지를 수신하여 데이터를 동기화시킨다. 만약 쓰기DB쪽 서버에서 직접 읽기DB 서버에 데이터 저장을 요청하는 형태라고 생각해보자. 이러한 경우 읽기DB 서버에 문제가 생긴다면 해당 문제는 쓰기DB 서버까지 전파된다. 따라서 쓰기DB는 단순히 이벤트를 발행하고 필요한 곳에서 해당 이벤트를 가져와서 사용하는 형태로 구성하여 각 서버간 의존성을.. 2022. 1. 18.
Spring Interceptor를 활용하여 JWT인증 구현하기 개요 모든 서버가 마찬가지이겠지만 개발을 하다보면 인증 관련된 로직을 단일화해서 사용해야할때가 오기 마련이다. 파이썬에서도 각 프레임워크에 맞게 작업을 해줬었는데 스프링에서는 크게 보면 Spring security와 Interceptor를 활용하여 작업할 수 있는 것으로 보인다. 이전 글(https://hides.tistory.com/1079)에서는 스프링 시큐리티 필터를 활용하여 인증 처리를 구현했는데 이번에는 인터셉터를 활용하여 인증 처리를 구현해봤다. 인터넷에서 그림을 찾아보다가 가장 이해하기 쉬운 그림인 것 같아서 가져왔다. 그림에서 나와있듯이 인터셉터의 경우 스프링 프레임워크단에서 제공해주는 기술이고 필터는 그렇지 않다. 따라서 인터셉터는 Servlet Container를 거친 이후에 실행되며 .. 2022. 1. 3.
당근 서버 밋업 1회 정리 당근마켓 밋업끝나고 게더타운에서 개인적으로 궁금했던 부분들을 당근/배민분들과 나눈 이야기를 정리합니다. 질문. 데이터베이스 테스트는 어떤 형태로 진행하는지. 테이블 DROP/CREATE 및 유즈케이스별 더미데이터를 넣는작업에 시간소모가 너무 크다. - 현재는 디비 테스트는 진행하지 않는다. 예전에는 유즈케이스별로, 예를 들어서 회원가입을 하면 어떠한 푸시알림이 가고 어떤 데이터가 저장되고 하는 일련의 행동자체를 묶어서 테스트했다. (BDD 말하는듯) 이러한 경우 테스트가 한번 돌 때 2시간 정도 걸렸다. - 테스트 데이터는 직접 케이스별로 필요한건 직접 다 넣어줬다. - 조회용 쿼리의 경우 생각해보면 테이블을 날리고 재구성하는 작업이 필요하지않다. 조회에 필요한 데이터가 있다면 해당 쿼리는 디비를 한번띄.. 2021. 12. 21.