전체 글

전체 글

    API 개발 고급 - 실무 필수 최적화

    API 개발 고급 - 실무 필수 최적화

    API 개발 고급 - 실무 필수 최적화 OSIV(Open Session In View)와 성능 최적화 OSIV와 성능 최적화 Open Session In View: 하이버네이트에선 Seesion Open EntityManager In View: JPA에선 EntityManager (관례상 OSIV라 한다.) OSIV ON spring.jpa.open-in-view : true -> 기본값 WARN 7781 --- [ restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view r..

    API 개발 고급 - 컬렉션 조회 최적화

    API 개발 고급 - 컬렉션 조회 최적화

    API 개발 고급 - 컬렉션 조회 최적화 주문 조회 V1: 엔티티 직접 노출 주문 조회 V2: 엔티티를 DTO로 변환 주문 조회 V3: 엔티티를 DTO로 변환 - 페치 조인 최적화 주문 조회 V3.1: 엔티티를 DTO로 변환 - 페이징과 한계 돌파 주문 조회 V4: JPA에서 DTO 직접 조회 주문 조회 V5: JPA에서 DTO 직접 조회 - 컬렉션 조회 최적화 주문 조회 V6: JPA에서 DTO로 직접 조회, 플랫 데이터 최적화 주문내역에서 추가로 주문한 상품 정보를 추가로 조회하자.(OneToMany)를 조회하고, 최적화하는 방법을 알아보자. Order 기준으로 컬렉션인 OrderItem 와 Item 이 필요하다. 앞의 예제에서는 toOne(OneToOne, ManyToOne) 관계만 있었다. 이번에..

    트리의 부모 찾기 - 11725번

    트리의 부모 찾기 - 11725번

    트리의 부모 찾기 시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율 1 초 256 MB 27396 11727 8664 42.697% 문제 루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 노드의 개수 N (2 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N-1개의 줄에 트리 상에서 연결된 두 정점이 주어진다. 출력 첫째 줄부터 N-1개의 줄에 각 노드의 부모 노드 번호를 2번 노드부터 순서대로 출력한다. 예제 입력 1 7 1 6 6 3 3 5 4 1 2 4 4 7 예제 출력 1 4 6 1 3 1 4 예제 입력 2 12 1 2 1 3 2 4 3 5 3 6 4 7 4 8 5 9 5 10 6 11 6 12 예제 ..

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

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

    API 개발 고급 - 지연 로딩과 조회 성능 최적화 간단한 주문 조회 V1: 엔티티를 직접 노출 간단한 주문 조회 V2: 엔티티를 DTO로 변환 간단한 주문 조회 V3: 엔티티를 DTO로 변환 - 페치 조인 최적화 간단한 주문 조회 V4: JPA에서 DTO로 바로 조회 주문 + 배송정보 + 회원을 조회하는 API를 만들자 지연 로딩 때문에 발생하는 성능 문제를 단계적으로 해결해보자. 참고: 지금부터 설명하는 내용은 정말 중요합니다. 실무에서 JPA를 사용하려면 100% 이해해야 합니다. > 안그러면 엄청난 시간을 날리고 강사를 원망하면서 인생을 허비하게 됩니다. 간단한 주문 조회 V1: 엔티티를 직접 노출 ( 엔티티 노출은 사용 권장 X, 꼭 필요한 정보만 노출 ) OrderSimpleApiControl..

    나는야 포켓몬 마스터 이다솜 - 1620번

    나는야 포켓몬 마스터 이다솜 - 1620번

    나는야 포켓몬 마스터 이다솜 시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율 2 초 256 MB 26947 8852 6287 32.421% 입력 첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면 물어봐도 괜찮아. 나는 언제든지 질문에 답해줄 준비가 되어있어. 둘째 줄부터 N개의 줄에 포켓몬의 번호가 1번인 포켓몬부터 N번에 해당하는 포켓몬까지 한 줄에 하나씩 입력으로 들어와. 포켓몬의 이름은 모두 영어로만 이루어져있고, 또, 음... 첫 글자만 대문자이고, 나머지 문자는 소문자로만 이루어져 있어. 포켓몬 이름의 최대 길이는 20이야. 그 다음 ..

    요세푸스 문제 - 1158번

    요세푸스 문제 - 1158번

    요세푸스 문제 시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율 2 초 256 MB 50463 24503 17494 48.004% 문제 요세푸스 문제는 다음과 같다. 1번부터 N번까지 N명의 사람이 원을 이루면서 앉아있고, 양의 정수 K(≤ N)가 주어진다. 이제 순서대로 K번째 사람을 제거한다. 한 사람이 제거되면 남은 사람들로 이루어진 원을 따라 이 과정을 계속해 나간다. 이 과정은 N명의 사람이 모두 제거될 때까지 계속된다. 원에서 사람들이 제거되는 순서를 (N, K)-요세푸스 순열이라고 한다. 예를 들어 (7, )-요세푸스 순열은 이다. N과 K가 주어지면 (N, K)-요세푸스 순열을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ ..

    API 개발 고급 - 조회용 샘플 데이터 입력

    API 개발 고급 - 조회용 샘플 데이터 입력

    API 개발 고급 - 조회용 샙플 데이터 입력 조회용 샘플 데이터 입력 조회용 샘플 데이터 입력 API 개발 고급 설명을 위해 샘플 데이터를 입력하자. userA JPA1 BOOK JPA2 BOOK userB SPRING1 BOOK SPRING2 BOOK package myjpabook.jpashop; import lombok.RequiredArgsConstructor; import myjpabook.jpashop.domain.*; import myjpabook.jpashop.domain.item.Book; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactiona..

    API 개발 기본

    API 개발 기본

    API 개발 기본 회원 등록 API 회원 수정 API 회원 조회 API postman 설치 (https://www.getpostman.com) 회원 등록 API package myjpabook.jpashop.api; import lombok.Data; import lombok.RequiredArgsConstructor; import myjpabook.jpashop.domain.Member; import myjpabook.jpashop.service.MemberService; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org..

    입실 퇴실

    문제 설명 사회적 거리두기를 위해 회의실에 출입할 때 명부에 이름을 적어야 합니다. 입실과 퇴실이 동시에 이뤄지는 경우는 없으며, 입실 시각과 퇴실 시각은 따로 기록하지 않습니다. 오늘 회의실에는 총 n명이 입실 후 퇴실했습니다. 편의상 사람들은 1부터 n까지 번호가 하나씩 붙어있으며, 두 번 이상 회의실에 들어온 사람은 없습니다. 이때, 각 사람별로 반드시 만난 사람은 몇 명인지 구하려 합니다. 예를 들어 입실 명부에 기재된 순서가 [1, 3, 2], 퇴실 명부에 기재된 순서가 [1, 2, 3]인 경우, 1번과 2번은 만났는지 알 수 없습니다. 1번과 3번은 만났는지 알 수 없습니다. 2번과 3번은 반드시 만났습니다. 또 다른 예로 입실 순서가 [1, 4, 2, 3], 퇴실 순서가 [2, 1, 3, 4..

    실패율

    실패율

    문제 설명 실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스테이지 차이가 너무 큰 것이 문제였다. 이 문제를 어떻게 할까 고민 한 그녀는 동적으로 게임 시간을 늘려서 난이도를 조절하기로 했다. 역시 슈퍼 개발자라 대부분의 로직은 쉽게 구현했지만, 실패율을 구하는 부분에서 위기에 빠지고 말았다. 오렐리를 위해 실패율을 구하는 코드를 완성하라. 실패율은 다음과 같이 정의한다. 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수 전체 스테이지의 개수 N, 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 stages가..