JBoss 설정

Tools 2010. 3. 9. 18:14
1. jboss.org 접속, Projects-Server-Application Server에서 Downloads 클릭
2. Name : 원하는 버전 다운로드
3. 받은 압축파일을 압축해제 후 Server로 등록할 경로에 가져다 놓기

JBoss테스트
1. 이클립스 실행
2. 이클립스에서 Window-Proferences에서 Server 를 클릭하면 다음과 같은 창이 뜨게된다.
    아래의 화면에서 Add 버튼을 클릭한다.

3. Add버튼을 클릭하면 아래와 같은 화면이 뜨게 되는데 아래의 화면에서 JBoss맞는 버전을 선택 한 후 Next

4. Next버튼을 누르게 되면 아래와 같은 화면이 뜨는데 Browser를 클릭

5. 설치해놓은 JBoss서버 경로를 지정한 후 확인 버튼 클릭

6. 아래와 같은 화면을 확인 후 Finish

7. OK 클릭

8. 실행시킬 프로젝트를 마우스 오른쪽으로 클릭하여 Properties 클릭

9. 왼쪽 메뉴의 Targeted Runtimes 클릭 -> JBoss체크 -> Apply 클릭

10. 왼쪽메뉴의 Java Build Path 클릭 -> Source 클릭 -> Default output folder 경로를 설정

11. Libraries클릭 -> Add Library 클릭

12. Server Runtime 클릭 -> Next 클릭

13. JBoss 클릭 -> Finish 클릭

14. Server창에서 마우스 오른쪽 클릭 -> new -> Server 클릭

15. JBoss 설치 버전 선택 -> Next

16. Default JRE 선택 -> Next 

17. Finsh 클릭 

18. Server창에 생긴 JBoss서버를 마우스 오른쪽 클릭 -> Add and Remove 클릭

19. 추가하려는 프로젝트를 Add 시킨 후 Finish

20. JBoss Start!! ㄱㄱㄱ



'Tools' 카테고리의 다른 글

Apach ANT 설치  (0) 2010.04.05
JRebel Tools  (0) 2010.03.10
Posted by 미스터네오
,

ERWin으로 DB모델링 하기

Tip 2010. 2. 24. 11:13

여기에 수준이 뻔하듯이 DB모델링의 방법이 아니라 ERWind사용하기에 관한 부분이다.

AllFusion  ERwin Data Modeler라는 프로그램이 있다. 이걸로 DB모델링을 하면 편하게 할 수 있고 관계나 그런것을 모두 생각하고 고려하면서 할수 있으며 다하고 나면 SQL 쿼리도 다 만들어주기 때문에 참 편하다.(이번에 처음 써봤다.)

머 그래두 Query를 다 알고 있는게 당연히 좋겠지만.....

사용자 삽입 이미지

처음 들어가서 새로 만들기를 하면 위와같은 창이 나오는데 기본적으로는 논리/물리를 다 만들것이므로 Logical/Physical을 선택한다. 물론 다른 용도라면 원하는 것만 선택하면 된다. 나중에 SQL쿼리를 만들어야 하므로 아래에 타겟 DB를 선택한다. 여기서는 MS SQL Server를 선택했다.

사용자 삽입 이미지

일단 논리DB부터 만든다. 말그대로 논리DB다 그냥 생각나고 필요한대로 한글로 테이블을 만든다. 상단에 ①은 논리/물리 보기모드이고 ②가 테이블을 만드는 아이콘이다. ③번은 관계(Relation)을 설정해 주는 부분으로 1:1 1:N 등이 있다. 아이콘 누르고 관계되는 2개의 테이블을 선택해 주면 된다. 기본적으로 1:N의 경우는 관계를 이어주면 PK가 N족의 FK로 등록되며 PK로 올라간다. PK가 되길 원하지 않는다면 바꿔주면 된다.

사용자 삽입 이미지

테이블에서 오른쪽마우스를 눌러서 Entity Properties로 들어가면 테이블의 이름을 바꾸어 줄수 있고 Attributes에 들어가면 컬럼을 주가해주거나 컬럼의 타입을 결정해 줄수 있다.

사용자 삽입 이미지
논리 DB가 다 만들어지면 이젠 물리DB를 만들면 된다. 상단에서 화면보기를 Physical로 바꾸어주면 물리DB가 된다. 처음에는 논리때처럼 한글로 나오는데 마우스오른클릭으로 Culumn으로 들어가서 Rename으로 실제 DB에서 사용할 이을으로 바꾸어준다.

물론 여기서 바뀌어도 논리쪽은 바뀌지 않는다. 바꿔가면서 비교해 주면서 바꾸면 된다. 논리에서도 타입을 정해주었지만 여기서 정확한 타입을 결정해 주고 NULL여부도 선택해 준다. 컬럼길이의 경우 타입정한 후에 위쪽 ()안에 써주면 된다. 오른쪽 Average쪽에 써넣는 것이 아니다.(처음에 한 실수.. ㅡ..ㅡ)

자동증가값을 사용하는 경우에는 아래쪽 Indetity를 선택하고 1,1이라고 써주면 자동증가 인덱스로 생성된다.

사용자 삽입 이미지

다 만들어주었으면 이제 진짜 DB를 생성해야한다. 물론 DB가 설치되어있어야 한다. 상단메뉴에서 Schema Generation으로 스키마를 만들어 줄 수 있다.

사용자 삽입 이미지

생성할 스키마의 세부항복에 대한 부분을 결정할 수 있다. 자세한 내용들은 나도 아직은 잘 모르겠고 Trigger부분만 모두 체크를 풀어준다. 그 후에 Generate 버튼을 누른다.

사용자 삽입 이미지

여기선 SQL Server를 사용하였으므로 SQL서버에 연결한다. SQL계정로그인하고 DB이름 써주고 서버이름은 여기서는 로컬이라서 그냥 쩜만 찍어주었다.

사용자 삽입 이미지

각 쿼리가 나타나면서 성공여부가 나타난다. 설정이나 관계등에서 잘못되었을때는 Failure 메시지가 나타난다. 문제를 해결한뒤에 다시 스키마를 만들면 된다. 이렇게하면 모델링한 디비를 쉽게 만들어 낼 수 있다.

출처 : http://blog.outsider.ne.kr/

'Tip' 카테고리의 다른 글

내가 정리한 쿼츠 + 스프링 프레임웍  (0) 2010.03.30
Java StringFramework Quartz 사용  (0) 2010.03.30
이클립스 단축키 정리  (0) 2010.03.22
CVS 접속 프로젝트 다운  (0) 2010.03.10
editer 설정  (0) 2010.03.10
Posted by 미스터네오
,
상황. 이클립스에 F3을 누르면 해당 메소드 or 해당 클래스로 이동을한다.
하지만 이상하게도 JDK 클래스들을 보려하면 이상한 영문으로 표시만되있고 ㅡㅡ 알아볼수가없다.. 
분명 자바는 오픈소스라는데.. 오픈소스면 .. 소스를 볼수있단거라 생각했는데 .. 그게아닌건가? 라는 의문이든다 ㅠㅠ

그렇게 의문을 갖고 알아보니 .. 아 .. 소스를 볼수 있는방법이 있었다. ㅎㅎㅎ

다들 아시겠지만 혹시나 하는 마음에서 글을 올린다.

스텝1. 나는 현재 JDK 1.6 중 swing 패키지 안에있는 JFrame 클래스가 궁금하다.. 웹으로 api를 보는법도 있지만.. f3을 누르면 해당 클래스 나 메소드 변수 명으로 이동하지않았던가 ... 이클립스로 직접 보고싶다 ㅠㅠ 그래서 JFrame에 대고 f3을 눌러보았다.




스텝2. 아니나 다를까 이상한 화면이 나온다.. 이게 대체 머징 ... 왜못봐 .. ㅠㅠ 오픈소스라며!!! 
자자 너무 화내지말고 Change Attached Source... 버튼을 눌러보자 




스텝3. 엥 이상한 창이 뜬다.. 아 알고보니 External File..로 소스를 볼수 있다고 하니 한번 눌러보자 .




스텝 4. 그리곤 자바 가 설치된 곳으로 이동하여 src.zip 파일을 클릭하고는 열기를 눌러준다. 
(자바의 위치 자신이 깐위치 즉 : 필자는 C:\Program Files\Java\jdk1.6.0_18 에있다. 자바가 설치된 폴더에는 분명 jdk1.6.x.x 라는 폴더와 jre6이라는 폴더가 있을것이다. jre6폴더에는 src.zip이없음을 유의하자 )





스텝 5. 설정된것을 확인하고 ok!!!




스텝 6.헉... 드디어 열린다 열려!! 아 오픈소스 맞구나 볼수잇었네? 괜한 오해를하고말았다 ㅎㅎㅎ 
이처럼 String 클래스 List 클래스 등등 원하는 자바 api의 모든 소스를 확인할수 있는 결과를 낳았다. ㅎ

출처 : http://choikyusun.tistory.com
Posted by 미스터네오
,
□ 10장 Object 클래스
  ■ Object : 모든 클래스의 최상위 클래스
     - equals, toString, hashCode, finalize, clone, notify, notifyAl, wait, getClass
 boolean equals(Object obj) String toString() 
 int hashCode() protected void finalize() 
 final void notify(), final void notifyAll() protected Object clone()
 final void wait(), final void wait(Long timeout),
 final void wait(long timeout, int nanos)
final Class getClass() 
     ● 디폴트 toString() : 가장 중요한 정보를 리턴하는 메서드, 객체의 타입과 객체를 구별하는 번호
         - 오버라이딩 : 문자열로 리턴, 객체의 요약 정보를 문자열로 리턴하는 목적으로 사용
     ● 디폴트 equals() : 참조값 비교, 재정의해서 사용자 정의 비교법으로 사용, ==
         - 오버라이딩 : 사용자 정의 객체 비교법
     ● hashCode() : 객체의 고유번호 출력(16진수)
  ■ finallize() : 객체의 메모리가 제거되기 직전에 가비지 콜렉터가 자동으로 호출하는 메서드(protected void finalize())
      - 가비지 콜렉터는 스레드
  ■ clone() 오직 Object의 clone()만이 메모리 차원의 복사가 가능
      - 사용 : protected이기 때문에 상속된 상태에서 사용, Cloneable 인터페이스가 구현된 상태에서 clone()을 사용
      - 접근 : protected이기 때문에 내부에서 재정의한 후 super로 접근
  ■ wait()과 notify() : 메모리와 직접적인 관련이 있고, 데이터 동기화와 많은 관련이 있다.
     ● wait() : 스레드를 NotRunnable 상태로 만든다
     ● notify(), notifyAll() : NotRunnable 상태의 스레드를 Runnable 상태로 만든다.
     ● 공유자원을 synchronized로 동기화 했을때
         - 하나의 스레드가 공유자원을 사용할 때 자동으로 공유자원에 락(Lock)을 걸어준다.
         - 공유자원을 원하는 다른 스레드들은 자동으로 대기한다.
         - 락이 해제되었을때 대기하던 스레드들은 순서대로 공유자원을 사용
  ■ Class getClass() : 클래스의 정보 클래스
     ● 리플렉션(Reflection)을 이용한 프로그램 기법 : 객체를 이용해서 클래스를 얻는다.
□ 11장 자바 Reflection
  ■ Class 클래스 : .class의 등록정보 클래스, 바이트 코드의 등록정보 클래스
     ● 리플렉션(Reflection)을 이용한 프로그램 기법 : 객체를 이용해서 클래스의 정보를 분석해 내는 프로그램 기법
         - 사용 : 형은 알고있지만 형변환을 할 수 없는 상태에서 객체의 매서드를 호출  
         * 이유 : 모르는 클래스를 핸들하고자 하는 것이 아니라, 클래스의 모든 정보는 알지만 형변환을 할 수 없기 때문   
◈ 생성자에 매개변수가 없는 객체 생성하기
◈ 생성자에 매개변수가 있는 객체 생성하기 : 오버로딩에 의해서 여러개의 생성자가 존재할수 있기 때문에 생성자 검색
◈ 매개변수가 없는 메서드 호출하기
◈ 매개변수가 있는 메서드 호출하기
◈ 특정객체에 멤버 필드 값 세팅하기
◈ 특정객체에 멤버 피르 값 얻어내기
     ● Data 클래스 내에 존재하는 인터페이스와 상위 클래스 알아내기
Class c = Data.class;
Class iface = c.getInterface()
Class sc = c.getSuperclass()
     ● 정적 바인딩 클래스 : 컴파일할때 해당 .class 파일이 필요하다면, 해당 클래스를 정적 바인딩으로 사용하는 것이다.
         - 정적 바인딩으로 Class를 생성한 후 객체를 만들었다면 다운캐스팅 할 수 있다.
     ● 동적 바인딩 클래스 : 일반적인 리플렉션 기법
         - 다운 캐스팅 할수 없다.(컴파일할때 해당 클래스의 이름을 사용할 수 없기 때문)
         * 매개변수가 없을때나 있을때 메서드 호출
     ● instanceof : 형 확인이 필요한 상황에 사용
□ 12장 자바 Serialization
  ■ 클래스와 객체의 관계 : 클래스의 형정보와 객체의 메모리 사이의 관계
     ● 직렬화 : 객체를 저장하는 기법(바이트로 저장)
         - 이유 : 객체의 메모리는 순간적이기 때문에 영구적으로 보관하기 위해서
         - 조건 : 반드시 non-static, non-transient로 선언되어야만 직렬화에 포함된다.
직렬화를 위한 인터페이스
  ◈ Serializable 인터페이스 : 인터페이스가 구현되면 저장이나 복원은 Object 스트림이 알아서 한다.
  ◈ Externalizable 인터페이스
         - 객체 직렬화 과정
  ◈ 목표지점에 출력 스트림을 생성
  ◈ 생성된 스트림을 Object 출력 스트림으로 변환(ObjectOutputStream)
  ◈ 직렬화된 객체를 객체스트림을 통해서 전송하거나 읽어낸다.(ObjectOutputStream → writeObject(Object obj))
  ◈ 스트림을 닫는다
     ● 역직렬화 : 직렬화된 객체를 복원하는 기법
         - 객체 역직렬화 과정
  ◈ 목표지점에 입력 스트림을 생성한다.
  ◈ 생성된 스트림을 Object 입력 스트림으로 변환(ObjectInputStream)
  ◈ 객체 스트림을 통해서 직렬화된 객체를 읽어낸다(ObjectInputStream → readObject())
  ◈ 스트림을 닫는다.
     ● 수작업 직렬화 : SerialStream클래스를 역직렬화하기 위해 DeSerialStream 클래스를 두고있다
     ● writeObject()와 readObject()
         - writeObject() : 객체를 스트림에 기록하는데 사용
         - readObject() : 스트림으로부터 객체를 복원하는데 사용
     ● transient 스트림 : 멤버변수를 직렬화의 대상에서 제외할때 사용하는 키워드, 변수앞에 transient명시
□ 13장 자바 AWT & Swing
  ■ AWT와 스윙
     ● AWT(Abstract Window Toolkit) : 윈도우 프로그램을 하기 위한 클래스 라이브러리
         - 장점 : 플랫폼 독립적인 그래픽 프로그램을 작성할 수 있다.
     ● Swing(스윙) : AWT를 디스플레이적인 면과 기능적인 면에서 개선한 그래픽 라이브러리

'자바' 카테고리의 다른 글

소설같은 자바 훑어보기 2권!!  (0) 2010.02.19
소설같은 자바 훑어보기 1권!!  (0) 2010.02.18
Posted by 미스터네오
,

□ 6장 배열, 제네릭, 컬렉션
  ■ 배열(Array) 클래스 : 단순 용량적인 측면에서의 데이터 저장공간
     ● 단순 저장공간의 문제 : 자료를 처리하는 방식, 동적인 공간의 문제, 빠른 검색의 문제
  ■  배열
     ● 종류 : 기본 데이터 타입 배열, 객체 배열.
         - 데이터 타입 배열 : 배열생성과 동시에 메모리 생성
         - 객체 배열 : 객체변수의 이름만 생성되고, 메모리는 생성되지 않는다.
     ● 특징 : 같은 데이터 타입의 변수를 한꺼번에 여러개 생성.
     ● 검색 : 첨자를 통해서 배열 내에 존재하는 모든 변수를 검색
     ● 단점 : 배열의 크기를 변경할 수 없다.
  ■ 컬렉션, 맵 : 자료구조적인 측면에서의 데이터 저장공간, 배열의 발전된 구조, 인터페이스이다.
     ● 컬렉션 : 집합적인 저장공간
객체를 삽입 삭제하는 추상 메서드
boolean add(E o); 
boolean remove(Object o);
데이터 확인을 위한 추상 메서드
boolean isEmpty();  --- 비어있는지 확인
boolean contains(Object o); --- 특정 객체가 포함되어 잇는지 확인
int size(); --- 포함된 객체의 수를 리턴
데이터를 배열로 얻기 위한 추상 메서드
T[] toArray(); --- 객체들을 배열 형태로 리턴
         - List : 순서있다, 중복허용
         - Set : 수학적인 집합개념, 중복허용안함

     ● 맵 : 검색적인 저장공간, 데이터 삽입시 Key와 Value의 형태로 삽입, Key를 이용하여 Value를 검색
Object put(Object key, Object value); --- 데이터 삽입
Object remove(Object key); --- 데이터를 제거
Object get(Object key); --- 데이터를 검색
V put(K key, V value); --- 데이터 삽입
V remove(Object key); --- 데이터 제거
V get(Object key); --- 데이터 검색
         - HashMap : 키와 값을 이용해서 데이터 관리, 동기화가 보장되지 않는다.
         - Hashtable : 키와 값을 이용해서 데이터 관리, 동기화가 보장된다.
         - TreeMap : Map계열이면서 검색이 가능한 클래스

     ● Sotred 계열 : Set과 Map인터페이스를 상속바당 정렬 기능이 추가
         - SotredSet : Set 인터페이스를 상속
            * TreesSet : Set계열이면서 검색이 가능한 클래스, 데이터들이 자동으로 오름차순
         - SotredMap : Map 인터페이스를 상속
            * TreeMap : Key, Value로 데이터 관리, Key 기준으로 오름차순

  ■ 배열과 컬렉션,맵의 차이점 : 배열은 크기를 동적으로 늘릴수 없다. 하지만 컬렉션이나 맵계열의 클래스는 동적으로
                                             메모리를 확장할 수 있다

  ■ ArrayList와 HashSet
     ● 공통점 : 객체의 저장공간, 동기화 보장하지 않는다.
     ● ArrayList : List 인터페이스를 구현하는 클래스, 순서의 개념, 데이터 중복 허용
       - Vector와 공통점 : 순서가 있는 collection, List인터페이스 구현, 데이터 중복 허용
                       차이점 : 자동으로 동기화
     ● HashSet : Set 인터페이스를 구현하는 클래스, 집합의 개념, 데이터 중복 허용하지 않음
  ■ 제네릭 : 클래스에 사용할 타입을 클래스를 사용할 때 지정한 후 사용하는 기술
     ● 자바 코드내에서 Top<String>형 클래스의 사용
Top<String> t = new Top<String>();
t.setDate(str);
String str2 = t.getData();
     ● 자바 컴파일러가 제네릭을 처리하는 방식
Top t = new Top();
t.setData(str);
String str2 = (String)t.getData();
  ■ Stack : 후입선출 컬렉션 클래스
     ● push() 메서드 : Stack의 맨 위에 요소를 삽입
     ● pop() 메서드 : Stack의 맨 위에 있는 요소를 삭제하고 데이터를 반환
     ● peek() 메서드 : Stack의 맨 위에 있는 요소를 제거하지 않고 반환
  ■ AutoBoxing : 기본 데이터 타입을 래퍼(Wrapper) 클래스형의 객체로 자동으로 변환해주는 기능
  ■ Enumeration과 Iterator : 컬렉션 내의 데이터에 접근하기 위한 방법
     - 특징 : 모든 데이터에 접근가능
     - 차이 : Itorator는 Fail-Fast방식을 지원한다
     ● Enumeration 메서드 : hasMoreElements() //데이터가 있는지 확인, nextElement(); //다음 위치로 이동
     ● Iterator 메서드 : hasNext(); //데이터가 있는지 확인, next(); //데이터를 얻어내면서 다음 위치로 이동
□ 7장 Exception, 문자열, 자바5.0
  ■ 문자열
     ● 문자상수의 집합, 이중 따음표사용, String 클래스의 객체
     ● length(), concat(), equals(), indexOf(), lastIndexOf(), substring(), replace()
  ■ StringBuffer 클래스 : 동기화를 지원한다.
     ● 수정이 가능한 클래스, 객체는 문자열의 추가, 삭제, 수정, 검색등의 기능을 가지고 있다.
     ● StringBuilder와 차이 : 동기화를 지원하지 않는다.
  ■ Formatting 클래스
  ■ 자바의 상수
     ● 클래스에서 상수 선언 : final 키워드를 상수를 선언, 단한번 초기화, static final로 선언하면 전역적인 상수
     ● 인터페이스에서의 상수선언 : 멤버변수는 상수만 가능, 멤버변수 선언하면 자동으로 public static final이 된다.
  ■ enum(열거형) : 열거형으로 변수를 만들어도 이 변수는 열거형을 선언할 때 명시한 값을 넣을 수 있다.
  ■ Varargs(가변인수) : 필요에따라 매겨변수를 가변적으로 조정할 수 있는 기술.
□ 8장 자바 Thread
  ■ 프로세스와 스레드 : 하나의 프로세스 내에는 여러개의 스레드가 존재할 수 있다.
     ● 프로세스(process) : 하나의 프로그램은 하나의 프로세스에 해당.
     ● 멀티 태스킹(Multi-Tasking) : 운영체제 차원의 프로세스 관리
     ● 스레드(Thread)
         - 하나의 프로그램 내에서 실행되는 메서드
         - 같은 순간에 두 개의 메서드가 동시에 실행되면 두 개의 스레드가 동작하는 것이다. ---> 시퀀셜하게 동작한다.
         * 주의사항 : 우선권, 동기화(공유자원을 상대로 순서대로 작업이 이루어지는 것)
         - 스레드 상태
시작 상태(Start)
동작할 수 있는 상태(Runnable) : 스레드 실행, 스레드가 여러 개 존재할 수 있다.
동작 상태(Run) : Runnable상태에서만 Run 상태가 될 수 있다, 한순간 단 하나의 스레드만 Run 상태가 된다.
대기 상태(NotRunnable) : Run 상태로 진입할 수 없음, sleep()-일정시간, wait()과 notify()-수동으로 제어
종료 상태(Dead) : 스레드의 종료
  ■ 동기화(synchronized) : 줄서서 순서대로 공유자원 사용하기
      - 블록형태로 사용가능 
  ■ 스트림(Stream) : 자료 입출력을 도와주는 중간 매개체
File 입력 스트림의 연결과 작업
FileInputStream fis = new FileInputStream(파일);    //fis.read()를 이용해서 데이터 읽기
File 출력 스트림의 연결과 작업
FileOutputStream fos = new FileOutputStream(파일);    //fos.write()를 이용해서 데이터 쓰기
     ● 스트림이란 빨대다
  ■ File 클래스
     - File f = new File("FileMain.java);
 f.isFile() : 파일인지 아닌지 f.isDirectory() : 디렉터리인지 아닌지  f.isHidden() : 숨김 파일인지 
 f.lastModified() : 마지막 수정 날짜 f.canRead() : 읽기속성가진 파일  f.canWrite() : 쓰기속성가진 파일 
 f.getPath() : 상대 경로  f.getAbsolutePath() : 절대 경로  f.getName() : 디렉터리 또는 파일이름 
 f.toURL() : URL형식의 경로 f.exists() : 파일이 존재하는지  f.length() : 파일의 길이 
  ■ File 스트림
     ● 파일 입출력을 위한 스트림
         - 바이트 단위 : FileInputStream, FileOutputStream
         - 문자 단위 : FileReader, FileWriter
     ● RandomAccessFile : 데이터를 랜덤하게 접근
     ● Memory 스트림 : 목표지점 자체가 메모리, 배열과 문자열 등

'자바' 카테고리의 다른 글

소설같은 자바 훑어보기 3권!!  (0) 2010.02.22
소설같은 자바 훑어보기 1권!!  (0) 2010.02.18
Posted by 미스터네오
,

□ 1장 언어의 기본
 ■ 자바를 배우려면 클래스를 알아야 한다. 
 ■ 클래스를 정복하는 것이 자바의 최종 목표이다.
 ■ 데이터 타입 : 메모리를 생성하기 위한 도구
 ■ 기본 데이터 타입 : byte(1), char(2), int(4), long(8), float(4), double(8), boolean(1)
    ● 분류
       : 정수형 - byte, char, int, long double
       실수형 - float, boolean
 ■ 자바에서는 모든 데이터 타입이 signed 계열이다.  signed 계열 = 음수와 양수를 함께 표현
 ■ 데이터 타입의 목적
    1) 생성할 메모리의 크기를 지정하기 위한 목적으로 사용.
    2) 메모리의 형태(Type)를 지정하는 목적으로 사용.(메모리의 형태란 비트의 조합을 의미)
 ■ 데이터 타입의 최종 정의
    ● 메모리의 크기(Size)와 형태(Type)를 지정하기 위한 도구
 ■ 자바에는 포인터가 없어서 선언된 변수의 정확한 주소를 확인할 방법이 없다.
 ■ 변수 : 데이터 타입이 명시된 형태의 데이터를 담을 수 있는 메모리
 ■ 변수의 목적 : 데이터를 보관하기 위해서
 ■ 상수 : 데이터 그 자체를 말하여 바꿀 수 없는 데이터를 말한다. 데이터 그 자체를 상수라고 한다.
 ■ 데이터 할당 : 변수에 값을 넣는 것.
 ■ 데이터 할당의 법칙 : 변수에 상수가 존재해도 다른것을 할당하면 마지막에 넣은것이 최종적으로 할당


□ 2장 클래스의 기본
 ■ 자바에는 구조체가 없다. 구조체에서 발전된 개념이 클래스
 ■ 자바의 클래스 개념에서는 반드시 new 연산자로 메모리를 생성하는 부분이 나와야 한다.
 ■ 구조체와 클래스의 정의 : 구조체와 클래스는 데이터 타입 생성기이다.
 ■ 클래스의 역할
     ● Person(인간) 클래스 생성
class Person{
int age;
int height;
int weight;
}
     ● Person 클래스로 사람 생성
Person Hong = new Person();
Person Choi = new Person();
     ● Hong의 정보입력
Hong.age = 20;
Hong.height = 170;
Hong.weight = 60;
     ● Choi의 정보입력
Hong.age = 26;
Hong.height = 183;
Hong.weight = 75;
    ● Person Choi의 메모리는
     □□□□ □□□□ □□□□


□ 3장 클래스
  ■ 클래스의 구성요소
    ● 변수
       * 멤버변수 : 클래스꺼, 자동 초기화.
       * 지역변수 : 메소드꺼, 초기회 해줘야함.
    ● 메서드
      *일만하는 메서드 : void형태 리턴값 없음
       * 일을 한 후 값을 리턴하는 메서드 : 타입 
       → 리턴은 메서드의 종료를 의미한다.
  ■ 메서드는 변수이다.
  ■ 클래스 내의 메서드
    ● 보통 클래스 내에 존재하는 변수나 메서드를 클래스의 멤버라고 부른다.
  ■ 클래스 = 데이터 + 메서드
                = 구조체 + 메서드
  ■ 접근제어 : 메모리를 보유한 객체를 이용해서 멤버에 점을 찍고 접근할 수 있는지 없는지 결정
    ● 이런식의 접근제어를 자료의 은폐화 라고 표현
    ● public(제한없음) > protected(상속관계) > default(같은 패키지내) > private(같은 클래스내)
  ■ 객체의 메모리 생성
    ● 클래스 데이터 타입으로 변수를 선언, 컴퓨터 내의 메모리 속에 데이터 타입에 해당하는 만큼의 메모리를 확보하는 일
        (위의 인간(Person) 클래스에서 사람 객체(Choi) 생성 참조)
    ● 자바에서는 객체 변수를 참조변수라고 말한다.
    ● 참조값이란 객체의 메모리를 생성했을때 메모리와 연결된 유일한 숫자값.
    ● 객체 변수는 참조변수이다.
    ● 레퍼런스는 주소의 참조값


□ 4장 자바의 기본
  ■ Static
    ● 객체를 아무리 많이 만들더라도 스태틱 변수는 오직 하나의 메모리만 생성
    ● 객체를 생성하기 전에 스태틱 멤버에 접근할 수 있다.
    ● 객체 생성 이전의 스태틱의 메모리가 생성된다.
    ● 스태틱 멤버 메서드 내에 일반 멤버 변수를 사용할 수 없다.
  ■ Stack 메모리
    ● 프로그램을 실행하는데 필요한 메모리 공간
    ● 메서드가 호출되는데 필요한 메모리
        - 지역변수(Local Variable), 매개변수(Paremeter), 리턴값이 저장될 곳(Return Value)
    ● 스택 프레임
        - 하나의 메서드를 호출하는데 필요한 메모리 덩어리
        - 메서드 하나당 하나의 스택 프레임이 존재
    ● 자바의 메모리 : 스택, 힙
    ● 가비지 콜렉터 : 자바의 메모리 관리자 역할(힙에 생성되는 객체의 메모리)
  ■ 오버로딩
    ● 메소드의 이름은 같은데, 인수의 갯수나 Type 이 다른 형태의 메소드로써 설계, 사용의 편의성을 위해서 존재한다.
  ■ 생성자
    ● 객체를 만들기 위해서 호출되는 메소드 형태의 것(new 와 함께 호출하면 객체 생성)
  ■ 상속
    ● 하위 클래스가 상위 클래스를 상속받았을때, 하귀 클래스는 상위 클래스의 모든 권한을 갖게 된다.
    ● 생성자는 상속되지 않는다. 상→하 순위로 생성자 호출
    ● Virtual메소드 : 아버지의 이름으로 아들의 메서드를 호출하는 기법
    ● this : 자기자신
    ● super : 상위 클래스


□ 5장 다형성
  ■ 다형성 : 하나로 여러가지 일을 하는것
    ● Abstract
        - 추상클래스 : 몸체없는 메서드({})를 가지고 있는 클래스, 클래스 선언부 앞에 abstract를 붙여준다.
        - 추상메서드 : 몸체없는 메서드({}), 메서드 선언부 앞에 abstract를 붙여준다.
    ● Interface : 골격만 가지고 있는 클래스, 몸체없는 메서드로만 이루어진 클래스
    ● Overriding
    ● Upcasting : 하위 클래스의 객체가 상위 클래스의 형으로 캐스팅 되는 것.
    ● Downcasting : 업캐스팅한 객체를 다시 되돌리는 것.
        - 직렬화 : 객제의 메모리를 통째로 저장할 수 있는 기법
  ■ 다중상속 : 자바는 단일 상속을 기본


'자바' 카테고리의 다른 글

소설같은 자바 훑어보기 3권!!  (0) 2010.02.22
소설같은 자바 훑어보기 2권!!  (0) 2010.02.19
Posted by 미스터네오
,

모델1의 아키텍쳐

모델2의 아키텍쳐
 

모델1
Model 1의 장점
§   개발 속도가 빠르다.
§   개발자의 스킬이 낮아도 배우기 쉬워 빠르게 적용할 수 있다.
Model 1의 단점
§   JSP페이지에서 프리젠테이션 로직과 비즈니스 로직을 모두 포함 때문에 JSP페이지가 너무 복잡해 진다.
§   프리젠테이션 로직과 비즈니스 로직이 혼재되어 있기 때문에 개발자와 디자이너의 분리된 작업이 어려움
§   JSP페이지의 코드가 복잡해짐으로 인해 유지보수 하기 어려워 진다.

모델2
Model 2 장점
§   점차 Web Application 이 복잡해 지고, 사용자들의 요구가 증가함에 따라 새로운 방식의 개발방식의
   요구가 증대되었
다.
§   점차 개발시의 개발 비용보다는 유지보수를 쉽게 할 수 있는 개발 방식을 요구하는 경우가 많아 졌다.
§   대규모 프로젝트 하에서 Model 1 만으로는 해결하기 어려운 부분들이 대두 되었다.
§   MVC에서 View 는 JSP 가 담당하게 되고 , Controller 는 Servlet 이담당 하며,
   Model 은 Appllication 을 이용하여
개발하게 된다.
Model 2 단점
§   Model 2로 개발방식은 Model 1보다 어렵다.
§   Model 1으로 개발 하는것 보다 개발시간이 더 요구된다.

Posted by 미스터네오
,

<Spring>

Web/Spring 정리 2010. 2. 18. 14:57


1. Spring Framework 기본 개념 정리
  (1) POJO (Plain Old Java Object)
       다른 클래스를 상속받아서 만들어야 하는 클래스가 아닌 순수한 형태의 자바 클래스
  (2) IoC(Inversion of Control)
       제어의 역전이라는 뜻으로 개발자가 직접 객체를 언제 생성하고 없앨지 결정하는 것이 아니라
       컨테이너에게 맡긴다는 뜻이다.
       POJO(Plain Old Java Object) 객체의 생성에서 생명주기의 관리까지를
       IoC Container 에게 담당시킴으로써(XML 이용)  개발에 있어서 편의성과 재사용성의 극대화를 추구하는 개념
  (3) AOP (Aspect Oriented Programming)
       관점 지향 프로그래밍이란 뜻으로 기존의 객체지향언어에 의해 추구된 모듈화에 따라 많아진 중복된
       코드라던지 공통된 처리에 관련한 것들을 관점으로 뽑아내어 공통으로 처리하는 방식

2.  IoC (Inversion of Control)
  (1) Bean 의 관리
       1) Spring 에서 org.springframework.beans.factory.BeanFactory 가 기본 IoC 컨테이너이고,  
           보다 진보된 형태로 ApplicationContext 라는 컨테이너도 같이 지원하고 있다.
       2) IoC 컨테이너에 의해서 Bean 의 생명주기가 관리된다.
       3) 이렇게 관리되는 Bean 은 POJO 타입이고 싱글톤이다.
       4) XML 설정을 통해서 각각의 Bean 들을 묶어주는데, 이런 것을 일컬어 묶기(wiring)라고 한다.
       5) 묶인 Bean 을 원하는 곳에 세팅하는 것을 DI(의존성 주입) 이라고 부른다.
  (2) DI (Dependency Injection)
       의존성 주입이란 뜻으로 객체를 생성해서 필요로 하는 곳에 넣어주는 것을 뜻한다.
       1) Constructor Injection (생성자 주입)
           생성자에 필요 객체를 선언하고 멤버변수(Field)로써 객체를 사용하는 것을 말한다.
           객체 생성시 자동으로 IoC 컨테이너가 관련 객체를 주입시켜준다.
       2) Setter Injection (세터 메소드 이용 주입)
           생성자 주입과 방식은 비슷하나 setter 메소드를 이용한다는 점이 차이점이다.

 ex) 
 public class ExampleBean {
    private AnotherBean beanOne;
    private YetAnotherBean beanTwo;
    private int i;

    public void setBeanOne(AnotherBean beanOne) {
        this.beanOne = beanOne;
    }
    public void setBeanTwo(YetAnotherBean beanTwo) {
        this.beanTwo = beanTwo;
    }
    public void setIntegerProperty(int i) {
        this.i = i;
    }    
}

       3) Method Injection (메소드 주입)
          Singleton(싱글톤 : 오직 하나의 객체만 생성되는 패턴) 객체와 Non-Singleton 객체간의 연결이 
          필요할 경우 사용하는 방식
  (2) DI 를 위한 xml 설정
       1) Constructor Injection

<bean id="foo" class="com.spring.Foo">
    <constructor-arg><ref bean="bar" /></constructor-arg>
</bean>  

       c.f.) 생성자의 인자가 여러개인 경우 type 이나 index 로써 구별해서 넣어주는 것도 가능하다.
       2) Setter Injection 

<bean id="foo" class="com.spring.Foo">
    <property name="bar">
        <ref bean="bar"/>
    </property>
</bean>

3. AOP (Aspect Oriented Programming)
  (1) 용어 정리
       1) Aspect
           관점이란 뜻으로 트랜젝션, 보안, 로깅 처럼 공통적으로 쓰이는 부분들에 개입하는 것을 모듈화한 것
       2) Join point
           클래스의 객체 생성 시점, 메소드 호출 시점, Exception 발생 시점 등 AOP가 개입되는 시점을 말한다.
       3) Advice
          특정한 join point에서 interceptor 형태로써 다양한 기능을 제공하는 것을 뜻한다.
          <1> Before advice : 메소드 호출전의 기능 제공
          <2> After returning advice : 모든 메소드 실행이 다 끝나고 난 뒤 기능 제공(익셉션 발생하지 않음)
          <3> After throwing advice : 익셉션이 던져졌을때 기능 제공
          <4> After (finally) advice : 익셉션 발생이 됐던 안됐던 간에 기능 제공
          <5> Around advice : 가장 강력한 advice 로써 메소드 시작부터 마지막까지 두루 기능을 제공하는 것이 가능
       4) Pointcut
           정규 표현식이나 AspectJ의 문법 등으로 실제로 적용되는 join point 를 선언하는 것을 뜻한다.
       5) Weaving
           실제 aspect 객체와 대상 객체를 컴파일시나, 로딩시나, 실행시에 합쳐주는 것을 뜻한다.
       6) Target
           실제 advice를 받는 객체로써 대상을 뜻한다.
  (2) Spring AOP
       1) Spring 에서 지원하는 AOP로써 proxy 기반이다. AspectJ 라는 AOP 툴이 있지만, Spring AOP 만으로도
           Bean에게 거는 AOP 기능은 충분히 활용 가능하다. 단, 메소드의 실행에 관해서만 Pointcut 을 걸 수 있다.
       2) Advice 작성을 위한 Advice interface
          <1> MethodBeforeAdvice : 메소드 실행 전
          <2> AfterReturningAdvice : 메소드 실행 후
          <3> ThrowsAdvice : 메소드 실행 중 익셉션 발생시
          <4> MethodInterceptor : 메소드 실행 전, 후 예외 발생시점에 적용
       3) AOP XML 설정
          <1> Annotation 을 이용한 @AspectJ 방식 (Spring 개발팀 추천)
               a. 설정 파일(applicationContext.xml등)에 다음의 구문을 먼저 추가한다.

             b. aspectjweaver.jar, aspectjrt.jar 파일 두개를 lib 에 추가한다.
             c. class 선언부 위에 @Aspect 를 추가한다.
             d. 메소드위에 @Pointcut("execution()") 을 추가한다.(메소드는 private void 의 가명 메소드)
    ※ Pointcut execution 설정방법

execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern)
         throws-pattern?)       (?는 생략가능)

            형식 execution(제한자? 리턴타입 패키지? 메소드명(파라미터) throws선언?)
    
             e. Pointcut 의 종류 : execution, within, bean 등 스프링 레퍼런스 문서 참조
             f. Advice 의 종류 : @Before, @AfterReturning, @AfterThrowing, @After, @Around
                                       @Around 사용시 첫번째 인자로 ProceedingJoinPoint 가 있어야 하며 proceed() 메소드가
                                       호출되어야 한다. 그리고 return type 도 Object 로 맞추거나 void 로 맞춰준다.
         <2> XML 스키마를 이용한 설정방식
             a. 위의 <1> 의 a처럼 schema 설정이 잡혀있어야 한다.
             b. xml 설정을 잡는다.
                  <aop:config> : 이 태그 안에 설정을 잡아준다.
                  <aop:aspect> : POJO 방식의 빈으로 aspect 를 설정할때 사용한다.
                  <aop:pointcut>,<aop:advisor> : Spring API 인터페이스를 상속 받아서 만들 경우 사용한다.
                  ※ <aop:aspect> 안쪽의 advice 태그 종류
                   <aop:before>, <aop:after-returning>, <aop:after-throwing>, <aop:after>, <aop:around>
             c. 관련 Bean을 만들어 주는데 Spring API 인터페이스를 이용한 경우 다음과 같은 interface를 이용할 수 있다.
                  - MethodBeforeAdvice
                  - AfterReturningAdvice
                  - ThrowsAdvice
                  - MethodInterceptor : around 와 같은 기능

4.  Spring MVC
  (1) 구성요소
       1) DispatcherServlet : 클라이언트 요청을 받아서, 컨트롤러에 요청을 전달하고 컨트롤러가 리턴한
                                       결과 값을  View 에 전달하여 응답을 생성한다. (Struts 의 ActionServlet)
       2) HandlerMapping : 클라이언트 요청 URL 을 어떤 컨트롤러가 처리할지를 결정한다. (struts-config.xml 의 역할)
       3) Controller : 요청을 처리하고 결과를 리턴한다 (Struts 의 Action)
       4) ModelAndView : 컨트롤러가 처리한 결과 정보 및 뷰에 관련한 정보를 담는 객체 (struts의 forward 기능 포함)
       5) ViewResolver : 컨트롤러 처리 결과를 생성할 뷰를 결정
       6) View : 컨트롤러 처리 결과 화면을 생성하는 객체
  (2) 기본적인 Spring MVC 설정 잡기
       1) web.xml 에 DispatcherServlet 의 설정을 잡는다. (여기서 잡은 이름-servlet.xml 파일이 설정파일이 된다)
       2) HandlerMapping 을 이용 URL 과 Bean의 name 속성을 같은 것으로 설정한다.

   <bean id="beanName" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />

       c.f.) 만약 이 설정을 넣지 않으면 자동으로 이 HandlerMapping 이 적용된다.
       3) Spring 설정 파일에 name에 URL 을 입력하고 class에 Controller 를 지정한 뒤 작성한다.
       4) Controller 에서는 ModelAndView 객체를 생성해서 직접 갈 곳을 지정해준다.
  (3) HandlerMapping 구현 클래스
       1) SimpleUrlHandlerMapping : 패턴과 컨트롤러 이름을 비교하여, URL 이 패턴에 매칭될 경우 지정 컨트롤러 사용
       2) BeanNameUrlHandlerMapping(default) : URL 과 일치하는 bean 이름의 컨트롤러 사용
       3) ControllerClassNameHandlerMapping : URL 과 매칭되는 클래스 이름을 갖는 빈을 컨트롤러 사용
       4) DefaultAnnotationHandlerMapping : @RequestMapping 어노테이션을 이용 컨트롤러 사용
           참고1) web.xml에 <url-pattern> 을 '/path/*'  같이 설정을 할 경우 전체 경로를 다 사용하고 싶으면
                   HandlerMapping  설정시 <property name="alwaysUseFullPath" value="true" /> 를 넣어 설정을 잡는다.
           참고2) 복수개의 HandlerMapping 구현시 property 로 order 를 넣어서 순서를 정해줄 수도 있다.
  (4) Controller 구현 클래스
       1) Controller, AbstractController : 단순 처리용
       2) AbstractCommandController : 요청 파라미터를 객체에 자동으로 저장해 주고 검증기능 제공한다.
       3) SimpleFormController : 폼을 출력하고 폼에 입력한 데이터를 처리할때 사용
       4) AbstractWizardFormController : 여러 페이지에 걸쳐 데이터 입력시 사용
       5) ParameterizableViewController, UrlFilenameViewController : 단순히 뷰로 바로 전달할때 사용
       6) MultiActionController : 비슷한 로직을 수행하는 기능들을 하나의 컨트롤러로 구현할때 사용
  (5) ViewResolver 구현 클래스
       1) InteralResourceViewResolver(default) : JSP 나 tiles 연동 위한 View 객체를 리턴
       2) VelocityViewResolver : Velocity 연동을 위한 View 객체를 리턴
       3) BeanNameViewResolver : 뷰 이름과 똑같은 이름의 Bean 객체를 View 로 이용
       4) ResourceBundleViewResolver : 뷰 이름과 View 객체간 매핑 정보를 특정 자원 파일에 저장해서 사용 
       5) XmlViewResolver : 뷰 이름과 View 객체간 매핑 정보를 XML 파일에 저장해서 사용
  (6) Validator 와 Errors
       1) Validator 인터페이스를 상속받은 클래스로써 command(form)에 들어오는 값들에 대한 검증이 가능하다
       2) 주요 메소드 (Validator 인터페이스를 상속받는 클래스에서 구현해야 하는 메소드)
          <1> boolean supports(Class clazz) : 인자값으로 들어오는 클래스가 검증대상인지 확인하는 메소드
          <2> void validate(Object target, Errors errors) : 실제 검증 메소드 (target 은 command 객체이다)
                a. ValidationUtils 클래스를 통해서 데이터의 검증을 한다. 혹은 Errors 를 이용해 에러를 저장한다.
                b. 이렇게 저장된 오류는 jsp 화면에서 <form:errors> 를 이용해 오류를 보여주는 것이 가능하다.
                c. Errors 에는 전체적인 오류를 저장하기 위한 reject 메소드와 특정 필드에 대한 오류를 저장하기 위한
                    rejectValue 메소드가 있다.
       3) command 가 쓰이는 Controller xml 설정에 프로퍼티로써 validator 를 적용시켜야 한다.
          ex) <property name="validator" ref="reboardValidator"></property>
  (7) HandlerInterceptor
       컨트롤러에서 요청을 처리하기 전이나 후에 뭔가를 수행하고 싶을때 사용한다.
       1) 주요 메소드
          <1> boolean preHandle() : 컨트롤러에서 요청이 처리되기 전 실행
          <2> void postHandle() : 컨트롤러가 요청을 처리한 후에 실행
          <3> void afterCompletion() : 응답이 완전히 끝난 뒤 실행되는 메소드
       2) 사용방식
          HandlerInterceptor 를 상속받거나 원하는 메소드만 구현할 수 있는 
          HandlerInterceptorAdaptor 를 상속받은 클래스를 xml 에서 HandlerMapping 설정에 
          <property name="interceptors"> 로 등록할 수 있다.

5. transaction (트랜젝션)
  (1) ACID : 트랜젝션에서 추구했던 기본 4요소
       1) Atomicity : 원자성  모든 작업이 하나의 단위로 이루어져야 한다 (다 수행되던가 없던일 하던가)
       2) Consistency : 일관성  DB가 트랜젝션 작업중 일관된 데이터를 유지해야 한다
       3) Isolation : 독립성   다른 트랜젝션과 독립적으로 작업이 수행되어야 한다.
       4) Durability : 내구성  일단 커밋된 데이터는 계속해서 유지되어야 한다. 시스템 오류라 할지라도...
  (2) 프로그램적인 트랜젝션
       1) TransactionTemplate을 사용하거나 PlatformTransactionManager를 직접 상속받아서 쓰는 방법이 있다.
       2) RuntimeException 이 던져지면 rollback 이 된다. (그 외의 exception 은 기본적으로 무시)
  (3) 선언적인 트랜젝션
       1) Propagation (트랜젝션의 전파)
          <1> PROPAGATION_REQUIRED : 이미 있는 트랜젝션이 있다면 그걸 쓰고, 없다면 새로 만들어 낸다.
          <2> PROPAGATION_MANDATORY : 이미 있는 트랜젝션이 있다면 그걸 쓰고, 없다면 
                TransactionRequiredException 을 발생시킨다.
          <3> PROPAGATION_REQUIRES_NEW : 이미 있는 트랜젝션을 잠시 멈추고 
                새로운 트랜젝션을 만들어서 수행한다. 새로운 트랜젝션 종료후 기존 트랜젝션이 계속 실행된다.
          <4> PROPAGATION_NESTED : 트랜젝션은 하나만 쓰지만 중간에 savepoint 를 저장하는 방식을 말한다.
                (JDBC 매니져 방식에서만 적용 가능 Hibernate 나 JDO 같은 ORM 에서는 사용불가)
          <5> PROPAGATION_SUPPORTS : 트랜젝션이 없어도 되지만 트랜젝션이 실행되는 중에는 적용을 받는다
                ex) 일일 이체 한도액이 100만원이라고 한다면
                1. 50만원을 이체하는 트랜젝션이 시작
                2. 70만원을 이체하는 SUPPORTS 트랜젝션 시작
                3. 이체한도를 넘기는 결과가 되어 2번의 과정은 롤백이 된다.
                4. 50만원만 이체가 된다.
          <6> PROPAGATION_NOT_SUPPORTED : 트랜젝션이 필요없기 때문에 기존 트랜젝션이 있을 경우
                기존 트랜젝션을 멈추었다가 메소드 실행이 끝난 뒤 트랜젝션을 다시 시작한다.
          <7> PROPAGATION_NEVER : 이미 트랜젝션이 있다면 익셉션을 던져서 메소드 실행을 중지한다.
       2) Isolation (독립성) : 문서 참고
          독립성이 증가하면 동시성은 감소하고, 데이터의 일관성은 증가한다.
          <1> READ_UNCOMMITTED : 트랜젝션 중 다른 트랜젝션에 의한 커밋되지 않은 데이터도 읽어들일 수 있다.
          <2> READ_COMMITTED : 커밋된 데이터만 읽을 수 있다. 
                (다른 트랜젝션에 의한 커밋으로 일어난 변화는 읽어들인다)
          <3> REPEATABLE_READ : 트랜젝션 진행중에는 어떠한 변화점도 읽어들일 수 없다.
                (다른 트랜젝션에 의한 커밋도 상관없이 못 읽어들인다)
          <4> SERIALIZABLE : DB에 하나의 트랜젝션만 허용하는 것으로 하나의 트랜젝션이 실행중에
                 다른 트랜젝션이 접근한다면 잠시 중지했다가 기존 트랜젝션이 끝나고 나면 다시 시작한다.
           단, 오라클은 트랜젝션이 중지했다가 시작되는 것이 아니라 ORA-08177 오류를 발생시킨다.
          <5> DEFAULT : DB가 사용하는 isolation 정책 따름
   ※ 문제점 정리
       - Dirty read : 어떤 트랜잭션 T1이 다른 트랜잭션 T2가 아직 커밋하지 않은 데이타를 읽었는데 
                         T2가 롤백 되는 경우. T1이 읽은 데이타는 dirty.
       - Nonrepeatable read : 어떤 트랜잭션 T1이 계속 해서 같은 데이터를 읽어들이는데 그 사이에 
                         다른 트랜잭션 T2가 데이타를 수정하면 T1은 같은 데이터를 얻을 수 없게 된다.
       - Phantom read : 어떤 트랜잭션 T1이 계속 데이터를 읽어들이는데 그 사이 다른 트랜잭션 T2가 
                                새로운 데이타를 추가하면 T1은 전혀 새로운 데이터를 읽어들이게 된다. 마치 귀신처럼.
   

Posted by 미스터네오
,

<Struts>

Web/Struts 정리 2010. 2. 18. 14:23


1. struts 설정
   (1) lib(jar 파일들) : /WEB-INF/lib 폴더에 다운 받은 struts.jar 파일들을 넣는다.
   (2) web.xml : ActionServlet 에 대한 설정을 잡는다.
   (3) validation.xml : Validator Framework를 사용하기 위한 설정파일
   (4) struts-config.xml : struts 와 관련된 모든 설정이 있는 파일
   (5) MessageResources.properties
  다국어 지원 파일, 파일명 끝에 _[언어명](M~~_ko.properties)을 붙임으로써 struts가 자동으로 클라이언트의 언어를
  인식해서 그 언어에 맞는 메시지를 보여주기 위해서 사용한다. 단, 한글을 넣어줄때에는 아스키코드(유니코드)값으로
  변환해야 하는데 이때 native2ascii 프로그램을 이용한다.

2. 주요 클래스
   (1) ActionServlet (struts 에서 기본제공 servlet)
        : MVC에서 Controller 역할의 핵심.
   (2) Action (Business logic)
        : Controller 역할, 데이터를 가공하거나 처리하는 일
   (3) ActionForm (Beans)
        : Client 에서 들어오는 폼 데이터를 저장하는 클래스, reset 을 통해서 null 처리 및 초기화를 담당,
          사용자의 입력 값에 대한 데이터 유효성 체크도 담당(Validator Framework)
   (4) struts-config.xml
        : 실행되는 모든 요청에 대한 정보가 담겨져 있는 xml 파일, 어떤 기능이 수행되는지, 어떤 경로로 이동이
          되는지 설정.
          <form-bean>(ActionForm 지정), <action>(요청 주소와 응답경로) 가 주요 태그

3. Struts Framwork


4. Struts class diagram

'Web > Struts 정리' 카테고리의 다른 글

스트러츠 셋팅  (0) 2010.11.01
Posted by 미스터네오
,

<Servlet>

Web/Servlet 정리 2010. 2. 18. 14:21


<<<<<<<<<<<<<<<<<<<<< Servlet >>>>>>>>>>>>>>>>>>>>>>>>
웹서버의 컨테이너는 서블릿을 로딩한다. 그 뒤 사용자의 요청을 받아서 Request, Response 객체를 만들어낸다. service() 메소드를 호출해서 서비스를 제공하는 방식이 서블릿의 서비스 방식이다.

1. 서블릿의 라이프사이클 (life cycle)
   (1) init() : 첫번째 사용자 요청시 실행 but <load-on-startup> web.xml 에 설정하면 서버구동시에 실행된다.
   (2) service() : 클라이언트의 전송방식에 따라 doGet 혹은 doPost등을 실행하며 멀티쓰레드 환경으로 구축되어있다.
   (3) destroy() : 서버가 중지될때에 실행

2. 서블릿의 주요메소드
   (1) service() : 사용자의 요청에 실행되는 메소드, 구현하지 않는다.
   (2) doGet() : 전송방식이 GET방식일때 호출(요청주소에 파라미터값들이 붙어서 요청되는 방식)
   (3) doPost() : 전송방식이 POST 방식일때 호출(request의 body부분에 파라미터값들이 들어온다.)

3. 한글처리 : han.HanServlet 참고
   (1) request(요청) : 파라미터값을 ISO-8859-1 로 쪼개고(decoding) EUC-KR(encoding)로 변환한다.
                              (GET or POST) request.setCharacterEncoding("euc-kr") (POST)
   (2) response(응답) : response.setCharacterEncoding("euc-kr") 일반적으로 JSP에서 해결

4. 영역별 객체
   (1) ServletContext (창고, 파라미터 저장)
        : 웹 어플리케이션 전체에 있는 모든 Servlet에 영향을 끼칠 수 있는 객체이다.(only one 하나만 존재한다)
   (2) ServletConfig (파라미터 저장)
        : Servlet 마다 존재하는 객체이다.
   (3) HttpSession (창고)
        : 사용자가 웹브라우져로 접속해서 웹브라우져를 끌때까지 존재하는 객체이다.
   (4) HttpServletRequest (창고, client 에서 넘어오는 파라미터 저장)
        : 사용자의 요청이 들어오면 생성되고 응답이 끝나면 사라지는 객체이다.

5. 흐름의 이동
   (1) forward : 원래는 요청된 주소의 Servlet이 요청에 대해 응답을 해야하지만, forward 를 통해서
                      웹 어플리케이션내의 다른 자원(jsp or url)으로 이동시키는 방식을 말한다.
        - 주소는 요청한 그대로 유지된다.
        - 동일 웹 어플리케이션 내의 자원으로만 이동된다.
   (2) redirect : 원래 요청한 주소를 다른 주소로 redirect(재방향) 시켜주는 것으로 첫번째 받은 요청에 서버는
                      301상태정보와 새로운 URL 을 가지고 클라이언트에게 응답하고, 다시 클라이언트(웹브라우져)가
                      새로 받은 URL을 요청하고 거기에 따른 응답이 이뤄지는 방식을 말한다.
        - 주소는 완전히 다른 것으로 바뀐다.
        - 동일 웹 어플리케이션이 아니더라도 얼마든지 이동이 가능하다
        - 첫번째 요청된 request는 사라진다.(2번의 요청과 응답)

6. HTTP 상태(status) 코드 정리
   (1) 1XX : Informational
        리퀘스트 요청을 받아서 처리하는 중
   (2) 2XX : Success
        리퀘스트가 잘 받아졌다는 정보
   (3) 3XX : Redirection
        리퀘스트를 처리하는데 다른 과정이 한번 더 일어나야 한다는 정보
   (4) 4XX : User-Agent Error
        리퀘스트에 잘못된 문법, 잘못된 요청이 있다는 정보
   (5) 5XX : Server Error
        서버상에서 익셉션이 발생했다는 정보
   (6) 대표적 코드들
      <1> 200 : 모든 요청이 잘 받아졌고, 응답도 잘 됐다는 정보
      <2> 401 : 권한이 부족한 경우
      <3> 404 : 요청한 URI 정보가 없는 경우
      <4> 405 : 요청한 메소드 방식의 처리가 불가능한 경우
      <5> 500 : 서버에서 익셉션 발생

7. Servlet Filter
   (1) Servlet이 실행되기 전, 중간에 request, response를 가로채서 처리하는 방식
        : Servlet의 로직을 고치지 않아도 특정한 패턴(URL-Pattern)으로 들어오는 요청과 응답에 대해서 독립적으로
           처리할 수 있기 때문에 유지보수 측면에서 뛰어나다.
   (2) Filter 생명주기
        init() -> doFilter() -> destroy()
   (3) 설정방법
        <1> web.xml에 <filter> <filter-mapping> 추가
        <2> javax.servlet.Filter interface 를 상속받는 클래스 작성
        <3> doFilter() 메소드 작성 : chain.doFilter() 호출

8. JNDI 방식으로 DataSource 등록하기 (DBCP)
   Tech 문서 : http://kr.sun.com/developers/techtips/enter_12_24.html

   tomcat.apache.org 홈페이지 document 6.0 -> jdbc 설정
  (1) context.xml 변경
       <WatchedResource>WEB-INF/web.xml</WatchedResource> 밑에다가 제공되는 소스를 붙여넣는다.
       context.xml에 등록을 하면 서버에 속한 모든 프로젝트에서 접근이 가능하다.

 <Resource name="jdbc/myoracle" auth="Container" type="javax.sql.DataSource"  
                 driverClassName="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@localhost:1521:JAVA"
                  username="scott" password="javac" maxActive="20" maxIdle="10" maxWait="-1"/>

       server.xml에서의 등록방법
  하단의 프로젝트 지정 부분 사이에 저 소스를 끼워넣어주어도 된다.
  (2) web.xml 변경
  (3) java source 변경
 http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html

'Web > Servlet 정리' 카테고리의 다른 글

servlet Post방식  (1) 2010.11.02
servlet Get방식 테스트  (0) 2010.11.02
Posted by 미스터네오
,