[Spring] ApplicationRunner 활용하기
·
Spring 기초/Spring 기초 지식
스프링의 ApplicationRunner를 활용해 보자.📌 서론스프링 부트(Spring Boot) 애플리케이션에서 ApplicationRunner를 사용하면 애플리케이션이 시작될 때 특정 로직을 실행할 수 있다. 특히 @Configuration 클래스 내에서 @Bean으로 등록하면 필요한 빈들을 주입받아 유연하게 사용할 수 있다. 이번 포스팅에서는 실무에서 바로 적용할 수 있는 몇 가지 예제와 함께 ApplicationRunner의 활용 방법을 자세히 알아보도록 하자. 1. ApplicationRunner란 무엇인가?ApplicationRunner는 스프링 부트 애플리케이션(서버)이 완전히 초기화된 후 실행되는 콜백 인터페이스다. 이를 구현하면 애플리케이션 시작 시점에 필요한 작업을 수행할 수 있다. ..
[Spring] 스프링 빈 설정의 진화: XML에서 자바, 그리고 컴포넌트 기반으로
·
Spring 기초/Spring 설정
스프링에서는 빈 등록 과정이 어떻게 발전되어 왔을까?📌 서론Spring Framework에서의 빈(bean) 설정 방식은 시간이 지나면서 점차 발전해 왔다.초기에는 XML 기반 설정이 주로 사용되었으나, 자바 기반 설정이 도입되면서 설정 관리가 더욱 간편해졌다.이후, 컴포넌트 기반 설정이 등장하면서 빈 관리의 자동화와 모듈화가 크게 개선되었다. 이번 글에서는 이러한 빈 설정 방식의 발전 과정을 예시와 함께 단계별로 알아보자. 참고로 저는 구버전의 springFramework로 개발할 일이 있었는데 xml로 빈 등록하는 과정은 생각보다 복잡했습니다. ㅠㅠ 그래서 이렇게 발전된 것이 너무나도 감사합니다. 1. XML 기반 설정초기 스프링의 빈 설정 방식Spring Framework의 초기 버전에서는 애플..
[Spring] Redis에서 RDB로 조회수 동기화하기
·
Spring Data JPA
일정 시간마다 Redis의 데이터를 RDB에 저장해 보자 📌 서론 내가 만든 요리 SNS어플인 "레시피아"에서는 유저가 레시피를 조회하면 조회수 데이터를 Redis에 계속 누적시킨다. 만약 유저가 레시피 상세보기를 하면 Redis에 저장된 누적 조회수 데이터를 호출하여 화면에서 조회수를 보여주도록 기능을 구현했다. 이렇게 RDB에서 데이터를 가져오지 않고 Redis에서 바로 조회수 데이터를 호출하게 하여 빠른 반응속도와 RDB의 부하를 줄였다. 이렇게 행복하고 편리하게 기술이 적용되었다면 참 좋겠지만 Redis는 휘발성 데이터베이스이기 때문에 문제가 발생하면 데이터가 다 날아가기 때문에 복구 전략이 엄청 중요하다. 이미 Redis에서는 자체적인 복구기능으로 aof, rdb 방식을 지원하지만 이것만으로는..
스프링에서 느슨한 결합 만들기: 이벤트 기반 아키텍처 적용
·
Spring 기초/Spring 기초 지식
이벤트 기반 아키텍처를 적용해서 느슨한 결합(Coupling)을 만들어 보자 📖 서론 이번 포스트에서는 먼저 결합도가 높은 일반적인 시나리오를 살펴보고, 이를 개선하기 위해 결합도가 높은 코드에 스프링의 이벤트 기반 아키텍처를 적용시켜 보자. 코드를 쉽게 이해하기 위해 자주 사용되는 로그인 프로세스를 예로 들어, 어떻게 결합도를 낮추고 코드의 효율성을 높일 수 있는지 설명하도록 하겠다. 1. 결합도가 높은 login() 메서드 작성하기 결합도가 높은 login() 메서드 코드 분석하기 하단의 login() 메서드에서 처리하는 주관심사와 외부 관심사를 분리시켜 보자. 여기서 주관심사는 사용자의 로그인 과정이며, 외부 관심사(비관심사)는 로그인 후의 추가 작업들(예: 알림 보내기, 타 기기에서의 로그아웃 ..
[Spring] 테스트 코드: @MockBean으로 @EventListener 검증하기
·
Spring 테스트 코드
테스트 코드를 통해 스프링 이벤트 리스너의 반응을 검증해 보자 📌 서론 스프링에서 Event-driven 아키텍처로 설계를 했을때 이벤트가 발행되면 리스너가 올바르게 반응하는지 테스트를 통해 검증하는 것은 매우 중요한 과정이라고 생각한다. 이번 포스트에서는 레시피를 생성하면서 스프링 이벤트(RecipeCreationEvent)를 발행했을 때 이 이벤트를 구독하고 있는 saveIngredientsIntoMongo 메서드가 제대로 호출되어 동작하는지 검증하는 테스트 코드를 작성하는 방법을 알아보자 1. 스프링 이벤트 리스너 코드 이해하기 아래의 코드는 설명을 이해하기 위해 알아야 할 SpringEventListener 클래스다. @Slf4j @Component @RequiredArgsConstructor p..
Gradle: Implementation과 RuntimeOnly의 차이점 및 활용 방법
·
Spring 기초/Spring 설정
SpringBoot 프로젝트의 build.gradle 파일에서 'implementation'과 'runtimeOnly' 설정의 차이점과 사용법을 알아보자 📌 서론 Gradle의 빌드 스크립트인 build.gradle에서 의존성을 관리할 때 runtimeOnly와 implementation은 자주 사용되는 구성이야. 각각의 키워드가 어떤 목적으로 사용되는지, 그리고 차이점은 무엇인지 알아보자. 글의 이해를 위해 가장 먼저 스프링의 "모듈"을 알아보자 1. 스프링 부트의 모듈 이해하기 1-1. 메인 모듈 (Main Module) 애플리케이션의 핵심 기능을 담당한다. 주요 비즈니스 로직, 데이터베이스 연결, 웹 컨트롤러 등을 포함한다. 프로젝트의 src 폴더 내에 위치한 Java 패키지들, applicatio..
SpringBoot: 리소스 관리하기 (resource)
·
Spring 기초/Spring 기초 지식
스프링 부트는 내부적으로 리소스를 어떻게 로딩할까? 📌 서론 길을 걸어가던 도중 스프링, 스프링부트에서는 어떻게 application.yml이나 js, css 같은 파일들을 읽어 들여서 사용하는지에 대한 궁금증이 생겼다. 그래서 당장 조사를 했고 이를 정리해 봤다. 지금부터 그 내용을 공유한다. 1. 리소스 로딩의 중요성과 기본 개념 스프링 어플리케이션의 성능과 개발 효율성 향상을 위해서는 다양한 외부 리소스(파일, 이미지 등)를 효율적으로 로딩하는 것이 중요하다. Resource 인터페이스는 다양한 리소스 유형에 대해 일관된 API를 제공하며, 리소스 존재 여부 확인, 파일/URL 접근 등 다양한 기능을 제공한다. 리소스 로딩의 중요성 스프링 어플리케이션에서 리소스 로딩은 핵심적인 부분이다. 외부 리소..
[Spring] Maven이란?
·
Spring 기초/Spring 설정
Maven이 뭘까? 지금부터 알아보자 📌 서론 이전 회사에서 작업을 할 때 SpringFramework3.x.x 버전을 사용하고 Maven을 사용했던 기억이 있다. 이때 첫 프로젝트를 하면서 요즘에는 다 Gradle을 사용하는 추세로 넘어온 것 같은데 Maven을 사용해서 신기했었던 경험이 있다.(신입이었어서 그랬던 것도 있지만 프로젝트 자체가 10년이 넘었다.) 이렇게 퇴사를 하고 잊고 있다가 갑자기 요즘 Gradle을 사용해서 프로젝트의 빌드를 수행하다가 Build.gradle 파일 안에서 의존성을 추가할 MavenBom이라는 코드가 보여서 갑자기 든 생각이 Maven은 왜 만들어졌을까?라는 의문에 정리를 시작했다. 1. Maven 소개 Maven이란 무엇인가? Maven은 Apache Softwar..