본문 바로가기

전체 글56

Cobra를 사용하여 CLI 개발 맛보기 이 글은 Cobra Github 를 참고하여 작성했습니다. 최근에 디스코드 봇을 개발할 일이 있었는데, 명령어는 어떤 형태로 내부적으로 구현하고 실행하는 것이 좋을까?를 고민하다가 다른 사람들은 어떻게 만들었을지 궁금했습니다. Saturday night 스터디를 통해 알게된 Cobra가 명령어와 관련된 유명한 예시라고 생각되어 사용해보고, 다른사람들의 코드를 찾아보기로 했습니다. 😀 Cobra와 CLI Command line interface는 간단히 말해 터미널에 텍스트를 입력하여 명령을 실행하는 방식을 의미합니다. 예를 들면 아래와 같은 형태로 명령을 실행합니다. docker start application git init 다른 패키지의 도움을 받고 싶지 않다면, os.Args 에서 매개변수를 직접 .. 2021. 8. 1.
git hooks를 사용하여 commit 전에 go test 실행하기 (테스트 강제하기) .git/hooks/pre-commit 파일에 저장 후 권한을 755로 설정하면 git commit시 실행됩니다. #!/bin/sh FONT_YELLOW="\033[33m" BG_RED="\033[41m" NO_COLOR="\033[0m" # set test flag here GOTEST="go test -v ./..." # (1) echo "${FONT_YELLOW}>> Run [ `echo ${GOTEST}` ] before commit.${NO_COLOR}" # (2) ${GOTEST} # (3) if [ $? -ne 0 ]; then # (4) echo "${BG_RED}>> Commit fail! Check your code.${NO_COLOR}" # (5) exit 1 fi (1) git co.. 2021. 7. 18.
Golang의 test 이야기 이 글은 Saturday night study의 발표를 위해 작성한 내용입니다. go 1.16버전을 기준으로 작성했습니다. Test? 소스 코드의 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차. 함수를 검증하는 함수를 작성하는 것. 테스트 종류 단위 테스트 Unit(단위) + Test(테스트) 인수 테스트 (acceptance test) 사용자의 요구사항을 만족하는지 테스트 통합 테스트 (integration test) 기능들이 통합적으로 잘 작동하는지 테스트 단위/인수/통합테스트를 범위로 나누는게 아니라 목적에 따른 분류라고 생각함. 어떻게 작성해야 하는가? Go 테스트 코드 작성하기 테스트에 사용하는 프레임워크는 xUnit이 대표적이나 golang은 테스트 프레임워크를 내장하고 있다. 작성.. 2021. 7. 18.
OKKY 세미나 - 개발자에게 좋은 이직과 좋은 퇴사를 위한 꿀팁(21.07.15. 이경일님) 이동욱 개발자님의 글로 많은 도움을 받았고 세미나를 들어보고싶다! 라고 생각했던 이경일님이 OKKY 세미나를 또 한번 진행하셨습니다. 다시 네이버로 가셨다고 하네요 :) 이 글은 세미나를 요약한 글입니다. 세미나는 21. 07. 15. 줌으로 진행하였으며 생략한 내용이 많아 실제 발표 내용과 차이가 있을 수 있습니다. 너무 개인적인 이야기는 제거했습니다. 이경일님의 개발에 대한 열정과 노력이 느껴져서 개인적으로 부럽고 자극이 되었습니다. 예정시간은 1시간이었지만 추가로 1시간 이상 QnA를 해주셨고, 너무 열심히 답변해주셨습니다. 질문자분들이 다들 나랑 비슷한 고민을 하고있구나! 라는걸 느꼈습니다. 저는 코로나 이후로는 이번 세미나가 처음이었는데 정말 많은 자극과 도움을 받았습니다. 이 글을 읽으시는 분.. 2021. 7. 15.
WebSocket 개념과 장점, 그리고 왜 사용하는지 알아보자 정의 하나의 TCP 접속에 전이중 통신 채널을 제공하는 컴퓨터 통신 프로토콜 목적 기존 방식의 단점 개선. 기존의 양방향 통신 (왜 써야할까?) HTTP 프로토콜 HTTP는 클라이언트의 요청이 있어야만 서버가 응답할 수 있다. 반대로 서버가 먼저 보내는 요청은 클라이언트가 받을 수 없다. 이 단점을 개선하기 위해 나온 기술이 Polling이다. Polling은 주기적으로 서버에 요청을 보내서 받을게 있는지 확인하는 방법이다. 단점은 서버측에서 보낼 내용이 없어도 클라이언트는 알 수 없기 때문에 계속해서 request를 보내 확인을 해야하고, 지속적인 연결과 해제는 handshake가 필요하기 때문에 서버에 부담을 준다. 클라이언트가 많아질수록 더욱 커지게 된다. 이 polling의 단점을 조금 개선한 것.. 2021. 7. 15.
windows 에서 linux로 파일 전달시 CRLF가 문제를 발생시킬 수 있다. 문제가 되었던 코드는 깃허브 에서 볼 수 있다. 도커/컨테이너를 활용한 컨테이너 개발 실전 입문이라는 책의 예제를 따라하던 중에 정상 동작하지 않는 예제를 만나서 고생했다. docker container를 생성해서 내부에서 cron을 통해 간단한 echo 스크립트를 실행시키는 내용이었는데, cron이 동작하지 않았다. 원인은 windows에서 작성한 파일의 개행문자가 LF(Line Feed)가 아닌 CRLF(Carriage Return Line Feed)였기 때문이고, 이것 때문에 스크립트가 먹통이었다. 인지하고 있음에도 docker와 cron쪽이 익숙치 않아 바로 해답으로 연결하지 못하고 헤매게 되었다. 이것저것 수정하다보니 중간에 정상 동작하는 경우가 있었는데 그땐 왜 됐는지 정확히 모르겠다. 아얘 .. 2021. 7. 13.
[Docker] jenkins 설치가 안될때 docker에서 jenkins 이미지를 받으려고 하면 아래와 같은 에러가 발생한다. $ docker pull jenkins Using default tag: latest Error response from daemon: manifest for jenkins:latest not found: manifest unknown: manifest unknown 해결 docker hub의 jenkins description을 보면 deprecated 되었다고 안내한다. jenkins/jenkins:lts image 링크를 누르면 새로운 jenkins repository로 안내한다. LTS를 받으려면 docker pull jenkins/jenkins:lts-jkd11 최신버전을 받으려면 docker pull jenki.. 2021. 7. 10.
apt와 apt-get 차이점 명령어가 궁금할땐 man을 사용하거나 홈페이지 docs를 참고하자. apt provides a high-level commandline interface for the package management system. It is intended as an end user interface and enables some options better suited for interactive usage by default compared to more specialized APT tools like apt-get(8) and apt-cache(8). ... SCRIPT USAGE AND DIFFERENCES FROM OTHER APT TOOLS The apt(8) commandline is designed as .. 2021. 7. 7.
[Docker] Ubuntu20.04에서 man 사용하기 Docker 명령으로 우분투 설치, 실행 docker run -it --name dubuntu ubuntu:20.04 /bin/bash ctrl + p, ctrl + q를 차례로 누르면 빠져나올 수 있다. man apt 명령어를 사용하면 이런 안내 메시지가 나온다. This system has been minimized by removing packages and content that are not required on a system that users do not log into. To restore this content, including manpages, you can run the 'unminimize' command. You will still need to ensure the 'man-d.. 2021. 7. 7.