Java Framework/Spring 16

[Spring] MockMvc

MockMvcMockMvc는 실제 서블릿 컨테이너(톰캣 등)를 구동하지 않고도 Spring MVC Controller를 HTTP 요청 관점에서 테스트할 수 있게 해주는 클래스입니다.즉, Spring의 DispatcherServlet, Controller, ArgumentResolver, Validator, ExceptionHandler 등 MVC 전체 흐름을 테스트 환경에서 그대로 재현할 수 있습니다.내부 원리MockMvc는 DispatcherServlet을 모의(Mock) 환경에서 동작시키고, HTTP 요청을 가상의 요청 객체 (MockHttpServletRequest)로 전달합니다.이를 통해 실제 웹 브라우저에서 요청한 것처럼 Request Mapping, 파라미터 바인딩, 응답 객체 생성, 예외 처..

[Lombok] @Data

@DataJava에서는 객체지향 프로그래밍을 위해 필드에 대한 접근을 캡슐화(encapsulation)하며, 이에 따라 getter, setter, equals(), hashCode(), toString() 등의 메서드를 반복적으로 작성해야 하는 불편함이 존재합니다.이를 해결하기 위해 등장한 것이 바로 Project Lombok이며, Lombok의 @Data 어노테이션은 이러한 보일러플레이트 코드를 자동으로 생성해줍니다.@Data의 내부@Data는 Lombok이 제공하는 어노테이션 중 하나로, 해당 클래스에 대해 다음과 같은 기능을 자동으로 생성합니다@Getter: 모든 필드에 대해 getter 메서드 생성@Setter: 모든 필드에 대해 setter 메서드 생성@ToString: toString() 메..

[Spring] 단위 테스트(Unit Test) vs 통합 테스트(Integration Test)

단위 테스트(Unit Test)단위 테스트는 DB 없이 서비스 로직을 검증하는 테스트이다.Spring을 실행하지 않고 Mockito로 필요한 객체를 Mock 처리해서 사용한다.📌 단위 테스트 코드 예시@ExtendWith(MockitoExtension.class) // Spring 실행 없이 Mockito만 사용class UserServiceTest { @Mock // 가짜 객체(Mock) 생성 private UserRepository userRepository; @InjectMocks // UserService가 위의 Mock 객체를 사용하도록 설정 private UserService userService; @Test void findUserById() { ..

[Spring] JPA Specification

JPA SpecificationJPA Specification은 Spring Data JPA에서 제공하는 도구로, 복잡한 데이터베이스 쿼리를 SQL 문자열로 작성하는 대신 Java 객체와 메서드로 표현하여 객체지향적으로 작성할 수 있게 도와줍니다. 이를 통해 코드의 가독성과 재사용성이 높아지고, 유지보수가 쉬워집니다.특징1. 객체지향적 쿼리 작성JPA Specification은 SQL 대신 Java 객체를 사용하여 쿼리를 작성합니다.SQL: SELECT * FROM customers WHERE name = 'John' AND age > 30;객체지향적 표현: Specification.where(nameEquals("John")).and(ageGreaterThan(30));2. 재사용 가능한 조건각 조건을..

[Spring] Bean

BeanSpring Bean은 Spring 컨테이너가 관리하는 객체입니다.여기서 관리란 객체의 생성, 의존성 주입, 그리고 생명주기를 제어하는 것을 의미합니다.* 특징객체 관리의 중앙화 : 개발자가 직접 객체를 생성할 필요 없이 Spring이 대신 생성하고 관리합니다.재사용성 : 동일한 Bean은 컨테이너 내에서 필요에 따라 재사용됩니다.유연한 의존성 관리 : 객체 간의 의존관계를 설정하고 주입하는 작업을 간소화합니다.컨테이너Spring 컨테이너는 Spring 프레임워크가 제공하는 객체 관리 도구입니다.Spring 애플리케이션이 실행되면 Spring 컨테이너가 시작되고, 이 컨테이너는 애플리케이션에서 사용할 객체(Bean)를 생성하고 관리합니다.Spring 컨테이너는 ApplicationContext 인..

[Spring] 페이징 (Paiging) 주요 메서드

페이징 (Paging)페이징(Paging)은 데이터를 한 번에 모두 보여주는 대신, 여러 페이지에 나누어 보여주는 방법입니다.데이터가 많아지면 한 화면에 전부 출력하는 것은 비효율적이기 때문에 사용자가 원하는 만큼의 데이터만 나누어 보여주도록 하는 것입니다.예를 들어, 게시판에서 글이 100개가 있을 때 한 페이지에 10개씩 보여준다면 총 10개의 페이지로 나누어 표시하는 방식이 페이징입니다.페이징 객체 & 클래스 1. 스프링에서는 페이징 처리를 위해 Pageable과 Page 객체를 사용합니다.Pageable : 페이지 번호와 페이지당 데이터 개수 등의 페이징 정보를 담는 객체입니다.Pageable pageable = PageRequest.of(0, 10); // 0번째 페이지부터 10개씩 가져오기Pa..

[Spring] 바인딩 (Binding)

바인딩 (Binding)Spring Binding은 클라이언트 요청 데이터와 서버의 Java 객체 간의 자동 매핑을 제공하는 Spring MVC의 핵심 기능 중 하나입니다.HTML 폼에서 입력한 데이터를 Java 객체로 변환하거나, 반대로 Java 객체의 데이터를 HTML 폼에 표시할 때 사용됩니다.이를 통해 개발자는 데이터를 수작업으로 변환하는 번거로움을 줄이고, 간결하고 가독성 높은 코드를 작성할 수 있습니다.예를 들어, 사용자가 웹 페이지에서 폼을 작성해 제출하면, 서버는 이 데이터를 Java 객체로 변환하여 처리하게 됩니다. Spring Binding은 이 과정을 자동화합니다.동작 원리Spring Binding은 다음과 같은 과정을 통해 데이터를 Java 객체와 연결합니다.클라이언트 요청 수신사용..

[Spring] Validation Library 데이터 유효성 검사

Validation LibrarySpring Validation은 Spring 프레임워크(Spring Framework)에서 제공하는 기능으로, 클라이언트가 입력한 데이터가 정해진 조건을 만족하는지 확인하고, 애플리케이션의 비즈니스 로직이 잘못된 데이터로 인해 문제가 발생하지 않도록 보장합니다.Spring Validation은 Java Bean Validation 표준을 기반으로 하며, Hibernate Validator라는 라이브러리(Library)를 사용하여 유효성 검증을 수행합니다. 데이터 유효성 검증웹 애플리케이션은 사용자 입력 데이터를 처리하는 경우가 많습니다.예를 들어, 회원가입 페이지에서 사용자가 이름, 이메일, 비밀번호를 입력한다고 할 때이름은 빈 값일 수 없고이메일은 올바른 형식이어야 하..

[Spring] HTTP Method

HTTPHTTP 메서드는 클라이언트가 서버에 요청을 보낼 때 사용하는 방식으로, CRUD(생성, 읽기, 업데이트, 삭제) 작업과 연결됩니다.HTTP 메서드는 서버가 클라이언트로부터 "무엇을 하길 원하는지"를 이해하도록 돕는 명령어입니다.* 주요 HTTP 메서드GET : 서버에서 데이터를 조회합니다.POST : 서버에 데이터를 생성하거나 추가합니다.PUT : 서버의 데이터를 수정하거나 업데이트합니다.DELETE : 서버에서 데이터를 삭제합니다.특징명확한 역할 분담: 요청의 의도를 명확히 나타냄으로써, 서버와 클라이언트 간의 의사소통을 표준화합니다.유지보수 용이성: 의도가 명확하면 개발자들이 코드를 이해하고 수정하기 쉬워집니다.RESTful 설계의 핵심 요소: HTTP 메서드는 RESTful API 설계에서..

[Spring] @Autowired

@Autowired @Autowired는 Spring에서 의존성 주입을 간편하게 처리하기 위해 제공하는 애노테이션입니다. Spring이 관리하는 빈(bean)을 찾아서 해당 객체를 자동으로 주입합니다.빈(bean)이란?Spring IoC 컨테이너에 의해 관리되는 객체를 의미합니다.Spring은 애플리케이션 실행 시 필요한 객체들을 생성하고 관리합니다.의존성 주입 (Dependency Injection) 의존성 주입은 객체가 직접 필요한 의존성을 생성하지 않고, 외부에서 주입받는 설계 방식입니다. 객체 간의 결합도를 낮춰 코드의 재사용성과 테스트 용이성을 높입니다. 1. 전통적인 방식public class OrderService { private PaymentService paymentService;..