Basics 65

XSD (XML Schema Definition) 정의

XSD(XML Schema Definition)는 XML의 유효성 검증을 위한 스키마입니다. - XML에 대해선 언급하지는 않겠습니다. (다 아시잖아유~) XML의 특징 중 하나를 예로 들어보면, 작성 규칙만 지켜진다면 입력이 자유롭다는 장점이 있습니다. - 이러한 장점이 오히려 단점이 되기도 합니다. - 문자열이 위치해야 할 자리에 숫자가 들어온다거나, 아니면 반대의 상황 - K5, 자동차 과 같은 예로, Category에 속할 수 없는 값들이 들어갈 가능성이 있습니다. - XML을 수동으로(요즘은 툴도 많지만...) 작성하다보면 오타가 발생하기도 하죠 이런 XML의 단점들을 일부 해소해 줄 수 있는게 바로 XSD입니다. XSD는 기본적으로 아래와 같은 48가지의 데이터 형식을 사용합니다. simple..

범용 CPU 레지스터

범용 레지스터인 EAX, EBX, ECX, EDX, ESI, EDI, EIP, ESP, EBP 에 대해서 알아보겠습니다. 디스어셈블 할 때 기본적으로 알아두어야 할 레지스터들입니다. 커널디버깅 중 Bugcheck Analysis 중 일부입니다. 이런식으로 BSOD 시점에 CPU의 각 레지스터 별로 어떤 내용을 담고있었는지 출력되게 됩니다. 위 그림에는 RAX, RBX....로 위에서 명시한 EAX, EBX...와 다른데 이유는 64bit에서 사용된 레지스터이기 때문입니다. 즉, 32bit : EAX, EBX, ECX...... 64bit : RAX, RBX, RCX...... 32bit 레지스터가 64bit에서 사용가능하도록 확장되어 명칭이 변경되었다 정도로 알아두시면 됩니다. 1. EAX (Extend..

Basics/Programming 2015.08.23

SHA 해싱

SHA 해싱SHA(Secure Hashing Algorithm)는 안전한 해시 알고리즘으로 암호학적 해시 함수들의 모음입니다. SHA-0을 시작으로 이후 변형된 SHA-1이 발표되었고, 이후 SHA-224, SHA-256, SHA-384, SHA-512가 더 발표되었습니다. SHA-256과 SHA-512는 각각 32비트, 64비트 워드를 사용하는 해시함수이며 몇몇 상수들이 다르지만 그 구조는 라운드의 수를 빼고는 같습니다. SHA-224와 SHA-384는 SHA-256과 SHA-512의 결과를 최종 해시값 길이에 맞춰 잘라낸 것입니다. 해시값을 얻어낼 때에는 원문의 각 비트들을 and, or, xor, rotr(회전) 등의 연산을 하며 해싱하게 되는데 원문에서 토시 하나라도 달라지게 되면 스노우볼 효과로..

깊은 복사와 얕은 복사 (Deep Copy, Shallow Copy)

깊은 복사와 얕은 복사 객체는 다른 객체를 참조할 수 있는데 이럴 경우에 객체의 복사본을 핸들링 할 경우 깊은 복사인가, 얕은 복사인가에 따라 결과값이 달라질 수 있으니 주의해서 다루어야 합니다. 복사를 한다는 것은 기존 객체와 같은 값을 가진 새로운 객체로 만든다는 것입니다. 객체들은 멤버를 가지고 있고 그 멤버들은 값일 수도 있고 참조 형식일 수도 있습니다. - 바로 이 객체들이 가진 값 형식과 참조 형식의 복제 방식에 따라 얕은 복사와 깊은 복사의 개념이 나누어지게 됩니다. 얕은 복사(Shallow Copy) 얕은 복사는 객체가 가진 멤버들의 값을 새로운 객체로 복사하는데 만약 객체가 참조타입의 멤버를 가지고 있다면 참조값만 복사가 됩니다. 아래의 예제를 보면,, main의 Person B = A;..

Basics/Programming 2014.11.15

RSA 암호화

RSA 암호화 RSA암호화는 공개키 암호화 시스템의 하나로, 암호화 뿐만 아니라 전자서명이 가능한 최초의 알고리즘입니다. RSA암호화는 비대칭 방식으로 암호화 하는 키와 복호화하는 키가 다른 암호화 방식입니다. 소인수분해의 난해함을 이용한 암호화 방식으로 공개키만 가지고는 개인키를 알아낼 수 없도록 설계되어 있습니다. RSA 암호화 처리 방식 RSA 암호화는 두 개의 키를 갖습니다. - 키 : 메시지를 열고 잠그는 상수 공개키와 개인키 두 가지를 사용하는데 - 공개키 : 데이터를 암호화하는데 사용하는 키, 공개되어 있는 키 - 개인키 : 암호화된 데이터를 풀어내는데 사용하는 키, 복호화 할 수 있는 키, 공개되어있지 않은 키라고 해서 다른말로 비밀키라고도 합니다. 누구나 암호화 시킬 수 있지만 그것을 볼..

경쟁상태, 교착상태, 라이브락 (Race Condition, Deadlock, Livelock)

경쟁상태 (Race Condition)둘 이상의 입력이나 조작이 동시에 일어나 의도하지 않은 결과를 가져오는 경우를 말합니다.- 파일 또는 변수와 같은 공유 자원을 접근하는 하나 또는 그 이상의 프로세스들의 다중 접근이 제대로 제어되지 않은 것을 말합니다.- 프로세스들 끼리 하나의 자원을 갖기 위해 싸우는 것, 하나의 자원을 동시에 요청 라이브락 (Livelock)한 프로세스가 이미 자원을 점유한 상태에서 다른 프로세스가 그 자원을 사용하기 위해 무한정 대기상태에 빠지는 것을 라이브락이라 합니다.- 지극히 정상적인 동작이지만 분명 문제가 있는 동작입니다. 교착상태 (DeadLock)프로세스들이 더 이상 진행을 못하고 영구적으로 블록되어 있는 상태로, 시스템 자원에 대한 경쟁 도중에 발생할 수도 있고 프로..

Basics/OS 2014.11.11

세마포어와 뮤텍스 - 동기화 기법

운영체제와 프로그래밍 언어 수준에서 병행성을 제공하는 기법으로, 세마포어와 뮤텍스가 있습니다.- 동기화 기법이라고 볼 수 있습니다.- 세마포어와 뮤텍스 이외에도 모니터, 이벤트 플래그, 메시지, 스핀락 등이 있지만 나중에 포스팅 할 수 있도록 하겠습니다. 동기화시스템의 자원은 한정적인데 이 한정적인 자원에 여러 스레드가 동시에 접근해서 사용하려하면 문제가 발생할 수도 있습니다. 이런 문제를 방지하기 위해 스레드들에게 하나의 자원에 대한 처리 권한을 주거나 순서를 조정해주는 기법입니다. 임계구역 (Critical Section)공유자원에 접근하는 프로세스 내부의 코드 영역으로 어떤 한 프로세스가 이 영역을 수행중일 때 다른 프로세스가 같은 영역을 수행한다면 문제가 발생할 수 있습니다. 상호배제 (Mutua..

Basics/OS 2014.11.11

배열과 연결리스트

배열과 연결리스트 배열은 - 스택 영역에 자료를 저장하고 컴파일시 공간을 확보하게 됩니다. - 자료를 순차적으로 저장하고 인덱스의 번호로 접근이 가능합니다. + 자료의 접근과 저장이 빠릅니다. - 한번 확보한 배열의 크기를 변경하기가 어려워 메모리가 낭비되고 비효율적일 수 있습니다. - 배열의 내부 요소를 정렬하고자 할 때 연결리스트에 비해 빠릅니다. + 인덱스 번호로 바로 접근해서 요소를 찾아내고 정렬하기 때문입니다. - 내부 데이터의 탐색이나 정렬을 자주한다면 배열을 사용하는 편이 좋습니다. + 접근하기가 연결리스트에 비해 빠르기 때문 (인덱스) 연결리스트는 - 힙 영역에 자료를 저장하고 필요할 때마다 메모리를 확보해 사용합니다. - 매번 데이터를 저장할 때마다 데이터를 위한 메모리를 확보해야 하므로..

배열 (Array)

배열(Array)의 개념 배열은 여러개의 동일한 데이터 타입의 데이터를 한번에 만들 때 사용됩니다. 만일, 6개의 정수를 저장할 공간이 필요한 경우, 배열이 없다면 int a1, a2, a3, a4, a5, a6; 으로 선언해야하지만, 배열이 지원된다면 간단하게 int a[6]; 으로 선언될 수 있습니다. 배열은 인덱스 번호를 기준으로 작업을 할 수 있기 때문에 효율적으로 루프를 설정하여 여러 상황에서 간단한 코드를 이용하여 결과를 나타낼 수 있습니다. - C언어에서는 배열의 인덱스는 0부터 시작 - a[6] = a[0] ~ a[5] 까지 6개 2차원 배열 2차원 배열은 1차원 배열이 여러개 모여서 이루어집니다. 2차원 배열에서 가로줄은 행, 세로줄을 열이라고 합니다. int a[3][4]; a[0][0..

연결 리스트 (Linked List)

연결리스트(Linked List)란?동적으로 크기가 변할 수 있고 삭제나 삽입시에 데이터를 이동할 필요가 없는 자료구조가 연결리스트입니다. - 데이터와 링크로 구성되어있고 링크가 데이터들을 연결하는 역할을 합니다. - 요런 형태입니다. 연결리스트는 노드로 구성되어있는데, - 노드 : 데이터 필드, 링크 필드로 구성 - 데이터 필드 : 실제 저장할 데이터가 있는 공간 - 링크 필드 : 다른 노드를 가리키는 포인터를 저장 배열의 경우 중간에 데이터를 삽입하려면 삽입하려는 위치에 있는 데이터와 그 이후에 있는 데이터들을 모두 한 칸씩 뒤로 움직여야하는데, 연결리스트는 그럴 필요가 없습니다. - 삽입하려는 위치의 링크만 변경해 주면 됩니다. 단순 연결 리스트 - 위의 연결 리스트가 단순 연결 리스트 - 데이터 ..