전체 글 38

Workload Management Platform 인증 모듈 구현

환경 설정Dependenciesimplementation 'org.springframework.boot:spring-boot-starter-web:3.4.2'implementation 'org.springframework.boot:spring-boot-starter-security:3.4.2'implementation 'io.jsonwebtoken:jjwt-api:0.11.5'runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5'runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.5'Spring Boot, Spring Security 기반으로 설계하였으며, JWT(Json Web Token)를 이용한 인증 방식을 채택하였습니다. 모듈 설계인증 ..

Back-end 2025.03.18

Java Reflection API

DTO Deserialize / 서비스 호출 시 loadClass()와 함께 일어나는 Java Reflection에 대하여 Binding각종 변수들이 더 이상 변경되지 않는 값으로 구속되는 것.변수가 타입에 의해 데이터형이 확정되어 메모리 주소를 가리키거나 값을 가지거나 호출될 함수를 결정하는 과정.정적 바인딩 vs 동적 바인딩정적 바인딩(ex. Method Overloading)컴파일 시점(compile-time)에 결정됨.컴파일 시점에 비용 발생.동적 바인딩(ex. Method Overriding)런타임(run-time)에 결정됨.실행 시점에 비용 발생. Java Reflection APIJava의 Reflection API는 runtime에 아직 결정되지 않은 클래스에 접근하여 클래스의 메타데이터,..

Back-end 2025.03.07

Query 최적화: Indexing

Query 최적화: Indexing 및 EXPLAIN으로 Query Plan 확인1. 단일 인덱스 (Single Index)특징하나의 컬럼에 대해서만 생성하는 인덱스단순 조회 및 WHERE 절에 하나의 조건만 존재할 때 효과적B-Tree 자료구조로 구성되어 빠른 탐색 가능장점조회 성능 향상간단한 쿼리 최적화에 적합예시SELECT * FROM users WHERE username = 'dohyun';2. 복합 인덱스 (Composite Index)특징여러 컬럼을 묶어 생성하는 인덱스WHERE 절에 여러 조건을 가진 쿼리에 효과적복합 인덱스의 순서가 중요하며, 중간 컬럼을 기준으로 단독 조회는 불가능주의사항컬럼의 Cardinality(고유값 비율)가 높은 순으로 컬럼을 지정하는 것이 효율적인덱스에 정의된 컬..

Back-end 2025.03.06

Spring Boot 3.4.2에서 GraphQL 도입 시 호환성 이슈

Spring Boot 3.4.2에서 GraphQL 도입 시 호환성 이슈UTM 0.1.0을 Spring Boot 3.4.2 버전에서 개발 중기존의 REST API 대신 GraphQL을 도입하는 과정에서 호환성 이슈가 발생.문제GraphQL 사용 시, resource/schema.graphqls에 등록된 type, query, mutation을 올바른 경로에서 찾을 수 있어야 함.그러나 GraphQlAutoConfigurator가 이를 제대로 매핑하지 못해 Spring Boot 애플리케이션 실행 시 첫 로그에 Unmapped fields로 Query, Mutation들이 나타나는 이슈.이로 인해 정상적인 매핑이 불가한 상태원인GraphQLQueryResolver와 GraphQLMutationResolver ..

Back-end 2025.03.05

X11 설정 이슈 정리

Windows(client) - X server(Xming), GUI 표시,DISPLAY 환경변수가 localhost:0.0 으로 설정되어있어야 함. Linux(server) - X client(xauth), GUI 앱 실행,DISPLAY 환경변수가 localhost:10.0 등으로 설정되어 있어야 함. 중요한 점은DISPLAY 환경변수는 사용자가 직접 setting 하는것이 아님!! (특히 서버는 더더욱) 처음엔 잘 몰라서 /etc/environment 등에 DISPLAY 변수를 넣어놓는 짓을 하였으나 X client 입장에서는 세션이 바뀌면서 10, 11, 12 ... 이런식으로 증가하며 할당하기 때문에 직접 건드는 변수가 아님.client에서 ssh -Y 또는 -X 접속 시 서버측 sshd가 자동으..

Back-end 2025.02.21

HPC 환경에서 SLRUM -> K8S 마이그레이션 연구

[기존]slurm 이라는 오픈소스를 활용하여 HPC job을 스케줄링.(시뮬레이션, 검증, DFT 등의 작업을 수행할 때 수억 개의 트랜지스터, 게이트, 배선, 테스트 패턴 등을 메모리에 로드해야함, 대부분의 EDA툴이 대량의 데이터를 캐싱 및 실시간 연산 수행 - 리소스 사용량이 엄청남 -> 베어메탈 서버에 메모리 4TB씩 꼽고 사용중..)문제점: Priority에 따른 scheduling 로직 고도화 및 세부 job 상태 monitoring을 위한 TaskManager 모듈 추가구현.이에 따라 관리 point가 TM, Slurm 두군데가 되어버림. 이를 k8s 전환을 통해 하나의 아키텍처에서 관리 목표 (k8s crd 활용)베어메탈 vs VM vs 컨테이너(K8S)방식장점단점반도체 EDA 환경에서 적..

Kubernetes 2025.02.14

Java Compressed Class Space

JVM 의 메모리 구조는- static (지역변수, 매개변수, 참조변수 등)- heap (런타임에 동적으로 할당되는 객체들 map, 배열, 객체 인스턴스 등)- metaspace (class 의 메타정보들) 크게 세 영역으로 구분하고 metaspace 에 속하는 compressed class space 라는 놈이 존재. metaspace 는 클래스 런타임 정보들을 보관하는 공간으로 method meta, runtime annotation 등 클래스의 런타임 관련 정보들을 담고 compressed class space 는 클래스 메타정보를 보관.  따라서 한꺼번에 많은 수의 class 를 로딩할 때 부하가 가는 곳은 일반적으로 compressed class space (클래스의 메타 압축정보를 저장하기 때..

Back-end 2024.09.28

Complete Javascript course Summary

Summary Udemy - Complete Javascript Course by Jonas Schmedtmann 강의를 듣고 각 Section별 요약을 기록. Section 2 & 3 - JS Funcdamentals JS 기본 문법에 대한 section. 변수 선언시 let 과 const 중 기본적으로 const 사용하는 것에 익숙해질 것. Javascript로 웹앱을 짤 때 DOM을 컨트롤하는 방식은 대부분 Event Listener를 정의, Publisher - Subscriber 패턴을 이용하므로 const로 선언. 무분별한 let 변수 사용은 코드를 지저분하게 함. "use strict" 를 통해 strict mode activate. accidental error 등의 에러 발견을 쉽게 해주..

Front-end 2022.06.03

Kubernetes - Istio

2021-09-16 Kubernetes Istio study Summary 연구실 server - master에 Istio 설치 Istio sample app, service 배포 Istio dashboard 관찰 Istio 는 Application network 기능을 유연하고 쉽게 자동화 할 수 있는 networking layer의 service mesh 이다. 서비스 메쉬를 구현할 수 있는 오픈소스. 주요 특징 트래픽 관리 보안 모니터링 Istio 설치 Istio download curl -L https://istio.io/downloadIstio | sh - Move to Istio package dir, path 추가 cd istio-1.11.2 export PATH=$PWD/bin:$PATHI..

Kubernetes 2022.06.03

Minikube 실습

2021-04-30 우분투 VM 생성, Minikube 설치하고 deployment, service 배포 Summary 나의 local 환경에서 VirtualBox 에 ubuntu 이미지로 VM을 생성하고, 해당 VM에 docker와 minikube(worker, master가 통합되어 제공되는 교육용 kubernetes) 를 설치한 후, nginx web server를 돌리는 pod를 생성, 및 배포하도록 deployment 와 service 에 대한 yaml 파일을 작성해본다. 특히, 해당 nginx 웹 서버를 외부에서 접근 가능하도록 service의 NodePort 를 이용한다. VM생성 VirtualBox 에서 ubuntu18.04 version으로 VM을 생성하였음. 쉬우니까 이 과정은 생략한다..

Kubernetes 2022.06.03