Spring 14

Resilience4j 개요

Resilience4j는 Spring Cloud와 같은 마이크로서비스 환경에서 탄력성(Resilience)을 제공하기 위해 사용되는 라이브러리다. 주로 분산 시스템에서 발생할 수 있는 장애에 대한 대비책을 제공하며 서킷 브레이커(Circuit Breaker), 제한자(Rate Limiter), 재시도(Retry), 벌크헤드(Bulkhead), 시간 초과(TimeLimiter)와 같은 패턴을 지원한다. 주요 특징경량 라이브러리Resilience4j는 함수형 프로그래밍과 Java 8의 람다 표현식에 적합하도록 설계된 경량 라이브러리다.모듈화각 기능(서킷 브레이커, 재시도 등)이 독립적인 모듈로 제공되어 필요에 따라 선택적으로 사용할 수 있다.Spring Boot 통합Spring Boot 환경에서 Spring..

Spring 2024.12.21

Spring Cloud Gateway에서 Custom Filter, Global Filter, Logging Filter 예제

Custom Filter개념Custom Filter는 특정한 요구사항을 처리하기 위해 개발자가 직접 정의한 필터이다. 특정 라우트(Route)에만 적용되며 Spring Cloud Gateway의 필터 체인에서 요청 또는 응답을 조작할 수 있다.예제Custom Filter 구현import org.springframework.cloud.gateway.filter.GatewayFilter;import org.springframework.cloud.gateway.filter.GatewayFilterChain;import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;import org.springframework.htt..

Spring 2024.11.28

Spring Cloud Gateway

Spring Cloud Gateway는 마이크로서비스 아키텍처에서 API 게이트웨이 역할을 수행하는 프로젝트로 Spring Cloud의 일부이다. 클라우드 네이티브 애플리케이션에서 요청 라우팅, 보안, 부하 분산, 모니터링, API 관리를 효율적으로 처리하기 위해 설계되었다. Spring Cloud Gateway는 Spring Framework와 Spring Boot의 생태계에 통합되어 있어 유연하고 강력한 API 게이트웨이 솔루션을 제공하고있다. 주요 특징라우팅 (Routing)Spring Cloud Gateway의 핵심 기능으로 클라이언트 요청을 적절한 백엔드 서비스로 전달한다.경로 기반 라우팅 : URL 경로나 패턴에 따라 요청을 라우팅헤더, 쿼리 매개변수 기반 라우팅 : HTTP 헤더나 쿼리 매개..

Spring 2024.11.26

분산 락(Distributed Lock)

분산 락은 분산 시스템에서 리소스나 데이터를 여러 노드가 동시에 접근하거나 변경하지 못하도록 동기화하는 기법이다. 분산 환경에서는 여러 프로세스나 노드가 동시에 같은 리소스에 접근하려는 상황이 빈번히 발생하므로 데이터 정합성을 보장하기 위해 분산 락이 필요하다.  특징동시성 제어 : 여러 프로세스가 동시에 특정 리소스를 사용하지 못하게 막음데이터 정합성 보장 : 리소스가 여러 노드에서 동시에 변경되지 않도록 방지Failover 처리 : 노드가 실패했을 때도 락을 안정적으로 관리해야 함 분산 락 구현의 주요 과제상호 배제 (Mutual Exclusion) : 한 번에 하나의 클라이언트만 리소스에 접근 가능데드락 방지 (Deadlock Prevention) : 락을 얻은 클라이언트가 실패하거나 느려지더라도 ..

Spring 2024.11.21

AOP - Advice, Target, Pointcut

AOP(Aspect-Oriented Programming)란 무엇인가?AOP는 소프트웨어 개발에서 핵심 비즈니스 로직과는 별개로 반복적으로 사용되는 부가기능(공통 관심사)을 분리하여 코드의 중복을 제거하고 유지보수성을 향상시키기 위한 프로그래밍 패러다임이다.AOP의 대표적인 부가기능로깅 (Logging)성능 측정 (Performance Monitoring)트랜잭션 관리 (Transaction Management)인증 및 권한 관리 (Authentication & Authorization) AOP가 필요한 이유예를 들어, 시간 측정 기능이 필요하다고 가정한다면기존 방식에서는 각 컨트롤러 메서드마다 시간을 측정하는 코드를 추가해야 함결과적으로 코드 중복, 가독성 저하, 핵심 비즈니스 로직과 부가기능 혼합 문..

Spring 2024.11.18

Spring Cloud Config

Spring Cloud Config는 분산 시스템에서 구성 데이터를 중앙에서 관리하고 배포하기 위해 사용하는 Spring 프로젝트이다. 이를 통해 애플리케이션의 설정 정보를 중앙화하고 일관되게 관리할 수 있어 특히, 마이크로서비스 아키텍처에서 유용하게 사용된다. Spring Cloud Config는 클라이언트 애플리케이션들이 공통된 설정 정보에 쉽게 접근할 수 있도록 도와주며 설정 변경이 필요할 때 각 서비스를 수정하지 않고도 실시간으로 반영할 수 있게 한다. 주요 개념Spring Cloud Config Server : 구성 데이터를 저장하고 제공하는 서버이다. 서버는 일반적으로 Git, 파일 시스템, SVN과 같은 외부 저장소에 저장된 설정 파일을 읽어와 클라이언트 애플리케이션에 제공한다.Spring ..

Spring 2024.11.12

서블릿과 스프링의 개요 및 관계

서블릿(Servlet)과 스프링(Spring)은 Java 기반 웹 개발에서 중요한 요소이다. 두 기술은 서로 다른 목적과 특성을 가지고 있으며 특히 스프링 프레임워크는 서블릿을 기반으로 동작한다. 서블릿의 역할과 배경서블릿은 서버에서 웹 콘텐츠를 동적으로 생성하고 클라이언트(주로 브라우저)와의 요청과 응답을 처리하는 Java 기반 기술이다. 서블릿은 클라이언트 요청을 받아 처리하고 응답을 반환하는 역할을 하며 Java Enterprise Edition (Java EE) 환경에서 실행된다. 서블릿의 탄생 배경초기 웹 애플리케이션은 HTML로 작성된 정적인 페이지를 전달하는 방식이었지만 점차 동적 데이터 처리의 필요성이 생기면서 CGI(Common Gateway Interface) 기술이 도입되었다. 그러나..

Spring 2024.11.05

Spring Boot와 AWS를 이용한 이미지 업로드 및 최적화

이미지 업로드 방식Multipart File 방식설명 : Spring MVC에서 제공하는 MultipartFile 인터페이스를 이용해 파일을 서버에 전달하고 이를 임시 디스크에 저장한 뒤 S3에 업로드하는 방식이다장점 : 일반적이고 구현이 간단하며 업로드 성공률이 높다단점 : 서버 디스크를 사용하여 대용량 파일 업로드 시 서버에 부하가 크며 제한된 디스크 용량으로 인해 오류가 발생할 수 있다. 대량 업로드 시 CPU 사용량과 Garbage Collection의 부하도 높아질 수 있다Stream 방식설명 : 클라이언트가 서버에 파일을 스트림 형태로 전달하면 서버가 S3에 바로 전송하는 방식이다. 이 방식은 파일을 저장하지 않고 바로 스트리밍하여 S3에 전송하기 때문에 디스크 사용을 줄인다장점 : 서버에 부..

Spring 2024.11.04

@Transactional 어노테이션 롤백 동작 방식

@Transactional 어노테이션은 Spring 프레임워크에서 트랜잭션 처리를 간소화하고 자동화하기 위해 사용된다. 이 어노테이션이 선언된 메서드에서 예외가 발생하면 트랜잭션을 롤백한다. 그러나 모든 예외가 롤백되는 것은 아니며 기본적으로 롤백 범위는 특정한 예외 유형에 따라 결정된다.   기본 롤백 정책Checked Exception (체크 예외)Exception을 상속하지만 RuntimeException을 상속하지 않은 예외는 기본적으로 롤백되지 않는다예) IOException, SQLException 등Unchecked Exception (언체크 예외)RuntimeException 및 그 하위 클래스들은 기본적으로 롤백된다예) NullPointerException, IllegalArgumentE..

Spring 2024.10.30

@Transactional 어노테이션 롤백이 동작하지 않는 경우

업무를 진행하는 중 @Transactional 어노테이션이 예상대로 롤백되지 않는 경우가 발생하였다. 스프링에서 트랜잭션 매니저 미설정으로 발생한 이슈로 금방 해결하긴 했지만 겸사겸사 그 외 발생할 수 있는 상황에 대해 찾아보고 정리해본다. 프록시 메커니즘으로 인한 문제 (자기 호출)Spring은 기본적으로 프록시 패턴을 사용해 @Transactional을 적용한다. 즉, 트랜잭션 처리는 AOP 프록시 객체에서 관리된다.따라서, 클래스 내부에서 자기 자신의 메서드를 호출할 경우 프록시 객체가 아닌 직접 호출되므로 트랜잭션이 적용되지 않는다.해결책메서드를 다른 빈에서 호출하도록 리팩토링한다또는 AspectJ를 사용한 방식으로 트랜잭션을 설정한다인터페이스가 없는 클래스에서 호출하는 경우, proxy-targ..

Spring 2024.10.29

MVC(Model-View-Controller) 패턴

MVC 패턴의 개념Model (모델)애플리케이션의 핵심 데이터와 비즈니스 로직을 담당한다. 데이터베이스와 상호작용하며 데이터를 가져오고 수정하는 기능을 수행한다. 이를 통해 애플리케이션의 상태를 관리한다.스프링에서 @ModelAttribute나 Entity 클래스를 사용해 모델을 정의한다.View (뷰)사용자가 볼 수 있는 화면이다. HTML, JSP, Thymeleaf 같은 템플릿 엔진을 사용하여 데이터를 사용자에게 시각적으로 제공하는 역할을 한다.모델에서 전달된 데이터를 기반으로 사용자 인터페이스를 렌더링한다. Controller (컨트롤러)사용자의 입력을 받아 적절한 비즈니스 로직을 호출하고 결과를 모델에 반영하며 그 결과를 뷰로 전달하는 역할을 한다.스프링에서는 @Controller나 @RestC..

Spring 2024.09.13

SpringBoot AutoConfiguration

Spring Boot의 AutoConfiguration은 애플리케이션 개발자가 최소한의 설정만으로도 다양한 기능을 쉽게 사용할 수 있게 해주는 강력한 기능이다. Spring Boot는 이를 통해 개발자가 복잡한 설정 작업을 하지 않아도 되는 환경을 제공한다.  AutoConfiguration이란?Spring Boot의 AutoConfiguration은 특정 라이브러리가 클래스패스에 존재하는지 확인하고, 해당 라이브러리에 적합한 Spring 빈을 자동으로 구성하는 기능이다. 예를 들어, 데이터베이스 관련 라이브러리가 클래스패스에 있으면, Spring Boot는 데이터 소스(DataSource)와 관련된 빈을 자동으로 생성하고 구성한다. 작동 방식조건 기반 자동 설정 : Spring Boot의 AutoCon..

Spring 2024.08.19

DTO, VO, Entity 개념과 차이

VO (Value Object), DTO (Data Transfer Object), 그리고 Entity는 소프트웨어 개발에서 자주 사용되는 개념으로, 각기 다른 역할을 수행한다.  DTO (Data Transfer Object)정의 : DTO는 계층 간 데이터 전송을 위한 객체로, 주로 네트워크를 통한 데이터 전송이나 애플리케이션의 여러 계층 간 데이터 전송에 사용된다. DTO는 로직을 포함하지 않으며, 단순히 데이터를 담고 있는 그릇의 역할을 한다.특징전송 용이성: DTO는 시스템 간 또는 애플리케이션 계층 간에 데이터를 효율적으로 전송하기 위해 설계되어있다.로직 없음: DTO는 데이터를 가지고 있지만, 비즈니스 로직을 포함하지 않는다. 이는 데이터를 직렬화하거나 다른 형태로 변환하는 데 주로 사용된다..

Spring 2024.08.17

Spring Cloud Function의 기초 개념

Spring Cloud Function은 서버리스 아키텍처를 지원하는 스프링 기반 프레임워크로, 클라우드 환경에서 함수형 프로그래밍을 손쉽게 구현할 수 있게 도와줍니다. FaaS(Function as a Service) 플랫폼과의 통합을 통해 다양한 클라우드 제공자의 서비스를 이용할 수 있으며, 이벤트 중심의 프로그래밍을 지원하여 복잡한 비즈니스 로직을 간결하게 처리할 수 있습니다. 사용 사례 및 필요성오늘날의 클라우드 컴퓨팅 환경에서는 애플리케이션의 확장성과 비용 효율성을 중요시합니다. Spring Cloud Function은 이러한 요구에 부합하여 코드 재사용성, 유연한 배포, 그리고 클라우드 제공자의 다양한 서비스를 통합할 수 있는 기능을 제공합니다. 따라서 많은 기업들이 서버리스 아키텍처를 도입하..

Spring 2024.07.02
반응형