스프링에서 데이터 전달의 핵심: VO와 DTO의 이해 및 활용
·
Spring/Spring 기초 지식
스프링에서 Data를 전달하는 객체에는 VO, DTO가 있는데 이게 어떤것인지 알아보자 VO (Value Object)와 DTO (Data Transfer Object)는 모두 Java 및 Spring과 같은 객체 지향 프로그래밍 및 프레임워크에서 데이터를 표현하고 전달하는 데 사용되는 설계 패턴이다. 1. VO, DTO의 차이점 (불변성) 1-1. VO(Value Object)의 불변성 VO는 '불변 객체'다. 한 번 생성되면, 그 상태를 바꿀 수 없다. 작고, 속성이 정해진 객체로, 생성 시에 모든 속성이 설정되고, 이후에는 바뀌지 않는다. 불변성은 VO의 중요한 특징이다. 이건 프로그램의 복잡성을 줄여주고 안정성을 높여준다. 1-2. DTO(Data Transfer Object)의 불변성 DTO는 ..
Spring 환경설정: Xml과 @Configuration의 차이점
·
Spring/Spring 설정
이번 포스팅에서는 스프링에서 환경설정을 위해 사용하는 xml작성방식과 @Configuration 방식에 대해 알아보자 1. Xml을 사용한 Spring 환경설정 xml을 사용한 환경설정 Spring Framework는 SpringBoot가 나오기 이전부터 사용되어 온 대표적인 Java 기반의 엔터프라이즈 애플리케이션 개발 프레임워크이다. 전통적인 Spring Framework에서는 설정을 위해 XML 파일을 주로 사용했다. 이 XML 파일에는 Bean의 정의, 의존성 정보, 각종 설정 등이 포함되어 있었다. 작성예시 위의 예시에서 beans 태그는 루트 엘리먼트이고 내부의 bean 태그는 Spring에서 관리하는 객체인 빈(bean)을 정의하는 것이다. bean 태그 안의 id는 빈의 식별자이며, cla..
Spring Boot 폼 데이터 바인딩: @ModelAttribute 활용법
·
Spring/Spring 기초 지식
이번 포스트에서는 @ModelAttribute를 활용한 데이터 바인딩 방식에 대해 알아보자 1. modelAttribute 방식으로 폼을 작성하고 전송하는 장점 데이터 바인딩의 용이성: modelAttribute 속성을 사용하여 폼 데이터를 모델 객체에 자동으로 바인딩할 수 있다. 이를 통해 컨트롤러에서 해당 모델 객체를 매개변수로 받아 데이터를 쉽게 처리할 수 있다. form 필드의 이름과 model 객체의 필드 이름이 일치하면 자동으로 데이터가 매핑되어 컨트롤러에서 별도의 데이터 추출 및 변환 과정 없이 데이터를 사용할 수 있다. 유효성 검증의 편의성: Spring MVC는 @Valid 어노테이션을 통해 데이터의 유효성을 검증할 수 있다. modelAttribute 방식을 사용하면 모델 객체에 @Va..
[스프링, 스프링 부트] Spring test - Mock에 대한 이해
·
Spring/테스트 코드
이번 포스트는 Mock에 대한 심도높은 이해를 탐구하는 내용이다. 1. Mock이 뭘까? “Mock"이라는 단어는 테스트에서 많이 사용되는 용어로, 실제 객체를 모방한 가짜 객체를 의미한다. 이러한 Mock 객체는 테스트를 수행하는 동안 실제 객체의 행동을 흉내내거나 예측된 방식으로 반응하도록 설정할 수 있다. 이를 통해 테스트를 보다 통제 가능한 환경에서 실행할 수 있다. MockMVC: Spring MVC의 동작을 모방(Mock)하는 라이브러리다. 이것을 사용하면 HTTP 요청을 DispatcherServlet에 보내고 그 결과를 검증할 수 있다. 실제 네트워크를 통하지 않고도 Spring MVC의 동작을 테스트할 수 있어, 테스트 속도가 빠르고 어떤 Controller와 View가 호출되었는지, 어..
[스프링, 스프링부트] Spring test - 테스트 코드의 기초(5) [CRUD 테스트]
·
Spring/테스트 코드
이번 포스트에서는 CRUD 테스트를 작성해 보자 1. GET 테스트 이 테스트에서는 GET 요청을 사용하여 특정 사용자를 가져오는 API를 테스트한다. 우선 userService.findUserById() 메소드를 모킹하여 항상 동일한 사용자 정보를 반환하도록 한다. 그 후에 mockMvc.perform()을 사용하여 GET 요청을 보내고, andExpect()를 통해 응답 상태와 응답 본문이 예상된 값과 일치하는지 검증한다. @Test public void testGetUser() throws Exception { User user = new User("john", "doe", "john.doe@gmail.com"); Mockito.when(userService.findUserById(anyLong()..
[스프링, 스프링 부트] Spring test - 테스트 코드의 기초(4) [mock 테스트]
·
Spring/테스트 코드
이번 포스트에서는 저번에 이어 mock을 사용한 테스트 설명을 추가적으로 이어간다. 1. Mockito.mock 사용방법 > mock으로 모의객체 생성 Mockito.mock은 Mockito 라이브러리에서 제공하는 기능 중 하나로, 모의 객체(Mock Object)를 생성하는 데 사용된다. 모의 객체는 실제 객체의 동작을 흉내 내는 가짜 객체로, 테스트 시에 실제 객체를 대체하여 테스트를 수행할 수 있도록 도와준다. Mockito.mock 메서드를 사용하면 인터페이스, 추상 클래스 또는 클래스의 인스턴스를 가짜 객체로 만들 수 있다. 가짜 객체는 실제 객체의 메서드를 호출할 수 있으며, Mockito를 사용하여 원하는 동작을 정의할 수 있다. 가짜 객체는 실제 객체와 동일한 인터페이스를 가지므로 테스트 ..
[스프링, 스프링 부트] Spring test - 테스트 코드의 기초(3) [Mockito.when() 메서드]
·
Spring/테스트 코드
이번 포스트에서는 스프링에서 테스트 코드를 작성하는 예시를 설명한다. 1. API 테스트 API 테스트는 서버가 API 요청에 대해 예상된 응답을 반환하는지 확인하기 위해 작성된다. 이를 위해 MockMvc를 사용하여 가상의 API 요청을 보내고 응답을 검증하는 방법을 주로 사용한다. MockMvc는 post(), get(), put(), delete() 등의 HTTP 메소드를 사용하여 요청을 전송하고, andExpect()를 통해 응답을 검증한다. 예시 코드는 MockMvc를 사용하여 API 요청을 보내고 응답 상태를 검증하는 테스트이다. 여기서 mockMvc.perform() 부분은 API 요청을 보내는 부분이고, andExpect(status().isNotFound()) 부분은 응답 상태를 검증하는..
[스프링, 스프링 부트] Spring test - 테스트 코드의 기초(2) [MockMvc, MockBean]
·
Spring/테스트 코드
이번 포스트에서는 저번 포스트에 이어서 테스트 코드의 용어 설명을 진행하겠다. 1. MockMvc란 MockMvc는 Spring Test Library에서 제공하는 한 클래스로서, 웹 서버를 따로 구동시키지 않아도 Spring MVC의 동작을 모방(mock)하도록 도와준다. 이를 통해 Controller가 정상적으로 동작하는지 테스트할 수 있다. 1-1. MockMvc 설정하기 MockMvc 인스턴스는 @WebMvcTest나 MockMvcBuilders를 통해 생성할 수 있다. @WebMvcTest(controllers = MyController.class) public class MyControllerTest { @Autowired private MockMvc mockMvc; } 위의 코드에서 @Web..