자바 성능 튜닝 이야기 1주차
자바 성능 튜닝 이야기 1주차
들어가며
이 포스트는 이상민의 「자바 성능 튜닝 이야기」 Chpater1을 읽고 개인적으로 학습한 내용을 정리한 글입니다.
- 책: 자바 성능 튜닝 이야기
- 저자: 이상민
- 출판사: 인사이트
- 챕터: Chapter1
핵심 내용 정리
J2EE 디자인 패턴
- Intercepting Filter 패턴
- 요청 타입에 따라 다른 처리를 하기 위한 패턴
- Front Controller 패턴
- 요청 전후 처리를 위한 컨트롤러를 지정하는 패턴
- View Helper 패턴
- 프레젠테이션 로직과 상관 없는 비지니스 로직을 헬퍼로 지정하는 패턴
- Composite View 패턴
- 최소 단위의 하위 컴포넌트를 분리해 화면을 구성하는 패턴
- Service to Worker 패턴
- Front Controller 와 View Helper 사이에 디스패처를 두어 조합하는 vo턴
- Dispatcher View 패턴
- Front Controller와 View helper로 디스패터 컴포넌트를 구성
- 뷰 처리가 종료될 때까지 다른 활동을 지연시키는 점이 Service to Worker 패턴과의 차이
- Business Delegate 패턴
- 비지니스 서비스 접근을 캡슐화하는 패턴
- Service locator 패턴
- 서비스와 컴포넌트 검색을 쉽게 하는 패턴
- Session Facade 패턴
- 비지니스 티어 컴포넌트를 캡슐화하고, 원격 클라리언트에서 접근할 수 있는 서비스를 제공하는 패턴
- Composite Entity 패턴
- 로컬 엔티티 빈과 POJO를 이용해 큰 단위의 엔티티 객체를 구현
- Transfer Object 패턴
- 데이터를 전송하기 위한 객체에 대한 패턴
- Transfer Object Assembler 패턴
- Transfer Object로 모든 타입 데이터를 처리할 수 없으므로, 여러 Transfer Object를 조합하거나 변형한 객체를 생성해 사용하는 패턴
- Value List Handler 패턴
- 데이터 조회를 처리하고, 결과를 임시 저장하며, 결과 집합을 검색해 필요한 항목을 선택하는 역할을 수행
- Data Access Object 패턴
- DAO
- Service Activator 패턴
- 비동기적 호출을 처리하기 위한 패턴
Transfer Object 패턴
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package com.perf.pattern;
import java.io.Serializable;
public class EmployeeTO implements Serializable {
private String empName;
private String empID;
private String empPhone;
public EmployeeTO() {
super();
}
public EmployeeTO(String empName, String empID, String empPhone) {
super();
this.empName = empName;
this.empID = empID;
this.empPhone = empPhone;
}
// Getter 메서드들
public String getEmpName() {
return empName;
}
public String getEmpID() {
return empID;
}
public String getEmpPhone() {
return empPhone;
}
// Setter 메서드들
public void setEmpName(String empName) {
this.empName = empName;
}
public void setEmpID(String empID) {
this.empID = empID;
}
public void setEmpPhone(String empPhone) {
this.empPhone = empPhone;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("empName=").append(empName).append("empID=")
.append(empID).append(" empPhone=").append(empPhone);
return sb.toString();
}
}
- Transfer Object를 사용하면, 하나의 객체에 결과 값을 담아올 수 있어, 두 세번 요청하는 일이 줄어든다
Service Locator 패턴
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
32
33
34
35
36
package com.perf.pattern;
import java.util.*;
import javax.naming.*;
import java.rmi.RemoteException;
import javax.ejb.*;
import javax.rmi.PortableRemoteObject;
public class ServiceLocator {
private InitialContext ic;
private Map cache;
private static ServiceLocator me;
static {
me = new ServiceLocator();
}
private ServiceLocator() {
cache = Collections.synchronizedMap(new HashMap());
}
public InitialContext getInitialContext() throws Exception {
try {
if (ic == null) {
ic = new InitialContext();
}
} catch (Exception e) {
throw e;
}
return ic;
}
public static ServiceLocator getInstance() {
return me;
}
}
- Service Locator 패턴은 EJB의 EJB Home 객체나 DB의 DataSource를 찾을 때 소요되는 응답 시간 감소에 사용
- cache 객체에서 home 객체를 찾은 결과를 보관하고 있다가, 객체가 필요할 때 제공
This post is licensed under CC BY 4.0 by the author.