본문 바로가기

All

(14)
[아이디어] 대용량 앱푸시 예약발송 기능 어떻게 만들까? 앱 푸시 메세지 발송 기능을 만들어야 한다면, 그리고 예약시간에 정확히 발송해야 한다면? 어떻게 설계를 해야할까? 물론 내가 말하는 모든 가설은 대용량/대량 트래픽을 기본으로 하고있다. 따라서 좀더 고민을 해야하는 포인트들이 많다.우선은, 기본적인 것은 카프카 큐를 이용해, 발송대상 이벤트를 받고 해당 이벤트를 컨슘하며, 푸시를 보내는 설계는 기본일듯하다. 여기서 가장 큰 문제는 바로 예약 발송을 어떻게 구현을 할까이다..이 부분이 상당히 어렵기도하고 까다롭기도 하다. 예약 발송 구현을 위한 방법은 다양하다. 가장 합리적이고, 괜찮은 방법을 몇개 생각해 봤다. 1) 레디스의 ZSET을 이용하는 방법이다.레디스의 ZSET는 SORTED SET으로 키값을 정렬하여 리스트로 가지고있다. 이 키값을 범위조회로 ..
[아이디어] AI끼리 싸움을 붙이면.. 가끔씩 생각한적이 있다, AI끼리 썰전을 펼치고, 그걸 지켜보면 얼마나 잼있을까??내말이 맞네, 네말이 맞네 하며 인간처럼 치고박고 하는 것을 지켜보는 관음증 환자가 되면 얼마나 짜릿한 느낌일까!!! AI모델은 각각 특색이 있다. 어떤분야에 더 집중하여 학습을 시켰는지에 따라서, 모델별로 더 답변을 잘 주는 부분이 미세하게 존재한다.그렇기 때문에, AI모델 하나만 선택해서 사용하는것보다는 여러 AI모델들을 늘어놓고, 질문을 모든 AI모델에게 하는 방법이 더 좋은 정보를 얻을수있지 않을까? 생각한적이 있다. 이런 방식에 가장 적합하다고 생각한 아이디어가, AI들끼리 구성된 개발팀을 만들면 어떨까? 라는 생각이다. 그래서 바로 만들어 봤다.서비스 이름은 'My Dev Team' !!! AI모델별로 '친절하고..
[아이디어] 코틀린의 Delegate를 이용한 ReadableMap 구현에 대해서 가끔 Api의 RequestBody로 Map객체를 받아야할 필요가 있다. Api의 RequestBody의 필드값들이 가변적이거나, 요청에 따라 바뀌는경우등의 케이스에 유연하게 대응하기위해서,Map객체를 받게 구현을 할때가 있다. 이경우는 사실 코드상에서의 유려한 흐름으로 읽히는 코드는 포기해야한다.Map req 이런 객체에서 req.get("name"), req.get("age")등으로 꺼내써야 하고,값이 Any 타입으로 선언되어있기 때문에, 캐스팅도 해야하는 코드가 덕지덕지 붙게 됨에 따라,깔끔하지 못하고,개발자가 class로 구성된 DTO와 달리 필드를 바로 확인할수가 없고,문서나 주석등에 의존하거나 코드 전체를 훝어야 한다.... 이런 문제를 문득,코틀린의 Delegate를 사용하여, Map을 개발..
[아이디어] Actuator와 RateLimiter의 능동적 동작에 대해서 우리는 요청수를 제한하기위해 RateLimiter을 사용한다. 주로 많이 사용하는 라이브러리로는 Resilience4j인데, 사용법은 결국 초당 몇건(TPS)가 넘으면 요청을 막을래!로 설정을 셋팅하여 사용 한다.해당 max tps를 설정하기위해서는 성능테스트를 거쳐, 값을 측정하고, 예측에 의한 정적인 max tps를 설정하게 된다. 물론 이 정도의 기능도 상당히 프로덕션 서비스에서는 많이 유용하지만, 그 측정값이라는것이 정확하지 못하고, 여러 노드로 이뤄지거나, 환경이 다르거나에 따라 갭이 상당할수도있다. 이런 경우,프로덕션 환경에서는 시스템에 부하를 줄정도로 더 요청을 받거나,또는 시스템을 100% 사용하지 못하는 선에서 요청을 거부하게 RateLimiter가 동작하기도 한다. 이런 부분을 어떻게 ..