분류 전체보기 274

Java - Reflection

리플렉션(Reflection) 이란? 객체를 통해 클래스의 정보를 분석해 내는 프로그램 기법 클래스, 인터페이스, 메소들 들을 찾을 수 있게 도와줌 객체를 생성하거나 변수를 변경할 수 있음 메소드를 호출할 수 있음 위 3가지 기능을 제공하는 Java에서 기본적으로 제공하는 API 사용방식 Class c = Class.forName("클래스 이름); Class c = 클래스이름.class Method[] m = c.getMethods(); Field[] f = c.getFields(); Constructor[] cs = c.getConstructors(); Class[] inter = c.getInterFaces(); Class superClass = c.getSuperclass();

Study 2022.01.17

JPA Flush(플러시)

플러시란? 영속성 컨텍스트의 변경 내용을 DB에 반영하는 것을 말함 Transaction commit 이 일어날 때 flush가 동작하는데, 이때 쓰기 지연 저장소에 쌓아 놨던 INSERT, UPDATE, DELETE SQL 들이 DB에 날라간다. 영속성 컨텍스트를 비우는 것이 아니다. 쉽게 얘기해서 영속성 컨텍스트의 변경 사항들과 DB의 상태를 맞추는 작업이다. 플러시는 영속성 컨텍스트의 변경 내용을 DB에 동기화 한다. 동작 과정 변경 감지(Dirty Checking) 수정된 Entity를 쓰기 지연 SQL 저장소에 등록한다. 쓰기 지연 SQL 저장소의 Query를 DB에 전송 ( create, update, delete Query) flush가 발생한다고 해서 commit이 이루어지는 것이 아니고 ..

Study/Java&Spring 2022.01.17

JPA Fetch Join 튜닝

JPA를 사용하다 보면 n + 1 문제에 마주치고 바로 Fetch Join을 접하게 된다. n + 1 을 Fetch Join으로 해결하면 된다는 해결법에 집중하였지만, 정확한 원리와 Sql 언어의 Join과 다른점은 무엇인지 파악하기 위해 알아보기 위해 공부를 통해 알게 된 내용을 정리하였다. Fetch Join JPQL 에서 제공하는 성능 최적화를 위해 제공하는 기능 조회가 주체가 되는 Entity 이외에 Fetch Join이 걸린 연관 Entity도 함께 SELECT 하여 모두 영속화 Fetch Join이 걸린 Entity 모두 영속화하기 때문에 FetchType이 Lazy인 Entity를 참조하더라도 이미 영속성 컨텍스트에 들어있기 때문에 따로 쿼리가 실행되지 않은 채로 N+1문제가 해결됨 일반 J..

Study/Java&Spring 2022.01.15

[백준] 11376 열혈강호2

문제 강호네 회사에는 직원이 N명이 있고, 해야할 일이 M개가 있다. 직원은 1번부터 N번까지 번호가 매겨져 있고, 일은 1번부터 M번까지 번호가 매겨져 있다. 각 직원은 최대 두 개의 일을 할 수 있고, 각각의 일을 담당하는 사람은 1명이어야 한다. 각각의 직원이 할 수 있는 일의 목록이 주어졌을 때, M개의 일 중에서 최대 몇 개를 할 수 있는지 구하는 프로그램을 작성하시오. 풀이 열혈강호 1번 문제를 2번 돌리는 방식을 이용하였다. https://conpulake.tistory.com/261 [백준] 11375 열혈강호 - 이분매칭 문제 강호네 회사에는 직원이 N명이 있고, 해야할 일이 M개가 있다. 직원은 1번부터 N번까지 번호가 매겨져 있고, 일은 1번부터 M번까지 번호가 매겨져 있다. 각 직원..

[백준] 9576 책 나눠주기 <Java> - 이분매칭, greedy

문제 백준이는 방 청소를 하면서 필요 없는 전공 서적을 사람들에게 나눠주려고 한다. 나눠줄 책을 모아보니 총 N권이었다. 책이 너무 많기 때문에 백준이는 책을 구분하기 위해 각각 1부터 N까지의 정수 번호를 중복되지 않게 매겨 두었다. 조사를 해 보니 책을 원하는 서강대학교 학부생이 총 M명이었다. 백준이는 이 M명에게 신청서에 두 정수 a, b (1 ≤ a ≤ b ≤ N)를 적어 내라고 했다. 그러면 백준이는 책 번호가 a 이상 b 이하인 책 중 남아있는 책 한 권을 골라 그 학생에게 준다. 만약 a번부터 b번까지의 모든 책을 이미 다른 학생에게 주고 없다면 그 학생에게는 책을 주지 않는다. 백준이가 책을 줄 수 있는 최대 학생 수를 구하시오. 풀이 우선 이분매칭의 방식으로 풀었다. 이분 매칭 방식은 ..

[백준] 11375 열혈강호 - 이분매칭

문제 강호네 회사에는 직원이 N명이 있고, 해야할 일이 M개가 있다. 직원은 1번부터 N번까지 번호가 매겨져 있고, 일은 1번부터 M번까지 번호가 매겨져 있다. 각 직원은 한 개의 일만 할 수 있고, 각각의 일을 담당하는 사람은 1명이어야 한다. 각각의 직원이 할 수 있는 일의 목록이 주어졌을 때, M개의 일 중에서 최대 몇 개를 할 수 있는지 구하는 프로그램을 작성하시오. 풀이 이 문제는 DFS 를 이용해서 브루트포스 알고리즘으로 해결하려 했으나 시간 초과가 났다. 이를 조금 변형하면 되는 문제였다. 이 문제는 이분매칭(Bipartite Matching) 알고리즘을 사용하는 데 네트워크 플로우와 연계되는 개념이라고 한다. 이분매칭이란? A 집단이 B 집단을 선택하는 방법에 대한 알고리즘이다. 다시 문제..

알고리즘 공부 2022.01.07

[백준] 15681 트리와 쿼리 <Java> - 트리에서 DP

문제 간선에 가중치와 방향성이 없는 임의의 루트 있는 트리가 주어졌을 때, 아래의 쿼리에 답해보도록 하자. 정점 U를 루트로 하는 서브트리에 속한 정점의 수를 출력한다. 만약 이 문제를 해결하는 데에 어려움이 있다면, 하단의 힌트에 첨부한 문서를 참고하자. 풀이 풀이는 문제에서 설명하는대로 구현을 하였다 코드를 보면서 설명을 하면, public static void makeTree(int currentNode, int parentNode) { for(int node : tree[currentNode]) { if(node != parentNode) { child[currentNode].add(node); parent[node] = currentNode; makeTree(node, currentNode); ..

[백준] 1038 감소하는 수 <Java> - 브루트포스, 백트래킹

문제 음이 아닌 정수 X의 자릿수가 가장 큰 자릿수부터 작은 자릿수까지 감소한다면, 그 수를 감소하는 수라고 한다. 예를 들어, 321과 950은 감소하는 수지만, 322와 958은 아니다. N번째 감소하는 수를 출력하는 프로그램을 작성하시오. 0은 0번째 감소하는 수이고, 1은 1번째 감소하는 수이다. 만약 N번째 감소하는 수가 없다면 -1을 출력한다. 풀이 10 이하의 수는 수와 동일한 N번째 값을 가진다. 10 초과의 수는 감소하는 수 전체 리스트를 구한 뒤 N번째 수를 출력하는 방식을 사용하였다. 감소하는 수를 구하는 방식은 재귀를 이용하여 구하였다. for(int i = 0 ; i i) { calculator((num * 10) + (long)i..

SpringBoot 조회 API

상황 Order 는 Member, Delivery 와 양방향 연관관계에 있는 엔티티다. Order를 조회하는 api를 개발할 것이다. 1. 엔티티를 노출하면서 조회하는 가장 기본적인 방식 사용 엔티티를 노출한 상태에서 조회 했을 때 생기는 문제 양방향 관계에 있는 것들이 계속 조회를 하면서 무한 루프를 돌게 된다. 예시코드 @GetMapping("/api/v1/simple-orders") public List ordersV1(){ List all = orderRepository.findAllByString(new OrderSearch()); return all; } 위와 같이 엔티티를 그대로 노출하면서 조회를 하였다. 여기서 Order 는 Order -> Member (ManyToOne) Order ->..

Study/Java&Spring 2022.01.04

@Transactional Annotation 과 AOP 그리고 CGLib 와 Dynamic Proxy(JDK Proxy)

트랜잭션이란? 데이터베이스의 상태를 변경하는 작업 또는 한번에 수행되어야 하는 연산들을 의미 트랜잭션은 4가지의 성질을 가지고 있다. 원자성(Atomicity) 한 트랜잭션 내에서 실행한 작업들은 하나의 단위로 처리한다. 즉, 모두 성공 또는 모두 실패 일관성(Consistency) 트랜잭션은 일관성 있는 데이터베이스 상태를 유지한다. 격리성(Isolation) 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않도록 격리해야한다. 영속성(Durability) 트랜잭션을 성공적으로 마치면 결과가 항상 저장되어야 한다. Spring 에서 제공하는 @Transactional 의 기능 트랜잭션 begin, commit 을 자동으로 수행해준다. 예외 발생 시 rollback 처리를 자동으로 수행해준다. AOP를 ..

Study/Java&Spring 2022.01.03