[Java] 인텔리제이 Program Arguments 설정 방법 (+활용 예시)

enjoy89·2024년 11월 19일

최근 배치 프로그램 개발 중, 특정 스케줄러 메서드만 테스트 및 디버깅을 해야 하는 상황이 많았다. 이때 테스트 코드를 작성하는 방법도 있었지만, 더 간단하고 빠르게 실행할 방법을 찾다가 Program Arguments를 활용한 방법을 알게 되었다.

Program Arguments

  • 애플리케이션을 실행할 때 외부에서 전달하는 인자
  • main(String args[]) 메서드의 args 배열을 통해 전달되며, 애플리케이션의 동작을 실행 시점에 동적으로 변경 할 수 있다.

인텔리제이 설정 방법

Edit Configurations > Modify Options > Program arguments 추가

Program arguments 부분에 원하는 argument를 넣고 apply

public class Test {

	public static void main(String[] args) {

		for(String str : args) {
			System.out.println(str);
		}
	}
}

출력 결과

item1
item2
item3

+실전 활용 예시

Spring Boot 배치 스케줄러 테스트에서 Program Arguments 활용

문제 상황

배치 프로그램 안에 여러 개의 스케줄러 메서드가 포함되어 있을 때, 그중 하나의 특정 스케줄러 메서드만 별도로 디버깅 하거나 테스트하고 싶었다.

@Component
@Slf4j
public class MyTaskScheduler {

    @Scheduled(cron = "0 0 12 * * ?")
    public void scheduledMethod() {
        log.info("Scheduled Method Running...");
        // 작업 수행 로직
    }

    public boolean testSchedulerMethod() {
        log.info("Test Scheduler Method Running...");
        // 테스트 로직
        return true;
    }
}

Program Arguments를 활용한 스케줄러 테스트 코드

@SpringBootApplication
@EnableScheduling
public class BatchApplication implements CommandLineRunner {

    private final MyTaskScheduler myTaskScheduler;

    public static void main(String[] args) {
        SpringApplication.run(BatchApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        log.info("Program Arguments received: " + args[0]);

        String task = args[0];

        if ("testScheduler".equals(task)) {
            boolean result = myTaskScheduler.testSchedulerMethod();
            if (result) log.info("Scheduler test: SUCCESS!");
            else log.info("Scheduler test: FAIL!");
            System.exit(0); // 애플리케이션 종료
        }
    }
}
  • 위와 같이 코드 작성 후, Program ArgumentstestScheduler를 입력하면 애플리케이션 실행 시 args[0]으로 testScheduler 값이 전달된다.
  • 해당 조건문 안에 있는 작업만 선택적으로 실행 및 테스트가 가능해진다.

출력 결과

Program Arguments received: testScheduler
Test Scheduler Method Running...
Scheduler test: SUCCESS!

Program Arguments 활용의 장점

  1. 코드 수정 없이 테스트 가능
    • Program Arguments를 사용하면 코드 수정 없이 특정 작업만 실행할 수 있어 테스트가 간편해진다.
  2. 배치 프로그램 테스트 최적화
    • 여러 작업 중 특정 작업만 선택적으로 실행할 수 있어 디버깅이나 테스트에 적합하다.
  3. 실행 환경에 따른 동작 분리
    • 개발 환경, 운영 환경 등에 따라 다른 설정값을 전달하여 유연하게 처리할 수 있다.

Program Arguments와 VM Options의 차이

많은 분들이 Program Arguments와 VM Options를 혼동하기도 하는데,

간단히 구분하자면:

Program Arguments

애플리케이션의 내부 로직을 제어하는 데 사용되며, main(String[] args)로 전달됨

  • 예: "testScheduler"

VM Options

자바 클래스에서 사용할 수 있는 시스템 속성 정의

  • 예: Dusername=jeondui
profile
Junior Backend Developer 🌱

0개의 댓글