상호배제(Mutual Exclusion)란, 특정 프로세스가 공유 자원을 사용 중일 때 다른 프로세스가 이 자원에 접근하지 못하도록 막는 것을 의미한다. 그러니까, 공유를 하면 안되는 자원(Resource)의 동시 사용을 피하는 방법 중 하나이다. 스레드의 경우, 프로세스와 달리 메모리의 Stack 영역을 제외한 부분을 다른 스레드와 공유하는데, 이 부분에서 스레드간 동시 사용을 피하고 싶을 때 주로 사용한다. (※참고: [IT 기술면접 준비자료] 교착상태와 식사하는 철학자들) 동시 접근을 막기 위해 프로그래머에 의해 구현된 코드 영역을 임계 구역(Critical Section)이라고 한다. ▶상호배제를 재미있게 설명한 삽화. Mutex가 지켜주는 덕에, 화장실은 딱 1명만 쓸 수 있다. 더 쉬운 이해를..
부제: 인덱스란?, 인덱스에 대하여. 색인(Index, 앞으로는 '인덱스'라고 칭하겠다.)은 오라클에서 데이터를 빨리 찾기 위한 용도의 데이터베이스 객체이다. 위키피디아에서 정의한 인덱스의 뜻은 다음과 같다. "데이터베이스 분야에 있어서 테이블에 대한 동작의 속도를 높여주는 자료 구조" 정의가 조금 애매하지만, 보통 인덱스를 통해 성능 향상을 얻는 연산은 검색 연산(SQL의 SELECT)이다. (더 이상의 자세한 설명은 생략한다.) 인덱스가 무엇인지 설명하기 보다는, 오라클에서 인덱스를 어떻게 사용하는지 다루려고한다. 인덱스는 테이블에 있는 한 개 이상의 컬럼으로 만들 수 있다. 생성 예는 아래와 같다. 123CREATE INDEX indexname1ON table1(column1) cs 한편, 인덱스는..
Java의 Collection Framework는 프로그램의 개발에 있어, 유용하게 쓰일 자료구조를 정의해놓은 것이다. 이를 통해 모든 객체타입을 구성요소로 하여 데이터 저장 방식을 손쉽게 활용할 수 있다. 단, Primitive Type(기본형)의 경우, 구성요소가 될 수 없음에 유의하자.※ 참고: [IT 기술면접 준비자료] JAVA의 Wrapper Class와 AutoBoxing 1. 컬렉션 프레임워크의 인터페이스 구조 왠 인터페이스!? 라고 생각하는 사람도 있겠다. 사실 컬렉션 프레임워크의 구성요소들은 '미리 정의된 클래스'이다. 그리고 이들을 계층화 (묶어주는)해주는 인터페이스가 존재한다. ▶ 컬렉션 프레임워크의 인터페이스 구조 위 그림은 컬렉션 프레임워크의 인터페이스만 나타낸 그림이다. 즉, 모..
제약조건은 컬럼에 대한 속성을 정의하는 것이며, 데이터 무결성을 보장하기 위한 용도로 사용된다. 다시말해, 제약조건을 설정한다는 것은 테이블이나 속성에 부적절한 데이터가 들어오는 것을 사전에 차단하도록 규칙을 정하는 것이라고 생각하면 된다. 제약조건은 컬럼의 속성처럼 사용하지만, 엄연히 데이터베이스의 객체이므로 고유의 이름(제약조건 명)을 지정해주어야 한다. 사용자가 지정하지 않는 경우, ORACLE이 자동으로 부여해준다. 1. NOT NULL 컬럼을 정의할 때(NOT NULL의 경우 오로지 컬럼에만 적용 가능하다. 테이블은 안됨.) NOT NULL 제약조건을 명시하면 해당 컬럼에는 반드시 데이터를 입력해야만 한다. 반드시 데이터가 들어와야만 하는 컬럼에 명시를 해두면 유용할 것이다. 사용 예는 아래와 ..
데이터 타입(DataType)은 컬럼이 저장되는 데이터 유형을 말한다. 오라클의 데이터 타입은 오라클이 기본으로 제공하는 기본 데이터 타입(혹은 원시 데이터 타입)과 사용자 정의 데이터 타입으로 분류할 수 있다. 1. 문자 데이터 타입 문자나 문자열 데이터를 저장할 수 있는 데이터 타입을 의미한다. 종류와 특징은 아래와 같다. 데이터 타입 설명 CHAR(size) 고정길이 문자를 저장. 최대 2000byte. 최소 1byte. VARCHAR(size) 가변길이 문자를 저장. 최대 2000byte. 최소 1byte. NCHAR(size) CHAR와 같으나 유니코드 형태이다. NVARCHAR(size) VARCHAR과 같으나 유니코드 형태이다. LONG 최대 2GB 크기의 가변길이 문자형이다. 잘 사용하지 ..
윈도우 운영체제의 가상 메모리(Virtual Memory)는 RAM을 관리하는 방법 중 하나로, 각 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 할당하는 방식을 말한다. RAM의 부족한 용량을 보완하는 데 주로 쓰인다. 윈도우 운영체제는 가동되고 있는 프로세스들의 내용(페이지) 중, 덜 중요한 것들을 하드 디스크의 공간에 옮겨 놓는다. (당연히 어디에 저장했는지도 기록해 놓는다.) 그리고 프로세스가 동작하는 도중, 메모리에 필요한 데이터(페이지)가 없으면 하드디스크를 찾아 해당 데이터를 가져온다. (이 과정에서 속도 저하가 발생. ROM이 RAM보다 느리기 때문.) ▶ 가상메모리로 메모리 용량을 확보한 모습. 하지만 가상메모리는 용량이 충분할 때도 쓰인다, 가상메모리의 동작 프로세스를 설명하..
해싱(Hashing)은 하나의 문자열을 원래의 것을 상징하는 더 짧은 길이의 값이나 키로 변환하는 것이다. (출처: http://www.terms.co.kr/hashing.htm) 그리고 해싱은 해시 테이블(Hash Table)과 해시 함수(Hash Function)로 구성된다. 그림1. 해시테이블과 해시함수의 역할을 나타내는 개념도 해시테이블(Hash Table, Hash Map이라고도 불림.)은 Key와 Value를 갖는 자료구조이다. 주로 효율적인 검색에 활용되는데, 위 그림을 보자. John Smith라는 사람의 전화번호를 찾는 과정을 가정했을 때, 해시함수(Hash Function)의 입력값은 "John Smith"이고 출력값은 "01"이다. 그리고 색인이 "01"인 bucket에서 "521-8..
Process와 Thread의 비교는 전산학의 '꽃' (아니면 말고..)인 '운영체제'에서 중요하게 다루는 내용이므로 취준생이라면 꼭 짚고 넘어가야할 내용이다. 먼저, Process와 Thread에 대해 정의를 내리자면, Process: 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다. 종종 스케줄링의 대상이 되는 작업(task)이라는 용어와 거의 같은 의미로 쓰인다. Thread: 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다.(출처: 위키피디아 해당 항목.) 프로그램(Program)에 대해 다들 알 것이다. 프로그램은 명령어들과 데이터의 묶음이라고 할 수 있다. 운영체제가 프로그램에 메모리를 할당하여 실행하면 이를 프로세스라고 한다. CPU의 프로세서는 하나..
JAVA의 Wrapper Class에 대한 개념은 그냥 지나가기 쉬운 부분이라 꼭 정리를 해둘 필요가 있다. 특히, JDK 1.5 이후 버전부터 AutoBoxing기능이 지원되면서, 더욱 그냥 지나가기 쉬워졌다. 그리 어려운 내용이 아니니 쭉 훑어보면 될 것이다. JAVA는 객체로 이루어져있고, 모든 데이터가 객체로 표현된다. Object를 상속하는 모든 클래스를 참조형(Reference Type)이라고 한다. 하지만 이처럼 객체로 표현하지 않고 원시적인 형태로 표현하는 예외를 두고 있는데, 그것이 바로 기본형(Primitive Type)이다. JAVA의 기본형과 이에 대응하는 Wrapper Class. (출처: 자체제작) 표의 좌측에 나열된 기본형의 예를 보면 기본형의 정의에 대해 더 명확해졌을 것이다..
※ 같이 보면 좋은 포스팅 [IT 기술면접 준비자료] Process와 Thread의 비교 프로세스(Process)가 구동하려면 다양한 시스템 자원이 필요하다. 대표적으로 CPU(중앙처리장치)와 입출력장치가 있는데, 최고의 성능을 내기 위해 자원을 어떤 프로세스에 얼마나 할당하는지 정책을 만드는 것을 CPU스케줄링이라고 한다. CPU스케줄링에 대해 알아보기 전에, 왜 필요한지 짚고 넘어갈 필요가 있다. (스케줄링 기법에 어떤 것들이 있는지 외우는 것보다 중요하다.) 프로세스의 생명주기 라면을 끓일 때, 물이 끓을 때까지 멍하니 기다리지는 않을 것이다. 라면 봉투를 미리 뜯어 놓기, 스프 미리넣기, 각종 재료를 미리 준비하기 등을 물이 끓는 것을 기다리면서 할 것이다. 여기서 CPU스케줄링을 착안하면 되겠다..