@NotNull, @NotEmpty, @NotBlank 비교
Backend/Spring2025. 2. 5. 20:23@NotNull, @NotEmpty, @NotBlank 비교

@NotNull, @NotEmpty, @NotBlank는 스프링에서 유효성 검사를 할 때 사용하는 어노테이션들이다.각각의 어노테이션들은 역할이 유사해보이지만, 허용하는 값의 범위가 다르다. 차례대로 설명해보겠다.1. @NotNull특징null값을 허용하지 않는다.문자열의 경우, 빈 문자열("") 또는 공백 문자열(" ")은 허용된다.사용 예시public class UserDTO { @NotNull(message = "이름은 null일 수 없습니다.") private String name;}사용 시 참고객체나 필드가 반드시 초기화되어야 할 때 사용한다.단, 문자열이 비어 있거나 공백만 있는지에 대한 검증은 하지 않는다.2. @NotEmpty특징null과 빈 문자열("")을 허용하지 않는다.공백 ..

스프링 부트 3.4부터 @MockBean이 deprecated되고 @MockitoBean으로 변경된 이유
Backend/Test2025. 2. 1. 10:58스프링 부트 3.4부터 @MockBean이 deprecated되고 @MockitoBean으로 변경된 이유

스프링 부트 3.4 버전부터는 @MockBean이 deprecated 되고, @MockitoBean으로 대체되었다.여기서 끝내긴 좀 그러니 관련해서 좀 더 글을 써보겠다..1. @MockBean이란?@MockBean은 스프링 부트가 제공하는 어노테이션이다.가짜 객체(틀만 있는 객체)를 bean으로 만드는 역할을 한다. 예를 들어 service를 만들 때 repository를 사용하는 경우가 많다.테스트를 진행할 때 repository가 무조건 제대로 작동한다고 가정하고 service에 집중해서 테스트하고 싶을 때 repository를 mock으로 빈 주입을 해준다.즉, repository는 실제 동작하는 것이 아니라 호출이 되었는지, 되었다면 몇 번이나 되었는지 등의 행위만 검증할 때 사용한다.사용예시@..

서블릿 매핑 우선순위
Backend/Servlet | JSP2025. 1. 31. 12:04서블릿 매핑 우선순위

서블릿 매핑 규칙서블릿 매핑은 우선순위가 존재하며 가장 먼저 성공한 매핑이 사용되고 이후 매칭은 시도하지 않는다.다음은 1번부터 차례대로 우선순위를 가지는 매핑이다.정확한 경로 매핑 (Exact Match)요청 경로가 서블릿 매핑과 정확히 일치하면 해당 서블릿이 선택예: /catalog 요청이 /catalog로 매핑된 서블릿에 전달경로 기반 매핑 (Path Mapping)서블릿 컨테이너는 요청 경로와 매핑 패턴이 가장 긴 경로를 선택매핑은 디렉토리 구조처럼 계층적으로 탐색되며, /문자를 경로 구분자로 사용예: /foo/bar/index.html요청이 들어왔을 때 foo/bar/*와 foo/* 매핑이 있다면 foo/bar/*로 매핑된 서블릿에 요청 전달확장자 매핑 (Extension Mapping)요청 경..

Jsp 사용할 때 루트 경로에서 index.jsp가 작동하는 이유
Backend/Servlet | JSP2025. 1. 28. 14:23Jsp 사용할 때 루트 경로에서 index.jsp가 작동하는 이유

Jsp 기반 웹 애플리케이션을 개발할 때, webapp 디렉토리 아래에 index.jsp 파일만 있어도 루트 경로(/)로 접근 시 자동으로 index.jsp가 실행된다.1. index 파일 처리 개략적 과정루트 경로("/")로 요청이 들어오면, 톰캣은 웰컴 파일 목록(welcome-file-list)을 먼저 확인한다.웰컴파일이 발견되면, 해당 파일로 내부 포워드하여 처리한다.파일이 jsp확장자라면 JspServlet이 처리하고, html이라면 DefaultServlet이 처리한다.2. 톰캣의 웰컴 파일 목록톰캣은 기본적으로 conf/web.xml 파일에 아래와 같이 웰컴 파일 목록을 정의해둔다. index.html index.htm index.jsp 루트..

JSP 동작 원리
Backend/Servlet | JSP2025. 1. 22. 22:15JSP 동작 원리

JSP는 서버에서 웹 페이지를 동적으로 생성하기 위한 기술이며 실행시점에 서블릿으로 변환되어 처리된다.JSP가 처리되는 방식에 대해서 더 자세히 살펴보도록 하겠다.1. JSP 동작 방식JSP 파일은 클라이언트의 최초 요청이 들어올 때 서블릿으로 변환되고, 이후에는 변환된 클래스를 재사용하는 방식으로 동작한다.즉, 다음과 같은 단계로 처리된다.클라이언트가 JSP 파일 요청JSP엔진(Jasper)이 JSP 파일을 서블릿 자바 코드로 변환하고 컴파일하여 클래스 파일을 생성한다.변환된 서블릿 클래스가 메모리에 로드되고, 클라이언트 요청을 처리한다.최초 변환 후에는 JSP파일이 변환되지 않는 한 매번 변환 및 컴파일 과정을 거치지 않고 기존 변환된 서블릿 클래스를 재사용한다.그리고 jsp에서 변환된 서블릿은 일반..

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는 스프링에서 설정값을 통합적으로 관리하는 추상화 인터페이스이다.역할: 다양한 외부 설정 값을 키-값..

image