Spring JPA - 엔티티를 DTO로 바꿔서 사용하는 이유
·
Spring/JPA
이번 포스트에서는 SpringBoot 프로젝트에서 왜 Entity를 DTO로 변환시켜서 사용하는지 알아보자 1. 엔티티와 DTO 엔티티(Entity): 엔티티는 데이터베이스의 테이블과 직접 매핑되는 객체로, 비즈니스 로직을 포함할 수 있다. 엔티티는 데이터베이스와의 상호작용을 위해 설계되며, 변경이 발생하면 데이터베이스 스키마에도 영향을 미칠 수 있다. DTO(Data Transfer Object): DTO는 계층간 데이터 교환을 위한 객체로, 로직을 포함하지 않고 순수한 데이터만을 가지고 있다. DTO는 특정 엔티티의 일부 데이터나 여러 엔티티의 조합된 데이터를 전달하는 데 사용될 수 있으며, 클라이언트와 서버 간의 통신에 최적화된 구조를 가진다. 2. 엔티티를 직접 사용하는 문제점 데이터 노출 문제 ..
스프링에서의 데이터베이스 접근 방법: DAO, Mapper, 그리고 @Mapper 어노테이션 사용법
·
Spring/Spring 기초 지식
스프링, 스프링부트에선 DB에 어떻게 접근하는지 알아보자 스프링 프레임워크와 스프링 부트는 데이터베이스 접근을 위해 매우 유연하고 효율적인 방법을 제공한다. 이번 포스트에서는 스프링에서 데이터베이스에 접근하는 다양한 방법을 탐구해 본다. 우선, 데이터 접근을 위한 기본 구조인 DAO(Data Access Object)에 대해 알아보고, ORM(Object-Relational Mapping)을 위한 Mapper의 사용과 그 특징을 살펴볼 것이다. 또한, MyBatis와 같은 SQL 매핑 도구를 사용할 때 유용한 @Mapper 어노테이션의 중요성과 사용시 주의점에 대해서도 다룰 예정이다. 이를 통해 스프링을 사용한 데이터베이스 접근 방식의 깊이와 유연성을 이해할 수 있을 것이다. 1. DAO란 무엇인가? 1..
스프링에서 데이터 전달의 핵심: 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 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..