본문 바로가기

분류 전체보기

(81)
[Spring] 컬렉션 fetch join(페치 조인) 을 이용한 성능 최적화 및 페이징 이전에 엔티티에서 fetch join이 무엇인지, 그리고 이를 이용한 성능 최적화에 대해 알아 보았다.이번에는 컬렉션  페치 조인을 알아보자.        예제 소개 먼저, 예제에서 쓰일 엔티티들에 대해서 가볍게 설명하고 넘어가겠다.  public class Order { @Id @GeneratedValue @Column(name = "order_id") private Long id; @ManyToOne(fetch = LAZY) @JoinColumn(name = "member_id") private Member member; @JsonIgnore @OneToMany(mappedBy = "order", cascade = CascadeType.ALL) priv..
[Spring JPA] JPA 에서 fetch join(페치 조인)이란 SQL 문에서 outer join , inner join 등 join 문에 대해서는 익히 알고 있다. 그런데 fetch join(페치 조인)은 어떠한 것일까   페치 조인이란? 먼저, fetch join 은 SQL에서 사용하는 join문이 아니라, JPQL에서 사용하는 성능 최적화를 위해 제공하는 조인의 한 종류이다.연관된 엔티티나 컬렉션을 한 번에 조회할 수 있는 기능으로, 기본적인 기능은 join과 유사하기 때문에 쉽게 이해할 수 있을 것이다.  jpql에서  join fetch 명령어를 이용해 사용할 수 있다.  JPA에서는 데이터를 조회할 때 지연로딩, 즉시로딩 두가지 기법이 있는데, 지연로딩을 기본적으로 사용하고 간다. 주의: 지연 로딩(LAZY)을 피하기 위해 즉시 로딩(EARGR)으로 설정하..
[BOJ/파이썬] 골드2 1167 - 트리의 지름 💬 문제 트리의 지름이란, 트리에서 임의의 두 점 사이의 거리 중 가장 긴 것을 말한다. 트리의 지름을 구하는 프로그램을 작성하시오. 🔨 입력 트리가 입력으로 주어진다. 먼저 첫 번째 줄에서는 트리의 정점의 개수 V가 주어지고 (2 ≤ V ≤ 100,000)둘째 줄부터 V개의 줄에 걸쳐 간선의 정보가 다음과 같이 주어진다. 정점 번호는 1부터 V까지 매겨져 있다. 먼저 정점 번호가 주어지고, 이어서 연결된 간선의 정보를 의미하는 정수가 두 개씩 주어지는데, 하나는 정점번호, 다른 하나는 그 정점까지의 거리이다. 예를 들어 네 번째 줄의 경우 정점 3은 정점 1과 거리가 2인 간선으로 연결되어 있고, 정점 4와는 거리가 3인 간선으로 연결되어 있는 것을 보여준다. 각 줄의 마지막에는 -1이 입력으로 주어진..
[BOJ/파이썬] 골드4 1976 여행가자 💬 문제 동혁이는 친구들과 함께 여행을 가려고 한다. 한국에는 도시가 N개 있고 임의의 두 도시 사이에 길이 있을 수도, 없을 수도 있다. 동혁이의 여행 일정이 주어졌을 때, 이 여행 경로가 가능한 것인지 알아보자. 물론 중간에 다른 도시를 경유해서 여행을 할 수도 있다. 예를 들어 도시가 5개 있고, A-B, B-C, A-D, B-D, E-A의 길이 있고, 동혁이의 여행 계획이 E C B C D 라면 E-A-B-C-B-C-B-D라는 여행경로를 통해 목적을 달성할 수 있다. 도시들의 개수와 도시들 간의 연결 여부가 주어져 있고, 동혁이의 여행 계획에 속한 도시들이 순서대로 주어졌을 때 가능한지 여부를 판별하는 프로그램을 작성하시오. 같은 도시를 여러 번 방문하는 것도 가능하다. 🔨 입력 첫 줄에 도시의 ..
[BOJ/파이썬] 골드5 1717 - 집합의 표현 💬 문제 초기에 n+1개의 집합 {0},{1},{2} ... {n}이 있다. 여기에 합집합 연산과, 두 원소가 같은 집합에 포함되어 있는지를 확인하는 연산을 수행하려고 한다. 집합을 표현하는 프로그램을 작성하시오. 🔨 입력 🔨출력 1로 시작하는 입력에 대해서 a와 b가 같은 집합에 포함되어 있으면 "YES" 또는 "yes"를, 그렇지 않다면 "NO" 또는 "no"를 한 줄에 하나씩 출력한다. 👊🏻 예시 입력 1 7 8 0 1 3 1 1 7 0 7 6 1 7 1 0 3 7 0 4 2 0 1 1 1 1 1 👊🏻 예시 출력 1 NO NO YES 💡 해결 코테에서 유니온 파인드 나왔었는데, 알고리즘은 아는데 구현을 못한게 억울해서 유니온파인드 공부해보자 하고 알고리즘 찾아서 푼 문제 find, union에 대한..
[BOJ/골드3] 2638 - 치즈 💬 문제 N×M의 모눈종이 위에 아주 얇은 치즈가 과 같이 표시되어 있다. 단, N 은 세로 격자의 수이고, M 은 가로 격자의 수이다. 이 치즈는 냉동 보관을 해야만 하는데 실내온도에 내어놓으면 공기와 접촉하여 천천히 녹는다. 그런데 이러한 모눈종이 모양의 치즈에서 각 치즈 격자(작 은 정사각형 모양)의 4변 중에서 적어도 2변 이상이 실내온도의 공기와 접촉한 것은 정확히 한시간만에 녹아 없어져 버린다. 따라서 아래 모양과 같은 치즈(회색으로 표시된 부분)라면 C로 표시된 모든 치즈 격자는 한 시간 후에 사라진다. 와 같이 치즈 내부에 있는 공간은 치즈 외부 공기와 접촉하지 않는 것으로 가정한다. 그러므 로 이 공간에 접촉한 치즈 격자는 녹지 않고 C로 표시된 치즈 격자만 사라진다. 그러나 한 시간 후..
[프로그래머스/python] Level2 - 무인도 💬 문제 🔨 입출력 💡 해결 문제를 보고 기본적인 탐색 문제라서 다시 한번 되짚어 본다는 느낌으로 풀었다. 최단 거리를 묻지 않고 기본 탐색 이기 때문에 DFS를 한번 써볼려고 했다. map에 있는 자료들을 arr로 옮겨놓고 원래는 "X"로 되어 있는 공간을 arr에 0으로 채워주었다. 그런데 이걸 깜빡하고 나중에 조건에서 arr != "X"라고 하여 꽤 시간을 뺐겼다.. 뭐 이정도는 금방 풀었는데 중요한건 프로그래머스 환경에서 제출시 런타임 에러가 나는 것이었다. 내가 잘못 푼 줄 알고 코드를 고치다가 단톡방에 물어봤는데.. sys.setrecursionlimit을 사용하여 재귀횟수에 제한을 걸라는 것이었다. import sys sys.setrecursionlimit(int(1e7)) 이게 뭐람.. 백..
[프로그래머스/Python] Level2 - 택배상자 💬 문제 🔨 입출력 예 💡 해결 큐와 스택을 사용하는 자료구조 문제로 너무 직관적이었다. 처음에 큐를 써야 될까? 라는 생각이 들었지만 직관적으로 큐와 스택을 사용하여 풀기로 하였다. from collections import deque def solution(order): n = len(order) now = 0 arr = deque() stack = [] result = 0 for i in range(n): arr.append(i+1) while True: if len(arr) == 0 and (len(stack) ==0 or stack[-1] != order[now]): return result if len(arr) >0: tmp = arr[0] else: tmp = -1 if tmp == orde..