SQL*Loader 사용하기

오라클/SQL/SQL공부
 


1. SQL*Loader란 ?
외부 화일에 있는 데이터를 Oracle에 Upload 할 수 있는 유틸리티 입니다.
기본적으로 외부 데이타 화일, 콘트롤화일(로드하는 데이타의 정보를 저장)이 필요합니다.

 

 

2. SQL*Loader 특징
  - 하나 이상의 입력 파일을 사용 가능
  - 로드를 위해 여러 개의 입력 레코드가 하나의 논리적 레코드로 결합될 수 있습니다..
  - 입력 필드는 고정 길이 또는 다양한 길이를 가질 수 있습니다.
  - 입력 데이터는  등   어떤 유형도 가능 합니다.
  - 데이터는 디스크/테이프/명명된 파이프 등 여러 유형의 매체로부터 로드 가능  
  - 데이터가 한 번에 여러 테이블로 로드 가능
  - 텍스트 데이터는 DB 버퍼 캐쉬를 거치지 않고 테이블로 직접 로드될 수 있다.
  - 테이블에 있는 기존 데이터를 대체 하거나(Replace) 추가(Append) 할 수 있는 기능이 있습니다.

 

 

3. SQL*Loader의 사용

 

 


기본문법 :    SQLLDR [keyword=] value  [ [keyword=] value ]...

 

 

     - KEYWORD : 아래에 설명되는 키워드중의 하나이며 VALUE는  키워드에 지정되는  값
  

실행예)

SQLLDR userid=scott/tiger control='test.ctl' log='test.log' 

 

 

 

 


키워드

•USERID :  사용자 ID와 암호
•CONTROL : 콘트롤 파일명
•LOG : 로그 파일명(기본 이름은 컨트롤파일명.log)
•BAD : 업로드에 실패한 레코드들이 저장 된다.(기본 이름은 컨트롤파일명.bad)
•DATA :  업로드를 위한 데이터 파일 이름 
•DISCARD : 선택되지 않은 레코드가 저장되는 디스카드 파일(선택 사항)
•DISCARDMAX :  버림(discard)의 최대 허용 갯수(기본값은 모든 버림을 허용하는 것입니다. 잘못된 입력 파일이 지정될 경우 실행을 중단시킬 안전 수단으로 사용) 
•SKIP : 건너 뛸 레코드 수, 주로 이전에 실패한 로드를 계속할 때 사용됨(한 테이블로 로드할 때나 로드되고 있는 모든 테이블에 대해 동일한 수의 레코드를 건너 뛸 때만 이 옵션을 사용)
•LOAD :  SKIP에 의해 지정된 레코드를 건너 뛴 다음 로드할 레코드 수를 지정 
•ERRORS : 배드 레코드의 최대 수
•ROWS : conventional 로드의 경우 각 삽입 전에 배열에 구축될 행의 수 지정(direct path로드의 경우 이 키워드는 각 data save마다 입력으로부터 읽어들일 행의 근사 수를 정의, Direct로드는 data save 전에 완전한 블록을 구축하고 버릴 행과 부적합한 행을거부한다.)
•BINDSIZE : conventional 로드의 경우 각 데이터베이스 호출시 삽입될 행의 배열을 구축하는데 사용될 최대 바이트 수를 지정(ROWS 파라미터도 지정되면 SQL*Loader는 BINDSIZE의 제한에 따라 ROWS에 의해 정의된 만큼의 행을 구축합니다.)
•DIRECT :  TRUE로 설정되면 SQL*Loader는 direct path를 사용. 반대의 경우는 기본 값인 conventional path 사용.
•PARFILE : 모든 로드 파라미터를 포함하고 있는 파일의 이름을 지정(명령 라인에 정의된 파라미터는  파라미터 파일에 정의된 값들을 무효화합니다.)
•PARALLEL : direct 로드에서만 적합한 이 파라미터는 다중 병렬 direct 로드가 수행되도록 지원
•FILE : 병렬 direct 로드의 경우 임시 세그먼트가 생성될 파일을 지정

 

 

 

 

 

 

 

 

 

 


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

 

 

 

  
   Control File 예(Control File에서 데이터를 포함 할 경우)  
    LOAD DATA
    INFILE *
    REPLACE
    INTO TABLE  mydept  <-- 오라클의 테이블 이름
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
    (DEPTNO, DNAME)
    BEGINDATA
    40,SALES
    50,"RESEARCH"

    60,"ART"


 
  

참고 : 
   - Control File에서 데이터를 포함하지 않을 경우에는 INFILE 다음에 DATA파일을 지
        정하고 BEGINDATA 부터 생략 하면 된다.
   - NOLOGGING 키워드를 사용하여 테이블에 NOLOG 속성을 설정하는 것과 콘트롤 
     파일에 UNRECOVERABLE 옵션을 사용하는 것은 서로 같다.

 
6. Data File
  ① 콘트롤 파일에서 정의된 형식의 입력을 위한 데이터가 있다.
  ② UpLoad될 데이터를 Control File에 정의 할 수도 있고 Data File에 따로 분리 할 수도 
      있다.
   
7. Log File
  - 로드 시작/종료 시간, 총로드시간등 정보를 제공 
  - Load상태 정보를 저장
  -로드된 행의 수, 에러로 인해 로드가 거부된 행의 수, 버려진(Discard) 행의 수등의
   정보를 제공 한다.
  

 

출처 : ONJ프로그래밍 (http://www.onjprogramming.co.kr)


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

 

 

 

 

(예제)

1. 연습용 테이블 생성

 


SQL> create table bbangmi_list(

  2  bbang_no           number not null primary key,

  3  food                       varchar2(30) not null,

  4  when                       varchar2(4)

  5  );

 


테이블이 생성되었습니다.

 

 

 

 

 

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

 

 

 

 

 

2. 제어파일 데이터가 들어있는 경우

(C:\Documents and Settings\onj에 저장했다)

 


myfood.ctl파일을 만들었다.


LOAD DATA

INFILE *

INTO TABLE bbangmi_list

FIELDS TERMINATED BY','

(BBANG_NO, FOOD, WHEN)

BEGINDATA

10, 떡볶이, 간식

20, 피자, 저녁

30, 치킨, 점심

40, 맥주, 아침

50, 커피, 아침

 

 

 

3. 실행

 

 

C:\Documents and Settings\onj>sqlldr userid=scott/tiger control = 'myfood.ctl'

 


SQL*Loader: Release 11.2.0.1.0 - Production on 금 8월 2 15:47:22 2013

 


Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

 


커밋 시점에 도달 - 논리 레코드 개수 5

 

 

 

 

 

 

4. 데이터 insert 실행여부 확인

(저장폴더에는 이제 myfood.log가 생성되어있다.)

 


SQL> connect scott/tiger

 

 

SQL> select*from bbangmi_list;

 


  BBANG_NO FOOD                           WHEN

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

        10 떡볶이                         간식

        20 피자                           저녁

        30 치킨                           점심

        40 맥주                           아침

        50 커피                           아침

 

 

 

 

 

 

 

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

 


2. 제어파일과 데이터 파일이 분리된 경우
#. control file 부분 : food.ctl저장


#. DATA : food.dat저장

 

 

@ food.ctl 내용


LOAD DATA

INFILE 'food.dat'       

APPEND                

INTO TABLE bbangmi_list

FIELDS TERMINATED BY ','

(bbangmi_no,food,when)

 

 

 

 

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

 

 

 

 

@ food.data 내용


60,금식,안돼

20,초콜렛,간식

10,콜라,저녁

 

 

 

(**주의!! data 파일에 빈칸이 있으면 자료가 안들어가 ㅠㅜㅠㅜㅠㅜㅠㅜ

예: 60, 금식, 안돼 nononono!!!

바른 답 : 60,금식,안돼 goooooooooood!!!

 

 

 

 


3. 실행


C:\Documents and Settings\onj>sqlldr userid=scott/tiger control = 'food.ctl'

 

 

SQL*Loader: Release 11.2.0.1.0 - Production on 금 8월 2 15:57:29 2013

 


Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

 


커밋 시점에 도달 - 논리 레코드 개수 2

커밋 시점에 도달 - 논리 레코드 개수 3

 

 

 

 


(dir확인)


2013-08-02  오후 03:57                56 food.bad

2013-08-02  오후 03:55               110 food.ctl

2013-08-02  오후 03:56                54 food.DAT

2013-08-02  오후 03:57             1,972 food.log

2013-08-02  오후 12:08     1,455,095,808 full.dmp

2013-08-01  오전 11:20    <DIR>          My Documents

2013-08-02  오후 02:26               157 mydept.ctl

2013-08-02  오후 02:26             1,537 mydept.log

2013-06-22  오후 03:31       923,430,912 myemp.dmp

2013-08-02  오후 03:46               179 myfood.ctl

2013-08-02  오후 03:47             1,549 myfood.log

2013-06-15  오전 11:22    <DIR>          Oracle

2013-08-02  오전 11:34     1,455,095,808 scott.dmp

2013-06-22  오전 10:32             4,096 scott.emp

2013-07-18  오후 03:01                 0 select

2013-07-18  오후 03:02                 0 spool

2013-08-02  오전 11:44             8,192 structure.dmp

2013-07-18  오후 05:30                 0 test.sql

2013-08-02  오전 10:16    <DIR>          바탕 화면

2011-07-25  오후 03:41    <DIR>          시작 메뉴

              34개 파일       5,289,240,626 바이트

               7개 디렉터리  77,600,690,176 바이트 남음

 

 

 

food.bad 파일이 생성됨 :

----내용----

20,초콜렛,간식


10,콜라,저녁

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

 


(해석) BAD파일이 생긴 이유는 이미 기존에 위의 실습을 통해 10, 20, 30번,40번,50번은 저장 되어 있는 상태.

그러므로 APPEND 되는 10, 20, 60 번중에서 10, 20번을 가진 데이터는 DISCARD 되는 것

(bbang_no 가 Primary Key)

 

 

 

 


4. 데이터 insert 여부 확인


SQL> select * from bbangmi_list;

 


  BBANG_NO FOOD                           WHEN

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

        10 떡볶이                         간식

        20 피자                           저녁

        30 치킨                           점심

        40 맥주                           아침

        50 커피                           아침

        60 금식                           안돼

 


6 개의 행이 선택되었습니다.


 

자바 및 톰켓 경로 export 하기

 

export JAVA_HOME=/usr/local/jdk1.7.0_07
export CATALINA_HOME=/was/tomcat/tomcat7
export PATH=$PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/bin/lib/ext:$JAVA_HOME/lib/tools.jar:$CATALINA_HOME/lib/jsp-api.jar:$CATALINA_HOME/lib/servlet-api.jar

'프로그래밍 > 리눅스' 카테고리의 다른 글

리눅스 링크 거는 법  (0) 2015.04.27
linux address already in use  (0) 2015.04.27
리눅스 심볼릭 링크 걸기  (0) 2013.09.30
톰켓설치  (0) 2013.09.30
Linux java 설치  (0) 2013.09.30

아래와 같이 리눅스에서 링크를 걸어 보세요.
ln -s /aa/bb/cc/dd /ee/ff/gg/dd

-s 옵션은 심볼릭 링크를 건다는 것이구요.. 디렉토리를 링크할 때는 심볼릭 링크만 가능합니다.
상기와 같이 링크가 걸렸다면..
cd /ee/ff/gg/dd 로 했을때 경로가 /aa/bb/cc/dd/ 로 바뀝니다.
링크를 설치할때 구태여 cd /ee/ff/gg 로 가서 링크할 필요는 없어요.
만약, pwd 가 /ee/ff/gg/ 인 상태라면.. 
ln -s /aa/bb/cc/dd dd 라고 하거나
ln -s /aa/bb/cc/dd /ee/ff/gg/dd 모두 동일하게 작동합니다. 

만약 /aa/bb/cc/dd/a1/b1/c1 경로를 2개 서버 이상이 NFS 로 공유하고 있다면,
/aa/bb/cc/dd 까지만 NFS 로 잡아주면 됩니다. 

'프로그래밍 > 리눅스' 카테고리의 다른 글

linux address already in use  (0) 2015.04.27
자바 및 톰켓 경로 export 하기  (0) 2013.09.30
톰켓설치  (0) 2013.09.30
Linux java 설치  (0) 2013.09.30
find와 grep을 활용한 검색  (0) 2012.08.27
JDK부터 설치해야한다. root 권한으로 진행~
http://java.sun.com/javase/downloads/?intcmp=1281

Java SE Development Kit (JDK) 6 Update 10

다운받아서 실행하면 지가 알아서 압축다풀고 설치다됐다고한다. -_-;
실행한 위치에 압축이 풀리므로 옮긴다!
(RPM 버전을 받으면 /usr/java에 jdk가 위치한다.)

mv jdk1.6.0_10 /usr/local/

그리고 나중에 버전업이 되었을때 자바 관련 패스를 전부 바꿔야하는 큰아픔을 막기 위해 심볼릭링크를 해준다.
ln -s /usr/local/jdk1.6.0_10 java
SDK와 같은 Kit은 이렇게 링크를 걸어주는게 좋다.
(RPM 버전을 받으면 /usr/java/default라는 링크가 이미 걸려있다.)

패스를 설정해보자.
vi /etc/profile
export JAVA_HOME=/usr/local/java
(RPM 버전이면 /usr/java/default)
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/bin/lib/ext:$JAVA_HOME/lib/tools.jar
위 3줄을 적당한 위치에 넣고 저장한 후~
수정사항을 바로적용하기 위해
source /etc/profile

패스가 제대로 걸렸는지 테스트 해본다! 아무대서나
java
뭔가 쭉쭉 나온다면 OK! env 같은 명령어로 확인해도 된다.

이제 Tomcat을 설치하자!
http://tomcat.apache.org/download-60.cgi
위 링크는 6.x 버전 링크다. wget으로 해당 링크의 파일을 받는다~

압축 풀고 위치를 옮긴다. 관리 편하려고...
tar -xzvf apache-tomcat-6.0.18.tar.gz
mv apache-tomcat-6.0.18 /usr/local/web/
cd /usr/local/web/
apache와 같은 디렉토리에 놓이게 되었다.
설치된 디렉토리 이름을 그냥 tomcat으로 바꾸자.
mv apache-tomcat-6.0.18/ ./tomcat

마지막으로 패스만 설정해주면 끝난다.
vi /etc/profile
export JAVA_HOME=/usr/local/java
export CATALINA_HOME=/usr/local/web/tomcat
export PATH=$PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/bin/lib/ext:$JAVA_HOME/lib/tools.jar:$CATALINA
_HOME/lib/jsp-api.jar:$CATALINA_HOME/lib/servlet-api.jar

위와 마찬가지로 바로적용하기 위해
source /etc/profile

방화벽이 문제가 될테니 다음과 같이~ iptables 파일에 추가한다.
vi /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT

방화벽을 제시작하고 테스트!
/etc/rc.d/init.d/iptables restart
/usr/local/web/tomcat/bin/startup.sh

http://ip:8080/
접속해서 고양이 나오면 성공!
혹시라도
Cannot find /usr/local/server/tomcat/bin/setclasspath.sh
This file is needed to run this program
이런 메세지가 나온다면 CATALINA_HOME Path를 확인해봐야한다.

만약 톰캣도 리부팅후 자동 실행되게 하고 싶다면 다음과 같이 스크립트를 작성한다.
(소스는 인터넷에서 퍼 온것~ 몇몇 경로 부분만 현재 내 서버에 맞게 고쳤다.)
저장은 -> /etc/rc.d/init.d/tomcatd

#!/bin/sh
#chkconfig: 2345 89 89
#description: tomcatd
#processname: /usr/local/tomcat/bin/catalina.sh
#config : /usr/local/tomcat/conf/server.xml
#config : /usr/local/tomcat/conf/web.xml
#pidfile : /var/run/tomcatd.pid
#
# author      : jongho, Ahn(...)
# email       : skylimit@syspam.co.kr, skylimit71@gmail.com
# date        : 2006. 07. 10
#

# Get Config
[ -f /usr/local/tomcat/conf/server.xml ] && [ -f /usr/local/tomcat/conf/web.xml ] || exit 0

source /etc/profile

# Source function library
. /etc/rc.d/init.d/functions

# caution :
#           variable=<value> space between variable and value is not allowed
RETVAL=0
prog=tomcatd

# Start function
start()
{
  echo -n "Starting $prog : "
  daemon $CATALINA_HOME/bin/catalina.sh start
  RETVAL=$?
  echo
  touch /var/lock/subsys/tomcatd
  return $RETVAL
}

# Stop fucntion
stop()
{
  echo -n "Stopping $prog : "
  daemon $CATALINA_HOME/bin/catalina.sh stop
  RETVAL=$?
  echo
  rm -f /var/lock/subsys/tomcatd
  return $RETVAL
}

# Restart function
restart()
{
  stop
  start
}

# See how we were called
case "$1" in
     start)
           start
           ;;
     stop)
           stop
           ;;
     restart)
           restart
           ;;
     *)
           echo $"Usage : $0 {start|stop|restart}"
esac

exit $RETVAL

그리고 나서 chmod 755 tomcatd로 권한주고 /sbin/chkconfig --add tomcatd 해주면 끝~
만약 다른 대몬과의 연동으로 실행 순서를 변경해야 한다면
아래와 같은 부분을 조정하면 된다.

#chkconfig: 2345 89 89

2345는 런레벨이며 첫번째 89는 시작우선권 두번째 89는 종료우선권이다.
끝~

 

'프로그래밍 > 리눅스' 카테고리의 다른 글

자바 및 톰켓 경로 export 하기  (0) 2013.09.30
리눅스 심볼릭 링크 걸기  (0) 2013.09.30
Linux java 설치  (0) 2013.09.30
find와 grep을 활용한 검색  (0) 2012.08.27
vi 명령 정리  (0) 2012.04.18

CentOS에 자바를 설치하기



http://www.oracle.com/technetwork/java/javase/downloads/index.html

여기에서 jdk를 다운받는다.

본인은 jdk6 update21 버전을 다운받았다.



1. 자바 설치

  /home 에 설치한다고 치자.


  별로 할게 없다.

  ./jdk-6u21-linux-i586.bin

  주르륵 알아서 설치된다.

  중간에 엔터 한번 쳐달라고 한다.


  jdk1.6.0_21 폴더가 만들어진다.

  편의상 java폴더로 바꿔보겠다.

  mv jdk1.6.0_21 /home/java



2. 환경파일 설정

  패스를 걸어줘야 한다.

  vi /etc/profile

  맨 밑에 추가

  JAVA_HOME=/home/java

  export JAVA_HOME

  PATH=$JAVA_HOME/bin:$PATH

  CLASSPATH=$CLASSPATH:$JAVA_HOME/lib

 

  source /etc/profile 적용

 

3. 설치 확인

  java -version

  우린 1.6이상을 설치했는데 1.6이 아니면 CentOS 설치시 java가 같이 설치된거다.

  어떻게 걸려있는지 확인해보자

  which java

  /usr/bin/java

  이놈이다.

  가서 확인해볼까

  cd /usr/bin/

  어떻게 되어있길래 이런가 볼까.

  ls -al java

  java -> /etc/alternatives/java

  이런.../etc/alternatives/ 여기있는 자바가 실행되고 있었다.

  변경해야지

  alias java='/home/java/bin/java'


4. 확인

  java -version

  javac -version

 

vi /etc/profile 실행
export JAVA_HOME=/usr/java/j2se1.4.3_08
PATH=$PATH:$JAVA_HOME/bin
export PATH
vi 저장후 종료 :wq
그담에
/etc/profile의 실행권한이 없으면 실행권한을 줍니다.
그리고 실행권한은 root만 주세요..아니어도 실행하는 데는 무관합니다.
-rwxr--r--    1 root     root         1414 11월 20  2003 profile
실행
. /etc/profile
하고 아무데서나 javac, java하면 실행됩니다.

'프로그래밍 > 리눅스' 카테고리의 다른 글

리눅스 심볼릭 링크 걸기  (0) 2013.09.30
톰켓설치  (0) 2013.09.30
find와 grep을 활용한 검색  (0) 2012.08.27
vi 명령 정리  (0) 2012.04.18
linux ftp client 사용법  (0) 2012.04.10

이클립스에서 Export --> java>javadoc 을 함으로써 소스파일을 쉽게 html 형식의 javadoc 파일을 쉽게 만들수 있다.

소스 코드를 UTF-8로 작성을 한 경우 빌드된 javadoc 파일들의 한글은 깨져 보이게 된다.

물론 브라우저 상에서 인코딩타입을 UTF-8로 변경하면 깨지지 않은 한글을 볼수 있지만

매번 다른 화면을 이동할 때마다 인코딩타입을 변경해주거나 자동선택을  선택해지 하고 UTF-8로 고정시켜야만 한다.

javadoc파일을 만들때 당연히 옵션이 있을 거라 생각하고 살펴보니..

역시나 javadoc 생성 마지막 단계에서 VM options을 지정함으로써 javadoc 파일의  Charset을 UTF-8로 설정할 수 있었다.

 

 

 

위의 그림과 같이 VM options 텍스트필드에 다음과 같이 입력한다.

 

-locale ko_KR -encoding UTF-8 -charset UTF-8 -docencoding UTF-8

'프로그래밍 > java' 카테고리의 다른 글

java get 방식 한글 전송 시  (0) 2015.05.26
전자정부(Spring) Framework] iBatis 입력(INSERT) 결과  (1) 2015.05.19
java jdbc db instance 설정  (0) 2015.05.06
오라클 페이징  (0) 2014.07.23
sprint MVC interceptor  (0) 2013.09.12

Spring MVC 를 사용하다가 보면 필연적으로 Interceptor 를 사용하게 됩니다.
Controller 에서 공통적으로 또는 특정 패키지들에 속한 부분에 대해서 선후 처리가 필요하기 때문입니다.
예전에 이러한 부분들을 AOP 로 구현한 것을 보았습니다. 다른 부분들은 AOP 로 구현하는것이 문제가 아니지만
Controller 부분이라면 Interceptor로 구현하시는것을 권장합니다.

Spring MVC 에서 interceptor 에 대해서 알아보겠습니다.

org.springframework.web.servlet.HandlerInterceptor ,
org.springframework.web.servlet.handler.HandlerInterceptorAdapter
를 상속받아 Interceptor를 구현하면 됩니다.

HandlerInterceptor 를 상속할 경우

preHandle , postHandle , afterCompletion 이렇게 3가지로 구분되어져 있습니다.
이름에서 대충 알수 있겠지만
preHandle : Controller 가 수행되기 전에 실행됩니다. 여기서는 이후 Controller를 수행할지 여부를 boolean 으로 return 하게 됩니다.
postHandle : Controller 가 수행된후 View 를 호출하기 전 상태입니다.
afterCompletion : View 작업까지 완료된 후 호출 됩니다. responseBody 를 이용할 경우 UI 에 이미 값을 전달후 해당 부분이 호출됩니다.

 

호출됩니다.

01 package com.softline.study.interceptor;
02  
03 import javax.servlet.http.HttpServletRequest;
04 import javax.servlet.http.HttpServletResponse;
05  
06 import org.springframework.web.servlet.HandlerInterceptor;
07 import org.springframework.web.servlet.ModelAndView;
08  
09  
10 public class ControllerLoggingInterceptor implements HandlerInterceptor {
11  
12     public boolean preHandle(HttpServletRequest request,
13             HttpServletResponse response, Object handler) throws Exception {
14         System.out.println("preHandle");
15         return true;
16     }
17  
18      
19     public void postHandle(HttpServletRequest request,
20             HttpServletResponse response, Object handler,
21             ModelAndView modelAndView) throws Exception {
22         System.out.println("postHandle");
23     }
24  
25     public void afterCompletion(HttpServletRequest request,
26             HttpServletResponse response, Object handler, Exception ex)
27             throws Exception {
28         System.out.println("afterCompletion");
29     }
30  
31 }

CSS3 투명도(opacity) 그림자(shadow) 설정

초창기 부터 주목되었던 투명도와 그림자에 대해 알아본다

투명도(opacity)

투명도를 설정함으로서 뒤의 z-inex설정에서 뒤에 엘리먼트라던가 겹친 엘리먼트를 보이게하는 등의 모습을 구현 할 수 있다.브라우저는 역시 IE가 예외 IE9는 지원한다. 단 IE8이하버전은 필터를 사용해야한다.

<div class="box1">box1 opctical 50%</div>
<div class="box2">box2 opctical 30%</div>

포지션은 겹치게 했다.

div{ width:300px; height:150px; position:relative;}
.box1{ left:100px; top:30px;
       background-color:#F00;
       opacity:.5;
     }
.box2{ left:150px; top:-50px;        
       background-color:#00F;        
       opacity:.3;
     }


투명도 쓸때 생각할것

 

1. 투명도는 누적되어 나타난다. 첫번째 박스는 50% 두번째 박스는 30%이다.
2. 투명도는 자식 엘리먼트에도 역시 적용된다. 자식엘리먼트는 부모것을 그대로 받아들이지 다시 원래대로 돌릴 수 없다.

문제의 IE8이하 버전을 해결할 필터를 이용한 방법은 다음과 같다.

#IE{ background-color:#00F;
     filter: alpha(opacity=75); }

투명도로 0~100%를 나타낸다.

그림자(shadow)

텍스트 그림자 효과와 같다. 좀더 옵션이 있다. IE는 IE9부터 지원한다
값은 색깔 가로 옵셋, 세로 옵셋, 블루어 효과, 그리고 마지막 값은 안쪽으로 그림자 옵션이다(inset)

.box3{ background-color:#090;
       box-shadow:#000 15px 15px 10px;
	 }
.box4{ background-color:#090;
       box-shadow:#C00 15px 15px 30px
	   ,#000 10px 10px 3px;
	 }
.box5{ background-color:#090;
       box-shadow:#000 15px 15px 10px inset;
	 }   

결과는 여기서 확인 http://sianasiatiger.cafe24.com/study/css3-box_03.html
첫번째는 간단한 적용한것. 마지막은 안으로 한 것이다.
두번째와 같이 여러개를 줄수도 있다. 여기서 먼저 설정해준것이 맨위에 보인다.

'프로그래밍 > CSS' 카테고리의 다른 글

CSS 리스트 스타일  (0) 2012.04.13

+ Recent posts