디자인 패턴은 소프트웨어 객체지향설계에서 발견된 특정한 패턴을 말한다.

생성패턴(Creational Patterns), 구조패턴(Structural Patterns), 행동패턴(Behavioral Patterns)로 크게 분류된다.

1. 생성패턴(Creational Patterns)

 1) Factory Method : Define an interface for creating a single object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses.

 2) Abstract Factory : Provide an interface for creating families of related or dependent objects without specifying their concrete classes.

 3) Singletone : Ensure a class has only one instance, and provide a global point of access to it.

 

'design patterns' 카테고리의 다른 글

Singletone pattern  (0) 2016.05.16
Factory Method Pattern  (0) 2016.05.15

소켓을 이용한 통신 프로그래밍
클라이언트와 서버간의 일대일 통신
소켓(socket) - 프로세스간의 통신에 사용되는 양쪽 끝단을 의미함
서로 멀리 떨어진 두 사람이 통신하기 위해서 전화기가 필요한 것처럼, 프로세스간의 통신을 위해서는 소켓이필요함
java.net 패키지 이용

 

1. 서버 프로그램에서는 서버소켓을 사용해서 서버 컴퓨터의 특정 포트에서 클라이언트의 연결 요청을 처리할 준비를 한다.
2. 클라이언트 프로그램은 접속할 서버의 IP 주소와 포트정보를 가지고 소켓을 생성해서 서버에 연결을 요청한다.
3. 서버소켓은 클라이언트의 연결요청을 받으면 서버에 새로운 소켓을 생성해서 클라이언트의 소켓과 연결되도록 한다.
4. 이제 클라이언트의 소켓과 새로 생성된 서버의 소켓은 서버소켓과 관계없이 일대일 통신을 한다.

 

• Socket - 프로세스간의 통신을 담당하며, InputStream과 OutputStream을 가지고 있다.
이 두 스트림을 통해 프로세스간의 통신(입출력)이 이루어진다.
• ServerSocket - 포트와 연결(bind)되어 외부의 연결요청을 기다리다 연결요청이 들어오면, Socket을 생성해서 소켓과 소켓간의 통신이 이루어지도록 한다. 한 포트에 하나의 ServerSocket만 연결할 수 있다.

'java' 카테고리의 다른 글

Thread synchronized  (0) 2016.05.09
thread  (0) 2016.05.09
이뮤터블/뮤터블  (0) 2016.04.29
printf()  (0) 2016.04.28
hashcode()  (0) 2016.04.28
public synchronized void withdraw(int money){
if(balance >= money) {
try { Thread.sleep(1000);} catch(Exception e) {}
balance -= money;
}//if
} // withdraw

 

public void withdraw(int money){
synchronized(this){
if(balance >= money) {
try { Thread.sleep(1000);} catch(Exception e) {}
balance -= money;
}//if
}
} // withdraw

'java' 카테고리의 다른 글

TCP 소켓 프로그래밍  (0) 2016.05.09
thread  (0) 2016.05.09
이뮤터블/뮤터블  (0) 2016.04.29
printf()  (0) 2016.04.28
hashcode()  (0) 2016.04.28

멀티 태스킹(Multi-tasking, 다중작업) - 여러 개의 프로세스가 동시에 실행되는 것처럼 보이는 것

멀티 쓰레딩 - 하나의 프로세스 내에서 여러 쓰레드가 동시에 작업을 수행하는 것

 

멀티 쓰레딩의 장점
- CPU의 사용률을 향상시킨다
- 자원을 보다 효율적으로 사용할 수 있다
- 사용자에 대한 응답성이 향상된다
- 작업이 분리되어 코드가 간결해진다

 

멀티쓰레딩의 단점
-멀티쓰레드 프로세스는 여러 쓰레드가 같은 프로세스 내에서 자원
을 공유하면서 작업을 하기 때문에 발생할 수 있는 동기화
(synchronization), 교착상태(deadlock)와 같은 문제들을 고려해서
신중히 프로그래밍해야 함
- 교착상태 : 두 쓰레드가 자원을 점유한 상태에서 서로 상대편이 점
유한 자원을 사용하려고 기다리느라 진행이 멈춰있는 상태를 말함

 

쓰레드를 구현하는 방법

1. Thread 클래스를 상속받는 방법
2. Runnable 인터페이스를 구현하는 방법
 쓰레드 클래스가 상속해야 할 또 다른 클래스가 존재하는 경우 사용

 

실행중인 thread 이름과 개수 구하기

public class TreadTest {
    public static void main(String[] args) {
        System.out.println("main 메서드입니다");
        Thread current =Thread.currentThread();
        System.out.println("현재 실행중인 스레드 이름:"+current.getName());
        int cnt=Thread.activeCount();
        System.out.println("실행중인 스레드 갯수="+cnt);
        
        Thread.currentThread().setName("Prime");
        System.out.println("변경된 쓰레드 이름:"+Thread.currentThread().getName());
    }
}

 

thread 클래스 상속

public class MyThread1 extends Thread {

    public MyThread1(String name){
        super(name);//setName(name);
    }
    public void run(){
        for(int i=0;i<5;i++){
            System.out.println(getName());//Thread 상속받아서 조상인 thread의 메서드 getName()을 직접 호출
        }
        
    }
}

 

runnable 인터페이스 구현

public class MyThread2 implements Runnable{
    public void run(){
        for (int i = 0; i < 5; i++) {
            //thread.currentThread() - 실행중인 Thread를 반환
            System.out.println(Thread.currentThread().getName());
           //runnable 구현하면 Thread클래스의 static메서드인 currentThred()를 호출하여 쓰레드에 대한 참조를 얻어와야만 
//Tread클래스의 메서드를 호출 가능 } } }

 

thread 실행

public class ThreadEx1 {

    public static void main(String[] args) {

        MyThread1 t1=new MyThread1("나의 쓰레드1");
        MyThread2 r=new MyThread2();
        Thread t2=new Thread(r);//thread의 생성자:Thread(Runnable Target)
        
        t1.start();
        t2.start();
        //t1.start(); //exeption 발생, 새로운 쓰레드 생성후 start()할 것
        
        System.out.println("main 쓰레드 종료");
    }
}

 

*start() 메모리 공간의 할당 등 쓰레드의 실행을 위한 기반을 마련한 다음에 run 메서드를 대신 호출해 줌

**모든 쓰레드는 자신의 스택을 할당 받는다. 그러나 힙과 메소드 영역은 모든 쓰레드가 공유한다.

- CPU 이외의 자원을 사용하는 경우 - 싱글쓰레드 프로세스보다 멀티쓰레드 프로세스가 더 효율적
   
***int getPriority() : 쓰레드의 우선순위를 반환
    void setPriority(int newPriority) :쓰레드의 우선순위를 지정한 값으로 변경
    public static final int MAX_PRIORITY=10 //최대 우선순위
    static int MIN_PRIORITY=1 //최소 우선순위
    static int NORM_PRIORITY=5 //보통 우선순위

'java' 카테고리의 다른 글

TCP 소켓 프로그래밍  (0) 2016.05.09
Thread synchronized  (0) 2016.05.09
이뮤터블/뮤터블  (0) 2016.04.29
printf()  (0) 2016.04.28
hashcode()  (0) 2016.04.28

1. Oracle 9i까지 사용되는 exp, imp 유틸리티보다 향상된 Oracle 10g의 기능: 속도와 사용자 편의성

 

2. 환경설정

directory 객체를 통해 간접 접근이 가능

datapump사용을 위해 directory가 만들어져 있어야 하며 사용자에 접근권한 부여

 

SQL> DROP DIRECTORY dpump_dir2;  -- 기존 디렉토리 dpump_dir2 drop

SQL> create or replace directory datapump as ‘/dpdump/EXP_DIR’;

SQL> grant read,write on directory datapump to scott;

SQL> grant create any directory to scott;

 

SQL> SELECT * FROM dba_directories;   --디렉토리 Name,디렉토리 Path 알아보기

 

 

3. 콘솔에서 데이터 백업

expdp scott/tiger DIRECTORY=EXP_DIR DUMPFILE=scottdmp.dmp LOGFILE=scottdmp.log

 

4. impdp

impdp scott/tiger DIRECTORY=EXP_DIR DUMPFILE=scottdmp.dmp REMAP_SCHEMA=scott:newscott


REMAP_DATAFILE='C:\user01.dbf':'/usr/data/user01.dbf' (데이터 파일 변경)

REMAP_TABLESPACE='xxx':'yyy' (테이블스페이스 변경)

 

5. index rebuild 결과 실행

select 'alter index '||index_name||' rebuild tablespace SCOTT_INDEX;' from user_indexes
where tablespace_name='SCOTT_DATA';

 

파라미터 정리 및 참조

http://xfree302.tistory.com/159

http://kinosox.tistory.com/76

http://blog.naver.com/saimoo/100143104217

http://blog.naver.com/itisksc/30088616193

 

 

 

'oracle' 카테고리의 다른 글

Oracle 2개월차 심화학습  (0) 2016.06.29
oracle 1개월차 심화학습  (0) 2016.05.30
그룹함수  (0) 2016.05.04
Transaction ACID  (0) 2016.05.03
Natural Key & Surrogate Key  (0) 2016.05.03

그룹함수는 테이블 전체 데이터에서 통계적인 결과를 구하기 위해 행 집합에 적용하여 하나의 결과를 생산한다.

 

SUM : 그룹의 누적 합계를 반환합니다.

AVG : 그룹의 평균을 반환합니다.

COUNT : 그룹의 총 개수를 반환합니다.

MAX : 그룹의 최대값을 반환합니다.

MIN : 그룹의 최소값을 반환합니다.

 

MIN과 MAX같은 경우 모든 데이터 유형에 사용이 가능하다.

'oracle' 카테고리의 다른 글

oracle 1개월차 심화학습  (0) 2016.05.30
datadump expdp/impdp  (0) 2016.05.09
Transaction ACID  (0) 2016.05.03
Natural Key & Surrogate Key  (0) 2016.05.03
DATA 정규화  (0) 2016.05.03

ACID(원자성, 일관성, 고립성, 지속성)는 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어이다.

  • 원자성(Atomicity)은 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력이다. 예를 들어, 자금 이체는 성공할 수도 실패할 수도 있지만 보내는 쪽에서 돈을 빼 오는 작업만 성공하고 받는 쪽에 돈을 넣는 작업을 실패해서는 안된다. 원자성은 이와 같이 중간 단계까지 실행되고 실패하는 일이 없도록 하는 것이다.

 

  • 일관성(Consistency)은 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미한다. 무결성 제약이 모든 계좌는 잔고가 있어야 한다면 이를 위반하는 트랜잭션은 중단된다.

 

  • 고립성(Isolation)은 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미한다. 이것은 트랜잭션 밖에 있는 어떤 연산도 중간 단계의 데이터를 볼 수 없음을 의미한다. 은행 관리자는 이체 작업을 하는 도중에 쿼리를 실행하더라도 특정 계좌간 이체하는 양 쪽을 볼 수 없다. 공식적으로 고립성은 트랜잭션 실행내역은 연속적이어야 함을 의미한다. 성능관련 이유로 인해 이 특성은 가장 유연성 있는 제약 조건이다. 자세한 내용은 관련 문서를 참조해야 한다.

 

  • 지속성(Durability)은 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미한다. 시스템 문제, DB 일관성 체크 등을 하더라도 유지되어야 함을 의미한다. 전형적으로 모든 트랜잭션은 로그로 남고 시스템 장애 발생 전 상태로 되돌릴 수 있다. 트랜잭션은 로그에 모든 것이 저장된 후에만 commit 상태로 간주될 수 있다.

 

참조:https://ko.wikipedia.org/wiki/ACID

'oracle' 카테고리의 다른 글

datadump expdp/impdp  (0) 2016.05.09
그룹함수  (0) 2016.05.04
Natural Key & Surrogate Key  (0) 2016.05.03
DATA 정규화  (0) 2016.05.03
DDL/DML/DCL  (0) 2016.04.28

 

Primary Key : 테이블에서 레코드를 유일하게 식별하는데 가장 적합한 후보키

Natural Key : 테이블을 이루는 컬럼들 가운데 의미를 담고 있는 후보키

Surrogate Key : 테이블을 이루는 컬럼들 가운데 유일하게 식별하기에 적합한 단일 후보키가 존재하지 않을 때, 임의의 식별번호로 이루어진 후보키를 추가할 수 있다

 

INDEX  검색에서 핵심이 되는 값이 Primary Key가 될 수록 성능 향상

integer Index>>>문자열Index

자연키는 그 자체가 의미를 갖는 검색이 될 수 있지만, 대체키는 레코드의 기본키를 이용한 수정, 삭제, 외레키 참조에만 효율적이다.

대체키는 대체키를 생성하기 위한 트릭이 필요하다.

 

참조: http://bunhere.tistory.com/45

'oracle' 카테고리의 다른 글

datadump expdp/impdp  (0) 2016.05.09
그룹함수  (0) 2016.05.04
Transaction ACID  (0) 2016.05.03
DATA 정규화  (0) 2016.05.03
DDL/DML/DCL  (0) 2016.04.28

관계형 데이터 베이스에서 중복을 최소화하기 위해 데이터를 구조화하는 작업

데이터 일관성

 

1NF

- 행열의 순서에 영향을 받지 않으며 모든 항목에 값이 있으며 중복기능 열이 없어야 한다. NULL허용 x

 

2NF

-이행적 함수 종속이 있을 경우, 정적인 데이터에서 한 필드가 다른 필드를 정의할 수 있을 때 함수종속적인 필드를 분리

 

3NF:’정규화되었다’

-계산열 제거

주민등록번호=생일+나이+성별

 

 

BCNF

 

4NF

 

5NF

 

6NF

 

역정규화로 데이터 처리 성능을 향상시키려는 추세

 

 

참조:https://support.microsoft.com/ko-kr/kb/283878

'oracle' 카테고리의 다른 글

datadump expdp/impdp  (0) 2016.05.09
그룹함수  (0) 2016.05.04
Transaction ACID  (0) 2016.05.03
Natural Key & Surrogate Key  (0) 2016.05.03
DDL/DML/DCL  (0) 2016.04.28

-표준화를 통한 비용절감의 목적

-학습도구로서 계층별 기능과 통신과정을 정립


-응용,표현,세션,전송,네트워크,데이터링크,물리 계층의 7계층

-캡슐레이션: 각 층마다 헤더를 붙여 데이터를 전송
                 (2계층은 오류제어 위한 테일이 씌임)

-디캡슐레이션: 전송매체를 통해 전송된 후 1계층에서 7계층으로 올라가며 헤더가 벗겨지는 과정

-서버와 클라이언트관계가 성립: 층이 서로 요청과 응답을 통해 상호작용

-PDU(Process Data Unit): 2,3,4계층

-응용 Application 
 프로토콜:  
 서비스제공:
 기능:

-표현 Presentation
 프로토콜:  
 서비스제공:
 기능:

-세션 Session
 프로토콜:  
 서비스제공:
 기능:

-전송 Transport
 프로토콜:  
 서비스제공:
 기능:

-네트워크 Network
프로토콜:
서비스제공:
기능:

-데이터링크 Data link
프로토콜:
서비스제공:
기능:

-물리 Physical
프로토콜:
서비스제공:
기능:


참조:

http://beansberries.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-OSI-7-%EA%B3%84%EC%B8%B5

http://enter.tistory.com/141


'etc' 카테고리의 다른 글

oracle charset change  (0) 2016.10.21
servletContext.setAttribute()  (0) 2016.10.11
Session  (0) 2016.09.29
[Freemarker] number format 설정  (0) 2016.06.29
IPv4/IPv6  (0) 2016.04.29

+ Recent posts