본문 바로가기

전체 글149

[파일구조] - 필드(Field)와 레코드(Record) 1. 필드(Field) 파일구조에서 필드는 파일을 구성하는 요소 중에서 의미를 갖는 가장 작은 단위를 뜻한다. 즉, 가장 근본적인 관점에서 파일을 읽고 쓴다는 것은 필드를 읽고 쓴다는 것이다.그러나 물리적인 공간에서 파일은 단순히 바이트(byte)의 연속일뿐이기 때문에 파일구조를 설계하기 위해서는 연속된 바이트에서 필드를 구분하기 위한 방법을 고려해야 한다. 연속된 바이트에서 필드를 구분하기 위한 일반적인 방법으로는 고정 길이 필드 방식, 길이 지시자 방식, 구획 문자 방식, 키워드=값 구조와 같은 기법이 있다.앞으로는 아래와 같은 데이터 클래스 Person을 예시로 파일구조를 설계할 것이다. 또한, 구현 언어는 C++로 가정하여 예시 코드를 작성할 것이다. class Person { private: i.. 2016. 4. 22.
[파일구조] - 파일에 대한 물리적 관점 1. 디스크(Disks) 디스크는 크게 데이터를 저장하는 부분과 데이터를 읽는 부분으로 구성된다. 데이터를 저장하는 부분은 아래의 그림과 같이 트랙(track)과 섹터(sector)로 구분할 수 있다. 대부분의 디스크는 아래의 우측 그림과 같이 여러 개의 판(플래터, platter)을 다층으로 쌓아서 저장 용량을 증가시키는데, 이러한 구조에서 각각의 플래터의 같은 위치에 존재하는 트랙으로 구성된 원기둥의 표면과 같은 모양의 집합을 실린더(cylinder)라고 한다. 위의 그림과 같이 다층으로 플래터를 쌓은 디스크에서는 여러 개의 헤더를 구성하여 디스크 연산의 효율을 증가시킨다. 여러 개의 헤더는 각각이 개별적으로 동작하는 것이 아니라, 하나의 축에 고정되어 같이 움직인다. 따라서, 같은 실린더에 존재하는.. 2016. 4. 22.
[파일구조] - 파일의 개념과 파일 연산 1. 물리적 파일과 논리적 파일 파일은 파일을 직접 관리하는 파일 매니저와 파일을 이용하는 응용프로그램의 관점에 따라 두 가지로 나타낼 수 있다. 물리적 파일(physical files): 파일 매니저의 관점에서 보는 파일로써 컴퓨터의 실제 디스크에 저장된 바이트의 연속을 의미한다.논리적 파일(logical files): 응용프로그램의 관점에서 보는 파일로써 물리적 파일로 연결된 채널을 의미한다. 응용프로그램에서는 논리적 파일을 통해 파일에 대한 연산을 수행한다. 그러나 응용프로그램은 논리적 파일이라는 물리적 파일과 연결된 채널을 이용함으로써 자신이 행하는 연산이 정확히 디스크의 어떤 위치에 적용되는지 알 필요가 없다. C언어에서 파일 디스크립터(file descriptor)를 이용하여 파일을 조작하는 .. 2016. 4. 14.
[파일구조] - 파일구조 설계 1. 파일구조 설계 시 중요한 점 객체지향 관점에서 파일구조를 설계하기 이전에 파일구조의 가장 중요한 특징은 메모리보다 느리다는 것이다. 만약 동일한 시스템에서 램 접근 시 50ns가 소모된다고 하면 디스크 접근 시에는 약 4.6ms가 소모된다. 산술적으로 디스크에 한 번 접근하는 것은 램에 92,000번 접근하는 것과 같다는 것이다. 따라서, 유지 및 보수, 확장성 등의 특성 이전에 파일구조에서 가장 중요한 점은 디스크 접근을 최소화 하는 것이다. 2. 파일구조의 구성요소 파일구조는 파일(데이터) 자체를 말하는 것이 아니다. 파일구조는 데이터를 표현(representation)하는 방식과 데이터를 접근하는 연산(operation)의 조합을 의미한다. 예를 들어, Windows 파일시스템에서 파일을 표현.. 2016. 4. 14.
[지능형시스템] - Artificial Bee Colony(ABC) Algorithm 1. 개요 Artificial Bee Colony Algorithm(이하 ABC 알고리즘)은 computer Science, operation research 분야에서 이용되는 전역 최적화 알고리즘이다. 비교적 최근에 연구된 알고리즘으로써 Karaboga, Basturk (2007), A powerful and efficient algorithm for numerical function optimization: artificial bee colony (ABC) algorithm에서 본격적으로 소개된 ABC 알고리즘은 꿀벌 군집(honey bee swarm)의 지능적인 수렵 행위를 모방하여 최적화를 수행한다. 아직 한글로 번역된 문서가 없기 때문에 이 글에서는 논문에서 사용한 영어 단어를 그대로 사용한다... 2016. 4. 13.
벡터 그래픽(Vector Graphic)과 SVG(Scalable Vector Graphics) 1. 비트맵 그래픽과 벡터 그래픽 1) 비트맵 그래픽비트맵 그래픽은 특정 색상 값을 갖는 점(픽셀)의 배열로 이미지를 표현하는 방식이다. 대표적인 비트맵 그래픽인 jpeg, gif, png 형식의 이미지 파일을 확대하다보면 아래의 그림 좌측과 같이 이미지가 손상되는 현상이 발생한다. 비트맵 그래픽은 고정된 크기의 틀에 픽셀이라는 단위로 점을 찍어서 이미지를 표현하기 때문에 원본 크기보다 이미지를 확대하면 이미지가 손상되는 결과가 발생한다. 그러나 비트맵 그래픽은 단순히 데이터의 배열로써 이미지를 표현하기 때문에 컴퓨터가 연산하기 용이하다. 따라서, 비트맵 그래픽은 하드웨어의 자원을 적게 소모하는 장점이 있다. 2) 벡터 그래픽벡터 그래픽은 픽셀의 배열로 이미지를 표현하는 것이 아니라 실제로 이미지에 표현.. 2016. 4. 12.
XMLHttpRequest 객체와 Ajax 1. Ajax Ajax(Asynchronous JavaScript and XML, 에이젝스)는 이용자 반응형 웹 어플리케이션 제작을 위해 HTML, DOM, JavaScript, XMLHttpRequest 등으로 구성된 웹 개발 기법이다. 기존의 웹 어플리케이션은 웹 페이지가 로드될 때 웹 서버에 요청을 전달하고, 웹 서버는 요청된 내용에 따라 데이터를 가공하여 클라이언트에게 전달하는 방식으로 동작했다. 그러나 이러한 방식의 데이터 전송은 HTML 코드를 다시 한번 더 전송해야하기 때문에 대역폭 낭비가 발생하게 된다. 또한 서버로부터 데이터를 가져올 때마다 새로고침(F5)를 누른 것처럼 페이지가 다시 로드되어야 하기 때문에 이용자 반응형 어플리케이션을 구현하기도 어렵다. 반면에 Ajax 방식을 이용한 웹.. 2016. 4. 9.
[머신러닝] - LVQ(Learning Vector Quantization) 1. 개요 LVQ는 입력 벡터를 가장 유사한 참조 벡터로 군집화하는 인공신경망이다. 비슷한 종류의 군집화 인공신경망인 자기조직화지도 (Self-organizing Map, SOM)와 비슷하게 경쟁학습을 통해 학습을 수행한다. 자기조직화지도와 비슷하게 LVQ 또한 초기 가중치에 의해 군집화 결과가 많은 영향을 받기 때문에 신경망이 불안정하다는 단점을 가지고 있다. 이 글에서는 LVQ, LVQ1 및 LVQ2에 대해 소개한다. 2. 용어 정의 군집화(clustering): 유사한 특성을 갖는 입력 벡터들을 하나의 집단으로 조성하는 방법론으로써 머신러닝 분야의 한 갈래이다.참조 벡터(reference vector): 경쟁학습을 통해 형성되는 입력 벡터의 그룹으로써, 다른 군집화 인공신경망의 출력층 노드와 같다... 2016. 4. 8.
[JavaScript] - 자바스크립트의 this 포인터 1. this 포인터 C++, Java 등과 같은 객체지향 언어를 이용하여 프로그래밍할 때, this 포인터는 매우 유용하게 사용된다. C++에서 this 포인터에는 해당 클래스의 주소가 저장되어 있으며, 컴파일 과정에서 컴파일러가 자동으로 선언하기 때문에 프로그래머가 명시적으로 선언할 수 없다. 브라우저 환경에서 실행되는 웹 어플리케이션은 대부분 유저인터페이스(user interface, UI)를 통해 이용자의 입력에 따라 코드가 실행되는 이벤트 기반 응용 프로그램이다. 이러한 웹 어플리케이션의 특징 때문에 웹 어플리케이션을 개발하고자 자바스크립트를 이용할 때는 이벤트 반응형 프로그래밍(event-driven programming) 형식을 많이 이용하게 된다. 이벤트 반응형 프로그래밍에서 this 포인.. 2016. 4. 8.
[JavaScript] - 객체 정렬 1. Sort 메소드 자바스크립트에서는 별도의 정렬 메소드를 구현하지 않아도 배열 객체에서 정렬 메소드를 제공한다. 자바스크립트의 sort 메소드는 아래의 [코드 1]의 3번째 줄과 같이 "배열명.sort()"의 형태로 사용할 수 있다. 1234567var arr = [0, 10, 5, -5, 1]; arr.sort(function(a, b) { return a - b; }); for(var i = 0; i 2016. 4. 8.
웹 스토리지 (Web Storage)의 특성과 사용법 1. 웹 스토리지와 쿠키 웹 스토리지 (web storage)는 서버가 아닌, 클라이언트에 데이터를 저장할 수 있도록 지원하는 HTML5의 새로운 기능이다. 웹 스토리지와 쿠키의 기능 자체는 유사하지만, 쿠키는 약 4KB까지 밖에 저장 공간을 이용하지 못하는 반면에 웹 스토리지는 약 5MB까지 저장 공간을 이용할 수 있다. 웹 스토리지의 최신 스펙은 https://www.w3.org/TR/webstorage/에서 확인할 수 있다. 웹 스토리지에는 로컬 스토리지 (local Storage)와 세션 스토리지 (session Storage)가 있다. 로컬 스토리지와 세션 스토리지는 각각의 고유한 특성이 있으며, 프로그래머의 필요에 따라 선택적으로 사용된다. 다음 항목에서는 로컬 스토리지와 세션 스토리지에 대한.. 2016. 4. 8.
리페인트 (Repaint) 및 리플로우 (Reflow) 최소화 1. 문서 구조 해석 및 렌더링 Chrome, Firefox, Safari 등의 브라우저는 성능 향상을 위해 각각의 고유한 성능 최적화 단계나 렌더링 (rendering) 프로세스를 브라우저 엔진에 갖추고 있다. 아래의 [그림 1]은 대부분의 브라우저에서 HTML 문서 해석 시 발생하는 공통적인 과정을 도식화한 것이다. [그림 1] 브라우저의 HTML 문서 해석 과정 DOM tree는 태그라고 불리는 HTML 문서의 구성 요소와 각 구성 요소간의 관계를 트리 구조로 나타낸 자료구조이다. Styles struct는 브라우저에 기본으로 설정된 스타일이나 스타일시트에 정의된 코드를 바탕으로 스타일 구조체를 형성한 것이다. 브라우저 엔진은 DOM tree와 styles struct를 결합하여 HTML 문서를 구.. 2016. 4. 5.