테이블에 대한 검색 속도를 향상시키기 위해 칼럼에 생성하는 DB 객체
Full-Scan 시 O(N)의 시간복잡도가 걸리는 것을 Tree 자료구조를 활용해 O(logN)의 시간으로 찾을 수 있게 해줌.
메모리를 차지하고, 삽입/수정/삭제 시 인덱스 테이블 또한 업데이트 되어야 한다.
조회 연산이 빈번하고, 삽입/수정/삭제 연산이 많지 않은 테이블에서 생성하는 것이 유리하다.
고유/비고유 인덱스
클러스터링 인덱스, 비 클러스터링 인덱스
함수 기반 인덱스
: 단순 컬럼이 아니라, SAL * 10 처럼 하나의 연산 결과값을 가지고 인덱스를 만들 수도 있다.
WHERE 절 / 조인 조건절에서 자주 사용되는 컬럼
전체 데이터 중 10~15% 이내의 데이터를 검색하는 경우 ( = 성별에 대한 인덱스를 만든다면, 전체 데이터 중 50%를 찾게 되어있다. )
테이블에 저장된 데이터의 변경이 드문 경우 ( 수정, 삭제 시 인덱스 트리에 대한 변경 연산까지 포함되니까 )
1) 카디널리티가 높은 컬럼
20대 회원 테이블에서 나이 컬럼은 카디널리티가 낮다.20대 회원 테이블에서 주소 컬럼은 카디널리티가 높다.2) 선택도가 낮은 컬럼
3) 활용도가 높은 컬럼
4) 중복도가 낮은 경우
인덱스 자체의 중복도이다/.하나 이상의 기본 테이블이나 다른 뷰를 이용하여 생성되는 가상 테이블
뷰에 대한 수정이 이루어지면, 해당하는 원본 테이블도 수정된다.
중요 데이터를 보호하기 위한 보안의 기능도 수행한다.
사용자가 관심있는 데이터만을 미리 가공해놓아, 사용자에게 편의성을 제공한다.
뷰는 테이블과 거의 비슷한 기능을 지원하지만, 일부 DML은 지원되지 않을 수도 있다.
단순 뷰하나의 테이블에 대해 생성한 뷰
한 테이블에서 일부 컬럼만 뽑아와서 생성한 경우
복합 뷰조인을 통해 생성한 뷰
여러 테이블에서 조인 조건을 통해 생성한 뷰
인라인 뷰FROM 절에서 참조하는 테이블의 크기가 클 경우, 필요한 행과 컬럼만으로 구성된 집합을 재정의하여 질의문을 효율적으로 구성할 수 있다.
이를 통해 연산 비용을 줄일 수 있다. ( cf. Driving Table, Driven Table )
보통 WITH 절로 분리해서 사용한다.
임시적으로 잠깐 쓰는 뷰이다. ( FROM절의 서브쿼리라고도 한다 )
DROP VIEW 뷰이름;
뷰를 정의한 기본 테이블의 구조나 데이터에는 어떤 영향도 없다.
유일(UNIQUE)한 값을 생성해주는 오라클 객체
시퀀스를 생성하면 기본키와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성할 수 있다.
테이블과 독립적으로 생성되고 저장되는 객체이다.
- 테이블들이 다같이 동일한 시퀀스를 공유할 수도 있지만, 일반적으로 테이블 당 하나씩 시퀀스 번호를 두고 쓴다.
게시판의 게시글과 같이 딱히 잡을만한 PK가 없을 때 시퀀스를 사용하여 PK를 잡을 수 있다.
Spring JPA에서 @Id @GeneratedValue 어노테이션을 통해 Sequence를 엔티티의 PK로 잡아줄 수 있다.
슈퍼 컴퓨터 없이 서버 여러 대를 연결해 빅데이터 분석을 가능하게 함.
대용량의 데이터를 적은 비용으로 더 빠르게 분석할 수 있도록 하는 플랫폼.
빅데이터 처리와 분석을 위한 플랫폼 중 사실상 표준(De Facto)
수천 대의 분산된 x86 장비에 대용량 파일을 저장할 수 있는 기능을 제공하는 분산 파일 시스템 (HDFS)과, 저장된 분산 파일을 분산된 서버의 CPU와 메모리 자원을 이용하여 빠르게 분석하는 맵-리듀스(MapReduce) 플랫폼으로 구성됨.
맵리듀스에서 map 함수가 모두 종료되어야 reduce 함수가 실행되어 성능 손실이 큼.
이후에 되어 위 기능에 대한 보완이 이루어졌지만, 성능상에 손실이 있음.
실시간 서비스 제공이 불가능하여 하둡은 배치성 통계작업에만 주로 투입됨.
대규모 데이터 처리를 빠른 속도로 실행시켜주는 엔진
인메모리 데이터 엔진을 통해 초기 맵리듀스의 성능상 한계를 크게 극복함.
스파크가 하둡에 비해 10배 정도 속도가 더 빠름.
하둡 기반으로 구동하는 것을 목적으로 만들어졌다.
Java, Python, R 등 다양한 언어를 사용하여 스파크와 연동이 가능하다.
1~7까지가 크게 한 묶음 ( 기본 언어 문법 + OOP )
8~10 까지가 크게 한 묶음
Java 수업은 이 두가지로 이루어진다.
그리고.. 배열과 함께 배우는 Collection Framework은 매우 중요하다.
왜냐하면, 이 프레임워크를 통해 REST 방식으로 받아온 데이터를 처리할 것이기 때문이다!
매우 국소적으로 이야기하면, '화면이 안 바뀌면서 데이터를 가져오는 것' (비동기 처리)
HTTP를 이용한 분산형 웹 서비스
분산된 서비스를 우리가 가져와서 사용한다.
카카오 로그인 API, 네이버 지도 API, 공공 데이터를 가져오는 것 등등
지구 상의 모든 서비스는 전부 다 REST방식으로 주고받을 수 있다.
그리고 이렇게 분산된 서비스, 데이터를 요청할 때 '토큰'이라는 개념이 등장하는데,
이것이 바로 OAuth이다. 최근 OAuth의 버전은 OAuth2.0이다.
HTML, Servlet, jQuery를 배움. ( UI, 웹개발 기초 )
Model-View-Controller Pattern을 적용하여 개발함. ( 이 때, HTML, JavaScript )
최종적으로 Spring Framework + React를 배운다. ( 우리 클래스 최종 목표 )
인코딩 방식
인코딩 : 컴퓨터가 이해할 수 있는 0,1 형식으로 바꾼다.
좀 더 보충 필요
객체지향 프로그래밍은, 존재하는 모든 것을 프로그램으로 표현하려고 노력한다.
객체는 실세계에 존재하는 것을 프로그램으로 표현한 것이다.
존재하는 모든 것은 '속성'과 '기능'으로 나누어 볼 수 있다.
즉 객체는 정적인 상태의 값과 동적인 행위를 가진다.
이 객체를 담는 그릇이 클래스이다.
메서드는 객체의 기능
해당 객체를 메모리에 올리는 것이 인스턴스
변수 : 하나의 값을 저장할 수 있는 기억공간
컴퓨터의 주소는 0xFFFFFFFF ( 16진수 * 8자리 => 32 자리수 ), 4byte의 범위를 갖는다.
이 때, 주소값을 간단하게 나타내면, 0x47F3D64C1E .. 와 같을 것이다.
또한, 이 주소값은 자바 프로그램을 돌릴 때마다 항상 메인 메모리의 다른 지점에 올라갈 것이다.
이에 변수의 개념이 필요하다.
변수는 해당 메모리 주소에 개발자가 알아볼 수 있는 이름(태그)를 붙여놓는 것과 같다.
그렇게 태깅된 메모리 공간을 변수라 할 수 있다. ( 하나의 값을 저장할 수 있는 기억공간이다. )
boolean 논리형 1byte
char 문자형 2byte ( 유니코드 기반 문자열 저장 )
byte, short, int, long : 정수형 / 1,2,4,8 바이트
float, double : 실수형 / 4, 8 바이트
해당 바이트의 크기와 표현범위를 숙지해놔야 추후 '형변환(Type Casting)' 시 이해하기 편할 것이다.