Bean 등록할 때 @Configuration을 사용해야 하는 이유
Backend/Spring2024. 12. 29. 14:00Bean 등록할 때 @Configuration을 사용해야 하는 이유

Spring 애플리케이션에서 객체를 관리하는 핵심은 Spring 컨테이너이다.Spring 컨테이너는 Bean을 생성하고 관리할 때 @Configuration 어노테이션을 함께 사용한다.@Configuration 어노테이션은 싱글톤을 보장하면서 Bean들 사이의 의존성 주입을 해준다.이 글에서는 @Configuration이 필요한 이유에 대해서 설명해보겠다.@Configuration이란?@Configuration은 클래스가 Spring 컨테이너에 Bean을 등록하기 위한 클래스임을 나타낸다. 주요 특징Bean 등록 및 관리: @Bean 메서드를 통해 Bean을 정의한다.Singleton 보장: 컨테이너는 동일한 @Bean 메서드 호출 시 항상 같은 객체를 반환한다.의존성 관리: Bean 간의 의존성을 명확..

BeanFactory와 ApplicationContext
Backend/Spring2024. 12. 28. 16:00BeanFactory와 ApplicationContext

BeanFactory와 ApplicationContext의 기본 계층 구조BeanFactory스프링 컨테이너의 최상위 인터페이스다.스프링 bean을 관리하고 조회하는 역할을 담당한다.지연 로딩(Lazy Loading)Bean을 실제로 요청할 때(getBean() 호출 시) 생성하고 초기화한다.이는 초기 로딩 속도를 빠르게 하고, 메모리 사용을 최적화할 수 있다.ApplicationContextBeanFactory의 기능을 포함해서 여러 기능을 가지고 있는 BeanFactory의 하위 인터페이스이다.즉시 로딩컨텍스트 초기화 시점에 모든 Bean을 미리 생성하고 초기화한다.이는 애플리케이션 시작 시점에 모든 Bean의 상태를 확인할 수 있어 런타임 오류를 사전에 방지할 수 있다.그러나 필요하지 않은 Bean..

서블릿 컨테이너 초기화와 스프링의 처리 방식
Backend/Spring2024. 12. 27. 18:25서블릿 컨테이너 초기화와 스프링의 처리 방식

웹 애플리케이션 개발에서 서블릿 컨테이너 초기화는 필수적인 과정이다.서블릿 컨테이너는 애플리케이션 실행 시점에 초기화 작업을 수행하여 서블릿, 필터, 리스너 등을 등록한다.이 글에서는 서블릿 컨테이너 초기화의 전반적인 구조와 이를 기반으로 스프링 레거시와 스프링 부트에서 각각 어떻게 처리하는지 살펴보겠다.1. 서블릿 컨테이너 초기화의 기본 방법1.1 ServletContainerInitializer1.1.1 정의서블릿 3.0 스펙에서 제공하는 ServletContainerInitializer는 서블릿 컨테이너 초기화를 담당하는 표준 인터페이스이다.웹 애플리케이션이 시작될 때 서블릿 컨테이너(Tomcat, Jetty 등)는 이 인터페이스를 구현한 클래스를 자동으로 탐색하고 실행한다.public interf..

WAS(Tomcat)가 필요한 이유
Backend/Servlet | JSP2024. 12. 24. 11:00WAS(Tomcat)가 필요한 이유

1. WAS(Web Application Server)란?WAS(Web Application Server)는 웹 애플리케이션을 실행하고 관리하는 미들웨어다.클라이언트 요청 -> 애플리케이션 로직 실행 -> 결과 반환의 과정을 담당자바/스프링 기반의 경우 WAS를 서블릿 컨테이너라고 봐도 무방주요 예시 : Tomcat, Jetty 등1.1 WAS의 주요 기능멀티 쓰레드 처리많은 클라이언트 요청을 동시에 처리하기 위해 내부적으로 쓰레드를 관리트랜잭션 관리여러 작업(쿼리, 로직)이 하나의 논리적 단위로 묶였을 때, 데이터 무결성과 일관성을 보장WAS에서 트랜잭션 환경을 제공(JNDI 데이터 소스 등)할 수 있지만, 실제 트랜잭션 처리는 보통 애플리케이션 레벨(Spring Framework 등)에서 관리하는 경..

4부: @ConfigurationProperties으로 타입 안전하게 외부 설정 관리
Backend/Spring2024. 12. 23. 14:534부: @ConfigurationProperties으로 타입 안전하게 외부 설정 관리

스프링부트는 @ConfigurationProperties를 통해 외부 설정을 객체로 바인딩해서 관리하는 기능을 제공한다.이를 활용하면 설정값을 타입 안전하게 사용할 수 있고, 유지보수성이 크게 향상된다.이번 글에서는 @ConfigurationProperties의 개념, 사용법, 검증에 대해 알아보겠다.1. @ConfigurationProperties란?1.1 개념과 장점@ConfigurationProperties는 외부 설정값을 자바 객체에 자동으로 바인딩하는 기능을 제공한다.이를 통해 설정 파일의 값을 일괄적으로 객체에 매핑할 수 있으며, 타입 안전성을 보장한다.장점타입 안전성: 설정값이 객체 필드와 타입에 맞게 바인딩된다.일괄 바인딩: 설정값을 하나의 객체로 묶어서 관리할 수 있다.유지보수성 향상: ..

3부: 스프링 레거시와 스프링부트의 외부 설정
Backend/Spring2024. 12. 21. 15:103부: 스프링 레거시와 스프링부트의 외부 설정

스프링 레거시와 스프링 부트는 외부 설정 파일(Properties와 Yaml)을 관리하고 활용하는 방식에서 차이점이 있다.이 글에서는 각각의 설정 파일 활용법과 자동 설정 기능, 우선순위 비교를 통해 두 방식의 차이점을 자세히 알아보겠다.1. 스프링 레거시에서 Properties 사용하기스프링 레거시에서는 .properties 파일을 사용해 설정값을 관리할 수 있으며, @PropertySource를 통해 이를 등록해야 한다.1.1 @PropertySource와 @Value를 사용한 값 조회@PropertySource와 @Value사용하면 .properties 파일을 읽고 스프링 Environment에 등록할 수 있다.import org.springframework.context.annotation.Con..

2부: 스프링 외부 설정 통합 관리 : Environment와 PropertySource의 동작 구조
Backend/Spring2024. 12. 19. 22:022부: 스프링 외부 설정 통합 관리 : Environment와 PropertySource의 동작 구조

스프링은 다양한 외부 설정 값을 통합적으로 관리하기 위해 Environment와 PropertySource라는 개념을 제공한다.이를 통해 OS 환경 변수, 자바 시스템 속성, 커맨드 라인 옵션 인수, 그리고 설정 파일 등 다양한 외부 설정 값을 하나의 인터페이스로 관리할 수 있다.이번 글에서는 스프링의 외부 설정 통합 관리 구조와 동작 원리를 알아보겠다.1. 스프링의 외부 설정 통합스프링은 외부 설정을 Environment와 PropertySource를 통해 추상화하여 관리한다.이를 통해 개발자는 외부 설정 값을 동일한 방법으로 읽을 수 있다.1.1 Environment 인터페이스 개념Environment는 스프링에서 설정값을 통합적으로 관리하는 추상화 인터페이스이다.역할: 다양한 외부 설정 값을 키-값..

1부: 자바 애플리케이션에서 외부 설정 조회 방법
Backend/Spring2024. 12. 18. 22:521부: 자바 애플리케이션에서 외부 설정 조회 방법

자바 애플리케이션 개발 시 외부 설정을 읽을 수 있는 다양한 방법이 존재한다.이 글에서는 OS 환경 변수, JVM 시스템 속성, 커맨드 라인 인수, 그리고 커맨드 라인 옵션 인수(스프링부트)를 통해 설정값을 전달하는 방법을 자세히 알아보겠다.1.  OS 환경변수OS 환경 변수는 운영체제에서 설정된 전역적인 값이다. 이러한 환경 변수는 다양한 프로그램에서 활용될 수 있다.1.1 터미널에서 환경 변수 조회Mac/Linux에서 터미널로 조회printenv 또는 env 명령어를 사용하면 현재 시스템에 설정된 환경 변수를 확인할 수 있다.printenvWindows에서 환경 변수 조회명령 프롬프트에서 다음 명령어를 실행한다.set1.2 자바 코드에서 환경 변수 조회자바에서는 System.getenv()를 통해 O..

window 함수 활용법(feat. group by와 다른점)
Computer Science/데이터베이스2024. 12. 17. 18:26window 함수 활용법(feat. group by와 다른점)

프로그래머스 - 연도별 대장균 크기의 편차 구하기 문제를 풀다가 window 함수의 유용함을 알게 되어서 정리해보려고 한다.내가 푼 원래 풀이SELECT ym.YEAR, (ym.max - ed.SIZE_OF_COLONY) AS YEAR_DEV, ed.IDFROM ECOLI_DATA ed JOIN ( SELECT YEAR(DIFFERENTIATION_DATE) AS YEAR, MAX(SIZE_OF_COLONY) AS max FROM ECOLI_DATA GROUP BY YEAR(DIFFERENTIATION_DATE) ) ym ON YEAR..

MySQL ONLY_FULL_GROUP_BY 이해하기
Computer Science/데이터베이스2024. 12. 11. 14:39MySQL ONLY_FULL_GROUP_BY 이해하기

MySQL에서 GROUP BY를 사용할 때 다음과 같은 오류가 발생할 때가 있다.Error Code:1055. Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'practice.employees.hire_date' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by쉽게 말해서 SELECT절에서 사용하는 칼럼이 GROUP BY에 포함되지 않거나, 함수적 종속성을 만족하지 않아 only_full_group_by모드와 호환되지 않는다는 의..

Apache Tomcat 버전별 Jakarta EE 의존성 설정
Backend/Servlet | JSP2024. 12. 10. 15:16Apache Tomcat 버전별 Jakarta EE 의존성 설정

Apache Tomcat은 Java 웹 애플리케이션을 실행하는 데 가장 보편적으로 사용되는 서블릿 컨테이너 중 하나이다.Tomcat의 버전에 따라 지원하는 Jakarta EE 사양(Jakarta Servlet, JSP, EL 등)이 달라지며, 이를 바탕으로 프로젝트에 필요한 의존성 설정도 차이가 있다.이 글에서는 톰캣 버전별 Jakarta dependency 설정에 대해서 정리해보겠다.Tomcat 버전별 Jakrta EE 스펙 사양Servlet SpecJSP SpecEL SpecWebSocket SpecAuthentication Spec (JASPIC)Apache Tomcat VersionLatest Released VersionSupported Java Versions6.14.06.02.23.111.0..

COUNT 함수와 SUM 함수의 차이점
Computer Science/데이터베이스2024. 12. 1. 22:33COUNT 함수와 SUM 함수의 차이점

COUNT 함수와 SUM 함수 모두 데이터를 집계할 때 사용한다.그런데 사용하다보면 사용 방법이 헤갈릴 때가 있어서 정리해두려고 한다.COUNT와 SUM의 사용 목적COUNT 함수 : 특정 조건을 만족하는 데이터 행의 개수를 구하는 데 사용한다.SUM 함수 : 특정 칼럼의 값들을 모두 더할 때 사용합니다.실제 사용 예시예제 테이블 생성먼저 학생 정보를 저장할 테이블을 만들자.CREATE TABLE students( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20), score INT); 모든 데이터를 조회하는 쿼리SELECT * FROM students;결과COUNT 함수 사용*(아스트릭)으로 COUNTSELECT COUNT(*) FROM stu..

image