환경을 어떻게 분석하고, 이를 통해 어떻게 해나갈지에 대한 모델들 

1. 7S

- 매킨지라는 회사에서 만든 조직을 변화 시키기 위한 모델

- 7가지의 요소로 구성 : Strategy(계획) / Skill(기술) / Shared Value(공유가치) / Structure(구조) / System(체계) / Staff(멤버) / Style(스타일)

2. 5Force

- 마이클 포터에 의해 제안된 분석 도구

- 5자기 힘 : 기존 경쟁자 간의 경쟁 정도 / 공급자들의 교섭력 / 구매자들의 교섭력 / 잠재적 진입자들의 위협 / 대체재의 위협

3. SWOT

- Strength Weakness Opporturnity Threat를 규정해 마케팅 전략을 수립하는 기법


Six Sigma

- 모든 프로세스에 적용할 수 있는 전방위 경영혁신 운동

- 모토로라에서 일하던 마이클 해리에 의해 창안

- QC(품질관리) / TQC(전사적 품질관리)/TQM(전사적 품질경영)

BPR(Business Process Re-engineering : 업무 재설계)

- 기업의 전반적인 프로세스를 경영 목표 달성에 가장 적합하다록 재설계하고, 설계에 따른 모든 걸 재구성

- BPR이후에 SIS(전략정보시스템) 등이 수립된다고 보면됨

SIS(Strategic Information System : 전략 정보 시스템)

- 기업이 경쟁의 우의를 위해 구축하고 이용하는 시스템

- 실례로 항공사의 좌석 예약 시스템(CRC), 편의점의 판매 시점 관리(POS)등이 있다.

- BPR과정에서 재구축해내기도 함

ISP(Information System Planning : 정보 시스템 계획)

- SIS를 만드는 계획이라 보면됨

- ISP의 가장 주된 방법론 - CSF(Critical Success Factors : 주요성공요인) : MIT에서 개발한 SIS 실현을 위한 기법 중 하나로써, 성공에 꼭 필요한 요인을 찾아내 경영상 중요한 정보를 결정하는 방법

BOS(Business Operating System

- 기업 내 사람과 정보 그리고 프로세스 간에 발생하는 방대한 정보들을 저장하고 어떻게 사용할 것인가

- BOS = WorkFlow + EAI기술

- EAI(Enterprise Application Integration : 전사적 응용 통합) : 기업내의 각종 어플리케이션 간의 상호 연동이 가능하도록 하는 솔로션

->종류

1. EIP(Enterprise Information Portal : 전사적 정보 포탈)

: 기업의 내부 정보와 외부 정보를 통합해 웹 포털 형식으로 제공하는 거

2. KMS(Knowledge Management System : 지식 관리 시스템)

: 조직 내 인적자원들의 머리속의 지식들을 체계화해 공유함으로 경쟁량을 높이기 위한 기업 정보 시스템

3. SCM(Supply Chain Management : 공급망 관리)

: 기업이나 기업 내부 간의 유통구조를 효율화해서 비용절감을 하는 관리 기법

4. CRM(Customer Relationship Management : 고객 관계 관리)

: 기업이 고객 관계를 관리해 나가기 위해 필요한 방법론이나 S/W 등등

5. DSS(Decision Support System : 의사 결정 지원 시스템)

: 컴퓨터로 정형화되지 않은 문제에 관해 의사 결정자가 효과적인 의사 결정할수 있도록 지원하는 것

BSC(Balanced Score Card : 균형 성과 기록표)

- 재무지표 뿐만이 아니라 고객, 내부프로세스, 학습 등을 추가해 균형있게 평가하는 무형의 자산 평가 모델

CALS(Commerce At Light Speed : 광속상거래)

- 제품의 계획, 설계, 조달, 생산, 폐기 등 전 과정이 정보를 디지털활해 관련 기업간에 공유할 수 있도록 하는 정보시스템

EDI(Electronic Data Interchange : 전자문서교환)

- 독립된 조직 간에 정형화된 문서를 표준화된 자료표현 양식에 준하여 전자적 통신매체를 이용해 교환하는 방식

SOA(Service Oriented Architecture : 서비스 지향 아키텍쳐)

- 업무 상에서 일 처리를 서비스로 판단해, 그서비스를 네트워크 상에 연동시키면서 시스템 전체를 구축해나가는 방법론

CoP(Community of Practice : 학습공동체)

- 지식경영에서 지식창출방법중 하나

LMS(Learning Management System : 학습 관리 시스템)

- 말 그대로 학습자의 학습을 지원하고 관리하는 시스템

ABC(Activity Based Costing)

- 기준 원가 관리라는 의미로 구매-제조-판매-유통 상에 발생하는 비용등을 추적해 정확한 원가 뽑아내는 기법

BPM(Business Process Management)

- 업무 프로세스를 효율적으로 통합관리 해주는 경영방법

RTE(Real Time Enterprise)

- 실시간 정보 처리

'Free' 카테고리의 다른 글

오늘의 노래  (0) 2016.06.14
정보처리기시 실기 13년 2회  (0) 2016.06.13
정보처리기사 실기 13년1회  (0) 2016.06.13
정보처리기사 실기 DB정리  (0) 2016.06.12
JAVA 난수생성  (0) 2016.06.08

데이터베이스 개념

데이터베이스의 정의

데이터베이스란 어느 한 조직에서 업무 처리를 위해 다수의 응용 시스템 혹은 다수의 사용자들이 공용으로 사용하기 위해 통합,저장된 운영 데이터의 집합

- 통합된 데이터 : 중복을 최소화한 데이터의 집합

- 저장된 데이터 : 필요시 언제든지 이용할 수 있도록 저장된 데이터의 집합

- 공용 데이터 : 공유할 수 있도록 만든 데이터의 집합

- 운영 데이터 : 중복을 최소화하고 여러 사람이 공유함에 있어 문제가 발생하지 않도록 관리를 필요로 하는 데이터로 이용가치가 있는 데이터의 집합


|데이터베이스의 특징

- 계속적인 변화(Continuous Evolution)

- 동시 공유(Concurrent Sharing)

- 실시간 접근성(Real - time - Accessibility)

- 내용에 의한 참조(Contents Reference) 


|데이터베이스의 구성 요소

- 개체(Entity) : 사람이 생각하는 개념이나 정보 단위와 같은 현실세계의 대상체, 서로 구별이 되는 하나하나의 대상 / 개체는 하나 이상의 속성으로 구성

- 속성(Attribute) : 개체의 특성이나 혹은 상태를 기술

- 관계(Relation) : 두 개 이상의 개체 사이 또는 속성 간의 상호 연관성( 1:1 / 1:n / n:m)


데이터베이스 관리 시스템

|DBMS의 정의

파일 시스템의 문제점인 데이터의 중복성과 종속성 등의 문제를 최소화하기 위해 등장, 사용자와 데이터베이스 간의 중계 역할을 한다. 데이터베이스의 내용을 정의하고, 조자, 제어할 수 있도록 함으로써 모든 사용자나 응용 프로그램들이 데이터베이스를 공유할 수 있도록 관리 운영해주는 소프트웨어 시스템


|DBMS의 필수 기능

정의, 조작, 제어


|데이터베이스 언어

- DDL : 데이터베이스 구조를 정의 및 수정 등을 위해 사용되는 언어( CREATE, DROP, ALTER )

- DML : 데이터베이스 내의 자료를 검색, 삽입, 수정, 삭제하기 위해 사용되는 언어( SELECT, INSERT, UPDATE, DELETE )

- DCL : 데이터베이스의 데이터에 대해 무결성 유지, 병행 수행 제어, 보호와 관리를 위한 언어( COMMIT, ROLLBACK, GRANT, REVOKE )


데이터베이스 구조(스키마)

|스키마

데이터베이스의 전체적인 구조와 제약조건에 대한 명세를 기술, 정의한 것을 말함

- 외부 스키마 : 전체 데이터 중 사용자가 사용하는 한 부분에서 본 논리적 구조를 말하며, 서브 스키마라고도 함

- 개념 스키마 : 논리적 관점(사용자 관점)에서 본 전체적인 데이터 구조

- 내부 스키마 : 물리적 저장 장치 관점에서 본 데이터베이스의 물리적 구조


|데이터베이스 관리자(DBA)

데이터베이스 시스템과 관련된 모든 자원에 대해 기획,통제를하며 데이터베이스 언어를 이용해 DBMS를 거쳐 데이터베이스 시스템의 전체적인 관리 운영에 책임을 지는 사람이나 집단.


데이터베이스 설계

요구조건분석->설계(개념->논리->물리)->구현->운영및개선

|설계

- 개념적 설계 : 데이터베이스를 개념적으로 표현함으로써 데이터베이스를 구성할 구성요소를 결정한 후 수행할 작업과 관계를 설계

- 논리적 설계 : 개념적 설계에서 만들어진 구조를 논리적으로 구현 가능한 데이터 모델로 변환하는 단계

- 물리적 설계 : 논리적 데이터베이스 구조를 실제 기계가 처리하기에 알맞도록 내부 저장 장치 구조와 접근 경로 등을 설계


개체 - 관계 모델(E-R Model)

|개체-관계 모델(E-R Model)

개념적 설계 단계에서 사용되는 설계 기법으로, 개체타입과 관계타입 간의 구조를 약속된 기호를 이용하여 표현


|데이터베이스 모델

개념적 설계 이후 논리적 설계 단계에서 사용되는 모델로 논리적으로 구현 가능한 데이터 모델로 변환하기 위해 사용

- 관계 데이터 모델 : 표로나타냄

- 네트워크 데이터 모델 : 망데이터모델 / 레코드 타입 간 관계를 도형으로 표현

- 계층 데이터 모델 : 트리 구조로 표현


관계 데이터 모델

자료의 저장 형태를 2차원 구조의 표(테이블)로 표현하는 방법

|관계 데이터 모델

- 릴레이션 : 표

- 속성 : 릴레이션을 구성하는 각 열 

- 튜플 : 릴레이션의 한 행을 구성하는 속성들의 집합(= Record)

- 도메인 : 하나의 속성이 가질 수 있는 값들의 범위

- 릴레이션 스키마 : 릴레이션의 이름과 속성 이림의 집합

- 릴레이션 인스턴스 : 릴레이션에서 어느 시점까지 입력된 튜플들의 집합

- 차수 : 릴레이션을 구성하는 속성의 수

- 카디널리티 : 릴레이션에 입력된 튜플의 수


키와 무결성 제약조건

|키의 개념

키란 관계 데이타베이스에서 튜플을 식별하기 위해 사용하는 속성이나 속성의 집합으로, 데이터베이스의 참조 또는 검색 시에 사용된다.


|키의 종류

1)후보키(Candidate key)

- 릴레이션에서 각 튜플을 유일하게 식별할 수 있는 속성이나 속성의 잡합

- 유일성과 최소성을 만족

2)기본키(Primary key)

- 후보키 중에서 튜플을 식별하기 위해 특별히 선택된 키

- 기본키는 중복될 수 없으며, NULL값이 올 수 없다.

3)대체키(Alternate key)

- 후보키 중에서 기본키를 제외한 속성

4)외래키(Foreign key)

- 하나의 테이블에서 원하는 자료를 얻지 못하는 경우 다른 테이블 참조 하기 위해 사용되는 속성

- 외래키는 참조 릴레이션(테이블)의 기본키와 같다

- 외래키는 NULL이 올 수 있다.

5)슈퍼키(Super key)

- 한 릴레이션 내의 튜플들을 식별할 수 있는 후보키와 다른 속성들과의 모든 조합


무결성 제약조건

무결정은 데이터베이스 자료의 오류 없는 정확성과 안정성을 나타내는 것으로, 무결성 제약조건은 정확성과 안정성을 유지하기 위한 제약조건이다.

1) 개체 무결성

- 기본키는 NULL값이 올 수 없으며, 중복될 수 없음

2) 참조 무결성

- 외래키는 NULL값이 올 수 있으며, 참조 릴레이션의 기본키와 같아야 한다.

3) 도메인 무결성

- 속성값이 정해진 범위 이내의 값으로 구성해야 하는 제약조건

4) 고유 무결성

- 특정 속성에 대해 고유한 값을 가지도록 조건이 주어진 경우, 그 속성값은 모두 달라야한다.

5) NULL 무결성

- 특정 속성에 NULL값이 올 수 없다.

6) 키 무결성

- 한 릴레이션에는 최소한 하나의 키가 존재해야 한다.


관계 데이터 연산

|관계 대수

결과를 얻기 위한 절차를 표현하기 때문에 절차적 언어라고 한다.

- 순수 관계 연산자 : SELECT, PROJECT, JOIN, DIVISION

- 일반 집합 연산자 : 합집합, 교집합, 차집합, 카티션 프로덕트


1) 셀렉트

- 릴레이션에서 조건을 만족하는 수평적 부분 집합을 구하기 위한 연산

- 결과는 조건을 만족하는 튜플들로 테이블이 만들어진다.

- 연산기호는 시그마(σ)를 이용

- 표기 형식 : σ<선택조건>(테이블 이름)


2) 프로젝트

- 릴레이션에서 수직적 부분 집합(속성의 값)을 구하는 연산으로 원하는 속성만 추출하기 위한 연산

- 연산기호는 파이(π)를 이용한다.

- 표기 형식 : π<추출속성리스트>(테이블 이름)


3) 조인

- 두 테이블로부터 조건에 맞는 관련된 튜플들을 하나의 튜플로 결합하여 하나의 테이블로 만드는 연산

- 동일조인, 자연조인, 외부조인, 세타조인

- 연산기호는 ▷◁

- 표기 형식 : 테이블1 ▷◁ <조인조건> 테이블2

-> 동일 조인 : '='연산자만을 사용하여 조건을 표현(중복되는 속성도 모두 표현)

-> 자연 조인 : 동일 조인한 결과에서 중복되는 속성을 제거

-> 외부 조인 : 조건에 맞지 않는 튜플도 결과 테이블에 포함 시켜 조인하는 방법으로 해당 자료가 없는 부분은 NULL값이 된다.

-> 세타 조인: '='외의 연산자를 이용해 조건 수식을 표현하여 조인하는 연산자.


4) 디비전

- 'A DIVISION B'는 B테이블의 조건을 만족하는 튜플들을 테이블 A에서 추출하는 연산


|관계해석

결과를 얻기 위한 과정을 표현하는 것으로 연산자 없이 정의하는 방법을 이용하는 비절차적 언어

- 튜플 관계 해석, 도메인 관계 해석

- 표기 형식 : {결과값|조건}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

VIEW

- 기본 테이블의 기본키를 포함한 속성 집합으로 뷰를 구성해야 삽입/삭제/갱신이 가능

- 정의된 뷰는 다른 뷰를 정의하는데 기초가 될 수 있다.

- 둘 이상의 테이블에서 유도된 뷰는 변경X

- DISTINCT / GROUP BY / HAVING 을 사용해 만든 뷰는 변경X

- DROP VIEW 뷰 { RESTRICT | CASCADE }

  -> RESTRICT : 해당 뷰를 다른 곳에서 참조시 제거 취소

  -> CASCADE : 해당 뷰를 다른 곳에서 참조시 참조하는 다른 뷰나 제약 조건 까지 모두 제거


Embeded SQL

: 응용 P/G에서 SQL문을 내포해서 실행되도록 호스트 P/G에 삽입한 SQL


Stored Procedure

: PL/SQL처럼 특정한 SQL문을 저장해놓고 가져다 씀


이상(Anomaly)

: 테이블의 일부 속성들이 종속으로 인해 데이터 중복이 발생하고 이로 인해 테이블 조작 시 문제 발생하는 현상

- 삽입 이상

- 삭제 이상

- 갱신 이상

-> 원인 : 여러가지 종류의 사실들을 하나의 릴레이션에 표현하기 때문

-> 해결 : 속성들 간의 종속성을 분석해서 하나의 종속성은 하나의 릴레이션에 표현되도록 분해  이를 정규화라고 한다


함수적 종속(Functional Dependency)

: 어떤 테이블 R에서 X와 Y를 각각 R의 속성 집합의 부분 집합이라 할때 속성 X의 값 각각에 대해 시간에 관계없이 항상 속성YY의 값이 오직 하나만 연관되어 있을 때 'Y는 X에 함수적 종속' or 'X가 Y를 함수적으로 결정한다'라고 하며 X->Y로 표기한다. X를 결정자 Y를 종속자(X가 결졍되면 Y도 결정된다.)

- 완전 함수적 종속 : X->Y이면서도 X의 임의의 진부분집합인 Z와는 종속관계가 없는 속성

- 부분 함수적 종속 : X->Y이면서도 X의 임의의 진부분집합인 Z와도 Z->Y인 속성


정규화(Nomarlization)

: 테이블의 속성들의 종속적인 관계를 이용해 테이블을 무손실 분해하는 과정으로 가능한 중복을 제거하여 삽입/삭제/갱신 이상의 발생가능성을 줄이는 것이다.

비정규 릴레이션

↓    도메인이 원자값

제 1정규형 : 테이블에 속한 모든 속성의 도메인이 원자값임

↓    부분적 함수 종속 제거

제 2정규형 : 기본키가 아닌 모든 속성이, 기본키에 대하여 완전 함수적 종속을 만족

↓    이행적 함수적 종속 제거 : a->b이고 b->c일때, a->c를 만족하는 관계

제 3정규형 : 기본키가 아닌 모든 속성이 기본키에 대해 이행적 종속을 만족하지 않음

↓ 결정자가 후보키가 아닌 함수종속 제거

BCNF : 모든 결정자가 후보키

↓ 조인종속 제거

제 5정규형 : 테이블 R의 모든 조인 종속이 R의 후보키를 통해서만 성립( 조인 종속 : 테이블 R과 R의 프로젝션들을 모두 조인한 결과가 동일)


시스템 카탈로그(데이터 사전)

: DBA의 도구로써 DB에 저장되어 있는 모든 데이터 개체들에 대한 정의나 명세에 대한 정보가 수록되어 있는 테이블

: 사용자와 DBMS를 통해 수정X, 접근은 가능

: 시스템 카탈로그에 저장된 내용을 메타 데이터라고 한다.


인덱스

: 튜플에 빠르게 접근하기 위해 <키값, 포인터> 쌍으로 구성되는 데이터 구조

- 기본 인덱스 : 기본키를 위한 인덱스, 관계형 DBMS에서는 모든 기본키에 자동적으로 기본 인덱스를 생성

- 보조 인덱스 : 기본 인덱스가 아닌 나머지

- 클러스터 인덱스 : 인덱스 테이블의 키 값 순서와 튜플의 물리적 순서와 튜플의 물리적 순서를 동일하게 유지하는 인덱스

#행 이주

: 인데스 테이블에서 튜플의 값을 자료형 보다 크게 넣으면 해당 튜플은 뒤로 밀려나게 된다.

#종류

- m-원 검색트리 : 이진 검색 트리를 수정한 것, 한 노드가 최대 m-1개의 키값과 최대 m개의 서브 노드를 가진다. 포인터의 최대 개수는 m개, 키 값의 최대 개수는 m-1개

- B 트리 : 균형잡힌 m-원검색트리, 루트는 단말 노드가 아닐 떄, 적어도 2개의 서브트리를 가진다. 루트도 아니고 단말 노드도 아니라면 최소 m/2, 최대 m개의 서브노드를 가진다. 모든 단말 노드들은 같은 높이를 가진다.

- B* 트리 : B-트리의 빈번한 노드 분할을 줄이는 목적으로 제시, 각 노드가 최소한 2/3가 채워진 상태여야 한다. 한 노드가 가득차고 인접 노드가 모두 가득찰 때까지 분할을 지연시킨다.

- B+ 트리 : B-트리의 순차적인 순회 작업에 대한 해결책으로 제시, 인덱스 세트와 순차 세트로 구분

인덱스 세트 : 단말 노드가 아닌 노드들로 구성(키 값을 단말 노드에 있는 키 값으로 직접 찾아가는데 사용)

순차 세트 : 단말 노드로만 구성( 모든 키 값을 단말 노드에 나열. 인덱스 세트의 키 값들도 다시 한번 나열)

순차적으로 Linked list를 구성하고 있어서 순차적 처리가 가능


트랜잭션

:DB에서 하나의 논리적 기능을 수행하기 위한 일련의 연산 집합, 작업의 논리적 단위

- COMMIT : 하나의 트랜잭션이 정상적으로 종료될 경우 수행되는 연산

- ROLLBACK : 하나의 트랜잭션이 비정상적으로 종료될 경우 수행되는 연산

- 특징(ACID)

1. 원자성 : 트랜잭션의 연산을 DB에 모두 반영되든지 전혀 반영되지 않던지 둘 중 하나

2. 일관성 : 시스템이 가지고 있는 고정적인 요소는 트랜잭션의 연산이 끝나도 동일

3. 독립성 : 한 트랜잭션이 데이터를 갱신하는 동안 다른 트랜잭션들은 접근하지 못한다.

4. 영속성 : 트랜재션이 완료된 후에는 시스템 오류가 발생해도 트랜잭션에 의해 변경된 내용은 보존됨

- 상태

1. 활동

2. 실패

3. 철회 : 트랜잭션이 비정상적으로 종료되어 ROLLBACK 연산을 수행한 상태

4. 부분완료 : COMMIT 연산 하기전

5. 완료


회복

: 트랜잭션 실행 도중 장애가 발생해 DB가 손상되었을 경우 다시 복구하는 작업

- 장애의 유형

1.  실행장애 : 사용자의 실수/ 무결성 규칙 위반 등으로 질의 실행이 실패

2. 트랜잭션 장애 : 비정상적인 상황으로 인해 트랜잭션 실행이 중지

3. 시스템 장애 : DB에는 손상을 입히지 않으나 H/W의 오동작 , 정전

4. 미디어 장애 : 저장장치의 손상 / 오동작으로 DB의 일부 또는 전부가 물리적으로 손상되는 현상

- 회복 관리기

->트랜잭션이 성공적으로 완료 되지 않으면, Log를 이용해 트랜잭션이 DB의 모든 변환를 취소해서 회복

->트랜잭션이 성공적으로 완료 되었으나 디스크에 반영되지 않았을 경우, Log를 이용해 재작업을 수행

(COMMIT만 하지 못했다는 의미 : 부분완료)

-> COMMIT을 수행 했고 장애가 생기면 REDO / 아니면 UNDO

- 회복 기법

1. 연기 갱신 : 트랜잭션이 성공적으로 종료될 때까지 DB에 대한 실질적인 갱신 연기 / 실행되는 동안 변경된 내용은 Log에 보관 / 부분완료 시점에 Log로 DB에 반영 / 애초에 DB에 적용을 안하기에 장애가 생격도 Redo 작업만 하면된다.

2. 즉각 갱신 : 바로 DB에 반영 / 장애를 대비해 모든 변경내용 Log에 저장 / Redo와 Undo 모두 수행

3. 그림자 페이지 : 갱신 이전의 DB를 페이지단위로 구성해 카피해놓고 실제 페이지를 대상으로 트랜잭션에 대한 변경작업 반영 / 장애생격서 RollBack할 때, 해당 페이지만 복구, Log와 Redo, Undo 모두 필요없다.

4. 검사점 기법 : Log전체를 조사하는 걸 피하기 위한 기법 / 트랜잭션 실행중 주기적으로 변경 내용이나 상황과 검사점을 같이 Log에 저장

5. 미디어 회복 기법 : DB의 내용을 주기적으로 안전한 스토리지에 덤프 / 장애 발생시 가장 최근의 덤프를 디스크에 적재하고 Log를 통해 최근의 트랜잭션에 대해 Redo


병행제어(Concurrency Control)

: 동시에 다수의 트랜잭션을 수행할때, DB의 일관성 파괴되지 않도록 트랜잭션끼리 상호작용을 제어하는 기술

: 다수의 트랜잭션들이 동시에 인터리빙하게 실행되는 것

- 목적

1. DB의 공유를 최대화

2. 시스템 활용도 최대화

3. 사용자에 대한 응답 시간 최소화

4. 단위 시간당 트랜잭션 처리 건수 최대화

5. DB의 일관성 유지

- 병행제어가 없으면 생기는 문제점 

1. 갱신 분실 : 다수의 트랜잭션이 같은 데이터를 공유, 갱신할 때 갱신 결과의 일부가 분실

2. 모순성 : 다수의 사용자가 동시에 같은 데이터를 갱신할 때, DB 내의 데이터들이 불일치

3. 연쇄 복귀 : 병행 수행되던 트랜잭션들 중 하나가 Rollback하는 경우, 다른 트랜잭션도 Rollback

- 잠금 

: DB관리 방법, 하나의 트랜잭션이 사용하는 데이터에 다른 트랜잭션이 접근 못하게 하는 것

: 잠금 -> 실행 -> 해제

- 잠금단위

-> DB, 테이블, 레코드, 필드

-> 단위가 커지면 Locking Overhead는 감소하지만 공유성은 낮아진다.

-> 단위가 작아지면 Locking Overhead는 증가하지만 공유성은 높아진다.

- 교착상태(Dead Lock)

- 공유잠금(Shared Lock) : 다른 트랜잭션은 읽기만 가능

- 배타잠금(Exclusive Lock) : 다른 트랜잭션은 일기/쓰기 불가능

- 병행 제어 기법의 종류

1. 2-단계 잠금규약 : 트랜잭션 스케줄의 직렬성을 보장하는 대표적인 잠금 기법(트랜잭션들이 인터리빙하게 실행될때 그순서)

-> 확장단계( 트랜잭션이 잠금만가능하고 해제는 불가능한단계) / 축소단계(트랜잭션이 해제만가능하고 자금은 불가능한 단계)

-> 스케줄의 직렬성을 보장한다는 장점은 있지만 교착 상태는 예발할 수 없다는 단점.

2. 타임 스탬프 순서 : 시스템이 각 트랜잭션을 실행할 때 부여하는 값

-> 트랜잭션 스케줄의 결과와 직렬 스케줄의 결과가 동일함을 보장하는 기법

-> 직렬성 순서를 결정하기 위해, 트랜잭션 간의 실행 순서를 미리 결졍하는 기법

-> 트랜잭션을 실행하기전에 타임 스탬프를 부여하고, 그 순서에 따라 트랜잭션을 수행

-> 교착 상태가 발생하지 않는다,


보안

- 보안 기법

1. SQL이용한 권한 부여 기법

-> 뷰를 이용하는 방법

-> DCL을 이용해 권한 부여와 취소

2. 암호화 기법

-> 개인키 암호화(DES)

-> 공용키 암호화(RSA)


튜닝

- DB의 환경 등을 조정해 DBMS의 성능을 향상시키는 작업

- DBMS의 높은 작업 처리량과 짧은 응답 시간을 갖도록 하는 것이 중요

- 목표

-> 디스크 블록에 대한 접근 횟수 최소화

-> 신속한 재사용

-> 모든 SQL문은 공유가 가능하도록, 작성 규칙을 준수하여 작성

-> 다수의 사용자가 자원을 안정적으로 사용하게끔 잠금 기능을 최소화

생략


객체 지향 데이터베이스(ODB : Object - oriented - Database)

- 객체 지향 데이터베이스의 구성

-> 객체와 객체 식별자(OID)

-> 속성과 메소드

-> 클래스와 인스턴스

-> 상속

-> 오버로딩과 오버라이딩

- 객체 관계 데이터베이스(ORDB)

특징

1. 표준으로 ISO에서 제시한 SQL3

2. 확장 가능 데이터 타입, 사용자 정의 데이터 타입, 사용자정의 함수 지원

-> 대용량의 데이터 저장을 위해 LOB타입이 있다.

->가변 길이 문자 스트링(CLOB)/가변 길이 이진 스트링(BLOB)

 

------------------------------------------------------------------------------------------------------------------------------------------------------------------------



'Free' 카테고리의 다른 글

오늘의 노래  (0) 2016.06.14
정보처리기시 실기 13년 2회  (0) 2016.06.13
정보처리기사 실기 13년1회  (0) 2016.06.13
정보처리기사 실기 최근 기출된 용어들  (0) 2016.06.12
JAVA 난수생성  (0) 2016.06.08

자바와 데이터베이스

JDBC(Java Database Connectivity)는 자바 API의 하나로서 데이터베이스에 연결하여서 데이터베이스 안의 데이터에 대하여 검색하고 데이터를 변경할 수 있게 한다. 따라서 JDBC를 사용하면 자바 프로그램으로 회사같은 곳에서 사용하는 데이터베이스에 접그하여서 여러가지 작업을 할 수 있게 된다.


|데이터베이스 프로그램 개발 절차

1. DBMS(DataBase Management System) 설치( 오라클, MySQL)

2. DBMS에 필요한 JDBC 드라이버를 설치

3. JDBC가 제공하는 기능을 이용하여 데이터베이스 응용 프로그램을 개발


MySQL 과 JDBC드라이버를 설치합시다.

MySQL : http://dev.mysql.com/downloads/file/?id=463530

JDBC : http://dev.mysql.com/downloads/connector/j/


|JDBC를 이용한 데이터베이스 사용 절차

1. URL로 지정된 JDBC 드라이버를 적재

ex) forName( )이라는 메소드를 사용

try{

Class.forName("com.mysql.jdbc.Driver");

}

catch(ClassNotFoundException e){
    System.out.println("드라이버를 찾을 수 없습니다.");

}


2. 사용자 이름과 패스워드를 가지고 데이터베이스에 연결

ex) getConnection( )을 호출

String url = "jdbc:mysql://localhost/book_db"; // jdbc:서브프로토콜:서브내임

String user = "root";

String password = "password";

con = DriverManager.getConnection(url, user, password);

출력결과

3. SQL문장을 작성하여서 전공하고 실행. SQL명령어의 결과로 생성되는 결과 집합을 얻는다.

사용되는 것

- Connection 객체 : 자바와 데이터베이스 사이의 연결을 담당

- Statement 객체 : SQL 문장을 실행합니다.

EX) Statement s = con.createStatement();    // 문장객체 생성

     String select = "SELECT * FROM books ORDER BY jaehyeok; // SQL 문장 생성

     ResultSet rows = s.executeQuery(select);    // SQL 문장 실행

4. 결과 집합을 화면에 표시하거나 겨로가 집합을 처리한다. 사용이 끝나면 연결을 해제.

'Programming Language > Java' 카테고리의 다른 글

9. 네트워크 프로그래밍  (0) 2016.06.10
8. 입출력 - 형식 입출력  (0) 2016.06.10
7. 입출력 - 문자스트림  (2) 2016.06.09
6. 입출력-바이트스트림  (0) 2016.06.08
5. 스레드  (0) 2016.06.08

네트워크 프로그래밍의 개요


|서버와 클라이언트

네트워크에는 서버와 클라이언트가 존재한다. 이들은 미리 정의된 프로토콜을 이용하여서 서로 간에 통신을 한다.


|자바와 네트워킹

자바에서 네트워크 프로그래밍을 위한 패키지는 java.net이다.


URL클래스

자바에서는 URL 객체를 이용하여 URL의 주소를 나타낸다.

 URL java = new URL("http://java.sun.com/"); // 절대 경로

 URL reference = new URL(java, "reference.html"); // 상대경로


<예제>

URL문자열로부터 각가의 요소 파싱

출력결과


|URL클래스를 이용한 읽기

URL 클래스 메소드인 openStream( )을 이용하면 인터넷상의 URL에서 직접 그 내용을 입력 스트림처럼 읽을 수 있다.


<예제>

출력결과


|URLConnection 클래스

URL 객체를 생성한 후에 URL 클래스의 openConnection( ) 메소드를 호출하면 URLConnection 객체를 반환한다. 이 객체를 이용하여 외부 URL에 의하여 표현되는 서버에 접속할 수 있으며 또한 접속에 앞서서 여러 가지 통신 파라미터들을 설정할 수 있다.

try{

URL java = new URL("http://java.sun.com/");

URLConnection javac = java.openConnection( );

javac.connect = java.openConnection( );

} catch (MalformedURLException e){

} catch (IOException e){

}


TCP를 이용한 통신

 URL과 URLConnections 클래스는 인터넷상의 자원을 접근하는데 상대적으로 고수준의 메카니즘. 그러나 가끔은 저수준의 네트워크 통신 기능이 필요한 경우도 있다. 예를 들면 클라이언트-서버 응용 프로그램을 만드는 경우


|소켓이란?

하나의 포트에 하나의 소켓을 만들어 결합 


TCP를 이용한 서버 제작


서버 제작 5단걔

1. ServerSocket 객체 생성 

ex) ServerSocket server = new ServerSocket(portNumber, queueLength);

-> 포트 번호가 portNumber인 포트를 기반으로 하는 소켓을 생성

-> queueLenght : 서버에 연결되기를 기다리는 클라이언트의 최대 개수


2. accept( ) 메소드 호출

ex) Socket clientSocket = server.accept( );

-> accept( ) 메소드는 클라이언트와 연결이 되면 새로운 Socket 객체를 반환

-> 이 새로운 Socket 객체를 이용하여서 서버는 클라이언트와 상호 대화


3. 소켓으로부터 스트림 객체를 얻는다.

ex) InputStream input = clientSocket.getInputStream( );

    OutputStream output = cliendtSocket.getOutputSt

4. 상호 대화 단계

서버와 클라이언트는 스트림을 이용하여서 상호 대화한다.


5. 종료

close( ) 메소드를 호출




'Programming Language > Java' 카테고리의 다른 글

10. 데이터베이스 프로그래밍  (0) 2016.06.10
8. 입출력 - 형식 입출력  (0) 2016.06.10
7. 입출력 - 문자스트림  (2) 2016.06.09
6. 입출력-바이트스트림  (0) 2016.06.08
5. 스레드  (0) 2016.06.08

Scanner 클래스

: 형식이 있는 입력을 토큰으로 쪼개고 각각의 토큰을 자료형에 따라 변환한다. 스캐너는 공백 문자를 이용하여 각각의 토큰을 분리

(공백문자 : 공백, 탭, 줄마침 기호)


<예제>

출력결과


<예제>

출력결과


|PrintStream 클래스와 PrintWriter 클래스

PrintStream : 바이트 입력을 받아서 텍스트 형태로 출력(ex, System.out)

PrintWriter : 문자 입력을 받아서 텍스트 형태로 출력


|print( )와 println( ) 메소드

print( ) 나 println( )을 호출하면 먼저 값을 toString( ) 메소드를 호출하여 변환한 후에 출력

간단하게 값들을 포맷할 수 있지만 결과를 세밀하게 제어할 수는 없다.


|format( ) 메소드

형식 제어 문자열에 기초하여 다수의 인수를 포맷


<예제>

출력결과

->format( ) 메소드를 이용해 값을 세밀하게 제어할 수 있다.





'Programming Language > Java' 카테고리의 다른 글

10. 데이터베이스 프로그래밍  (0) 2016.06.10
9. 네트워크 프로그래밍  (0) 2016.06.10
7. 입출력 - 문자스트림  (2) 2016.06.09
6. 입출력-바이트스트림  (0) 2016.06.08
5. 스레드  (0) 2016.06.08
문자스트림

문자 스트림은 입출력 단위가 문자가 된다.


|Reader와 Writer 클래스

Reader클래스의 메소드

int read( ) : 한 바이트를 읽어서 int 타입으로 반환, 읽을 값이 없으면 -1을 반환

int read(byte[] buf) : buf의 크기만큼 데이터를 읽어서 buf에 저장하고 읽은 바이트 수를 반환

int read(byte[] buf, int offset, int length) : length만큼의 데이터를 읽어서 buf의 offset 위치에 저장하고 읽은 바이트 수를반환

void mark(int readAheadLimit) : 스트림의 현재 위치를 표시해 놓는다.

boolean markSupported( ) : 마크 기능이 지원되는지 여부를 반환

abstract void close( ) : 스트림을 닫고 모든 자원을 반납

boolean ready( ) : 스트림이 읽을 준비가 되었는지 여부를 반환

void reset( ) : 스트림을 리셋

long skip(long n) : n개의 문자를 건너뛴다.


Writer클래스의 메소드

void write(int data) : data의 하위 8비트를 출력

void write(byte[] buf) : buf[]에 저장된 바이트들을 출력

void write(byte[] buf, int offset, int length) : buf의 offset 위치에 length만큼의 바이트를 출력

void mark(int readAheadLimit) : 스트림의 현재 위치를 표시해 놓는다.

abstract void flush( ) : 스트림 버퍼의 데이터를 모두 출력

abstract void close( ) : 스트림을 닫고 모든 자원을 반납

Writer append(char c) : 문자 c를 스트림에 추가

void write(String str) : 문자열을 출력

void write(String str, int off, int len) : 문자열에서 지정된 범위를 출력


|FileReader와 FileWriter 클래스

파일로부터 텍스트 데이터를 읽고 쓰는데 사용


FileReader의 생성자

FileReader(File file) : 주어진 file을 이용하여 새로운 FileReader 객체를 생성

FileReader(String fileName) : 주어진 파일의 이름을 이용하여 새로운 FileReader 객체를 생성

FileWriter의 생성자

FileWriter(File file) : 주어진 File 객체를 이용하여서 새로운 FileWriter 객체를 생성

FileWriter(String fileName) : 주어진 파일 이름을 이용하여서 새로운 FileWriter 객체를 생성

FileWriter(Stirng fileName, boolean append) : append가 true이면 주어진 파일의 끝에 텍스트를 추가


<예제>

출력결과

->문자열을 파일에 저장할 때는 write( ) 메소드를 호출하고 문자열 객체를 매개 변수로 주면된다.

->문자를 하나씩 읽을 때는 int 타입 변수를 char로 형변환


|InputStreamReader와 OutputStreamWriter 클래스

바이트 스트림과 문자 스트림을 연결하는 두 개의 범용 브릿지 스트림.

InputStreamReader는 바이트 스트림을 문자 스트림으로 변환. 효율성을 위해 InputStreamReader를 BufferedReader로 감싸는것이 좋다

ex) BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

OutputStreamWriter는 문자 스트림을 바이트 스트림으로 변환. 효율성을 위해 BufferedWriter로 감싸는것이 좋다.

ex) BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));


|BufferedReader와 BufferedWriter 클래스



'Programming Language > Java' 카테고리의 다른 글

9. 네트워크 프로그래밍  (0) 2016.06.10
8. 입출력 - 형식 입출력  (0) 2016.06.10
6. 입출력-바이트스트림  (0) 2016.06.08
5. 스레드  (0) 2016.06.08
4. 예외처리  (0) 2016.06.08

스트림(stream)

"순서가 있는 데이터의 연속적인 흐름"


|바이트 스트림과 문자 스트림

바이트 스트림 : 8비트의 바이트 단위로 입출력하는 클래스, 이진 데이터를 읽고 쓰기 위하여 사용.

문자 스트림 : 문자 단위로 입출력하는 클래스, 기본적으로 유니코드를 저장.


|데이터 싱크와 데이터 처리

데이터 싱크 스트림 : 소스나 목적지에 데이터를 입출력(메모리, 파이프, 파일)

데이터 처리 스트림 : 데이터 가공(그 외) 


바이트 스트림

모든 바이트 스트림은 InputStream과 OutputStream에서 파생


|InputStream과 OutputStream 클래스

int read( ) : 한 바이트를 읽어서 int 타입으로 반환, 읽을 값이 없으면 -1을 반환

int read(byte[] buf) : buf의 크기만큼 데이터를 읽어서 buf에 저장하고 읽은 바이트 수를 반환

int read(byte[] buf, int offset, int length) : length만큼의 데이터를 읽어서 buf의 offset위치에 저장하고 읽은 바이트 수를 반환

void write(int data) : data의 하위 8비트를 출력

void write(byte[] buf) : buf[]에 저장된 바이트들을 출력

void write(byte[] buf, int offset, int length) : buf의 offset 위치에 length만큼의 바이트를 출력


|FileInputStream과 FileOutputStream 클래스

FileInputStream 클래스는 파일에서 바이트를 읽고 FileOutputStream 클래스는 파일에다가 바이트를 쓴다.


FileInputStream의 생성자

1. FileInputStream(File file) : File 객체에 연결된 파일로부터 바이트를 읽는 객체를 생성한다.

2. FileInputStream(String name) : 파일의 경로 이름이 name인 파일과 연결된 입력 담당 객체를 생성한다.


FileOutputStream의 생성자

1. FileOutputStream(File file) : File 객체가 나타내는 파일에 바이트를 쓰는 객체를 생성한다.

2. FileOutputStream(String name) : 파일의 경로 이름이 name인 파일과 연결된 출력 담당 객체를 생성한다.

3. FileOutputStream(String name, boolean append) : append가 true이면 파일의 끝에 바이트를 추가하고 false이면 바이트를 기존의 바이트 위에 겹쳐서                                                                     쓴다. 

<예제>

출력결과

->read( )가 int 값을 반환하는 이유는 입력 스트림의 끝을 표시하는데 -1을 사용하기 위해

->더 이상 사용하지 않는 스트림을 닫는 것이 중요. 소스에서 만약 오류가 발생했을 경우에도 finally 블록을 사용하여 스트림을 닫고 있다. 만약 스트림을 닫지 않으면 심각한 자원 누출이 발생한다.


|BufferedInputStream과 BufferedOutputStream 클래스

각 read나 write 요청은 운영체제에 의하여 요청하는 즉시 처리된다. 이것은 매우 비효율적인 방법이다. 왜냐하면 입출력 요청은 디스크 접근이나 네트워크 접근같은 매우 시간이 많이 걸리는 동작을 요구하기 때문이다. 따라서 오버헤드를 줄이기 위하여 버퍼링된 스트림을 제공


BufferedInputStream(InputStream in) : 입력 스트림 in을 감싸는 버퍼 입력 스트림 객체를 생성

BufferedInputStream(InputStream in, int size) : 버퍼 크기가 size인 버퍼를 가진 버퍼 입력 스트림을 생성


버퍼가 없는 스트림을 버퍼가 있는 스트림으로 변경

inputStream = new BufferedInputStream(new FileInputStream("data.txt"));

outputStream = new BufferedOutputStream(new FileOutputStream("data.txt"));


<예제>

출력결과

->여기서 만약 flush( )가 실행되지 않으면 출력이 나오지 않는다. 그 이유는 아직 버퍼가 다 차지 않았기 때문에 버퍼를 파일에 쓰지 않는다.


|DataInputStream과 DataOutputStream 클래스

기초 자료형 단위로 데이터를 읽고 쓸 수 있다.

<예제>

출력결과

->입력순서와 출력순서의 데이터타입을 동일하게 맞쳐야한다.


|ObjectInputStream과 ObjectOutputStream 클래스

객체의 입출력을 지원. 객체를 파일에 저장할 수 있고 또 반대로 파일에 저장된 객체를 읽어 들일 수 있다.

객체를 파일에 저장하려면 객체가 가진 데이터들을 순차적으로 데이터로 변환하는 절차가 필요 , 이것

직렬화(serialization)라고 한다. 어떤 클래스가 직렬화를 지원하려면 Serializable이라는 인터페이스를 구현해야 된다.


<예제 >

현재 날짜 객체를 저장하였다가 다시 읽어서 콘솔에 표시하기

출력결과

문자스트림은 다음 포스팅~

'Programming Language > Java' 카테고리의 다른 글

8. 입출력 - 형식 입출력  (0) 2016.06.10
7. 입출력 - 문자스트림  (2) 2016.06.09
5. 스레드  (0) 2016.06.08
4. 예외처리  (0) 2016.06.08
3. Collections클래스  (0) 2016.06.08

스레드란?

병렬작업(multi-tasking)은 여러 개의 작업을 동시에 실행시켜서 컴퓨터 시스템의 성능을 높이기 위한 기법이다.

다중 스레딩(multi-threading)은 이 병렬 작업의 아이디어를 프로그램 안으로 가져온 것, 즉 하나의 프로그램이 동시에 여러 가지 작업을 할 수 있다. 

이들작업을 스레드(thread)라고 부른다.


|프로세스와 스레드

프로세스는 자신만의 데이터를 가지는 데 반하여 스레드들은 동일한 데이터를 공유한다.(스레드는 하나의 프로세스 안에 존재)

프로세스 : 독자적으로 실행이 가능한 환경, 프로그램이 실행되면 프로세스가 된다.

스레드 : 경량 프로세스라고도 불림, 스레드들은 프로세서 안에서 존재, 메모리와 파일을 포함하여 프로세스의 모든 자원을 공유한다.

      모든 자바 프로그램은 적어도 하나의 스레드를 가지고있다. 즉 main( ) 스레드라고 부르는 하나의 스레드로 출발.


스레드 생성과 실행

스레드를 만드는 방법에는 다음의 두 가지가 있다.

1. Thread 클래스를 상속하는 방

2. Runnable 인터페이스를 구현하는 방법


Thread 클래스

Thread( ) : 매개 변수가 없는 기본 생성자

Thread(String name) : 이름이 name인 Thread 객체를 생성

Thread(Runnable target, String name) : Runnable을 구현하는 객체로부터 스레드를 생성

static int activeCount( ) : 현재 활동 중인 스레드의 개수를 반환

String getName( ) : 스레드의 이름을 반환

int getPriority( ) : 스레드의 우선 순위를 반환

void interrupt( ) : 현재의 스레드를 중단한다.

boolean isInterrupted( ) : 현재의 스레드가 중단될 수 있는지를 검사

void setPriority(int priority) : 스레드의 우선 순위를 지정

void setName(String name) : 스레드의 이름을 지정

static void sleep(int milliseconds) : 현재의 스레드를 지정된 시간만큼 재운다.

void run( ) : 스레드가 시작될 때 이 메소드가 호출

void start( ) : 스레드를 시작

static void yield( ) : 현재 스레드를 다른 스레드에 양보


Thread 클래스를 상속하기

class Counting extends Thread{

public void run(){

for(int i=0;i<10;i++)

{

System.out.println(i);

}

}

}

-> Thread 클래스를 상속받아 서브 클래스를 만들고 run( ) 메소드를 오버라이드하는 방법. run( ) 메소드에 스레드가 수행하여야 할 작업 내용이 들어감. 이 서브 클래스의 인스턴스를 생성하고 start( ) 메소드를 호출하면 스레드가 실행

public class Test{

public static void main(String args[ ]){

Thread t = new Counting();

t.start();

}

}


|Runnable 인터페이스를 구현하는 방법( 추천 )

Thread 클래스를 확장하는 방법은 하나의 큰 단점이 존재, 자바에서는 단일 상속만이 가능하므로 다른 클래스를 이미 상속한 클래스는 스레드로 만들 수 없다. 따라서 Runnabel 인터페이스를 구현.

1. Runnable을 구현하는 클래스를 생성

2. Runnable 클래스에 run( ) 메소드를 작성

3. Thread 클래스의 객체를 생성, Runnable 객체를 Thread 생성자의 매개 변수로 넘김

4. Thread객체의 start( ) 메소드를 호출


< 1, 2에 따라 Runnable을 구현하는 클래스를 작성>

class Counting implements Runnable{

public void main( )

{

for(int i =0;i<10;i++)

{

System.out.println(i);

}

}

}

<3, 4에 따라 Counting의 객체를 만들고 Thread 클래스의 객체도 생성>

public class Test{

public static void main(String args[ ] ){

Counting c = new Counting( );

Tread t = new Tread( c );

t,start( );

}

}


<예제-1>

0부터 9까지 세는 스레드 두 개 만들기!

 

출력결과


<예제-2>

경마 게임 : 난수를 매개 변수로 하여 sleep( )을 호출하는 스레드를 여러 개 작성. sleep( ) 메소드는 지정도니 시간 동안 현재 스레드의 실행을 중단.

출력결과


스레드 상태


스레드의 스케줄링

스케줄링 : 어떤 순서로 스레드를 수행시킬 것인가를 결정( 자바 런타임 시스템은 우선 순위 스케줄링을 이용 , 만일 같은 우선 순위를 가진 스레드들이 있다면 이들은 라운드로빈 방식(스레드 각각에게 균등하게 CPU 시간을 분배하는 것)으로 수행 )

자바의 스케줄링 방식은 선점 형식( 더 높은 우선 순위를 가지는 스레드가 들어오면 수행되고 있는 스레드를 강제로 중단시키고 새로운 스레드를 수행)


|스레드의 우선순위

스레드는 생성될 때 자신을 생성한 스레드로부터 우선 순위를 상속 받음.


|sleep( )

현재 스레드의 실행을 지정된 시간 동안 중단( CPU의 시간을 다른 스레드에게 양보하는 효과적인 수단 )

 <1초 간격으로 메시지를 출력>

출력결과



|인터럽트

스레드로 하여금 현재 실행하고 있는 것을 멈추고 다른 것을 하도록함( 스레드가 수시로 인터럽트 검사를 하는 메소드를 호출하여야 한다)

<sleep()상태에서 인터럽트를 검사>


|조인

join( ) 메소드는 하나의 스레드가 다른 스레드의 종료를 기다리게 하는 메소드.( t가 현재 실행 중인 스레드 객체이면 다음 문장은 t가 끝날 때까지 현재의 스레드의 실행을 중단)

ex) t.join( );


동기화

한 번에 하나의 스레드만이 공유 데이터를 접근할 수 있도록 제어하는 방법

<동기화 문제 예시 - 저금,인출>

-> 하나의 은행 계좌를 생성하고 두 개의 스레드에게 매개 변수로 넘긴다. 상식적으로는 저금이 먼저 이루어지기 때문에 절대 마이너스가 될 수 없다. 그러나 실제 결과를 돌리면 "오류발생"을 출력하게 된다.


|동기화 문제의 이유

동시에 실행되는 스레드 사이에 있는 공유되는 데이터( 공유되는 데이터를 조작하는 코드를 임계 영역), 즉 임계영역에는 항상 하나의 스레드만이 존재하여야 한다.


|동기화된 메소드 이용

synchronized 키워드를 사용하면 어떤 한 순간에는 하나의 스레드만이 임계 영역 안에서 실행하는 것이 보장



스레드간의 조정

ex) 소비자 객체는 생산가자 데이터를 배달하기 전에 데이터를 가져오려고 시도하면 안된다. 또한 생산자도 소비자가 아직 이전 데이터를 가져가지 않았는데 새로운 데이터를 생산하면 안된다.

<생산자 소비자 문제>

출력결과

-> 생산자 스레드가 더 빠른 경우 이전에 생산된 케익을 소비자 스레드가 가져가기 전에 덮어쓰거나/ 소비자 스레드가 더 빠른 경우 똑같으 케익을 두 번 가져가는 경우가 발행


해결방법

1.동기화된 메소드를 사용하여 두 개의 스레드가 동시에 버퍼 객체에 접근하는 것을 막는다.

2.wait(), notify()메소드를 이용하여 명시적으로 알린다.


|wait( )와 notify( )를 사용하는 방법





'Programming Language > Java' 카테고리의 다른 글

7. 입출력 - 문자스트림  (2) 2016.06.09
6. 입출력-바이트스트림  (0) 2016.06.08
4. 예외처리  (0) 2016.06.08
3. Collections클래스  (0) 2016.06.08
2. 컬렉션  (0) 2016.06.07

예외처리?

오류가 발생하게 되면 프로그램이 종료하게 되는데 무조건 종료하는 것보다 프로그램의 오류를 감지하여 프로그램을 종료하거나 오류를 처리한 후에 계속 실행


<예제 - 0으로 나누기>

 

출력결과

-> 산술오류(0으로나누기)


예외처리 기본형식

try{

// 예외가 발생할 수 있는 코드

} catch( 예외종류 참조변수 ){

// 예외를 처리하는 코드

}


<예제1>

출력결과


<예제2>

출력결과


<사용자 정의 예외>

사용자가 예외 객체를 정의

출력결과







'Programming Language > Java' 카테고리의 다른 글

6. 입출력-바이트스트림  (0) 2016.06.08
5. 스레드  (0) 2016.06.08
3. Collections클래스  (0) 2016.06.08
2. 컬렉션  (0) 2016.06.07
1. 제네릭  (0) 2016.06.07



난수 생성에는 두 가지 방법


1. Math 클래스의 random 메소드를 사용하는 방법


ex) int a = (int)(Math.random()*10); // 0~1 사이의 double형 난수를 리턴하여 *10을 해주고 int형으로 변환   


2. Random 클래스를 사용하는 방법


ex) Random random = new Random( );

int a = random.nextInt(10); // 0~10사이의 수 발생  ( nextBoolean() / float nextFloat() )

'Free' 카테고리의 다른 글

오늘의 노래  (0) 2016.06.14
정보처리기시 실기 13년 2회  (0) 2016.06.13
정보처리기사 실기 13년1회  (0) 2016.06.13
정보처리기사 실기 최근 기출된 용어들  (0) 2016.06.12
정보처리기사 실기 DB정리  (0) 2016.06.12

+ Recent posts