모르지 않다는 것은 아는것과 다르다.

전체 글 224

JDBC

JDBC (Java Database Connectivity) 란? JDBC는 DB에 접근할 수 있도록 Java에서 제공하는 API이다. 모든 Java의 Data Access 기술의 근간 즉, 모든 Persistence Framework는 내부적으로 JDBC API를 이용한다. 자바는 DBMS(Oracle, MySQL, MongoDB 등)의 종류에 상관 없이 하나의 JDBC API를 이용해서 데이터베이스 작업을 처리합니다. JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공한다. JDBC는 DB에 접근해서 CRUD를 쉽고 효율적이게 할 수 있게 하고, 고성능에서의 세련된 메소드를 제공하며 쉽게 프로그래밍 할 수 있게 도와줍니다. JDBC 의 역할은 아래와 같이 정리할 수 있다. Java ..

Jdbc 2022.02.27

Hikari

DBCP DataBase Connection Pool 의 약자이다. DataSource는 Connection pool을 관리하고 연동할 수 있게 하는 표준 인터페이스다. 다시말해서 DBCP는 DB Connection 객체를 미리 만들어 Connection Pool에 보관하고 필요할 때마다 DB에 연결된 Connection을 꺼내 사용하는 것을 의미합니다. Connection pool 를 만들지 않는다면? -> 매번 Connection 객체를 만들어야 할 것이다. -> 큰 비용낭비가 발생한다. 미리 만들어진 Connection을 재사용하여 CPU의 부담과 Connection을 생성하는데 필요한 시간을 줄일 수 있다. DBCP 의 기본 옵션은 아래와 같다. maxActice : 유휴 상태와 사용중인 커넥션을..

Jdbc 2022.02.27

파라미터를 사용해서 테스트하기

Junit4 - JUnitParams 아래 코드는 중복된 코드가 많아 보인다. -> 원인은 매개변수를 받지 못했기 때문이다. public class EventTest { ... @Test public void testFree() { // Given Event event = Event.builder() .basePrice(0) .maxPrice(0) .build(); // When event.update(); // Then assertThat(event.isFree()).isTrue(); // Given event = Event.builder() .basePrice(100) .maxPrice(0) .build(); // When event.update(); // Then assertThat(event.is..

Junit 2022.02.27

테스트란 (토비의 스프링 2장)

테스트 테스트란 만들어진 코드를 확신할 수 있게 도와주는 도구이다. 또한 변화에 유연하게 대처할 수 있고, 개발자에게 안심을 준다. 좋은 테스트란? 테스트하고자 하는 대상이 명확하다면 그 대상을 기준으로 단위테스트를 진행하는 것이 좋다. -> 대상에 집중할 수 있다. 동일한 테스트는 항상 동일한 결과를 보장해야한다. 순서에 영향을 받지 않아야 한다. 좋은 습관? 먼저 스프링 컨테이너 없이 테스트할 수 있는 방법을 우선적으로 고려해야한다. (통합테스트 보단 단위테스트!) 부정적인 케이스를 먼저 만드는 습관을 가져야 한다. 픽스퍼 테스트를 수행하는 데 필요한 정보나 오브젝트를 픽스쳐라고 한다. 픽스쳐를 아래와 같이 구현할 수 있다. @DisplayName("userDao test") public class ..

Books 2022.02.27

테스트 더블

테스트 더블 테스트는 깔끔함과 단정함을 유지해야한다. -> 그러기 위해서는 독립적이어야 한다. 독립적이라는 것은 어떤 테스트도 다른 테스트에 의존하지 않는다는 것을 의미한다. 또한 어느 순서로든, 어떤 개별 테스트라도 실행해 볼 수 있어야 한다. 독립적인 테스트를 작성하려면 테스트 대상을 의존하는 것으로부터 격리(Isolation) 시켜야한다. 여기서 의존하는 것으로부터 격리하면 의존하는 것에대한 대체물이 필요하다. -> 이 대체물이 테스트 더블이라고 할 수 있다. 테스트 코드를 작성함에 있어서 DOC(depoended-on component; 의존 구성 요소)를 사용할 수 없다면, 테스트 더블로 대체할 수 있다. 테스트 더블의 역할을 아래와 같이 정리할 수 있다. 테스트 대상 코드를 격리합니다. 테스트..

Junit 2022.02.27

WebMvc Test

@RunWith(SpringRunner.class) @WebMvcTest public class EventControllerTests { @Autowired MockMvc mockMvc; @Test public void createEvent() throws Exception { mockMvc.perform(post("/api/events/") .contentType(MediaType.APPLICATION_JSON_UTF8) //요청타입 .accept(MediaTypes.HAL_JSON)) //받고싶은 타입 .andExpect(status().isCreated()); } } MockMvc 클래스를 사용하면 스프링 MVC 테스트 핵심 클래스 mockMvc 를 사용하면 사용해서 가짜 요청을 만들어서 목킹이 되..

Junit 2022.02.27

단위테스트 vs 통합테스트

테스트 코드의 안정성을 높이고, 기능을 추가하거나 수정하면서 발생하는 부작용(Side-Effect)를 줄일 수 있다. 기존 코드를 수정하는 것에 대한 불안감을 줄일 수 있고, 결과적으로 생산성을 높여줄 수 있다. 테스트는 외부의 문제가 발생하지 않는이상 계속해서 일관적인 결과를 제공해주어야 한다. 스프링부트 테스트는 크게 단위테스트와 통합테스트로 나뉜다. 스프링부트 테스트 관련 애노테이션은 아래와 같습니다. 단위테스트란 단위 테스트는 가장 작은 단위의 테스트다. 슬라이스 테스트 라고도 한다. 개발 단계에서 각 모듈이 개발완료된 시점에서 수행되는 테스트다. F.I.R.S.T 단위 테스트 원칙 Fast : 테스트 코드를 실행하는 일은 오래 걸리면 안된다. Independent:독립적으로 실행이 되어야 한다...

Junit 2022.02.27

Service 단위테스트

Service 단위테스트 Service 레이어만 단위테스트 하기위해서는 먼저 Controller와의 연결을 끊어야한다. Controller는 Web모듈이므로 Service Test를 진행하려면 Web에 대한 의존성을 받으면 안된다. @WebMvcTest, @SpringBootTest와 같은 테스트를 사용하면 Service만을 테스트하기가 어려워진다. 두 번째로 Repository와의 연결을 끊어야 한다. Domain을 통해 비즈니스 로직은 수행해야하지만, 실제로 DB에 저장할 건 아니기 때문에 이 부분을 제거할 방법이 필요하다. SpringBoot 테스트는 특정 객체를 가짜로 대체할 Mocking을 제공하고 있고, 아래와 같은 Annotation을 제공한다. @Mock @MockBean @Spy @Spy..

Junit 2022.02.27

Repository 단위테스트

Repository 단위테스트 Ropsitory 서비스에서 엔티티의 영속화를 위해서 Repository를 호출한다. 이렇게 Repository 의 기능만을 테스트 하기위해서는 Service와의 결합을 끊어야 한다. SpringBoot 테스트는 @DataJpaTest Annottation을 제공하는데, 이것을 통해 Repository의 단위 테스트가 가능하다. @DataJpaTest persistence layer 를 슬라이스 테스트하기 위한 각종 자동 설정을 지원한다. @DataJpaTest 테스트는 저장을 위한 JPA 연관 관계가 적절히 구성되었는지, Repository 메서드가 제대로 구현되었는지 확인하는 것이 목적이다. JPA 관련된 설정만 로드한다. WebMVC와 관련된 Bean이나 기능은 로드되..

Junit 2022.02.27

MockMvc

MockMvc 란? 애플리케이션을 배포하지 않고도, 서버의 MVC 동작을 테스트 할 수 있는 라이브러리이다. 실제 객체와 비슷하지만 테스트에 필요한 기능만 가지는 가짜 객체를 만들어서 애플리케이션 서버에 배포하지 않고도 스프링 MVC 동작을 재현할 수 있는 클래스를 의미한다. 주로 Controller 레이어 단위테스트에 많이 사용된다. MockMvc는 크게 세가지 동작을 갖는다. perform 가상의 request(요청)를 처리한다. request(요청)은 MockHttpServletRequestBuilder를 통해서 생성된다. except 가상의 response에 대해서 검증한다. 검증항목은 아래와 같다. hadler() status() model() view() 위 메서드들은 ResultMacher를..

Junit 2022.02.27