오라클 10g express 버전을 인스톨하면 자동으로 8080 포트를 데이터베이스 htmldb 웹 페이지를 위한 포트로 할당 된다.
이것을 바꾸려면 아래와 같이 한다..
1) 현재 포트 번호 확인
SQL> select dbms_xdb.getHttpPort() from dual;
DBMS_XDB.GETHTTPPORT()
----------------------
8080
인지하다 시피 8080 포트가 디폴트 웹서버 포트이다.이것을 아래와 같이 수정한다
sqlplus 에 system 유저로 로긴해서,
SQL> exec dbms_xdb.sethttpport(9090)
PL/SQL procedure successfully completed.
출처:http://abraxas73.springnote.com/pages/366782
제목 : 과연 xml 이 왜 유용한건가요? 글쓴이: 이호준(silnoon0) 2005/10/06 13:03:51 조회수:408 줄수:8 |
안녕하세요.개발자로 들어선지 1년밖에 안된 아직 먼길을 가야하는 초보 프로그래머입니다. 프로젝트를 몇개 진행하다가 보면서, 조금씩 배워가고 있는데요 저는 프로젝트 내에서 XML은 단지, 설정파일로만 사용을 했습니다. 근데 예전부터 지금까지 쭈~욱 xml에 관심을 많이 가지시는것 같아서요.(제 생각입니다.) 과연 xml을 이용하면 뭐가 유용해질 수 있으며, 또한 어디에 적용을 할 수 있는지 너무나 궁금합니다. 무엇이든 그렇겠지만, 목표의식이 뚜렷해야 공부할 맛이 나는데요, 전 아직 xml이 왜 중요한지 또 왜 써야 하는지를 잘 몰라서 계속 인터넷만 헤매이고 있습니다. 경험 많으신 선배님들의 조언 부탁드립니다.감사합니다.^^ |
제목 : Re: 과연 xml 이 왜 유용한건가요? 글쓴이: 서민구(guest) 2005/10/12 22:36:58 조회수:60 줄수:55 |
저는 경험은 별로 없지만, 며칠간 아무도 답글을 안달고 계시길래.. 일단 XML은 하드웨어/소프트웨어 독립적인 데이터 저장 방법이라는데 의미가 가장 크죠. 덕분에 여러가지 프로그래밍 언어를 써도, 여러가지 운영체제를 써도 데이터를 공유할 수가 있게 되었구요.. 그 덕에 웹서비스 같은데서도 어떤 메소드를 어떻게 던지고 파라미터는 뭐고 내가 부를 메소드는 어디에있지 찾아보는데도 XML이 쓰일 수 있죠. 이기종 환경에서 그렇게 다 통할 수 있는 포멧은 역시나 XML이기 때문에요. 설정파일의 경우에는, 설정과 코드를 분리해서 저장하고 코드는 내버려두고 설정만 고치면 좋겠다.. 라는 건데, 그나마도 db.server = localhost db.port = xxxx db.user_id = xxxx db.password = yyyy mail.server = localhsot mail.port = xxxx 와 같이 다 왕창 넣어버리던걸 <db> <server>localhost</server> <port>xxx</port> <user_id>xxxx</user_id> <password>xxxx</password> </db> <mail> <server>localhost</server> <port>xxxx</port> </mail> 과 같이 써주면, 일단 전용 프로그램이 아닌데서도 쉽게 편집가능한데다가 사실 '사람'이 읽기에도 후자의 형태가 편하죠... 그런데 설정 파일의 경우에는 요즘엔 또 난데없이 "annotation이 더 좋아요~"라는 추세로 조금 바뀌는 듯 하네요. EJB의 새버젼에서는 정말 끝내주던데요.. 사실 별로 맨날 바꾸는 것도 아닌 설정 내용을 별도의 XML로 해놓으면, 사실 사람이 읽기에는 쉽다고 앞에 써두긴 했지만, 길어지면 실은 읽기 어렵거든요. (아 이랬다 저랬다 죄송 ^^. 양면성이 있단 거죠..) 그 길고 긴 XML 내용을 잘 읽어서, 클래스는 어디 com.xxxx.yyyy.aaaa.bbbb 이고 그 클래스의 파라미터 zzz 는 1이구나 라는걸 XML보고 알 수야 있지만 정작 또 그 클래스에대한 소스를 열고나면 '아 근데 zzz가 얼마였지?' 라고 또 헷갈리고.. 하나 고치려니 XML도 고쳐야되고 소스도 고쳐야되고. 그게 과연편한거 맞아? 라는 의문이 들어서 annotation으로 가는게 아닐까라고 생각이 듭니다.. 말이 길었는데, XML은 데이터 저장 및 표현의 표준이라고 생각하시면 될 듯.. |
제목 : Re: 역시 강점은 표준이라 생각합니다. 글쓴이: 김영근(naucika) 2005/10/13 11:23:05 조회수:8 줄수:48 |
여러장점이 있긴합니다만, 기본적인건 XML관련문서가 매우 많기 때문에 그런 글들을 보시면 될것 같습니다. 이 표준화란 개념은 매우 강력하고 무서운(?) 개념입니다. 요즘 웹이 이렇게 고속으로 광범위하게 성장한 이유가 무엇일까요? 여러 다양한 웹브라우져가 있지만, 바로 이것들은 HTML 표준을 모두 따르기 때문입니다. 유닉스를 써도, 맥을 써도 웹페이지를 보는건 똑같죠? (물론 세부적인 내용이 다를순 있지만..) XML은 이런 HTML의 미약한 부분을 보완한 (데이터 측면에서) 새로운 표준이라 보시면 될것 같습니다. 요즘 핸드폰 충전많이 하시죠? 예전엔 각사마다 서로다른 표준을 따라서, 심지어는 집에서 또 회사에서 사용할 충전기 또는 USB 케이블을 별도로 구입하곤 했죠. 요즘은 정통부 규격때문에, 어느집 놀러가도 왼만하면 충전이 거의 가능합니다. 표준인거죠? 예를들어, 어떤회사의 레포트 툴이 있다고하면 그 레포팅툴은 엔진은 C로 폼레이아웃은 XML로 작성합니다. 이 XML규격만 맞춰주면 레포트가 출력되는 형식이죠. B사에서 이 XML규격을 디자인해주는 자바 디자인툴을 만듭니다. 또, C사 D사 에서 서로다른 디자이너 툴을 만듭니다. 그래도 결과물은 XML 임으로 디자인툴에 상관없이 보여지는 내용은 같습니다. 게다, 만들어진 XML은 각 툴에서 서로 호환이 됩니다. 또, 요즘 RSS같은경우 이 표준화를 매우 잘 활용하고 있지 않습니까? 동일한 규격의 데이터 폼을 제공해주면, 어떠한 홈페이지라도 한곳에서 모두 일괄 확인할수 있죠. 심지어는 블로그,위키,카페,홈페이지 전부 이 규격만 준수해주면 됩니다. 또, 웹서비스가 있죠? 바로 이런 XML의 강점으로 탄생한 수많은 기술들이 있습니다. 그 근간에는 바로 강력한 표준화란 정점이 있습니다. 어떠한 레거시와 OS와 각종언어에서도 호환되는 데이터를 이동시킬수 있다는것 만해도 정말 많은 제약을 벗어날수 있게 해줍니다. 물론 아직도 이 강력한 표준화는 진행중이라 말할수있겠지만, 이제 곧! 입니다. 이전부터 있어왔던 XML이 근래에 대두되고 있는점은 바로 그 활용에 있습니다. 개념에서 끝나는게 아니라, 이젠 클라이언트들이 그걸 원하고 있고, 각종 서비스들이 덩치가 비대해지고, 기존 레거시들이 다양화되고, 각종 벤더들이 본격적으로 지원하게 되면서 대두되기 시작한거죠. 설정파일에만 장점이 있는건 아닙니다. 사실 전 첨에 설정파일 나름대로의 문법(?)으로 만들어놓고 그걸 읽어드리는 로직을 만드는것도, 이 XML 을 이용하고, 파서를 이용하면서 매우 편해졌습니다. 내가 만든 파서도 모를때도 많던데요. -_-; 그외에도 많죠~~ 온세상을 자바로~ -_-!! http://cafe.naver.com/javalove |
패턴이름 |
내용 |
Factory Method |
Factory 패턴은 제공되는 데이터에 의존하는 추상 기저 클래스의 가능한 하위 클래스들 중의 하나를 반환하는 간단한 의사 결정 클래스를 제공한다. |
Abstract Factory Method |
Abstract Factory 패턴은 생성할 인터페이스를 제공하고, 관련된 객체들의 여러 군 중에서 하나를 반환한다. |
Singleton Pattern |
Singleton 패턴은 오직 하나의 인스턴스만을 갖는 클래스이다. 그 것은 생성된 인스턴스에 접근하는 하나의 포괄적인 점을 제공한다. |
Builder Pattern |
Builder 패턴은 단지 객체에 대한 형태와 내용만 지정함으로써, 복잡한 객체를 구성 할 수 있다. 즉, 각각의 객체 구성에 대한 모든 정보를 자세히 알고 있지 않아도 쉽게 객체를 구성 할 수 있다. |
Prototype Pattern |
Prototype 패턴은 어떤 객체의 생성 방식에 대한 자세한 정보를 모르더라도 그 객체가 원하는 다른 객체를 생성할 수 있도록 도와준다. 우선, 생성하려는 객체에 대한 프로토타입 객체를 미리 제공한 다음, 프로타입 객체의 복사본을 생성함으로써 원하는 대상 객체를 만들게 된다. |
What Is a Pattern?
반복되는 공통적인 문제에 대하여 가장 적절한 해결책을 제시하는 것
Benefits of Patterns(패턴의 이득)
· 디자인 문제점을 토론하기 위한 높은 레벨의 언어를 제공한다.
· 디자인 문제의 해결책을 제공한다.
· 패턴의 조합은 재사용할 수 있는 아키택쳐를 제공 한다.
디자인 패턴을 적용할 때 제일 중요한 세가지 규칙
· 구현 클래스가 아니라 인터페이스를 가지고 프로그래밍한다. à 인터페이스를 바탕으로 하는 클래스 호출
· 상속(inheritance)이 아니라 위임(delegation)을 주로 사용한다.
· Coupling을 최소화함으로써 추후의 변화를 국부화 한다. à 어느 하나의 기능 변화가 전체 클래스 구조를 바꾸거나 혹은 많은 부분에 걸친 변화를 야기한다면 디자인이 초기부터 잘 못 되어진 거라 할 수 있다. 디자인 패턴의 기본중에 기본은 “coupling을 최소화” 함에 있다.
디자인패턴 카탈로그 기술 형식
name(이름) : 패턴의 이름은 패턴 자체의 내용을 효과적으로 전달할 수 있어야 한다.
Classification(종류) : 여러 개의 패턴들을 체계적으로 분류한다. (예: 생성, 구조, 행위)
Intent(의도) : 이 패턴이 무엇을 하며 어떤 의도로 작성되었으며 무슨 문제를 해결하는 지를 설명하는 간단한 문장
Motivation(동기) : 이 패턴이 해결해야 하는 디자인 문제와 그것을 해결하기 위해 클래스와 객체들이 어떻게 사용되는지에 대해 시나리오 형식으로 기술함
Structure(구조) : 패턴에서 문제를 해결하기 위해 사용되는 클래스와 객체의 구조 UML 1.2 다이어그램을 통해서 일반적으로 표현한다.
Participants(구성물) : “구조”항목에 포함된 각종 클래스와 객체의 의미와 그 책임을 설명
Collaboration(협력관계) : 각 클래스와 객체가 자신에게 맡겨진 책임을 수행하기 위해 서로 메시지를 주고 받는 과정을 묘사함.
Consequence(결과) : 패턴이 목적을 달성하기 위해 어떤 면을 해결하는 지를 설명하고 패턴을 적용할 때 발생할 수 있는 문제점과 패턴적용시의 효과, 시스템 상황에 따라서 변동하는 부분들을 기술
Implementation(구현) : 패턴을 구현할 때의 고려사항과 힌트, 함정, 테크닉등과 프로그래밍 언어 별로 주의해야할 점들을 기술
Sample Code(예제코드) : 특정 프로그래밍 언어로 패턴을 구현한 예제를 보임
"Subject.java"에 있는 Vector 데이타가 바뀔 때 자동적으로 바뀐 내용을 보여주려고 한다. Subject 객체가 Observer객체의 내용을 바꾸기 위해서는 Observer객체의 메소드를 호출해야 하고, 메소드를 호출하기 위해서는 그 객체의 Reference가 필요하다.
Subject 객체의 addObserver라는 메소드를 통해 Observer는 자신의 Reference를 제공하고, Subject는 Observer 객체(MyFrame.java)의 update(Vector v) 메소드를 통해 화면을 바꾸어 준다. 별 무리 없이 작동하고 있다. 문제점은? MyFrame 클래스를 삭제해 보면 알게 된다. Subject 클래스가 더 이상 컴파일 되지 않는다. 이유는 간단하다. 자신의 Observer였던 MyFrame 클래스를 소스안에 포함하고 있었기 때문이다. 만약, 객체의 상태에 관심을 가지고 있는 객체가 오직 하나이고, 변경될 소지가 적다면, 위와 같이 코딩해도 별 문제는 없을 것이다. 하지만 Observer가 한 개가 아니라 20개 정도 되면 20 개나 되는 타입의 클래스를 포함하고 있게 된다. 그 중에 updata(Vector v)라는 메소드를 가지고 있지 않은 클래스라도 있으면 그건 바로 에러가 된다.
이러한 문제를 해결하는 방법은 Subject가 각 Observer들의 클래스 타입 대신 인터페이스를 사용하고, 이 인터페이스는 자신을 구현하는 클래스들에게 update(Vector v)라는 메소드를 구현하도록 강제한다. [Download]
코드를 자세히 살펴보면, 이 Observer 패턴과 자바의 이벤트 처리가 같음을 알 수 있다. 리스너(ActionListener)를 만들고, 리스너를 Subject(JButton)에 등록하고 JButton의 상태가 변하면 ActionListener로 강제된 actionPerformed 메소드가 호출된다. 이 패턴도 Observer 인터페이스를 구현하는 객체를 만들고, 만든 객체를 Subject에 등록하고, Subject 객체는 자신의 상태가 바뀌면, 인터페이스에 정의된 메소드를 호출한다. 즉 Observer 패턴은 이벤트 시스템을 구현할 때 사용된다. 이벤트 시스템의 구현은 Observer 패턴이 주는 또 하나의 강점이다.
하지만 기본은 전혀 바뀌지 않았다. 객체에게 무엇인가를 알려주는 방식은 메소드이고 메소드의 호출을 위해서는 객체의 Reference가 필요하는 것. 조금 다른 방식일 뿐 이 두가지 작업은 패턴을 적용해도 피할 수 없는 것이다. 즉, 패턴은 어떤 문제들을 교묘히 피해가는, 평소에는 잘 생각나지 않는 방법을 알려주고 있다. 그래서 패턴을 언제 사용하는가에 대한 이해는 외우지 않고 있으면 잘 생각나지 않고, 사용하지 않으면 이해되지 않는 측면이 있다. 패턴은 처음 적용해 볼 때 가장 어렵다. 한 번 하고 나면 생각만큼 어렵지는 않다.
필자의 패턴 설명은 전체적으로 모든 내용을 다루고 있진 않다. 일반적으로 Subject는 attach(Obsever obs), detach(Observer obs), notifyAll() 이라는 메소드를 가지고 있다. 하지만 detach 메소드는 다루지 않았다. 인터페이스가 강제하는 메소드도 여러 형태가 될 수 있으며, 그 메소드에 내용이 전달되지 않고 Subject의 다른 메소드를 호출함으로 Subject의 상태를 가져오기도 한다. 자세한 사항은 Design Pattern 책을 참고하기 바란다. Jstorm(www.jstorm.pe.kr)에서도 Design Pattern에 관련된 자료들을 찾을 수 있으리라 생각된다.
몇 가지이 수정이 가해지지 않으면, 이 예제는 실행되지는 않을 것이다. 그러나 Factory Method 패턴을 사용한 클래스가 무려 2개나 된다. 그것도 연결해서 사용했다. Connection 객체는 createStatement() 메소드를 통해서 Statement 객체를 생성하고 Statement 객체는 executeQuery() 메소드를 통해서 ResultSet 객체를 생성하고 있다. Connection, Statement는 모두 Interface이다. 만약 실제 객체를 사용했다면 위의 코드는 다음과 비슷한 모습이 될 것이다.
import java.sql.*;
public class JDBCExample {
private static String url = "";
private static String user = "";
private static String passwd = "";
public static void main(String args[]) {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection connection = DriverManager.getConnection(url,user,passwd);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("Select to_char(sysdate) from dual");
while (resultSet.next())
{
System.out.println("It is " + resultSet.getString(1));
}
resultSet.close();
statement.close();
connection.close();
} catch (Exception e) {
} finally {
}
}
}
위 코드는 실행되거나 컴파일이 되거나 하지는 않는다. 실제 오라클을 사용할 경우 쓰이는 객체들이지만 이렇게 코딩하는 사람은 없다. 만약 오라클 안쓰면 다 고쳐야 되는데 누가 이렇게 쓰겠는가? 위의 작업을 하는 사람들에겐 실제 무슨 객체가 쓰이는가는 관심사항이 아니다. 단지 어느 곳에 저장되어 있는 데이터를 읽어서 가져오는 것이 주요 목표인 것이다. JDBC는 각 데이터베이스들을 추상화했지만 더 높은 추상화를 적용한 JDO(Java Data Object)도 있다. JDO는 Persistence에 대한 추상화를 시도하고 있다.
public class OracleJDBC {
private static String url = "";
private static String user = "";
private static String passwd = "";
public static void main(String args[]) {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
OracleConnection connection = new OracleConnection(url,user,passwd);
OracleStatement statement = new OracleStatement();
OracleResultSet resultSet = statement.executeQuery("Select to_char(sysdate) from dual");
while (resultSet.next())
{
System.out.println("It is " + resultSet.getString(1));
}
resultSet.close();
statement.close();
connection.close();
} catch (Exception e) {
} finally {
}
}
}