본문 바로가기

MySql

MySQL(07.15) - SHA-256, 암호화, 복호화, UUID(), Cache 데이터, 데이터 구조, Primary key, err

SHA-256

Secure Hash Algorithm의 약자로 256비트로 구성되어 이 알고리즘을 통해 암호화를 하면 2의 256승 만큼의 경우의 수를 표현할 수 있다. 문자열로는 64자리 문자열을 나타낸다.

  • 단방향 알고리즘 (복호화 되지 않는다.)
  • 같은 입력값에 대해 같은 출력값을 제공한다.
  • 연산 속도가 빠르다.
  • 안전성이 높다.

암호화

  • 평문을 암호문으로 변환하는 과정

복호화

  • 암호문을 평문으로 변환하는 과정

1. 단방향 암호화

  • 암호화는 수행하지만 절대로 복호화가 불가능하다.
  • Hash 함수는 임의의 길이의 데이터를 입력받아 일정한 길이의 비트열로 변환 시켜주는 함수로, 입력값의 길이가 달라도 출력값은 언제나 고정된 길이로 반환되며 동일한 값이 입력되면 언제나 동일한 출력값을 보장하는 함수를 의미

-> SHA

2. 양방향 암호화

  • 암호화 복호화가 모두 가능
  • 재사용성이 있는 정보는 암호화, 복호화 모두 이루어져야 한다.

대칭키(비공개키)
-> 암호화, 복호화에 사용하는 키가 동일한 암호화 방식
-> 공통키
-> 송수신자는 서로 공유된 대칭키를 가지고 통신

비대칭키(공개키)
-> 암호화, 복호화에 사용하는 키가 서로 다른 암호화 방식
-> 비대칭키 암호화에서는 송수신자 모두 한쌍의 키(개인키, 공개키)를 갖고있게 된다.


 

UUID()

  • UUID(Universally Unique IDentifier)란 네트워크 상에서 중복되지 않는 ID를 만들기 위한 표준 규약이다.
  • 많은 양의 테스트 데이터가 필요할 경우 사용한다.
INSERT INTO `member`
(regDate, loginId, loginPw, `name`)
SELECT NOW(), CONCAT("a", UUID()), '1234', '아무개'
FROM `member`;

 

 


캐시(Cache)

  • Cache는 자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다.

SQL_NO_CACHE

  • Cache는 사본으로 정확도가 떨어질 수 있기에 CACHE 데이터 사용안하고 정확한 데이터 사용시간 측정하기 위해 사용
  • SQL_NO_CACHE 활용해서 검색에 걸리는 시간을 측정한다.

 


 

데이터 구조

 

1.  선형 구조(Linear)

  • 선형 구조는 자료를 구성하는 원소들을 하나씩 순차적으로 나열시킨 형태
  • 자료들간의 앞, 뒤 관계가 1:1의 관계로 배열과 리스트가 대표적이며 스택과 큐도 해당

2.  비선형 구조 - 트리(tree) 

  • 하나의 자료 뒤에 여러개의 자료가 존재할 수 있는 형태

노드(Node) - 트리의 기본 요소로 자료를 의미
디그리(Degree) - 차수라고도 부리고, 각 노드에서 뻗어 나온 가지(Branch)의 수

단말 노드(Terminal Node) - 리프 노드(Leaf Node)라고도 하고, 자식 노드가 하나도 없는 노드를 의미 (degree가 0인 노드)

비단말 노드(Non-Terminal Node) - 특정 노드에서 루트 노드까지 이동할 때 경로상에 있는 노드들을 의미

자식 노드 - 특정 노드와 가지로 연결된 다음에 오는 노드들
부모 노드 - 상위 단계에 위치한 노드들 중 가지로 연결된 노드
형제 노드 - 동일한 부모를 갖는 노드들

primary key
-> not null, index, unique 포함
-> 이미 트리구조로 연결

 


 

EXPLAIN

EXPLAIN SELECT SQL_NO_CACHE *
FROM `member`
WHERE loginId = 'user1';
  • EXPLAIN은 MySQL 서버가 어떠한 쿼리를 실행할 것인가, 즉 실행 계획이 무엇인지 알고 싶을 때 사용하는 기본적인 명령어이다.

 


System.err.print

  • out 스트림은 print 구문이 있을 때마다 바로 콘솔에 메시지를 flush해서 출력하면 JVM 성능 상에 영향
  • err 스트림은 에러 상황과 같이 일반적이지 않은 상황에서의 출력을 의미하기 때문에 대부분 곧바로 출력된다고 한다.

코드 상에서 out과 err를 찍게될 경우 err가 먼저 찍힐 가능성이 더 크다.

  • err의 경우 파일로 출력하는 동작이 불가능