내가 현지의 발전 환경을 어떻게 조직할 것인가


이 게시물How I Organize My Local Development Environment은 처음Qvault에 실렸다.
내가 막 프로그래밍을 시작했을 때, 나는 매우 혼란스러웠다.나는 My Documents에 새 텍스트 파일을 만들어서 처리할 것이다. Git 저장소를 만들지 않고 나중에 의외로 삭제하면 알게 될 것이다.지금 나는 완전히 상반되었다.솔직히 말하자면 Go의 초기 버전은 개발자에게 인기가 없었고 현재 버려진 버전GOPATH을 사용하도록 요구한 것이다.나는 이 조직에 강제로 요구하지 않는 것이 옳다고 생각하지만, 사실 나는 개인적으로 이런 방법을 매우 좋아해서 지금까지도 그 조직의 한 버전을 사용하고 있다.

내가 로컬 기계에 코드를 저장하는 곳


내가 작성하고, 갈라지고, 유지보수하는 모든 코드는 주 폴더의 ~/workspace 디렉터리에 놓여 있다.나는 지금 Unix 환경에서만 일한다.workspace 디렉터리에서 모든 내용은 GOPATH가 처리하는 방식에 따라 명명됩니다.예를 들어,~/workspace/REMOTE/NAMESPACE/REPO예를 들어 나의 소스 오픈 패키지go-password-validator~/workspace/github.com/wagslane/go-password-validator에 있다.
내가 이런 설정을 좋아하는 데는 몇 가지 이유가 있다.
  • 경로에 포함remote을 통해 나는 항상 사용자 버전 제어를 사용하라고 알렸다.사실상, 모든 새로운 항목은 원격 서버 (보통 Github) 에서 만들어진 다음에 정확한 위치로 복제됩니다.
  • 이런 명명 방식을 통해 나는 내가 종사하는 각종 프로젝트와 충돌할 수 없다.예를 들어, 내가 개인 '이미지 캐시' 가 있다고 가정하지만, 내 작업에도 '이미지 캐시' 항목이 있다.만약 그들이 다른 목록에 없다면 나는 바보짓을 해야 한다.
  • 나는 항상 물건이 어디에 있는지 정확하게 안다.내가 아직 학생일 때, 나는 내가 다른 항목이나 부분을 어디에 두었는지 잊어버릴 것이다. 이것은 나에게 있어서 이미 오랫동안 문제가 없었다.
  • 작업할 때 여러 저장소에서 동시에 작업해야 하는 경우가 있습니다.namespace레벨에서 VS 코드를 열고 조직의 모든 항목을 보면 정말 좋습니다.
  • 새로운 프로젝트를 어떻게 시작합니까


    모든 새 프로젝트에 대해 설정 과정은 이렇다.
  • Github
  • 에 새 저장소 생성
  • 자술한 파일로 초기화합니다.md, 오픈소스라면 허가증도 있습니다
  • 위에서 설명한 대로
  • 내 로컬 작업공간에 클론 재구매
  • 환매 설정을 자동 삭제 헤드 지점으로 변경
  • 나는 보통 바둑에서 일하기 때문에 견본을 설치할 것이다.나는 entirely separate post에 이 과정에 관한 것이 하나 있기 때문에 Go의 특정한 샘플 파일에 관심이 있다면 한번 볼 수 있다.

    내가 현지에서 어떻게 개발하는가--내가 가장 좋아하는 도구들


    VS 코드


    나는 지금 VS 코드를 사용하고 있다.지금까지 나는 슈퍼 팬이었다. 그러나 만약 그것이 기억 돼지가 아니었다면 좋았을 것이다.새로운 편집을 시도할 때, 나는 단지 두 가지 진정한 혐오감이 있을 뿐이다.
  • 나는 특정 언어의 IDE나 편집기를 좋아하지 않는다.하나의 도구, 나의 모든 항목에 감사 드립니다.
  • 나는 도구에 전적으로 의존하는 것을 좋아하지 않는다.예를 들어 학교에서 Visual Studio가 없으면 저는 C++ 코드를 구축하는 법을 배울 수 없습니다.VisualStudio는 리콜 계약에 프로젝트 파일을 추가하고 일부 마법을 사용하여 이를 적용합니다.나는 편집만 하는 것이 아니라 나의 편집을 더 좋아한다.나는 차라리 명령행을 사용하여 구축, 테스트, 운행 등을 진행하고 싶다
  • REST 클라이언트


    나는 우체부와 불면증을 좋아하지 않는다. 단지 다른 도구를 켜는 것을 좋아하지 않기 때문이다.나는 VS 코드 플러그인을 매우 좋아한다.예를 들어, 나는 이 REST client plugin 를 사용한다. 왜냐하면 모든 테스트 요청을 프로젝트의 읽을 수 있는 텍스트 파일로 쉽게 저장할 수 있기 때문이다.

    데이터베이스 클라이언트


    저는 현재 박사 후에 Elastic Search와 주로 일하고 있습니다.Postgres 관리자 관리에 대해서는 PG Admin 4를 사용합니다.나는 그것이 브라우저에 있는 것을 좋아하지 않지만, 그것은 매우 좋다.만약 누군가가 더 좋은 공구를 추천한다면, 비록 내가 귀를 씻고 공손하게 듣더라도.
    ElasticSearch는 매우 간단하다. 왜냐하면 그것은 Kibana를 덧붙여서 상자를 열면 바로 사용할 수 있기 때문이다.Kibana는 훌륭한 ES 고객입니다.

    운영 체제


    지난 몇 년 동안 Macbook Pro에서 최신 버전의 Mac OS를 주로 사용했습니다.하지만 가끔은 게임컴퓨터를 할 때WSL와 Ubuntu를 사용합니다.Linux의 Windows 서브시스템은 생명을 구하는 볏짚이어서 나는 Windows 명령행을 참을 수 없다.
    나는 거의 항상 Docker를 사용하여 리눅스 서버에 배치한다. (대개 Debian) 그래서 나의 Mac OS와 Ubuntu 로컬 환경은 보통 생산 환경에 매우 가깝다.나는 보통 운영체제와 상호작용이 너무 많은 코드를 작성하지 않는다.

    Bash 구성 파일


    보안상의 이유로 나는 자주 점프 상자를 사용하여 원격 데이터베이스나 API에 연결해야 한다.이 경우, 나는 별명 명령으로 Bash 프로필을 작성하여 로컬 포트를 이 서비스에 전송합니다.예를 들면 다음과 같습니다.
    alias ssh_postgres_prod="ssh -L 5433:DATABASE_URL:5432 JUMP_BOX_URL"
    alias ssh_postgres_stage="ssh -L 5434:DATABASE_URL:5432 JUMP_BOX_URL"
    
    나는 다른 로컬 포트를 사용한다. 이렇게 하면 나는 의외로 데이터베이스에 연결되어 다른 데이터베이스라고 생각하지 않을 것이다.

    로컬 스크립트


    나는 일회용 작은 bash 스크립트를 매우 좋아한다.내가 단조로운 일을 한 번 또 한 번 하는 것을 발견할 때마다, 나는 미래의 속도를 높이기 위해 발을 써 보려고 한다."자동화로 지루한 것", 원한다면.만약 스크립트가 보통 유용하다면, 나는 내 ~/workspace 에서 스크립트를 위해 자신의Git repo를 만들 것이다.만약 그 범위가 하나의 항목이라면, 나는 보통 그것을 이 항목의 scripts 디렉터리에 저장할 것이다.예를 들어, 나의 전담 업무에서, 우리는 항상 모든 ~ 2개의 마이크로 서비스의 의존 항목을 갱신해야 한다.이 모든 업그레이드 명령을 실행하고 끌어오기 요청을 열면 지루할 수 있습니다.이를 위해 스크립트를 작성했습니다.
    #!/bin/bash
    
    # get github repo list
    echo ">> List all repositories you would like to create a PR in, separated by commas" ;
    default="example-repo,example-repo-2"
    echo ">> Default: $default";
    read repos;
    if [-z "$repos"]
    then
       repos="$default"
    fi
    echo "Using repos: $repos"
    IFS=',';
    read -a repoarr <<< "$repos"
    
    # get new branch name
    echo ">> what will the feature branch name be?";
    echo ">> Default: auto-{RANDOM}";
    read branch;
    if [-z "$branch"]
    then
       branch="auto-$RANDOM"
    fi
    echo "Using feature branch: $branch"
    
    # get base branch name
    echo ">> what branch is this merging into?" ;
    echo ">> Default: master";
    read baseBranch;
    if [-z "$baseBranch"]
    then
       baseBranch="master"
    fi
    echo "Using base branch: $baseBranch"
    
    # get the desired tag of the dependency
    echo ">> what tag are we changing to?";
    echo ">> Default: latest";
    read tag;
    echo "Using latest tag";
    
    # clean and move to tmp directory
    rm -rf /tmp/pr-generator ;
    mkdir /tmp/pr-generator ;
    cd /tmp/pr-generator ;
    
    # Loop through each repo
    for (( n=0; n < ${#repoarr[*]}; n++))
    do
      git clone "https://github.com/example-org/${repoarr[n]}" ;
      cd ${repoarr[n]} ; 
      git checkout -b ${branch} ;
      if [-z "$tag"]
      then
        go get -u github.com/example-org/example-dependency ;
      else
        go get -u github.com/example-org/example-dependency@${tag} ;
      fi
      echo "<============ MOD VENDOR =============>" ;
      go mod vendor ;
      go mod tidy ;
      go test ./... ;
      echo "<============ GIT COMMANDS =============>" ;
      git add * ;
      git commit -m "auto generated message for ${branch}" ;
      git push -u origin ${branch};
      echo "<============ PR ==============>" ;
    
      curl --location --request POST "https://api.github.com/repos/example-org/${repoarr[n]}/pulls" \
    --header "Authorization: Bearer $GITHUB_ACCESS" \
    --header 'Content-Type: application/json' \
    --data-raw "{
        \"title\": \"*autogen title* update dependency in ${baseBranch}\",
        \"head\": \"${branch}\",
        \"base\": \"${baseBranch}\"
    }";
    
    done
    
    내가 한 일들이 너에게 유용하길 바란다. 만약 네가 내가 한 일이 매우 어리석거나 네 자신의 선호가 있다고 생각한다면, 그것들이 무엇인지 나에게 말해라.

    읽어주셔서 감사합니다!


    만약 당신의 CS 경력을 더욱 발전시키는 데 관심이 있다면, 저희를 선택하십시오 computer science courses
    질문이나 댓글이 있으면 트위터에 연락 주세요. 저희가 잘못을 저질렀다면 반드시let us know 잘못을 바로잡을 수 있도록 하세요!
    Subscribe 우리 시사통신을 클릭하여 더 많은 프로그래밍 문장을 얻기

    좋은 웹페이지 즐겨찾기