전체 글
-
Maven QueryDSL QClass 에러Spring 2023. 1. 24. 20:21
Maven에서 QueryDSL 사용을 위한 QClass 생성 도중 오류 발생 문제 Complie을 눌러도 별도의 QClass 생성이 안됨 원인 찾기 및 해결 Gradle이 아닌 Maven 환경에서의 QueryDSL글을 찾아가며 구글링 진행하며 아래 순서대로 진행하며 문제 해결 pom.xml queryDSL 플러그인 확인 및 버전 5.0 이상 확인 Gradle 기준 queryDSL이 5.0 이하의 버전을 사용할 경우 컴파일 시 QClass 생성이 안된다고함 혹시 몰라서 Maven에서도 수정 Maven 클린 이후 다시 컴파일 해결완료 맨날 마크다운으로 쓰던 기본모드로 쓰던 리스트가 이상하네... 단순하면서 당연한 이야기로 타겟 폴더가 살아있어 새롭게 QClass를 만들지 못함
-
이펙티브 자바 [3] 모든 객체의 공통 메서드카테고리 없음 2023. 1. 24. 16:58
equals는 일반 규약을 지켜 재정의 하라 (아이템 10) 재정의가 필요한 경우 EqualsBuilder , @EqualsAndHashCode 사용 EqualsBuilder 외 HashCodeBuilder, ToStringBuilder, CompareToBuilder 등이 있어 해당 리플렉션 API를 이용하여 재정의 가능 org.apache.commons.lang3.builder @EqaulsAndHashCode 롬복 어노테이션의 경우 두 해쉬값이 같은지를 확인하는 hashcode(), 두 객체가 동일한지 확인하는 equals() 이다. equals를 재정의하려거든 hashCode도 재정의 해라 (아이템 11) 마찬가지로 재정의가 필요한 경우 EqualsBuilder , @EqualsAndHashCod..
-
이펙티브 자바 [2] 객체 생성과 파괴Java 2022. 11. 8. 15:42
생성자 대신 정적 팩토리 메서드를 고려해라 (아이템 1) 디자인 패턴의 팩토리 메서드와는 다름 클라이언트가 클래스의 인스턴스를 얻는 수단으로는 public 생성자 외 클래스는 정적 팩토리 메서드를 제공할 수 있다. 정적 팩토리 메서드의 장점 이름을 가질 수 있음 클래스의 시그니처가 같은 생성자가 여러 개 필요 시 생성자를 정적 팩토리 메서드로 변경하고 각각 차이점을 잘 알아 볼 수 있는 이름으로 지어주자 호출 시 매번 인스턴스를 새로 생성하지 않아도 된다. 새로 생성한 인스턴르를 캐싱하여 재활용하는 식으로 불필요한 객체 생성을 피할 수 있음 (플라이웨이트 패턴) 반복되는 요청에 같은 객체를 반환하는 식으로 언제 어느 인스턴스가 살아 있게 할지를 철저히 통제할 수 있다. 플라이웨이트 패턴 인스턴스를 공유시..
-
TDD 정리카테고리 없음 2021. 10. 26. 13:51
목차 1. TDD 1.1. TDD 장점 1.2. TDD 개발 패턴 1.3. TDD 단점 2. TDD는 언제 사용해야 할까? 2.1. 프로젝트 중반에 TDD를 도입하려면 2.2. 그럼 도입하면 안되나? 3. 테스트 3.1. 테스트 규칙 3.2. 테스트 작성방법 3.3. 테스트 패턴 3.4. 테스트 종류 부록1 단위 테스트 부록2 Mock 객체 테스트 부록3 통합 테스트 TDD 테스트 코드를 먼저 작성한 뒤 실제 코드를 작성하는 개발방식 예상되는 결과와 실제 결과 사이에 존재하는 차이를 줄일 수 있는 기술 TDD장점 개발자가 놓치고 지나간 것을 확인하여 프로그램의 결함을 낮출 수 있다. 개발자의 자신감을 높여준다. TDD는 개발자의 자신감을 위해서 사용한다. TDD가 없다면 일년이 이상 지나게 될 경우 코드..
-
TDD[3]Spring 2021. 10. 8. 15:45
테스트 주도 개발의 패턴 테스트 주도 개발 패턴 테스트 한다는건 무엇을 뜻하는지? 언제 테스트를 해야 하는지? 테스트할 로직을 어떻게 고를지? 테스트할 데이터를 어떻게 고를지? 테스트란? 테스트할 시간이 어딨어. 그냥 릴리즈해 이 장면에 대해서는 결과를 보장할 수 없다. 스트레스를 점점 많이 받으면 결국 실패하게 된다. - 스트레스를 받으면 테스트를 실행한다. 테스트를 실행하면 스트레스를 받는다. - 이 부분의 경우 자동화된 테스트가 존재하다면 두려운 정도를 선택할 수 있다. (스트레스 또한 줄일 수 있게 된다.) 격리된 테스트 매일 아침 출근하면 지난밤 테스트 결과를 담은 종이더미가 놓여 있었다. 이 경험에서 두 가지의 교훈을 얻을 수 있었다. 테스트가 충분히 빨라서 내가 직접, 자주 실행할 수 있게끔..
-
TDD[2]Spring 2021. 10. 8. 15:45
XUnit 예시 XUnit은 직접 해보지 않고 책만 읽음 XUint 으로 가는 첫 걸음 정리 자기 과신에 차서 몇 번의 잘못된 출발을 한 후, 아주 자그마한 단계로 시작하는 법을 알아냈다. 일단 하드코딩을 한 다음에 상수를 변수로 대처하여 일반성을 이끌어 내는 방식으로 기능을 구현 플러거블 셀렉터를 사용했다. 플러거블 셀렉터는 정적 코드 분석을 어렵게 만들기 때문에 앞으로 최소 4개월 안에는 사용하지 않기로 약속 메서드 이름을 저장하여 해당하는 메서드를 동적으로 호출하는 방법 테스트 프레임워크를 작은 단계로만 부트스트랩했다. 테이블 차리기 테스트를 작성하면 공통된 패턴을 발견하게 된다. 3A 패턴 given - when - then 아닌가? 준비 (arrange) - 객체를 생성 행동 (act) - 어떤..
-
TDD[1]Spring 2021. 10. 8. 15:44
그냥 Spring에 저장함 Test - Driven Development : By Example TDD를 쫒아가려 하지 말고 TDD가 나를 쫒아오게 해라 TDD 수련법 처음 훈련 방법 간단하고 쉬운 문제들을 TDD로 시도합니다. 가능하면 전에 접하고, 프로그래밍해본 문제가 좋습니다. 초록 막대 주기는 가능하면 짧도록 합니다. ex) a=b+3Xc를 입력하고자 할 때, a= 까지 입력한 시점은 빨간 막대 시점입니다. 그 시점에서 테스트를 실행하면 분명히 실패할 것이기 때문입니다. 가능한 초록 막대가 나오도록 해야 합니다. 이때 초록 막대 주기의 최대 시간을 정해놓고 진행하다가 시간을 초과하면 직전 초록 막대 상태로 돌린다음 새로 시작하는 것이 좋습니다. 진짜로 만들기 전까지만 가짜로 구현하기를 적극적으로 ..
-
서블릿 동작원리Java 2021. 9. 16. 19:59
서블릿 서블릿의 동작원리 클라이언트가 URL 요청 시 HttpRequest 객체를 생성하여 서블릿 컨테이너로 전송한다. HttpRequest 요청을 받은 서블릿 컨테이너는 HttpServletReq, HttpServletResp 두 객체를 생성한다. 사용자의 요청을 분석하여 맞는 서블릿을 생성 후(init() ) 요청을 전송한다. 이 과정은 Web.xml 에서 직접 서블릿 매핑 설정을 해주어야 한다. Spring boot 에서는 자동으로 매핑 설정을 해줌 해당 서블릿에서 service() 메소드를 호출하며, GET / POST 요청에 맞는 doGet(), doPost() 메소드를 호출한다. 개발자가 잘 처리해서 만든 동적페이지를 HttpServletResponse 담아 클라이언트 요청에 응답한다. 응답이..