전체 글 24

[SQL] 인덱스 스캔 방식 - Index Range, Index Full, Index Unique, Index Skip

인덱스 탐색은 수평적 탐색과 수직적 탐색으로 나눠진다. 수평적 탐색은 인덱스 리프 블록에 저장된 레코드끼리 연결된 순서에 따라 좌->우 또는 우->좌로 탐색하는 과정이다. 수직적 탐색은 수평적 탐색을 위한 시작 지점을 찾는 과정으로, 루트에서 리프 블록까지 아래쪽으로 진행된다. 1. Index Range Scan Index Range Scan은 인덱스 루트 블록에서 리프 블록까지 수직적으로 탐색한 후에 리프 블록을 필요한 범위만 스캔하는 방식이다. B*Tree 인덱스의 가장 일반적이고 정상적 형태의 액세스 방식이다. set autotrace traceonly exp select * from emp where deptno = 20; 인덱스가 EMP_X01(deptno)인 emp 테이블의 실행계획은 다음과 ..

[Spring Boot] java error: release version 17 not supported

스프링 부트로 처음 프로젝트 생성하고 실행하려는 자바 17버전 오류가 떴다 필자 상황 1. Java11 / IntelliJ 2. Spring Boot Starter(https://start.spring.io/) 로 프로젝트 생성 3. 이후 아무것도 안건들임 원인 스프링 부트 스타터로 프로젝트 생성할때 Java 버전을 17로 잘못 설정함 해결 방법 (1) JDK 17 설치 https://www.oracle.com/java/technologies/downloads/ Download the Latest Java LTS Free Subscribe to Java SE and get the most comprehensive Java support available, with 24/7 global access to ..

개발 2023.07.06

[JAVA] 람다식 - 문법, 함수적 인터페이스(@FuntionalInterface), 람다식의 종류

람다식은 익명함수를 생성하기 위한 식이다. 람다식을 통해 자바 코드를 간결하게 사용하고, 컬렉션의 요소를 필터링하거나 매핑해서 원하는 결과를 쉽게 집계할 수 있다. 람다식의 형태는 매개 변수를 가진 코드 블록이지만, 런타임 시에는 익명 구현 객체를 생성한다. 1. 람다식 기본 문법 (타입 매개변수, ···) -> { 실행문; ··· } () 안 타입 매개변수는 오른쪽 중괄호 {} 블록을 실행하기 위해 필요한 값을 제공하는 역할을 한다. 매개변수를 이용해 중괄호를 실행한다는 뜻이다. String형 name변수의 값을 출력해보자. (String name) -> { System.out.println("내 이름은 " + name ); } 매개변수의 타입은 런타임 시 대입값에 따라 자동으로 인식되므로 람다식에서는..

[JAVA] 추상 클래스와 추상 메소드 - abstract

1. 추상 클래스 추상 클래스란, 클래스들의 공통적인 특성을 추출해서 선언한 클래스를 뜻한다. 추상 클래스와 실체 클래스는 상속의 관계를 가지고 있으며, 추상 클래스가 부모, 실체 클래스가 자식으로 구현되어 실체클래스는 추상 클래스의 모든 특성을 물려받을 수 있다. 하지만, 추상 클래스는 실체 클래스의 공통 필드와 메소드를 추출해서 만들었기 때문에 객체를 직접 생성해서 사용할 수는 없다. 2. 추상 클래스를 왜 쓸까? (1) 실체 클래스들의 공통된 필드와 메소드의 이름 통일 동일한 데이터와 기능임에도 불구하고 설꼐하는 사람에 따라 이름이 다르다 보니, 객체마다 사용방법이 달라지게 된다. Dog와 Bird은 Animal을 상속함으로써 필드와 메소드 이름을 통일시킬 수 있다. (2) 실체 클래스를 작성할 때..

[JAVA] 인터페이스와 구현클래스 - interface, implements

1. 인터페이스 - 자바에서의 인터페이스는 객체의 사용 방법을 정의한 타입이다. - 인터페이스는 객체의 교환성을 높여주며 다형성을 구현하는 중요한 역할을 한다 다형성이란, 하나의 타입에 여러 객체를 대입함으로써 다양한 기능을 이용할 수 있도록 하는 성질이다. 인터페이스는 하나의 객체가 아니라 여러 객체들과 사용이 가능하므로, 어떤 객체를 사용하느냐에 따라 실행 내용과 리턴값이 다를 수 있다. 하나의 타입에 대입되는 객체에 따라 실행결과가 다양한 형태로 나온다는 것이다. - 이 때문에 개발 코드를 수정하지 않고, 사용하는 객체를 변경할 수 있으며, 코드 변경 없이 실행 내용과 리턴값을 다양화할 수 있다. 2. 인터페이스 선언 interface 인터페이스이름 { ... } 3. 인터페이스의 구성 클래스는 필..

[SQL] 윈도우 함수; 행 순서 함수 - FIRST_VALUE, LAST_VALUE, LAG, LEAD

윈도우 함수에는 크게 다섯 개의 그룹(순위, 집계, 행 순서, 비율, 통계 분석) 으로 분류할 수 있다. 이번에는 행 순서 함수에 대해 알아보자. 윈도우 함수에는 OVER 문구가 키워드로 필수 포함된다. SELECT 윈도우함수 (칼럼명) OVER ( [PARTITION BY 칼럼] [ORDER BY 절] [WINDOWING 절] ) FROM 테이블명 ; PARTITION BY : 전체 집합을 기준에 의해 소그룹으로 나눌 수 있다 (GROUP BY절 처럼) WINDOWING : 함수의 대상이 되는 행 기준의 범위를 정할 수 있다. (SQL Server 미지원) WINDOWING 절은 아래와 같이 사용한다. (1) ROWS : 물리적인 결과 행의 수 ROWS BETWEEN UNBOUNDED PRECEDING..

[SQL] 윈도우 함수; 순위함수 - RANK, DENSE_RANK, ROW_NUMBER

윈도우 함수에는 크게 다섯 개의 그룹(순위, 집계, 행 순서, 비율, 통계 분석) 으로 분류할 수 있다. 이번에는 순위함수에 대해 알아보자. 윈도우 함수에는 OVER 문구가 키워드로 필수 포함된다. SELECT 윈도우함수 (칼럼명) OVER ( [PARTITION BY 칼럼] [ORDER BY 절] [WINDOWING 절] ) FROM 테이블명 ; PARTITION BY : 전체 집합을 기준에 의해 소그룹으로 나눌 수 있다 (GROUP BY절 처럼) WINDOWING : 함수의 대상이 되는 행 기준의 범위를 정할 수 있다. (SQL Server 미지원) 1. RANK 함수 RANK는 특정 칼럼에 대한 순위를 구하는 함수이다. 동일한 값에 대해서는 동일한 순위를 부여한다. (EX. 1등, 1등, 3등, 3..

[Spring Boot][Junit] 테스트 케이스 작성

개발하다보면 내가 잘 했나? 하는 의구심이 항상 든다. 그래서 개발 단계마다 테스트를 거치곤 하는데, 이때 내가 제대로 개발했는지, 기능이 정상적으로 작동되는지 확인한다. 1. 테스트를 진행할 패키지 생성 먼저, 테스트만 따로 진행할 패키지를 만들어 준다. 이렇게 하면 테스트 케이스만 따로 작성하여 분류할 수 있고 여러 테스트를 한번에 실행할 수도 있다. 보통 src/test/java 하위 폴더에 생성하고, 테스트임을 알아보기 쉽게 클래스명 뒤에 Test를 붙여주면 좋다. 또한, 테스트가 실행될 클래스가 포함된 패키지를 따로 생성해주면 패키지별로 테스트를 수행하기 편하다. 예를 들어, src/main의 repository 패키지의 MemoryMemberRepository에 대한 테스트를 진행하고자 하면 ..

개발 2023.06.29

[SQL] 그룹 함수 - ROLLUP, GROUPING, CUBE, GROUPING SETS

그룹 함수란 소계, 중계, 합계, 총합계 등 여러 레벨의 통계를 구할 수 있는 함수이다. 1. ROLLUP 지정된 그룹 컬럼의 Subtotal을 생성하기 위해 사용되며, 일반적으로 GROUP BY절에 사용된다. GROUP BY ROLLUP(칼럼1, 칼럼2) 부서이름과 업무명을 기준으로 집계 SELECT B.DNAME, A.JOB, COUNT(*) AS EMP_COUNT FROM EMP A, DEPT B WHERE B.DEPTNO = A.DEPTNO GROUP BY ROLLUP (B.DNAME, A.JOB); DNAME JOB EMP_COUNT SALES CLERK 2 SALES MANAGER 1 SALES 3 RESEARCH CLERK 2 RESEARCH MANAGER 1 RESEARCH 3 ACCOUN..

[SQL] SELECT 문의 실행 순서

SELECT문에는 사용자가 원하는 데이터를 출력하기 위해 다양한 방법으로 조건 설정이 가능하다. SELECT 칼럼명 FROM 테이블명 WHERE 조건식 GROUP BY 칼럼 | 표현식 HAVING 그룹 조건식 ORDER BY 칼럼 | 표현식 [ASC | DESC] 이렇게 SELECT 문장은 개의 절로 구성되며, 실행 순서는 다음과 같다. FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY FROM : 테이블을 참조한다. WHERE : 조건 부여를 통해 발췌 대상 데이터가 아닌 것은 제거한다. GROUP BY : 행들을 그룹화한다. HAVING : 그룹핑된 값의 조건에 맞는 것만 출력한다. SELECT : 데이터를 출력한다. ORDER BY : 데이터를 정렬한다...