본문 바로가기

분류 전체보기

(341)
[JPA] 필드와 컬럼 매핑 필드와 컬럼 매핑 객체의 필드와 데이터베이스의 컬럼을 매핑하는 방법에 대해 알아보겠다. 1. @Column 객체필드를 테이블 컬럼에 매핑한다 주요 속성들 - name = String -> 테이블 컬럼에 매핑될때의 이름을 정의한다. - nullable = boolean -> null값 허용 여부를 선택한다 - unique = boolean -> 한 컬럼에 유니크 제약조건을 걸때 사용한다. - length = int -> String값에만 사용하며, 최대 길이를 설정한다. 예시 @Entity @Table(name = "USER") public class User extends CommonDate{ @Id @GeneratedValue @Column(name = "ID") private Long id; @Col..
[JPA] JPA 영속성 컨텍스트 JPA를 사용하면, EntityManagerFactory에서 EntityManager를 얻고, EntityManager를 이용해, DB관련 작업을 처리한다. EntityManager는 영속성 컨텍스트를 만드는데, 영속성 컨텍스트는 엔티티를 저장하고, 관리하는 등의 역할을 한다. 영속성 컨텍스트 영속성 컨텍스트를 사용하면, 다음 이점이 있다. 1. 1차캐시 2. 동일성 보장 3. 트랜잭션을 지원하는 쓰기 지연 4. 변경감지 5. 지연로딩 1차캐시 영속성 컨텍스트는 내부에 캐시를 갖고있다. DB에 flush를 하기위해, 영속성 컨텍스트에 persist한 엔티티나 DB에서 가져온 엔티티를 저장하며, 해당 엔티티를 "영속화"상태로 만든다. 영속화 상태인 엔티티는 영속성 컨텍스트에 의해 관리되며 많은 이점을 누릴..
[백준 / BOJ] 12904 A와 B 문제 출처 : https://www.acmicpc.net/problem/12904 12904번: A와 B 수빈이는 A와 B로만 이루어진 영어 단어가 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수 www.acmicpc.net 문자 'A'와 'B'가 주어진다. 두 문자를 아래와 같은 규칙으로 연결해 문자열 T를 만든다. 1. 문자열 뒤에 A를 붙인다. 2. 문자열 을 뒤집고 뒤에 B를 붙인다. 이때, 문자열 S를 이용해 문자열 T를 만들 수 있는지 알아내는 프로그램을 만드는 문제다. 풀이 아이디어 문제다. 문자열 S를 이용해 문자열 T를 만들려면, 매 선택마다 2가지 ..
[백준 / BOJ] 17363 우유가 넘어지면? 문제 출처 : https://www.acmicpc.net/problem/17363 17363번: 우유가 넘어지면? 첫 줄에 그림의 세로 길이와 가로 길이를 의미하는 정수 N과 M(1 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에 걸쳐 그림의 각 줄을 의미하는 M글자의 문자열이 하나씩 주어진다. 문자열은 공백을 포 www.acmicpc.net 입력된 N*M배열을 왼쪽으로 90도 회전한 결과를 출력하는 문제다. 풀이 문제에서 하란대로 구현하면 되는 간단한 문제다. 입력받은 문자를 왼쪽으로 90도 회전한 값을 HashMap에 저장해 놓고 HashMap에 저장된 값과 매치해서 출력하면된다. 주요 소스코드 private void init(){ dic.put('.','.'); dic.put('O','O')..
[백준 / BOJ] 17383 옥토끼는 통신교육을 풀어라!! 문제 출처 : https://www.acmicpc.net/problem/17383 17383번: 옥토끼는 통신교육을 풀어라!! 옥토끼가 이런 식으로 문제를 풀면 tncks0121은 옥토끼가 5, 10, 15, 20, 25, 30, 34분에 문제를 풀었으므로 최대 5분동안 휴식을 한 것으로 간주한다. www.acmicpc.net 옥토끼는 두개의 문제를 한번에 풀수있다. N개의 문제가 주어질때, 문제를 푸는 시간사이의 공백을 최소화하는 시간을 구하는 문제다. 풀이 결정문제로 풀은 문제였다. Ni가 최대 10억이고, 완전탐색으로 풀경우, 최소 max(Ni)*(a), (a>N)시간복잡도가 나와서, 항상 시간초과가 나온다. 위의 식 N*(a)의 시간을 줄이는 방법은 다음과 같다. 1. N N이 의미하는것은, 모든..
[JPA] JPA 성능최적화 - N+1문제 JPA 프로그래밍을 할때, 성능상 가장 주의해야할점은 N+1 문제다. N+1문제란, 연관관계에서 발생하는 문제점으로, 연관관계를 조회할경우, 해당 연관관계의 사이즈만큼 SQL쿼리를 만들어 날리는 것을 말한다. 즉시로딩 아래 코드를 보자. (동작 여부는 상관없이 플로우를 보도록하자) @Entity class TestEntity{ @Id @GeneratedValue @Column(name = "ID") private id; @OneToMany(fetch = FetchType.EAGER, mappedBy = "testEntity") private List lists = new List(); } public class EntityTest{ /.../ @Test public void N+1테스트(){ em.fin..
[백준 / BOJ] 17374 비트베리 문제 출처 : https://www.acmicpc.net/problem/17374 17374번: 비트베리 비트베리는 국내 최다 사용자를 확보하고 있는 간편암호화폐 지갑이다. 비트베리의 가장 큰 특징 중 하나는 카카오 계정으로 지갑을 만들고, 전화번호로 암호화폐를 주고받을 수 있는 점이다. www.acmicpc.net 페카즈는 자신이 갖고있는 비트코인의 수를 최대로 하고싶다. 페카즈와 빈센트가 할 수 있는 거래가 주어질때, 최대 비트코인수를 구하는 문제다. 풀이 이분탐색으로 푼 문제다. 할수있는 거래그래프는 아래와 같은데, 아래를 보면 베리를 코인으로 최대로 바꾸는것이 항상 최선임을 알수있다. 비트 -> 코인 코인 -> 비트 베리 -> 코인 코인 -> 베리 베리 -> 코인 -> 비트 얻을 수 있는 비트코인..
[JPA] JPA란? - 패러다임의 불일치 JPA JPA는 자바 진영의 ORM기술 표준이다. JPA또한 내부적으로 JDBC API를 사용하며, 애플리케이션과 JDBC사이에서 동작한다. JPA를 사용함으로써, 아래에서 설명할 패러다임의 불일치 문제를 거의 대부분 해결할수있으며, 생산성 또한 향상시킬수있다. SQL - 관계지향 패러다임과 객체지향 패러다임의 불일치로 발생하는 문제점 1. 객체 그래프탐색에서의 불편함 SQL은 처음 작성한 SQL문에 따라서, 탐색범위가 결정된다. 하지만, 객체는 한 객체를 한번 참조함으로써, 그 객체가 참조하는 다른 객체를 전부 참조할수있다. 외래키만 저장한 가상의 테이블 A, B, C, D, E, F 가 있고, 각각 외래키를 통해 다음과 같이 연결되어있다. A - B - C - D - E - F 이를 객체로 표현하면 ..