반응형
IT 기초
자바 기초
자바 메모리 영역
- 메서드 영역 : static 변수, 전역변수, class정보
- 스택 : 지역변수, 함수(메서드), LIFO 방식
- 힙 : 동적할당 객체 gc가 관리함
- 메모리 상수풀 영역 : 힙영역에 생성, 프록세스 종료까지 계속 유지, 작성한 상수값을 가지고 있음
인터페이스 사용 이유
- 인터페이스 작성된 책임은 항상 구현되어 있다는 강제성을 가짐 -> 이를 통해 다형성 및 기타 유연한 작업이 가능해짐
- Mark 역할을 하여 특정 기능을 표시해줌(Serializable 등)
JDBC란?
- 자바에서 데이터베이스 접속할 수 있도록 하는 자바 api
직렬화란?
- 스트림을 통해 입출력이 가능할 수 있도록 전달할 수 있는 구조로 변경하는 것
serialVersionUID 선언 이유
- 직렬화/역직렬화 때 클레스 버전을 확인하기 위해
리플렉션이란
- 컴파일 시점이 아닌 런타임 시점에 메모리에 올라간 클래스나 메서드등을 동적으로 조작할 수 있도록 하는 행위
클래스 멤버 변수 초기화 순서
- Static 변수 : 클래스 로드 될 때
- 필드 변수 : 객체 생성 될 때 (heap)생성자 block보다 먼저
- 생성자 block : 객체 생성 될 때(heap)
Servlet vs JSP
- Servlet : 순수 자바 언어로만 이루어져있어서 Servlet 컨테이너가 이해할 수 있음
- JSP : html 기반에 java 코드를 블록화하여 삽입한 것으로 servlet 으로 변경됨
제너릭
- 선언시 타입을 결정하지 않고 객체를 생서할 때 유동적인 타입으로 재상용하기 위한 것
- 컴파일 시점에 자료형을 결정함으로 런타임시 자료형으로 인한 오류를 줄일 수 있다.
POJO
- Plain Old Java Object
- 특정 자바 모델이나 기능, 프레임워크에 영향을 받지 않는 자바 오브젝트
박식 & 언박싱
- 원시형 -> Wrapper Class 로 변환 : 박싱
- Wrapper Class -> 원시형 : 언박싱
상속과 컴포지션의 차이
- 상속은 확장의 목적으로 사용, 일반 클래스를 상속 받는 것은 위험
- 캡슐화 위배 : 슈퍼 클래스 구현에 의존 -> 변경에 취약
- 수퍼클래스에 함수가 추가되면 서브클래스 구현에 영향을 미침 -> 잘못된 오버라이딩 이슈
- 컴포지션을 통한 wrapper class 생성
JVM 역할 (상세 설명 보충 필요)
- Java Byte Code 를 OS에 맞게 해석
추상클래스와 인터페이스 차이
- 차이점은 목적
- 추상클래스는 공통적인 기능을 하는 객체들의 추상화(계층화)
- 인터페이스는 특정 메서드가 반드시 존재하도록 강제하는 역할 -> 해당 인터페이스를 구현한 객체는 같은 동작을 한다는 것을 보장함
다형성
- 하나의 메소드나 클래스가 있을때 이것들을 다양한 방법으로 동작한다는 것을 의미
java 동기화 기법 3가지
- 문제점
- 경쟁 상태 : 여러 스레드가 같은 시점에 변수를 읽는 상태
- 가시성 : 변수들이 사용 될 수 있는 영역의 범위
- 변수 위치가 cpu 레지스트리 위치에 있는지 메인 메모리에 있는지 알 수가 없음
- Volatile
- volatile을 사용한다면 모든 읽기 쓰기 연산을 메인 메모리에서만 처리된다
- 변수의 가시성 문제를 해결
- 여전히 경쟁 상태 문제가 발생
- volatile의 경우는 하나의 스레드가 쓰기 연산을 하고, 다른 스레드에서는 읽기 연산을 통해 최신 값을 가져올 경우. 즉 다른 스레드에서는 업데이트를 행하지 않을 경우 이용할 수 있다.
- Atomic (CAS)
- AtomicInteger 클래스는 CAS(compare-and-swap) 기반으로 되어있다.
- CAS란 특정 메모리 위치의 값이 주어진 값을 비교하여 같으면 새로운 값으로 대체된다.
- 기본적으로 비교하는 과정에서 실패한다면 다시 읽고 비교하고 반복하는 과정을 가진다.
- Atomic*** 클래스의 경우는 여러 스레드에서 읽기 쓰기 모두이용할 수 있다
- Synchronized (LOCK)
- 하나의 스레드가 lock을 얻어 수행이 끝날때까지 다른 스레드들은 lock 풀릴때까지 대기하게 된다
- 여러 스레드에서 읽기 쓰기 모두 이용할 수 있다.
예외처리
- 에러 (error)
- java.lang.Error 클래스의 서브 클래스
- 메모리 부족, 스택오버플로우와 같이 일단 발생하면 복구할 수 없는 문제
- 주로 vm에서 발생시키는 것
- catch 블럭으로 잡아도 대응 방법이 없다. 시스템 레벨에서 특별한 작업을 하는게 아니면 에러에 대한 처리는 신경쓰지 않아도 된다.
- Exception
- Exception
- Exception 클래스의 서브 클래스
- 반드시 예외를 처리해야 함
- 확인시점은 컴파일 단계
- Checked Exception 이라고 불림
- Unchecked Exception
- RuntimeException 클래스의 서브 클래스
- 명시적인 처리를 강제하지 않음
- 확인시점은 실행 단계
- Exception
- 예외처리 방법
- 예외 복구
- 예외가 발생하여도애플리케이션은 정상적인 흐름으로 진행됨
- 예외가 발생하면 이를 미리 예측하여 다른 흐름으로 유도시키도록 구현함
- 예외 처리 회피
- throws를 통해 호출한 곳으로 예외를 던지고 처리를 회피
- 호출쪽에서 다시 예외를 받아 처리하도록 해야함
- 예외 전환
- 예외 발생시 다른 예외를 던지는 것
- 호출쪽에서 더 명확하게 인지 할 수 있도록 돕기 위한 방법
- Checked Exception 중 복구가 불가능한 예외가 잡혔다면 이를 Unchecked Exception 으로 전환하여 다른 계층에서 예외를 선언할 필요가 없도록 할 수도 있다.
- 예외 복구
- Try-with-resources
- Java7부터 제공
- 할당된 자원을 Exception 발생시에 자동으로 해제할 수 있다.
public class Main { public static void main(String[] args) { try(InputStream is = new FileInputStream("fileName"); OutputStream os = new FileOutputStream("fileName")) { } catch (IOException e) { System.out.println("Exception 발생!"); } } } ```java
String Class
- new String V.S. 리터럴 이용한 생성
- new를 활용한 방식
- Heap 영역에 존재하게 됨
- 리터럴 방식
- string constant pool 이라는 영역에 존재하게 됨
- new를 활용한 방식
자바 컬렉션
SET
- 중복 요소가 없는 오브젝트 저장 방식
- HashSet : Hash 알고리즘으로 Set을 구현
- 접근시간 빠름
- 순서보장 X,
- 정렬시간은 TreeSet보다 느림
- TreeSet : 이진트리(red-black)형태로 자료 저장
- 정렬을 활용한 연산에는 HashSet보다 유리함
- LinkedHashSet : 해쉬 테이블형태로 데이터 접근이 가능
- 입력된 순서대로 데이터를 관리한다.
List
- 중복 가능, 저장 순서를 저장
- ArrayList : 색인을 사용한 List 구현
- 랜덤엑세스 성능이 뛰어남
- 데이터를 새로 저장하고 삭제할 때는 색인을 수정해야 함으로 불리함
- LinkedList : 순차적인 접근 방식으로 List 구현
- 데이터 접근시 head부터 차례로 노드를 찾는다.
- 데이터를 새로 저장하거나 삭제할때 포인터만 변경하면 됨으로 호율적임
- Vector : 모든 메소드 들이 동기화 되어 있는 List
- 모든 메서드들이 동기화 되어 있어 쓰레드에 안전함
Map
- Key-Value 형태 구조, key 중복 불허
- HashMap : Hash 알고리즘을 통하여 Map을 구현한 클래스
- null값을 허용함
- 동기화 되어있지 않음
- HashTable : 데이터를 Hash 테이블에 담음 (HashMap과 동일)
- null값을 허용 X
- Hash테이블 객체가 동기화 되어 있음
- TreeMap : red-black 트리에 데이터를 담음
- treeSet과 다른점은 Key에 의해서 순서가 정해짐
- LinkedHashMap : 이중연결 리스트 방식을 통해 데이터를 담음
- 저장 순서를 구분하는 Map
- Key 등록순을 기준으로 함
디자인 패턴
싱글톤
- 특정 클래스의 인스턴스 (스레드 풀, 데이터 소스, 네트워크 설정 등) 가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴 -> 자원 낭비 최소화
- 단점
- 인스턴스가 호출되는 시점이 아닌 초기에 생성되어 있다면 리소스 낭비를 불러올 수 있다.
- 싱글톤 인스턴스가 너무 많은 책임을 가지고 있으면 의존도가 높아지고 객체지향 설계를 거스를 수 있다.
- 멀티 스레드 환경에서는 스레드 세이프한 설계가 필요하다.
전략 패턴
- 알고리즘군을 정의하고 각각을 캡슐화하여 교환하여 사용할 수 있도록한 패턴
- 다형성을 활용하여 독립적으로 유연한 알고리즘 선택이 가능하다.
스프링
스프링이란
- 자바(JAVA) 플랫폼을 위한 오픈소스(Open Source) 애플리케이션 프레임워크(Framework)
- 자바 엔터프라이즈 개발을 편하게 해주는 오픈 소스 경량급 애플리케이션 프레임워크
특징
- 경량 건테이터로서 자바 객체를 직접 관리
- 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있다.
- 스프링은 POJO(Plain Old Java Object) 방식의 프레임 워크
- 일반적인 J2EE 프레임워크에 비해 구현을 위한 특정한 인터페이스를 구현하거나 상속을 받을 필요가 없어 기존에 존재하는 라이브러리 등을 지원하기에 용이하고 객체가 가볍다
- 스프링은 제어의 역행 (IoC : Inversion of Control) 을 지원
- 컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출한다.
- 컨테이너에 의한 제어의 역행으로 인해 DI, AOP 등의 작업이 가능해졌다.
- 스프링은 의존성 주입 (DI : Dependency Injection) 을 지원
- 각각의 계층이나 서비스들 간의 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.
- 스프링은 관점 지향 프로그래밍 (AOP: Aspect Oriented Programming) 을 지원
- 트랜잭션, 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 경우 기능을 분리하여 개발 가능
- 수평/횡단 적 관심사에 관련된 내용을 분리하여 개발가능
- 영속성과 관련된 다양한 서비스를 지원
- iBatis 나 Hibernate 등 완성도가 높은 데이터베이스 처리 라이브러리 및 프레임워크와 연결 가능한 인터페이스를 제공한다.
- 확장성이 높음
- 통합을 위해 기존 라이브러리를 감싸는 정도로 스프링에서 사용 가능
DispatcherServlet
- Spring MVC Framework의 유일한 Front Controller
- Controller로 향하는 모든 웹요청의 진입점, 웹요청을 처리하며, 결과 데이터를 Client에게 응답함
- DispatcherServlet은 Spring MVC의 웹요청 Life Cycle을 주관
@MVC (Spring MVC)
- 특징
- SpringMVC는 모델2 아키텍쳐와 FrontController 패턴을 프레임워크 차원에서 제공
- SpringMVC프레임워크는 Spring을 기반으로 하고 있기 때문에 Spring이 제공하는 트랜잭션 처리나 DI 및 AOP등을 손쉽게 사용 가능
- 주요 구성 컴포넌트
- DispatcherServlet : 스프링 프레임워크의 Front Controller, 웹 요청과 응답의 라이프 사이클을 주관한다.
- HandlerMapping : 웹 요청시 URL을 기준으로 어던 핸들러 객체 (컨트롤러) 를 사용하여 처리할지 결정하여 DispatcherServlet에 알려준다.
- Controller : 클라이언트의 요청을 처리한 뒤, Model를 호출하고 그 결과를 DispatcherServlet에게 알려 준다.
- ModelAndView : Controller가 수행한 결과( Model 데이터) 와 이동할 페이지 (View) 에 대한 정보를 보유
- ViewResolver : Controller가 리턴한 뷰 이름을 기반으로 처리 결과를 생성할 뷰를 결정함
- View : Controller 처리 결과를 출력한다.
Filter,Interceptor,AOP 차이
- 실행 시점 : Filter -> Interceptor -> AOP
- 요청 중간에 가로채서 사전작업, 사후작업을 하는것은 공통점
- Filter
- 클라이언트 요청 정보 객체인 ServletRequest를 서블릿 컨테이너가 생성하고 Servlet의 service 메소드 인자로 전달함
- Servlet 앞에 존재함
- IP, hostname, 프로토콜 형식, 서버이름, 포트번호, ContentType 등을 가져올 수 있다.
- 일반적인 네트워크 통신 기반에 의해서 사용 되는 것들
- Servlet 의 web.xml에서 정의
- doFilter 메소드의 chain.doFilter(request,response) 를 기점으로 전/후 처리가능
- Interceptor
- Spring에서 실행될 컨트롤러 빈 오브젝트, 컨트롤러가 돌려 주는 ModelAndView, 발생한 예외 등을 제공받을 수 있음
- 요청 파라미터, HTTP 헤더, 세션 및 쿠키 데이터, 요청에 사용된 URL 등을 가져올 수 있다
- servlet-context.xml에서 정의한다.
- AOP
- AOP의 여러가지 기능들을 이용하여 메소드가 시행되기 전, 후 등에 처리
- 로깅, 트랜잭션, 에러처리 등 세밀한 요구가 필요한 곳에서 사용 가능
DB 기본
DBMS 언어
- DDL (데이터 정의어, Data Definition Language)
- 데이터베이스 오브젝트가 정의 됨
- 데이터베이스 메타로 등록
- CREATE, ALTER, DROP, TRUNCATE
- DCL (데이터 제어어, Data Control Language)
- 저장된 데이터를 올바르게 유지하기 위해 사용
- 무결성, 보안과 관련한 작업을 수행함
- GRANT, REVOKE
- DML (데이터 조작어, Data Manipulation Language)
- 데이터를 입력, 수정, 삭제 등의 작업을 수행함
- SELECT, UPDATE, INSERT, DELETE, MERGE
트랜잭션
- 트랜잭션이란
- 하나의 논리적 기능을 수행하기 위한 작업단위
- DB의 일괄된 상태를 또다른 일괄된 상태로 변화시키는 기능을 수행
- 트랜잭션 성질 (ACID)
- Atomicity (원자성)
- 트랜잭션의 연산이 DB에 모두 반영되던지 전혀 반영이 되지 않던지
- Consistency (일관성)
- 트랜잭션이 성공적으로 완료된 후에는 언제나 일관성 있는 DB 상태로 변환되어야 한다.
- Isolation (독립성)
- 수행중인 트랜잭션이 완전히 완료되기전에는 다른 트랜잭션 수행 결과를 참조할 수 없다.
- Durablility (영속성)
- 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다.
- Atomicity (원자성)
- 트랜잭션을 병행처리시 발생할 수 있는 문제
- 갱신 내용 손실
- 동시에 하나의 데이터가 갱신될 때 하나의 갱신이 누락되는 경우
- 현황 파악 오류
- 하나의 데이터 갱신이 끝나지 않은 시점에서 다른 트랜잭션이 해당 데이터를 조회 하는 경우
- 모순성
- 두 트랜잭션이 동시에 실행 될 때 데이터베이스가 일관성이 없는 모순된 상태로 남는 문제
- 연쇄 복귀
- 두 트랜잭션이 하나의 레코드를 갱신할 때 하나의 트랜잭션이 롤백하면 다른 하나의 트랜잭션 마져 롤백이 되는 문제
- 해결방법
- 로킹 제어 기법을 사용
- DB 일부분을 Lock 시키고 트랜잭션이 완료되면 Unlock 시키는 방법
- 단위가 크면 관리가 쉽지만 병행성이 떨어짐, 단위가 작으면 관리가 어렵고 오버헤드가 증가함
- 잘못된 로킹제어는 트랜잭션의 직렬화 가능성을 높임
- 갱신 내용 손실
Query
- 집합연산자
- UNION : 합집합을 구함 (중복자료 배제)
- UNION ALL : 합집합을 구함 (중복자료 포함, 성능 떨어짐)
- MINUS : 차집합
- INTERSECT : 교집합
- JOIN 이란?
- 두개 이상의 테이블이나 DATASET을 서로 연결하여 데이터를 검색하고자 할때 사용하는 방법
- 조인의 종류는 CARTESIAN PRODUCT, EQUI JOIN, NON-EQUI JOIN, OUTER JOIN, SELF JOIN 이 있음
- JOIN 상세
- 카티션 곱 (CARTESIAN PRODUCT)
- CROSS JOIN (교차조인) 이라고도 불린다.
- 두 테이블의 곱집합을 반한한다.
- M개의 열을 가진 테이블과 N개의 열을 가진 테이블이 교차조인 되면 M*N 개의 열을 생성한다.
- INNER JOIN (내부조인)
- 조건을 사용하여 두 테이블의 레코드를 결합한다.
- EQUI JOIN, NON EQUI JOIN, NATURAL JOIN 등이 있다.
- EQUI JOIN
- 공통 칼럼 값이 equal 일때 양 쪽 테이블의 값을 가져오는 조인
- 두 테이블을 조인 시킬 조건은 WHERE 절에서 기술함
- NON EQUI JOIN
- 두 테이블간 공통 컬럼 값이 일치하지 않을 때 사용하는 조인
- OUTER JOIN
- OUTER JOIN 은 조인하는 여러 테이블에서 한 쪽에는 데이터가 있고 한 쪽에는 데이터가 없는 경우, 데이터가 있는 쪽 내용을 전부 출력하는 방법이다.
- 조인 조건에 만족하지 않아도 해당 행을 출력하고 싶을 때 사용할 수 있다.
- LEFT /RIGHT/FULL OUTER JOIN 이 있다.
- LEFT OUTER JOIN
- 조인문의 왼쪽에 있는 테이블의 모든 결과를 가져온 후 오른쪽 테이블의 데이터를 매칭하고, 매칭되는 데이터가 없을 경우 NULL을 표시한다.
- RIGTH OUTER JOIN
- 조인문 오른쪽에 있는 테이블의 모든 결과를 가져온 후 왼쪽의 테이블의 데이터를 매핑하고, 매핑되는 데이터가 없는 경우 NULL을 표시한다.
- FULL OUTER JOIN
- LEFT OUTER JOIN 과 RIGHT OUTER JOIN 을 합친 것이다.
- 양쪽 모두 일치하지 않는 것들까지 모두 결합하여 출력한다.
- SELF JOIN
- 하나의 테이블에서 두개의 칼럼을 연결하여 조인 시키는 것이다.
- 카티션 곱 (CARTESIAN PRODUCT)
- SUB QUERY
- 하나의 SQL 명령문의 처리 결과를 다른 SQL 명령문에 전달하기 위해 사용
- 데이터 무결성 제약 조건
- NOT NULL
- 해당 컬럼 값은 NULL 을 포함 할 수 없음
- Unique Key (고유키)
- 테이블에서 해당 칼럼 값은 반드시 유일 해야 함
- Primary key (기본키)
- 해당 칼럼 값은 반드시 존재해야 하며, 유일해야 함 (NOT NULL + Unique Key)
- Foreign Key (외래키)
- 참조되는 테이블의 칼럼의 값이 존재하면 허용
- 부모 키가 되기 위한 컬럼은 반드시 무보 테이블의 기본키나 유일키로 설정되어 있어야 함
- CHECK
- 저장 가능한 데이터 값의 범위나 조건을 지정하여 설정한 값만을 허용한다.
- NOT NULL
DB 기타 (오라클 기준)
- OLTP, OLAP 차이점
- OLTP (Online Transaction Procession)
- 다수의 사용자가 실시간으로 데이터베이스이 데이터를 생성하거나 조회한는 등의 단위 작업을 처리하는 방식
- OLAP (Online Analytical Processing)
- OLTP 와 상대되는 개념으로 쌓여있는 데이터를 분석, 다차원적으로 활용 하는 방식
- OLTP (Online Transaction Procession)
- Index 사용 이유
- 수 많은 데이터 중에서 원하는 데이터를 빨리 엑세스 할 수 있게 해주는 것이 인덱스
- 익덱스를 순서대로 정렬해서 각 로우를 바로 엑세스 할 수 있는 주소를 함께 저장함
- Index의 종류와 그 기능
- ROWID
- 해당 로우를 엑세세스 할 수 있는 주소 값
- 오브젝트 번호, 파일번호, Block 번호, 로우번호 구조로 되어 있음
- B + 트리 인덱스
- 특징
- 균형 트리 형태
- 각 노드는 서브트리 포인터, 키 값, 데이터 레코드 포인트로 구성
- 장점
- 폭이 넓고 깊은 구조는 디스크 I/O를 줄여줌
- 디스크 블록을 읽어오는 횟수가 적음으로 인덱스 순차 파일 구조보다 성능이 좋음
- 단점
- 노드의 삽입과 삭제시 트리의 균형을 유지하기 위해 복잡한 연산이 필요함
- 다중 키에 대한 질의를 처리하기 위해 많은 수의 탐색이 필요하게 됨
- 특징
- 비트맵 인덱스
- 특징
- 인덱스를 구성하는 속성(열) 에 대해 각 값에 대해 하나의 비트캡을 구성
- 각 비트맵은 테이블의 행 수만큼 비트를 가짐
- 장점
- 각 속성값에 대한 비트맵을 AND 나 OR 연산을 취함 -> 교집합이나 합집합을 빠르게 구할 수 있음
- 행의 개수 계산시 비트 개수만 구하면 됨
- 단점
- 갱신 비용이 큼
- 큰 분포도를 가지는 속성에는 적합하지 않음
- 특징
- 역 전환 키 인덱스
- 인덱스의 값이 실제 테이블에서는 반대로 되어 있음
- 좌측 리프 Block에 대한 경하 해소 (B+트리 인덱스에 유리)
- 범위 스캔시 인덱스 엑세스 불가
- ROWID
- 문장 실행 과정
- SELECT
- Parse -> Bind -> Execute -> Fetch
- User Process 는 사용자가 실행한 SQL Server Process 에 전달
- Shared Pool 에서 구문분석, 문법검사, 권한검사, 커서공유, 실행계획을 진행 -> 오라클에서는 Parse라 부름
- 값을 치환하여 변수 값을 적용, Bind 처리를 하지 않았다면 바로 Execute 단계로 넘어감
- Execute 단계는 Cash 에 데이터 Block를 적재하거나 있다면 재사용 함
- 최종적으로 Fetch 는 필요한 데이터만 골라서 User Process에 전달
- UPDATE
- Parse -> Bind -> Execute
- Select 문과 다르게 Fetch 문이 없음
- Execute 작업에서 변경된 내용을 redo 로그 버퍼에 기록하고 이전 데이터를 undo 세그먼트에 기록함
- COMMIT
- Redo 로그 버퍼 내용을 redo 로그 파일에 기록함
- SELECT
- 커서란
- 쿼리문에 의해서 반환되는 결과값들을 저장하는 메모리 공간
- 동의어(Synonym)란
- 데이터베이스 투명성을 위해 사용
- 이전에 참조하던 오브젝트가 변경되어도 SQL문을 고칠 필요 없음
- 객체의 이름이 길 경우 용이
- 시퀀스란
- 유일한 값을 생성해주는 오라클 객체
- 기본키와 같이 순차적으로 증가하는 컬럼을 자동 생성 가능
- 테이블과 독립적으로 저장되고 생성됨
- 데이터베이스(스토리지) 엔진
- 개요
- 물리적 저장장치에서 데이터를 다루는 역할을 담당
- InnoDB
- MySql에서 기본 default 로 설정되는 스토리지 엔진
- transaction safe 함
- 커밋과 롤백, 그리고 복구 기능을 제공함
- MyISAM
- 트랜잭션을 지원하지 않고 table-level locking 을 지원
- multi-thread 환경에서는 성능이 저하됨
- Archive
- 로그 수집에 적합한 엔진
- 데이터가 메모리상에서 압축되고 압축된 상태로 디스크 저장됨
- row-level locking 이 가능함
- 트랜잭션 지원이 안됨
- 한번 Insert 된 데이터는 Update, Delete가 어려움
- 개요
- 데이터베이스 회복 기법
- 로그 기반 회복 기법
- 지연 갱신 회복 기법
- write 연산 지연, 로그에 db변경 내역 저장
- 트랜잭션 완료시 로그를 보고 write 연산 수행
- 트랜잭션 완료시 장애 발생 -> redo 만 실행
- 트랜잭션 미 완료시 장애발생 -> 로그 무시
- 즉시 갱신 회복 기법
- 즉시 DB변경, 로그에 기록
- 장애 발생 시 로그에 기반하며 undo 실행
- 체크포인트 회복기법
- 그림자 페이징 회복 기법
자료구조
반응형
'IT > 기타' 카테고리의 다른 글
2019년 회고 (0) | 2019.12.30 |
---|---|
내가 생각하는 소통이란 (0) | 2019.05.05 |
Spring boot aws rds 로컬 연동 에러 (1) | 2019.01.07 |
아이폰 XR, XS, XS MAX UDID 확인방법 (0) | 2018.12.08 |
백준 11723 집합 (0) | 2018.06.13 |