전체 글 205

[JPA] 객체 지향 쿼리 언어 JPQL 7 (엔티티 직접 사용, 네임드 쿼리, 벌크 연산)

엔티티 직접 사용 - 기본 키 값JPQL에서 엔티티를 직접 사용하면 SQL에서 해당 엔티티의 기본 키 값을 사용한다.[JPQL]select count(m.id) from Member m // 엔티티의 아이디를 사용select count(m) from Member m //엔티티를 직접 사용[SQL]select count(m.id) as cnt from Member m두 JPQL 다 동일한 SQL이 실행된다.엔티티를 파라미터로 사용해도 똑같이 엔티티는 기본 키 값으로 처리 된다. 엔티티가 데이터베이스에 전달되면 데이터베이스에서는 엔티티를 당연히 기본 식별자로 구분하므로,엔티티가 기본 키 값으로 처리되는 것이다. Named 쿼리 - 정적 쿼리미리 정의해서 이름을 부여해두고 사용하는 JPQL정적 쿼리어노테이션,..

spring/JPA 2024.08.07

백준 16956번 늑대와 양 (java)

[Silver III] 늑대와 양 - 16956문제 링크성능 요약메모리: 31292 KB, 시간: 296 ms분류애드 혹, 해 구성하기제출 일자2024년 8월 6일 23:25:20문제 설명크기가 R×C인 목장이 있고, 목장은 1×1 크기의 칸으로 나누어져 있다. 각각의 칸에는 비어있거나, 양 또는 늑대가 있다. 양은 이동하지 않고 위치를 지키고 있고, 늑대는 인접한 칸을 자유롭게 이동할 수 있다. 두 칸이 인접하다는 것은 두 칸이 변을 공유하는 경우이다.목장에 울타리를 설치해 늑대가 양이 있는 칸으로 갈 수 없게 하려고 한다. 늑대는 울타리가 있는 칸으로는 이동할 수 없다. 울타리를 설치해보자.입력첫째 줄에 목장의 크기 R, C가 주어진다.둘째 줄부터 R개의 줄에 목장의 상태가 주어진다. '.'는 빈 칸..

[JPA] 객체 지향 쿼리 언어 JPQL 6 (fetch join의 한계, 다형성 쿼리)

페치 조인의 한계페치 조인 대상에는 별칭을 줄 수 없다하이버네이트는 가능하나 가급적 사용하지 말 것별칭을 주고 select t from Team t join fetch t.members m where m.age > 10;과 같이 조회하게 되면 멤버의 전체를 가져오는 것이 아닌 멤버의 일부만 가져오게 된다.그러나 JPA는 fetch를 사용하면 모든 객체를 가져오는 것을 기본으로 설계가 돼있기 때문에어디서 예상치 못 한 오류가 발생할지 알 수 없다.둘 이상의 컬렉션은 페치 조인 할 수 없다ONE to MANY 상황에서 페치 조인하고 거기에 또 컬렉션을 페치 조인 하는 상황을 의미한다.ONE to MANY에서도 데이터가 뻥튀기가 되는데 거기에 컬렉션을 한 번 더 페치 조인 시키면데이터가 얼마나 뻥튀기 될 지 ..

spring/JPA 2024.08.06

백준 10451번 순열 사이클 (java)

[Silver III] 순열 사이클 - 10451문제 링크성능 요약메모리: 52020 KB, 시간: 476 ms분류그래프 이론, 그래프 탐색, 순열 사이클 분할제출 일자2024년 8월 5일 22:42:56 문제1부터 N까지 정수 N개로 이루어진 순열을 나타내는 방법은 여러 가지가 있다. 예를 들어, 8개의 수로 이루어진 순열 (3, 2, 7, 8, 1, 4, 5, 6)을 배열을 이용해 표현하면 (1234567832781456)와 같다. 또는, Figure 1과 같이 방향 그래프로 나타낼 수도 있다.순열을 배열을 이용해 (1…i…nπ1…πi…πn)로 나타냈다면, i에서 πi로 간선을 이어 그래프로 만들 수 있다.Figure 1에 나와있는 것 처럼, 순열 그래프 (3, 2, 7, 8, 1, 4, 5, 6) ..

백준 2664번 촌수계산 (java)

[Silver II] 촌수계산 - 2644문제 링크성능 요약메모리: 14192 KB, 시간: 100 ms분류그래프 이론, 그래프 탐색, 너비 우선 탐색, 깊이 우선 탐색제출 일자2024년 8월 5일 21:13:49문제 설명우리 나라는 가족 혹은 친척들 사이의 관계를 촌수라는 단위로 표현하는 독특한 문화를 가지고 있다. 이러한 촌수는 다음과 같은 방식으로 계산된다. 기본적으로 부모와 자식 사이를 1촌으로 정의하고 이로부터 사람들 간의 촌수를 계산한다. 예를 들면 나와 아버지, 아버지와 할아버지는 각각 1촌으로 나와 할아버지는 2촌이 되고, 아버지 형제들과 할아버지는 1촌, 나와 아버지 형제들과는 3촌이 된다.여러 사람들에 대한 부모 자식들 간의 관계가 주어졌을 때, 주어진 두 사람의 촌수를 계산하는 프로그..

백준 2606번 바이러스(java)

[Silver III] 바이러스 - 2606문제 링크성능 요약메모리: 14456 KB, 시간: 100 ms분류그래프 이론, 그래프 탐색, 너비 우선 탐색, 깊이 우선 탐색제출 일자2024년 8월 4일 19:27:57문제 설명신종 바이러스인 웜 바이러스는 네트워크를 통해 전파된다. 한 컴퓨터가 웜 바이러스에 걸리면 그 컴퓨터와 네트워크 상에서 연결되어 있는 모든 컴퓨터는 웜 바이러스에 걸리게 된다.예를 들어 7대의 컴퓨터가 과 같이 네트워크 상에서 연결되어 있다고 하자. 1번 컴퓨터가 웜 바이러스에 걸리면 웜 바이러스는 2번과 5번 컴퓨터를 거쳐 3번과 6번 컴퓨터까지 전파되어 2, 3, 5, 6 네 대의 컴퓨터는 웜 바이러스에 걸리게 된다. 하지만 4번과 7번 컴퓨터는 1번 컴퓨터와 네트워크상에서 연결되..

[JPA] 객체 지향 쿼리 언어 JPQL 5 (경로 표현식, fetch join)

경로 표현식.(점)을 찍어 객체 그래프를 탐색하는 것이다. select m.username -> 상태필드로 객체를 탐색한 경우from Member m   join m.team t -> 단일 값 연관 필드 (여기서 team은 엔티티기 때문에 단일 값을 탐색한 것이다.)   join m.orders o -> 컬렉션 값 연관 필드 (여기서 orders는 컬렉션이어서 컬렉션을 탐색한 것이다.)where t.name = '팀A' .을 통해 상태 필드로 가냐, 단일 값 연과 필드로 가냐, 컬렉션 값 연관 필드로 가냐에 따라서내부적으로 동작하는 방식이 다 달라진다.  용어 정리상태 필드: 단순히 값을 저장하기 위한 필드다 (ex: m.username)연관 필드: 연관 관계를 위한 필드다단일 값 연관 필드: @Many..

spring/JPA 2024.08.04

백준 11558번 The Game of Death(java)

[Silver IV] The Game of Death - 11558문제 링크성능 요약메모리: 19304 KB, 시간: 156 ms분류그래프 이론, 그래프 탐색, 구현, 시뮬레이션제출 일자2024년 8월 3일 18:57:30문제 설명희현이와 주경이는 The Game of Death를 좋아한다.The Game of Death 규칙:플레이어는 각자 한 명씩 지목을 한다(자신도 가능).처음 시작하는 사람은 임의의 자연수 K를 말한다.시작한 사람부터 지목한 사람을 차례대로 따라가다가 K번째 지목당한 사람이 걸리게 된다.희현이는 희현이부터 이 게임을 시작할 때 이 게임에서 반드시 주경이를 반드시! 걸리게 하고 싶다. 주경이가 걸릴 수 있도록 희현이를 도와주자.입력첫 줄에는 테스트 케이스의 숫자 T가 주어지며, 이어..

백준 2331번 반복수열(java)

[Silver IV] 반복수열 - 2331문제 링크성능 요약메모리: 14164 KB, 시간: 104 ms분류구현, 수학제출 일자2024년 8월 3일 18:24:05문제 설명다음과 같이 정의된 수열이 있다.D[1] = AD[n] = D[n-1]의 각 자리의 숫자를 P번 곱한 수들의 합예를 들어 A=57, P=2일 때, 수열 D는 [57, 74(=52+72=25+49), 65, 61, 37, 58, 89, 145, 42, 20, 4, 16, 37, …]이 된다. 그 뒤에는 앞서 나온 수들(57부터가 아니라 58부터)이 반복된다.이와 같은 수열을 계속 구하다 보면 언젠가 이와 같은 반복수열이 된다. 이때, 반복되는 부분을 제외했을 때, 수열에 남게 되는 수들의 개수를 구하는 프로그램을 작성하시오. 위의 예에서..

[CoolSMS] SMS, 문자 전송 및 인증 기능 구현하기

문자 전송 API 서비스https://coolsms.co.kr/ 세상에서 가장 안정적이고 빠른 메시지 발송 플랫폼 - 쿨에스엠에스손쉬운 결제 전용계좌, 신용카드, 계좌이체 등 국내 결제 뿐만 아니라 해용신용카드로 한번의 카드번호 등록으로 자동충전까지 지원합니다. 전용계좌, 신용카드, 계좌이체 등 다양한 결제 방식coolsms.co.kr여러 가지 문자 전송 api가 존재한다. 그 중 coolsms는 첫 회원 가입시 200원을 무료로 충전해주고 Spring과 연동이 쉽다.때문에 coolsms를 선택하게 되었다. 회원 가입우선 coolsms에 회원 가입을 진행하고 다음과 같이 api key를 발급받아 주도록 하자. Build.gradleimplementation 'net.nurigo:sdk:4.3.0' coo..