컴퓨터/JAVA
-
Redis: n분 동안 키워드 랭킹? timeseries컴퓨터/JAVA 2025. 3. 15. 22:37
1시간 동안 메시지 수 그래프 등 기능을 만들기 위해somekey::keywords: 와 같이 정렬된 집합 (ZSET)을 주로 쓰고 있었다. 문제는 문서에 따르면 small size의 ZSET은 압축된 형식 (ziplist/listpack)으로 저장하지만,항목 개수 또는 항목 크기 제한을 초과하면 자동으로 Hashtable로 변환된다고 한다. (메모리 2배 이상 증가 가능) 그래서 TimeSeries 데이터 구조를 사용하면 빠르고 효율적으로 시간 기반 쿼리가 가능하다고 한다.redis-stack이나 enterprise 깔면 쉬운데 일단 wsl2 환경에서 redis-server를 로컬로 돌리고 있으니모듈을 설치해야 한다. (아니면 아래 명령어를 통해 모듈이 있나 확인)redis-cli> MODULE LIS..
-
Spring: Playwright exposeFunction (유튜브 라이브 채팅 읽기)컴퓨터/JAVA 2025. 3. 2. 23:24
Youtube.com 라이브에서 API 없이 실시간으로 채팅을 읽고 싶었다. Spring Boot 3.4 + Java 23 환경에서 Virtual Thread를 켠 상태이다.(새로운 동영상마다 scraper가 생성되는 방식)일단 유튜브 웹사이트가 동적으로 iframe을 불러온다. 처음에는 HTML에서 element를 계속 읽으면 될 것이라고 생각했다.하지만, 유튜브가 DOM을 재활용한다. (보이는 부분만 렌더링?)그래서 이 방식은 어느 순간부터 새로운 메시지를 잘 읽지 못하고, ID도 재사용되는 듯해 uuid를 써서메시지를 처리했는지 일일이 확인해야 했다. 그러면 어떻게 하면 제일 빠르게 읽을 수 있을까? 고민을 하다가 @MutationObserver를 알게 되었다.DOM 트리 변경사항을 감지할 수 있..
-
멀티스레드 Phaser - flexible 동기화 장벽컴퓨터/JAVA 2024. 6. 12. 23:57
소개java7 부터 도입된 Phaser. 멀티스레드 프로그래밍을 하다 보면 여러 스레드가 일정 시점에서 동기화되어야 하는 상황이 있었다.ex) 여러 스레드가 동시에 시작해야 하거나, 특정 작업이 완료될 때까지 기다려야 하는 경우 (Go의 sync.WaitGroup 느낌)java에서는 CyclicBarrier나 CountDownLatch를 사용할 수 있지만, 등록된 party 수를 동적으로 변경할 수 없다. Phaser그럼 Phaser는 뭔가?java.util.concurrent에 들어있고, CyclicBarrier와 CountDownLatch의 슈퍼 set 느낌이다.CyclicBarrier: 여러 스레드가 미리 정의된 지점에서 동기화되고 독립적 작업 반복 CountDownLatch: 하나 이..
-
Spring boot: Github Action CI에 JaCoCo + CodeCov컴퓨터/JAVA 2023. 12. 3. 18:32
할 것: Github Action을 이용하여 JaCoCo 테스트 커버리지 결과를 CodeCov 하는 과정 CI를 만들 것이다. 필요: Codecov - The Leading Code Coverage Solution Code coverage reporting solution for any test suite — Codecov gives developers actionable insights to deploy reliable code with confidence. about.codecov.io 위 사이트에 로그인해서 레포지토리를 선택한다. 그리고 CODECOV 토큰을 받아서 Github 설정 secret에 넣어준다. Github Action CI 최상위 폴더에서 java라는 폴더에 스프링 부트 프로젝트가 있..
-
Spring boot: 실시간 로그 수집하기 (Logstash, ELK)컴퓨터/JAVA 2023. 10. 31. 21:38
Logstash Kibana를 제외하고 ELK를 셋업 할 것이다. ElasticSearch는 어딘가 실행되고 있다고 가정하고 Logstash를 Docker에서 돌려서 Spring Boot 로그를 수집할 것이다. Logstash 셋업 Logstash 도커 파일을 만든다. version: '3.8' services: logstash: container_name: logstash image: docker.elastic.co/logstash/logstash:8.10.4 ports: - "5044:5044" - "5000:5000/tcp" - "5000:5000/udp" - "9600:9600" volumes: - ./logstash/config:/usr/share/logstash/config - ./logsta..
-
Java: spring boot AWS opensearch 연동하기컴퓨터/JAVA 2023. 10. 9. 18:38
@코드로 참고하기 우선 AWS 보안 자격 증명에서 IAM을 하나 만든다. https://us-east-1.console.aws.amazon.com/iamv2/home#/security_credentials us-east-1.console.aws.amazon.com dependencies spring boot v3.1 + gradle 기준; 버전이 까다로울 수 있다. 각각 패키지를 검색하면 elastic은 무슨 버전까지 지원하고 그런 표가 다 있으니 확인하면 편한다. dependencies { ... implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-aws', version: '2.2.6.RELEASE' // AWS..
-
Spring boot: ChatGPT API 사용하기컴퓨터/JAVA 2023. 10. 2. 19:15
GitHub - flashvayne/chatgpt-spring-boot-starter: a chatgpt starter based on Openai Official Apis. a chatgpt starter based on Openai Official Apis. Contribute to flashvayne/chatgpt-spring-boot-starter development by creating an account on GitHub. github.com gradle 기준, 라이브러리를 추가한다. implementation 'io.github.flashvayne:chatgpt-spring-boot-starter:1.0.4' src/resouses.yml 에 아래와 같은 설정을 추가한다. (gpt-3.5-..
-
Java: Z Garbage Collection (ZGC)컴퓨터/JAVA 2023. 1. 15. 15:14
ZGC Main - Main - OpenJDK Wiki wiki.openjdk.org 오늘은 Z Garbage Collection에 대하여 공부한 대로 글을 써본다. Java 11 부터 실험적으로 추가되어 Java 15에서는 어느새 Production Ready (PR) 상태까지 온 미래 GC 후보라고 볼 수 있다. (Z의 의미는 아무 뜻도 없다고 한다.) 목차는 다음과 같다. Introduction (소개) Basics of ZGC (ZGC 기본 지식) ZGC phases (ZGC 단계) Concurrent reference processing in ZGC (concurrent 레퍼런스 처리 in ZGC) Advanced Topics (심화 주제) Conclusion (결론) ◆ Introduction..