전체 글 681

[후기] 인프런(Inflearn) 김영한 Spring 야생형 코스 수료 후기

인프런 김영한 강사님의 SPRING 야생형 코스를 모두 수료하였다. 김영한 강사님은 SPRING의 기본개념부터 차근히 밟아가는 학자형 코스와 실무에서 사용되는 SPRING 개념부터 배우는 야생형 코스를 인프런에서 제공하고 계신다. 당장 실전에서 사용되는 기술을 먼저 배워, 개인프로젝트를 진행하고 싶은 마음에 야생형 코스를 먼저 수강했다. 1) 스프링 핵심 원리 2) 자바 ORM 표준 JPA 프로그래밍 2) 모든 개발자를 위한 HTTP 웹 기본 지식 3) 실전! 스프링 부트와 JPA활용1 아는 형에게 추천받아 처음 들었던 김영한 강사님의 강의이다. 다른 사람 강의로 들어 수료증은 없지만 김영한 강사님 수업에 입문하게 해준 강의이다. 4) 실전! 스프링 부트와 JPA활용2 5) 실전! 스프링 데이터 JPA ..

후기/참여후기 2023.07.14

[SpringDataJPA] @EntityGraph

JPA는 연관된 엔티티를 두 가지 전략으로 로딩한다. 1. LAZY 전략 2. EAGER 전략 LAZY 전략은 한 엔티티를 메모리에 로딩할 때, 연관된 엔티티 로딩은 지연시키는 것이다. 그리고 연관된 엔티티가 호출될 때, 그때 쿼리를 날려 DB에서 로딩하는 전략이다. EAGER 전략은 한 엔티티를 메모리에 로딩할 때, 연관된 엔티티도 같이 메모리에 로딩하는 전략이다. 그런데 두 가지 전략에는 문제가 있다. 연관된 엔티티를 로딩하기 위해 추가적인 쿼리문이 수행되어야 한다. 쿼리문이 반복 수행되면 성능에 좋지 못하다. JPA는 이 문제를 해결하기 위해 '페치 조인'을 제공한다. [JPA] 페치 조인 ( JOIN FETCH ) 엔티티의 연관 엔티티를 로드하는 전략은 두 가지가 있다. 1. 지연로딩 ( Lazy..

Dev/JPA 2023.07.13

[SpringDataJPA] 벌크성 수정쿼리 ( @Modifying )

https://lordofkangs.tistory.com/404 [JPA] 벌크(Bulk) 연산 [JPA] 영속성 컨텍스트의 이점 [JPA] JPA 동작원리 ( 영속성 컨텍스트 ) [JPA] 패러다임의 불일치 어플리케이션 개발은 주로 객체지향언어로 이루어진다. 객체지향언어는 현실의 많은 문제를 코드로 lordofkangs.tistory.com JPA는 변경감지(DirtyChecking)로 UPDATE문을 생성하지만 한 번의 변경에 하나의 쿼리만 생성한다. 그래서 여러 건의 수정을 하나의 쿼리로 실행하려면 JPQL을 만들어야 한다. JPQL은 영속성 컨텍스트를 패싱하고 바로 DB에 실행되기에, 영속성 컨텍스트는 변경된 최신 데이터를 갖지 못한다. 그래서 JPQL로 수정쿼리를 실행한 뒤에는 항상 영속성 컨텍..

Dev/JPA 2023.07.13

[PS] BOJ2470 두 용액 ( Two Pointer ) with JAVA

2470번: 두 용액 첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,00 www.acmicpc.net ◎ 문제풀이 여러 용액 중 2가지를 골라 합칠 때, 그 값이 0에 가장 가까운 조합을 고르는 문제이다. 가장 간단한 풀이는 2가지 조합을 구하는 문제이니 2중 for문을 만들어서 완전탐색하는 것이다. 그러나 용액이 최대 100,000개이니 2중 for문으로 탐색하면 시간제한에 걸릴 수 있다. 여기서는 TwoPointer 알고리즘을 활용하는 것이 좋다. Two Pointer 알고리즘은 정렬과 두개의 포인터를 이용하여 시간복잡도를 ..

문제풀이 2023.07.13

[PS] BOJ1202 보석도둑 ( greedy ) With JAVA

https://www.acmicpc.net/problem/1202 1202번: 보석 도둑 첫째 줄에 N과 K가 주어진다. (1 ≤ N, K ≤ 300,000) 다음 N개 줄에는 각 보석의 정보 Mi와 Vi가 주어진다. (0 ≤ Mi, Vi ≤ 1,000,000) 다음 K개 줄에는 가방에 담을 수 있는 최대 무게 Ci가 주어진다. (1 ≤ Ci www.acmicpc.net ◎문제풀이 보석이 N개 있고 가방이 K개 있을 때, 가방에 보석을 담을 수 있는 최대가격을 구하는 문제이다. ( 단, 가방 안에는 하나의 보석만 담을 수 있다. ) 처음에는 N개의 보석을 내림차순으로 정렬하고 가방K개를 오름차순을 정렬하여, 보석의 무게에 맞는 가방을 탐색하려고 했다. 그러나 이는 시간복잡도가 O(N*K)이고 N과 K는 ..

문제풀이 2023.07.13

[SpringDataJPA] 페이징 ( Pageable, Page, Slice )

[JPA] 페이징 APIMySQL, ORACLE의 페이징 처리는 복잡하기로 유명하다. JPA는 API 2개만 알면 페이징 구현이 가능하다. 그리고 JPA가 알아서 DB에 맞추어 복잡한 페이징 SQL을 자동 생성한다. 페이징 쿼리 1) String jpql = "sellordofkangs.tistory.com  JPA는 페이징 할 수 있는 페이징API를 제공한다. 페이징API를 사용하려면 개발자가 리포지토리 구현체를 직접 구현해야 한다. SpringDataJPA의 철학은 개발자는 리포지토리 인터페이스만 구현하고 구현체는 SpringDataJPA가 알잘딱깔센하게 자동 생성함에 있다. 개발자는 직접 페이징API를 사용하지 않고 페이징에 필요한 데이터만 넘기면 된다.  이를위해, SpringDataJpa는 페이..

Dev/JPA 2023.07.12

[Project] BookSNS - OPENAPI 모듈 만들기 with SpringBoot,JPA

책으로 연계된 Social Network Service 사이트를 만들어 보려고 한다. 우선, 개발하려는 기능은 책 추천 기능이다. 원하는 특징이나 분야를 입력하면 ChatGPT에서 책추천을 받고 추천된 책정보는 네이버BookAPI에서 가져오려고 한다. 구글링하여 ChatGPT와 네이버API에서 데이터를 가져오는 코드는 쉽게 구현하였으나 객체지향적이지 않다. BookSNS가 챗GPT와 네이버API와 직접 의존하기보다 중간에 모듈을 하나 두어야 확장성이 좋다. 1. OPEN API 모듈 만들기 BookSNS가 원하는 데이터를 요청하면 OpenAPI 모듈이 중간에서 매개하도록 구성했다. 이로써 챗GPT와 네이버BookAPI가 아닌 다른 OPENAPI가 추가되어도 중복코드를 작성하지 않아도 된다. 그럼 구체적인..

프로젝트 2023.07.12

[PS] BOJ7576 토마토 ( BFS ) with JAVA

https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net ◎ 문제풀이 토마토가 익는 비용이 하루로 고정되어 있고 상하좌우로 이동가능하고 최소일수 즉, 최단거리를 구하는 문제이니 BFS 알고리즘이 떠올랐다. 그래서 BFS 알고리즘으로 풀었는데 시간초과가 발생했다. 돌이켜 생각해보니 나는 BFS를 가장한 DFS 풀이를 한거였다. 1 -1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -1 1 익어있는 토마토는 2..

문제풀이 2023.07.12

[PS] BOJ2170 선긋기 ( LineSweeping ) with JAVA

https://www.acmicpc.net/problem/2170 2170번: 선 긋기 첫째 줄에 선을 그은 횟수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 다음 N개의 줄에는 선을 그을 때 선택한 두 점의 위치 x, y (-1,000,000,000 ≤ x < y ≤ 1,000,000,000)가 주어진다. www.acmicpc.net ◎ 문제풀이 선을 입력 받고 선을 시작점을 기준으로 내림차순 정렬한 뒤 하나씩 가져와 비교해본다. 그럼 경우는 3가지가 있다. 파란선 : 기존선 연두선 : 새로운 선 1) 완전히 겹치는 경우 완전히 겹치는 경우는 무시하고 넘어간다. 2) 부분이 겹치는 경우 부분이 겹치면 시작점은 그대로이고 종료점이 새로운 선의 종료점까지 늘어난다. 3) 안 겹치는 경우 시작점을 기..

문제풀이 2023.07.12

[PS] BOJ10999 구간 합 구하기 2 ( prefixSum ) with JAVA

https://www.acmicpc.net/problem/10999 10999번: 구간 합 구하기 2 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)과 M(1 ≤ M ≤ 10,000), K(1 ≤ K ≤ 10,000) 가 주어진다. M은 수의 변경이 일어나는 횟수이고, K는 구간의 합을 구하는 횟수이다. 그리고 둘째 줄부터 N+1번째 줄 www.acmicpc.net ◎ 문제풀이 https://lordofkangs.tistory.com/429 [Algorithm] Lazy Propagation( 지연전파 ) ( + BOJ10999 ) With JAVA https://lordofkangs.tistory.com/411 [Alogorithm] 세그먼트 트리( Segment Tree ) 구간합 구하기 ..

문제풀이 2023.07.11