반응형

분류 전체보기

    @Transactional이 동작하지 않는 이유

    개발을 elasticsearch, ddb, redis, mongo등을 사용하여 하다보면 가끔 rdb 자체에 transaction 기능이 너무 부러울 때가 있다. transaction은 '데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위를 뜻한다' 사전적 의미와 같이 하나의 작업 단위의 묶음으로 작업이 실패하였을 때 롤백을 할 수 있어 데이터의 완결성을 지켜줄 수 있는 무기이다. 하지만 트랜잭션이 정상적으로 동작하지 못하는 경우가 있는데 이를 제대로 알고 사용하지 못하면 문제가 된다. 동작방식 우선 트랜잭션은 기본적인 동작방식은 AOP의 대표적인 사례라고 할 수 있듯이 AOP로 동작한다. Aop는 핵심기능이 아닌 반복되는 부가적인 기능들을 핵심기능에서 벗어나서 더욱더 핵심기능이 객체지향적인 동작을..

    [카카오][세미나] Webflux로 막힘없는 프로젝트 만들기 - 정리

    Spring Mvc - 하나의 요청에 하나의 쓰레드만이 사용되기 때문에 직관적 - 요청 하나의 응답이 길어지게 되면 쓰레드 하나가 계속 붙잡히고 이렇게 쓰레드들이 계속 밀리게 되면 쓰레드풀이 고갈되어 전체 시스템에 문제가 발생 Spring Webflux - 외부 시스템의 응답이 늦어져도 쓰레드가 홀딩되는 문제를 예방할 수 있다. - reactor로 개발된 코드가 circuit breaker를 연동하는데 더욱 용이하다는 장점이 있다. Reactor Meltdown - webflux는 netty의 이벤트 루프 방식을 차용한 방식으로 queue에 쌓인 이벤트를 event loop 쓰레드가 이를 처리하는 방식으로 쓰레드풀 고갈 문제를 발생하지 않음 - mvc의 기본 업무 단위는 요청 webflux는 이벤트 - ..

    Line 세미나. Redis Pub/Sub을 사용해 대규모 사용자에게 고속으로 설정 정보를 배포한 사례

    개요 - Line Live chat은 Akka로 동작하며 client와 server사이에는 웹소켓으로 동작 - 120대의 채팅 서버와 사이의 커뮤니케이션은 redis pub/sub을 사용 - 채팅의 임시데이터는 레디스에 저장하고 영속 데이터는 정규화해서 배치를 통해 mysql에 저장 - 유저와 시스템을 통해 일부 코멘트를 제어하기도 함 기존 아키텍처 소개 - 방송자가 시청자를 차단하는 경우 차단된 시청자의 코멘트를 해당 방송에서 보여지지 않도록 하는 기능이 있다. - 방송자가 api에 특정 사용자 차단을 요청하면 block 정보를 디비에 저장하고 chat internal api서버에 차단 정보를 전송한다. - 전송 받은 internal 서버는 정보를 mysql에 저장한다. - 웹소켓은 로컬캐시를 뒤지고 ..

    Line 세미나. 대규모 음악 데이터 검색 기능을 위한 Elasticsearch 구성 및 속도 개선 방법 - 2. 클러스터 튜닝

    문제상황 - cms 이외에도 외부에 api server를 열어서 데이터를 저장할 수 있도록 열어줬는데 데이터 부하가 되면서 elasticsearch에 부하가 오고 data node가 100프로 되는 등 문제가 발생된다. - 처음에는 쿼리 튜닝등의 방식으로 문제를 해결하였으나 data node의 cpu가 100프로가 되는등의 문제가 계속 유지되었다. - 데이터 노드를 늘림으로서 검색을 여러 서버로 분산하기 때문에 검색 속도를 늘릴 수 있었다. 하지만 비용이 너무 많이 들었다. - 어느 회사든지 간에 끊임 없는 수평확장은 어렵다. 해결방안 - shard와 replica를 구성하여 부하를 여러 노드로 분산하고 가용성을 늘림 - shard와 replica는 일반적인 규칙이 없다. - 상황에 따라 어떤 shard..

    Line 세미나. 대규모 음악 데이터 검색 기능을 위한 Elasticsearch 구성 및 속도 개선 방법 - 1. 검색 쿼리 개선

    - 발표자 : Taku Tada 시스템 상황 - 유저가 곡을 검색 할 시 meta search api server에 요청이 들어오고 Elasticsearch에 검색을 요청한다. - 8천 500만건의 데이터가 엘라스틱 서치에 들어가 있다. - 지금 발표하는 내용은 음악에 대한 검색과 책 데이터등에서 활용될 수 있다고 생각한다. - 기존에 검색에 사용되던 플드는 오직 Track Name 하나 뿐이었는데 추후 기능 피처로 트랙이름, 부가적인 트랙정보, 앨범이름, 아티스트 이름, 레이블 프로덕트 코드, ISRC와 같응ㄴ 데이터를 조회 조건으로 같이 걸어야했다. 이로인해 기존에 1초 걸리던 검색이 5초 정도의 시간으로 증가하게 되었다. 느렸던 이유 - 기존에는 keyword 타입으로 와일드 카드를 이용해서 조회를..

    Redis pub/sub 기능을 이용한 여러 서버 메시지 관리

    지금까지 SimpleMessageBroker, Stomp등 기본적인 것들에 대해 많이 공부를 했다. 그럼 실제 사례를 가정해보고 코드를 만들어 보자. 사례 고객이 주문을 하고 배달 시작을 누르면 기본시간을 받고 변경된 시간을 주기적으로 업데이트 받으며 같은 id로 로그인한 다른 디바이스에서도 subscribe시 같은 배달 예상시간을 안내받을 수 있도록 하고 배달이 종료되면 alert을 내려주는 코드를 만들어보자. 1. client에서 stomp서버로 connect를 한다. 2. user별 메시지를 받을 수 있는 /user/topic/data, 모든 broadcast message를 받을 수 있는 /topic/message를 subscribe한다. 3. 초기에 connect(주문시작)되면 redis에 저장..

    Spring WebSocket Stomp 메시지 보내기 - 2. specific user

    이전 글에서 broadcast로 메시지를 보내는 것에 대해 공부해봤다. 그럼 이제 특정 유저에게 메시지를 보낼 수 있는 방법에 대해 알아보자. https://wedul.site/694 Spring WebSocket Stomp 메시지 보내기 - 1. broadcast @Controller public class GreetingController { @MessageMapping("/hello") // simple broker를 사용하려면 Broker 설정에서 사용한 config에 맞는 값을 사용해야한다. @SendTo("/topic/greetings") public Greet.. wedul.site 설정 우선 messgeBroker를 통해서 특정 유저와 메시지를 주고 받을 수 있는 prefix 설정이 필요하..

    Spring WebSocket Stomp 메시지 보내기 - 1. broadcast

    @Controller public class GreetingController { @MessageMapping("/hello") // simple broker를 사용하려면 Broker 설정에서 사용한 config에 맞는 값을 사용해야한다. @SendTo("/topic/greetings") public Greeting greeting(HelloMessage message) { return new Greeting("Hello! " + HtmlUtils.htmlEscape(message.getName())); } } 이전 공부에서 SimpleBroker관련해서 알아봤다.(https://wedul.site/693) SimpleBroker로 알아보는 WebSocket Massage Broker Simple Mes..

    SimpleBroker로 알아보는 WebSocket Massage Broker

    Simple Message Broker simple broker는 클라이언트에서 전달 받은 subscription을 메모리에 저장하고 연결된 client에게 메시지를 보내는 역할을 한다. 하지만 문서에 보면 알수 있듯이 제공하는 일부의 기능만 있으며 간단한 메시지 전송 루프에 의존하며 클러스터링에 적합하지 않다. 이에 대한 대한으로 RabbitMQ와 같은 여러 message broker를 사용할 수 있다. The simple broker is great for getting started but supports only a subset of STOMP commands (it does not support acks, receipts, and some other features), relies on a si..

    Spring webSocket with stomp 기본 개념 정리

    웹 소켓 관련하여 정리가 필요하여 spring document 내용을 발췌 하여 필요한 부분만 정리했다. 공유용 보다는 개인적인 정리용으로 크게 도움이 되지 않을 수 있다. 출처 : https://docs.spring.io/spring-framework/docs/5.2.6.RELEASE/spring-framework-reference/web.html#websocket 웹 소켓 소개 웹소켓 프로토콜은 웹 애플리케이션을 위한 새로운 기능으로써 클라이언트 양방향 통신의 오랜 역사를 가지고 있다. HTTP와는 다른 TCP 프로토콜이지만 HTTP에서 동작가능하게 디자인 되었고 80, 443 포트를 사용하며 방화벽규칙을 재사용할 수 있도록 되어있다. 일반 HTTP 요청에 Upgrade 헤더를 포함한 reqeust를..

반응형