전체 글298 [PostgreSQL] ARRAY_AGG, ARRAY_TO_STRING 함수 사용하기 (여러 행을 한 행으로) 오늘 살펴볼 POSTGRESQL의 ARRAY_AGG 함수는 ORACLE의 LISTAGG 와 같은 집계 함수라고 생각하면 된다. LISTAGG 는 ORDER BY 표현식에 따라 쿼리 내 각 그룹의 행 순서를 지정해 값을 연결하여 하나의 문자열로 가져온다. 자세한 내용은 다음 게시글을 참고하자. [Oracle] LISTAGG WITHIN GROUP 문 LISTAGG 구문 SELECT LISTAGG (컬럼명, 구분기호) WITHIN GROUP (ORDER BY 정렬기준컬럼) FROM 테이블명 예제 다음 테이블로 사용방법을 살펴보자 동일한 MSD_ID의 값의 LINK_ORG 값을 하나의 컬럼으로 가져오고.. haenny.tistory.com 예제로 이해하기 컬러와 이름의 필드가 있는 데이터를 컬러 별로 묶어서 .. Database/SQL 2022. 8. 17. [Java] 객체 매핑 라이브러리 ModelMapper 살펴보자 ModelMapper ? 서로 다른 클래스의 값을 한 번에 복사하게 도와주는 라이브러리로, 어떤 Object (Source Object) 에 있는 필드 값들을 자동으로 원하는 Object (Destination Object) 에 매핑 시켜주는 라이브러리다. ModelMapper 공식 문서 주로 DTO와 같은 클래스로 데이터를 받은 후 원하는 클래스(Entity)에 넣어줄 때, Getter/Setter를 이용해 필드를 복사/붙여넣기하는 작업을 거친다. 이 때, 매핑해야할 필드가 다른 경우도 빈번하다. 즉, 다른 모델의 Object를 매핑해줘야하는 작업이 발생할 수 있다. 이런 단점들을 해결하기 위한 라이브러리이다. 세팅 의존성 추가 build.gradle implementation 'org.modelmap.. JVM/Java 2022. 8. 17. [Java] Java Stream 활용하여 두 개의 List 객체 비교하기 Stream. -Match 메소드 예제 allMatch() : 모든 요소들이 매개 값(Predicate)로 주어진 조건을 만족하는지 조사 anyMatch() : 최소한 한 개의 요소가 주어진 조건에 만족하는 지 조사 noneMatch() : 모든 요소들이 주어진 조건을 만족하지 않는지 조사 class Test { public static void main(String[] args) { int[] intArray = {2, 4, 6}; boolean allResult = Arrays.stream(intArray).allMatch(a -> a % 2 == 0); boolean anyResult = Arrays.stream(intArray).anyMatch(a -> a % 2 == 0); boolean non.. JVM/Java 2022. 8. 16. [JPA] 기본 키 전략과 Entity Custom ID Generator 구현하기 JPA 기본키 생성 전략 관계형 데이터베이스에서 테이블은 각각의 행을 구별하는 기본키가 필요하다 기본키를 만들 때는 주민등록번호, 주문번호 같은 자연키 를 사용할 수도 있고, 논리적 의미가 하나도 없는 시퀀스와 같은 대체키를 사용할 수도 있다. @GeneratedValue JPA Entity 에서 @GeneratedValue 어노테이션을 기본키 필드 위에 붙이면 기본키를 자동으로 생성해주는 전략을 사용할 수 있다. 전략은 크게 4가지 이다. IDENTITY 기본키 생성을 hibernate가 아닌, 데이터베이스가 하도록 위임한다. @Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long .. JVM/JPA 2022. 8. 5. [JPA] SpringBoot JPA 쿼리 로그 설정하기 SpringBoot JPA를 사용할 때, SQL 쿼리문을 표출하는 설정 관련해서 정리해보자. 요약 application.yml spring: jpa: properties: hibernate: show_sql: true format_sql: true use_sql_comments: true logging: level: org: hibernate: type: descriptor: sql: trace application.properties spring.jpa.properties.hibernate.show_sql=true spring.jpa.properties.hibernate.format_sql=true spring.jpa.properties.hibernate.use_sql_comments=true logg.. JVM/JPA 2022. 7. 27. [JPA] JpaRepository를 상속 받은 인터페이스는 @Repository 없이 어떻게 인스턴스화될까? 개요 Spring Data JPA 를 사용한다면, 보통 Repository 인터페이스는 다음과 같을 것이다 import org.springframework.data.jpa.repository.JpaRepository; public interface MemberRepository extends JpaRepository { // ... } 위의 코드만 봤을 때는, MemberRepository가 @Repository 어노테이션 없이 어떻게 Bean을 등록되는 지 알 수 없다. JpARepository 내부 구현 코드를 들어가봐도 Bean 으로 등록해주는 코드는 존재하지 않았다. 이 궁금증을 시작으로 찾아보게 되었다. @EnableJpaRepositories 이 어노테이션은 JPA Repository 들을 활.. JVM/JPA 2022. 7. 26. [DBeaver] 일부 테이블의 ERD만 확인하는 방법 및 ERD 이미지 저장하기 DB 테이블 ERD 확인하기 DBeaver는 Tool 내에서 ERD (ER Diagram)을 볼 수 있다. 추출하려는 DB 스키마/테이블 우클릭 "다이어그램 보기" 클릭 ERD 전체 표출 ERD 내 원하는 테이블 관계도 찾기 Ctrl + F 테이블명 검색 입력한 값에 포함되는 테이블을 찾아 화면 이동 DB 일부 테이블 ERD 확인하기 테이블의 양이 어마어마하게 많은 경우.. 아주 많은 ERD가 표출되는데.. 내가 원하는 테이블의 관계도를 보고 싶어서 위와 같이 검색을 하게 되면 DBeaver는 응답없음의 세상속으로 사라져버린다.. 보고자 하는 테이블만 드래그한 뒤 우클릭 "새 ER 다이어그램" 클릭 다이어그램 이름 설정 선택한 테이블의 ERD 표출 ERD Export 하기 하단 탭을 보면 다양한 기능이 .. Database/SQL 2022. 7. 15. [DBeaver] 알아두면 좋은 설정 및 자주 사용하는 단축키 테마 변경 윈도우 - 설정 - User Interface - 모양 - 테마 : Dark 변경 SQL 쿼리 서식 변경 윈도우 - 설정 - 편집기 - SQL 편집기 - SQL 포맷 Formatter : Compact 서식 Keyword case : Upper/Lower 기존에 Oracle을 많이 사용을 해와서인지, 쿼리 명령어가 대문자가 눈에 잘 익히는데 DBeaver는 기본적으로 소문자로 자동변환된다. 이는 키워드 Case를 대문자 혹은 소문자로 설정해 놓을 수 있다. 명령어 대/소문자 자동변환 위에서 대소문자 설정은 했지만, 만약 설정을 해도 자동으로 대/소문자 변환이 안되는 경우는 다음 체크박스가 체크되어있는 지 확인한다. 윈도우 - 설정 - 편집기 - SQL 편집기 - Code Editor : Aut.. Database/SQL 2022. 7. 15. [MyBatis] 중복 쿼리 줄여주는 sql, include, property 태그 문법 살펴보기 다른 구문에서 재사용하기 위한 SQL 조각 사용 조건 id 속성 값 필수 사용하려는 태그의 위치보다 먼저 선언되어야 함 문법 ${alias}.id, ${alias}.username, ${alias}.password SQL 조각인 문을 DML (Data Manipulation Language) 태그, 즉, 다른 구문에 포함(삽입) 시키는 기술 문법 예제 Where 문법 재사용 where board_id = #{boardId} select pageNum from m_board Table 문법 재사용 from ${tableproperty} select pageNum JOIN문 활용 ${alias}.id, ${alias}.username, ${alias}.password select , from some_tab.. Database/MyBatis 2022. 7. 12. [자료구조] 자바 덱(Deque)의 클래스 사용하기 카프카의 소스코드를 보던 중 내부에서 Deque 클래스를 사용한 부분을 보게 되었다. Deque(덱 혹은 데크)은 Double-Ended Queue의 줄임말로 큐의 양쪽으로 엘리먼트의 삽입과 삭제를 수행할 수 있는 자료구조를 의미한다. 참고 : 월급쟁이의 경제적 사유 덱(Deque)은 어떤 쪽으로 입력하고 어떤 쪽으로 출력하느냐에 따라서 스택(Stack)으로 사용할 수도 있고, 큐(Queue)로도 사용할 수 있다. 특히 한쪽으로만 입력 가능하도록 설정한 덱을 스크롤(scroll)이라고 하며, 한쪽으로만 출력 가능하도록 설정한 덱을 셸프(shelf)라고 한다. Java에서의 Deque 자바에서의 덱은 인터페이스로 구현되었다. 덱 자료구조의 여러 연산들을 정의한 Deque 인터페이스가 있고 이를 구현한 Ar.. Algorithm/Stack & Queue 2022. 7. 7. [알고리즘] 다익스트라 알고리즘 (Dijkstra Algorithm) 동작 원리 및 구현하기 다익스트라 알고리즘 개요 다익스트라(dijkstra) 알고리즘은 그래프에서 한 정점(노드)에서 다른 정점까지의 최단 경로를 구하는 알고리즘 중 하나이다. 이 과정에서 도착 정점(노드) 뿐만 아닌, 다른 정점까지 최단 경로로 방문하여 각 정점까지의 최단 경로를 모두 찾게 된다. 매번 최단 경로의 정점을 선택해 탐색을 반복한다. 그래프 알고리즘 중 최단 거리, 최소 비용을 구하는 알고리즘은 다익스트라 외에 벨만-포드 알고리즘, 프로이드 워샬 알고리즘 등이 있다. 동작 단계 출발 노드와 도착 노드를 설정한다. '최단 거리 테이블' 을 초기화한다. 현재 위치한 노드의 인접 노드 중 방문하지 않은 노드를 구별하고, 방문하지 않은 노드 중 거리가 가장 짧은 노드를 선택한다. (선택한 노드는 방문 처리한다.) 해당 .. Algorithm/Tree & Graph 2022. 7. 7. [자료구조] 자바 우선순위 큐(Priority Queue)의 클래스 사용하기 Priority Queue 일반적인 큐의 구조 FIFO (First In First Out)을 가진다. 우선순위를 먼저 결정하고, 우선순위가 높은 데이터가 먼저 나가는 구조이다. 우선순위 큐를 사용하기 위해 우선순위 큐에 저장할 객체는 필수적으로 Comparable Interface를 구현해야한다. Comaprable Interface 구현 시 compareTo method 를 override 하여 처리할 우선순위 조건을 리턴하면, 우선순위 큐가 우선순위가 높은 객체를 추출해준다. (기본적으로 낮은 숫자부터 큰 숫자 오름차순이다) Heap을 이용하여 구현하는 것이 일반적이다. 데이터 삽입 시 우선순위 기준으로 최대 힙, 최소 힙을 구성한다. 데이터 추출 시, 루트 노드를 얻어 루트 노드를 삭제할 때는 빈.. Algorithm/Stack & Queue 2022. 7. 5. [AWS] AWS(Amazone Web Services) 개념 및 회원 가입 방법 AWS란? - 아마존닷컴에서 개발한 클라우드 컴퓨팅 플랫폼 - 아마존(Amazon)에서 제공하는 클라우드 서비스로, 네트워킹 기반으로 가상 컴퓨터와 스토리지, 네트워크 인프라 등 다양한 온라인 서비스 제공 - 비즈니스와 개발자가 웹 서비스를 사용하여 확장 가능하고 정교한 애플리케이션 구축하도록 지원 Server (Backend) 서버는 클라이언트에게 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터 시스템으로, 컴퓨터 프로그래밍(Server Program) 또는 장비(device)를 의미한다. 서버 구축 방식 온프레미스(On-Premise) 방식 : 온프레미스 환경은 자체적인 서버를 구축해서 직접 서버를 운영하는 방식을 의미한다. - Home Server : 가장 간단한 방식으로, 집에서 사용하는 컴퓨터를.. Infra/Cloud 2022. 7. 2. [Java] 중복 키 허용 MultiValueMap 와 HashMap 차이 MultiValueMap 살펴보기 전에 Map에 대해 간단히 살펴보자. Map 의 종류 HashMap TreeMap LinkedHashMap HashMap Map의 기본 형식으로, key : value 를 한 쌍으로 데이터를 저장하며 중복된 키가 존재하지 않는다. Map에 있는 데이터는 키 값을 기준으로 가져온다. TreeMap HashMap 기능 + 자동 정렬 TreeMap은 데이터가 들어올 때마다 key 값에 따라 자동 정렬된다. LinkedHashMap HashMap 기능 + 입력 순서 보장 HashMap에 데이터를 C - B - A 순서로 했다면, 나중에 맵에 있는 모든 값을 출력할 때 C - B - A 순으로 출력된다는 보장이 없다. 하지만, LinkedHashMap은 이 문제를 해결해준다. M.. JVM/Java 2022. 6. 24. [IntelliJ] 인텔리제이 IDEA 스프링 부트 프로젝트 빌드/실행 시 오류 (Command line is too long) 프로젝트 루트 경로에 .idea 폴더를 들어가서 그 폴더 내 workspace.xml 을 수정한다. ... ... ... 동일한 코드가 CDATA로 묶여있어 아래와 같이 입력해주었다. 출처 : https://jaimemin.tistory.com/1531 IDE/IntelliJ 2022. 6. 21. [자료구조] 자바 스택(Stack)의 클래스 사용하기 스택(Stack)의 특징 1. 먼저 들어간 데이터가 나중에 나오는 후입선출, LIFO (Last In First Out) 구조로, 마트용 음료수 진열대와 같은 구조이다. 2. 한 쪽 끝에서만 데이터를 넣고 뺄 수 있는 자료 구조여서 데이터를 쌓는 형식으로 저장하며 조회, 추가, 삭제 등 모두 가장 위에 있는 (가장 마지막에 삽입된) 값에서 이루어진다. 이 데이터를 Top이라고한다. 3. 그래프(Graph)의 깊이 우선 탐색(DFS)에 사용된다. 4. 재귀적(Recursion) 함수를 호출할 때 사용한다. 스택(Stack) 클래스 선언 import java.util.Stack; Stack stack = new Stack(); 메서드 public Element push(Element item);// 데이터 .. Algorithm/Stack & Queue 2022. 6. 19. [자료구조] 자바 큐(Queue)의 클래스 사용하기 큐(Queue)의 특징 1. 먼저 들어간 데이터가 먼저 나오는 선입선출, FIFO(First In First Out) 구조로, 줄을 서서 기다리는 구조와 같다. 2. 한 쪽 끝은 프런트(front)로 정하여 삭제 연산만 수행한다. 3. 한 쪽 끝은 리어(rear)로 정하여 삽입 연산만 수행한다. 4. 그래프(Graph)의 넓이 우선 탐색(BFS)에 사용된다. 큐(Queue) 클래스 큐(Queue) 선언 자바에서 큐(Queue)는 LinkedList를 활용해서 사용한다. import java.util.Queue; import java.util.LinkedList; Queue queue = new LinkedList(); 큐(Queue) 동작 및 메서드 Enqueue 동작 큐에 데이터를 추가하는 동작으로 o.. Algorithm/Stack & Queue 2022. 6. 19. [Java] Comparator, Lamda 사용하여 2차원 배열 정렬하기 오름차순, 내림차순 등 정렬을 할 때 음수가 나와야 오름차순인지, 양수가 나와야 오름차순인지 항상 헷갈려서 기억하기 위해 잘 정리된 포스팅을 참고하여 남겼다. 2차원 배열을 바로 Arrray.sort()를 통해 정렬하려고 하면, 비교 기준이 구현되어 있지 않기 때문에 캐스팅에 실패했다는 java.lang.ClassCastException: I cannot be cast to java.lang.Comparable 오류가 발생한다. 그 해결책으로 Comparable,Comparator 인터페이스를 구현하여 정렬기준을 추가해 2차원배열 뿐만 아니라 객체비교할 때도 사용할 수 있다. int[][] arr = new int[][]{{5,10},{3,30},{1,50},{4,20},{2,40},{5,60}}; Ar.. JVM/Java 2022. 6. 8. [Java] Arrays.sort 와 Collections.sort 정리 자료구조 알고리즘을 공부할 때 꼭 알아둬야할 기능인데.. 할 때마다 헷갈리고 까먹어서 정리좀 해둬야겠다.. Arrays.sort 오름차순 기본 오름차순 정렬 : 숫자 - 대문자 - 소문자 - 한글 순서로 정렬 import java.util.Arrays; public class Sort { public static void main(String[] args) { String[] str = {"a", "1", "가", "A", "3", "나"}; for(String s : str) {// 정렬 전 출력 System.out.print(s + " "); } System.out.println(); Arrays.sort(str);// 정렬 후 출력 for(String s : str) { System.out.prin.. JVM/Java 2022. 6. 6. [자료구조] Binary Heaps (Min-Heap and Max-Heap) 간단하게 알아보기 Heap ? 힙(Heap)은 이진 힙(Binary Heap)이라고도 하며, 최대 값이나 최소 값을 빠르게 구하기 위해 구현된 완전이진트리(Complete Binary Tree)를 기본으로 한 자료구조 힙(Heap)의 속성 - 완전 이진트리 (Complete Binary Tree) - 부모 노드와 자식노드의 값 사이에 대소관계 성립 (형제노드사에의 대소관계는 정해지지 않음) 힙(Heap)의 종류 - 최소힙 (Min Heap) : 부모 노드가 자식 노드보다 항상 작은 값을 가지고 있고, 가장 작은 값이 루트(root)인 트리구조 - 최대힙 (Max Heap) : 부모 노드가 자식 노드보다 항상 큰 값을 가지고 있고, 가장 큰 값이 루트(root)인 트리구조 최소 힙의 노드 삽입하기 1. 완전이진트리에 맨 끝.. Algorithm/Tree & Graph 2022. 6. 5. 이전 1 2 3 4 5 6 ··· 15 다음 추천 글 728x90 반응형