Spring Framework (13) 썸네일형 리스트형 [Spring Boot] 커스텀 프로퍼티 완벽 가이드 개요Spring Boot 개발을 하다 보면 하드코딩된 값들로 인해 고민을 하게 된다."이 설정값을 바꾸려면 또 코드를 수정하고 배포해야 하나?" 라는 생각이 들 때가 종종 생긴다. 이런 문제를 해결해주는 것이 바로 커스텀 프로퍼티이다.이 글에서 커스텀 프로퍼티가 무엇인지, 어떻게 사용하는지, 그리고 언제 사용해야 하는지에 대해 자세히 알아보자. 1. 커스텀 프로퍼티란?커스텀 프로퍼티는 애플리케이션에서 필요한 설정값들을 application.properties 또는 application.yml 파일에 정의하고, 이를 Java 코드에서 사용할 수 있도록 하는 Spring Boot의 기능이다. 간단한 예시로 시작해보자:# application.propertiesspring.application.name=d.. [Spring] Spring 캐시(Cache) 핵심정리 개요채팅 시스템을 프로젝트에서 구현하면서 Redis를 프로젝트에 도입하게 되었다.Redis는 채팅방 구독 정보를 관리하기 위해 도입했지만, 캐싱도 가능하다고 글을 읽은 적이 있다. 캐싱을 적용한 곳은 채팅방 목록에서 마지막 메시지 조회 로직이었고,직렬화, 역직렬화 문제로 나름 애를 먹었지만 잘 도입할 수 있었다! 1. 캐시 어노테이션 3종 세트@Cacheable - 조회 시 캐싱@Cacheable(value = "userCache", key = "#userId")public User getUser(Long userId) { return userRepository.findById(userId); // 첫 번째만 실행, 이후 캐시 반환} @CachePut - 업데이트하면서 캐시 동기화@CachePut.. [Spring Boot] 환경별 설정 어떻게 해야할까? 개요 저번 팀 프로젝트에서는 application.properties에 spring.profile.include=secret을 적고,github에 공유하지 않는 application-secret.properties를 통해 비밀값들을 관리했었다.그리고 배포 과정에서 Github Secrets를 사용해 그 값들을 암호화했다. 그런데 실전 스프링부트 책을 읽으며 이런 방식말고도 환경 변수를 이용하는 방법과local(로컬), dev(개발), prod(운영)별로 세팅을 다르게 하는 방법을 알 수 있었다. 환경 변수로 비밀을 관리하는 건 어렵지 않으니환경별 세팅하는 방법에 대해 자세히 알아보자!! 1. Profile을 통해 환경별 설정하기먼저 Profile을 통해 환경별로 설정하는 걸 배워보자. Profile 방.. [Spring Boot] 스프링 부트 이벤트 리스너 구현과 등록 개요 실전 스프링 부트 책을 읽으며,스프링에 이벤트와 이벤트 리스너가 존재한다는 사실을 알게 되었다. 리스너의 구현 방식과 등록 방법에 대해서 정리해보고자 이 포스트를 작성한다. 1. 이벤트 리스너 구현 방법1. @EventListener 어노테이션 방식 (Spring 4.2+)@Componentpublic class MyEventListener { @EventListener public void handleApplicationReady(ApplicationReadyEvent event) { // 처리 로직 } @EventListener public void handleContextRefresh(ContextRefreshedEvent event) {.. [Spring Boot] SpringApplication.run() 메서드 인자에 관해서 개요package com.example.demo;import org.springframework.boot.SpringApplication;import org.springframework.boot.WebApplicationType;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class DemoApplication { public static void main(String[] args) { SpringApplication springApplication = new SpringApplication(DemoApplication.class); springApplication.setW.. [Spring Boot] 리액티브 프로그래밍이란? 개요실전 스프링부트 책을 읽으며 package com.example.demo;import org.springframework.boot.SpringApplication;import org.springframework.boot.WebApplicationType;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class DemoApplication { public static void main(String[] args) { SpringApplication springApplication = new SpringApplication(DemoApplication.class); spring.. [Spring Boot] 스프링 부트 애플리케이션 종료 개요 실전 스프링 부트 책을 읽던 중 shutdown hook 개념과 안전 종료 개념에 대해 배울 수 있었다. 관련 개념에 대해 알아보고,스프링 부트의 종료 로직을 좀 더 자세히 알아보자! 관련 개념1. Shutdown Hook- 개념: JVM이 종료되기 전에 실행되는 스레드- 이용: 스프링 부트에서는 자동으로 shutdown hook을 등록하여 애플리케이션 컨텍스트를 안전하게 종료한다. 2. 안전 종료(Graceful Shutdown)- 개념: 진행 중인 요청을 완료한 후 서버를 종료하는 방식- 지원 버전: 스프링 부트 2.3부터 지원.- 설정 방법# application.ymlserver: shutdown: gracefulspring: lifecycle: timeout-per-shutdo.. [Spring Boot] SpringApplication.run()을 호출하면 일어나는 일들 개요실전 스프링 부트 책을 읽다가 SpringApplication.run() 메서드가 실행될 때 수행하는 작업을 알게되었다.classpath에 있는 라이브러리를 기준으로 ApplicationContext 클래스 인스턴스를 생성CommandLinePropertySource를 등록해서 명령행 인자를 스프링 프로퍼티로 읽어 들인다.앞의 1단계에서 생성한 ApplicationContext를 통해 모든 싱글턴 빈을 로딩한다.애플리케이션에 설정된 ApplicationRunners와 CommandRunners를 실행한다. 설명은 위와 같았는데 과연 정말 그럴까???개발자는 코드로 공부해야 한다고 생각한다. 직접 코드를 뜯어보며 이해해보자. 코드먼저 참고한 스프링 부트의 버전은 3.2.2이다.버전이 다를경우 내부 로.. 이전 1 2 다음