diff --git a/_posts/2023-10-29-bash.md b/_posts/2023-10-29-bash.md new file mode 100644 index 0000000..a6f99fd --- /dev/null +++ b/_posts/2023-10-29-bash.md @@ -0,0 +1,100 @@ +--- +layout: post +comments: true +title: "BASH 스크립트로 서비스 부하 테스트 하기" +description: "서비스 API 성능 테스트를 위해 쉘 스크립트를 만들어본다." +img: command-title.webp +date: 2023-10-29 11:00:00 +0900 +last_modified_at: 2023-10-29 11:00:00 +0900 +tags: [command-line, bash, script, load test] # add tag +related: command-line +categories: tools +--- + +성능 테스트를 위해 몇 가지 툴들을 알아보다 제품의 특성에 맞게 구현하기 위해 쉘 스크립트로 구현하려고 한다. + +오랜만에 쉘 스크립트를 만지려니 이건 뭐 완행열차가 따로 없다. + +단순한 반복문이나 문자열 처리부터 chatGPT에게 물어보면서 하려니 영 속도가 나지 않는다. + +뭐! 삽질 한두번 해본것도 아니고!! 또 해본다. + + + +## 순차적으로 증가하는 일련번호 만들기. + +기준이 되는 데이터가 필요한데 순차적으로 증가하는 일련번호가 필요하다. + +엑셀로 만들어도 되겠지만 터미널에서 **vim**으로 선택된 영역의 숫자를 순차적으로 증가시킬 수 있다. + +> vim의 명령어 모드에서 +> **Ctrl-v** 로 원하는 영역에 "Visual Block"을 설정하고. +> **g Ctrl-a** 하면 아래와 같이 D0002 ~ D0011 과 같은 순서대로 증가하는 일변번호를 만들 수 있다. + +```text +$ cat application.lst + +D0002, 7000002, I, A, 1528100002 +D0003, 7000003, I, A, 1528100003 +D0004, 7000004, I, A, 1528100004 +D0005, 7000005, I, A, 1528100005 +D0006, 7000006, I, A, 1528100006 +D0007, 7000007, I, A, 1528100007 +D0008, 7000008, I, A, 1528100008 +D0009, 7000009, I, A, 1528100009 +D0010, 7000010, I, A, 1528100010 +D0011, 7000011, I, A, 1528100011 +``` + +## 콤마(,)로 구분된 텍스트 파일 읽어 loop + +아래와 같이 while loop 의 IFS(필드 분리자)를 콤마(,)로 설정하고 읽어 올 변수를 설정하면 FILE의 라인 수만 큼 loop가 반복된다. + +```bash +FILE='application.lst' + +# main loop +echo "START : "`date +%T.%3N` +while IFS=',' read col1 col2 col3 col4 col5 +do +# action +echo "docid=$col1 appid=$col2 inout=$col3 type=$col4 cid=$col5" +sleep 0.01 +done < $FILE +echo "END : "`date +%T.%3N` + + +START : 01:44:54.887 +docid=D0002 appid= 7000002 inout= I type= A cid= 1528100002 +docid=D0003 appid= 7000003 inout= I type= A cid= 1528100003 +docid=D0004 appid= 7000004 inout= I type= A cid= 1528100004 +docid=D0005 appid= 7000005 inout= I type= A cid= 1528100005 +docid=D0006 appid= 7000006 inout= I type= A cid= 1528100006 +docid=D0007 appid= 7000007 inout= I type= A cid= 1528100007 +docid=D0008 appid= 7000008 inout= I type= A cid= 1528100008 +docid=D0009 appid= 7000009 inout= I type= A cid= 1528100009 +docid=D0010 appid= 7000010 inout= I type= A cid= 1528100010 +docid=D0011 appid= 7000011 inout= I type= A cid= 1528100011 +END : 01:44:55.006 +``` + +## bash 시간 포맷 + +아래와 같이 date 명령어로 시간 포맷을 정할 수 있다. + +> %T : %H:%M:%S 형식으로 시:분:초를 표시한다. +> %N : nanoseconds 단위를 표시한다. +> %3N : 소수점 이하 3자리 까지 표시 + +```bash +❯ date +%T.%N +01:55:26.893696184 + +❯ date +%T.%3N +01:57:52.356 +``` + + +## 참고 URL +- [고급 Bash 스크립팅 가이드](https://wiki.kldp.org/HOWTO/html/Adv-Bash-Scr-HOWTO/) +- [bash - LinuxOPsys](https://linuxopsys.com/?s=bash) diff --git a/assets/img/command-title.webp b/assets/img/command-title.webp new file mode 100644 index 0000000..3a621cc Binary files /dev/null and b/assets/img/command-title.webp differ