#오류에 대해 지적해 주시면 수정하겠습니다.

 

트랜잭션(Transaction)

- DB의 상태를 변환시키는 논리적인 기능을 하는 작업의 단위

- 트랜잭션의 단위는 더 이상 작아질 수 없는 최소의 단위

 

 

 

 

ACID

- Atomicity 원자성트랜잭션의 연산과정 모든 것이 DB에 반영되거나, 전혀 반영되지 않아야한다. (All or Nothing)

트랜잭션의 모든 명령은 완벽히 수행되어야 하고, 만약 실패할 경우 트랜잭션 전체를 롤백 시켜야 한다.

트랜잭션의 단위보다 더 작은 명령으로 나눌수 없다는 점을 빗대어 트랜잭션의 원자성이라 표현한다!

 

- Cosistency 일관성

트랜잭션 실행이 완료되어도 일관성 있는 DB상태가 되어 있어야 한다.

시스템의 고정요소는 트랜잭션 수행 전과 수행 완료 후 상태가 같아야 한다.

ex) 계좌 이체를 빗대어 봤을 때, 계좌 이체가 성공적으로 수행한다고 계좌번호 혹은 계좌주 명이 바뀌면 안된다(명시적)

ex) 계좌 이체가 수행 되었을 때, 계좌의 합이 같아야 하는 것(비명시적)

 

- Isolation 독립성, 고립성여러 트랜잭션이 동시에 수행되더라도, 각각의 트랜잭션이 다른 트랜잭션의 영향을 받지 않고, 주지 않아야 함.만약 이 조건이 성립되지 않는다면 완벽한 롤백이 되지 않는다. 고립성을 가장 완벽하게 지키는 방법은 순차적으로 트랜잭션을 수행하는 것이다.

 

- Durability 지속성트랜잭션이 성공적으로 완료되어 커밋이 되었다면, 해당 트랜잭션에 의한 변경사항은 소프트웨어에 장애가 생기더라도 유지되어야 한다.

 

 

 

 


 

 

 

동시성과 고립성의 관계

 

트랜잭션에서 가장 대립되는 두가지 성질이다. 위에서 설명한 ACID 특성을 지켜내기 위해서, 그중에서도 고립성을 완벽하게 지키려면 모든 트랜잭션을 순차적으로 진행해야 한다.

하지만 그러한 방법은 처리 속도가 느리다는 문제성이 발생한다. 이러한 문제를 해결하기 위해 DBMS는 격리 수준을 나누어 서비스 환경에 따라 고립 수준을 부여하도록 제공하고 있다.

속도가 더 중요하다면 격리 수준을 낮추고, 데이터의 무결성이 중요하다면 격리 수준을 높이는 식으로!

 

 

 

낮은 격리 수준에서 발생하는 고립성 문제

-Dirty Read

-NonRepeatable Read

-Phantom Read

 

 

 

 

-Dirty Read

하나의 트랜잭션이 커밋 되지 않았을 때, 다른 트랜잭션이 해당 트랜잭션의 중간 값을 읽어 오는 것을 말한다.

아래의 사진을 보면 Transaction_1이 아직 Commit이 되지 않았는데

Transaction_2에서 Commit되지 않은 Transaction_1의 값을 조회해갔다.

만약, Transaction_1이 결국 Commit되지 않고 Rollback이 된다면 Transaction_2는 잘못된 값으로 로직을 수행하게 된다.

 

 

 

 

-NonRepeatable Read

한 트랜잭션 내에 같은 키를 가진 Row를 두 번 불렀는데 키의 값에 UPDATE가 수행 되어,

두 번의 Select 결과가 다른 경우이다.

아래의 그림을 보면 Transaction_2가 두번의 Select를 수행하는 도중 Transaction_1이 키의 값을 변경함으로써

Transaction_2의 트랜잭션 도중 값이 변경되어 잘못된 결과값이 나올 수 있다.

 

 

-Phantom Read

Phantom. 환영(幻影), 또는 유령 등을 뜻하는 영어

한 트랜잭션 내에서 같은 쿼리를 두 번 수행했을때, 첫 쿼리에선 나오지 않은 것이 그 다음 쿼리가 나오는 사이 커밋 되어 다른 값으로 나오는 경우이다. 

아래의 경우를 보면 Transaction_1이 먼저 Insert를 수행하고 아직 Commit되지 않은 상태에서 Transaction_2가 조회를 해서 앞에 Insert를 한 결과를 포함하지 않은 결과가 나왔고, 이어서 한 조회에서는 Commit이후이기 때문에 아까는 없었던 값이 포함된 새로운 결과가 나왔다.

 

 

(+)

NonRepeatable Read와 Phantom Read의 차이점

NonRepeatable Read는 하나의 row에서 수행되지만 Phantom Read는 여러 개의 데이터를 읽을 때 일어나는 현상이다.

Phantom Read가 일어나는 쿼리문 예시) SELECT COUNT(*) FROM ~ , SELECT * FROM ~

 

 

 

 

 

 


 

 

 

격리수준(isolation level)

- Read Uncommitted

- Read Committed (Oracle default)

- Repeatable Read (MySQL InnoDB default)

- Serializable

 

 

- Read Uncommitted

가장 하위 레벨의 격리 수준으로 트랜잭션이 commit 되지 않은 데이터를 다른 트랜잭션이 읽을 수 있도록 허용한다.

 

발생 가능한 문제 :  Dirty-Read, Non-Repeatable Read, Phantom Read

 

 

- Read Committed

트랜잭션의 커밋이 확정된 데이터만 읽을 수 있게 허용한다.

아직 커밋이 되지않은 데이터지만 Undo 로그에서 이전 데이터를 가져오는 것이 가능하기 때문에 

실제 DB데이터가 아닌 저기서 들고 온다.

Dirty-Read는 혹시 모를 롤백의 경우에만 문제를 일으키기 때문에 해결 가능하나 나머지 고립성 문제는 그대로 존재하게 된다.

 

해결 가능한 문제 : Dirty-Read

발생 가능한 문제 : Non-Repeatable Read, Phantom Read

 

 

(오른쪽)해결 가능한 문제 (왼쪽)해결 불가능한 문제

 

 

- Repeatable Read

 

트랜잭션이 시작되기 전에 커밋된 내용에 대해서만 읽을 수 있도록 허용된다. 트랜잭션 도중 다른 트랜잭션이 커밋 되어도, 새로 커밋된 데이터는 보이지 않게 된다.

 

아래의 그림을 보면 Transaction_2가 수행되는 도중 Transaction_1이 Busan의 값을 Jeju로 변경했으나 Transaction_2는 해당 Transaction_1이 커밋을 완료 했음에도 Busan으로 출력되게 된다.

이처럼 Repeatable Read 격리 수준은 수행되는 시점을 기억해서 해당 트랜잭션이 완료될 때 까지 기억된 초기 시점 이전까지 커밋된 데이터만 조회 할 수 있도록 한다.

 

 

- Serializable

가장 높은 수준의 격리 수준으로 특정 트랜잭션이 수행중엔 해당 테이블에 다른 트랜잭션이 UPDATE, DELETE, INSERT를 못하게 막는다. 동시성이 가장 낮은 격리 수준이기 때문에 거의 사용하지 않는다고 한다.

 

 

 

 

 

 

 

'Database' 카테고리의 다른 글

[SQLD][1과목]데이터 모델과 성능  (0) 2021.09.02
[SQLD]SQL 기본 및 활용(2)  (1) 2021.08.31
[SQLD]SQL 기본 및 활용(1)  (0) 2021.08.27
[SQLD]데이터 모델링의 이해  (0) 2021.08.23

 

 

/* 문제설명 */

흑백 영상을 압축하여 표현하는 데이터 구조로 쿼드 트리(Quad Tree)라는 방법이 있다. 흰 점을 나타내는 0과 검은 점을 나타내는 1로만 이루어진 영상(2차원 배열)에서 같은 숫자의 점들이 한 곳에 많이 몰려있으면, 쿼드 트리에서는 이를 압축하여 간단히 표현할 수 있다.

주어진 영상이 모두 0으로만 되어 있으면 압축 결과는 "0"이 되고, 모두 1로만 되어 있으면 압축 결과는 "1"이 된다. 만약 0과 1이 섞여 있으면 전체를 한 번에 나타내지를 못하고, 왼쪽 위, 오른쪽 위, 왼쪽 아래, 오른쪽 아래, 이렇게 4개의 영상으로 나누어 압축하게 되며, 이 4개의 영역을 압축한 결과를 차례대로 괄호 안에 묶어서 표현한다

위 그림에서 왼쪽의 영상은 오른쪽의 배열과 같이 숫자로 주어지며, 이 영상을 쿼드 트리 구조를 이용하여 압축하면 "(0(0011)(0(0111)01)1)"로 표현된다.  N ×N 크기의 영상이 주어질 때, 이 영상을 압축한 결과를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1 ≤ N ≤ 64의 범위를 가진다. 두 번째 줄부터는 길이 N의 문자열이 N개 들어온다. 각 문자열은 0 또는 1의 숫자로 이루어져 있으며, 영상의 각 점들을 나타낸다.

출력

영상을 압축한 결과를 출력한다.

 

 

 


 

 

 

/* 풀이방법 */

첫번째 값만 저장해놓고 해당 사이즈만큼 전체를 순회하다가 첫번째 값과 다른 값이 발견되면

사이즈를 1/2로 줄이고, 현재지점을 x,y라 할때

 

1사분면 - (x,y)부터 줄여진 사이즈만큼 순회

2사분면 - (x,y+사이즈)부터 줄여진 사이즈 만큼 순회

3사분면 - (x+사이즈,y)부터 줄여진 사이즈 만큼 순회

4사분면 - (x+사이즈,y+사이즈)부터 줄여진 사이즈 만큼 순회

 

다음과 같이 재귀 호출 한다.

 

해당 사이즈만큼의 크기가 모두 같은 값이거나, 사이즈가 1이라면 해당 숫자를 프린트 한다.

 

 


 

/* 해답코드 */

package baekjoon;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

//쿼드트리
public class b1992 {
	public static String[][] map;
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());
		map = new String[N][N];
		for(int i=0;i<N;i++) {
			map[i]=br.readLine().split("");
		}		
		quadTree(N,0,0);
	}
	public static void quadTree(int size,int x,int y) {
		String start = map[x][y];
		if(size==1) {
			System.out.print(start);
			return;
		}
		
		for(int i=x;i<x+size;i++) {
			for(int j=y;j<y+size;j++) {
				if(!start.equals(map[i][j])) {
					size/=2;
					System.out.print("(");
					quadTree(size,x,y);
					quadTree(size,x,y+size);
					quadTree(size,x+size,y);
					quadTree(size,x+size,y+size);
					System.out.print(")");
					return;
				}
			}
		}
		System.out.print(start);
	}
	
}

 

'Coding Test > Baekjoon' 카테고리의 다른 글

[백준][1987]알파벳  (1) 2021.08.19
[백준][3109]빵집  (0) 2021.08.19
[백준][1074]Z  (0) 2021.08.17
[백준]선물 전달  (0) 2021.08.16
[백준]1,2,3 더하기  (0) 2021.08.14

 

 

/* 문제설명 */

http://jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=1101&sca=30

아래의 풀이는 문제에 있는 테스트 케이스를 기준으로 설명하였다!

 


 

 

 

/* 풀이방법 */

 

일단 음식을 입력받아 arr에 모두 추가했다.

정렬을 하기위해 Food class는 Comparable을 상속받았고

최소온도 오름차순, 같다면 최고온도 오름차순으로 비교되도록 compareTo메소드를 구현했다.

그럼 다음과 같이 정렬되어 있게 된다.

 

 

 

 

 

그리고 스택을 하나 만들어서 (이때 스택의 한 요소는 냉장고를 의미한다)

첫번째 음식을 푸쉬한다.

그러면 해당 이제 저 냉장고(스택의 요소)는

-15 ~ 5도 사이의 온도를 유지하는 냉장고라는 의미이다.

 

이제 그다음 부터 arr에 있는 모든 음식을 순서대로 돌면서 냉장고와 값을 비교하면 된다.

 

 

 

 

 

 

 

 

 

배열에 있는 두번째 값을 스택에 있는 냉장고와 비교한다.

최저 온도가 더 높은 것으로 변경하고, 최고 온도 또한 더 낮은것으로 변경한다.

(그래야 두 음식에게 모두 적합한 온도가 되니까)

 

그래서 스택의 냉장고의 온도는 다음과 같이 변하게 된다.

만약 해당 범위를 넘어서는 음식이 들어온다면 그 음식은 현재 냉장고에 추가할 수 없으므로 새로운 요소를 스택에 추가 시키고 범위를 그 음식의 범위로 한다.

 

 

 

 

 

3번째 음식]

 

 

 

[4번째 음식]

 

그래서 스택의 사이즈인 2개의 냉장고가 필요하다.

 

 

 


 

/* 해답코드 */

package jungol;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Stack;
import java.util.StringTokenizer;

class Food implements Comparable<Food>{
	public int low;
	public int high;
	public Food() {}
	public Food(int low, int high) {
		super();
		this.low = low;
		this.high = high;
	}
	@Override
	public int compareTo(Food o) {
		if(this.low == o.low)
			return this.high - o.high;
		return this.low - o.low;
	}
}

public class j1828 {
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = null;
		int N = Integer.parseInt(br.readLine());
		Food[] arr = new Food[N];
		Stack<Food> ref = new Stack<Food>();;
		
		for(int i=0;i<N;i++) {
			st = new StringTokenizer(br.readLine());
			int low = Integer.parseInt(st.nextToken());
			int high = Integer.parseInt(st.nextToken());  
			arr[i] =new Food(low,high);
		}
		Arrays.sort(arr);
		ref.push(arr[0]);
		for(int i=1;i<N;i++) {
			boolean contain = false;
			Food f = ref.pop();

			if(f.low<=arr[i].low&&f.high>=arr[i].low) {
				f.low = arr[i].low;
				contain = true;
			}
				
			if(f.high>=arr[i].high&&f.low<=arr[i].high) {
				f.high = arr[i].high;
				contain = true;
			}

			ref.push(f);
			if(!contain) {
				ref.push(arr[i]);
			}
		}
		System.out.println(ref.size());
		
	}
}

 

 

/* 문제설명 */

한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다.

만약, N > 1이 라서 왼쪽 위에 있는 칸이 하나가 아니라면, 배열을 크기가 2N-1 × 2N-1로 4등분 한 후에 재귀적으로 순서대로 방문한다.

다음 예는 22 × 22 크기의 배열을 방문한 순서이다.

N이 주어졌을 때, r행 c열을 몇 번째로 방문하는지 출력하는 프로그램을 작성하시오.

다음은 N=3일 때의 예이다.

입력

첫째 줄에 정수 N, r, c가 주어진다.

출력

r행 c열을 몇 번째로 방문했는지 출력한다.

 

 

 

 


 

 

 

/* 풀이방법 */

 

분할 정복방식으로 풀었다. Z모양 배열을 보면 아래와 같은 모양이 반복됨을 알 수 있다.

따라서 3행 1열에 있는 숫자를 구하고 싶다면,

처음 사이즈에서 3사분면 내의 4 사분면에 위치하고 있는 것이다.

따라서 while문안에 size를 나누기2 해가면서 탐색을 해갔다.

 

(+)

1사분면의 첫번째 값 = num의 변화 없음

2사분면의 첫번째 값 = num + ((현재사이즈/2) * (현재사이즈/2)) * 2

3사분면의 첫번째 값 = num + ((현재사이즈/2) * (현재사이즈/2)) * 3

4사분면의 첫번째 값 = num + ((현재사이즈/2) * (현재사이즈/2)) * 4

 

 

 


 

/* 해답코드 */

package baekjoon;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class b1074 {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int N = Integer.parseInt(st.nextToken());
		int r = Integer.parseInt(st.nextToken());
		int c = Integer.parseInt(st.nextToken());
		
		
		int size = (int)Math.pow(2, N);
		int cr = 0;
		int cc = 0;
		int num  =0;
		while(true) {
			if(cr==r&&cc==c) {
				break;
			}
			
			if(r<(size/2+cr)) {
				//2번
				if(c>=(size/2+cc)){
					num += Math.pow(size/2, 2);
					cc+=size/2;
				}
			}else {
				//3번
				if(c<(size/2+cc)) {
					num += Math.pow(size/2, 2)*2;
					cr+=size/2;
				}
				//4번
				else {
					num += Math.pow(size/2, 2)*3;
					cr+=size/2;
					cc+=size/2;
				}
			}			
			size = size/2;
		}
		
		System.out.println(num);
		
	}

}

'Coding Test > Baekjoon' 카테고리의 다른 글

[백준][3109]빵집  (0) 2021.08.19
[백준][1992]쿼드트리  (0) 2021.08.18
[백준]선물 전달  (0) 2021.08.16
[백준]1,2,3 더하기  (0) 2021.08.14
[백준]설탕배달  (0) 2021.08.14

데이터베이스 관리시스템 종류

1) 관계형 DBMS

컬럼과 로우로 이루어져있고, 하나 이상의 테이블로 이루어져 있으며, 고유키로 각 로우를 식별한다.

2) 객체지향 DBMS

관계형 DBMS와 다르게 객체 형태로 저장

3) 네트워크 DBMS
레코드들이 노드로, 레코드 사이 관계가 간선으로 표현되는 그래프 기반 데이터베이스 모델

4) 계층형 DBMS

트리 구조를 기반으로 하는 계층 데이터 베이스 모델

 

 

 


Data에 관련된 기술들

1) 개인정보 비식별 기술 : 데이터에서 개인을 식별할 수 있는 요소를 전부/일부를 삭제/대체하는 기술

  내용 예시
데이터마스킹 데이터의 길이나 형식등은 유지하면서 익명으로 생성 홍길동, 35세, 서울 거주, 한국대 재학
-> 홍**, 35세, 서울 거주, **대 재학
가명처리 이름을 다른 이름으로 변경하되 일정한 규칙이 노출되지 않게 한다. 홍길동, 35세, 서울 거주, 한국대 재학
-> 임꺽정, 30대, 서울 거주, 국내대 재학
총계처리 데이터의 총계를 보인다.  홍길동 180cm, 임꺽정 170cm, 이콩쥐 160cm
-> 키 합: 540cm, 키 평균: 170cm
데이터값 삭제 필요없는 값이나 개인 식별에 중요한 값을 삭제 홍길동, 35세, 서울 거주, 한국대 재학
-> 35세, 서울 거주
데이터 범주화 데이터 값을 범주의 값으로 대체 홍길동, 35세 -> 홍씨, 30-30세

2) 무결성(Data integrity)과 레이크(Data Lake)

데이터 무결성 - 개체 무결성, 참조 무결성, 범위 무결성

          데이터 변경,수정시 여러 제한을 두어 데이터의 정확성을 보증

데이터 레이크 - 수많은 정보에서 의미있는 내용을 찾기위해 방식에 상관없이 데이터를 저장하는 시스템

 

 

 


빅데이터 분석 기술

1) 하둡(Hadoop)

하둡은 여러 개의 컴퓨터를 하나인 것처럼 묶어 대용량 데이터를 처리하는 기술이다. 분산 파일 시스템을 통해 수 천대의 장비에 대용량 파일을 저장 할 수 있는 기능을 제공하고 맵 리듀스로 분산 파일 시스템에 저장된 대용량의 데이터들을 대상으로 SQL을 사용해 사용자의 질의를 실시간으로 처리한다.

2) Apache Spark

실시간 분산형 컴퓨팅 플랫폼으로 스칼라로 작성 되어있으나 스칼라, 자바, R, 파이썬 api를 지원

In-Memory방식을 사용하기 때문에 하둡보다 속도가 빠르다.

3) Smart Factory

공장 내 설비에 사물인터넷이 설치되어, 데이터가 실시간 수집되고 그 데이터에 기반한 의사결정을 한다.

4) Machine Learning & Deep Learning

인공신경망(ANN)을 기반으로 구축한 기계 학습중 하나

 

B2B와 B2C

B2B - 기업과 기업 사이의 거래를 기반으로 한 비즈니스 모델을 의미

B2C - 기업과 고객 사이의 거래를 기반으로 한 비즈니스 모델을 의미 ex) 이동통신사, 여행회사, 신용카드 회사

 

블록체인

  • 블록체인 : 거래정보를 하나의 덩어리로 보고 이를 차례로 연결한 거래 장부
  • 기존의 금융회사의 경우 중앙 집중형 서버에 거래 기록을 보관하는 반면, 블록체인은 거래에 참여하는 모든 사용자에게 거래 내역을 보내 주며 거래 때마다 이를 대조해 데이터 위조를 막는 방식을 사용

 

 


References

2021 ADsP 데이터 분석 준전문가, 윤종식 저

https://www.youtube.com/c/EduAtoZPython/videos

 

EduAtoZ - Programming

An extreme programming education channel

www.youtube.com

 

1절. 분석 기획 방향성 도출

분석 기획의 특징

1) 분석 기획 : 실제 분석을 수행하기에 앞서 분석을 수행할 과제를 정의하고, 의도했던 결과를 도출할 수 있도록 이를 적절하게 관리할 수 있는 방안을 사전에 계획하는 일련의 작업

2) 데이터 사이언티스트의 역량 : 수학/통계학적 지식, 정보기술, 비즈니스에 대한 이해와 전문성

 

 

분석 대상과 방법

분석의 대상(What)분석의 방법(How)에 따라 4가지로 분류

분석 주제 유형 분석의 대상(What)
Known Un-known
분석의 방법(How) Known Optimization Insight
Un-known Solution Discovery

 

 

 


 

 

 

 

목표 시점 별 분석 기획 방안

  과제 중심적인 접근 방식 장기적인 마스터 플랜 방식
1차목표 Speed&Test Accuracy&Deploy
과제의 유형 Quick&Win Long Term View
접근 방식 Problem Solving Problem Definition

(+)Quick-Win? 즉각적인 실행을 통한 성과 도출

   프로세스 진행 과정에서 일반적인 상식과 경험으로 원인이 명백한 경우 바로 개선함으로써 과제를 단기로 달성,추진

 

 

 

분석 기획 시 고려사항

- 분석의 기본인 가용 데이터에 대한 고려가 필요

데이터의 유형 분석이 선행적으로 이루어져야함 (정형인지, 반정형인지, 비정형인지)

- 분석을 통해 가치가 창출될 수 있는 적절한 활용방안과 유즈케이스 탐색이 필요

- 분석 수행시 발생하는 장애요소들에 대한 사전계획 수립이 필요

- 일회성 분석에 그치지 않고 조직 역량 내재화를 하기 위해선, 충분하고 계속적인 교육 및 활용방안 등의 변화 관리 고    려 해야함!

 

 

(+)

데이터 유형

종류 정형 데이터 반정형 데이터 비정형 데이터
특징 데이터 자체로 분석 가능
RDB구조의 데이터
데이터베이스로 관리
데이터로 분석이 가능하지만 해석이 불가능하며 메타정보를 활용해야 해석 가능 데이터 자체로 분석이 불가능특정 프로세스를 거쳐 분석데이터로 변경 후 분석
유형 ERP, CRM, SCM 로그데이터, 모바일데이터 파일형태, 영상, 음성, 문자

 

데이터 저장 방식

종류  RDB NoSQL 분산파일시스템
특징 관계형 데이터를 저장, 수정, 관리할 수 있게 해주는 데이터 베이스 비관계형 데이터 저장소 분산된 서버의 디스크에 파일 저장
유형 Oracle, MSSQL, MySQL MongoDB, Cassandra, Hbase, Redis HDFS

 

 

 


 

 

2절. 분석 방법론1

분석 방법론의 필요성

데이터 분석을 효과적으로 기업에 정착하기 위해 데이터 분석을 체계화하는 절차와 방법이 정리되 ㄴ데이터 분석 방법론 수립이 필요

 

 

분석방법론의 구성요소

- 상세한 절차

- 방법

- 도구와 기법

- 템플릿과 산출물

 

 

기업의 합리적 의사결정을 가로막는 장애요소

- 고정관념(Stereotype)

- 편향된 생각(Bias)

- 프레이밍 효과(Framing Effect) > 문제의 표현 방식에 따라 동일한 사건이나 상황임에도 불구하고

개인의 판단이나 선 택이 달라질 수 있는 현상

 

 

방법론의 적용 업무의 특성에 따른 모델

- 폭포수 모델(Waterfall Model) 

   단계를 순차적으로 진행하는 방법으로 이전 단계가 완료 되어야 다음 단계 진행 가능한 하향식 진행

   문제점이 발견되면 전단계로 돌아가는 피드백 수행

 

- 프로토타입 모델(Prototype Model)

   사용자의 요구사항이나 데이터를 정확히 규정하기 어렵고 데이터 소스도 명확하게 파악하기 힘들때 사용

   고객의 요구가 맞는지 확인을 위해 일부분은 우선 개발 후 그 결과를 통한 개선작업

   신속하게 해결책 모형제시, 상향식 접근

 

- 나선형 모델(Spiral Model)

   반복을 통해 점증적으로 개발하는 방법

   반복에 대한 관리 체계가 효과적으로 갖춰지지 못한 경우 복잡도가 상승하여 진행이 어려울 수 있다.

 

 

 


 

 

 

2절. 분석 방법론2

KDD 분석 방법론

Knowledge Discovery in Databases

데이터베이스로부터 통계적 패턴이나 지식을 찾기 위해 활용할 수 있도록 체계적으로 정리한 데이터 마이닝 프로세스

 

 

KDD 분석 절차

1) Selection - 데이터셋 선택

비즈니스 도메인에 대한 이해와 프로젝트 목표 설정을 먼저 하고, 목표데이터를 구성

 

2) Preprocessing - 데이터 전처리

앞에 데이터 셋에서 잡음, 이상치, 결측치 식별 및 처리

 

3) Transformation - 데이터 변환

정제된 데이터를 목적에 맞게 차원 축소 + 학습용 데이터, 검증용 데이터로 분리

 

4) DataMining - 데이터 마이닝

목적에 맞는 데이터 마이팅 기법을 선택하고 실행, 필요하다면 전처리와 변환 과정을 추가로 가진다.

 

5) Interpretation/Evaluation - 데이터 마이닝 결과 평가

결과에 대한 해석과 평가, 분석 목적과의 일치성 확인

 

 

 


 

 

전통적인 분석 방법론

CRISP-DM 분석 방법론

1996년 유럽 연합에서 있었던 프로젝트에서 시작되었으며, 주요한 5개 업체들(Daimler-Chrysler, SPSS, NCR, Teradata, OHRA)이 주도. 계층적 프로세스 모델로서 4개의 레벨로 구성

 

 

CRISP-DM의 4레벨 구조

최상위 레벨은 여러 개의 단계(Phases)로 구성되고, 각 단계는 일반화 테스트(Generic Tasks)를 포함한다.

일반화 테스크는 데이터 마이닝의 단일 프로세스를 완전하게 수행하는 단위이고 여러개의 세분화 테스크로 구성된다.

데이터 정제라는 일반화 테스크는 범주형 데이터 정제와 연속형 데이터 정제와 같은 세분화 테스크로 구성된다.

프로세스 실행은 데이터마이닝을 위한 구체적인 실행을 포함한다.

 

 

 

CRISP-DM의 프로세스

총 6단계로 구성되어 있다. 각 단계는 단방향으로 구성되어있지 않고, 단계 간 피드백을 통해 완성도를 높임.

 

 

1) Business Understanding 업무이해

-프로젝트의 목적과 요구사항 이해, 문제정의

업무 목적 파악 -> 상황 파악 -> 데이터 마이닝 목표 설정 -> 프로젝트 계획 수립

 

2) Data Understanding 데이터 이해

-데이터 수집 및 속성을 이해, 숨겨진 인사이트 발견

초기 데이터 수집, 데이터 기술 분석, 데이터 탐색, 데이터 품질 확인

 

3) Data Preparation 데이터 준비

-데이터 셋 선택 및 데이터 정제, 데이터셋 편성(KDD에서 데이터 전처리랑 비슷)

 

4) Modeling 모델링

-모델링 기법 사용, 최적화, 모델 평가

 

5) Evaluation 평가

-모델링 결과가 프로젝트 목적에 부합하는지 평가, 모델링 과정 평가, 모델 적용성 평가

 

6) Deployment 전개

-완성된 모델을 실 업무에 적용하기 위한 계획 수립, 유지보수 계획

 

 

 


 

 

 

빅데이터 분석 방법론

빅데이터 분석의 계층적 프로세스

1) 단계(Phase) : 프로세스 그룹을 통해서 완성된 단계별 산출물 생성, 기준선, 버전관리

2) 테스크(Task) : 단계를 구성하는 단위

3) 스텝(step) : WBS의 워크 패키지에 해당

 

 

빅데이터 분석 방법론의 5단계

1) 분석 기획

비즈니스 이해 및 범위 설정 분석 대상인 업무 도메인을 이해하기 위해 내부 업무 매뉴얼과 관련 자료, 외부의 관련 비즈니스 자료 조사 및 프로젝트 진행을 위한 방향 설정

프로젝트 목적에 부합하는 범위를 명확하게 설정,
구조화된 프로젝트 범위 정의서 SOW(Statement of Work)를 작성
프로젝트 정의 및 계획 수립 상세 프로젝트 정의서 작성
프로젝트 수행 계획서 작성, 프로젝트 목적, 배경, 기대효과, 추진조직 WBS작성
WBS : Work Breakdown structure, 작업 분할 구조도
프로젝트 위험 계획 수립 데이터 분석 위험 식별
위험에 대한 대응 방법 : 회피, 전이, 완화, 수용

 

2) 데이터 준비

데이터 정의 정형, 비정형, 반정형 등의 모든 내/외부 데이터를 포함하고 데이터의 속성, 데이터 오너, 데이터 관련 시스템 담당자 등을 포함하는 데이터 정의서 작성
ex) 메타데이터 정의서 ,ERD 포함

데이터 획득 방안 수립
내부데이터 : 부서 간 업무 협조와 개인정보보호 및 정보 보안과 관련한 문제점을 사전에 점검
외부데이터 : 시스템 간 다양한 인터페이스 및 법적인 문제점을 고려하여 상세한 계획 수립
데이터 스토어 설계 정형데이터 스토어 설계
관계형 데이터베이스(RDBMS)를 사용하고, 데이터의 효율적 저장과 활용을 위해 데이터 스토어의 논리적 물리적 설게를 구분하여 설계함

비정형데이터 스토어 설계
하둡, NoSQL 등을 이용하여 비정형 또는 반정형 데이터를 저장하기 위한 논리, 물리적 데이터 스토어 설계
데이터 수집 및 정합성 점검 크롤링 등의 데이터 수집을 위한 ETL 등의 다양한 도구와 API, 스크립트 프로그램 등으로 데이터를 수집
수집된 데이터를 설계된 데이터 스토어에 저장
ETL : 다양한 데이터를 취합해 추출하고 변환해서 적재하는 과정을 지원하는 도구

데이터 정합성(무결성) 점검
데이터 스토어의 품질 점검을 통해 데이터 정합성 확보

 

3) 데이터 분석

분석용 데이터 준비 > 텍스트 분석 > 탐색적 분석 > 모델링 > 모델 평가 및 검증

 

4) 시스템 구현

-설계 및 구현, 시스템 테스트 및 운영

 

5) 평가 및 전개

-모델 발전계획 수립, 프로젝트 평가 및 보고

 

 

 

 

 

 


References

2021 ADsP 데이터 분석 준전문가, 윤종식 저

https://www.youtube.com/c/EduAtoZPython/videos

 

EduAtoZ - Programming

An extreme programming education channel

www.youtube.com

 

/* 문제설명 */

이번 ACM-ICPC 대회에 참가한 모든 사람들은 선물을 하나씩 준비했다.

대회가 끝나고 난 후에 각자 선물을 전달하려고 할 때, 선물을 나누는 경우의 수를 구하는 프로그램을 작성하시오.

모든 사람은 선물은 하나씩 받으며, 자기의 선물을 자기가 받는 경우는 없다.

입력

첫째 줄에 ACM-ICPC 대회에 참가한 학생의 수 N(1≤N≤1,000,000)이 주어진다.

출력

경우의 수를 1,000,000,000으로 나눈 나머지를 첫째 줄에 출력한다.

 

 

 

 


 

 

 

/* 풀이방법 */

 

 

완전순열


 

/* 해답코드 */

package baekjoon;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class b1947 {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());
		int[] M = new int[1000001];
		int answer = 0;
		if(N==1) {
			answer=0;
		}else if(N==2) {
			answer=1;
		}else {
			M[1] = 0;
			M[2] = 1;
			for(int i =3;i<=N;i++) {
				long temp = ((long)(i-1) * ((M[i-1] + M[i-2])))%1000000000;
				M[i] = (int)temp;
			}
			answer = M[N];
		}
		
		
		System.out.println(answer);
	}
}

'Coding Test > Baekjoon' 카테고리의 다른 글

[백준][1992]쿼드트리  (0) 2021.08.18
[백준][1074]Z  (0) 2021.08.17
[백준]1,2,3 더하기  (0) 2021.08.14
[백준]설탕배달  (0) 2021.08.14
[백준]개미  (0) 2021.08.08

#오류에 대해 지적해 주시면 수정하겠습니다.

 

JDK

JDK = JRE + 개발툴( ex. apt, appletviewer, javac, javap, jar, jdb )

 

개발툴 중 대표적으로 javac를 보자면 Java코드를 컴파일 하는 친구이다. 아래 그림처럼 Java코드를 byte코드로 컴파일한다.

 

•apt : 어노테이션 툴

•appletviewer : 웹브라우저 없이 자바 애플릿을 실행하고 디버깅하기 위한 툴

•javac : 자바 컴파일러. 자바 소스파일을 바이트코드로 변환

•java : javac가 만든 클래스 파일을 해석 및 실행

•jar : 서로 관련있는 클래스 라이브러리들과 리소스를 하나의 파일로 묶어주는 툴

•jdb : 자바 디버깅 툴

 

 

 

 

 

JDK의 종류

  1. Java SE(Standard Edition) 
    Java가 어떠한 문법적인 구성을 가졌는지와 같은 것들을 나타내는 명세표
    네트워킹,보안,그래픽 사용자 인터페이스 개발,XML파싱,데이터베이스 등을 지원
  2. Java EE(Enterprise Edition)
    Java SE + 서버에서 동작하는 기능
    추가적으로 웹프로그래밍에 필요한 JSP, Servlet, JDBC 등의 기능을 제공
  3. Java ME(Micro Edition)
    Java SE + 휴대전화,PDA에서 java 프로그래밍 지원

 

 

 


 

 

JRE

JRE = JVM + Java Class Library

 

Java Class Library는 런타임시 클래스 로딩이 발생하는데 그때 참조하는 class들이 모여있는 도서관이다.

Class Loader의 위치에 대한 고찰은 Class Loading에 대해서 다룰때 더 자세히 언급하겠다. 일단은 JVM에 포함 시켰다.

 

 

 

 


 

 

JVM

다른 언어는 OS의 종류에 따라, CPU아키텍처에 따라 동작안한다. 그니까 컴파일한 환경이랑 그 프로그램을 실제 동작시킬 환경이랑 다르면 동작이 안할 수도 있다는 뜻이다. 따라서 컴파일 된 코드를 어디서나 실행 될 수 있도록 하기위해 탄생한게 JVM이다.

 

 

 

 

JVM의 구성요소

JVM은 크게 Class Loader, Execution Engine, Runtime Data Areas로 나누어져 있다.

Class Loader Subsystem – 로드, 링크 및 초기화 담당, 동적 클래스 로드라고도 함
  (클래스로더 편에서 자세히 다룰예정)

Runtime Data Areas method areas, PC registers, stack areas,  threads.

  (JVM의 메모리 구조편에서 자세히 다룰 예정)

Execution Engineinterpreter,  compiler ,  garbage collection area.

  (JVM의 메모리 구조편과 GC편에서 자세히 다룰 예정)

 

 

 

 

JVM의 특징

1. 스택 기반의 가상머신

2. 심볼릭 레퍼런스

3. 가비지 컬렉션

4. 기본 자료형을 명확하게 정의하여 플랫폼 독립성 보장

5. 네트워크 바이트 오더(network byte order)

 

이들 중 가비지 컬렉션은 GC편에서 자세히 보도록 하고, 1,2,5번을 중점으로 보겠다.

 

스택 기반의 가상머신?

일단 스택 기반과 대조되는 레지스터 기반 가상머신을 보겠다.

5 + 30 + 40 을 계산한다고 하면, CPU의 덧셈 연산은 2개의 피연산자를 다루므로 5 + 30 를 계산한 결과를 40 과 더해야만 한다. 레지스터 기반의 VM은 피연산자를 레지스터에서 가져와서 계산하고, 결과를 다시 레지스터에 저장한다.

, 레지스터 기반의 VM은 피연산자를 레지스터에서 가져와서 계산한 뒤 다시 레지스터에 저장한다. 레지스터 기반의 VM의 장단점은 다음과 같다.

명령어의 수가 적고 스택을 사용하지 않아 스택에 대한 오버헤드가 없으나 명령어의 크기가 커지고, 명령어에 오퍼란드를 명시해야 하므로 명령어가 길어진다.

 

레지스터 기반 가상머신

 

 

이번에는 스택 기반 가상머신을 보겠다.

13 + 20 + 7 을 계산한다고 하자. CPU의 덧셈 연산은 2개의 피연산자를 다루므로 20 + 7 를 계산한 결과를 13 과 더해야만 한다. 스택 기반의 VM은 이 결과를 바로 스택에 저장한다. 위 그림을 보면, 207을 더하기 위해서 두 피연산자를 스택에서 꺼낸다. 꺼낸 결과를 가지고 계산한 뒤에 다시 결과를 스택에 넣는 것을 알 수 있다.

, 스택 기반의 VM은 피연산자를 저장하고 가져올 때 스택을 활용한다. 스택 기반의 VM의 장단점은 아래와 같다.

이러한 스택 기반의 VM은 명령어의 수가 많아지고 오버헤드에 대한 위험성이 존재한다.

 

하지만 그럼에도 JVM스택기반을 쓰는 이유는 JVM의 모토가 WORA이기 때문이 아닐까.

레지스터 기반의 가상머신은 CPU내의 레지스터에 저장하기 때문에 하드웨어 의존적이 되기 쉽다. 예를들면 레지스터 개수나, 레지스터의 사이즈 같은 것들이 있다.

 

 

스택 기반 가상머신

 

 

 

심볼릭 레퍼런스?

아까 말한것처럼 .java를 컴파일해서 만들어진 파일이 .class파일이다.

컴파일 된 바이트코드를 javap를 사용해 역 어셈블리화해보면 아래와 같다. 이러한 결과물을 자바 어셈블리라고 부른다.

위에서 다섯번째 줄에있는 5: invokevirtual #23; 를 보자.

Invokevirtual은 메서드를 호출하는 대표적인 명령어다. 그밖에도 아래와 같은 것들이 있다.

 

•invokeinterface: 인터페이스 메서드 호출

•invokespecial: 생성자, private 메서드, 슈퍼 클래스의 메서드 호출

•invokestatic: static 메서드 호출

•invokevirtual: 인스턴스 메서드 호출

 

자바 바이트코드의 명령어는 OpCode와 피연산자(Operand)로 분리할 수 있으며, invokevirtual과 같은 OpCode는 2바이트의 피연산자를 필요로 한다. 당연히 무언가를 호출하는 명령어니까 피연산자가 필요하다.

그니까 5: invokevirtual #23; 를 해석해보면, 코드앞에 숫자 (지금같은경우는 5)는 바이트번호이고 뒤에 #23은 피연산자이다. 그니까 23번에 해당하는 인스턴스 메서드를 호출하라는 뜻인 것이다.

 

 

 

 

 

 

JVM을 거치면서 .class파일은 실행가능한 형태로 바뀌게 되는데 이때 JVM에서 실행가능한 형태로 바뀌는 과정을 Linking이라 부른다. 이처럼 .class파일은 그때그때 Link를 할 수 있도록 Symbolic Reference만을 가지고 있다.

이러한 Linking필요할때마다 동적으로 이루어지기 때문에 Dynamic Linking이라 부르게 되었다.

이 다이나믹 링킹 기술 덕분에 class의 크기를 작게 유지할 수 있었고 Network를 통해 배포하는데 유리하다.

 

Class파일의 4가지 특징

1. Compact한 형태

2. Bytecode로의 변경

3. Platform 독립적

4. 네트워크 바이트 오더(network byte order)

 

 

 

 

 

 

 

네트워크 바이트 오더?

일단 네트워크 바이트 오더를 말하기전에 엔디안(Endian)이라는 말을 알아야한다.

엔디안이라는 말은 걸리버 여행기에서 소인국 릴리퍼트 이야기에서 달걀을 깰때 뭉뚝한 끝을 먼저 깨는 사람들, 뾰족한 끝을 먼저 깨는 사람들 사이에 싸운거에서 따온거라고 한다.

마치 한국의 부먹 찍먹같은거 인가보다. 마찬가지로 빅 엔디안과 리틀 엔디안 중 무엇을 쓰는지에 대해 논란이 있는편이라고 한다.

 

 

 

 

 

일단 컴퓨터는 1Byte단위로 읽기 때문에 bit를 읽는 순서는 변하지 않는다.

하지만 Byte를 읽는 순서는 CPU마다 차이가 있다고 한다. 그러므로 바이트 오더는 바이트를 읽는 순서를 의미한다.

바이트 오더는 빅 에디안 방식과 리틀 에디안 방식으로 나뉘는데 각각

 

빅 에디안 방식은 상위비트 -> 하위비트 순으로,

리틀 에디안 방식은 하위비트 -> 상위비트 순으로, 읽는다.

 

자바 클래스 파일은 네트워크 전송 시에 사용하는 바이트 오더인 네트워크 바이트 오더를 사용한다.

네트워크 바이트 오더는 빅 엔디안이다. 이러한 사실은 JAVA 설계될때부터 Network를 고려했음을 알게 해준다. 

 

 

 

 

 

 

전략 도출 가치 기반 분석

전략적 통찰력의 창출에 포커스

- 해당 사업에 중요한 기회를 발굴하고 주요 경영진의 지원을 얻게 된다.

 

분석의 활용 범위를 더 넓고 전략적으로 변화시키고 , 전략적 인사이트를 주는 가치기반의 분석 단계로 나아가야 함.

 

데이터 사이언스란?

데이터 공학, 수학, 통계학, 컴퓨터공학, 시각화, 해커의 사고방식, 해당 분야의 전문 지식을 종합한 학문

 

데이터 사이언스의 구성요소

1) 데이터 사이언스의 영역

분석적 영역 - 수학, 확률모델, 머신러닝, 분석학, 패턴 인식과 학습, 불확실성 모델링

데이터 처리와 관련된 IT영역 - 시그널 프로세싱, 프로그래밍, 데이터 엔지니어링, 데이터 웨어하우스

비즈니스 컨설팅 영역 - 커뮤니케이션, 프레젠테이션, 스토리텔링, 시각화

 

2) 데이터 사이언티스트의 요구 역량

Hard Skill - 빅데이터에 대한 이론적 지식, 분석 기술에 대한 숙련

Soft Skill - 통찰력 있는 분석, 설득력 있는 전달, 다분야간 협력(커뮤니케이션)

 

 

빅데이터가 만들어 내는 변화

  • 사전처리 -> 사후처리
  • 표본조사 -> 전수조사
  • 질 -> 양
  • 인과관계 -> 상관관계

 

빅데이터의 위기 요인과 통제 방안

- 사생활 침해 -> 동의에서 책임으로

개인정보가 포함된 데이터를 목적 이외의 용도로 사용할 경우 사생활침해를 넘어 사회, 경제적 위협으로 변형될 수 있다.

예시 : 여행 사실을 트위터로 알아내 그 집을 턴다.

   

- 책임 원칙 훼손 -> 결과 기반 책임 원칙 고수

빅데이터 기본분석과 예측기술이 발전하면서 정확도가 증가한만큼, 분석 대상이 되는 사람들은 예측 알고리즘의 희생 양이 될 확률이 증가한다. 민주주의 국가에서는 잠재적 위협이아닌 명확한 결과에 대한 책임을 묻고 있어 이에 따른 원리를 훼손할 가능성이 있다.

예시 : 범죄 예측 프로그램을 통해 아직 범죄를 안일으켰는데 대출 거절당함.

 

- 데이터 오용 -> 알고리즘 접근 허용

빅데이터는 일어난 일에 대한 데이터에 의존하기 때문에 이를 바탕으로 미래를 예측하는 것은 항상 맞을순 없다. 또한 잘못된 지표를 활용하게 되기도 쉽다.

 

 

+ Recent posts