EJB 성능 향상을 위한 12가지 팁
- 좋은 EJB 설계와 구현은 좋은 성능을 가진 애플리케이션을 만든다.
EJB(Enterprise JavaBeans)는 J2EE(Java 2 Enterprise Edition) 플랫폼에서 넓게 적용될수 있는 서버쪽 컴포넌트 아키텍쳐이다.
성능좋은 기업 애플리케이션을 개발하기 위해서는 먼저 성능 향상을 위한 좋은 디자인과 구현방법을 인식하고 있어야 한다. 개발단계 후반에는 전체 애플리케이션에 대한 성능 튜닝에 많은 관심을 가지게 된다.
이번 팁에서는 성능 좋은 EJB 기반 기업 애플리케이션의 설계와 구현을 돕는 몇개의 일반적인 기술들을 설명하고 하고자 한다.
1. coarse-grained EJB 원격 인터페이스를 설계하라
원격 및 홈 인터페이스의 EJB를 호출하는 모든 메소드는 원격호출이기때문에 fine-grained 객체의 호출에서는 많은 오버헤드가 발생되므로 상호호출하지 않은 것이 좋다.
이런 오버헤드를 피하기위해서는, EJB는 독립적인 식별과 라이프사이클을 가진 독립적인 비즈니스 객체로 표현하는것이 좋다. 의존적인 객체는 EJB로서 모델링되어서는 안되며, 대신 자바 클래스 또는 EJB의 한부분으로 구현되어야 한다. 예를들어 주문은 EJB로 구현되지만, 주문의 각 개개의 아이템들은 EJB가 아닌 헬퍼클래스로 구현되어야 한다.
2. coarse-grained EJB 원격 인터페이스 메소드를 설계하라
EJB의 각 클라이언트 호출은 원격호출이며 각 호출은 접근제어, 트랜잭션 그리고 activation/passivation을 체크등을 포함한다.
그래서 여러번의 원격 메소드 호출은 선능이 떨어지며 또한 원격 메소드 호출은 로컬 메소드 호출보다 성능이 떨어진다. coarse-grained 메소드를 설계하는 하나의 테크닉은 메소드내에서 데이터 양을 늘리고 여러 메소드 호출을 합치는 것이다.
리스트1을 보면 회원데이터를 얻기 위해서는 여러번의 메소드를 호출하기 때문에 적당한 원격 인터페이스 메소드선언이 아니다.
[리스트1]
public interface Person extends EJBObject {
public String getFirstName()
throws RemoteException;
public void setFirstName(String firstName)
throws RemoteException;
public String getLastName()
throws RemoteException;
public void setLastName(String lastName)
throws RemoteException;
public int getPersonId()
throws RemoteException;
public void setPersonId(int personId)
throws RemoteException;
}
리스트2를 보면, 수많은 호출들을 몇개의 메소드로 줄였기 때문에 성능을 향상시킨다.
즉 리스트1에서 firstname, lastname, personid를 얻기 위해서는 각각의 원격 메소드를 호출했지만, 리스트2에서는 하나의 getPersonData 메소드를 호출함으로써 firstname, lastname, personid를 가진 PersonData 객체로 값을 얻을 수 있다.
[리스트2]
public interface Person extends EJBObject {
public PersonData getPersonData()
throws RemoteException;
public void setPersonData(PersonData personData)
throws RemoteException;
}
public class PersonData implements Serializable {
private String firstName;
private String lastName;
private int personId;
public PersonData(String firstName, String lastName, int personId) {
this. firstName = firstName;
this. lastName = lastName;
this. personId = personId;
}
public String getFirstName() {
return firstName ;
}
public String getLastName() {
return lastName;
}
public int getPersonId(){
return personId;
}
}
첫댓글 자료실에 관련 소스 있습니다.
Value Object Design Pattern