✅ 공식문서

https://helpdesk.dooray.com/share/pages/9wWo-xwiR66BO5LGshgVTg/2939987647631384419

 

📍 목차

  1. 과제 내용
  2. 프로세스
  3. 주요 명령어
  4. 코드
  5. 결과

 

과제 내용

  • 특정 두레이 프로젝트에 일일 스크럼 태스크를 자동 등록해주는 프로그램 작성
    • 일일 태스크 생성: [2023/01/10 (화) 일일 스크럼] 등 일일 스크럼 태스크를 1주일 전 매일 자동 생성
    • 주간 태스크 생성: 2023/01/10(화) 데이터운영팀 주간 업무 회의 의 주간 회의 태스크는 다음주 회의 태스크 자동 생성

 

프로세스

개발환경

  • macOS Monterey
  • intel 7i / x86_64

 

도식화

  • 상위 업무가 있는지 확인
    • 없으면 연 또는 월 단위의 상위 업무 생성
  • 해당 일에 업무가 있는지 확인 (수동으로 등록된 것이 있는지 확인 차원)
    • 없으면 가장 최근에 등록된 일일 업무가 있는지 확인
      • 있다면 가장 최근 일일 업무 상태-완료/만기일-미정 설정
  • 하위 업무 생성
  • 젠킨스에서 설정한 두레이 대화방에 메시지 알림

 

세부사항

  • 상위 업무에 하위 업무로 등록됨
  • 태그 : 지정한 태그명
  • 날짜 : 생성될 때 일주일 후 날짜로 자동 생성됨
  • 담당자 : 본인 (그룹으로도 가능)
  • 실행 : 젠킨스 사용
    • 일일 스크럼 : 평일 9시마다 빌드
    • 주간업무회의 : 화요일 9시마다 빌드

 

주요 명령어

curl

  • 프로토콜을 이용해 URL로 데이터를 전송해서 서버에 데이터를 보내거나 가져올 때 사용하는 명령어
  • Shell에서 REST API(http) 테스트를 하고 싶을 때 사용
  • 지원하는 프로토콜 : http / https / ftp / ldap / scp / telnet / smtp / pop3 등
  • Linux/mac OS : 기본 탑재
  • 사용한 옵션
    • -d : http POST 요청 데이터 입력
    • -s : 진행 내용이나 메시지 출력 안되게
    • -X : 요청시 사용할 메소드 종류
    • -H : 전송할 헤더 지정



date

  • 날짜 및 시간을 다양한 포맷으로 출력하고, 계산할 때 사용하는 명령어
  • macOS에서 사용하기
    • macOS는 date 명령어에 -d 옵션이 적용되지 않음
    • 포맷 : -v[-(과거)/+(미래)][일수]d
# 오늘로부터 7일 뒤 yyyy/mm/dd 형식
date -v+7d +%Y/%m/%d

# 오늘로부터 7일 뒤 요일 형식
date -v+7d +%A  # 수요일
date -v+7d +%a  # 수



jq

  • Shell에서 JSON을 조작할 수 있는 라이브러리
  • 사용한 옵션
    • -r : 결과값에 따옴표 제거해서 raw 값 받기
  • 설치
# macOS
brew install jq



crontab

  • Linux에서 일정 주기나 특정 시간에 명령을 실행하게 해주는 명령어 (스케줄러)
# crontab 작성
crontab -e

# crontab 작업 리스트 보기
crontab -l

# crontab 모든 작업 삭제
crontab -r

# 매주 일요일 23시 55분에 수행
55 23 * * 0 파일 저장된 위치 >> 로그 저장할 위치

# 매주 월-금요일 23시 55-59분에 수행
55-59 23 * * 1-5 파일 저장된 위치 >> 로그 저장할 위치

 

코드

  • 변수

 

  • 로직
  • 상위 업무 유무 확인
    • 없으면 상위 업무 생성

 

  • 하위 업무 유무 확인
    • 있으면 종료

 

  • 없으면 가장 최근 일일 업무 확인 후 상태-완료 및 만기일-미정 설정

 

  • 하위 업무 생성

 

결과

  • 성공 화면 (연 단위)
  • 성공 화면 (월 단위)

 

  • 이미 해당 일의 업무가 생성되어 있을 경우


고려한 사항

  1. 상위 업무가 연 또는 월 단위를 선택하여 생성될 수 있도록 구현
    → 연도나 월이 바뀌더라도 때마다 자동으로 상위 업무가 생성되어 수작업이 필요하지 않도록 구현
  2. 만기일(없음/미정/있음) 설정
    → 가장 최근의 업무를 업무상태를 완료로 바꿀 경우 : 만기일이 설정되어 캘린더에 나오게 됨
    → 업무를 생성하거나 변경할때 dueDateFlag: false 로 할 경우, 만기일이 없음 상태가 됨
    → 특이사항 1 : 업무상태(할일/진행중/완료) 속성을 사용할 수 없음
    → 특이사항 2 : dueDateFlag를 true로만 사용하기를 권장
  3. 크론탭만 사용했을 경우, 빌드가 실패한 경우에 재실행 등의 예외 처리가 쉽지 않음
    → 젠킨스에서 두레이와 연동된 플러그인을 사용해 빌드 실패시 재시도 횟수를 설정하여 다시 빌드되도록 설정
  4. 빌드 결과를 두레이 메시지 알림
    → 두레이 대화방 단위로 메시지 가능

 

보완이 필요한 사항

  1. 상위 업무 생성시 하위 업무가 바로 등록되지 않는 점
    → 동시성 문제인가 싶어 wait를 걸어봤는데 되지 않아서 좀 더 확인 필요
  2. 상위 업무를 생성해야 하는 경우, 태그도 함께 생성될 수 있도록 (현재는 태그가 만들어져 있다고 가정되어 있음)
    → 'application/x-www-form-urlencoded' not supported 에러 확인 필요
  3. 젠킨스봇 메시지 내용 설정이 가능한지 확인
    → 플러그인에서 지원하지 않는 것 같지만 좀 더 확인 필요

✅ 공식문서

https://helpdesk.dooray.com/share/pages/9wWo-xwiR66BO5LGshgVTg/2939987647631384419

 

명령어

curl

  • 프로토콜을 이용해 URL로 데이터를 전송해서 서버에 데이터를 보내거나 가져올 때 사용하는 명령어
  • Shell에서 REST API(http) 테스트를 하고 싶을 때 사용
  • 지원하는 프로토콜 : http / https / ftp / ldap / scp / telnet / smtp / pop3 등
  • Linux/mac OS : 기본 탑재
  • 사용한 옵션
    • -d : http POST 요청 데이터 입력
    • -s : 진행 내용이나 메시지 출력 안되게
    • -X : 요청시 사용할 메소드 종류
    • -H : 전송할 헤더 지정

 

date

  • 날짜 및 시간을 다양한 포맷으로 출력하고, 계산할 때 사용하는 명령어
  • macOS에서 사용하기
    • macOS는 date 명령어에 -d 옵션이 적용되지 않음
    • 포맷 : -v[-(과거)/+(미래)][일수]d
# 오늘로부터 7일 뒤 yyyy/mm/dd 형식
date -v+7d +%Y/%m/%d

# 오늘로부터 7일 뒤 요일 형식
date -v+7d +%A  # 수요일
date -v+7d +%a  # 수

 

jq

  • Shell에서 JSON을 조작할 수 있는 라이브러리
  • 사용한 옵션
    • -r : 결과값에 따옴표 제거해서 raw 값 받기
  • 설치
# macOS
brew install jq

 

crontab

  • Linux에서 일정 주기나 특정 시간에 명령을 실행하게 해주는 명령어 (스케줄러)
# crontab 작성
crontab -e

# crontab 작업 리스트 보기
crontab -l

# crontab 모든 작업 삭제
crontab -r
# 매주 일요일 23시 55분에 수행
55 23 * * 0 파일 저장된 위치 >> 로그 저장할 위치

# 매주 월-금요일 23시 55-59분에 수행
55-59 23 * * 1-5 파일 저장된 위치 >> 로그 저장할 위치

 

개발환경

  • macOS Big Sur
  • intel 7i / x86_64

 

시나리오

  1. 요청한 정보에 문제가 있는지 확인
  2. 해당 일에 업무가 이미 있는지 확인
    1. 있으면 종료
    2. 없으면
      1. 가장 최근 일일 업무 상태-완료/만기일-미정 설정
      2. 새 업무 생성

 

  • 상위 업무(일일 스크럼 또는 주간업무회의)에 하위 업무로 추가됨
  • 태그 : 상위 업무
  • 날짜 : 생성될 때 일주일 후 날짜로 자동 생성됨
  • 등록자/담당자 : 본인 (그룹으로도 가능)

 

코드

일일 스크럼

  • 변수

 

  • 요청한 정보에 문제가 있는지 확인

 

 

  • 해당 일에 업무가 이미 있는지 확인
    • 있으면 종료

 

  • 없으면
    • 가장 최근 일일 업무 상태-완료/만기일-미정 설정

 

  • 새 업무 생성

 

 

 

주간 업무 회의

  • 변수

 

  • 요청한 정보에 문제가 있는지 확인

 

  • 해당 일에 업무가 이미 있는지 확인
    • 있으면 종료

 

  • 없으면
    • 가장 최근 일일 업무 상태-완료/만기일-미정 설정

 

  • 새 업무 생성

 

 

결과

일일 스크럼

  • 요청된 정보가 잘못 되었을 경우

 

  • 이미 해당 일의 업무가 생성되어 있을 경우

 

  • 정상적으로 업무가 생성된 경우

 

주간 업무 회의

  • 요청된 정보가 잘못 되었을 경우

 

  • 이미 해당 일의 업무가 생성되어 있을 경우

 

  • 정상적으로 업무가 생성된 경우

 

크론탭

  • 일일 스크럼 : 평일 9시 실행
  • 주간 업무 회의 : 화요일 9시 실행
  • 로그 파일 생성

구현

개요

Bash로 작성된 간단한 계산기 스크립트입니다. 사용자로부터 두 개의 숫자와 연산자를 읽고 계산을 수행한 다음 사용자가 중지를 선택할 때까지 이전 계산의 결과로 계산을 계속할 수 있습니다.

사용 언어

bash, shell script

코드 및 함수

스크립트는 나중에 사용자 입력의 유효성을 검사하는 데 사용되는 두 개의 정규식 REGEX_NUMBERREGEX_OPERATION을 정의하는 것으로 시작합니다. 그런 다음 스크립트는 여러 기능을 정의합니다.

  • #!/bin/bash : 해당 파일을 bash 쉘로 실행시킨다는 의미
  • TOTAL : 연산 결과를 저장하는 전역 변수
  • FLAG : 연산을 계속 할 지 여부를 저장하는 전역 변수
  • REGEX_NUMBER : 숫자 확인 정규표현식
  • REGEX_OPERATION : 사칙연산 확인 정규표현식

is_number

사용자에게 숫자를 입력하라는 메시지를 표시한 다음 REGEX_NUMBER 정규식을 사용하여 입력이 유효한 숫자인지 확인합니다. 입력이 유효한 숫자이면 함수는 숫자를 반환합니다. 입력이 유효한 숫자가 아닌 경우 함수는 사용자에게 다시 시도하라는 메시지를 표시합니다.

 

문자 설명
" " " " 사이에 들어있는 모든 특수 문자를 일반 문자로 인식하지만 단, $()와 ` `(명령어 대체 특수문자), $ (변수 값 대체 특수문자), \ (quotation 특수문자) 등은 예외

즉, echo "$op" 으로 하면 * 로 입력받은 인자값을 asterisk이 아닌 문자 그대로 * 로 출력할 수 있습니다.

is_operation

is_number와 같은 방식으로 작동하지만 사용자에게 연산(+, -, *, /, %)을 입력하라는 메시지를 표시하고 REGEX_OPERATION 정규식을 사용하여 입력을 확인합니다.

is_divided_by_zero

연산이 나누기(/)이고 두 번째 피연산자가 0인지 확인하는 함수입니다. 두 조건이 모두 참이면 사용자에게 새 연산기호와 두 번째 피연산자를 입력하라는 메시지가 표시됩니다.

calculate

세 개의 인수(연산자와 두 개의 피연산자)를 사용합니다. case 문을 사용하여 연산자를 기반으로 수행할 작업을 결정한 다음 피연산자를 사용하여 계산을 수행합니다. 계산 결과는 TOTAL 변수에 저장됩니다.

is_answer

사용자에게 "YES" 또는 "NO"를 입력하라는 메시지를 표시하고 그에 따라 FLAG 변수를 1 또는 0으로 설정합니다. 이 기능은 유연하며 사용자가 대문자 또는 소문자 또는 축약형 "y" 또는 "n"으로 "YES" 또는 "NO"를 입력할 수 있습니다.

main

사용자가 중지를 선택할 때까지 계속되는 루프에 들어갑니다. 루프 내에서 스크립트는 is_number 및 is_operation 함수를 사용하여 첫 번째 숫자, 연산자 및 두 번째 숫자를 읽은 다음 is_divided_by_zero 함수를 사용하여 연산이 0으로 나뉘는지 확인합니다. 연산이 0으로 나누지 않는 경우 스크립트는 연산을 수행하기 위해 연산 함수에 연산자와 피연산자를 전달합니다. 그런 다음 스크립트는 사용자에게 계속하거나 중지하라는 메시지를 표시하고 사용자가 중지를 선택하면 루프를 종료합니다. 루프가 끝나면 스크립트는 TOTAL 변수에 저장된 최종 결과를 인쇄합니다.

  • $op 를 "$op"로 넘겨줘야 연산기호를 문자열로 인식해서 제대로 작동

결과

실행 방법

sh cal.sh

화면

궁금한 점

  • -eq vs =
    값을 비교할 때, -eq=의 성능이나.. 차이가 있는지? 어떤걸 쓰는게 좋은지?

1. bash 커맨드

ls

현재 디렉토리 파일 목록 나열

  • ls -F : 파일과 디렉토리를 구분하여 출력
  • ls -a : 숨겨진 파일, 디렉토리도 함께 출력
  • ls -l : 자세한 내용
  • ls -al : a와 l의 기능 모두 포함
  • ls -h -al : 파일크기도 함께 출력
  • ll : 한 줄씩 파일의 상세 정보

mv

파일 또는 디렉토리의 이동 또는 이름 변경

  • mv [원본 파일명] [옮기고 싶은 디렉토리명] : 해당 디렉토리로 파일 이동
  • mv [원본 파일명] [바꾸고 싶은 파일명] : 원본 파일 이름 변경
  • mv [원본 디렉토리명] [옮기고 싶은 디렉토리명] : 해당 디렉토리로 디렉토리 이동
  • mv [원본 디렉토리명] [바꾸고 싶은 디렉토리명] : 원본 디렉토리 이름 변경

cp

파일 또는 디렉토리의 복사

  • cp [원본 파일명] [옮기고 싶은 디렉토리명] : 해당 디렉토리로 원본 파일 복사
  • cp [원본 파일명] [복사해서 만들고 싶은 디렉토리명] : 해당 디렉토리로 사본 파일 복사
  • cp [원본 파일명1] [원본 파일명2] [옮기고 싶은 디렉토리명] : 해당 디렉토리로 여러 파일 한번에 복사
  • cp [원본 디렉토리] -r [옮기고 싶은 디렉토리명] : 원본 디렉토리의 하위 파일까지 모두 해당 디렉토리로 복사
  • cp [원본 디렉토리] -r [복사해서 만들고 싶은 디렉토리명] : 복사해서 만들고 싶은 디렉토리 생성

cat

두개 이상의 파일 전체 내용 출력

  • cat [파일명1] [파일명2] : 두개 이상의 파일을 연속으로 출력
  • cat -n [파일명1] [파일명2] : 두개 이상의 파일을 연속으로 출력

tail

파일을 지정한 행까지 출력 (디폴트 : 10개 행)

  • tail [파일명]
  • tail -n 숫자 [파일명] : 마지막 행부터 해당번째 행 출력
  • tail +숫자 [파일명] : 해당번째 행부터 마지막 행까지 출력

rm

파일 또는 디렉토리 삭제

  • rm [파일명] : 해당 파일 삭제
  • rm *.[확장자] : 해당 확장자로 끝나는 모든 파일 삭제
  • rm * : 전체 파일 삭제
  • rm -r [파일명/디렉토리명] : 해당 파일/디렉토리 삭제
  • rm -rf [파일명/디렉토리명] : 해당 파일/디렉토리 강제 삭제 (경고문구 없음)


아래 내용들은 추가 공부 필요


nohup

터미널을 종료해도 프로그램이 백그라운드에서 계속 실행되도록 함


chown

파일이나 디렉토리의 소유권자 및 그룹식별자 변경


chmod

해당 파일이나 디렉토리의 퍼미션 수정


grep

정규표현식의 패턴을 사용해서 특정 파일 내에 해당 패턴의 문자열 출력


ps

현재 작동하는 프로세스 목록 출력


기타

알고 있거나 참고할 만한 것들


  • cd
  • pwd
  • clear
  • mkdir
  • touch
  • history history -c
  • bash -x ./[파일명] : 디버그

2. vi 편집기 모드

  • 기본 모드
    • vi 편집기 처음 열었을 때 화면
  • 입력 모드
    • i, a를 통해 기본에서 입력 모드로 전환
    • esc를 통해 입력에서 명령 모드로 전환
  • 명령 모드
    • : (콜론)을 통해 명령
    • 파일 저장, 종료 또는 검색 등을 함

3. vi 커맨드

  • esc + 명령어 입력

명령 모드에서 입력 모드로 전환

  • i : 현재 커서 앞(왼쪽)에 입력
  • a : 현재 커서 다음(오른쪽)에 입력

저장, 종료

  • :q : 종료
  • :q! 강제 종료 (저장 X)
  • :w : 저장 (종료 X)
  • :wq : 저장 및 종료
  • ** 비정상 종료 시 .swp 파일이 생성된다. 필요하지 않은 경우 삭제한다.

커서 이동

  • h, j, k, l : 좌, 하, 상, 우 이동
  • w : 다음 단어의 첫 글자로 이동
  • b : 이전 단어의 첫 글자로 이동

줄 이동

  • gg : 첫번째 행으로
  • G : 마지막 행으로
  • :숫자 : 지정한 숫자 행으로 이동

삭제

  • x : 현재 커서 위치에 있는 한 글자 삭제
  • dd : 현재 커서 위치에 있는 한 행 삭제
  • dw : 현재 커서 위치에 뒤에 있는 단어 삭제 (커서 포함)
  • db : 현재 커서 위치에 앞에 있는 단어 복사
  • ** 삭제된 내용은 붙여넣기 가능 (버퍼에 저장됨)

복사

  • yy : 현재 커서 위치에 있는 한 행 복사
  • yw : 현재 커서 위치에 뒤에 있는 단어 복사
  • yb : 현재 커서 위치에 앞에 있는 단어 복사

붙여넣기

  • p : 커서 다음에 붙여넣기
  • P : 커서 이전에 붙여넣기

찾기

  • /[검색어] : 앞에서부터 검색어를 찾음
  • /[검색어] : 뒤에서부터 검색어를 찾음
  • n : 뒤로 검색
  • N : 앞으로 검색

바꾸기

  • :%s/old/new : 각 행에 처음 나오는 old를 new로 변경
  • :%s/old/new/g : 모든 old를 new로 변경
  • :%s/old/new/gc : 모든 old를 new로 변경하기 전에 물어봄

기타

  • u : undo
  • ctrl+r : redo
  • :set nu : 행번호 출력
  • :set nonu : 행번호 숨기기
  • :set ts=4 : tap size를 4로 설정
  • :set title : 타이틀 바에 현재 편집 중인 파일을 표시



참고

https://velog.io/@zeesoo/Linux-vi-편집기-사용법-및-명령어

https://velog.io/@devmin/리눅스-쉘-기본-명령어Basic-Shell-Commands

+ Recent posts