목록분류 전체보기 (57)
공부함
스프링에서 @Value 는 properties 파일에서 속성값을 읽어오는데 쓰인다. 테스트 시에는 @Value를 어떻게 사용할까? public class ValueTest { @Value("${member.password}") private String password; @Test void valueTest() { assertThat(password).isNotNull(); assertThat(password).isEqualTo("babo123!"); }}위 테스트는 password값이 null로 실패한다. @ExtendWith(SpringExtension.class)@ContextConfiguration(classes = TestConfig.clas..
@ParameterizedTest를 사용하는 이유@ParameterizedTest 는 테스트 메서드에 파라미터를 전달해 하나의 테스트 메서드로 여러 파라미터 묶음에 대해 테스트 할 수 있게 하는 기능이다. @ParameterizedTesf를 쓰면 좋은 점이 무엇일까?중복 해소100 종류의 상품에 대한 구매 테스트를 작성한다고 가정하자. @Test 를 사용한다면 100가지의 상품에 대해 전부 테스트 메서드를 작성해야 한다. @ParameterizedTest를 사용하면 상품 구매 테스트 메서드에 파라미터로 100종류의 상품을 전달해 하나의 테스트 코드 메서드를 재활용해 중복을 해소할 수 있다. 유지보수구매 로직에 변경이 생긴다면 @Test로 작성한 100가지의 테스트 메서드를 전부 수정해야 한다. 이 과정에..
DB와 연동한 통합 테스트 코드 작성 시 더미데이터가 필요한 경우가 있다. 상황에 따른 더미데이터 삽입 방법을 알아보자.orm 활용mybatis, jpa와 같은 orm을 사용해 더미데이터를 삽입한다. orm을 통한 삽입 기능이 열려있어야 한다. 사이드프로젝트를 진행 할 때는 상품 데이터를 CRUD하는 기능을 한 프로젝트에 다 만들었다. 하지만 실무에서는 꼭 그렇다는 보장이 없다. web을 통해서는 상품 CRUD가 가능하지만, api는 상품 배송 승인, 반려에만 사용된다면 CREATE 기능은 굳이 개발하지 않을 수 있다. 테스트 시 더미데이터 삽입을 위해 CREATE 기능을 추가할 순 없다. 사용하지 않는 기능을 테스트를 위해 추가하는 것은 배보다 배꼽이 커지는 일이다. 취약점, 버그가 발생할 수 있고 추..
최근 ERD를 설계하면서 외래 키를 구성할 때 해당 테이블이 외래 키 없이 식별될 수 있으면 비식별 관계로, 외래 키가 식별에 필요하다면 식별 관계로 설계했다. 이후 JPA를 위해 entity 매핑을 하면서 설계가 별로라고 느껴져서 식별 관계, 비식별 관계에 대해 알아보고, JPA에서는 어떻게 사용하는지 알아보았다. 외래 키 Foreign Key다른 테이블의 PK를 참조하는 속성을 외래 키라 한다. 외래 키는 테이블 간 관계를 맺는 데 사용된다. 외래 키가 속한 테이블을 자식 테이블, 외래 키 값을 제공하는 테이블이 부모 테이블이다. 외래 키로 맺는 관계는 식별 관계, 비식별 관계가 있다. 식별 관계, 비식별 관계식별 관계식별관계는 ERD상에서 실선으로 표시한다. FK가 자식 테이블의 PK에 포함된다. ..
지금까지 테스트 코드를 짜면서 테스트 코드 자체에만 집중했지 테스트 환경에는 크게 관심 없이 남들이 하는대로 가져다 썼던 것 같다. 그래서 이번에는 테스트 환경설정에 대해 알아보려고 한다.@Mock VS @MockBean먼저 mock 관련해 간단하게 알고 넘어가자.@MockMock 객체를 생성해 사용한다.스프링 컨텍스트와 무관하다.단위 테스트에 사용@MockBeanMock 객체를 생성해 스프링 컨텍스트에 등록한다.통합 테스트에 사용@SpringBootTest@SpringBootTest는 전체 애플리케이션 컨텍스트를 로드한다. 즉 모든 빈을 로드한다.@SpringBootTest는 이러한 상황에서 사용하면 좋다.전체 애플리케이션 컨텍스트가 필요할 때통합 테스트를 하고 싶을 때 (모든 빈, 서비스, 컨트롤러 ..
작년에 사이드프로젝트를 진행하면서 api서버를 개발했다. 프론트에서 http 요청 바디에 데이터를 넘겨주면 api서버에서는 무조건 dto로 받기로 했다. 팀원이 그렇게 처음부터 정하고 프로젝트를 진행했기 때문에 왜 dto를 사용해야 되는지 고민해보지를 않았다. dto를 쓰지 않은 코드를 보면서 역체감으로? 왜 dto를 쓰는게 좋은 지 느끼게 된 바가 있어 글을 작성해보겠습니다. 어디까지나 제 주관적인 생각입니다. HttpServletRequest getParameter 사용 @RequestMapping("/messages") public ModelAndView make(HttpServletRequest request) { String title = request.g..
출처김영한님 스프링 핵심 원리 기본편 강의https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard 스프링 핵심 원리 - 기본편 강의 | 김영한 - 인프런김영한 | 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 백엔드 개발자가 되어보www.inflearn.com 스프링 컨테이너가 필요한 이유스프링 컨테이너가 무엇인지 알아보기 전에 먼저 스프링 컨테이너가 왜 필요한지 알아보자. public class OrderServic..
서블릿이란?서블릿(Servlet)이란 동적 웹 페이지를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술이다. 서블릿은 웹 요청과 응답의 흐름을 간단한 메서드 호출만으로 체계적으로 다룰 수 있게 해준다. 서블릿은 클라이언트의 요청에 따라 동적으로 작동하는 웹 애플리케이션 컴포넌트이다. 서블릿이 필요한 이유서블릿을 사용하면 개발자는 의미있는 비즈니스 로직 개발에만 집중하면 되므로 효율적인 개발이 가능하다. @WebServlet(name = "helloServlet", urlPatterns = "/hello")public class HelloServlet extends HttpServlet { @Override protected void service(HttpServletRequest..