no image
Jmeter STOMP test (WebSocket Samplers)
Jmeter STOMP test (WebSocket Samplers) jmeter plugins manager를 설치하고 WebSocket Samplers by Peter Doornbosch를 설치한다. BeanShell Sampler에 자바 문법을 작성할 수 있다. JAVA에서 특수문자(큰따옴표)를 String에 넣으려면 앞에 역슬러쉬를 붙여야 한다. 그래서 STOMP_SEND의 경우 { "type" : "talk" }은 { \\"type\\":\\"talk\\" } 다음과 같이 작성한다. ( 역슬러쉬 1개인데 1개로 작성하면 구글 Search Console에 파싱할 수 없는 구조화된 데이터 문제가 감지된다고 나와서 2개로 표현함 ) STOMP 프레임은 이전 글을 참고 Stomp protocol Sto..
2024.01.27
no image
Stomp protocol
Stomp Design Simple Text Oriented Messaging Protocol STOMP 디자인을 이끄는 주요 철학은 단순성과 상호 운용성으로 다양한 언어로 클라이언트와 서버 측 모두에서 쉽게 구현할 수 있는 경량 프로토콜로 설계되었다. 이는 특히 서버 아키텍처에 많은 제약이 없으며 destination naming, reliability, semantics 등의 기능들이 구현에 따라 다르다는 것을 의미한다. Stomp Frame STOMP는 신뢰할 수 있는 양방향 스트리밍 네트워크 프로토콜(TCP 등)을 기반으로 하고 프레임에 근거해서 통신하는 프로토콜이다. 클라이언트와 서버는 스트림을 통해 전송된 STOMP 프레임을 사용하여 통신하고 프레임의 구조는 다음과 같다. COMMAND hea..
2024.01.02
no image
python) asyncio/코루틴, 동시성과 병렬성
병렬성 (Parallelism) task1 ====== task2 ====== task3 ====== 실제 동시에 수행 동시성 (Concurrency) task1 === === task2 === === task3 === === 실제 동시에 수행하진 않고 여러 task를 진행 coroutine co(협동) + routine = 메인 루틴과 동등한 관계를 가진 루틴으로 메인 루틴과 함께 순차적으로 실행된다. asyncio 애플리케이션을 작성하는데 선호되는 방법이다. 서브루틴과 차이는 실행 후 종료되는게 아닌 대기(suspend) 상태가 가능하다는 것, 그래서 동등한 관계라 말한다. 별도의 쓰레드에서 실행되는게 아니므로 문맥 교환 비용이 발생하지 않는다. asyncio 코루틴을 기반으로 비동기 프로그래밍을 위..
2023.12.13
no image
java thread (자바의 정석)
자바의 정석(남궁성)을 읽으면서 Thread 싱글 코어에서는 멀티 쓰레드로 하나의 작업을 수행해도 싱글 쓰레드로 작업을 수행할 때 보다 더 시간이 걸린다. 이유는 th1 -> th2 -> th1 -> th2 의 순차 반복일 뿐이여서 오히려 context switching 비용만 추가로 생긴다. 멀티 코어에서는 효과가 있다. th1과 th2가 겹쳐서 수행될 수 있기 때문이다. (하나의 코어는 하나의 쓰레드를 실행한다는 전제) (여기서 쓰레드를 tomcat 쓰레드 풀의 쓰레드와 연관지어 생각하지 말자.) java가 JVM 에서 동작하므로 os에 독립적이라고 하지만 실제로 os 종속적인 부분이 몇 가지 있는데 쓰레드도 그 중 하나이다. JVM 의 쓰레드 스케쥴러에 의해서 어떤 쓰레드가 얼마동안 실행될 것인지 ..
2023.12.10
no image
Spring) Client와 WebSocket Server 사이를 중계하기
client와 웹소켓 서버 사이를 중계하기 = 웹소켓 서버이면서 클라이언트 역할을 수행한다. server1과 server2를 어떤 방법으로 어느 타이밍에 연결할지에 고민이 많았다. 방법에 있어서는 server2의 WebSocket Server는 다룰 수 없고 server2는 Stomp 프로토콜을 사용하고 있지 않은데 server1을 Stomp Client로 server2와 연결을 시도하며 삽질했고 타이밍에 있어서는 요청을 트리거로 server1과 server2를 연결하고 작업완료 시 연결을 종료하려 했으나 잘 안 됐었다. 결국, 구현은 server1과 server2의 ws연결은 spring websocket stomp 가 아닌 java-websocket 라이브러리를 사용했고 implementation '..
2023.12.04
no image
CLIP
CLIP(Contrastive Language-Image Pre-Training) https://github.com/openai/CLIP GitHub - openai/CLIP: CLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image CLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image - GitHub - openai/CLIP: CLIP (Contrastive Language-Image Pretraining), Predict the most releva.....
2023.11.26
no image
Stable Diffuision을 알아보자
* 파랑은 후에 공부할 것들 Stable Diffusion (안정적 확산) forward diffusion - 이미지에 무작위 노이즈만 남을 때까지 가우스 노이즈를 점진적으로 추가한다. 결국 어떤 이미지인지 식별할 수 없다. reverse diffusion - forward diffusion을 점진적으로 취소한다. 개와 고양이로 학습했다면 취소하는 과정은 개 또는 고양이가 나타나는 방향(drift)으로 흘러갈 것이다. Stable Diffusion 구조 Latent Space(잠재 공간) 512x512, 1024x1024와 같은 사이즈를 그대로 사용하면 연산이 너무 오래 걸린다. 그래서 잠재 공간으로 이미지를 낮은 차원으로 압축한 후 연산을 진행한다. (낮은 차원이란게 무엇인지) 암튼 압축되는 것인데 잠..
2023.11.21
no image
python GC(Garbage Collector)
python Garbage Collector 기본적으로 Reference Counting으로 해제하면서 Generational Garbage Collection이 세대별 임계점마다 동작하는 듯 하다. Reference Counting 참조하는 카운트가 0이 되면 garbage를 정리한다. Generational Garbage Collection 순환 참조의 경우 카운트가 0이 될 수 없는 문제를 해결할 수 있는 GC이다. 세대와 임계점이라는 개념이 있다. import gc print(gc.get_threshold()) #(700, 10, 10) 튜플의 첫 번째부터 0세대, 1세대, 2세대를 나타낸다. 0세대 객체의 수가 700개(임계값)를 넘지 않으면, 순환 참조를 비롯한 garbage들은 메모리에 할당..
2023.10.22
no image
spring mapstruct
mapstruct dto entity 사이를 변환하는 코드를 생성해주는 패키지다. //build.gradle dependencies { ... compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' //mapstruct를 lombok 보다 뒤에 implementation 'org.mapstruct:mapstruct:1.5.5.Final' annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final' ... } getter, setter, builder 등 lombok을 사용한다면 lombok 코드 생성이 먼저 실행된 후에 mapstruct가 동작해야..
2023.10.15