전체 글 682

[JPA] 페이징 API

MySQL, ORACLE의 페이징 처리는 복잡하기로 유명하다. JPA는 API 2개만 알면 페이징 구현이 가능하다. 그리고 JPA가 알아서 DB에 맞추어 복잡한 페이징 SQL을 자동 생성한다. 페이징 쿼리 1) String jpql = "select m from Member m order by m.name desc"; List resultList = entityManager.createQuery(jpql, Member.class) .setFirstResult(10) .setMaxResults(20) .getResultList(); 페이징 쿼리 2) String jpql = "SELECT e FROM Employee e ORDER BY e.id"; TypedQuery query = entityManager..

Dev/JPA 2023.06.13

[JPA] JPQL이란?

JPA는 객체지향Application과 관계형DB 사이의 패러다임 불일치 문제를 해결한다. [JPA] 패러다임 불일치 어플리케이션 개발은 주로 객체지향언어로 이루어진다. 객체지향언어는 현실의 많은 문제를 코드로 구현하지만 문제가 있다. 데이터는 주로 관계형DB에 저장되는데 관계형DB와 어플리케이션은 lordofkangs.tistory.com JPA는 APP과 DB사이에서 자동으로 SQL문을 만들어 준다. 개발자는 객체지향 관점만 유지하면 된다. 그러나 JPA도 한계가 있다. 모든 쿼리를 객체지향방식으로 표현할 수 없다. 특히나 SELECT문은 조회에 여러 조건이 붙는 경우도 많고 조건이 동적으로 변하기도 한다. 그러므로 이를 커버할 무언가가 필요하다. 그것이 JPQL( Java Persistence Qu..

Dev/JPA 2023.06.13

[CodingTest] BOJ13023 ABCDE ( DFS ) With 파이썬

13023번: ABCDE 문제의 조건에 맞는 A, B, C, D, E가 존재하면 1을 없으면 0을 출력한다. www.acmicpc.net ◎ 문제풀이 그래프를 탐색하여 A ⇢ B ⇢ C ⇢ D ⇢ E 경우가 있는지 탐색해야 한다. 그래프의 탐색은 DFS와 BFS가 있다. 참조의 참조를 하는 문제이므로 DFS가 적절하다. DFS는 STACK으로 구현된다. STACK은 '기억' 기능이 있어서 함수가 호출되면 STACK 영역에 차례대로 쌓여 호출된 순서가 기억된다. 그러므로 DFS는 STACK을 직접 구현하지 않아도 재귀호출를 사용하면 된다. 위 문제를 풀면서 놓친 부분은 3가지가 있다. 1) 방문이력테이블이 필요하다는 생각 X 깊이탐색은 count가 4일때까지 이루어진다. 여기에는 재방문이 포함될 수 있다...

문제풀이 2023.06.13

[CodingTest] BOJ17298 오큰수 ( 자료구조 ) With 파이썬

17298번: 오큰수 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다. www.acmicpc.net ◎ 문제풀이 단순 반복문으로 풀면 시간초과가 난다. 자료구조로 시간복잡도를 줄일 수 있는 능력을 보는 문제이다. [CodingTest] BOJ1046 에디터 ( 자료구조 ) with Python ◎ 문제 1406번: 에디터 첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 lordofkangs.tistory.com ( 위 문제도 자료구조로 시간복잡도를..

문제풀이 2023.06.13

[JPA] 값타입 컬렉션 ( @ElementCollection, @CollectionTable )

[JPA] 임베디드 타입 ( @Embedded, @Embeddable ) @Id 어노테이션이 붙은 필드는 식별자를 의미한다. JPA는 식별자로 엔티티를 구분한다. @ManyToOne 등은 연관관계를 의미한다. JPA는 어노테이션으로 다른 엔티티와 연관관계를 정의한다. 이렇듯 개 lordofkangs.tistory.com 지난 포스팅에서 값타입의 개념과 임베디드타입을 다루어보았다. 테이블 컬럼에 삽입 될 데이터는 정합성을 가져야 한다. 컬럼과 매핑되는 엔티티는 정합성을 지킨 데이터를 가져야 한다. 원시타입은 JAVA에서 값복사를 지원하기에 정합성을 가지지만 참조타입은 참조복사를 하기에 다른 객체에서 데이터를 조작할 가능성이 있다. 그러므로 객체(컬렉션)는 참조복사가 아닌 값복사가 지원되어야 한다. 값타입이..

Dev/JPA 2023.06.12

[CodingTest] BOJ1697 숨바꼭질 ( BFS ) With 파이썬

1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net ◎ 문제풀이 N에서 K를 구하는 문제이다. 연산은 3가지이다. +1, -1, x2 연산 한번에 1초가 소요되고 몇초가 걸리는지를 구하는 문제이므로, 연산횟수를 구하는 문제이다. 시작점과 목표점이 주어지고 최소연산횟수를 구하는 문제이다. 1) DP가 아니라 BFS 문제 나는 DP가 먼저 연상되었다. 그러나 DP보다는 BFS가 더 적합한 알고리즘이다. 그 이유는 '시작위치'에 있다. DP는 더이상 쪼갤 수 없는 시작위치에서 목표지점까지 구..

문제풀이 2023.06.12

[CodingTest] BOJ10799 쇠막대기 ( 자료구조 ) With 파이썬

10799번: 쇠막대기 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저 www.acmicpc.net ◎ 문제풀이 문제에 제시된 단어 하나하나를 모두 자료구조로 만들 필요는 없다. (완벽주의 조심!) 문제의 목적에 달성하기 위한 수단만 필요할 뿐이다. 즉, 레이저, 막대가 나왔다고 레이저, 막대를 자료구조로 만들 필요가 없다는 의미이다. 레이저가 막대기를 자르면 막대의 개수는 레이저 개수 + 1개 이다. "()"가 레이저이므로 레이저가 나올때까지 막대를 기억해야 한다고 생각해서 STACK을 떠올렸다. ")"는 두가지 경우가 있다. 1. 레이저인 경우 레이저가 등장하면 STA..

문제풀이 2023.06.12

[JPA] 임베디드 타입 ( @Embedded, @Embeddable )

@Id 어노테이션이 붙은 필드는 식별자를 의미한다. JPA는 식별자로 엔티티를 구분한다. @ManyToOne 등은 연관관계를 의미한다. JPA는 어노테이션으로 다른 엔티티와 연관관계를 정의한다. 이렇듯 개발자는 JPA가 엔티티를 목적에 맞게 사용하도록 여러 어노테이션으로 '표시'를 남긴다. ( 엔티티 매핑, 연관관계 매핑, 상속관계 매핑, 영속성 전이 등등 ) 이와같은 엔티티 관련 필드는 제외하고, 단순히 컬럼에 값을 저장하기 위한 필드를 '값타입'이라 부른다. Student 엔티티 @Entity @Data public class Student { @Id @GeneratedValue @Column(name = "STUDENT_ID") private Long id; private String name; /..

Dev/JPA 2023.06.09

[CodingTest] BOJ17413 단어뒤집기2 ( 문자열 ) with Python

17413번: 단어 뒤집기 2 문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('')로만 이루어져 www.acmicpc.net ◎ 문제풀이 문자열을 조작하는 문제이다. 파이썬은 다양한 문자열 조작 함수를 제공하기에 간편하게 풀 수 있다. 문제의 목적은 태그(특수문자), 공백(특수문자)로 구분되는 문자열을 뒤집기이다. 문자열을 뒤집는 함수인 reverse()와 특수문자를 구분하는 isalnum()을 이용하면 문제에 쉽게 접근할 수 있다. 1) Pointer 하나를 만들고 문자열을 탐색한다. 2) 태그를 만나면 태그가 끝날때 까지 Pointer를 1씩 증가한다..

문제풀이 2023.06.09

[JPA] 영속성 전이와 고아객체

영속성 전이란, 부모가 자식의 영속성을 관리하는 기술이다. 영속성 전이는 주로 '합성관계'에서 사용되어야 한다. 합성관계는 부모가 자식을 제어하는 관계이다. 예를들어, MacBook은 일체형 노트북이다. MacBook노트북과 M1칩은 생명주기가 같다. 반면 조립형 컴퓨터는 다르다. 생산시기도 다른 부품들로 컴퓨터가 구성된다. 부모가 존재하기에 자식도 존재하는 관계가 합성관계이다. 이런 경우, 자식의 제어권은 부모에게 있기에 영속성도 부모의 제어권에 있도록 하는게 관리에 편하다. MacBook 엔티티 @Entity @Data public class MacBook { @Id @GeneratedValue private Long id; private String name; @OneToOne(cascade = C..

Dev/JPA 2023.06.08