no image
python) asyncio/코루틴, 동시성과 병렬성
병렬성 (Parallelism)task1 ======task2 ======task3 ======실제 동시에 수행 동시성 (Concurrency)task1 === === task2 === === task3 === ===실제 동시에 수행하진 않고 여러 task를 진행coroutineco(협동) + routine = 메인 루틴과 동등한 관계를 가진 루틴으로 메인 루틴과 함께 순차적으로 실행된다.asyncio 애플리케이션을 작성하는데 선호되는 방법이다.서브루틴과 차이는 실행 후 종료되는게 아닌 대기(suspend) 상태가 가능하다는 것, 그래서 동등한 관계라 말한다.별도의 쓰레드에서 실행되는게 아니므로 문맥 교환 비용이..
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
mapstructdto entity 사이를 변환하는 코드를 생성해 주는 패키지다.//build.gradledependencies {... 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
no image
spring lombok SuperBuilder
SuperBuilder 생성 코드 @SuperBuilder @ToString public class BuilderTestDto { private String one; private String two; } ====================== @SuperBuilder @ToString(callSuper = true) public class BuilderTestDto2 extends BuilderTestDto{ private String three; } 부모와 자식 둘 다 붙여야하고 사용했을 때 컴파일 된 코드는 아래와 같다. public class BuilderTestDto2 extends BuilderTestDto { private String three; protected BuilderTestDt..
2023.10.08
no image
spring mongodb repository
mongodb connecting // application.properties spring.data.mongodb.host= ~~ spring.data.mongodb.port=27017 spring.data.mongodb.database=test spring.data.mongodb.username=root spring.data.mongodb.password=1234 spring.data.mongodb.authentication-database=admin authentication admin 설정 없을 시, authentication 관련 예외가 발생했다. Collection 정의 @Document(collection = "testCollection") @Getter @Setter @ToString pu..
2023.10.01