Spring 12

[Spring] @Component vs @Bean

스프링 프레임워크에서 애플리케이션의 구성 요소를 관리할 때, `@Compnent`와 `@Bean`은 빈(Bean)을 등록하는 주요 방법입니다.두 어노테이션은 비슷해 보이지만 실제 사용 목적과 방법은 다릅니다. 이번 글을 통해서 적재적소에 맞게 스프링 빈을 등록하는 방법을 알아보겠습니다.✍️ @Component란?`@Component`는 개발자가 정의한 클래스(주로 도메인 계층 또는 애플리케이션의 주요 기능을 담당하는 클래스)를 스프링 컨테이너로 등록하기 위해 사용됩니다.자동 스캔- `@Component`는 클래스패스 스캔(ComponentScan)을 통해 스프링이 자동으로 탐지하고 빈으로 등록합니다.- 별도의 설정 없이 클래스에 어노테이션만 추가하면 빈으로 관리됩니다.어노테이션 타깃- 클래스, 인터페이스..

Backend/Spring 2024.11.16

[Spring]고성능 비동기 웹 개발의 시작: Spring WebFlux 알아보기

최근 고성능 비동기 API를 구현해야 할 필요가 생기면서 기존의 Spring MVC로는 처리 성능에 한계가 있음을 느꼈다..🤔더 많은 요청을 효율적으로 처리할 방법을 찾던 중, Spring이 기존 MVC 외에 논블로킹 비동기 웹 애플리케이션을 지원하는 Spring WebFlux를 제공한다는 것을 알게 되었습니다. 이글에서는 Spring WebFlux의 개념에 대해 알아보겠습니다. Spring WebFlux 개요Spring WebFlux는 비동기 및 논블로킹 I/O를 기반으로 한 웹 프레임워크입니다.전통적인 Spring MVC의 동기적 구조와 달리 WebFlux는 Reactive Streams API를 기반으로 논블로킹 방식의 고성능 비동기 웹 애플리케이션을 구축할 수 있습니다. 전통적인 Servlet ..

Backend/Spring 2024.11.11

[Spring] @EventListener VS @TransactionEventListener

@EventListener와 @TransactionEventListener는 둘 다 Spring에서 이벤트 리스닝을 위해 사용되지만 트랜잭션 처리 여부에 따라 다르게 작동합니다. 각 어노테이션의 차이와 사용 사례를 통해 자세히 비교해 볼게요.🤔 @EventListener기능: 특정 이벤트를 구독하여 이벤트 발생 시 해당 메서드를 실행하도록 합니다.트랜잭션 의존성: 트랜잭션 상태에 관계없이 이벤트가 발생할 때마다 실행됩니다.사용 사례: 트랜잭션과 무관하게 즉시 실행해야 하는 작업이 있는 경우에 적합합니다.예를 들어, 간단한 로그 남기기, 로그 남기기, 알림 전송 등입니다.장점: 트랜잭션 상태와 상관없이 빠르게 이벤트 처리할 수 있습니다.단점: 트랜잭션이 취소되더라도 이벤트는 이미 발생했기 때문에 롤백된 ..

Backend/Spring 2024.10.26

[Spring] 스프링에서 이벤트 발행과 구독 @EventListener

Spring에서 ApplicationEvent 객체를 사용하여 특정 이벤트를 발생시키고 이를 구독하는 방식으로 서로 다른 컴포넌트 간 느슨한 결합을 제공할 수 있는 @EventListener에 대해 알아보겠습니다. 👩🏻‍💻  @EventListener특정 이벤트가 발생했을 때 이를 구독하고 정의된 메서드를 호출하는 역할을 합니다.예를 들어, 특정 조건이 발생했을 때 자동으로 알림을 보내거나 데이터를 갱신하는 작업을 비동기 방식으로 처리할 수 있습니다.이를 통해 모듈 간 결합도를 낮추고 이벤트가 발생하는 시점에만 필요한 작업을 수행할 수 있어 효율적입니다.  사용 예시예를 들어, 사용자가 가입할 때 가입 성공 후 환영 이메일을 전송하는 이벤트 핸들러를 작성할 수 있습니다. 이벤트 클래스public c..

Backend/Spring 2024.10.25

[Spring] 트랜잭션 상태에 맞춘 이벤트 처리 @TransactionalEventListener

@EventListener는 트랜잭션의 상태와 무관하게 이벤트를 수신하지만, @TransactionalEventListener는 이벤트 리스너가 트랜잭션 내에서 특정한 조건에 따라 동작하도록 합니다. 이를 통해, 예를 들어 트랜잭션이 성공적으로 커밋된 이후에만 이벤트를 처리하게 할 수 있습니다.이 글에서 트랜잭션 상태에 따라 이벤트를 처리할 수 있는 @TransactionalEventListener 대해 알아보겠습니다. 🙂  @TransactionalEventListenerSpring이 제공하는 트랜잭션 이벤트 리스너입니다.이 어노테이션을 사용하면 이벤트 리스너가 트랜잭션의 상태를 모니터링하며 이벤트를 처리할 수 있습니다.@TransactionalEventListener 어노테이션은 다음과 같은 옵션들..

Backend/Spring 2024.10.25

[Spring] Bean Scope(빈 스코프) 란?

스프링에서 다양한 객체(Bean)를 관리하고, 그 생명주기와 사용 범위를 제어할 수 있습니다.이번 글에서는 스프링의 Bean Scope(빈 스코프)에 대해 알아보겠습니다.🧐  Bean이란?스프링에서 Bean이란 스프링 IoC(Inversion of Control) 컨테이너에 의해 관리되는 객체를 말합니다.스프링 애플리케이션에서는 대부분의 객체가 Bean으로 등록되고, 이를 통해 객체의 생명주기나 사용 범위를 쉽게 관리할 수 있습니다. Bean Scope란?Bean Scope는 말 그대로 Bean의 사용 범위를 의미합니다.예를 들어, 어떤 Bean은 애플리케이션 내에서 딱 하나만 생성되어야 하고, 어떤 Bean은 매번 새롭게 생성되어야 할 수도 있습니다.이런 필요에 따라 스프링에서는 다양한 스코프를 제공..

Backend/Spring 2024.09.21

[Spring] @NotNull, @NotEmpty, @NotBlank 차이점

@NotEmpty, @NotNull, @NotBlank는 Spring Boot에서 빈 값이나 null 값에 대한 유효성 검사를 할 때 사용하는 제약 조건 어노테이션입니다. 각각의 차이점을 이해하기 위해 어떤 값을 허용하고, 허용하지 않는지 살펴보겠습니다. 🙂 @NotNull@NotNull은 필드 값이 null이 아니어야 하는 어노테이션입니다.허용되지 않는 값null허용되는 값"" 빈 문자열, [] 빈 컬렉션 등적용대상모든 객체 타입(String, List, Map 등)사용 예시는 아래와 같습니다.@NotNull private String name; @NotEmpty@NotEmpty는 필드 값이 null이 아니면서, 길이가 0이 아니어야 하는 어노테이션입니다.허용되지 않는 값null, "" 빈 문자열, ..

Backend/Spring 2024.09.21

Spring Boot에서 WireMock을 사용해서 테스트하기

API를 호출하는 로직을 테스트할 때, 어떻게 외부 서비스에 대한 의존성을 제거하고 신뢰성 있는 테스트를 만들 수 있을까요? 🚀WireMock은 HTTP 요청과 응답을 시뮬레이션할 수 있는 강력한 도구입니다.실제 외부 API 없이도 자체적으로 제어된 환경에서 테스트를 수행할 수 있게 해 줍니다. WireMockWireMock은 주로 HTTP 기반의 API를 모킹하기 위한 강력한 도구입니다.Spring Boot와 쉽게 통합할 수 있어 REST 클라이언트나 외부 API와 상호작용하는 코드를 테스트하는 데 매우 적합합니다.WireMock을 사용하면 외부 API에 대한 의존성을 제거하여 더 독립적이고 신뢰성 있는 테스트 환경을 만들 수 있습니다. WireMock을 사용하는 이유독립성 유지실제 외부 API와의 ..

Backend/Spring 2024.08.30

[Spring] @Scheduled 주기적인 작업 처리하기

Spring Framework는 다양한 기능을 제공하지만, 그중에서도 주기적인 작업을 관리하는 기능인 @Scheduled 어노테이션에 대해 알아보겠습니다. 🤓이 어노테이션을 사용하면 정해진 주기마다 특정 작업을 자동으로 실행할 수 있습니다. @Scheduled 란?@Scheduled를 Spring 스케줄링 기능을 제공하는 어노테이션입니다.메서드에 붙여서 주기적으로 실행될 작업을 정의할 수 있게 해 줍니다.예를 들어, 매일 자정에 특정 작업을 실행하거나 매주 월요일에 백업을 자동으로 수행할 수 있습니다. @Scheduled 어노테이션 기본 사용법@Sheduled를 사용하려면 Spring의 스케줄링 기능을 활성화해야 합니다.이를 위해 @EnableScheduling 어노테이션을 사용하여 스케줄링 기능을 활..

Backend/Spring 2024.07.27

[Spring] ArgumentResolver 사용하기

ArgumentResolver는 Spring MVC에서 컨트롤러 메서드의 매개변수를 해석하고 주입하는 기능입니다.컨트롤러에서 @RequestParam, @PathVariable를 사용하여 쿼리 파라미터나 경로 변수를 바인딩할 수 있고, 요청 본문을 바인딩하려면 @RequestBody를 사용합니다.하지만 Header, Session, Cookie 등의 방식의 데이터를 바인딩해야 할 때는 어떻게 해야 할까요? 🧐이때, ArgumentResolver를 사용하면 이러한 직접적이지 않은 방식의 데이터도 간편하게 가져올 수 있습니다.  ArgumentResolver 구현하기Custom ArgumentResolver를 구현해 보며 개념을 살펴보겠습니다.예를 들어, 클라이언트 요청에서 특정 헤더 값을 읽어와서 컨트롤..

Backend/Spring 2024.07.20