-
[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을 입력해 테스트를 건너뛰고 빌드해주어야 합니다.참고로 저는 기본 명령어를 해제하지 않았기 때문에 그대로 사용 가능합니다.
필요없거나 수정하고 싶다면 비활성화하거나 오버라이딩해서 사용가능하다고 합니다.
자세한 내용은 아래 공식 문서에서 확인할 수 있습니다.