본문 바로가기
Programming/6. Elice AI Track

004_gitlab & Clean Code(6/23)

by @sangseophwang 2021. 6. 23.

@behance

낯선 gitlab과 친해지기..?

그 동안 github만 사용해오던 나에게 낯선 gitlab이 찾아왔다..! 내일과 모레에 걸쳐 실제 실습을 해보며 오늘 배운 기능들을 직접 다뤄본다고 하는데, 오늘 강의만 들었을 때는 모든게 다 낯설기만 했다 😔  다 나의 부족함이다 생각하고 내일 실습을 대비하며 오늘의 TIL도 출발!


  CI  

  • 'Continuous Integration' - 지속적 통합
  • 새로운 코드에 대한 변경 사항이 꾸준히 자동으로 빌드 및 테스트가 되어 여러 개발자가 동시에 작업할 때 문제가 발생하는 것을 방지!
  • Build - Test - Deploy 과정을 개발자가 아닌 gitlab이 다 해준다고 생각하면 된다.
  • 안정성 유지 및 시간 절약에 효과적!
  • gitlab - project - CI/CD - Pipelines 를 통해 commit을 수정할 때마다 잘 작동하는지, 문제가 있는지 확인이 가능하다!
  • gitlab-ci.yml 파일에 CI 기능에 대한 설정을 구성하고 저장하여 관리한다.
  • 이 파일에는 stages 와 testing 이라는 항목이 있는데, 이 곳에서 test, build 등의 단계를 적고 각 단계별 어떤 행동을 할지 적어둔다.
  • gitlab - settings - General - Merge Requests - Merch Checks - Pipelines must succeed 부분에 체크를 하면 테스트를 통과해야 Merge 작업을 할 수 있도록 설정이 가능하다.

 

gitlab-ci.yml 파일 코드 예시

  Stage  

  • 위 gitlab-ci.yml 파일을 설명할 때 나온 개념.
  • 말 그대로 단계를 뜻하며 각 테스트 단계를 설정할 수 있다.
  • 앞 stage가 끝나야 다음 stage를 실행한다.
  • 단계별로 실행될 스크립트는 자유롭게 설정이 가능하다.
  • Test, Build, Deploy 말고도 다양하게 추가가 가능하다. ( Lint 등)
  • 특정 브랜치만 실행되도록 설정이 가능하다. ↓
only:
  -master

 

  CD  

  • 'Continuous Delivery' 또는 'Continuous Deploy'
  • 지속적인 서비스 제공 또는 지속적인 배포를 의미
  • 두 가지 의미 모두 파이프라인의 추가 단계에 대한 자동화를 뜻하지만 때로는 얼마나 많은 자동화가 이루어지고 있는지를 설명하기 위해 별도로 사용되기도 한다.
  • 지속적인 제공이란 공유 레포지토리로 자동으로 Release하는 것
  • 지속적인 배포란 클라이언트의 Production Level까지 자동으로 Deploy 하는 것을 의미한다.

CI / CD 진행 과정

  Wiki  

  • github의 README.md 와 비슷한 역할 (개인적인 생각입니다!)
  • 개발 참여자, 버그 리포트, 사용법 등을 적어놓는다.
  • gitlab wiki 페이지에서 작성이 가능하다.
  • 개발 참여자의 등급(?)을 설정할 수 있는데, 차례대로 Guest - Reporter - Developer - Maintainer - Owner 가 있다.

 

  Lint 

  • 오류 검사기
  • ' ' ,  " " 통일이나 누락된 ; 찾아주기, 선언됐지만 사용하지 않은 변수나 사용되었지만 선언되지 않은 변수 등을 잡아준다.
  • lint에서 걸러지는 오류들은 고치지 않아도 큰 문제는 없지만, 작은 오류들이 모여 기술 부채가 되니 꼭 하는 것이 좋다.
  • 오류가 나오면 --fix 를 통해 자동으로 수정할 수 있다.
  • 하지만 오류가 아닌데 오류라고 나오는 것들이 있는데, 이 때 주석 처리로 'global [정의되지 않은 것들]' 을 입력하면 무시하도록 해준다.

 좋은 주석 목록 

법적인 주석
코드의 저작권과 소유권에 대한 정보를 나타내는 주석이다.

# Copyright © 2016-2020 elice. All rights reserved.

 

정보를 제공하는 주석
필요에 따라 코드에 대한 기본적인 정보를 주는 주석이다.

# a와 b를 비교한 결과를 반환한다. 
def compareTo(a, b): ...

의도를 설명하는 주석
결정에 깔린 의도를 설명하는 주석이다.

def compareTo(a, b): 
	... 
	# a와 b의 우선순위가 같은 경우에 반환된다. 
	return 0

의미를 명료하게 밝히는 주석
모호한 인수나 반환값의 의미를 밝히는 주석이다.

assertTrue(compareTo(a, b) == 0 # a == b

결과를 경고하는 주석
다른 프로그래머에게 결과를 경고할 목적으로 사용되는 주석이다.

# 여유 시간이 충분하지 않다면 실행하지 마십시오. 
def big_file_testing(): ...

TODO 주석
앞으로 할 일을 남겨두는 주석이다. 단, 나쁜 코드를 남겨 놓은 핑계로 사용되면 안된다.

# TODO 새로운 방식이 도입되면 필요하지 않다. 
def version_info(): ...

중요성을 강조하는 주석
별것 아니라고 생각될만한 코드의 중요성을 상기하기 위해 사용되는 주석이다.

my_string.replace(" ", "") 
# 여기서 replace로 공백을 제거함으로써 다른 문자열로 인식될 위험을 제거한다.

 

 나쁜 주석 목록 

주절거리는 주석
코드 작성자에게는 의미가 있겠지만 다른 사람들에게는 제대로 전달되지 않는 주석이다.

아래 예시에서 코드를 처음 보는 사람은 try 구문을 모두 확인해야 주석의 의미를 파악할 수 있게 된다.

try: 
    x = int(input()) 
    y = int(input()) 
    print(x / y) 
    except Exception as err: 
# y값에 0이 들어오면 실행된다.

같은 이야기를 중복하는 주석
아래 예시는 except 자체가 에러 발생에 대한 구문이므로 중복된 내용을 담고 있어 불필요한 주석이다.

try: 
	... 
    except Exception as err: 
    # 에러 발생 시 실행되는 코드입니다.

 

오해할 여지가 있는 주석
아래 예시에서 closed가 False인 경우 10초 기다린 뒤 다시 한번 closed를 검사한 후 0으로 반환이 되지만,

주석에는 그러한 설명을 하지 않고 있다.

# closed가 False일 때 0이 반환된다. 
def check_close: 
	if !closed: 
    	time.sleep(10) 
        if !closed: 
        	print("error") 
            return 0

 

이 외에도 함수나 변수로 표현 가능한 주석, 위치를 표시하는 주석, 닫는 괄호에 다는 주석, 공로를 돌리거나 저자를 표시하는 주석, 주석으로 처리된 코드, 전역 정보 등 많은 나쁜 주석이 있다.

 

 

반응형

'Programming > 6. Elice AI Track' 카테고리의 다른 글

006_git_the final (6/25)  (0) 2021.06.27
005_git & Clean Code(6/24)  (0) 2021.06.25
003_git(6/22)  (2) 2021.06.23
002_리눅스(6/21)  (0) 2021.06.23
001_사전 학습 내용 정리(~6/20)  (0) 2021.06.22

댓글