본문 바로가기

주식

shell script 파일로 빠르게 폴더구조 및 파일 생성하기

728x90

프로젝트에서 프레임워크를 설정하고 나면 로직 구현을 위해 비슷한 구조의 폴더를 생성하고 java 파일을 생성해야 합니다. 이 부분이 꽤 번거롭고 손이 많이 가는데 이 부분을 어떻게 개선할 수 있는지 알아보겠습니다.

shell script 자동화!

Shell(쉘) 부터 알아볼까요?

Shell(쉘)은 운영체제상에서 사용자가 입력한 명령을 읽고 해석하여 대신 실행해주는 프로그램 입니다. 운영체제의 커널과 사용자 사이를 이어주는 역할을 하며 사용자의 명령어를 해석하고 운영체제가 알아들을 수 있도록 도와주는 명령어 해석기 입니다.
셸(컴퓨터) - 나무위키 (namu.wiki)

 

셸(컴퓨터) - 나무위키

이 저작물은 CC BY-NC-SA 2.0 KR에 따라 이용할 수 있습니다. (단, 라이선스가 명시된 일부 문서 및 삽화 제외) 기여하신 문서의 저작권은 각 기여자에게 있으며, 각 기여자는 기여하신 부분의 저작권

namu.wiki

사용자가 운영 체제와 상호 작용할 수 있도록 하는 명령줄 인터페이스 입니다. 쉘은 사용자의 입력을 읽고 명령을 해석하고 실행합니다. 또한 사용자가 환경을 사용자 지정하고 스크립트를 사용하여 작업을 자동화하는 방법을 제공합니다.

여기서 중요한 점은 자동화하는 방법을 제공한다는 점입니다. +_+

 

Shell Script

유닉스 계열 운영체제의 많은 셸들이 셸 스크립트를 사용하므로, 이를 사용하여 운영체제의 명령뿐만 아니라 응용 프로그램들을 실행하여 많은 작업을 자동화 할 수 있습니다. GUI가 각 프로그램들을 조합하여 자동화 하기 매우 힘든 데 비해 CLI의 장점이 빛나는 부분 입니다. 유닉스 계열의 운영체제는 본래 확장자를 엄격하게 구분하지 않기에 확장자가 없거나 다르게 되어 있는 셸 스크립트 파일도 많지만, 보통 셸 스크립트의 파일은 .sh라는 확장자를 갖습니다.

Shell Script로 무엇을 할 수 있을까요?! 거의 생각하는 모든 것을 할 수 있겠지만 저도 제가 활용하는 범위 내에서만 나열해보겠습니다.

  • 폴더 / 파일 - 생성, 수정, 삭제, 이동
  • 입력 / 출력
  • 조건 검색 (if)
  • 반복 (for)

이런 기능들을 할 수 있는데 거의 프로그래밍을 할 수 있다고 보는 것이 맞겠습니다. 내 입맛에 맞게 Shell Script를 작성해서 반복적인 업무들을 자동화 하는 것이 가능해집니다. 물론 각종 프로그래밍 언어로도 해당 작업을 할 수 있습니다. 그렇게 하는 것이 더 좋을 때도 분명 있을 겁니다. 그럼에도 Shell Script를 경험해보시기를 권합니다. +_+

 

파라미터 전달

Shell Script를 동적으로 활용할 수 있게 만들어주는 요소가 파라미터 입니다. 사용자의 조건이 변경됨에 따라 맞춰서 수행하는 작업내용도 변경되도록 할 수 있습니다. 아래는 파라미터로 -h를 넘겼을 때 출력해줄 사용법 내용과 파라미터를 넘기지 않았을 때 종료 처리하는 내용입니다.

if [ "$1" == "-h" ]
then
  echo "**************************************************************************************"
  echo "Usage: ./exist_folder.sh [domain name] [table name]"
  echo ""
  echo "Example:"
  echo "  ./exist_folder.sh test best"
  echo "    - 이미 존재하고 있는 'test' 도메인 안에 best 관련 모든 자바 파일을 생성합니다."
  echo "**************************************************************************************"
  exit 0
fi

if [ "$1" == "" ]
then
  echo "No domain package name detected"
  exit 1
fi

도움말에 적어놓은 것처럼 Shell Script 파일명이 exist_folder.sh 이라고 하겠습니다. 해당 sh 파일을 호출하면 아래와 같은 결과를 얻게 됩니다.

파라미터 전달 안 했을 때.
도움말을 보여줄 때.

 

위의 Shell Script 만 봐도 몇 가지 내용이 나와있습니다. 하나씩 살펴보면 좋겠지만 깊어질 수 있기 때문에 다른 분이 잘 정리해놓은 블로그 링크로 대체하겠습니다.

쉘(bash Shell) 스크립트 기본 문법, 실제 예제(백업하기, 로그 파일 정리하기) (tistory.com)

 

쉘(bash Shell) 스크립트 기본 문법, 실제 예제(백업하기, 로그 파일 정리하기)

#쉘 스크립트 서버 작업 자동화 및 운영(DevOps)을 위해 기본적으로 익혀둘 필요가 있다. 쉘 명령어를 기본으로 하되, 몇 가지 문법이 추가된 형태 시스템 프로그래밍에서 꼭 익히는 내용 중 하나

probe29.tistory.com

 

하고 싶은 것

결과적으로 반복적이지만 매번 copy & paste도 번거로워지는 내용을 Shell Script를 통해서 많은 부분을 자동화 하자는 겁니다. 그러면 아래처럼 파일을 쉽게 만들 수 있습니다.

# Application
if [ ! -f src/main/java/com/jin/${1}/application/dto/Create${upper}Dto.java ]
then
  echo "
package com.jin.${1}.application.dto;

import com.jin.${1}.entity.${upper}Entity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;

public class Create${upper}Dto {

  @Getter
  public static class Request {


    public ${upper}Entity toEntity() {
      return new ${upper}Entity(
      );
    }
  }
}
" > src/main/java/com/jin/${1}/application/dto/Create${upper}Dto.java
fi

...

if문으로 해당 파일이 있는지 체크하고 없다면 아래 내용을 echo를 통해 출력하는데 > src/main/java/com/jin/${1}/application/dto/Create${upper}Dto.java 파일에 출력하라(생성하라)는 뜻입니다. (upper 변수는 받은 파라미터를 한 번 가공한 내용이라서 위의 Shell Script에는 표현되지 않았습니다.) 이런식으로 자동으로 생성하고 싶은 파일들을 쭉 나열하고 실행해주면 됩니다.

 

도움이 되셨기를 바랍니다.

반응형