java 84

완주하지 못한 선수(해시)

코딩테스트 후 오답노트 식으로 작성해보려 한다. 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요. 난 처음에 일단 participant의 값 중 completion에 포함 되어 있지 않는 값을 뽑아 냈다. 이렇게 되면 1, 2번 예제와 같은 경우는 잘 통과 할수 있으나 3번과 같은 중복 되었을 경우 실패한다. 따라서 나는 for문으로 part와 comp안에서 미리 비교된 값은 comp배열에서 빈값으로 만들어..

CT 2022.04.14

[TEST] Memory DB 사용

Memory DB는 오로지 테스트만 하고 외부 DB를 사용하지 않고 끝내고 싶을때, 테스트를 완전히 격리 된 환경에서 테스트 하기 위해서 사용한다. → JVM 안에서 메모리 모드로 띄우는거다. 테스트 코드 작성 시 운영의 설정파일과 따로 사용 하는 것이 좋다. 테스트 디렉토리 안에 resource 파일 생성 후 설정 파일(application.yml)을 생성하면, 테스트 코드가 실행 시에 그 설정파일을 참조한다. H2 Database Engine Using H2 Documentation Reference: SQL grammar, functions, data types, tools, API Features: fulltext search, encryption, read-only (zip/jar), CSV, ..

JAVA 2022.03.16

[JAVA] 결과조회(fetch)

fetch() : 리스트 조회, 데이터 없으면 빈 리스트 반환 fetchOne() : 단 건 조회 결과가 없으면 : null 결과가 둘 이상이면 : com.querydsl.core.NonUniqueResultException fetchFirst() : limit(1).fetchOne() fetchResults() : 페이징 정보 포함, total count 쿼리 추가 실행 fetchCount() : count 쿼리로 변경해서 count 수 조회 @Test public void resultFetch() throws Exception{ //given List fetch = jpaQueryFactory .selectFrom(member) .fetch(); Member fetchOne = jpaQueryFact..

JAVA 2022.03.14

[TEST] 예외 발생 테스트

만약 예외가 발생하는 코드를 테스트 할때 회원가입 중복 확인 테스트 진행 시 IllegalStateException (이미 존재하는 회원) 을 처리해주지 않으면 테스트 코드 실행 시 실패로 뜸 Test 어노테이션 옆에 excepted를 지정해주면 해당 exception 발생시에는 그냥 넘어갈 수 있다 @Test(expected = IllegalStateException.class) public void 중복_회원_예외() throws Exception{ //given Member member1 = new Member(); member1.setName("kim"); Member member2 = new Member(); member2.setName("kim"); //when memberService.joi..

JAVA 2022.03.08

[JAVA] Q-Type

Q-Type class는 Querydsl을 설정을 진행을 완료하면 @Entity가 붙은 클래스를 찾아 자동으로 생성된다. 예 ) @Entity가 붙은 User.java 의 QUser.java 클래스 파일이 자동으로 생성됨 이러한 Q-Type의 class들은 Querydsl을 사용할 때 우리가 만든 도메인 클래스의 구조를 설명해주는 역할을 한다. Q class 인스턴스를 사용하는 방법은 2가지가 있다. 1. 별칭 직접 지정 QMember qMember = new QMember("m"); 2. 기본 인스턴스 사용 QMember qMember = QMember.member; 이걸 더 줄여서 사용하기 위해 static import와 함께 사용한다. 아래 처럼 선언하면 굳이 선언을 해주지 않아도 사용 할 수 있다..

JAVA 2022.03.07

[TEST] 날짜 자동 생성 테스트

test code 작성 중 문제 발생 [문제] createdDate 자동 생성 테스트 코드 작성 중 문제가 발생 → 테스트를 위해 우선 데이터를 삽입 후 날짜를 비교해야 하는데 날짜가 null로 삽입됨 [해결] BaseTimeEntity에 @EntityListeners(AuditingEntityListener.class) 을 이용해 JPA 청취 기능을 하는데 main함수가 있는 클래스에서 JPA 청취 가능을 시켜주지 않으면 사용이 불가하다. 따라서 기능 구현을 할 클래스에 @EnableJpaAuditing 어노테이션을 붙여주면 생성됨 package movie.finder.Repository; import movie.finder.domain.Movie; import movie.finder.repositor..

JAVA 2022.03.03

[JAVA] Querydsl 설정

Querydsl build.gradle 작성 시 유의사항 보통 요즘은 spring boot 2.6 이상 이기 때문에 Querydsl을 5.0을 사용한다. 또한 2.6 이상부터는 다음과 같은 부분을 확인해야 한다. build.gradle 설정 변경 PageableExecutionUtils Deprecated(향후 미지원) 패키지 변경 Querydsl fetchResults() , fetchCount() Deprecated(향후 미지원) build.gradle 설정 방법 buildscript { ext { queryDslVersion = "5.0.0" } } plugins { id 'org.springframework.boot' version '2.6.3' id 'io.spring.dependency-man..

JAVA 2022.03.03

[JAVA] web 확장 - 페이징과 정렬

Spring data가 제공하는 페이징과 정렬 기능을 사용할 수 있다. @GetMapping("/members") public Page list(@PageableDefault(size = 5, sort = "id") Pageable pageable){ // 만약 page를 1 부터 시작하고 싶다면? -> 기본이 0 // 아래 처럼 구현체를 새로 만들어 다른 클래스로 넘겨주면됨 // PageRequest request = PageRequest.of(1, 2); // new MemberDto(member); 를 메소드 레퍼런스를 써서 저렇게 변경 가능 return memberRepository.findAll(pageable) .map(MemberDto::new); } 또한 파라미터로 Pageable을 받을 ..

JAVA 2022.03.03

[JAVA] Auditing

엔티티를 생성, 변경할 때 변경한 사람과 시간을 추적하고 싶으면? 등록일/수정일 , 등록자/수정자를 등록시켜주자! MainApplication에 @EnableJpaAuditing Annotation 추가 한다. BaseEntity에 @EntityListeners(AuditingEntityListener.class) 추가 아래와 같이 작성 가능하다. @EntityListeners(AuditingEntityListener.class) @MappedSuperclass @Getter public class BaseEntity{ @CreatedDate @Column(updatable = false) private LocalDateTime createdDate; @LastModifiedDate private Loc..

JAVA 2022.02.24