달력

122024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

◈ DB에 등록된 유저의 정보 조회
 
 - dba_users 데이터 사전을 이용하시면 됩니다.
 

SQL>col username format a15
SQL>col default_tablespace format a15
SQL>col temperary_tablespace format a15
SQL>SELECT username, default_tablespace, temporary_tablespace, created
       FROM dba_users
   
USERNAME        DEFAULT_TABLESP TEMPORARY_TABLESPACE           CREATED
---------------   ---------------        ------------------------------ --------
SYS                     SYSTEM                 TEMP                                   01/03/25
SYSTEM               TOOLS                   TEMP                                   01/03/25
OUTLN                  SYSTEM                 SYSTEM                               01/03/25
DBSNMP               SYSTEM                  SYSTEM                              01/03/25
SCOTT                 SYSTEM                  SYSTEM                              01/03/25
ADAMS                 SYSTEM                  SYSTEM                               01/03/25
OEM                     OEM_REPOSITORY   TEMP                                  01/10/11
JONES                  SYSTEM                   SYSTEM                              01/03/25
CLARK                  SYSTEM                   SYSTEM                              01/03/25
BLAKE                  SYSTEM                   SYSTEM                              01/03/25
....
 
18개의 행이 선택되었습니다.
 
 
DEFAULT_TABLESPACE와 TEMPORARY_TABLESPACE는 유저를 생성할때 지정한 것이며,
이때 테이블스페이스를 지정하지 않으면 오라클은 자동적으로
DEFAULT_TABLESPACE와 TEMPORARY_TABLESPACE를 system으로 이용합니다.



◈ 유저의 Object 정보 조회
 
- user_objects 데이터 사전을 이용하시면 됩니다.
 

SQL>col object_name format a25;
SQL>SELECT object_name, object_type
        FROM user_objects
        WHERE object_type = 'INDEX';
 
OBJECT_NAME               OBJECT_TYPE
------------------------- ------------------
BIANRY_PK                         INDEX
BINARY_FK                         INDEX
BOARD_CTNT_LST_FK1        INDEX
BOARD_CTNT_LST_FK2        INDEX
BOARD_CTNT_LST_PK          INDEX
BOARD_FK1                        INDEX
BOARD_PK                         INDEX
COMMUNITY_TYPE_IDX        INDEX
COMMUNITY_TYPE_PK         INDEX
COMM_CTNT_LST_FK1         INDEX
COMM_CTNT_LST_FK2         INDEX
...
27개의 행이 선택되었습니다.    
 
object_type를 보고 싶으면
 
SQL>SELECT object_type
       FROM user_objects
       GROUP BY object_type;
 
OBJECT_TYPE
------------------
INDEX
SEQUENCE
TABLE

* 패스워드 변경

ALTER USER scott IDENTIFIED BY tiger2

'DB' 카테고리의 다른 글

데이터 사전 정보  (0) 2008.06.04
ORA-01034  (0) 2008.06.04
[QUERY] oracle tablespace 조회  (0) 2008.05.30
[QUERY] ORACLE 사용자 생성  (0) 2008.05.30
DB Import  (0) 2008.05.30
Posted by 알 수 없는 사용자
|

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.



DBA_TABBLESPACES 데이터 사전

SQL>conn sys/manager as sysdba
SQL>SELECT tablespace_name, initial_extent, max_extents,  min_extlen
         FROM dba_tablespaces;



DBA_DATA_FILES 데이터 사전

SQL>conn sys/manager as sysdba
SQL> SELECT file_name, tablespace_name
          FROM dba_data_files;



콘트롤파일의 데이타파일 정보와 테이블스페이스 정보

SQL>conn sys/manager as sysdba
SQL> SELECT status,enabled, t.name,d.name
          FROM  v$datafile d, v$tablespace t
          WHERE t.ts#=d.ts#;
 
STATUS    ENABLED       NAME            NAME
-------   ----------      ------------   -------------------------------------
SYSTEM  READ WRITE SYSTEM       C:\ORACLE\ORADATA\ORACLE\SYSTEM01.DBF
ONLINE    READ WRITE RBS             C:\ORACLE\ORADATA\ORACLE\RBS01.DBF
ONLINE    READ WRITE USERS         C:\ORACLE\ORADATA\ORACLE\USERS01.DBF
ONLINE    READ WRITE TEMP           C:\ORACLE\ORADATA\ORACLE\TEMP01.DBF
ONLINE    READ WRITE TOOLS         C:\ORACLE\ORADATA\ORACLE\TOOLS01.DBF
ONLINE    READ WRITE INDX            C:\ORACLE\ORADATA\ORACLE\INDX01.DBF
ONLINE    READ WRITE DRSYS         C:\ORACLE\ORADATA\ORACLE\DR01.DBF
ONLINE    READ WRITE STORM        C:\ORACLE\ORADATA\ORACLE\STORM.DBF


테이블 스페이스의데이터 파일과 테이블 스페이스의 크기 확인
 
DBA_DATA_FILES 데이터 사전을 이용 하면 됩니다.
 
SQL> COL FILE_NAME FORMAT A40
SQL> COL TABLESPACE_NAME FORMAT A15
 
SQL>  SELECT file_name, tablespace_name, bytes, status FROM  DBA_DATA_FILES;
 
FILE_NAME                                                    T ABLESPACE_NAME      BYTES     STATUS
-------------------------------------              ---------------    ------------    ------------
C:\ORACLE\ORADATA\ORACLE\SYSTEM01.DBF   SYSTEM           248250368   AVAILABLE
C:\ORACLE\ORADATA\ORACLE\RBS01.DBF          RBS                545259520    AVAILABLE
C:\ORACLE\ORADATA\ORACLE\USERS01.DBF      USERS            113246208    AVAILABLE
C:\ORACLE\ORADATA\ORACLE\TEMP01.DBF       TEMP               75497472     AVAILABLE
C:\ORACLE\ORADATA\ORACLE\TOOLS01.DBF     TOOLS             12582912     AVAILABLE
C:\ORACLE\ORADATA\ORACLE\INDX01.DBF         INDX                60817408     AVAILABLE
C:\ORACLE\ORADATA\ORACLE\DR01.DBF            DRSYS            92274688      AVAILABLE
 
FILE_NAME : DATAFILE의 물리적인 위치와 파일명을 알 수 있습니다.
TABLESPACE_NAME : 테이블 스페이스의 이름을 알 수 있습니다.
BYTES : 테이블 스페이스의 크기를 알수 있습니다.
STATUS : 테이블 스페이스의 이용 가능 여부를 알 수 있습니다.


테이블 스페이스별 사용 가능한 공간의 확인

DBA_FREE_SPACE 데이터 사전

 
SQL> SELECT tablespace_name, SUM(bytes), MAX(bytes)
         FROM DBA_FREE_SPACE
         GROUP BY tablespace_name

 
TABLESPACE_NAME SUM(BYTES) MAX(BYTES)
---------------           ----------     ----------
DRSYS                     88268800           88268800
INDX                        60809216           60809216
RBS                       524279808          498589696
SYSTEM                      65536                 65536
TEMP                      75489280           74244096
TOOLS                     12574720           12574720
USERS                   113238016          113238016
   

◎ SUM을 사용한 이유는하나의 테이블 스페이스에 분산되어 있는 여유공간을 합한 것이며,
◎ MAX를 사용한 이유는 여유 공간중 가장 큰 공간의 SIZE를 의미 합니다.
 


 데이타 화일에 대한 총 크기와 남아있는 공간, 사용한 용량, 남은 %율

 
DBA_FREE_SPACE, DBA_DATA_FILES 데이터 사전

 
SQL> COL FILE_NAME FORMAT A40
SQL> COL TABLESPACE_NAME FORMAT A30
SQL> SET LINESIZE 150
SQL> SELECT  b.file_name "FILE_NAME",                                         --  DataFile Name
                 b.tablespace_name "TABLESPACE_NAME",                      -- TableSpace Name
                 b.bytes / 1024 "TOTAL SIZE(KB)",                                    -- 총 Bytes
                 ((b.bytes - sum(nvl(a.bytes,0)))) / 1024 "USED(KB)",         -- 사용한 용량
                 (sum(nvl(a.bytes,0))) / 1024 "FREE SIZE(KB)",                  -- 남은 용량
                 (sum(nvl(a.bytes,0)) / (b.bytes)) * 100 "FREE %"               -- 남은 %
         FROM   DBA_FREE_SPACE a, DBA_DATA_FILES b
         WHERE a.file_id(+) = b.file_id
         GROUP BY b.tablespace_name, b.file_name, b.bytes
         ORDER BY b.tablespace_name
 
 
FILE_NAME                                                  TABLESPACE_NAME  TOTAL SIZE(KB)   USED(KB) FREE SIZE(KB)     FREE %
-------------------------------------                ---------------     --------------   -------------    ------------- ----------
C:\ORACLE\ORADATA\ORACLE\DR01.DBF            DRSYS                    90112            3912         86200            95.6587358
C:\ORACLE\ORADATA\ORACLE\INDX01.DBF         INDX                        59392                8         59384            99.9865302
C:\ORACLE\ORADATA\ORACLE\RBS01.DBF          RBS                       532480          20488        511992            96.1523438
C:\ORACLE\ORADATA\ORACLE\TEMP01.DBF       TEMP                       73728               8         73720             99.9891493
C:\ORACLE\ORADATA\ORACLE\TOOLS01.DBF     TOOLS                      12288               8         12280            99.9348958
C:\ORACLE\ORADATA\ORACLE\USERS01.DBF      USERS                    110592               8        110584           99.9927662
   

  ================================================
    * 오라클 정보공유 커뮤니티 oracleclub.com
    * http://www.oracleclub.com
    * http://www.oramaster.net
    * 강좌 작성자 : 김정식 (oramaster _at_ naver.com)
  ================================================
※ oracleclub 강좌를 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
※ oracleclub 강좌는 개인의 학습용으로만 사용 할 수 있습니다. 학원 홍보용이나 수익을 얻기 위한 용도로
    사용을 하시면 안됩니다. ^^

'DB' 카테고리의 다른 글

ORA-01034  (0) 2008.06.04
[QUERY] oracle 유저정보조회 및 패스워드 변경  (0) 2008.06.04
[QUERY] ORACLE 사용자 생성  (0) 2008.05.30
DB Import  (0) 2008.05.30
DB Export  (0) 2008.05.30
Posted by 알 수 없는 사용자
|

[QUERY] ORACLE 사용자 생성

DB 2008. 5. 30. 20:17

http://www.oracleclub.com/lecture/1005

사용자 생성 예제

SQL PLUS를 실행시키고 SCOTT/TIGER로 접속을 합니다.
.
SQL>CREATE USER TEST IDENTIFIED BY TEST;

1행에 오류:
ORA-01031: 권한이 불충분합니다

SCOTT USER는 사용자 생성 권한이 없어서 사용자를 생성할 수 없습니다.
 
SQL>CONN SYSTEM/MANAGER       -- DBA Role이 있는 유저로 접속합니다.

SQL>CREATE USER TEST IDENTIFIED BY TEST;    -- USER를 다시 생성합니다.
 사용자가 생성되었습니다.
 

 

 새로 생성한 USER로 접속해 볼까요..

SQL>
CONN TEST/TEST

ERROR:
ORA-01045: 사용자 TEST는 CREATE SESSION 권한을 가지고있지 않음; 로그온이
거절되었습니다

-  새로 생성한 TEST USER는 권한이 없어서 접근할 수가 없습니다.
-  모든 USER는 권한이 있고 권한에 해당하는 역할만 할 수 있습니다.
-  TEST라는 USER를 사용하기 위해서도 권한을 부여해주어야 합니다.


SQL> CONN SYSTEM/MANAGER
연결되었습니다.

SQL> GRANT connect, resource TO TEST ;
권한이 부여되었습니다.

SQL> CONN TEST/TEST
연결되었습니다.


-- 테이블스페이스 생성
SQL>CREATE TABLESPACE storm
         DATAFILE 'C:\ORACLE\ORADATA\app_data.dbf' SIZE 100M
         DEFAULT STORAGE
             (INITIAL    10K
              NEXT      10K
              MINEXTENTS 2
              MAXEXTENTS 50
              PCTINCREASE 50)

'DB' 카테고리의 다른 글

[QUERY] oracle 유저정보조회 및 패스워드 변경  (0) 2008.06.04
[QUERY] oracle tablespace 조회  (0) 2008.05.30
DB Import  (0) 2008.05.30
DB Export  (0) 2008.05.30
aix, linux간의 data 이동 혹은 공유  (0) 2006.09.25
Posted by 알 수 없는 사용자
|

DB Import

DB 2008. 5. 30. 20:02

http://www.oracleclub.com/lecture/1161

▣ IMPORT ?


   ⊙ EXPORT 덤프 파일을 읽어서 그 안에 저장되어 그 파일안에 있는 명령을 실행시킵니다.

   ⊙ 데이터베이스를 복구하거나 재구성하기위해 사용될 수 있습니다.

   ⊙ 기본적으로 IMPORT는 각 테이블을 IMPORT한 후 COMMIT을 합니다. 

▣ Import Parameter

  - userid : IMPORT를 실생시키는 계정의 username/password명

  - buffer : 데이터를 행들을 가져오는데 사용되는 buffer의 bytes수

  - file : IMPORT될 EXPORT 덤프 파일명

  - show : 파일 내용이 화면에 표시되어야 할 것인가를 나타냄(Y/N 플래그)

  - ignore : IMPORT중 CREATE명령을 실행할 때 만나게 되는 에러들을 무시할 것인지 결정
                (Y/N 플래그)

  - indexes : 테이블 INDEX의 IMPORT여부(Y/N 플래그)

  - rows : 테이블 데이터를 IMPORT할 것인가(Y/N 플래그)
              만약 "N"로 설정하면 데이터베이스 객체들에 대한 DDL만이 실행됩니다.

  - full : FULL엑스포트 덤프 파일이 IMPORT 할때 사용합니다.  

  - tables : IMPORT될 테이블 리스트

  - commit : 배열(배열의 크기는 BUFFER에 의해 설정됩니다) 단위로 COMMIT을 할것인가 결정
                 기본적으로는 테이블 단위로 COMMIT을 합니다.

  - fromuser : EXPORT덤프 파일로 부터 읽혀져야 하는 객체들을 갖고 있는 테이터베이스 계정

  - touser : EXPORT덤프 안에 있는 객체들이 IMPORT될 데이터베이스 계정


▣ Import 예제


     예제1) 전체 데이터베이스가 IMPORT됩니다. (Full Level)

       C:\>imp userid=system/manager file='C:\full.dmp'  full=y


     예제2) scott의 유저 IMPORT를 실행 합니다.(User Level)

       C:\>imp userid=scott/tiger file='C:\scott.dmp'


     예제3) 다른 계정으로 IMPORT하기

      ==> scott유저의 데이터를 EXPORT받아서 test 유저에게 IMPORT하는 예제 입니다.

       C:\>exp userid=system/manager file='C:\scott.dmp' owner=scott

       C:\>imp userid=system/manager file='C:\scott.dmp' fromuser=scott touser=test     

'DB' 카테고리의 다른 글

[QUERY] oracle tablespace 조회  (0) 2008.05.30
[QUERY] ORACLE 사용자 생성  (0) 2008.05.30
DB Export  (0) 2008.05.30
aix, linux간의 data 이동 혹은 공유  (0) 2006.09.25
[QUERY] 중복데이터 제거  (0) 2006.07.21
Posted by 알 수 없는 사용자
|

DB Export

DB 2008. 5. 30. 20:01

http://www.oracleclub.com/lecture/1160

▣ EXPORT ?


  ⊙ 오라클에서 제공하는 논리적인 백업에 사용되는 유틸리티로써,  binary file형태로 기록합니다.

  ⊙ 데이터베이스가 가동중인 상태에서 실행합니다.

  ⊙ 전체 데이터베이스, 특정 사용자, 특정 테이블들을 엑스포트 시킬 수 있습니다.

  ⊙ 권한, 익덱스, 또한 연관된 제약조건들과 같이 테이블들과 연관되는
      데이터 딕셔너리 정보도 엑스포트 시킬 것인가를 선택할 수 있습니다.

  ⊙ 마지막 엑스포트 이후로변경된 테이블들에 대해서만 엑스포트 작업을 실행 할 수도 있습니다.  

▣ Export Paramger

   - userid : EXPORT를 실행시키고 있는 username/password명.

   - buffer : 데이터 행들을 가져오는데 사용되는 버퍼의 크기.

   - file : 생성되는 EXPORT덤프 파일명.

   - filesize : EXPORT덤프 파일의 최대 크기

   - grants : 데이터베이스 객체에 대한 권한 정보의 EXPORT여부 (Y/N 플래그)

   - indexes : 테이블에 대한 INDEXES의 EXPORT여부 (Y/N 플래그)

   - rows : 행들에 대한 EXPORT여부. (Y/N 플래그)
               만약 “no”이면 데이터는 EXPORT되지않고 테이블의 정의만 EXPORT 됩니다.

   - constraints : 테이블에 대한 제약조건 정보의 EXPORT여부 (Y/N 플래그)

   - compress : IMPORT에 대비하여 테이블의 데이터를 한 extent로 압축 할것인가의 여부
                      (Y/N 플래그)

   - full : 전체 데이터베이스를 EXPORT할것인가의 여부 (Full Level Export) (Y/N 플래그)

   - owner : EXPORT될 데이터베이스의 소유자명 (User Level Export)[owner=user]

   - tables : export될 테이블의 리스트(Table Level Export) [tables=(table1, table2, ...)] 


▣ Full Level Export

   - 전체 데이터베이스가 엑스포트 됩니다.

   - 모든 테이블스페이스, 모든 사용자, 또한 모든 객체, 데이터들이 포함됩니다.

   예제) C:\>exp  userid=system/manager  file='C:\full.dmp'   full=y


▣ User Level Export

  - 사용자 객체들이 엑스포트 되고 객체들 안에 있는 데이터도 엑스포트 됩니다.

  - 사용자 객체에 대한 모든 권한들과 인덱스들도 엑스포트 됩니다.

  - 다른 사용자들의 객체와 권한, 인덱스들은 엑스포트 되지 않습니다.

   예제1) 사용자 자신이 만든 모든 오브젝트를 그 user가 EXPORT하는 방법입니다.

        C:\>exp   userid=scott/tiger  file='C:\scott.dmp'


   예제2) SYSTEM/MANAGER로 접속한 DBA가 여러 user소유의 오브젝트들을 EXPORT 하는
            방법입니다.

        C:\>exp userid=system/manager owner=scott  file='C:\scottuser.dmp'


▣ Table Level Export

   - 명시된 테이블만 엑스포트 됩니다.

   - 테이블의 구조, 인덱스, 권한등이 테이블과 함께 엑스포트 됩니다.


      예제1) system user로 다른 유저의 table 몇 개만 Export하는 예제입니다.

      C:\>exp userid=system/manager file='C:exp.dmp' tables=(scott.EMP, scott.DEPT)

      => 위와 같이 table의 schema(user)명까지 지정해야만 export가 성공합니다.


       예제2) scott user로 table 몇 개만 EXPORT하는 예

       C:\>exp userid=scott/tiger file='C:\exp.dmp' tables=(EMP, DEPT) log=exp.log

       => user가 자신의 table을 export할 때에는 schema 명을 지정할 필요 없습니다.

'DB' 카테고리의 다른 글

[QUERY] ORACLE 사용자 생성  (0) 2008.05.30
DB Import  (0) 2008.05.30
aix, linux간의 data 이동 혹은 공유  (0) 2006.09.25
[QUERY] 중복데이터 제거  (0) 2006.07.21
[대용량데이터베이스] 조인의 최적화  (0) 2006.07.20
Posted by 알 수 없는 사용자
|

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.


http://blog.naver.com/ecogeo?Redirect=Log&logNo=100008723361

SOAP 인코딩 스타일에 따라 성능에 큰 차이를 보인다. 따라서 웹서비스 개발시 어떤 인코딩 방식을 사용할 것인지 신중히 선택해야 한다.  
1. 인코딩 스타일의 종류
인코딩 스타일에는 대표적으로 3가지가 있다.  
  • SOAP Remote Procedure Call (RPC) 인코딩 : Section 5 encoding으로 알려져 있으며 SOAP 1.1 스팩에 정의되어 있다
  • SOAP Remote Procedure Call Literal 인코딩 (SOAP RPC-literal): RPC 메소드를 사용하여 호출하지만 데이터 마샬링에는 XML (do-it-yourself)를 사용한다.
  • SOAP document-style encoding : message-style 또는 document-literal 인코딩으로 알려져있다.    

     2. 인코딩별 응답메시지 차이
    인코딩에 따라 SOAP 응답메시지는 아래처럼 달라진다.  
    * rpc/encoding 방식

    <multiRef id="id11" soapenc:root="0"

                   soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

                  xsi:type="ns7:RegionModel" xmlns:ns7="urn:Sky"

                 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">

       <hh xsi:type="xsd:string">11</hh>

       <pa xsi:type="xsd:string">1021.5</pa>

       <pr xsi:type="xsd:string">1.4</pr>

       <ps xsi:type="xsd:string">1023.6</ps>

       <pt xsi:type="xsd:string">7</pt>

       <wd xsi:type="xsd:string">2</wd>

       <ws xsi:type="xsd:string">1.9</ws> </multiRef>  

    * rpc/literal 방식

    <item xmlns="">

        <hh>08</hh>

        <pa>1022.9</pa>

        <pr>.4</pr>

        <ps>1025</ps>

        <pt>3</pt>

        <wd>27</wd>

        <ws>.4</ws> </item>  

    * document/literal 방식 - rpc/literal 방식과 동일    

    3. 인코딩별 장단점 비교
    다음은 이 3가지 인코딩을 간략히 비교한 것이다.  

     

    Rpc/enc

    Rpc/lit

    Doc/lit

    퍼포먼스

    개발생산성

    파라미터객체

    불필요

    불필요

    필요

    자바xml바인딩

    불필요

    불필요

    필요

    WS-I 권고

    No

    Yes

    Yes

    입력파라미터

    2개이상 허용

    2개이상 허용

    1개만 허용

       
    4. 인코딩 스타일과 성능
    그래프에 나오듯이 Rpc/enc 방식은 전송할 데이터가 많아지면 성능이 급격히 떨어진다. 반면 rpc/lit 이나 doc/lit 방식은 대체로 만족할 만한 성능 그래프를 보여준다.
    사용자 삽입 이미지


    5.입력 파라미터 제한

    document 방식은 서비스 메소드의 input 파라미터를 하나만 허용한다.

    따라서 입력 파라미터가 2개 이상인 메소드는 파라미터를 모두 포함하는

    자바빈을 만들어 파라미터를 1개로 바꾸어주어야 한다.

    public void purchaseOrder(String item, int quantity, String description)

    => document 방식에서는 허용안됨

     

    public void method(PurchaseOrder po)

    => document에서는 파라미터 1개만 허용됨


        6. Axis에서 인코딩 설정

    /WEB-INF/server-config.wsdd 파일에서 아래처럼 세팅한다.  
    <service name="MyWebService" provider="java:RPC" style="rpc" use="encoded">
    <service name="MyWebService" provider="java:RPC" style="rpc" use="literal">
    <service name="MyWebService" provider="java:RPC" style="document" use="literal">
    - document/literal 방식의 provider는 여전히 'java:RPC'임을 주의한다.    

    7. 인코딩 스타일의 선택


    그럼 어떤 스타일을 선택해야할까? 많은 경우 이것은 개인적 선호의 문제이다. XML 생성에 얼마나 많은 노력을 기울이는가에도 달려있다. 작업 시나리오가 자바 객체로 쉽게 매핑되는 단순한 데이터 타입만을 요구한다면 RPC가 적격이다. XML 문서로 가장 잘 표현되는 많은 데이터를 보낸다면 Documnet(Message) 스타일이 맞다. 이밖에 상호운용성도 고려해야하며 개발자들은 지혜롭게 인코딩을 선택해야 한다.
      참조 http://www-903.ibm.com/developerworks/kr/webservices/library/ws-soapenc.html  

    ps. 저는 rpc/lit 방식을 선택했습니다. 개발도 쉽고 성능도 잘 나오는..ㅎㅎ
    ps2. 허걱 닷넷에서는 rpc/lit 방식을 지원하지 않네요...쩌비... 호환성문제가 있습니다. 검색해보니 MS에서는 doc/lit을 유일한 표준으로 밀고 있다고 나오는군요.. (그러나 아직은 WS-I에서 권고하는 표준에 rpc/literal이 포함돼 있습니다).

  • 'Soap & WebService' 카테고리의 다른 글

    SOAP 모델에 따른 인코딩방식  (0) 2008.08.20
    SOAP Version 1.2 스펙 한글판  (0) 2008.08.20
    SOAP message  (0) 2008.08.20
    Webservice, Soap, wsdl  (0) 2008.08.20
    soap(Simple Object Access Protocol)  (0) 2008.05.24
    Posted by 알 수 없는 사용자
    |

    http://tong.nate.com/junprio/36676524

    “SOAP
    은 분산 환경에서 구조화된 정보를 교환하기 위한 경량 프로토콜이다. SOAP은 확장성 있는 메시지 프레임워크를 정의하기 위해 XML 기술을 사용하고, 하부에 다양한 프로토콜을 사용하여 데이터가 교환될 수 있는 메시지 구조를 제공한다. 이 프레임워크는 특정 프로그래밍 모델이나 구현 방식에 독립적일 수 있도록 디자인 되어있다.”
     
    SOAP는 객체에 접근하기 위한 프로토콜이다. 리모트에 있는 객체를 참조하기 위한 다양한 정의를 할 수 있는 것이 SOAP이다. 처음에는 SOAP이 특정 컴포넌트, DCOM이나 CORBA 같은 객체의 메소드를 리모트로 서비스하는 데 집중하였기 때문에 프로토콜 이름에 Object라는 말이 들어갔다. 하지만 SOAP는 객체의 메소드를 서비스하는 것에 만족하지 않고 이제 메시징 처리를 위한 기본 프로토콜로 변모하였다. SOAP이 메시지 처리의 기본 프로토콜로 자리 잡은 이유는 단순하다는 것 때문이다. 단순하고 가볍기 때문에 인터넷을 기반으로 사용할 수 있는 것이다.
    SOAP은 산업 표준인 XML에 기반하고 있기 때문에 어떤 애플리케이션에서도 사용할 수 있는 프로토콜인 것이다.
     
    1.     SOAP의 작동 원리
    대다수의 방화벽이 웹 포트인 80 포트만 허용하기 때문에 SOAP은 대부분 HTTP에 의존하여 메시징 처리가 이루어진다. SOAP이 인터넷을 통한 메시징 처리의 표준으로 자리 잡을 수 있었던 이유는 HTTP 위에 SOAP이 올라갈 수 있기 때문이다. HTTP위에 SOAP이 올라간다는 것은 HTTP의 요청과 응답에 메시지에 SOAP 메시지가 포함될 수 있다는 것을 의미한다.
    SOAP 스펙은 SOAP 메시지들이 단방향(one-way)이 아니라 양방향(two-way)이라고 말하고 있다 서버뿐 아니라 클라이언트도 SOAP메시지를 해석할 수 있어야 한다.
     
    SOAP HTTP를 이용하는 이유
    ·          HTTP는 이미 널리 구현되어 있으며, 이해하기 쉬운 프로토콜이다.
    ·          그 자체가 가지고 있는 요청/응답 패러다임이 RPC와 잘 들어 맞는다.
    ·          이미 대부분의 방화벽이 HTTP에서 작업할 수 있도록 설정되어 있다.
    ·          HTTP보안 소켓 레이어(Secure Sockets Layer, SSL)를 이용하여 쉽게 보안을 구축 할 수 있다.
     
    SOAP TCP HTTP뿐만 아니라 SMTP 같은 다양한 프로토콜과도 함께 사용할 수 있는 것이다. 메시징 서버를 사용해서 메시지 처리를 할 때와 마찬가지로, SOAP은 기본적으로 단방향으로 메시지를 보낸다. 송신자는 메시지를 보내지만, 수신자로부터 메시지를 받지는 않는다. 하지만 송신자가 메시지를 보내고 그 결과로 다시 SOAP 프로토콜을 통해 메시지를 받는 것은 가능하다.
     
    2.     SOAP 메시지의 구조
    SOAP 메시지는 크게 SOAP Envelope, SOAP Header, SOAP Body, SOAP Fault로 구성되어있다.
     

    SOAP Envelope
    SOAP Header
     
    SOAP Body
    SOAP Body Block
     
    SOAP Fault

     
    ·           SOAP Envelope : EnvelopeSOAP 메시지를 감싸는 가장 상위의 요소이다. EnvelopeHeaderBody를 가질 수 있다.
    ·           SOAP Header : Header는 메시지에서 필수적인 요소는 아니지만 SOAP 메시지에 기능을 추가 하는 역할을 담당한다. 여러 가지 정보를 헤더에 담기 위해 여러 개의 블록으로 구성되어 있으며, HeaderEnvelope 태그 다음에 가장 먼저 나오는 항목이어야 한다. 보통 Header는 인코딩, 인증, 트랜잭션 같은 관리적인 문제에 사용된다.
    ·           SOAP Body : BodySOAP을 통해 전송할 데이터로 채워진다. 여러 개의 블록으로 구성될 수 있으며, 요청할 때 요청할 웹 서비스의 이름과 매개변수로 채워지고, 응답할 때는 결과로 채워진다.
    ·           SOAP Fault : SOAP 처리를 한 후 발생하는 에러 처리 메시지가 이 영역에 채워진다. SOAP Fault는 에러에 대한 자세한 내용을 기술할 수 있도록 다음과 같이 여러 개의 요소를 지원한다.
    -         <faultcode> : 에러의 종류를 코드로 구분할 수 있도록 해준다. 웹 서비스 소비자는 이 코드를 보고 어떤 종류의 에러가 발생했는지 알 수 있다. SOAP에는 SOAP 메시징에서 일어날 수 있는 기본 코드를 정의하고 있고 웹 서비스 제공자가 별도로 정의할 수도 있다.
    -         <faultstring> : 코드가 기계적인 내용인 데 반해, 스트링은 사람이 에러에 대한 내용을 읽고 이해할 수 있도록 해준다.
    -         <faultactor> : 메시징 처리를 하는 중에 어떤 부분에서 에러가 발생했는지 알릴 때 사용된다.
    -         <detail> : Body에 관련된 데이터 때문에 SOAP 메시징이 성공하지 못했을 경우에 사용된다. 만약 에러가 발생했는데 <detail> 부분이 없다면, Body와 관련된 부분에서 에러가 발생하지 않았다는 것을 알 수 있다.
     
    SOAP Request


    사용자 삽입 이미지

     
    SOAP Response


    사용자 삽입 이미지

     
    SOAP Fault


    사용자 삽입 이미지



    http://blog.empas.com/inter999/3354100


    3.     SOAP 인코딩
    SOAP 메시지는 모두 문자로 이루어진 XML 문서이기 때문에 SOAP 메시지를 처리하는 응용프로그램은 SOAP 메시지의 데이터를 숫자로 처리해야 할지 아니면 문자열로 처리해야 될지를 결정해야 한다. 응용프로그램이 SOAP 메시지의 데이터를 임의의 데이터형으로 처리할 수도 있지만, SOAP 메시지에서 표기한 데이터형으로 처리하도록 해야 한다. 데이터형의 표기 방법은 아무렇게 하는 것이 아니고 발신자와 수신자가 모두 이해하는 정해진 규칙으로 작성해야 한다.
    자바 기본형인 Boolean, byte, short, int, float, double SOAP 메시지에서 어떻게 표기해야 되고, 배열은 어떻게 표기해야 되는지를 정해 놓은 것이 SOAP 인코딩이다.
     
    encodingStyle
    발신자가 SOAP 메시지를 생성할 때에 <Envelop> 엘리먼트의 encodingStyle 속성값으로 어떤 표기법을 이용해서 데이터형을 지정했는가를 명시해야 한다. encodingStyle 속성은 <Envelop> 엘리먼트가 아니라 어떠한 엘리먼트에서도 기술될 수 있다. 엘리먼트의 인코딩 스타일 결정 규칙은 다음과 같이 간단하다.
     
    ·          만약 엘리먼트가 encodingStyle 속성을 가지고 있다면, 이 엘리먼트의 인코딩 스타일은 encodingStyle 속성 값과 같다.
    ·          만약 엘리먼트가 encodingStyle 속성을 가지고 있지 않고, 상위 엘리먼트에 인코딩 스타일이 있다면, 해당 엘리먼트의 인코딩 스타일은 상위 엘리먼트의 인코딩 스타일과 동일하다.
    ·          만약 위의 조건을 만족하지 않으면, 엘리먼트에 특정 인코딩 스타일이 적용되지 않는다.
     
    SOAP 설계 명세서가 규정하고 있는 하나의 인코딩 규칙이 있는데,
    [ SOAP-ENV:encodingStyle=http://schemas.xmlsoap.org/soap/encoding ]
     
    을 사용하는 것이다. SOAP에서는 디폴트 인코딩을 지원하지 않기 때문에 명시적으로 인터딩을 기술해야 한다. SOAP 설계 명세서에서는 인코딩에 관한 강제성이 없어 자신만의 인코딩 스타일을 선택할 수도 있다. 이때는 수신자도 그 인코딩을 이해하고 있어야 한다.
     
    SOAP설계 명세서에서 기술되어있는 데이터 표기법에는 단순 타입과 복합 타입이 있다.
     
    단순 타입(Symple Type) 표기법
    단순 타입이란 프로그램언어에서 기본 데이터 타입 이라고 생각하면 된다. 아래는 문법이다.
     

    <엘리먼트 xsi:type=”xsd:데이터타입”>데이터</엘리먼트>

     
    다음은 자바 기본형 및 String 데이터 형에 해당하는 XML 스키마 기반의 단순 타입이다.

    자바 데이터형
    단순 타입
    boolean
    xsd:boolean
    byte
    xsd:byte
    short
    xsd:short
    Int
    xsd:int
    long
    xsd:long
    float
    xsd:float
    double
    xsd:double
    String
    xsd:string

     
    다음은 사용법이다.

    <?xml version="1.0" encoding="UTF-8"?>
     
    <env:Envelope
      xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
      xmlns:xsd="http://www.w3.org/2001/XMLSchema"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:enc=http://schemas.xmlsoap.org/soap/encoding/
      xmlns:ns0=http://localhost:8080/hello/webservice/wsdl/webservice a원격프로시져
      env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> a 인코딩 스타일
     
      <env:Body>
        <ns0:sayHello> a 원격 프로시져의 접두사와 메소드명
          <String_1 xsi:type="xsd:string">mincheol</String_1> a 인자명, 데이터형, 데이터
        </ns0:sayHello>
      </env:Body>
    </env:Envelope>

    주의: 메소드명, 인자명은 수신자에서 실행될 원격 프로시저를 정의해 놓은 웹 서비스 명세서 WSDL 문서에서 지정된 이름을 반드시 사용해야 합니다.
     
    복합 타입(Compound Type) 표기법
    배열과 구조체(클래스)를 복합 타입으로 구분한다. 배열은 같은 종류의 데이터 타입만 값으로 가질 수 있고 index을 사용하여 값을 저장하고, 읽는다. 구조체는 서로 다른 데이터 타입을 멤버로 가지고 있고, 멤버의 이름을 통해 값을 저장하고, 읽을 수 있다.
     
    배열 표기법

    <?xml version="1.0" encoding="UTF-8"?>
    <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
                  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xmlns:enc="http://schemas.xmlsoap.org/soap/encoding/"
                  xmlns:ns0="http://localhost:8080/hello/webservice/wsdl/webservice"
                  env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
        <env:Body>
           
            <!-- 메소드 지정및 인자 지정 :
                 인자는 array 엘리먼트에서 지정한 id로 링크 건다.-->
            <ns0:addBook>
                <arrayString-1 href="#bookarray"/>
            </ns0:addBook>
           
            <!-- id:배열식별자와 데이터형을 지정한다. -->
            <array id="bookarray" xsi:type="enc:Array" enc:arrayType="xsd:string[3]">
                <item>book1</item>
                <item>book2</item>
                <item>book3</item>
            </array>
        </env:Body>
    </env:Envelope>

    ·           id 속성은 원격 프로시저 호출 시에 이 배열을 참조하여 사용할 수 있도록 배열 식별자를 지정해준다.
    ·           xsi:type 속성은 이 엘리먼트가 배열형임을 나타내기 위해 사용한다.
    ·           enc:arrayType 속성은 데이터 타입과 배열의 크기를 지정하기 위해 사용된다.
     
    구조체 표기법
    자바에서 구조체는 클래스를 말한다. 여기서 Book이라는 클래스가 있고 프로퍼티로 String:title, int:price을 가지고 있다고 gettersetter 메소드가 존재한다고 가정하자. 발신자가 요청 SOAP 메시지에서 Book클래스을 사용하도록 하기 위해서는 시스템 제공자는 웹서비스 명세서 WSDL문서에서 types 엘리먼트의 자식 엘리먼트로 Book 클래스형을 정의해 두어야 한다. 이에 관한 자세한 내용은 WSDL단원에서 설명하기로 하겠습니다.
     

    <?xml version="1.0" encoding="UTF-8"?>
     
    <!--
        ns0 : 원격 프로시저의 네임스페이스 접두사
        ns1 : 구조체의 네임스페이스 접두사
    -->
    <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
                  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xmlns:enc="http://schemas.xmlsoap.org/soap/encoding/"
                  xmlns:ns0="http://localhost:8080/wsdl/webservice"
                  xmlns:ns1="http://localhost:8080/type/webservice"
                  env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
        <env:Body>
           
            <ns0:addBook>
                <Book_1 href="#ID1"/>
            </ns0:addBook>
           
            <book id="ID1" xsi:type="ns1:Book">
                <!-- 멤버변수명, 데이터형, 값 지정 -->
                <title xsi:type="xsd:string">book1</title>
                <price xsi:type="xsd:int">9000</price>
            </book>
        </env:Body>
    </env:Envelope>

    'Soap & WebService' 카테고리의 다른 글

    SOAP 모델에 따른 인코딩방식  (0) 2008.08.20
    SOAP Version 1.2 스펙 한글판  (0) 2008.08.20
    SOAP message  (0) 2008.08.20
    Webservice, Soap, wsdl  (0) 2008.08.20
    SOAP 인코딩 스타일 비교  (0) 2008.05.24
    Posted by 알 수 없는 사용자
    |