Flutter-Seoul
Published in

Flutter-Seoul

Flutter 에서 Git hooks 활용하기

Photo by Yancy Min on Unsplash

개발자에게 Git은 필수인 존재이며 버전 관리를 위해 commit, push등 여러 명령어를 입력하고는 합니다.

때론 해당 명령어 전에 특정 작업들(테스트 코드 실행, 코드 포멧팅등)을 수행하고 싶을때가 있습니다.

이를 달성하기 위해 Git 에서는 Hooks란 기능을 제공하고 있습니다.

오늘 이시간에는 Flutter에서 Git Hooks를 어떻게 사용할 수 있는지 그리고 이를 사용했을때 어떤 이점이 있는지 알아보도록 하겠습니다.

해당 글은 아래와 같은 순서로 진행됩니다.

  1. Git Hooks란 무엇인가?
  2. Git Hooks를 사용할때의 이점
  3. Flutter에서 Git hooks 설정 및 사용하기
  4. 글을 마치며

1. Git Hooks란 무엇인가?

Git 에서 발생하는 여러 이벤트들에 대하여 (commit, push, pull등) 해당 이벤트 발생전에 개발자가 정의한 특정 작업들을 수행하게 함으로써 성공 또는 실패에 따라 작업을 수행할지 말지에 대해서 결정할 수 있게 합니다.

Git Hooks에 대한 정의는 버전 관리가 되고 있는 프로젝트의 .git/hooks 에 저장되며 Git에선 이를 읽어 위의 목적을 달성할 수 있도록 합니다.

이를 간단하게 commit 이란 명령어를 예를 들어 설명하면 아래 그림과 같이 도식화 할 수 있습니다.

git commit 명령어에 대한 hooks 수행 과정

이에 대한 좀 더 자세한 설명을 알고 싶으신 분은 아래 링크를 참고 바랍니다.

2. Git Hooks를 사용할때의 이점

1) 개발자의 실수를 줄여준다.

개발은 사람이 하는 일로 실수가 발생하기 마련입니다.

쓰지 않는 변수의 선언, 관용적 규칙에 따르지 못한 변수명 선언 또는 파일명 지정등

Flutter에선 위의 개발자의 실수를 확인해 볼 수 있는 analyzer 란 툴이 제공이 됩니다.

해당 명령어는 Git hooks에서 제공되는 것이 아니기 때문에 당장 Flutter 프로젝트에서 flutter analyze 란 명령어를 입력하시면 이에 대한 확인이 가능합니다.

문제는 이를 매번 실행하기도 번거로울 뿐더러 잊는 경우가 자주 있습니다.

해당 명령어를 실행을 Git hooks를 이용하여 자동화 하여 commit 또는 push 시에 에러를 잡을 수 있는 명령어를 별도로 실행 하는 것으로 해당 실수를 방지할 수 있습니다.

2) 번거로운 작업들을 줄일 수 있다.

많은 프로젝트에서 자동화를 위해 Github Action을 이용하고는 합니다.

Action에 있는 Workflows들이 작업 수행이 실패 되면 다시 또 코드로 돌아와 해당 버그를 고친뒤 commit과 push를 반복하는 과정을 거치게 됩니다.

이는 매우 번거로운 일 중 하나이며 사실 개인적으론 Git hooks를 이용하는 가장 큰 이유중 하나입니다.

수많은 실패의 기록들…

Action의 작업들을 Git hooks를 이용하여 로컬에서 사전에 구동하게 하여 Fail이 나는 것들을 사전에 파악해 번거로운 작업을 줄일 수 있습니다.

3) 자동화가 가능하다.

위의 이유들을 제외하고 Git hooks는 다양한 목적으로 사용이 가능합니다.

테스트 코드의 실행, 서버의 배포등

Shell Script 작성을 통해 작업을 위한 코드들을 다양하게 추가할 수 있으므로 각자 환경에 맞게 Git의 이벤트들이 발생했을때 원하는 작업들을 추가할 수 있습니다.

3. Flutter에서 Git hooks 설정 및 사용하기

Git hooks는 원래 Shell의 작성을 통해 이루어 집니다.

하지만 이는 작성하기도 번거로울 뿐더러 해당 작업을 위해 소모되는 시간이 꽤 큽니다.

이를 해결하기 위해 lefthook를 이용하면 쉽게 Git hooks의 구성이 가능합니다.

lefthook은 Flutter만을 위한 것은 아니고 다양한 플랫폼에서 사용가능합니다.

1) lefthook 설치

lefthook을 사용하기 위해선 설치가 필요합니다.

Node가 설치 되신 분들은 아래 명령어로 설치가 가능합니다.

npm install -g @arkweid/lefthook

Mac 유저의 경우 아래 명령어를 통해 설치합니다.

brew install lefthook

그 밖에 리눅스, 윈도우 유저의 경우에도 다양한 방법으로 설치가 가능하니 아래 링크를 참고 부탁드립니다.

2) lefthook 사용 방법

버전 관리가 되고 있는 Flutter 프로젝트의 루트로 이동하여 아래 명령어를 입력합니다.

lefthook install

해당 명령어를 입력하면 프로젝트에 lefthook.yml의 파일이 생기신 것을 확인하실 수 있습니다.

lefthook.yml

lefthook은 yml 파일로 관리가 되며 실행하고 싶으신 작업들을 적어주시면 됩니다.

각 항목에 대한 간단한 설명은 아래와 같습니다.

pre-push: # githook name
commands: # list of commands
packages-audit: # command name
run: yarn audit # command for execution

예를들어 앞서 말씀드린 flutter analyze를 추가할려면 lefthook.yml 파일에 아래와 같이 입력하시면 됩니다.

pre-commit:
commands:
flutter-analyze:
run: flutter analyze

pre-commit 은 commit 전에 작업을 수행하는 것으로 실행결과가 아래와 같이 나타 나는 것을 볼 수 있습니다.

⚠️ pre-commit 작성후의 최초 커밋은 정의된 작업을 수행되지 않습니다. 그 이후 두번째 commit 부터 작동하니 참고바랍니다.

글을 마치며

개발을 하는 것에 있어 효율성을 올리는것은 중요합니다.

자동화란 키워드는 그 효율성을 올리는데 큰 역할을 합니다.

Git hooks를 이용함으로써 반복적으로 이루어지는 작업들을 자동화를 할 수 있습니다.

앞서 말씀드렸듯이 Flutter 뿐만 아니라 다른 곳에도 적용이 가능합니다.

이를 활용하여 업무의 효율성이 증대 시키는데 해당 글이 되움이 되었기를 바랍니다.

--

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Seong-Am Kim

Seong-Am Kim

I love Programming 🧑🏻‍💻 https://github.com/Jay-flow

More from Medium

Best Folder Structure For Your Next Project

How to Store API Credentials In a Flutter Application?

Effective handover of api responses to your code in dart

Show Test Coverage of a Flutter app in Visual Studio Code