목록전체 글 (117)
킹의 개발일지
최근 쇼핑몰 프로젝트 책을 공부하면서 JPA를 사용하던 중, for 문을 순회하면서 데이터 조회 메서드를 호출 할 때마다 조회 쿼리문이 추가로 실행되는것을 봤다. @Transactional(readOnly = true) public Page getOrderList(String email, Pageable pageable){ List orders = orderRepository.findOrders(email, pageable); Long totalCount = orderRepository.countOrder(email); List orderHistDtos = new ArrayList(); for (Order order : orders){ OrderHistDto orderHistDto = new OrderH..
웹 어플리케이션을 만든다 하면 테이블마다 반복적으로 들어가는 칼럼이 있다. '언제 등록/수정 됐는가', '누가 등록/수정 했는가' 를 기록하기위해 테이블마다 registerTime, updateTime, registerdBy, updatedBy와 같은 칼럼을 사용한다. 또한 어느 테이블은 누가 수정했는지는 알 필요가 없고 등록/수정된 시간만 알고싶은 테이블도 있기 마련이다. 이처럼 테이블마다 반복적으로 들어가는 정보를 테이블의 특성에 따라 유동적이게 칼럼으로 사용하고자 할 때 @MappedSuperclass의 사용을 고려해 보자! @MappedSuperclass 어노테이션은 RDBMS에 없는 객체지향의 상속 개념을 표현할 수 있게 해준다. @MappedSuperclass 어노테이션을 사용하면 부모클래스는..
테스트 케이스를 작성할 때 반복되는 초기화 작업이 있을 때 가 종종있다. 예를들면 아래 예시를 보면 DemoUtils demoUtils = new DemoUtils(); 이 부분에서 DemoUtils 객체를 테스트 케이스마다 반복적으로 선언해주고 있다. 만약 테스트 케이스가 수만개가 된다면 해당 클래스에 변경이 일어났을 때 해야할 고생은 이만저만이 아닐 것이다. 개방-폐쇄 원칙은 이와 같은 유형의 변경이 더 이상의 수정을 유발하지 않도록 하는데, 이에 맞게 바꿔줄 필요가 있다. @Test @DisplayName("Null And NotNull") void testNullAndNotNull() { DemoUtils demoUtils = new DemoUtils(); // 반복이 있는 부분 String st..
단위테스트 스프링 프레임워크 공부한걸 바탕으로 이것저것 만들어보는데, 테스트에는 큰 관심을 두지 않았다. 그러다보니 생산성이 많이 떨어지는것을 체감했다. 항상 애플리케이션을 실행해서 출력된 로그로 확인하다보니, 코드수가 늘어나니까 기다리는게 한세월이었다. 토비의 스프링에서 테스트 관련 이야기를 할 때, 개발자들이 무의식적으로 실패하는 테스트는 피하는 경향이 있다는것이다. '당연히 이런짓은 안하겠지?' 라는 생각으로 해당 부분의 테스트는 건너띄고 나중에 앱이 터지고나서야 부랴부랴 수습한다는 것이다. 나도 테스트 코드를 짜다보니 그런 부분을 빼먹는 경우가 많았다. 실제론 테스트 코드를 만들기 귀찮음도 있었다. JUnit을 다루는 솜씨도 떨어지다보니, 테스트에 무관심해졌다. 여하튼 토비의 스프링을 읽으면서 테..
토이 프로젝트를 구상하던중 다른 웹 페이지로부터 데이터를 읽어와야하는 기능이 필요한것을 느꼈다. 찾던중 Java HTML 파서인 jsoup을 알게 됐고 공부한 내용을 정리하고자 한다. jsoup: Java HTML Parser jsoup은 HTML에 동작하는 자바 라이브러리로 데이터를 추출, 조작하기 편리한 API를 제공한다. 사용법은 차차 살표보도록 하자. 먼저 가져오고자 하는 데이터를 살펴보자. URL의 경우 op.gg/summoners/kr/:사용자이름과 같은 형식으로 구성되며, 얻고자하는 데이터는 div.css-er3yn6 e1x14w4w1 클래스 아래에 있는 데이터들이다. (f12를 눌러 개발자 도구로 들어가면 원하는 클래스 이름을 얻을수 있다) 원하는 데이터의 태그와 클래스명을 알았으니 이제 ..
토이 프로젝트를 구상중에, 일정한 주기로 웹 크롤링하는 기능이 필요할것 같아 스케줄링에 대한 공부가 필요했다. 해서 배운내용을 정리해보고자 한다. Spring Scheduler는 별도의 추가적인 의존성이 필요하지 않는다. Spring Boot starter에 기본적인 의존성으로 제공되는데, 사용하기 위해서는 @EnableScheduling어노테이션을 붙여주면 된다. package com.study.schedule; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableScheduling; @EnableScheduling @SpringBoo..