ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] Spring Shell과 profile로 분리하기
    WEB/back-end 2021. 3. 9. 23:30
    반응형

     

    Spring Shell

    스프링 쉘은 스프링에서 커맨드 어플리케이션을 쉽게 만들 수 있도록 제공하고 있습니다.
    특히 버전 2부터 스프링 부트에 적합하게 개선되어 저도 버전 2를 사용해서 구현했습니다.

     

    Dependency 추가

    pom.xml에 의존성을 추가해서 간단하게 사용할 수 있습니다 :)

    <dependency>
        <groupId>org.springframework.shell</groupId>
        <artifactId>spring-shell-starter</artifactId>
        <version>2.0.0.RELEASE</version>
    </dependency>

     

    커맨드 작성하기

    커맨드 메소드를 작성할 클래스에 @ShellComponent 어노테이션을 붙여주고, 메소드에는 @ShellMethod를 붙여줍니다.

    @ShellComponent 의 경우 어플리케이션 실행시

    해당 어노케이션을 가진 객체의 메서드(@ShellMethod)가 커맨드로 등록됩니다.

     

    메서드명이 입력하는 커맨드가 되지만 어노테이션에 key옵션을 설정해주면 key를 통해 커맨드를 입력할 수 있습니다.
    메서드의 파라미터를 통해 커맨드 입력시 인자를 받아올 수 있습니다.

    @ShellMethod(value = "예매 내역 조회", key = "rsvs")
    public String getBookingList(String memberId) {
    
         StringBuilder result = new StringBuilder();
    
        //TODO 
    
        return result.toString();
    }

     

    profile 설정하기

    저는 cli로 profile을 사용하기 위해 application-cli.properties를 새로 작성했습니다.
    profile을 사용하면 환경별로 설정을 다르게 해줄 수 있는데,
    기본적으로 apllication.properties를 바탕으로 하고, 활성화시킨 profile을 오버라이딩하게 됩니다.

    db나 다른 설정은 동일하게 사용할 것이기 때문에

    웹서버를 사용하지 않겠다는 설정만 apllication-cli.properties 아래와 같이 추가했습니다.

    spring.main.web-application-type=NONE

    그리고 기본적으로 cli를 profile을 활성화 했을 때만 cli를 사용하고 싶기 때문에 각각의 properties에 아래와 같이 활성화/비활성화 설정도 추가해주었습니다.

    spring.shell.interactive.enabled = true/false

     

    cli 실행하기

    실행시에는 IDE에 profle을 설정하는 방법을 여러가지 적용했으나 하나도 되지 않았습니다...

     

    메인 메서드에 아래 코드를 추가해서 활성화 시키는 방법을 쓰기도 했지만,

    System.setProperty("spring.profiles.active", "cli");

    그냥 커맨드로 입력하는게 편해서 아래처럼 빌드 후 -Dspring.profiles.active=cli 옵션을 추가해 실행시켜주었습니다.

    $ ./mvnw clean package -DskipTests
    $ java -jar -Dspring.profiles.active=cli target/moviedapanda-web-0.0.1-SNAPSHOT.war

    참고로 REPL이 작동해서 테스트가 돌아가지 않기 때문에
    start.spring.io에서 생성한 sample integration test를 삭제하거나 -DskipTests을 입력해 테스트를 건너뛰고 빌드해주어야 합니다.

     

    참고로 저는 기본 명령어를 해제하지 않았기 때문에 그대로 사용 가능합니다.

    필요없거나 수정하고 싶다면 비활성화하거나 오버라이딩해서 사용가능하다고 합니다.

     

     

     

     

    자세한 내용은 아래 공식 문서에서 확인할 수 있습니다.

    [참고] Spring Shell Reference Documentation

    댓글