본문 바로가기

전체 글845

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.
FastAPI에서 이벤트 다루는 방법 개요 상황에 따라서 이벤트를 발생시킬 필요성을 느낄 때가 있다. 하나의 메소드가 너무 많은 책임을 가지고 있어서 책임을 분리하고 싶을 경우, 너무 많은 객체와 연관되어 있어서 의존성을 분리하고 싶을 경우 등 이벤트로 처리해야하는 상황이 심심치 않게 발생한다. 스프링의 경우 ApplicationEventPublisher라는 인터페이스가 존재하고 해당 인터페이스를 사용하면 개발자는 별다른 설정을 해줄 필요 없이 이벤트를 발행할 수 있다. (참고: https://hides.tistory.com/1084) 요즘 스프링을 꾸준히 공부하고 있는데, 스프링에는 위처럼 이벤트를 다루는 인터페이스뿐만 아니라 엔터프라이즈 레벨의 아키텍처를 설계할 때 도움이 될만한 기능이 기본적으로, 또는 라이브러리 형태로 제공해주는 경우.. 2021. 12. 15.
바이낸스에서 업비트로 코인 전송 출금 하는 방법 개요 바이낸스에서 업비트로 코인 전송하는 방법에 대해 설명합니다. 여러가지 코인이 존재하지만 일반적으로 코인 전송은 속도가 빠른 트론(TRX) 또는 리플(XRP)로 전송을 진행하는데요. 트론의 경우 전송료도 1트론이기에 상당히 저렴하다고 볼 수 있습니다. 따라서 본 포스팅에서는 트론을 통해 바이낸스에서 업비트로 코인을 전송(출금)하는 방법에 대해 다뤄봅니다. 전송 방법 먼저 전송할 코인을 바이낸스에서 구매하여야 합니다. 코인 구매는 휴대폰 바이낸스 어플에서 진행합니다. (웹에서 해도 상관 없음) 먼저 바이낸스 어플을 키고 하단 5개의 탭(홈/시장/거래/선물/지갑) 중 시장 버튼을 누르고 위처럼 TRX를 입력합니다. 그렇다면 위처럼 여러개의 보기가 나올텐데 본 포스팅에서는 BNB를 통해 구입할 예정이므로 .. 2021. 10. 29.