SpringBoot + QueryDSL 적용 살펴보기
·
Project
QueryDslConfig.javapackage com.lettrip.lettripbackend.configuration;import com.querydsl.jpa.impl.JPAQueryFactory;import jakarta.persistence.EntityManager;import jakarta.persistence.PersistenceContext;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class QueryDslConfig { @PersistenceContext private EntityMan..
[JPA] 지연 로딩, 즉시 로딩, N+1 문제
·
개발 공부
지연 로딩객체가 실제 사용될 때 조회즉시 로딩JOIN SQL으로 한번에 연관된 객체까지 미리 조회N+1 문제하나의 객체를 조회하는데 +N개의 쿼리가 함께 나가는 문제
[백준] BOJ 12852번 1로 만들기 2 (Java)
·
알고리즘/문제 풀이
문제https://www.acmicpc.net/problem/12852 풀이1로 만들기 풀이와 유사하지만, x에서 1까지 어떤 숫자를 선택했는지를 저장해야 한다.next[x]는 x 다음 ( /3, /2, -1) 연산을 통해 어떤 숫자가 되어야 최소 작업으로 1이 될 수 있는 지를 저장한다. package boj.dp;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class Boj_12852_1로만들기2 { static int[] d; static int[] next; public static void main(String[] args) throws IOException { Bu..
[백준] BOJ 2579번 계단 오르기 (Java)
·
알고리즘/문제 풀이
문제https://www.acmicpc.net/problem/2579 풀이DP를 활용해서 풀면 된다. 문제에 나온 예제를 예로 들어보자.idx012345score[idx]102015251020 배열 d[idx] (dp)에 들어가는 값은 0부터 시작해서 idx번째 계단을 밟았을 때 얻을 수 있는 점수의 최댓값으로 정의한다. 문제 조건에 따라 마지막 계단은 반드시 밟아야 하는 상황이다.따라서 d[5]의 입장에서 시작해 보자. 5번째 계단을 밟으면 가능한 상황은 3번째 계단을 밟거나, 4번째 계단을 밟은 상황 두 가지이다.하지만 그렇다고 d[n] = max(d[n-1], d[n-2]) + score[n] 로 점화식을 세우면 안 된다. 문제에 명시된 "계단을 3개 연속해서 밟을 수 없다" 는 조건이 위배될 수 ..
[Algorithm] 최단 경로 탐색 알고리즘
·
알고리즘
최단 경로 알고리즘그래프 상황에서 vertex 간의 최단 경로를 구하는 알고리즘이다.   문제는 위와 같이 아예 그래프로 문제 상황이 주어지거나, 혹은 위와 같이 '경로'로서 문제 상황이 주어진다. 문제를 graph, vertex, edge로 표현하여 풀면 된다. 단일 출발 최단 경로특정 하나의 노드에서 다른 모든 노드까지의 최단 경로를 구하는 문제이다.  1. 다익스트라 알고리즘음수 가중치 미포함 경우에만 사용 가능하다.방문하지 않은 정점 중, 거리가 최소인(cost가 낮은) 정점을 방문한다. 정점을 방문 처리하고, 최단 거리를 확정한다.현재 처리 중인 (최단 거리가 확정된) 노드를 거쳐서 다른 노드로 가는 비용을 계산하고 갱신한다. 특징거리가 최소인 정점을 찾는 과정에서 Heap 혹은 Priority..
최소 비용 신장트리 (MST: Minimum Spanning Tree)
·
알고리즘/자료구조
Spanning Tree, 신장트리란?그래프에 포함된 모든 정점(vertex)들을 포함하는 부분 그래프이다. (즉, 그래프 구성 edge만이 달라짐)모든 vertex는 적어도 하나의 edge에 연결되어 있다.트리이므로 cycle이 존재해서는 안 된다.주어진 하나의 그래프에 대해 다양한 신장트리가 존재할 수 있다.vertex의 개수 v에 대해 (v-1)개의 edge를 가진다.신장 트리는 DFS, BFS 등을 이용하여 구성할 수 있다. (탐색을 통해 방문한 정점 순서대로 신장 트리 구성) Minimum Spanning Tree, 최소 비용 신장트리가중치가 부여된 무방향 그래프에서, 신장 트리의 비용이 가장 적은 spanning tree를 최소 비용 신장트리라 한다.즉, 신장트리를 구성하는 edge들의 가중치..
[프로그래머스] Lv.2 두 큐 합 같게 만들기 (Java)
·
알고리즘/문제 풀이
문제https://school.programmers.co.kr/learn/courses/30/lessons/118667 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이첫 번째 풀이 : 실패class Solution { public int solution(int[] queue1, int[] queue2) { int middleIndex = queue1.length; int[] connectedQueue = new int[middleIndex*2]; long targetSum = 0l; for(int i=0; itargetSum) { ..
도메인 로직(Domain Login)이 뭔데?
·
개발 공부
https://enterprisecraftsmanship.com/posts/what-is-domain-logic/ What is domain logic?In this post, I’ll write about a couple of thoughts regarding what domain logic is and how to distinguish it from other types of logic.enterprisecraftsmanship.com 해당 포스트는 위 아티클을 읽고 정리한 내용이다. 어떤 하나의 소프트웨어 어플리케이션이 있을 때 크게 Problem space와 Solution space로 나누어 볼 수 있다.Problem Space / Solution SpaceProblem SpaceThe prob..
[BAW] Express + PostgreSQL 트랜잭션 처리 도입기
·
Project
* 현재 ORM 도입 없이 PostgreSQL 드라이버인 pg를 사용하여 데이터베이스와 연결하고 있습니다. 기존 코드  기존 CommentService의 코드입니다. commentId를 받아와서 댓글 하나를 삭제합니다.이 로직 한 번에 총 4번의 DB 쿼리가 날아가게 됩니다. 1. commentId로 comment를 찾아옵니다.2. 해당 comment의 부모 댓글을 찾아 recomment_count를 1 감소시킵니다.3. 해당 comment가 달린 article을 찾아 comment_count를 1 감소시킵니다.4. 만일 대댓글이 달린 댓글이라면 해당 댓글에 deleted를 마킹하고, 그렇지 않다면 해당 댓글을 테이블에서 바로 삭제합니다. 현재 트랜잭션 처리가 되어있지 않아 2~4번 과정에서 에러가 발생..
[프로그래머스] Lv.3 길 찾기 게임 (Java)
·
알고리즘/문제 풀이
문제https://school.programmers.co.kr/learn/courses/30/lessons/42892 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이모든 노드를 y좌표가 큰 순 - y좌표가 같다면 x좌표가 적은 순으로 정렬한다. - 트리를 이루는 순서대로 정렬정렬된 노드를 하나씩 트리에 삽입한다. 이 때, x좌표를 키로 하는 이진 검색 트리의 삽입 알고리즘을 따른다.완성된 트리를 전위순회, 후위순회하여 정답을 도출한다.트리를 이루는 순서대로 정렬한다는 의미는, nodeinfo로 주어지는 1-2-3-4-5-6-7-8-9 순서의 노드들을위 그림의 7-4-2-6-1-3-9-8-5 순서대로..
[BAW] 중간점검 .. 프로젝트 모듈 구조화
·
Project
문제 상황현재 redux 모듈 디렉토리 구조입니다. 일단 보자마자 article 안에 왜 articles과 editor가 또 있는거지?..  싶고요 ㅎㅎ그리고 domain별로 디렉토리가 나누어져있지만 auth, user 디렉토리 안에는 ducks 패턴으로 작성된 파일이 있고, 나머지는 Type, Action, Reducer, Saga 파일이 전부 나누어져있는 짬뽕 구조입니다. (해맑게 웃는다)  이 외에도 파일 구조 상 정형화 되지 않은 부분들이 많아서 이를 좀 정리 해볼까 합니다.정리 좀 해볼까요 ..1. Redux 상태 사용, 기능별로? 데이터별로?현재 프로젝트에서는 글을 조회하여서 article 데이터를 받아오는 로직이 서로 다른 기능에서 중복 되고 있는 상황입니다. 즉, 같은 데이터 구조의 데이터..