Spring32 레이어드 아키텍처(Layerd Architecture)와 테스트 목차개요Presentation Layer(User Interface)Business Layer(Business Logic)Persstence Layer(Data Access)레이어 아키텍처의 핵심요소1. 개요스프링 MVC 기반에서 가장 많이 사용되는 아키텍처이다. 아래 그림을 살펴 보자.레이어 별로 나누어서 개발을 하기위해 나누었으나 언급하는 곳마다 용어가 조금씩 다르기도 하고 어떤 관점에서 보는 것에 따라 달라지기도 한다.왜 레이어를 나누는가를 중점으로 볼때 나의 답은 아래와 같다.관심사의 분리 때문에 레이어를 분리하는 것이라 생각한다. 관심사를 나누어서 각 계층마다 책임을 나누고 유지보수 용이하도록 하는 것이다.2. Presentation Layer(User Interface)Presentation .. 2024. 2. 23. 스프링에서 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. 이전 1 2 3 4 5 6 다음