Backend/Spring(이론) 18

Spring Boot Actuator - Micrometer를 활용한 표준화된 지표 수집 방식

📌 목차 1. Micrometer란 무엇인가? 2. 왜 Micrometer가 필요한가? 3. Spring Boot Actuator와의 통합 4. Spring Boot Actuator가 제공하는 메트릭 종류">📌 목차1. Micrometer란 무엇인가? 2. 왜 Micrometer가 필요한가? 3. Spring Boot Actuator와의 통합 4. Spring Boot Actuator가 제공하는 메트릭 종류1. Micrometer란 무엇인가?">1. Micrometer란 무엇인가?Micrometer는 메트릭(Metrics) 수집의 표준화된 추상화 계층이다. 애플리케이션에서 CPU, JVM, 커넥션 상태 등 다양한 지표를 수집한 후, 특정 모니터링 툴에 종속되지 않고 공통 인터페이스를 통해 데이터를 전..

SpringBoot 프로젝트 외부 설정(1) 개념 및 활용 - OS 환경 변수

📌 목차 1. 외부 설정의 개념 2. 환경별 JAR 빌드의 문제점 3. 외부 설정 주입 방식4. 환경 변수 조회 및 설정 5. Java에서 환경 변수 사용하는 방법 6. 실무 적용 사례 및 한계 ">📌 목차1. 외부 설정의 개념 2. 환경별 JAR 빌드의 문제점 3. 외부 설정 주입 방식4. 환경 변수 조회 및 설정 5. Java에서 환경 변수 사용하는 방법 6. 실무 적용 사례 및 한계1. 외부 설정의 개념">1. 외부 설정의 개념외부 설정(external configuration)은 실행 환경마다 달라질 수 있는 설정값(DB 주소, 포트, API 키 등)을 코드가 아닌 외부에서 주입하는 구조를 말한다. 이는 개발, 운영, 테스트 등 각 환경의 특수성을 고려할 수 있도록 구성된 방식으로, 스프링에..

왜 @Autowired를 안 써도 될까? – Spring Boot 실무 스타일

📌 목차 1. 생성자에 @Autowired가 필요 없는 이유 2. 스프링의 자동 주입 규칙 3. 실무에서의 표준 스타일 4. 결론 요약 "> 📌 목차 1. 생성자에 @Autowired가 필요 없는 이유 2. 스프링의 자동 주입 규칙 3. 실무에서의 표준 스타일 4. 결론 요약 1. 생성자에 @Autowired가 필요 없는 이유"> 1. 생성자에 @Autowired가 필요 없는 이유 Spring Boot 2.6 이상부터는, 클래스가 스프링 빈으로 등록되어 있고 생성자가 하나만 존재할 경우, @Autowired 어노테이션을 명시하지 않아도 자동으로 생성자 기반 의존성 주입이 이루어진다.예를 들어 다음과 같은 클래스를 생각해볼 수 있다.@Configurationpublic class AppCo..

Spring 기반 오픈소스 스케줄러 (Quartz Scheduler) 기본 구성 흐름

📌 목차 1. Quartz Scheduler란? 2. Quartz Scheduler의 핵심 구성 요소 3. Spring과 Quartz의 통합 4. Quartz의 Job 실행 흐름 5. Quartz의 다양한 Trigger 타입 6. 클러스터링과 분산 처리 7. Quartz 사용 시 주의할 점 8. 실무 적용 시 전략 ">📌 목차1. Quartz Scheduler란? 2. Quartz Scheduler의 핵심 구성 요소 3. Spring과 Quartz의 통합 4. Quartz의 Job 실행 흐름 5. Quartz의 다양한 Trigger 타입 6. 클러스터링과 분산 처리 7. Quartz 사용 시 주의할 점 8. 실무 적용 시 전략 1. Quartz Scheduler란?">1. Quartz Schedule..

Spring 멀티모듈 환경에서 @FeignClient가 자동 등록되지 않는 이유와 해결 방안

📌 목차 1. Spring Boot의 컴포넌트 스캔 원리 2. 멀티모듈 구조에서 발생하는 문제 3. 자동 등록이 실패하는 이유 4. 해결 방법: `@EnableFeignClients`에 basePackages 명시 5. `scanBasePackages`로는 왜 안 되는가? 6. 요약 7. 예제 코드 "> 📌 목차 1. Spring Boot의 컴포넌트 스캔 원리 2. 멀티모듈 구조에서 발생하는 문제 3. 자동 등록이 실패하는 이유 4. 해결 방법: `@EnableFeignClients`에 basePackages 명시 5. `scanBasePackages`로는 왜 안 되는가? 6. 요약 7. 예제 코드 1. Spring Boot의 컴포넌트 스캔 원리"> 1. Spring Boot의 컴포넌트..

Spring 메시지, 국제화 개념

메시지 국제화 정리Spring에서 메시지와 국제화를 쉽게 관리할 수 있는 기능을 제공메시지와 국제화는 다국어 지원 애플리케이션을 개발 가능케 함.1. 메시지 소스 설정Spring에서 메시지를 관리하기 위해 MessageSource 인터페이스를 사용일반적으로 ResourceBundelMessageSource를 빈으로 설정하여 사용예) application.properties 설정propertiesspring.messages.basename=messagesspring.messages.encoding=UTF-8Java@Configurationpublic class AppConfig { @Bean public MessageSource messageSource() { ResourceBundleMess..

스프링 - Controller에서 요청 데이터 받기

Spring Boot에서 Controller에서 요청 데이터를 받는 방법은 여러 가지가 있습니다. 아래는 주요 방법들과 예시 코드를 소개합니다. 1. @RequestParam - 쿼리 파라미터나 폼 데이터 받기 @RequestParam은 주로 GET 요청의 쿼리 파라미터나 POST 요청의 폼 데이터를 처리할 때 사용됩니다. @GetMapping("/greeting") public String greeting(@RequestParam(name = "name", required = false, defaultValue = "World") String name, Model model) { model.addAttribute("name", name); return "greeting"; } 2. @PathVariab..

서블릿(Servlet), WAS

서블릿(Servlet) Java를 사용하여 웹 서버에서 실행되는 프로그램을 작성하기 위한 기술이다. 서블릿은 클라이언트의 요청을 처리하고, 그결과를 클라이언트에게 다시 보내는 역할을 한다. WAS를 직접 구현하는 경우 순서 내용 1 서버 TCP/IP 연결 대기, 소켓 연결 : 클라이언트의 연결 요청을 대기하고 소켓을 통해 연결 2 HTTP 요청 메시지를 파싱해서 읽기: 클라이언트로부터 받은 HTTP 요청을 메시지로 파싱하여 읽는다. 3 POST 방식, /save URL 인지: HTTP 요청메서드가 무엇인지, 요청 URL의 경로를 인지하는 작업 4 Content-Type 확인 5 HTTP 메시지 바디 내용 파싱 예를 들어 JSON 형식의 데이터를 Java 객체로 파싱하는 작업 6 저장 프로세스 실행 7 비..

Spring / ComponentScan의 탐색 위치와 기본 스캔 대상

ComponentScan의 탐색 위치와 기본 스캔 대상 @ComponentScan(basePackages = {"hello.test1", "hello.test2"}) 지정하는 패키지의 하위 패키지만을 스캔한다. 지정 하지 않으면 현재 위치 패키지의 하위 패키지를 다 스캔하기 때문에 필요하다면 지정한다. 즉, @ComponentScan이 붙은 설정 정보 클래스의 패키지가 스캔의 시작 위치가 됨. 위 예시는 hello/text1 패키지와 test2 패키지의 하위 패키지만을 스캔 권장 방법은 애초에 구성 설정 클래스는 프로젝트를 대표하는 정보이므로, 프로젝트 시작 root에 위치 시켜 놓고, bassPackages 지정은 생략하는 것이 최근 관례 @SpringBootApplication SpringBoot 프..

Spring / 컴포넌트 스캔에서 빈을 중복으로 등록하는 상황과 충돌

컴포넌트 스캔에서 빈을 중복으로 등록하는 상황과 충돌 자동 빈 등록 (ComponentScan) 수동 빈 등록 (@Bean) 컴포넌트 스캔에 의해 자동으로 중복된 이름의 스프링 빈이 등록되면? ConflictingBeanDefinitionException 예외가 발생 수동 빈 등록과 자동 빈 등록이 충돌 되었다면? 예외가 발생하지 않는다. 이 경우, 수동 빈 등록이 우선권을 가진다. 수동 빈이 자동 빈을 오버라이딩 해버림. 테스트 코드를 보면 오버라이딩 했고 replace됐다는 것을 확인 할 수 있음. 그러나 이 것은 큰 버그를 야기할 수 있다. 따라서 최근의 스프링 부트는 수동 빈 등록과 자동 빈의 충돌 발생 시 오류가 발생하도록 기본 값을 바꿈. @SpringBootApplication 클래스를 실행..