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
no image
JDBC, JPA, Hibernate, Spring Data JPA
JDBC (Java Database Connectivity) : DB에 접근할 수 있도록 자바에서 제공하는 API (인터페이스) JPA ( Java Persistence API ) : 자바 ORM 기술에 대한 표준 명세이다. (인터페이스) Hibernate : JPA의 구현체 중 하나 Spring Data JPA : JPA의 구현체를 한 층 더 추상화하여 비즈니스 로직에 더욱 집중한다. 다만 DB의 독립적 개발은 어려워진다. Repository 인터페이스를 사용 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'mysql:mysql-connector-java:8.0.28' spring-data-jpa..
2023.09.28