JEUS 내부 클래스 패스 우선순위

 

JEUS에서 내부적으로 사용하는 global-scoped 클래스 패스의 우선순위는 다음과 같다. 
1) $JEUS_HOME/classes
2) $EJB_HOME/client_jar
3) $JEUS_HOME/lib/system/ 디레토리 밑의 jar 파일
4) $JEUS_HOME/lib/application/ 디레토리 밑의 jar 파일
5) $JEUS_HOME/lib/datasource/ 디레토리 밑의 jar 파일

6) 사용자가 엔진에서 사용하기 위해 추가한 클래스 패스 리스트 입니다.



'WAS' 카테고리의 다른 글

JBoss 설정  (0) 2011.04.30
Web Server 와 WAS  (0) 2011.04.30
apache ANT 설치  (1) 2011.04.30
JRebel Tools  (0) 2011.04.30
[jeus] jsp work directory (jsp-work-dir) 설정  (0) 2011.04.06

vb 또는 asp에서 다른 웹페이지를 호출하고 싶어질때가 있다.
물론 C#과 같은 언어는 httpRequest 와 같은 객체가 있어 손쉽게 받을수 있지만
vb or asp에서는 WinHttp.WinHttpRequest.5.1 의 객체를 생성하여 사용할수 있다.

GET 방식으로 페이지를 호출할경우

Function getSiteSourceGet( siteURL, params )
 Set httpObj = Server.CreateObject("WinHttp.WinHttpRequest.5.1")
 httpObj.open "GET", siteURL & "?" & params, False
 
 httpObj.Send()
 httpObj.WaitForResponse
 If httpObj.Status = "200" Then
  getSiteSourceGet = httpObj.ResponseText
 Else
  getSiteSourceGet = null
 End If
End Function



 

POST 방식으로 페이지를 호출할 경우

Function getSiteSourcePost( siteURL, params )
 Set httpObj = Server.CreateObject("WinHttp.WinHttpRequest.5.1")
 httpObj.open "POST" , siteURL, False
 httpObj.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
 '포스트 방식시 위의 라인을 추가해 주어야 한다.
 
 httpObj.Send params
 '포스트의 파라미터는 Send 호출시 같이 값을 넘겨 주어야 한다.
 httpObj.WaitForResponse
 If httpObj.Status = "200" Then
  getSiteSourcePost = httpObj.ResponseText
 Else
  getSiteSourcePost = null
 End If
End Function



POST를 이용할시 약간 수정행 주어야 할것이 있는데 Content-Type을 위와 같이 변경해주어야 하며 파라미터를 GET방식과는 다르게 Send 시 값을 넘겨주어야 파라미터값들이 전달되다.

위와 같이 함수를 만들어 사용하면 될것이다.

추가된글 파라미터를 넘길때 GET 방식이던 POST 방식이던 URLEncode 를 해주어야 한다. 그것때문에 한참 헤맸다. 그리고 VB Script로 호출시에는 Server 객체를 사용할수 없음으로 URLEncode 함수를 직접 만들어 사용해야 했다. URLEncode 함수는 쉽게 구할수 있다.

출처 : http://hahakbs.dothost.co.kr/

'Dev > ASP' 카테고리의 다른 글

ASP에서 외부웹사이트 내용 가져오기  (1) 2011.05.10

<%
Set HttpObj = Server.CreateObject("WinHTTP.WinHTTPRequest.5.1")
HttpObj.setTimeouts 5000, 5000, 15000, 15000
HttpObj.open "GET", "http://www.nicklib.com/img/logo.jpg", False
HttpObj.send

BinaryData = HttpObj.responseBody
ContentType = HttpObj.getResponseHeader("Content-Type")
Set HttpObj = Nothing
If Not Response.IsClientConnected Then
Response.End
End If

Response.AddHeader "Content-Type", ContentType
Response.AddHeader "Content-Length", LenB(BinaryData)
'Response.AddHeader "Content-Disposition", "attachment; filename=" & Escape(filename)
Response.BinaryWrite BinaryData
Response.Flush
%>
<%
Function getSiteSourceGet( siteURL, params )
Set httpObj = Server.CreateObject("WinHttp.WinHttpRequest.5.1")
httpObj.open "GET", siteURL & "?" & params, False

httpObj.Send()
httpObj.WaitForResponse
If httpObj.Status = "200" Then
  getSiteSourceGet = httpObj.ResponseText
Else
  getSiteSourceGet = null
End If
End Function
%>

Copyright 조희창(Nicholas Jo). Some rights reserved. http://www.nicklib.com

'Dev > ASP' 카테고리의 다른 글

vb or asp 에서 다른 웹페이지 호출하기  (0) 2011.05.10

[MSSQL - SELECT 와 INSERT 동시 처리]

편의상 아래와 같은 세개의 테이블이 있다고 가정하겠습니다.

CREATE TABLE [dbo].[table_a] (
[seq] [int] PRIMARY KEY NOT NULL,
[Name] [varchar] (70) NOT NULL,
[Email] [varchar] (70) NOT NULL,
[Idate] [datetime] NOT NULL
)

CREATE TABLE [dbo].[table_b] (
[seq] [int] PRIMARY KEY NOT NULL,
[Name] [varchar] (70) NOT NULL,
[Email] [varchar] (70) NOT NULL,
[Idate] [datetime] NOT NULL
)


CREATE TABLE [dbo].[table_c] (
[seq] [int] PRIMARY KEY NOT NULL,
[Name] [varchar] (70) NOT NULL,
[Nickname] [varchar] (255) NULL,
[Email] [varchar] (70) NOT NULL,
[Tel] [varchar] (20) NULL,
[Idate] [datetime] NOT NULL
)

첫번째와 두번째의 테이블인 table_atable_b 는 컬럼의 갯수 및 데이터형식이 똑 같은 쌍동이 테이블입니다., table_c두개의 컬럼(Nickname, Tel)이 더 추가되어 있는 테이블로 table_atable_c 와는 조금 다른 구조를
가지고 있습니다.



1. 두 테이블의 컬럼이 같을때 SELECT INSERT 하기

두개의 테이블간에 컬럼이 table_a 와 table _b 처럼 완전히 일치할 때는 아래와 같이 간단하게 처리할 수 있습니다.

-- 사용법

INSERT INTO [입력될 테이블명] SELECT * FROM [검색되는 테이블명]

예1) INSERT INTO table_b SELECT * FROM table_a

위의 예1) 에서는 table_a 의 레코드 전체를 table_b 로 삽입(INSERT) 시킵니다. 만약에 조건을 주어 데이터를 삽입(INSERT) 시키려 한다면 아래와 같이 뒤에 WHERE 절만 추가해 주시면 됩니다.

예2)
INSERT INTO table_b SELECT * FROM table_a WHERE seq = 2

위의 SQL 문은 table_a 에서 seq 의 값이 2 인 레코드를 table_b 에 INSERT 시킵니다.



2 . 두 테이블간의 컬럼이 일치하지 않을때 SELECT INSERT 하기


두개의 테이블간에 컬럼이 table_a 와 table _c 처럼 일치하지 않을때는 아래와 같이 컬럼명을 지정해 주시면됩니다.

-- 사용법

INSERT INTO [입력될 테이블명] (컬럼1, 컬럼2, ... ) SELECT 컬럼1, 컬럼2, ... FROM [검색되는 테이블명]

예3) INSERT INTO table_c ( seq, Name, Email, Idate ) SELECT seq, Name, Email, Idate FROM table_a

위의 예3) 에서는 table_a 의 컬럼중 seq, Name, Email, Idate 컬럼을 table_c 에 Insert 시키고 있습니다. 한가지 주의
할 것은 table_c 의 구조가 table_b 와 다른 만큼 INSERT 될 컬럼이 SELECT 되는 컬럼과 일치하지 않으면 아래와 같은
에러가 발생하게 됩니다.

서버: 메시지 213, 수준 16, 상태 4, 줄 1
삽입 오류: 제공된 값의 개수나 열 이름이 테이블 정의와 일치하지 않습니다.




3.
SELECT INTO 를 이용한 데이터 삽입

위에서 설명한 SELECT INSERT 는 테이블의 검색결과를 이미 존재하는 테이블에 삽입(INSERT) 하게됩니다.하지만 SELECT INTO 는 테이블의 검색결과를 INTO 문 다음에 지정한 테이블을 새로 생성시켜서 삽입하게 됩니다. INTO 문 다음의 테이블은 반드시 존재하지 않아야 합니다. 존재하는 테이블이라면 아래와 같은 에러가 발생하게 됩니다.

서버: 메시지 2714, 수준 16, 상태 6, 줄 1
데이터베이스에 'table_d'(이)라는 개체가 이미 있습니다.

-- 사용법

SELECT * INTO [생성될 테이블명] FROM [검색되는 테이블명]

예4) SELECT * INTO table_d FROM table_a

위의 예4) 에서는 table_a 의 내용을 table_d라는 테이블을 새로 생성시켜서 삽입하게 됩니다. 조건절을 추가하려면
검색되는 테이블명 뒤에 추가하면 됩니다.

예5)
SELECT * INTO table_d FROM table_a
WHERE seq = 3

위의 SQL 문은 table_a 에서 seq 의 값이 3인 레코드를 새로 생성되는 table_d 에 INSERT 시킵니다.

 

작성자: 웹마당넷(webmadang@webmadang.net)   http://www.webmadang.net 

'Database > SQL-Server' 카테고리의 다른 글

DBCC 명령어  (0) 2011.06.29
DBCC CHECKDB, CHECKTABLE (손상된 테이블 복구)  (0) 2011.06.27
[MSSQL] 날짜 연산 DATEADD  (0) 2011.05.13
MSSQL dateadd() 이용하여 말일, 초일 구해보자  (0) 2011.05.13
MSSQL Date Type Convert  (0) 2011.05.13

http://cafe.naver.com/q69/34250암호화

암호화(Cryptography)는 일종의 예술이다. 암호문은 몇 개의 단어를 바꾼 로마의 궤변에서부터 요즘에 사용하는 공개 키와 개인 키(public and private key) 메커리즘에 이르기까지 여러 세기에 걸쳐 사용되었다. 암호화의 목적은 지정된 사람 이외에는 누구도 볼 수 없는 암호문을 만드는 것이다.

이제 몇 페이지에 요즈음 인터넷에서 사용되는 몇 가지 암호화 방식과 동작 원리, 사용대상 등에 대해 살펴보도록 하자.

단방향 암호화

이 방식은 원문을 해독할 수 없도록 암호화하는 과정이다. 언뜻 들으면 사용할 수 없는 방법 같지만 실제 컴퓨터 분야에서는 많이 사용되는 방법이다.

단방향 암호화에 사용되는 알고리즘은 자주 해싱 알고리즘(hashing algorithms)이라고 부른다. 이것은 원문을 이용해 고유한 문자열을 만들어 내는 과정이다. PHP에서 가장 널리 사용되는 해싱 알고리즘은 MD5 알고리즘이다. 이 알고리즘의 실제 동작 방식에 대해서는 자세히 설명하지 않지만 이 방식은 어떤 문자열을 받아서 128비트로 된 고유한 값(fingerprint)을 만들어 내는 것이다.

현재 이 고유한 값을 이용해 거꾸로 원래의 문자열을 알아내는 방법은 불가능하다고 생각된다. 또한 두 가지 문자열에서 생성된 값이 서로 같게 될 확률도 거의 없다. 이 시스템을 완전히 난공불락으로 생각할 수도 있지만, 예상 가능한 문자열을 이용해 무작위로 입력해 그 결과를 비교하는 방법에는 취약하다. 이 공격에 필요한 시간은 해시 데이터의 복잡성에 따라 다르지만 짧은 암호 해독에 걸리는 시간은 그리 길지 않다.

암호가 안전하기만 하다면 MD5 알고리즘은 암호를 암호화하는 좋은 방법이다. 그 이유는 원래의 암호를 다시 해독할 수는 없지만 로그인 시에 사용자가 입력한 암호를 해시로 만들어 비교할 수는 있기 때문이다.

일반 텍스트로 저장된 암호는 보안상 매우 위험하면 MD5 알고리즘을 이용해 변환된 값을 저장해야 한다. 사용자가 로그인해 자신의 암호를 입력하면 이것은 MD5 암호화 과정을 거치게 된다. 만일 이 해시 값이 이미 저장되어 있던 것과 같으며, 두 개의 암호는 서로 같다고 판단된다.

간단한 암호를 사용하는 것은 브루트 포스 공격(brute force attack)의 대상이 되기 때문에 매우 위험하다는 것을 명심하기 바란다. 안전한 암호를 선택하는 방법은 이 장의 끝에 나와 있는 참고 자료를 이용하면 된다.

PHP의 md5() 함수는 다음과 같이 문자열을 입력받아 고유한 값을 만들어 낸다:

<?php
$fingerprint = md5($password);
?>

Important

MD5 알고리즘은 다양한 용도로 사용된다. 그 중하나는 파일이 수정되었는지를 확인할 때 사용된다는 것이다. 파일의 MD5 해시를 저장해 두면 이 파일이 변경되었는지를 금방 확인할 수 있다.


CRC32 함수도 비슷한 기능을 한다. CRC32 함수는 128비트가 아닌 32비트의 고유 값을 생성하기 때문에 암호에는 적당하지 않다. 따라서 두 개의 입력 값이 같은 결과를 나타탤 확률이 더 높다.

MD5와 CRC32 함수 이외에, PHP는 mhash 라이브러리를 제공한다. 이 추가적인 알고리즘는 mhash() 함수를 이용한다. 이 함수는 두 개 또는 세 개의 인자를 사용한다. 첫 번째 인자는 알고리즘을 나타내는 상수, 두 번재 인자는 해시로 만들 문자열, 세 번째 인자는 해싱 알고리즘에서 사용되는 키(key)이다. 다음은 MD5 알고리즘과 mhash()를 이용한 해싱의 예이다:

<?php
$passphrase = "this is my secret passphrase";
echo("My passpharse hashed using md5 is: ");
echo(mhash(MASH_MD5, $passphrase));
?>

mhash를 지원하는 주요 알고리즘은 다음과 같다. 좀더 자세한 정보는 http://mhash.sourceforce.net/ 을 참고하면 된다.

알고리즘
특징

CRC32
이 알고리즘은 주로 데이터 전송 시에 체크섬(checksums)을 위해 사용된다. mhash는 이 알고리즘을 위해 두 가지를 제공하는데, MHASH_CRC32는 주로 이더넷 통신에서 사용되면 MHASH_CRC32는 ZIP 프로그램에서 사용된다.

MD5
md5() 함수의 알고리즘이다. 상수 MHASH_MD5를 사용한다.

MD4
MD4는 MD5와 비슷하지만 보안성이 떨어진다. MD5로 대체되었기 때문에 MD4를 사용하지 않는다. MHASH_MD4 상수를 사용한다.

SHA1
이 알고리즘은 NIST의 디지털 서명 표준을 사용된다. 상수 MHASG_SHA1을 사용한다.

HAVAL
MD5의 변형 판으로 다양한 길이의 결과를 갖는다. mhash에서는 MHASH_HAVAL256, MHASH_MAVAL192, MHASH_HAVAL160, MHASH_HAVAL128 등을 사용한다.

RIPEMD160
MD4, MD5, RIPEMD를 대체하기 위해 설계된 160비트 알고리즘이다. 그러나 여전히 MD5가 많이 사용되고 있다. 상수 MHASH_RIPEMD160을 이용한다.

TIGER
TIGER은 매우 빠른 해싱 기능을 위해 설계되었다. 원래 64비트 컴퓨터에서 사용하려고 설계되었지만 다른 컴퓨터에서 그다지 느리지는 않다. 상수 MHASH_TIGER192, MHASH_TIGER160, MHASH_TIGER128을 사용한다.

GOST
러시아의 디지털 서명 표준으로 256비트를 지원한다. 상수 MHASH_GOST를 사용한다.


대칭형 암호화(Symmetric Encryption)

키(key)를 이용해 문자열을 암호화하는 방버이다. 전송자와 수신자가 알고 있는 키를 이용해 동일한 알고리즘에서 문자열을 암호화/복호화 한다. 2차 세계 대전 중에 암호화 기계(enigma machine)에 사용된 방식이다.

이 암호화 방식은 많은 약점과 문제점이 있다. 그 중 하나는 전송자와 수신자가 키를 알고있는 유일한 사람들인지를 확인하는 것이다. 만일 누군가 타인이 키를 얻어 암호화 된 메시지를 가로챈다면 이 메시지를 해석하는 것은 매우 간단한 일이다. 일반적으로 생각해서 만일 키를 안전하게 보관할 수만 있다면 이 방식은 매우 안전하다. PHP에서는 mcrypt 라이브러리를 이용해서 다양한 알고리즘을 이용하는 호스트에 접근할 수 있다.

mcrypt에서 사용되는 일반적인 암호화 방식은 다음과 같다. 보다 자세한 정보는 http://mcrypt.hellug.gr/mcrypt/mcrypt.html을 참고했다.

알고리즘
특징

DES
전통적인 DES 알고리즘으로 키의 길이가 작아 비교적 보안에 취약하다. 상수 MCRYPT_DES를 사용한다.

3DES/Triple DES
DES의 변형 판이다. 유효 키 길이는 112비트이다. 상수 MCRYPT_3DES를 사용한다.

CAST-128
캐나다에서 설계된 알고리즘으로 128비트 키와 64비트 블럭을 가진다. 상수 MCRYPT_CAST_128을 사용한다.

CAST-256
CAST-128의 확장 판으로 알고리즘으로 256비트 키와 128비트 블럭을 가진다. 상수 MCRYPT_CAST_256을 사용한다.

XTEA
128비트 키와 64비트 브럭을 가진다. 상수 MCRYPT_XTEA를 사용한다.

3-WAY
96비트 키와 블럭을 가진다. 상수 MCRYPT_THREEWAY를 사용한다.

SKIPJACK
미국 NSA에서 조건부 암호화 표준으로 설계한 알고리즘이지만 표준화되지 못했다. mcryp에서 추가 라이브러리를 이용해 접근할 수 있으며 80비트 키를 가진다. 상수 MCRYPT_SKIPJACK를 사용한다.

BLOWFISH
DES를 개선한 알고리즘으로 최대 448비트 길이의 키를 사용할 수 있다. 상수 MCRYPT_BLOWFISH를 사용한다.

TWOFISH
보안성이 높고 융통성이 있다. 128, 192, 256비트 키를 지원한다. 상수 MCRYPT_TWOFISH를 사용한다.

LOKI97
128, 192, 256비트 길이의 키를 이용한다. 상수 MCRYPT_LOKI97를 사용한다.

RC2
블럭 크기를 64비트이며 키는 8에서 1024비트이다. 오래된 알고리즘으로 16비트 컴퓨터에 적당하다. 상수 MCRYPT_RC2를 사용한다.

ARCFOUR/RC4
RC4는 RSADSL의 상표이므로 mcrypt는 RC4 알고리즘을 지원하지 않지만 ARCFOUR와 호환된다. 스트림 기반의 암호문과 최대 2048 비트 키를 지원한다. 상수 MCRYPT_ARCFOUR를 사용한다.

RIJNDAEL
가변적인 길의 블럭 암호문과 키를 가진다. 상수 MCRYPT_RIJNDAEL_128, MCRYPT_RIJNDAEL_192, MCRYPT_RIJNDAEL_256을 사용한다.

SERPENT
128비트 블럭 암호문으로 DES보다 빠르다. 상수 MCRYPT_SERPENT를 사용한다.

IDEA
64비트 블럭과 128비트 키를 사용한다. 상수 MCRYPT_IDEA를 사용한다.

ENIGMA/CRYPT
하나의 원통을 가진 암호화 기계를 기반으로 해서 보안성이 낮다. 상수 MCRYPT_CRYPT를 사용한다.

GOST
256비트 키와 64비트 블럭을 가진다. 상수 MCRYPT_GOST를 사용한다.

SAFER
64비트, 128비트 키를 지원하는 빠르고 안전한 알고리즘이다. 상수 MCRYPT_SAFER64, MCRYPT_SAFER128을 사용한다.

SAFER+
SAFER 알고리즘의 확장판으로 128, 196, 256비트 키를 지원한다. 상수 MCRYPT_SAFERPLUS를 사용한다.


예를 들어, 3DES 알고리즘을 사용하려면 다음과 같이 키를 이용해 문자열을 암호화한다:

<?php
$key = "This is our secret key";
$string = "This is ths string that we want to encrypt"; // 문자열 암호화
$encrypted_message = mcrypt_ech(MCRYPT_3DES, $key, $string, MCRYPT_ENCRYPT);
?>

이 메시지를 해독하려면 $encrypted_message를 문자열로 해서 MCRYPT_DECRYPT 상수를 이용하면 된다. 위의 코드를 mcrypt 2.2.x와 2.4.x에서 동작한다. mcrypt 2.4.x 함수가 좀더 더 유연한 기능을 제공하므로 이 함수를 사용하기를 권한다.

비대칭 암호화

비대칭 암호화(Asymmetric encryption)는 몇 년 전부터 일반인들이 사용할 수 있게 되었다. 이 방식은 상자와 자물쇠로 생각하면 이해가 쉽다. 예를 들어, 제인이 앨리스에게 보내는 비밀 메시지를 가지고 있다면 앨리스는 제인에게 열려있는 자물쇠를 보낼 수 있다. 제인은 자신의 메시지를 상자에 넣고 앨리스가 보내준 자물쇠를 이용해 상자를 잠근다.

이제 상자를 열과 메시지를 읽을 수 있는 유일한 사람은 앨리스인데 열쇠는 앨리스만이 가지고 있기 때문이다.

비대칭 암호화를 이용할 때는 자신의 공개 키(pubic key)를 보내야 한다. 이 공개 키를 열려져 있는 자물쇠라고 생각해보자. 누구든지 이 열려진 자물쇠를 이용해 여러분에게 비밀 메시지를 보낼 수 있고 개인 키(private key)는 여러분이 가지고 있으므로 이 자물쇠를 열수 있는 유일한 사람이 된다.

이 시스템은 인터넷에서 흔히 사용된다. 만일 인터넷에서 물건을 구입하거나 PGP(Pretty Good Privacy)를 사용한다면 이 시스템을 이용하는 것이다.

PHP는 OpenSSL을 이용해 이 시스템을 지원한다. 또한 OpenSSL은 CURL을 이용해 리모트 서버에 SSL(Secure Socket Layer)로 연결할 수 있다. 사용되는 세부 알고리즘은 상당히 복잡하다. 이 장의 마지막에 있는 참고 정버를 이용하면 많은 정보를 얻을 수 있다. 비대칭 암화는 다른 것보다 좀더 안전하다.

'Dev > PHP' 카테고리의 다른 글

FreeTDS 설치 (PHP와 MS-SQL 연동)  (0) 2011.05.13
CentOS 64bit Apache PHP 컴파일 설치  (2) 2011.05.13
PHP Configure Option  (0) 2011.05.13
[PHP] Thread safe / non Thread safe  (2) 2011.04.19
upload_max_filesize  (0) 2011.04.19
** SSO와 세션 클러스터링 의미비교

Single Sign On(통합인증)을 "하나의 아이디/패스워드로 여러 어플리케이션에 접근할 수 있도록 관리하는
통합시스템"을 의미하는 개념적인 층위의 용어라고 할 때, 자바에서의 세션 클러스터링은 이를 구체화한 실제
방법론중의 하나, 즉 SSO의 하위개념으로 해석할 수 있을 듯 합니다.

또한, 자바 세션 클러스터링은 일반적 SSO의 기능인 사용자의 로그인 여부 판별과 고유 아이디 인증을 넘어서,
단일 어플리케이션 상황에서와 마찬가지의 세션 스코프 유지를, 별개의 어플리케이션 또은 물리서버 사이에서도
가능하도록 하는 데에 초점이 맞춰져 있는 논제같습니다.
즉, 다수의 어플리케이션간에 세션 스코프를 연결하고, 스코프에 저장되는 자바 오브젝트들의 상태를 유지할
수 있도록 보장하는 것입니다.


** A,B,C,D 서버가 있다고 할 때의 일반적인 SSO 구현방식

** 1.
사용자가 로그인을 성공할 경우 로그인 처리 페이지가 A,B,C,D 서버에 있는 각각의 loginok.jsp 페이지를
IFRAME을 통해 동시에 호출합니다.
이때, A,B,C,D 서버의 loginok.jsp 페이지는 해당 브라우저 사용자에 대해 로그인 처리를 하고,
Requset에 담겨온 loginid를 이용해서 세션에 사용자정보를 담습니다.
로그아웃도 마찬가지로 처리합니다.
4개의 세션이 별개로 생기는 셈이지만, 이는 모두 공통된 하나의 브라우저에 대응하므로, 브라우저가
종료되면 동시에 소멸됩니다.
세션간의 연동(객체 전달같은)은 불가능하지만, 하나의 브라우저에 대해서 각각의 어플리케이션이
동일한 인증상태를 유지하고 있고, 각각의 세션에 저장된 사용자 정보가 동일한 것이라는 무결성을
획득할 수 있습니다.
 
** 2.
쿠키를 이용하는 방법 (가장 대중적, 메인 도메인이 같을 때)
로그인하면, 고유의 키를 만들어 쿠키에 저장합니다.
각각의 사이트에서는 쿠키에 담긴 이 키값의 여부로, 로그인 여부를 판단하고 세션을 생성하며
키값에 따른 고유한 사용자 정보를 뽑아와 세션에 저장합니다.
로그아웃시에는 쿠키를 지워줍니다.

** 3.
하나의 서버에서 인증처리를 전담하는 방법
로그인과 세션을 관리하는 A서버의 a페이지를, 통합인증이 필요한 모든 페이지에서 프레임으로 포함하고,
처리에 필요한 사용자정보를 여기에 요청, 응답받습니다.
a페이지는 XMLHttpRequest를 이용 페이지 갱신없이 A서버의 다른 프로그램을 호출하고 응답을 얻어옵니다.

- 시나리오
1. 메인프레임에서 로그인프레임에 로그인여부 질의 top.loginFrame.getIsLogin();
2. 로그인 프레임의 a페이지는 응답받을 메인프레임의 함수를 이벤트로 등록후 서버측에 요청을 보냅니다.
   sendRequest("./isLogin.jsp","data","top.mainFrame.isLogin");
3. 요청받은 서버는 세션을 참조하여 로그인 여부 판단, XMLHttpRequest에 응답합니다.
4. 서버에서의 응답값을 매개변수로 top.mainFrame.isLogin(isLogin); 이 실행됩니다.

일반적인 방법은 아닙니다.

** 4.
세션 클러스터링을 이용한 방법
고유한 키값을 쿠키나 기타 장소에 보관하고, 별개의 서버 프로그램과 소켓으로 통신하여 키값에 대해 배당된
컬렉션에서, 직렬화된 자바객체를 꺼내오거나 혹은 저장하며 그 상태를 유지시키는 방법입니다. 키값(연결)이
유지되는 한, 저장소내의 동일한 객체에 접근할 수 있다는 보장을 만들어줍니다.
즉, 통합 인증보다는, 인증 후의 데이터 공유에 촛점이 맞춰져 있는 것 같습니다.

** 5.
통합인증 솔루션 사용



출처 - http://blog.naver.com/

혹 이런 고민에 빠진 독자가 있을지 모르지만, SELECT, UPDATE, DELETE 등의 SQL의 예약어를 테이블의 이름이나 열 이름으로 사용해야 할 경우가 있다면 이 기사가 도움이 될 것이다.

기본적으로 예약어들을 사용한다는 것은 이후 관리상의 문제나 여러 가지 문제를 발생시키기 때문에 사용하지 않는 것이 좋다.


하지만 아쉽게도 다른 데이터베이스에서 SQL Server 등으로 마이그레이션을 했을 때 예약어가 테이블명이나 필드명으로 사용되어 어쩔 수 없이 이용해야 한다면  다음과 같이 이용할 수 있다.

SQL Server에서 열 이름은 "["과 "]"로 묶어 표기하면 데이터베이스 객체 이름으로 인식된다.
오라클에서 사용하고 싶다면 큰따옴표로 묶어 기술하면 된다.


Test 테이블에 FROM 필드와 TO열을 생성하고 싶다면 다음과 같은 명령어가 필요하다.

  • SQL Server일 경우
  • CREATE TABLE test ( [FROM] int null, [TO] int null )
     
  • Oracle일 경우
  • CREATE TABLE test ( "FROM" NUMBER(8) null, "TO" NUMBER(8) null )

이를 통해 FROM필드와 TO필드를 가진 테이블이 생성된다. SELECT나 UPDATE에서도 같은 서식을 사용하여 이용할 수 있다.

  • SQL Server일 경우
  • SELECT [FROM] FROM test WHERE [TO] = 45
     
  • Oracle일 경우
  • SELECT "FROM" FROM test WHERE "TO" = 45

* 테이블명이나 필드명등에 공백문자열이 포함되어 두단어 이상으로 사용하고 싶을때도 []를 사용하면 된다.

 

자료출처 : http://korea.internet.com

SQL> create tablespace ts1
  2  datafile '/home/oracle/ts1.dbf' size 10M;

테이블스페이스가 생성되었습니다.

10M 할당된 테이블스페이스가 생성되었다

 

 SQL> create table t1
  2  (id number)
  3  tablespace ts1;

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

※ 참고로 테이블스페이스는 관리자가 생성하고 t1테이블은 유저가 만든것이다

(다시 말해 유저가 테이블을 만들수있게 관리자가 테이블스페이스를 할당했다고 생각하면 된다)

 

 SQL> select TABLE_NAME, TABLESPACE_NAME from user_tables;

TABLE_NAME      TABLESPACE_NAME
---------------    ---------------
T1                                TS1
DEPT                        USERS
EMP                         USERS
BONUS                     USERS
SALGRADE                USERS

 

T1 테이블에 데이터를 꽉 채워 본다

 SQL> insert into t1 select * from t1;

28 개의 행이 만들어졌습니다.

...

SQL> insert into t1 select * from t1;

114688 개의 행이 만들어졌습니다.

SQL> insert into t1 select * from t1;

229376 개의 행이 만들어졌습니다.

SQL> insert into t1 select * from t1;
insert into t1 select * from t1
*
1행에 오류:
ORA-01653: unable to extend table SCOTT.T1 by 128 in tablespace TS1

 

 이제 테이블스페이스를 확장시켜본다

  

 SQL> alter tablespace ts1 add
  2  datafile '/home/oracle/ts1_2.dbf' size 20M;

테이블스페이스가 변경되었습니다.

 

20M를 추가하여 기존의 10M와 함께 전체 30M가 되었다

 

 SQL> insert into t1 select * from t1;

458752 개의 행이 만들어졌습니다.

 데이터가 더 들어가진다!!

다시 계속 집어넣는다

 

SQL> ALTER DATABASE DATAFILE '/home/oracle/ts1.dbf' RESIZE 30M;

데이타베이스가 변경되었습니다.

SQL> ALTER DATABASE DATAFILE '/home/oracle/ts1.dbf'

2 AUTOEXTEND ON NEXT 10M MAXSIZE 100M;

데이타베이스가 변경되었습니다.

 

 SQL> insert into t1 select * from t1;

1835008 개의 행이 만들어졌습니다.

 계속 들어간다...

 

 테이블 t1의 크기는

SQL> show parameter db_block_size

NAME                                 TYPE               VALUE
---------------------- ----------------- ---------------
db_block_size                        integer               8192


SQL> desc dba_extents
 이름                                               널?      유형
 -------------------------------- -------- ------------
 OWNER                                                    VARCHAR2(30)
 SEGMENT_NAME                                     VARCHAR2(81)
 PARTITION_NAME                                     VARCHAR2(30)
 SEGMENT_TYPE                                       VARCHAR2(18)
 TABLESPACE_NAME                                 VARCHAR2(30)
 EXTENT_ID                                                   NUMBER
 FILE_ID                                                         NUMBER
 BLOCK_ID                                                     NUMBER
 BYTES                                                         NUMBER
 BLOCKS                                                       NUMBER
 RELATIVE_FNO                                             NUMBER

 

SQL> select sum(blocks) from dba_extents
  2  where segment_name = 'T1';

SUM(BLOCKS)
-----------
      14336

 

SQL> select 14336 * 8192 from dual;

14336*8192
----------
 117440512

 대략..120메가 정도 된다...

+ Recent posts