Post

자바 성능 튜닝 이야기 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.