SpringBoot
-
Spring Boot 애플리케이션 종료 시 안전하게 파일 백업 처리하기SpringBoot 2025. 6. 8. 21:55
Spring Boot 애플리케이션을 개발할 때, 서비스 종료 시 파일 백업이나 리소스 정리 같은 작업이 필요한 경우가 많습니다. 이 글에서는 애플리케이션 종료 시 안전하게 파일을 백업하는 방법을 두 가지 방식으로 소개합니다.@PreDestroy를 이용한 Spring Bean 종료 훅JVM 레벨에서 작동하는 Shutdown Hook✅ 환경 설정 (Gradle)// build.gradle.ktsplugins { id("org.springframework.boot") version "3.2.5" id("io.spring.dependency-management") version "1.1.4" kotlin("jvm") version "1.9.23" kotlin("plugin.spring") ..
-
MongoDB 파일 저장소로 사용하기SpringBoot 2024. 11. 18. 21:34
MongoDB는 비정형 데이터를 관리하는 데 강점을 가진 NoSQL 데이터베이스로, 파일과 같은 대규모 바이너리 데이터를 손쉽게 저장하고 관리할 수 있는 GridFS 기능을 제공합니다. 이 글에서는 Spring Boot와 Kotlin을 이용하여 파일을 MongoDB에 저장하고 관리하는 방법을 소개합니다. 또한 파일을 MongoDB에 저장하는 것의 장단점과 유의할 점에 대해서도 다룹니다.1. 프로젝트 설정Spring Boot와 Kotlin을 사용하여 MongoDB와 연동하기 위해서는 다음과 같은 의존성을 추가해야 합니다.Gradle 설정 (build.gradle.kts):dependencies { implementation("org.springframework.boot:spring-boot-start..
-
확장 가능한 서비스 구현 패턴SpringBoot 2024. 11. 17. 14:24
소프트웨어 개발에서 공통적인 기능을 재사용하면서도 쉽게 확장 가능한 구조를 만드는 것은 중요한 과제입니다. 이번 글에서는 스프링부트를 사용하여 다양한 케이스에 유연하게 대응할 수 있는 전략 패턴과 추상 클래스를 활용한 구현 패턴을 알아보고, 이를 통해 얻을 수 있는 장점, 단점, 그리고 확장 가능성에 대해 설명해 보겠습니다.추상 클래스를 활용한 결제 처리 시스템 설계 및 전략 패턴 도입이번에 구현할 시스템에서는 여러 가지 결제 수단(신용카드, 간편결제 등)을 제공하며, 결제 전 공통적으로 처리해야 하는 로직이 존재합니다. 이 경우 추상 클래스와 전략 패턴을 조합하여 유연하고 확장 가능한 결제 시스템을 설계할 수 있습니다.예제 코드추상 클래스 정의package com.example.payment;impor..
-
Spring Boot에서 RestControllerAdvice 사용 방법SpringBoot 2024. 11. 17. 14:23
Spring Boot에서 RestControllerAdvice 사용 방법과 예시 코드Spring Boot로 REST API를 개발하다 보면 예외 처리가 중요한 역할을 합니다. 예외 처리를 효과적으로 구현하면 클라이언트에게 일관된 에러 메시지를 전달하고, 서버 측에서도 코드의 가독성을 높일 수 있습니다. 이번 글에서는 RestControllerAdvice를 활용하여 예외 처리를 중앙집중식으로 구현하는 방법을 다루고, 실전 예시로 결제 요청을 받아 특정 필드 값을 변경하는 핸들링을 추가해보겠습니다.RestControllerAdvice란?RestControllerAdvice는 Spring에서 제공하는 어노테이션으로, 모든 컨트롤러에 대한 예외 처리를 중앙에서 처리할 수 있도록 도와줍니다. 이를 통해 코드 중복..
-
Spring Batch를 이용한 클러스터링과 분산 처리 설정 및 구현 방법SpringBoot 2023. 12. 26. 08:45
Spring Batch를 사용하여, 여러 서비스 인스턴스에서 클러스터링과 분산 처리를 구현하는 방법을 설명합니다. 클러스터링을 통해 여러 서비스 인스턴스가 동일한 배치 작업을 공유하고, 한 인스턴스에서 실패한 작업을 다른 인스턴스에서 이어받을 수 있습니다. 또한, 분산 처리를 통해 작업을 여러 서버에 분산시켜 처리 효율성을 높일 수 있습니다. 클러스터링과 분산 처리 Spring Batch는 자체적으로 클러스터링과 분산 처리를 지원합니다. Spring Batch가 필요한 메타데이터 테이블을 생성하고 관리합니다. 이는 여러 인스턴스에서 동일한 배치 작업을 안정적으로 실행할 수 있도록 도와줍니다. 실행 및 검증 애플리케이션을 여러 인스턴스에서 실행한 후, Spring Batch의 메타데이터 테이블(BATCH_..
-
Quartz를 이용한 클러스터링 설정과 구현 방법SpringBoot 2023. 12. 26. 08:33
Spring Boot와 Quartz 스케줄러를 사용하여, 여러 서비스 인스턴스에서의 클러스터링을 구현하는 방법을 설명합니다. Quartz의 클러스터링 기능을 활성화하여, 여러 서비스 인스턴스가 동일한 작업 스케줄을 공유하고, 한 인스턴스에서 실패한 작업을 다른 인스턴스에서 이어받을 수 있도록 구성합니다. 의존성 추가 implementation 'org.springframework.boot:spring-boot-starter-quartz' application.properties 설정 application.properties 파일에 Quartz와 데이터베이스 관련 설정을 추가합니다. 이 설정은 Quartz가 클러스터링 모드로 작동하도록 구성하는 데 필요합니다. # 데이터베이스 설정 spring.dataso..
-
Blocking IO 와 Non-Blocking IOSpringBoot 2023. 10. 29. 13:46
Blocking I/O Blocking I/O는 I/O 작업이 완료될 때까지 해당 스레드가 대기하는 방식입니다. 예를 들어, 파일에서 데이터를 읽는 작업을 수행하는 경우, 데이터 읽기가 완료될 때까지 스레드는 블록되어 다른 작업을 수행할 수 없게 됩니다. 스레드의 상태 Blocking I/O 작업 중에는 스레드가 "Blocked" 상태가 되며, 이 상태에서는 CPU가 해당 스레드를 실행하지 않습니다. 스레드는 I/O 작업이 완료될 때까지 대기합니다. CPU의 상태 스레드가 블록된 동안 CPU는 다른 스레드나 프로세스의 작업을 실행할 수 있습니다. 만약 다른 실행 가능한 스레드가 없다면, CPU는 유휴 상태가 될 수 있습니다. CPU 유휴 상태 방지 CPU의 유휴 상태를 방지하기 위해서는 Non-Block..
-
Java OOM 발생 시퀀스SpringBoot 2023. 10. 29. 13:35
자바에서 힙 메모리에 객체를 할당할 때 메모리가 부족한 상황과 그에 따른 가비지 컬렉터의 역할을 UML 시퀀스 다이어그램을 통해 살펴보려고 합니다. Client가 객체를 생성하려고 JVM에게 요청합니다. JVM은 HeapMemory에서 충분한 메모리 공간이 있는지 확인합니다. 만약 메모리가 충분하지 않다면, JVM은 GarbageCollector를 호출하여 사용되지 않는 객체들을 제거하고 메모리를 회수하도록 합니다. 가비지 컬렉션 후, HeapMemory는 다시 메모리 상태를 확인합니다. 4.1 만약 여전히 메모리가 충분하지 않다면, HeapMemory는 JVM에게 "Out of Memory Error"를 보냅니다. 이 상황에서 프로그램은 종료되거나 예외 처리를 통해 복구될 수 있습니다. 4.2 만약 메..
-
Java Heap 메모리 할당 과정 시퀀스SpringBoot 2023. 10. 29. 13:31
Client가 JVM에게 새 객체를 생성하라는 요청을 합니다. JVM은 HeapMemory에 충분한 메모리가 있는지 확인합니다. 만약 메모리가 충분하지 않다면, HeapMemory는 GarbageCollector를 호출하여 불필요한 객체를 제거하고 메모리를 회수합니다. 메모리 회수 후, HeapMemory는 JVM에게 메모리가 충분함을 알립니다. JVM은 HeapMemory에 객체를 할당하고 초기화합니다. 마지막으로, JVM은 Client에게 객체의 참조를 반환합니다.
-
JMX (Java Management Extensions) 이해하기 및 모니터링 도구SpringBoot 2023. 10. 29. 13:23
자바 개발에 매우 유용한 JMX (Java Management Extensions)에 대해 알아보고, 이를 활용하여 어플리케이션을 모니터링 할 수 있는 다양한 도구들에 대해 알아봅니다 JMX 란? JMX는 자바 어플리케이션을 관리하고 모니터링하기 위한 표준 방법을 제공하는 기술입니다. JMX를 사용하면, 개발자는 자바 어플리케이션의 성능을 실시간으로 모니터링하고, 어플리케이션의 상태를 변경하며, 디버깅 정보를 얻을 수 있습니다. JMX는 MBean (Managed Bean)이라는 구성 요소를 사용합니다. MBean은 어플리케이션의 특정 부분을 나타내며, 이를 통해 어플리케이션의 상태 정보를 조회하거나 설정할 수 있습니다. JMX를 활용한 모니터링 도구 JMX를 활용하여 어플리케이션을 모니터링 할 수 있는..