Java Reflection & Reflection API Entrypoint
·
📘 Backend/Reflection
📚 Reflection이란?Java Reflection이란 짧게 요약하면 런타임 중, 어플리케이션의 클래스 및 객체에 관련된 정보에 액세스 할 수 있게 해주는 언어이자 JVM의 기능 입니다.보통의 프로그램은 실행 시 Input을 받아 Output을 반환합니다.반대로 Reflection으로 프로그램 작성 시 Input과 내부 소스 로직을 모두 입력값으로 간주해 그걸 분석하고 Output을 반환합니다.위 이유로 인해 Reflection을 이용하면 강력한 라이브러리,프레임워크,소프트웨어를 설계 할 수 있습니다.Java Reflection은 언어이자 JVM의 기능 중 하나이며, 런타임 시 classes와 objects를 추출할 수 있습니다.Reflection API를 통해 다양한 소프트웨어를 Flexible하..
CQRS(Command Query Responsibility Segregation) Pattern
·
📚 Data Architect/Design Pattern
📚 CQRS(Command Query Responsibility Segregation) PatternCQRS(Command Query Responsibility Segregation) 패턴은 DB로부터 읽기와 쓰기 작업을 분리하는 패턴입니다.이 패턴을 사용하면 어플리케이션의 성능,화장성,보안성을 극대화 시킬 수 있으며, 여러 요청으로부터 들어온 복수의 업데이트 명령에 대한 충돌을 방지할 수 있습니다.오늘은 프로젝트에 CQRS를 구현하기 전 CQRS가 무엇인지, 왜 사용해야 하는지, 사용하면 어떤 점이 개선되는지 먼저 공부해 보겠습니다.📚 CQRS 패턴을 사용하려는 이유CQRS를 채용하려는 이유는 현재 개발중인 로직중 RabbitMQ를 이용한 대규모 이벤트 데이터의 전처리 및 통계 처리와 RTSP St..
Virtual Thread
·
📘 Backend/Concurrency
📚 Virtual ThreadJDK에 정식 도입된 Virtual 스레드는 기존의 KLT(kernel-level 스레드)와 ULT(user-level 스레드)를 1:1 매핑하여 사용하는 JVM의 스레드 모델을 개선한, 여러 개의 가상 스레드를 하나의 네이티브 스레드에 할당하여 사용하는 모델이며, 경량 스레드로, JDK 19에서 미리보기의 일부로 처음 공개 되었습니다. 가상 스레드는 OS 스레드에 비해 매우 적은 자원을 사용하여 수천 개의 스레드를 효율적으로 실행할 수 있도록 설계되었고,이를 통해 고성능 서버 애플리케이션이 더 높은 동시성을 쉽게 구현할 수 있으며, 전통적인 스레드 풀의 복잡한 설정 없이도 많은 작업을 동시에 처리할 수 있습니다.📚 Java Thread와 OS Thread와의 관계Java..
Redmine <-> NAS CIFS-Mount
·
💻 Server/Linux
📚 Redmine Synology NAS CIFS-Mount프로젝트 관리 툴로 Redmine을 써보고자 Redmine을 설치 후 Redmine 에서 사용하는 데이터들은 NAS에 저장하고 싶어 연동했던 기록을 작성합니다.현재 제 서버 환경은 별도의 서버에 Redmine을 NAS의 OS에 설치하는 것이 아닌 Docker-Compose로 올려뒀고, DB는 NAS 내부에 세팅 해두었습니다.원래 DB도 별도의 서버에 했었지만, Redmine 내부 앱의 파일과 Redmine 개별 프로젝트에 올리는 "파일" 탭의 파일의 저장 위치가 달랐고,1개는 앱 내부에서 DB로, 1개는 앱 외부에 특정 디렉터리로 저장이 되어 있었습니다.그래서 앱 내부에 저장되는 파일(DB)은 NAS 내부에 DB를 설치하여 그곳에 저장하게 해..
Thread-Per-Task Threading Model
·
📘 Backend/Concurrency
📚 Blocking I/O블로킹 방식의 I/O를 사용하는 어플리케이션에서 응답 시간이 긴 블로킹 I/O 연산이 포함되어 있다면, 아무리 많은 스레드를 생성하더라도 근본적으로 성능 문제가 발생할 수 있습니다.긴 블로킹 연산으로 인해, 스레드가 I/O 작업이 완료될 때까지 대기하면서 사용 가능한 CPU 코어가 점차 유휴 상태가 됩니다. 결과적으로, 이러한 블로킹 호출이 계속 발생하면 서버의 전체 성능이 저하되고 모든 요청 처리에 영향을 미치게 됩니다.이번 글에서는 블로킹 I/O 연산이 있어도 어플리케이션의 전체 성능을 최적화하기 위해 CPU 자원을 더 효과적으로 활용할 수 있는 다양한 방법들을 알아보았습니다.📚 Thread-Per-Task Threading Model(작업 단위 스레딩 모델)위에서 말했듯..