BackEnd 85

[Monitoring] Loki와 Promtail이란?

1. 왜 로그 📄 모니터링이 필요할까? 서버는 항상 다양한 로그를 남깁니다.예기치 못한 예외, 장애 상황, 특정 API 호출 내역, 성능 병목 등은 모두 로그를 통해 추적할 수 있습니다.👉 하지만 로그 파일을 직접 열어보는 방식은 실시간 대응이나 시각화에 불리합니다.그래서 Loki + Promtail 조합을 통해 로그 수집 → 전송 → 조회 → 시각화를 자동화합니다. 2. Loki란?📌 한 줄 정의Loki는 Prometheus처럼 동작하는 로그 수집 저장 시스템입니다. 🧠 주요 개념Log stream: label(key-value 쌍)로 구분된 로그 묶음Label: 로그의 속성을 표현하는 키값 (예: job, instance, filename 등)Query: 로그를 쿼리할 수 있는 Loki 전용 ..

BackEnd 2025.06.14

[Monitoring] Prometheus + Grafana 설치 및 연결(Docker 기반)

Spring Boot 애플리케이션을 모니터링하기 위해 Prometheus와 Grafana를 설치해보자.여기서는 Docker 단독 실행(docker run) 방식으로 간단하게 구성하는 방법을 설명한다.Spring boot 설정 참고✅ 1. 이미지 다운로드 (Docker Pull)먼저 필요한 이미지를 로컬에 다운로드하자.# Prometheus 이미지 다운로드docker pull prom/prometheus# Grafana 이미지 다운로드docker pull grafana/grafana✅ 2. Prometheus 설정 파일 작성Prometheus는 어떤 대상에서 어떤 경로로 지표를 수집할지 prometheus.yml 설정 파일을 필요로 한다.# ~/monitoring/prometheus/prometheus.y..

BackEnd 2025.06.08

[Monitoring] Prometheus와 Grafana란?

1. 왜 모니터링📈이 필요할까?현대의 웹 애플리케이션은 복잡하고 빠르게 변화하는 환경 위에서 동작합니다.예상치 못한 에러, 메모리 누수, CPU 과다 사용, 갑작스러운 요청 폭주 등 다양한 장애 상황이 발생할 수 있기 때문에, 서버의 상태를 실시간으로 관찰하고 지표화하는 모니터링 시스템은 필수입니다.Spring Boot 환경에서 대표적인 모니터링 조합은 다음과 같습니다.Prometheus (프로메테우스) → 지표 수집Grafana (그라파나) → 시각화2. Prometheus란?📌 한 줄 정의Prometheus는 시계열 기반(Time Series) 모니터링 도구입니다.🧠 주요 개념Metric (지표): 측정 가능한 값들 (예: CPU 사용률, 요청 수)Time Series (시계열): 시간에 따라 ..

BackEnd 2025.06.08

redisson-spring-boot-starter VS spring-boot-starter-data-redis

Spring Boot에서 Redis를 연동할 때 흔히 사용하는 두 가지 라이브러리가 있습니다spring-boot-starter-data-redisredisson-spring-boot-starter설명 spring-boot-starter-data-redisredisson-spring-boot-starter설명Spring 공식이 제공하는 Redis 통합 스타터로, 기본적인 Key-Value 저장소 기능을 제공Redisson은 Redis/Valkey를 위한 고급 Java 클라이언트로, Redis의 기능을 확장하여 Java 객체 기반으로 쉽게 사용할 수 있도록 지원주요 특징• RedisTemplate, StringRedisTemplate을 통한 low-level 조작• @RedisHash + RedisRepos..

BackEnd 2025.06.05

Spring Batch 실행 이력 테이블 분석 가이드

📁 BATCH_JOB_INSTANCE실행된 Job의 논리적 인스턴스를 저장합니다. 컬럼명타입설명예시JOB_INSTANCE_IDBIGINTJob 인스턴스 고유 ID (PK)1VERSIONBIGINT낙관적 락을 위한 버전 번호0JOB_NAMEVARCHAR(100)Job 이름dailySalesJobJOB_KEYVARCHAR(32)Job 파라미터의 해시 값5ab0ef124abc… 📁 BATCH_JOB_EXECUTION실제 Job 실행 이력 정보를 저장합니다.컬럼명타입설명예시JOB_EXECUTION_IDBIGINTJob 실행 고유 ID (PK)1VERSIONBIGINT낙관적 락을 위한 버전 번호0JOB_INSTANCE_IDBIGINT연결된 JobInstance ID1CREATE_TIMEDATETIME(6)실..

Spring Batch Chunk Size에 따른 성능 비교 실험 (Bulk Insert 포함)

Spring Batch에서 chunk 크기는 성능에 직접적인 영향을 줍니다.이번 포스트에서는 100,005건의 데이터를 읽고 이름을 대문자로 변환한 뒤 DB에 저장하는 작업을 수행하면서,chunk 크기에 따른 전체 처리 시간 차이를 측정했습니다. 💡 실험 조건대상 데이터 수: 100,005건작업 내용: 이름(firstName, lastName) → 대문자로 변환 후 DB insert방식:일반 insert (insert 반복 호출)bulk insert ( 사용한 List 단위 삽입)환경: Spring Batch + MyBatis + H2 in-memory DB 📊 일반 Insert 성능 (단건씩 처리) 1차2차3차1029.88초30.13초-5015.87초--6015.66초--7015.03초--801..

Spring Batch + MyBatis 예제 정리 (CSV → DB 처리)

Spring Batch와 MyBatis를 활용하여 CSV 파일 데이터를 읽고, 가공 후 데이터베이스에 저장하는 배치 처리 예제입니다.https://github.com/Raconer/SpringBatch📁 프로젝트 구성com.example.batch├── config│ └── BatchConfig.java # 배치 Job/Step 설정├── entity│ └── Person.java # 도메인 엔티티├── listener│ └── JobCompletionNotificationListener.java # Job 실행 리스너├── processor│ └── PersonItemProcessor.java # I..

Kotlin + Spring WebFlux 테스트 구조 설계기

WebTestClient 기반 공통 로깅과 JSON 출력까지 자동화✅ 목표WebFlux는 비동기 기반이기 때문에 기존 MockMvc 방식과는 다르게 WebTestClient를 사용합니다.테스트가 복잡해지기 전에, 저는 다음을 목표로 구조를 설계했습니다:모든 테스트에서 요청/응답 로그 자동 수집응답 시간, 헤더, JSON 바디를 보기 좋게 출력중복 없이 재사용 가능한 공통 베이스 테스트 클래스 구성🛠️ 프로젝트 환경 요약// build.gradle.ktsdependencies { implementation("org.springframework.boot:spring-boot-starter-webflux") // WebFlux implementation("org.springframewor..

Spring WebFlux에서 MySQL을 사용하는 방법: JDBC vs R2DBC 완전 정리

Spring WebFlux를 사용할 때 가장 헷갈리는 부분이 있다. 바로 "DB 연결은 어떻게 하지?" "JPA를 쓸 수는 없을까?" 하는 문제다.이 글에서는 WebFlux에서 MySQL을 어떻게 연결하고, R2DBC를 어떻게 사용하는지, 그리고 JPA를 왜 사용할 수 없는지를 순서대로, 쉽게 정리한다.1. WebFlux에서 DB(MySQL) 연결 방법Spring WebFlux는 기본적으로 Non-Blocking 처리를 목표로 한다. 그렇기 때문에 데이터베이스 연결 역시 Non-Blocking 드라이버를 사용해야 성능을 제대로 발휘할 수 있다.✅ WebFlux에서 MySQL을 연결하려면 R2DBC 드라이버를 사용해야 한다.1.1 필요한 의존성 추가 (Gradle)dependencies { imple..

부록 - Spring Boot MVC vs Spring WebFlux 비교

Spring Boot MVC와 Spring Boot WebFlux는 개발자가 작성하는 코드 스타일은 비슷하지만, 내부 구조, 기술 스택, 처리 방식이 본질적으로 다르다. 이 글에서는 MVC와 WebFlux를 특징 요약, 흐름도, 비교 테이블, 사용 기술 스택 중심으로 깔끔하게 정리한다.0. Spring MVC vs Spring WebFlux - 특징 요약📌 Spring MVC 특징Servlet API 기반 전통적인 웹 애플리케이션 프레임워크Blocking 방식: 요청 처리 동안 쓰레드를 점유개발 난이도 낮음: 코드가 직관적이고, 동기 흐름Blocking 데이터베이스 (JDBC, JPA) 사용에 최적화전통적인 웹사이트, 사내 시스템에 적합📌 Spring WebFlux 특징Reactive Streams ..