Recent Posts
Recent Comments
Link
06-30 12:53
Today
Total
관리 메뉴

삶 가운데 남긴 기록 AACII.TISTORY.COM

JAVA application 런타임 상태 정보 유지 기법 본문

DEV&OPS/Java

JAVA application 런타임 상태 정보 유지 기법

ALEPH.GEM 2024. 5. 8. 20:43

1. JRE 런타임 실행 옵션

자바 application을 실행할 때 JRE 실행 옵션으로 변수 값을 지정할 수 있습니다.

-DmyVariable=변수 값

이런 식으로 지정 할 수 있는데 

System.getProperty("myVariable");

같이 System.getProperty()를 이용하여 실행 중인 application 내에서 해당 변수 값을 읽어서 언제든 사용할 수 있습니다.
이 변수 값을 다시 설정하려면 

System.setProperty("myVariable", "value");

이런 식으로 실행 중에 setProperty(key, value)으로 변수 값을 변경할 수도 있습니다.

예를 들어 아래 Application이 runnable jar로 MainEx.jar 라고 빌드 되었다고 가정하고

java -DencryptType=AES -jar MainEx.jar args1 args2 args3

이런 식으로 인코딩 타입을 실행할 때 실행 옵션을 지정해 주고 application 내에서 이를 이용할 수 있습니다.

public class MainEx {
    private static String runtimeValue = null;
    
    public static void main(String[] args) {
        MainEx.runtimeValue = System.getProperty("encryptType");

        //변수 값이 설정되었는지 확인
        if (runtimeValue != null) {
            System.out.println("암호화 방식 알고리즘: " + runtimeValue);
        } 

        //실행 옵션
        if(args.length > 0){
            for(int i = 0; i < args.length; i++{
                System.out.println(args[i]);
            }
        }
    }
}

 

 
물론 main()메서드를 사용하면 args 배열을 통해 실행 옵션을 전달할 수 있지만,
Web application이나 RCP application 같이 main()을 사용하지 않는 경우 유용하게 사용할 수 있습니다.

 

2. 싱글톤 패턴

자바 application에서 런타임 실행 중 메모리에 상태 정보를 유지하고 싶을 때 싱글톤 패턴을 이용하는 것이 간단합니다.
싱글톤 패턴이란 다음과 같은 규칙을 따르는 패턴입니다.

  1. private volatile static 으로 인스턴스 변수를 선언하여 클래스의 유일한 인스턴스를 멀티스레드에 안전하도록 함.
  2. private 생성자를 만들어 외부 클래스에서 인스턴스를 생성하는 것을 막아서 인스턴스를 유일하게 함.
  3. public static 메서드를 정의하여 내부에서 인스턴스를 하나만 생성하여 그 인스턴스를 리턴해주는 메서드를 작성함.
public class ApplicationState {
    private volatile static ApplicationState instance; //멀티스레드로 실행할게 아니라면 volatile 을 선언하지 않아도 됨.   
    private String userName;
    
    //private 생성자로 외부에서 직접 객체 생성을 막음
    private ApplicationState() {
        userName = "";
    }
    
    //인스턴스 리턴을 위한 메서드 작성
    public static ApplicationState getInstance() {
        if (instance == null) {
            instance = new ApplicationState();
        }
        return instance;
    }
    
    //사용자 이름 설정
    public void setUserName(String name) {
        this.userName = name;
    }
    
    //사용자 이름 가져오기
    public String getUserName() {
        return userName;
    }    
}


그러면 이 ApplicationState 클래스의 인스턴스는 싱글톤으로 정의되었기 때문에 
Application 내의 어떤 클래스라도 getInstance() 메서드를 사용해서 application 내에서 유일한 이 인스턴스를 가져올 수 있습니다.
이를 이용해서 상태 정보를 실행 중에 유지하고 사용할 수 있습니다.

예를 들어

public class AnotherClass {
    public void printUserInfo() {
        //getInstance()를 이용해서 ApplicationState의 유일한 인스턴스 얻기
        ApplicationState state = ApplicationState.getInstance();
        
        //상태 정보 읽어오기
        String userName = state.getUserName();
        
        //읽어온 상태 정보 출력
        System.out.println("사용자 이름: " + userName);
    }
}

 

이제 실행 용 Main.java 클래스를 만들어 실행시켜 봅니다.

public class Main {
    public static void main(String[] args) {
        //ApplicationState 인스턴스 얻기
        ApplicationState state = ApplicationState.getInstance();
        
        //상태 정보 설정
        state.setUserName("AlephGem");
        
        //AnotherClass 인스턴스 생성
        AnotherClass anotherClass = new AnotherClass();
        
        //다른 클래스에서 상태 정보 출력
        anotherClass.printUserInfo();
    }
}



이렇게 JRE 런타임 실행 옵션이나 싱글톤 패턴을 이용하면 application이 실행하는 동안 상태 값을 유지시켜서 언제든 사용할 수 있습니다.
Web Application의 쿠키처럼 file을 파일 시스템에 저장해서 필요한 상태 값을 유지하는 방법도 있습니다만 쿠키가 갖고 있는 보안 이슈를 그대로 갖고 있게 되는 것은 감수하셔야 합니다. 





728x90

'DEV&OPS > Java' 카테고리의 다른 글

이클립스 속도 튜닝  (0) 2024.05.10
JAVA URL, JSON 처리  (0) 2024.05.08
Jasypt(Java Simplified Encryption) 사용 방법  (0) 2024.05.08
JAVA Visitor 패턴 - 자료구조를 돌아다니면서 처리  (0) 2024.05.08
SWT JFace 주요 위젯  (0) 2024.05.08