Backend

    Stream API 무작정 연습하기!

    Stream API 무작정 연습하기!

    Java 8 부터 람다 표현식, Stream API, 함수형 인터페이스를 지원하기 시작했다. Stream API는 데이터를 추상화하고, 가공하여 데이터를 처리할 수 있게 하는 메서드들을 정의해놓은 Java에서 지원하는 API이다. 스트림 API의 특징 기존 데이터로 부터 생성된 스트림 데이터는 별도의 데이터로 생성되기 때문에 기존 데이터는 변경되지 않는다. List stringList = List.of("zayson", "maeng", "joon"); Stream stringStream = stringList.stream().sorted(); // 기존 데이터로부터 생성한 스트림 stringStream.forEach(System.out::println); // 기존 데이터가 변경되지 않는다. for (S..

    Kotlin 맛보기 - 변수

    Kotlin 맛보기 - 변수

    코틀린은 변수 선언 시 var, val을 사용한다. var : Variable, 수정 가능한 가변 변수 val : Value, Read-Only인 불변 변수 (Java의 final ) // Kotlin var number1 = 10L // 가변 number1 = 20L val number2 = 10L // 불변 numbre2 = 20L // 에러 // Java long number1 = 10L; numbre1 = 20L; final long number2 = 10L; number2 = 20L; 코틀린은 타입을 컴파일 시점에 추론하기 때문에 타입을 작성하지 않아도 되지만, 변수 : 타입으로 지정하는 것이 가능하다. // Kotlin var number1: Int = 10 // Java int number1..

    Repository 단위 테스트

    Repository 단위 테스트

    @DataJpaTest와 @AutoConfigureTestDatabase를 이용해 Repository 메서드를 단위 테스트해보자. @DataJpaTest 기본적으로 JPA 관련 설정들을 로드한다. 기본적으로 인메모리 테스트 데이터베이스를 이용해 실제 데이터베이스를 이용하지 않고 사용하는 것이 가능하다. 또한, @Tranasactional을 가지고 있기 때문에 테스트가 진행된 이후 자동으로 롤백하는 것이 가능하다. @AutoConfigureTestDatabase 애노테이션 뜻 그대로 테스트 데이터베이스의 구성정보를 자동으로 설정해주는 애노테이션이다. 이 또한, @DataJpaTest에 가지고 있다. 위에서 기본적으로 인메모리 테스트 데이터베이스를 이용한다고 한 부분이 @AutoConfigureTestDat..

    [API 고급] 컬렉션 조회 최적화

    [API 고급] 컬렉션 조회 최적화

    “김영한 강사님의 JPA 활용편 2 - API 개발과 성능 최적화"를 듣고 간단하게 정리하기” OneToOne, ManyToOne과 같은 경우는 Fetch Join을 해주는 것으로 성능을 최적화 하는 것이 가능하다. ToMany(OneToMany)의 경우에는 Join을 하는 경우 N개의 컬럼으로 늘어나기 때문에 최적화에 어려움이 있다. Ex. 주문과 주문상품 관계로 주문 조회를 최적화 주문과 배송, 회원(ToOne관계), 주문상품(ToMany)을 조회한다. V1 : 엔티티를 직접 노출 (안좋은 방법) 주문상품과 주문한 상품의 상세 정보를 가져오기 위해서 Lazy 로딩이 설정되어 있는 프록시의 강제 초기화가 필요하다. 아래의 방법은 엔티티를 직접 노출하기 때문에 DTO로 변환해서 데이터를 화면에 전달해야한..

    [API 개발 고급] 지연 로딩과 조회 성능 최적화

    [API 개발 고급] 지연 로딩과 조회 성능 최적화

    “김영한 강사님의 JPA 활용편 2 - API 개발과 성능 최적화"를 듣고 간단하게 정리하기” 양방향 연관관계에서 직접 데이터를 반환하는 경우 서로가 서로를 참조하기 때문에 무한루프가 발생한다. Order -> Member -> Order -> Member ... 무한루프발생! 양방향 연관관계가 매핑된 엔티티 한 쪽에는 @JsonIgnore를 사용한다. 지연로딩으로 설정된 값은 DB에서 가져오지 않고 가짜 Proxy 객체를 생성하고 실제 객체에 접근하고자 할때 그 때 프록시가 쿼리를 날려서 DB에서 값을 가져온다. Hibernate5Module와 @JsonIgnore를 이용해 엔티티를 넘긴 경우 무한루프 없이 데이터를 조회해 오는 것이 가능하다. 지연 로딩을 피하기 위해서 즉시 로딩 (EAGER)로 변경..