본문 바로가기

Spring31

스프링에서 Conditional 어노테이션이란? 목차@Conditional이란?구현예제다양한 기능결론1. @Conditional이란?Spring Framework에서 사용되는 어노테이션 중 하나로, 빈(Bean)의 조건부 생성 및 등록을 제어하기 위해 사용되는 어노테이션이다.즉, 컴포넌트의 Bean등록여부에 조건을 달 수 있게하는 어노테이션이다.스프링은 IoC컨테이너에 객체를 Bean으로 등록하여 사용하는데 @Component로 선언된 클래스는 모두 Bean으로 등록하고 여기에 조건부를 달 수 가 있다.스프링 기반의 웹사이트에서 추가기능을 넣으려고 해보자.스프링은 추가기능의 설정파일을 읽고 POJO에서 Bean을 IoC컨테이너에 등록한다. 이때 설정파일을 조건부로 읽는다면 필요할 때만 IoC컨테이너에 Bean을 등록할 수 있다. 여기서 @Conditi.. 2024. 2. 19.
Validation 책임과 범위는 어떻게 가져가야할까? 목차개요Client vs ServerLayer별 책임3-1. Controller Layer3-2. Service Layer3-3. Repository Layer결론1. 개요개인 프로젝트를 진행하다 보니 작은 고민이 생겼다.과연 어떤 Layer에서 Validation을 체크하는게 맞을까? 에 대한 고민이었다.크게 Controller, Service, Repository로 나누었다면 넘어온 값들에 대한 벨리데이션에 대한 책임을 나누어야 한다고 생각했다.2. Client vs ServerClient빠르게 검증은 가능하지만 Client에서는 조작이 가능하기 때문에 Client만 검증을 하는 것은 안된다.Server빠르게 검증은 불가능하지만 안정적인 유효성 검사가 가능하고 DB를 통한 검증도 가능하다.Client.. 2024. 2. 6.
테스트코드가 프로덕션코드에 영향을 주어서는 안된다? 목차개요두 가지 관점어떤 관점이 더 옳은가?결론1. 개요테스트 코드를 작성하면서 어려움을 겪고 말았다. 상황은 다음과 같다.서비스 테스트 코드를 작성할때, RequestDto가 필요한데, Dto 클래스는 getter만 열어둔 상황.실제 프로덕트 코드에서는 Controller를 통해 @RequestBody로 들어오기 때문에 문제는 없지만, 테스트 코드에서 Reflection을 이용해 값을 채우거나 mapper를 이용해서 작성하였는데, 여기서 고민이 시작되었다. 2. 두 가지 관점프로덕션 관점@Builder나 @Allargument가 없어도 프로덕션 코드에서는 @RequestBody로 들어오기 때문에 필요하지 않다.테스트 관점테스트 코드를 작성할 때 사용하는 코드니까 작성해도 무방하다.3. 어떤 관점이 더 .. 2024. 2. 3.
@NotNull @NotBlank @NotEmpty를 뭐가 다를까? 목차개요@NotNull 이란?@NotEmpty 란?@NotBlank 란?결론1. 개요프로젝트를 진행하면서 validation체크를 하기 위한 비슷한 (@NotNull, @NotBlank, @NotEmpty) 3가지 어노테이션을 마주하게 되었다.스프링 부트 3.0부터는 기존 javax.validation.constraints 에서 jakarta.validation.constraints 로 패키지명이 변경 되었으나 동일한 기능을 제공하고 비슷한 어노테이션에 차이를 알아보려고 한다.2. @NotNull 이란?The annotated element must not be null. Accepts any type.@NotNull은 Null 값만 허용하지 않는다. 즉 Null이 아닌 “”, “ “ 인 경우에는 허용을.. 2024. 2. 1.
상태검증 vs 행위검증 목차상태검증이란?행위검증이란?1. 상태검증이란?메서드가 수행될 때 연관되어있는 협력 객체의 '상태'를 검증함으로써 제대로 기능이 동작하고 있는지를 검증하는 것이다.val abc = Abc() abc.increase() assertThat(abc.value).isEqualTo(10)abc 인스턴스의 value가 10과 같은지 상태를 검증한다.단위테스트2. 행위 검증이란?테스트하고자 하는 메소드가 참조하고 있는 협력 객체의 메소드를 제대로 호출 하는지에 대한 '행위'를 검증하는 것이다.val abc = Abc() abc.increase() verify(abc, atLeastOnce()).increase()abc 인스턴스의 increase() 메서드가 최소 한 번은 수행되었는지 행위를 검증한다.통합테스트 2024. 1. 29.
logback vs log4j2 목차개요Log4j2Logback결론1. 개요Logback와 Log4j2는 둘 다 Java 기반 프로젝트에서 사용되는 인기 있는 로깅 프레임워크다.둘은 비슷한 목적을 가지고 있지만, 기능, 성능 및 사용 편의성 측면에서 차이가 있다. 아래 차이를 살펴보자.2. Log4j2Apache Log4j2 는 가장 최근에 나온 프레임워크이며, 목표는 Logback 에 포함된 일부 개선 사항을 포함하여 Log4j 에 자체 개선 사항을 제공하고, Log4j 및 Logback 의 문제를 방지하여 두 프레임워크를 모두 개선하는 것이다.따라서 Logback 과 마찬가지로 Log4j2 는 SLF4J 에 대한 지원을 제공하며, 로깅 구성을 자동으로 다시 로드하며 고급 필터링 옵션을 지원한다.이러한 기능 외에도 람다 표현식을 기반.. 2024. 1. 8.