본문 바로가기

분류 전체보기847

FastAPI에서 이벤트 다루는 방법 개요 상황에 따라서 이벤트를 발생시킬 필요성을 느낄 때가 있다. 하나의 메소드가 너무 많은 책임을 가지고 있어서 책임을 분리하고 싶을 경우, 너무 많은 객체와 연관되어 있어서 의존성을 분리하고 싶을 경우 등 이벤트로 처리해야하는 상황이 심심치 않게 발생한다. 스프링의 경우 ApplicationEventPublisher라는 인터페이스가 존재하고 해당 인터페이스를 사용하면 개발자는 별다른 설정을 해줄 필요 없이 이벤트를 발행할 수 있다. (참고: https://hides.tistory.com/1084) 요즘 스프링을 꾸준히 공부하고 있는데, 스프링에는 위처럼 이벤트를 다루는 인터페이스뿐만 아니라 엔터프라이즈 레벨의 아키텍처를 설계할 때 도움이 될만한 기능이 기본적으로, 또는 라이브러리 형태로 제공해주는 경우.. 2021. 12. 15.
바이낸스에서 업비트로 코인 전송 출금 하는 방법 개요 바이낸스에서 업비트로 코인 전송하는 방법에 대해 설명합니다. 여러가지 코인이 존재하지만 일반적으로 코인 전송은 속도가 빠른 트론(TRX) 또는 리플(XRP)로 전송을 진행하는데요. 트론의 경우 전송료도 1트론이기에 상당히 저렴하다고 볼 수 있습니다. 따라서 본 포스팅에서는 트론을 통해 바이낸스에서 업비트로 코인을 전송(출금)하는 방법에 대해 다뤄봅니다. 전송 방법 먼저 전송할 코인을 바이낸스에서 구매하여야 합니다. 코인 구매는 휴대폰 바이낸스 어플에서 진행합니다. (웹에서 해도 상관 없음) 먼저 바이낸스 어플을 키고 하단 5개의 탭(홈/시장/거래/선물/지갑) 중 시장 버튼을 누르고 위처럼 TRX를 입력합니다. 그렇다면 위처럼 여러개의 보기가 나올텐데 본 포스팅에서는 BNB를 통해 구입할 예정이므로 .. 2021. 10. 29.
Spring Data Redis로 레디스 연동하는 방법 개요 스프링에는 Redis와 연동하는 여러가지 방법이 존재하는데 Data JPA와 비슷하게 Data Redis라는 라이브러리를 제공한다. Lettuce와 Jedis 2가지 구현체를 통해 통신할 수 있는 방법이 있는데, Lettuce는 별다른 추가 설정없이 사용할 수 있지만 Jedis는 추가적인 의존성이 필요하다. 요즘에는 아래의 이유로 인해 Jedis보다 Lettuce를 쓰는 추세라고 한다. - Lecttue는 비동기로 요청을 처리하기 때문에 성능적인 이점이 있음 - Lecttue는 Jedis와는 다르게 별도의 풀을 생성하지 않아도 되기 때문에 개발이 단순함 - Jedis는 Thread-safe하지 않고 Spring boot 2.0부터 deprecated됨 본 포스팅에서는 Data Redis를 통해 스프.. 2021. 10. 19.
Spring ApplicationEventPublisher로 이벤트 처리하는 방법 개요 일반적으로 데이터베이스와 연결된 상황에서 코드를 작업할 때 일관성을 위해 트랜잭션을 걸어서 사용한다. (@Transactional) 만약 아래와 같은 코드가 있다고 가정해보자. @Service public class RoomService { @Transactional public void createRoom() { // 1. 룸 생성 // 2. 메일 전송 코드(외부 시스템) // 3. 유저 정보를 가져와서 소유한 룸의 개수 + 1 } } 주석을 보면 알겠지만, DB영속화를 하는 작업은 룸 생성/유저 소유 룸 개수+1 총 2개의 작업이 있다. 나머지 하나는 외부 시스템을 통해 메일을 전송한다. 1, 3번의 경우 @Transactional을 통해 하나의 트랜잭션으로 묶여있기에 둘 중 하나라도 오류가 발.. 2021. 10. 13.
Java Spring Boot 전역 예외처리하는 방법 개요 기본적으로 웹 어플리케이션 개발을 시작하는 시점에 미리 해두어야 할 선행 작업으로 생각하는 포인트가 몇가지 존재하는데, 그 중 하나가 바로 전역 예외처리이다. 예외이지만 예외가 아닌 것으로 간주해야할 것들, 예를 들어서 유저가 존재하는지 확인하는 코드에서 존재하지 않는다면 UserNotFoundException 예외를 던지는 행위와 같은 것들이다. 코드상에서는 예외로 처리하지만 서버에서 예외로 간주하기보다 정해진 Response 규격에 맞게 클라이언트로 돌려주는 형태로 처리한다. 또한 해당 예외는 Sentry(파이썬의 경우)등과 같은 에러 트래킹 툴에 보고되지말아야 하므로 관련된 처리 또한 해주는게 일반적이다. 물론 우리가 정의한 커스텀 예외를 제외하고는 당연히 에러 트래킹에 잡혀야한다. 최상위 C.. 2021. 9. 29.
ElasticSearch Ngram 활용하여 검색하는 방법 개요 많은 케이스가 있겠지만 보통 검색 용도로 ElasticSearch를 사용하는 것으로 알고 있다. MySQL의 경우 LIKE쿼리를 사용하여 검색을 할 수 있는데, %파이썬% 과 같이 앞뒤로 %를 사용하여 검색하는 경우 인덱스를 태우지 못하고 Full scan을 해버린다. 데이터베이스는 데이터베이스일 뿐 검색용도가 아니기에 애초에 적합하지 않다. 그렇다면 엘라스틱 서치를 사용하여 단순히 검색 쿼리를 날리면 바로 해결이 가능할까? 보통 DB를 접하다가 ES를 처음 접하는 사람들은 LIKE쿼리와 같이 Wildcard를 줘서 검색하는 방법을 찾곤 한다. (나또한 그랬다) 아무리 엘라스틱 서치가 검색 용도에 적합하다고는 하지만, 데이터베이스와 마찬가지로 와일드 카드를 통해 검색을 진행하면 속도 저하가 발생할 .. 2021. 8. 11.