본문 바로가기

전체글116

테스트코드가 프로덕션코드에 영향을 주어서는 안된다? 목차개요두 가지 관점어떤 관점이 더 옳은가?결론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.
__**JDK Dynamic Proxy vs CGLIB Proxy**__ 목차개요JDK Dynamic Proxy란?CGLIB Proxy란?JDK Dynamic Proxy vs CGLIB Proxy1. 개요스프링 AOP는 2가지 타입의 Proxy를 제공한다. 바로 JDK Dynamic Proxy와 CGLIB Proxy이다.스프링 AOP의 ProxyFactoryBean이 proxy를 생성하는데, 경우에 따라 이 둘 중 하나를 서택해서 사용하는 방식이다.2. JDK Dynamic Proxy란?JDK에서 지원하는 프록시 생성 방법외부 라이브러리에 의존하지 않는다프록시 팩토리에 의해 런타임 시 다이나믹하게 만들어지는 오브젝트프록시 팩토리에게 인터페이스 정보만 제공해주면 해당 인터페이스를 구현한 클래스 오브젝트를 자동으로 생성Reflection API를 사용한다. (느리다)인터페이스가 .. 2023. 12. 29.
Log4j란? 목차개요Log4j란?Log4j 특징Log4j 구조결론1. 개요 평상시에 롬복라이브러리를 자주 사용하는데 로그를 남기고 싶을때 Log4j 어노테이션을 이용하여 자주 사용하였다.하지만 로그를 남기는 용도로만 사용하였을뿐 자세히 Log4J에 대해 알지 못하여 정리를 해보려고 한다.2. Log4j란?자바 애플리케이션에서 로깅(logging)을 구현하기 위한 오픈 소스 라이브러리다.로깅은 애플리케이션의 동작 및 이벤트를 기록하는 것을 의미하며, 애플리케이션의 디버깅, 모니터링, 문제 해결, 보안 등 다양한 목적으로 사용된다. log4j는 이러한 로깅 작업을 효율적으로 처리할 수 있는 도구를 제공한다.3. Log4j의 특징log4j는 로깅 성능을 최적화하고 효율적으로 처리할 수 있는 기능을 제공한다.log4j는 부.. 2023. 12. 20.