본문 바로가기

컴퓨터공학25

HashMap vs HashTable vsTreeMap 그리고 HashSet HashMap은 자바 프로그래밍에서 널리 쓰이고 있으며 기술면접에도 단골질문으로 나온다. HashMap과 HashTable , HashSet을 정리해둔다. HashTable은 Map 인터페이스의 implementaion을 기반으로 한다. 이 implementaion은 Map의 모든 기능을 제공하며, Null 키값과 Null 밸류값을 허용한다. (HashMap은 거칠게? HashTable과 같지만, 비동기화이며, Null을 허용한다) HashMap은 Map의 순서를 보장하지 않으며 이 순서가 계속 유지되는것 또한 보장하지 않는다. Hash Function을 사용하여 get과 put에는 O(1)의 시간복잡도가 소요된다. HashMap은 초기 Capacity보다 입력값이 많아질 경우 동적으로 size가 늘어나.. 2019. 2. 19.
응용 계층 : 애플리케이션에 데이터 전송하기 웹 페이지를 볼 때는 크롬같은 웹 브라우져를 사용하고, 메일을 보내고 받을때는 Outlook 같은 메일 프로그램을 사용하게 된다. 여기서 응용계층은 OSI의 5계층 세션 계층과 6계층 표현 계층도 포함한다. 응용계층에서는 주로 사용자 측(클라이언트)의 요청을 전달하기 위해 통신 대상(서버) 등이 이해할 수 있는 메세지(데이터)로 변환하고 전송 계층으로 전달하는 역할을 한다. 이때 응용 계층의 프로토콜을 사용한다. 웹 사이트를 볼 때는 HTTP , 파일을 전송할 때는 FTP , 메일을 보낼 때는 SMTP , 메일을 받을때는 POP3라는 프로토콜을 사용한다. 또한 네트워크에서 컴퓨터나 네트워크 장비에 붙여진 이름을 기반으로 IP주소를 알아내는 것을 이름해석이라고 하는데, 이를 위해 DNS를 사용한다. 웹 서.. 2018. 12. 2.
트랜잭션 목표1.트랜잭션의 개요2.트랜잭션의 특성(ACID)2.동시성 제어3.회복 트랜잭션 개요항공기 예약, 은행, 신용카드 처리 등에서는 대규모 데이터베이스를 수백, 수천명 이상의 사용자들이 동시에 접근한다. 많은 사용자들이 동시에 서로 다른 부분 또는 동일한 부분을 접근하면서 데이터베이스를 사용하는 것이다. 동시성 제어란 동시에 수행되는 트랜잭션들이 데이터베이스에 미치는 영향은, 이들이 순차적으로 수행되었을때의 영향과 같도록 보장하는것을 말한다. 다수 사용자가 데이터베이스를 동시에 접근해서 사용하더라도 데이터베이스의 일관성을 유지하는 것이다. 회복이란 데이터베이스를 갱신하는 도중에, 시스템이 고장나도 데이터베이스의 일관성을 유지하는것을 말한다. 데이터베이스 시스템에서 볼 수 있는 몇 가지 트랜잭션의 예를 보자.. 2018. 10. 31.
뷰(VIEW) 목표1.뷰에 대해서 알아본다. 뷰(View)관계 데이터베이스에서 뷰는 일종의 가상 릴레이션을 의미한다. 뷰는 기존의 기본 릴레이션에 대한 SELECT문의 형태로 정의된다.사용자는 여러 개의 릴레이션과 뷰를 사용할 수 있으며, 릴레이션으로부터 데이터를 검색하거나 갱신할 수 있는 동적인 창의 역할을 한다.스냅샷이란 어느 시점의 SELECT문의 결과를 기본 릴레이션의 형태로 저장해놓은 것이다. 어떤 시점의 조직체의 현황, 예를 들어 몇년, 몇월 시점에 근무하던 사원들의 정보, 재고 정보 등이 스냅샷으로 정의될 수 있음. 또한 뷰는 뷰와 다른 기본 릴레이션의 조합으로도 만들어질 수 있다. 뷰를 만드는 예시를 보자. 이렇게 뷰를 정의해놓고, 뷰에 대해서 질의를 날렸을때 DBMS는 어떻게 처리를 할까?먼저 시스템 .. 2018. 10. 31.
데이터베이스 정규화 목표1.정규화의 개요2.함수적 종속성3.릴레이션 분해4.제 1정규형, 제 2정규형, 제 3정규형, BCNF 정규화(Normalization)부주의한 데이터베이스 설계로 제어할 수 없는 데이터 중복을 야기하여 여러가지 갱신이상을 유발한다. 데이터베이스 정규화를 통해 주어진 릴레이션 스키마를 함수적 종속성과 기본 키를 기반으로 분석하여, 원래의 릴레이션으로 분해함으로써 중복과 세 가지 갱신이상을 최소화 하는것이다. 그렇다면 좋은 데이터베이스란 무엇일까? 정보의 중복과 갱신 이상이 생기지 않고, 정보의 손실을 막으며, 실 세계를 훌륭히 표현했으며, 애트리뷰트들 간의 관계가 잘 표현되는것을 보장하며 어떤 무결성 제약 조건의 시행을 간단하게 하여 효율성까지 고려하는것을 말한다. 갱신이상(Update anomaly.. 2018. 10. 30.
데이터베이스의 인덱스 목표1.단일 단계 인덱스에 대해 알아본다.2.다단계 인덱스에 대해 알아본다. 3.인덱스 선정 지침과 데이터베이스 튜닝에 대해 알아본다. 단일 단계 인덱스 만일 데이터베이스 접근을 오직 순차적으로만 한다면 인덱스는 필요하지 않을것이다. 인덱스된 순차 파일은 인덱스를 통해 임의의 레코드를 접근할 수 있는 파일이다. 단일 단계 인덱스의 각 엔트리는 로 구성된다. 따라서 인덱스를 잘 활용하면 쿼리의 응답시간이 빨라진다.엔트리들은 탐색 키 값의 오름차순으로 정렬된 상태이다.인덱스는 기본적으로 데이터 파일으 10% 내외의 크기를 가지므로 순차탐색시 훨씬 빠르게 찾을 수 있으며 정렬되어 있으므로 이진 탐색을 이용할 수 있다. 인덱스는 데이터 파일과는 별도로 다른 파일에 저장된다.(당연히 크기는 데이터 파일에 비해 훨.. 2018. 10. 28.
SQL 목표 1.SQL의 개요에 대해서 알아본다.2.DDL을 살펴보고 무결성 제약조건을 이해한다.3.DML의 여러 조건과 예시를 살펴본다.4.트리거(Trigger)와 주장(Assertioin)에 대해서 이해한다. SQL의 개요 SQL(Structed Query Language)은 현재 DBMS 시장에서 관계 DBMS가 압도적인 우위를 차지하는 중요한 요인중 하나이다. 다양한 상용 DBMS마다 지원하는 SQL은 다소 차이가 있으며 여기서 다루는SQL은 SQL2를 따른다.SQL은 비절차적 언어(선언적)으로 사용자는 자신이 원하는 바(what)만 명시하며, 원하는 것을 처리하는 방법(How)는 명시할 수 없다. 대화식SQL과 내포된SQL이 있는데 대화식 SQL을 다룬다. DDL과 무결성 제약조건 *스키마를 생성과 제.. 2018. 10. 28.
메모리 관리 전략(2) 목표1.세그멘테이션에 대해서 알아본다.2.페이징 기법에 대해서 알아본다.3.메모리 관리 전략에 대한 차이를 알아본다. 세그멘테이션 배경사용자가 인식하는 메모리의 모습과 실제 물리 메모리의 모양은 같지 않다. 물리적 특성을 고려하여 프로그래머가 메모리를 관리하는 방식은 효율적이진 않다. 그래서 프로그래머가 인지하는 메모리의 모습을 실제 물리 메모리의 모습으로 변환해주는 기법을 제공한다. 시스템은 메모리 관리하는데 있어서 더 많은 자유로운 선택을 할 수 있고, 프로그래머 또한 자연스러운 프로그래밍이 가능하다. 기본방법프로그래머는 메모리를 일부는 명령어를 저장하고, 나머지는 데이터를 저장하는 바이트의 배열로 생각하는가? 아니다. 프로그래머들은 가변적인 길이를 가진 세그먼트의 집합 그리고 세그먼트 사이에는 어떤.. 2018. 10. 28.
관계 데이터 모델과 제약조건 목표 1. 관계 데이터 모델에 대해 알아본다.2.릴레이션(테이블)의 특성과 키에 대해 알아본다.3.무결성 제약 조건에 대해 알아본다. 관계 데이터 모델 관계 데이터 모델은 현재까지 제안된 데이터 모델 중 가장 단순한 개념의 모델이며 가장 널리 쓰이고 있다. 바탕이 되는 데이터 구조로서 간단한 테이블을 사용하고 중첩된 구조가 없다. 숙련되지 않은 사용자도 쉽게 접근할 수 있으며 관계 데이터베이스 설계와 효율적인 질의 처리 면에서 장점을 가지기 때문이다. 조금 더 살펴보자.-동일한 구조(테이블) 관점에서 모든 데이터를 논리적으로 구성한다.-선언적 질의를 통해 데이터에 접근한다.-응용 프로그램과 데이터베이스 내의 레코드의 순서는 무관하다. -사용자는 원하는 데이터(what)만 명시하고 어떻게 찾을 것인가(ho.. 2018. 10. 27.
데이터베이스 시스템 개요 목표 1.데이터베이스 시스템에 대해 알아본다.2.파일시스템과 비교하여 DBMS의 장점을 알아본다.3.DBMS의 발전 과정을 알아본다. 4.DBMS 언어에 대해 알아본다. 데이터베이스 시스템 개요 데이터베이스 스키마란 전체적인 데이터베이스 구조를 뜻하며 자주 변경되지 않는다. 데이터베이스의 모든 상태를 미리 정의하며 내포(intension)이라고 부른다.반면 데이터베이스 상태란 특정 시점의 데이터베이스 내용을 뜻하며 시간에 다라 달라진다. 외연(extension)이라고 부른다. 시스템 카탈로그는 저장된 데이터베이스 스키마 정보를 유지하는 역할을 한다. DBMS란 사용자가 새로운 데이터베이스를 생성하고 데이터베이스 구조를 명시하고 데이터를 효율적으로 질의하고 수정할 수 있으며, 시스템의 고장이나 권한이 없는.. 2018. 10. 27.
메모리 관리 전략(1) 목표1.메모리 관리 전략의 배경에 대해 알아본다.2.스와핑에 대해 이해한다.3.연속 메모리 할당 기법에 대해 이해한다.4.내부 단편화와 외부 단편화에 대해서 이해한다. 메모리 관리 전략그동안 CPU가 여러 프로세스에 의해 어떻게 공유되고 스케쥴링 알고리즘이 어떻게 동작하는지 살펴보았다. 그러나 성능을 향상시키기 위해서는 주 메모리에 여러개의 프로세스가 올라와 있어야 한다. 즉, 여러 프로세스들이 동시에 주 메모리를 공유해야 하는 상황이다. 메모리 관리 알고리즘은 단순 하드웨어 방식, 페이징, 세그먼트 등 다양하며 장, 단점이 있다. 메모리 관리 전략의 배경에 대해서는 여러가지가 있지만 논리 대 물리주소 공간은 짚고 넘어가자. 논리 대 물리주소 공간CPU가 생성하는 주소를 논리 주소, 메모리가 취급하는 주.. 2018. 10. 27.
프로세스 동기화(뮤텍스,세마포어,임계구역) 목표1.프로세스 동기화에 대해 간략히 이해한다.2.Critical Section(임계구역)을 이해한다. 2.세마포어에 대해서 이해한다.1.뮤텍스에 대해서 이해한다.3.뮤텍스와 세마포어의 차이에 대해 이해한다. 프로세스 동기화 프로세스는 서로 메세지를 보내고 프로세스 내부에서는 쓰레드끼리 자원을 공유하면서 '동기화'에 대한 문제가 항상 발생할 수 있다. 즉 공유된 자원에 여러 프로세스, 여러 쓰레드가 동시에 접근하면서 문제가 발생하게 된다. 유저 동기화 방법과 커널 동기화 방법이 있는데 유저 동기화는 Critical Section(임계영역) , 커널 동기화는 Mutex , Semaphore 가 있다. Critical Section(임계구역)OS에서 임계구역은 상당히 중요한 부분이다. 멀티 프로세스 환경에서.. 2018. 10. 26.
DeadLock(교착상태) 목표1.데드락의 개념에 대해서 이해한다.2.데드락의 발생 조건에 대해서 이해한다. 3.데드락을 예방할 수 있는 방법에 대해서 이해한다.4.데드락이 회피 할 수 있는 방법에 대해서 이해한다.5.데드락을 탐지 및 치료(?) 할 수 있는 방법에 대해서 이해한다. DeadLock(교착상태)데드락이란 두 개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리고 있는 상태이기 때문에 결과적으로 아무것도 완료되지 못하는 상태이다. 예를 들어 사다리가 있고 두 사람이 각각 위 아래쪽에 위치해있다고 가정해보자. 각자 반대방향으로 움직이려고 한다면, 두 사람은 서로 상대방이 사다리를 비켜줄 때 까지 하염없이 사다리에서 기다리는것 처럼 다중 프로그래밍에서 교착상태는 흔히 발생할 수 있으며 데드락에 대한 해결방법은 아직 없.. 2018. 10. 25.
CPU 스케쥴링 알고리즘 목표1.스케쥴링의 배경에 대해 이해한다.2.스케쥴링이 일어나는 시점에 대해 이해한다.3.스케쥴링 알고리즘의 평가기준에 대해서 이해한다.4.스케쥴링 알고리즘의 종류와 장,단점을 예시와 함께 이해한다. 스케쥴링이란?프로세스와 쓰레드 포스팅에서 배운거처럼, 한정된 자원으로 최대한 성능을 이끌어내기 위해서는 CPU를 적절하고 효율적으로 사용해야 한다. 따라서 OS는 실행 대기중인 프로세스들에게 자원 배정을 적절히 하여 시스템의 성능을 끌어올릴 수 있다.정책에 따라서 1.CPU이용률을 최대화,2.오버헤드를 최소화,3.모든 프로세스가 공평하게 분배하는 방식이 있다. 선점 스케쥴링(Preemptive Scheduling)OS가 나서서 CPU사용권을 '선점'하고, 특정 요건에 따라 각 프로세스의 요청이 있을 때 프로세.. 2018. 10. 24.
프로세스와 쓰레드의 차이점 목표1.프로세스와 쓰레드의 차이점에 대해 알아본다. 프로세스와 쓰레드의 차이점 위 메모리 구조는 프로세스와 쓰레드의 차이점을 보여준다. 1.프로세스는 새로 생성될 때 마다 새로운 PCB를 생성하여 자칫 overhead가 발생할 위험이 있지만, 쓰레드는 프로세스 내에서 생성되고, 편에서 살펴봤듯이 프로세스 자원을 공유하면서 통신도 가능하므로 경제적이다. 2.프로세스와 쓰레드의 차이점에 대한 질문은 결국 OS가 멀티 프로세스 방식과 멀티 쓰레드로 진행할 경우 자원할당을 어떻게 하고, 어떤 상황일 때 얼마나 더 효과적이겠는가에 대한 질문이기도 하다. 3.멀티 프로세스 방식에 비해 멀티 쓰레드 방식은 프로세스를 생성하여 자원을 할당하는 낭비를 줄일 수 있고, IPC같은 별도의 통신장치를 쓰지 않아도 되며, 스케.. 2018. 10. 24.
쓰레드 목표1.쓰레드에 대해서 이해한다.2.쓰레드의 이점과 단점에 대해서 알아본다.3.다중 쓰레드와 단일 쓰레드의 차이에 대해서 이해한다.4.쓰레드 용법에 대해서 알아본다.5.쓰레드의 상태변환에 대해서 파악한다. 쓰레드란프로세스가 실행중인 프로그램이라면, 쓰레드는 프로세스를 이루는 CPU의 작업 단위 중 하나이다.(경량화 프로세스라고도 한다.light Process)따라서 프로세스는 하나 이상의 쓰레드(작업 쓰레드)를 가지며, 쓰레드는 쓰레드ID(식별자), 프로그램 카운터, 레지스터 집합, 스택으로 구성된다. 쓰레드를 사용함으로써 얻는 이점1.사용자 응답성 증가:응용 프로그램의 일부 기능이 서버 통신이나 다소 긴 처리를 요구하더라도, 쓰레드로 구현함으로써 다른 기능들은 block되지 않고 계속 실행 가능하다.2.. 2018. 10. 24.
프로세스(Process) 목표 1.프로세스의 정의2.프로세스의 구성3.메모리 상의 프로세스의 형태4.프로세스 상태 변화5.리눅스에서 프로세스 생성과 종료6.프로세스 간 통신 프로세스란?프로그램의 실행 instace를 말한다.(비공식적으론 실행중인 프로그램이다) 프로그램은 보조기억장치나 메모리에서 실행을 기다리고 있는 데이터와 명령어 등의 모음이라면, 프로그램이 실행되면 비로소 프로세스가 되는 것이다. 프로세스는 그 자체로 다른 프로세스를 실행시킬 수 있는 좋은 도구이다. 대부분의 환경에서 자바 프로그램은 JVM에서 구동시킬 수 있는데, JVM 또한 자바 코드를 바이트 코드로 컴파일하는 기능을 수행하는 컴파일러이기 때문이다. 프로세스의 구성 프로세스는 운영체제에서 Process Controll Block(PCB)로 표현된다. 다음.. 2018. 10. 24.
9장 그래프 *그래프의 첫 단원에는 대개 쾨니히스베르크의 다리라고 해서, 7개의 다리를 한 번씩만 건너서 모든 섬을 찍는 법은? 같은 인트로로 시작한다.*그러나 수학자 오일러는 그런 방법이 없다고 단언했다. 왜 그랬을까?*한붓그리기는 연결되어 있는 선이 홀수개인 점이 아예 없거나, 두개만 있는 도형에서만 가능하다.*그래프란 정점의 집합을 V, 간선의 집합을 E, 그리고 그래프를 G라고 했을때 G = (V,E)이다.*간선으로 연결된 두 점을 인접(adjacent)하다고 표현한다.*사이클(cycle)이란 어느 한 정점을 두 번 이상 거치도록 되어 있는 경우이다.*정점 사이의 인접 관계를 나타내는 방법은 인접행렬과 인접리스트, 두 가지 방법이 있다.*인접행렬은 정점의 개수X정점의 개수의 행렬을 만들어 두 정점이 인접한 경.. 2018. 10. 22.