전체 글
nginx를 이용한 Node exporter basic auth (feat.prometheus)
Node-exporter는 Prometheus 모니터링에 쓰이는 컴포넌트중 하나입니다. 우리가 서버를 운영하다 보면, 하드웨어및 OS 리소스 등을 모니터링 해야 할 필요가 생깁니다. 그라파나-프로메테우스로 모니터링 하는 환경이라면 Node-Exporter를 사용하여 시스템 메트릭을 수집할 수 있습니다. 그런데, VPC등으로 네트워크 보안 등을 제한하지 않은 상태에서 그라파나나 프로메테우스로 메트릭을 수집하게 되면 이 경우, 누구나 접근 가능한 엔드포인트를 통해 중요한 서버 메트릭을 조회할 수 있게 되어, 보안에 취약점이 발생할 수 있습니다. VPC나 방화벽 등을 사용할 수 없을 때, 다른 네트워크에 있는 Node-Exporter 등과 같은 컴포넌트의 정보를 가져와야 한다면 모든 네트워크에서 접속할 수 있..
Java 가상 스레드(Virtual Thread) : SpringBoot에서 사용하기 -3
SpringBoot With Virtual Thread springboot 3.2 + 자바 21 버전부터 virtual thread를 사용할 수 있습니다. property 설정으로 AutoCofngiruation을 통해 활성화 할 수 있습니다. # virtual thread enabled/disabled spring.threads.virtual.enabled=true 위 조건을 활성화하게되면, SpringBoot Webserver AutoConfiguration에서 기본 스레드풀 대신 가상 스레드 풀을 이용한 톰캣, 제티 등이 활성화가 됩니다. @AutoConfiguration @ConditionalOnNotWarDeployment @ConditionalOnWebApplication @EnableConf..
Java 가상 스레드(Virtual Thread)의 이해: 주의할점, Scope Value, 구조화된 동시성 -2
가상 스레드 풀 사용시 주의할점. 가상 스레드가 가볍다고 해서 무조건 좋은것은 아닙니다. 다음과 같은 내용을 주의해야 합니다. 가상 스레드의 스레드풀을 사용할때에는 고정 풀 을 사용하면 안된다. 동시성을 제어하기 위해서 synchronized 키워드 대신 Lock을 사용하자 스레드 로컬에 용량이 큰 객체를 저장하지 말자. 1. 가상 스레드의 스레드풀을 사용할때에는 고정 풀을 사용하면 안된다. 가상 스레드는 고정된 풀 (newFixedThreadPool)을 사용하면 안됩니다. 지정된 한도 이내에 더 많은 가상 스레드를 만들지 못하기 때문입니다. 또한 1회용이기 때문에 풀에 담아 사용하지 말고, 그냥 생성해서 사용하는게 좋습니다. https://docs.oracle.com/en/java/javase/21/c..
Java 가상 스레드(Virtual Thread)의 이해: 종류, 설정, 사용법 - 1
JDK 21부터 (자바 21) 기존 플랫폼 스레드의 단점을 보완하고 동시 처리량을 높이기 위한 새로운 방식의 스레드가 도입됐습니다. 가상 스레드가 무엇인지, 기존 스레드와는 무엇이 다르고 어떻게 사용해야 하며 어떤점을 주의해서 사용하는지 정리해보았습니다. 1. Java 가상 스레드(Virtual Thread)와 기존 자바 스레드 스레드의 종류 스레드 유형: KLT vs. ULT 스레드는 크게 커널 수준 스레드(Kernel-Level Threads, KLT)와 사용자 수준 스레드(User-Level Threads, ULT)로 분류될 수 있습니다. 커널 수준 스레드(KLT): 스레드의 생성, 스케줄링 및 관리를 직접 OS 커널이 담당하며, 이러한 스레드는 OS에 의존적입니다. KLT는 자원 관리 및 멀티프로..
Postgresql 외래키 제약조건 없애고 데이터 초기화하는 방법
Postgresql을 사용할 때 마이그레이션, 리플리케이션 할 때나 테스트시 테이블을 수정하거나 데이터를 초기화할 때 외래키 제약조건때문에 복잡한 경우가 있습니다. MySQL에서는 SET FOREIGN_KEY_CHECKS 를 바꿈으로써 제약조건을 해제할 수 있는데요, -- foreign key 제약 체크(기본값) - 제약조건 체크함 SET FOREIGN_KEY_CHECKS = 1; -- foreign key 제약 미체크 - 제약조건 관계없이 데이터 조작 가능 SET FOREIGN_KEY_CHECKS = 0; Postgresql에서는 session_replication_role 명령어를 이용해서 제약조건을 해제할 수 있습니다. session_replication_role session_replication..
Springboot PSQLException: Unterminated dollar quote started at position $$ 해결방법
Springboot PSQLException: Unterminated dollar quote started at position $$ SpringBoot Junit5 환경에서, 일부 테스트 에만 sql 파일을 실행시켜 테스트 해야하는 경우가 있었습니다. 특정 sql 스크립트를 이용하여 테스트 하던 중 다음과 같은 오류를 만나 테스트가 실행되지 않는 문제를 해결한 방법입니다. Caused by: org.postgresql.util.PSQLException: Unterminated dollar quote started at position 62 in SQL CREATE FUNCTION random_age(age_in INTEGER) RETURNS INTEGER AS $$ DECLARE random_offse..
레디스를 활용한 분산 락(Distrubuted Lock) feat lettuce, redisson
레디스를 활용한 분산 락(Distrubuted Lock) 분산 락이란(Distributed Lock) 분산 락은 분산 환경에서 여러대의 서버와 여러 DB간의 동시성을 관리하는 데 사용됩니다. 일반적으로 분산환경이 아닌 DB 등과 같은 곳에서는 비관적 락 등을 이용하여 동시성을 제어할 수 있지만, 여러 대의 DB가 존재하는 분산 DB 환경에서는 동시성 문제를 해결할 수 없습니다. 분산 DB에서 비관적 락으로 해결할 수 없는 이유 성능 저하: 분산 환경에서의 비관적 락은 네트워크 지연, 노드 간의 통신 오버헤드 등으로 인해 더 큰 성능 저하를 초래할 수 있다 데드락 문제 네트워크 파티션 문제 두 노드 사이의 네트워크 연결이 끊긴다. 한 노드에서 데이터의 락을 설정했지만, 연결이 끊어진 노드에서는 이 락의 정..
MySQL Named Lock 사용법 with Spring Boot
목차 1. MySQL Named Lock 2. 사용법 - Named Lock Functions 2.1. GET_LOCK(lock_name, timeout) - 락 획득 시도 2.2. RELEASE_LOCK(lock_name) - lock_name으로 락 해제 시도 2.3. IS_FREE_LOCK(lock_name) - 락 획득 가능(사용 가능) 여부확인 2.4. IS_USED_LOCK(lock_name) - 락 사용중인지 여부 2.5. 네임드 락 중첩과 해제 2.5.1 네임드락이 관리되는 테이블 - performance_schema의 metadata_locks Table 2.6. 네임드락(Named Lock의) 단점 3. Spring에서의 구현 3.1. JdbcTemplate으로 구현 3.2. Entit..
프로메테우스, 그라파나, springboot 이용한 모니터링 with , security, docker
운영중인 서버의 모니터링을 위해, 프로메테우스 + 그라파나를 이용해서 메트릭을 수집하고 모니터링 하기 위한 설정 방법에 대해 정리합니다. 환경 kotlin SpringBoot 2.7.4 Spring actuator, Security with Jwt Auth & Basic Auth docker, docker-compose NCP ubuntu 18 linux 의존성 추가 plugins { id("org.springframework.boot") version "2.7.4" id("io.spring.dependency-management") version "1.0.14.RELEASE" kotlin("jvm") version "1.6.21" kotlin("plugin.spring") version "1.6.21"..
ubuntu, amazon linux2, centos7 도커 설치 명령어
ubuntu amazon linux2 cent os7 ubuntu 도커 설치 버전 Ubuntu 18.04 버전 확인 방법 lsb_release -a 결과 No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.5 LTS Release: 18.04 Codename: bionic Ubuntu 22.04 패키지 업데이트 sudo apt-get update 패키지 설치 sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common Docker의 공식 GPG키를 추가 curl -fsSL https://downlo..