분류 전체보기 250

[데이터베이스] 동시 실행 제어 (Concurrency Control)와 공유 lock, 배타적 lock에 대해서

동시 실행 제어1. 락에 대해서 Lock - Based Protocol Lock이란 자원에 액세스하는 환경에서 순차적으로 제어할 수 있는 매커니즘이다. lock은 2가지로 분류할 수 있다. 1) Exclusive Lock : (X mode) 배타적 Lock은 여러 트랜잭션이 한 데이터에 접근할 수 없다. 2) Shared Lock : (S mode) 공유 락은 읽기 동안에만 일어나며 여러 트랜잭션이 동시에 한 데이터를 읽을 수 있다. Shared lock 끼리는 충돌하지 않는다. 하지만 Exclusive Lock과는 호환되지 않는다. 예를 보면 처음에 A 는 $100 B는 $200 을 가지고 있는데 B가 A에게 $50을 보내는 시나리오이다. T1이 자원 B에게 쓰기 위해서 배타적 락을 건다. B-50을 ..

[데이터베이스] 트랜잭션(Transaction)에대한 고찰

데이터베이스 트랜잭션데이터베이스 트랜잭션이란 데이터베이스의 상태를 변화시키는 프로그램의 작업 단위이다. 1. SQL 표준에서의 Transaction제일 첫 번째 SQL 문이 자동으로 Transaction 의 시작Commit을 호출하면 트랜잭션 종료Rollback을 호출하면 트랜잭션 취소AutoCommit 모드일 경우 SQL 문장 하나 단위로 Transaction 2. Transaction의 성질 (ACID) 2-1. 원자성 (Atomicity)트랜잭션의 작업들이 모두 수행되거나 전혀 수행되지 않아야 한다.. (all or nothing)트랜잭션이 부분적으로 수행된다면 데이터베이스에 반영되지 않아야 한다. 그렇지않다면 데이터베이스의 상태가 inconsistent해진다. 2-2. 지속성 (Durability..

[데이터베이스] 쿼리 최적화에 대해서 (Query Optimization)

데이터베이스 쿼리 최적화에 대해서두 개의 relational algebra 표현식이 데이터베이스 인스턴스에서 항상 같은 튜플들을 반환한다면 그것은 동등(equivalent)하다고 한다. (순서는 상관 없음) 참고) 스키마 : 데이터베이스의 논리적 구조, 인스턴스 : 특정시간에 사진을 찍었을 때 그 테이블의 모습. 즉 튜플들의 전체적인 모습 Equivalence Rules이 중에 대표적인 것들을 보자. 1. 네추럴 조인 (Natural Join)은 associative(동일)하다. 2. select연산의 동등성테이블 E1과 E2는 각각 1000개의 튜플을 가지고 있다고 하자. (조건은 세타제로 조건을 만족하는 것은 10개밖에 없다고 가정하자)왼쪽 식에서는 먼저 조인을 시도 한다. 각각 1000개니까 조인하..

[컴퓨터 보안] PGP (Pretty Good Privacy)와 Kerberos (커버로스)

PGP (Pretty Good Privacy)PGP는 인터넷 전자우편을 암호화하고 복호화하는데 사용된다. Phil Zimmermann이라는 사람이 개발을 했는데 개발 후에 이 사람이 수출을 시도하려다 미국에 저지 당하게 된다. 하지만 결국 빼냈고 나중에 와서는 공개로 바뀌었다. 지금 보면 이것은 굉장히 멋진 아이디어라고 생각한다. 그 당시 이것이 왜 국가기밀이었는지 실감이 날 정도이다. 이런 천재적 발상을 한 개발자가 존경스럽다. 왼쪽은 Alice 오른쪽은 Bob이란 친구다. Alice는 Bob에게 기밀성을 유지하는 이메일을 보내고 싶어한다. Alice의 입장먼저 Alice는 Ks라는 대칭키를 제작한다. (이것을 Bob과 안전하게 나눠갖는 것이 목적)보내려는 메세지 m 을 Alice가 제작한 대칭키 Ks..

[컴퓨터보안] 해시 (Hash Function) 함수 보안

Hash Function임의의 긴 입력값을 적절하게 처리하여 짧은 값을 출력하는 함수.암호학에서 사용하는 해쉬 함수 : 메세지 서명, 인증, 무결성 등에 사용.디지털 서명과 결합되어 메세지 무결성을 제공하는데 효율적이다.매핑된 해시 값으로는 원래 값을 알아내기 힘들다는 것에 착안하였다. 생활 속의 Hash function ??은행 현금인출기, 신용카드 확인, 주민번호, 휴대폰 명의, 생년월일, 성인 인증 등비밀번호 분실시 휴대폰으로 인증번호를 받는 경우. 인증번호는 항상 다름 (hash function으로 생성)압축 오류 검사, 파일 다운로드 오류 검사 해쉬 함수 과정 밑에 그림이 전자 서명을 하는 과정을 간략히 나타낸 것이다. 메세지를 Hash를 돌려서(무결성, integrity) 저 체크무늬 박스가 ..

[컴퓨터보안] El Gamal (엘가말) 과 Diffie - Hellman (디피헬만) 프로토콜

El Gamal (엘 가말) RSA 알고리즘은 소인수분해가 어렵다는 점을 이용하였고 El Gamal은 이산대수의 어려움을 이용하였다. 큰 소수 p를 정하고 p보다 작은 임의의 g,x를 선택한다. 방법 :Y = g^x mod p 를 계산한다. 공개키 : Y, p, g 가 되고 비밀키 : x 가 된다.p-1과 relative prime 한 임의의 k를 정한다.암호화는 a = g^k mod p , b = M*Y^k mod p 인 (a,b)를 정한다. (M은 암호화할 값)복호화는 b/a^x mod p = y^k*M/a^x mod p = M특징은 k를 임의로 설정하기 때문에 동일한 M에 대해 매번 다르게 암호화 된다. (RSA와의 차이점) 그리고 Ciphertext는 원래 M 길이의 2배가 된다. Diffie -..

[Java] 추상클래스(Abstract Class)와 인터페이스(Interface)에 대한 고찰

추상 클래스(Abstract Class)란 미완성 설계도라고 할 수 있다. 자동차에 비유하면 완성되지 않은 자동차라고 할 수 있다. 차체만 있고 아직 바퀴를 달지 않은 그 상태를 미완성이라고 할 수 있다. 바퀴가 없으면 달릴수가 없으니 이것은 자동차라고 아직은 말 할 수가 없다. 마찬가지로 추상 클래스는 객체를 생성할 수 없다. (즉, 바퀴를 달게 하지 않은 설계도로는 자동차를 만들 수 없다.) 추상클래스의 선언은 class 앞에 abstract를 붙이면 된다. 그리고 추상 클래스는 추상메서드를 포함하고 있고 여느 클래스와 마찬가지로 생성자와 멤버변수도 가질 수 있다. 여기서 인터페이스(interface)와 비교를 해보자. 인터페이스는 추상 클래스에서 더 추상화 된 것이다. 그래서 모든 메서드는 publ..

[Java] 람다(Lamda)식과 함수형 인터페이스 (Functional Interface)

람다식 (Lamda Expression)JDK 1.8 부터 추가된 람다 식은 많은 변화를 가져다 주었다. 람다식이란 메서드를 하나의 식으로 표현해주는 간편한 기능이다. 예를들어, 123456789int max(int a, int b) { return a > b ? a : b;} (int a, int b) -> { return a > b ? a : b ;} (int a, int b) -> a > b ? a : b (a, b) -> a > b ? a : bcs 위의 max함수를 람다식으로 표현하면 밑에 3가지가 될 수 있다. 람다식에 선언된 매개변수는 추론이 가능한 경우 생략할 수 있다고 한다. 람다식은 런타임 때 익명 객체를 생성하기 때문에 대입 되는 값에 따라 자동인식이 되기 때문이다. 그리고 함수 몸체..

[백준 알고리즘] 2156 - 포도주 시식

백준 알고리즘 2156번 Dynamic Programming 문제를 풀어보았다. 효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규칙이 있다. 포도주 잔을 선택하면 그 잔에 들어있는 포도주는 모두 마셔야 하고, 마신 후에는 원래 위치에 다시 놓아야 한다. 연속으로 놓여 있는 3잔을 모두 마실 수는 없다. 효주는 될 수 있는 대로 많은 양의 포도주를 맛보기 위해서 어떤 포도주 잔을 선택해야 할지 고민하고 있다. 1부터 n까지의 번호가 붙어 있는 n개의 포도주 잔이 순서대로 테이블 위에 놓여 있고, 각 포도주 잔에 들어있는 포도주의 양이 주어졌을 때, 효주를 도와 가장 ..

[Spring] 스프링 JPA 흐름, JPA 관련 질문 내용 정리

JPA의 매핑 관계를 설정할 때 조금 복잡한 상황을 보자. 12345@ManyToMany @JoinTable(name = "recipe_category", joinColumns = @JoinColumn(name = "recipe_id"), inverseJoinColumns = @JoinColumn(name = "category_id")) private Set categories = new HashSet();cs 다 대 다 관계에서 @ManyToMany를 썼다. John Tompson께서 이런 상황은 많이 발생하지 않는다고는 한다. 지금 보면 Recipe와 Category 두 테이블이 다 대 다 관계로 묶여있다. 그래서 처음에 @JoinTable에서 이름을 "recipe_category"로 정해주었다. 이..

반응형