윈도우 환경에서 vscode github ssh 공개키 방식으로 연결해서 패스워드 입력 생략

윈도우 환경의 VSCode에서 github 리파지토리를 연동해서 사용할때 아이디/패스워드를 생략하기 위해 SSH 공개키/개인키를 이용해서 접속하는 방법을 설명해 보겠다.

발단

VSCode에서 golang 개발을 하고 있는데 노트북과 데스크탑을 왔다갔다하니 소스코드 공유를 위해서 github를 쓰고 있다.
소스코드 공유를 해야되니 개발 도중의 코드도 자주 푸시할 수밖에 없는데 리모트에 뭐할 때마다 아이디/패스워드를 입력하라고 해서 너무 귀찮다.
그래서 알아보니 리파지토리를 HTTPS가 아니라 SSH를 사용해서 공개키/개인키를 사용해서 접속하면 아이디/패스워드 입력을 안해도 된다고 해서 그렇게 설정하니 너무너무 편하다.

SSH로 리파지토리 접속

먼저 기존에 사용하고 있던 공개키/개인키가 있으면 공개키를 github에 등록하고, 개인키는 윈도우의 유저폴더(c:\Users\USER_ID) 디렉토리 아래 .ssh 폴더에 넣으면 된다.
만들어 둔 공개키/개인키가 없으면 다음 순서대로 진행해서 만들자.

공개키/개인키 작성

github를 쓰고 있으면 git은 당연히 설치했을건데 git 설치폴더에 보면 git-bash.exe 파일이 있다. 실행하면 리눅스 커맨드창이 뜬다.
git이 없으면 이 글을 보고 설치하자. 윈도우10 git 설치와 vscode 에서 github 리파지토리에 파일 올리기

리눅스 커맨드창을 띄웠으면 일단 유저 폴더의 .ssh 폴더로 이동한다.

공개키/개인키 작성은 아래 커맨드를 입력하면 된다. -C 옵션 뒤에는 보통 이메일 주소 같은걸 쓰면 되는데, github에서 사용하는 메일주소를 넣자.

그 다음은 엔터 3번만 누르면 된다. 첫번째는 개인키 파일명인데 디폴트로 하기 위해서 엔터, 두번째와 세번째는 공개키/개인키에 패스워드 설정하기인데 그걸 생략하기 위해서 공개키/개인키 방식을 쓰는거니 입력하지 말고 엔터를 눌러 생략하자.

ssh-keygen을 실행한 .ssh 폴더에 id_rsa(개인키 파일)과 id_rsa.pub(공개키 파일)이 만들어진다.

github.com에 공개키를 등록

github에 로그인해서 오른쪽 위에 아이콘을 클릭하면 설정(Settings)이 나온다. 선택해서 설정 화면으로 이동. SSH and GPG keys 메뉴를 클릭하고 마지막으로 New SSH key 버튼을 누른다.

github 설정 ssh

Title은 적당히 아무거나 넣고, Key 부분에 공개키인 id_rsa.pub 파일을 열어서(메모장으로 열면 됨) 내용을 전체 복사한 다음 붙여넣으면 된다.

github 설정 ssh 등록

이걸로 github에 공개키 등록은 끝났다.

VSCode에서 github 리파지토리 SSH로 연동

기존에 사용하던 리파지토리를 지우고 SSH 주소로 다시 등록한다.

github 리파지토리에서 SSH 주소를 복사한다.

Use SSH 링크를 누르면

github ssh 주소

SSH 접속 주소가 나온다. 오른쪽 옆에 아이콘을 눌러서 복사하자.

github ssh address

우선 기존 등록된 git remote add origin 커맨드로 등록한 https 주소를 해제하자.
VSCode에서 로컬 리파지토리 경로에 폴더에서 터미널을 열고, 아래 커맨드를 실행한다. (.git 폴더가 있는 폴더에서 커맨드를 실행하면 된다. 일반 윈도우 커맨드창에서 실행해도 됨)

그리고 아까 복사해 뒀던 SSH 주소로 재등록.

테스트

git fetch 를 실행하면 알려진 호스트로 등록할거냐라는 메시지가 뜨고 yes 를 입력하면 아이디/패스워드 없이 리파지토리에 접속 되는 것을 확인할 수 있다.

윈도우10 git 설치와 vscode 에서 github 리파지토리에 파일 올리기

윈도우10에서 git을 설치하고, vscode에서 작성한 코드를 github 리파지토리에 올리는 방법을 설명해 보겠다. git은 포터블판으로 설치한다.

이전글: 윈도우10 golang vscode 개발환경 구축

git 설치

git 다운로드 – https://git-scm.com/download/win

64비트 윈도우용 git 다운로드

다운로드 해보면 7z 실행파일인다. 실행해서 적당한 폴더를 선택해서 압축을 푼다. 여기선 c:\dev\git 에 압축을 풀겠다.

윈도우의 환경변수에 git 의 실행파일 디렉토리를 PATH 에 추가한다. 유저 환경변수나 시스템 환경변수, 둘 중 아무데나 추가해도 된다.

윈도우10에서 환경변수 화면으로 이동하는 방법
화면 왼쪽 아래에 윈도우 마크에서 마우스 오른쪽 클릭 -> 시스템 클릭 -> 오른쪽에 시스템 정보 클릭 -> 왼쪽에 시스템의 상세설정 -> 화면 아래쪽에 환경변수 버튼 클릭

PATH 항목을 편집해 git/cmd 디렉토리를 추가하자.

vscode git에 파일 올리기

git 실행파일을 환경변수 PATH 에 추가하고 vscode 를 실행해서 왼쪽 소스컨트롤 버튼을 눌러보면 아래 이미지와 같이 표시된다.
vscode 익스플로러에 열려 있는 폴더(go_work)가 git 리파지토리를 가지고 있지 않다는 내용이다. 리파지토리 초기화 버튼을 누르자.

리파지토리 초기화

아래와 같이 변경된 파일이 표시 된다.
플러스(+) 아이콘을 눌러서 변경된 파일을 스테이지에 올리자.

변경된 파일 표시

스테이지에 파일이 올라간 상태.
윗쪽 체크 아이콘을 눌러서 커밋하자.

변경된 파일 스테이지

커밋 메시지를 입력하라는데 적당히 입력하자.

커밋

메시지 입력하고 ENTER 키를 누르면 아래와 같이 에러가 난다.

에러 username

윈도우 커맨드창이든 vscode 에서 연 커맨드창(하단 TERMINAL 탭)이든 아래 내용을 입력해서 user.name과 user.email을 등록하자. github.com 에 등록된 유저명을 사용하는게 좋을 것이다.

vscode git user.name 입력
vscode 터미널에서 입력

다시 커밋해보면 에러가 안나오고 잘 된다.

github 에 올리기

github 에서 리파지토리를 만들자. 여기서 go_test 란 이름으로 만들었다.

github.com go_test 리파지토리

여기서 두가지 옵션이 있는데.
하나는 go_work 아래 go_test 폴더를 통째로 github 에 올리는 방법과, go_test 아래 test.go 파일만 올리는 방법이 있다. 리파지토리 하나에 여러 폴더를 올릴 경우에는 전자가 좋을것이고, 리파지토리 하나에 하나의 폴더(프로젝트)의 내용을 올리고 싶으면 후자가 좋다.

  • c:\dev\go_work 에서 커맨드창을 열어서 아래 명령을 실행한다. go_test 폴더를 github 의 go_test 리파지토리에 등록한다.
  • c:\dev\go_work 에 있는 .git 폴더를 지우고, go_test 폴더로 이동해서 git init 를 실행한 후, 아래 명령을 실행하면, test.go 파일을 go_test 리파지토리에 등록한다.

remote add github repo
test.go 파일만 올리는 후자의 방법으로 실행

커밋 되어 있는 내용을 푸쉬한다. 소스컨트롤에서 … 아이콘을 누르고, Push 를 선택.

vscode push

upstream 어쩌구 팝업이 나오면 일단 OK 를 누르면 된다. upstream 관련은 아래에서 설명.

upstream error

github 리파지토리에서 새로고침하면 test.go 파일이 등록되어 있는걸 확인할 수 있다.

github 리파지토리

no upstream branch

아래 명령을 한번 쳐주면 다음부터는 안나온다.

윈도우10 golang vscode 개발환경 구축

윈도우10에서 golang 개발을 위한 vscode 설치와 설정에 대해서 설명한다. 윈도우를 재설치하거나 다른 컴에도 그대로 옮겨서 사용할 수 있도록 인스톨러를 사용하지 않고 전부 포터블판으로 설치하겠다.

GO 설치

고 다운로드 페이지 – https://golang.org/dl/

고 다운로드 페이지
64비트 윈도우용 압축파일인 go1.14.2.windows-amd64.zip 파일을 다운로드 받아서 적당한 곳에 압축을 풀자. (이 글에서는 c:\dev\go 에 압축을 풀어둔 상태로 설명한다.)

윈도우의 환경변수에 go 의 실행파일 디렉토리를 PATH 에 추가한다. 유저 환경변수나 시스템 환경변수, 둘 중 아무데나 추가해도 된다.

윈도우10에서 환경변수 화면으로 이동하는 방법

화면 왼쪽 아래에 윈도우 마크에서 마우스 오른쪽 클릭 -> 시스템 클릭 -> 오른쪽에 시스템 정보 클릭 -> 왼쪽에 시스템의 상세설정 -> 화면 아래쪽에 환경변수 버튼 클릭

아래 이미지대로 PATH 항목을 편집해 go/bin 디렉토리를 추가하자.

윈도우 환경설정 패스

gopath 설정

gopath는 go 에서 사용하는 모든 외부 라이브러리를 보관하는 장소이다. go 코드를 작성하면서 import 하는 외부 라이브러리도 이곳에 다운로드해서 저장한다.
기본적으로 유저 폴더 아래에 go 폴더(c:\user\USER_ID\go)가 지정되는 것 같은데, 나는 유저 폴더 밑에 뭘 두는게 싫어서(다른 폴더가 많아서 찾아보기가 힘들어) c:\dev\go_path 로 지정하겠다.
마찬가지로 윈도우 환경변수에 gopath 란 이름으로 디렉토리 절대경로를 설정한다.

vscode 설치

vscode 다운로드 페이지 – https://code.visualstudio.com/download

vscode 다운로드
64비트 윈도우용 압축파일은 .zip 옆에 64 bit 링크를 클릭하면 다운로드 된다. 마찬가지로 적당한 곳에 압축을 풀자. (이 글에서는 c:\dev\vscode 에 압축을 풀어둔 상태로 설명한다.)

vscode를 실행하고 왼쪽에 확장기능에서 go 를 설치한다.

vscode 확장기능 go

vscode 확장기능 go 인스톨

인스톨이 끝나면 Ctrl + Shift + P 키를 눌러서 명령창을 열어 go install 로 검색해서 Go: Install/Update Tools 를 선택해서 나오는 모든걸 다 설치한다.
체크 클릭해서 전부 체크하고 오른쪽 OK 버튼을 눌러서 설치 시작.

vscode go install update tools

아래 콘솔창에 설치내용이 표시된다.
마지막에 All tools successfully installed. You are ready to Go :). 가 표시되면 완료.

vscode go install console

vscode go 인스톨 완료

여기까지하면 vscode 에서 고언어로 코딩할 수 있는 준비가 끝났다.

hello go 작성 테스트

c:\dev\go_work 경로로 소스를 저장할 디렉토리를 만들고, vscode 에서 이 폴더를 워크스페이스로 연다.
vscode 왼쪽 제일 윗 아이콘을 클릭해서 익스플로러를 열고, 익스플로러 빈 공간에서 마우스 오른쪽 버튼으로 메뉴를 열어서 Add Folder to Workspace 를 선택하고 go_work 디렉토리를 선택하면 된다.

익스프롤러에 go_work 가 표시될텐데 마우스 커서를 올리면 파일생성, 폴더생성, 새로고침, 폴더접기 아이콘이 표시된다.
폴더 생성하기로 go_test 폴더를 작성하자. c:/dev/go_work/go_test 경로로 디렉토리가 생성된다.
go_test 를 선택하고 파일생성 아이콘을 눌러서 test.go 란 이름으로 go 파일을 만들고 열어서 아래처럼 코딩을 한다.

test.go 코드

작성 후에 F5 버튼을 누르면 코드가 실행된다. 실행 결과는 아래 DEBUG CONSOLE 에 표시된다.

vscode test 코드 실행 결과

참고글: golang 설치 시작하기 – https://github.com/golang-kr/golang-doc/wiki/%EC%84%A4%EC%B9%98-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0
VSCode, 에디터 한글로 변경하기 – https://blog.azulpintor.io/entry/how-to-set-language-in-vscode-for-kor

우분투 서버 18.04 LTS 아파치 톰캣9 연동 버츄얼 호스트 설정

우분투 서버 18.04 LTS에서 아파치와 톰캣9를 설치하고, 톰캣에 디플로이한 war 어플리케이션을 아파치를 경유해서 버츄얼 호스트로 접속하도록 아파치와 톰캣을 연동하는 방법을 설명한다.

톰캣만 써도 잘 되는데 왜 아파치를 경유하냐하면, 아파치에서 워드프레스 등 다른 서비스를 돌리고 있어서 톰캣도 같은 입구(아파치)를 통해서 외부로 연결되는 설정을 하는게 관리하기 편해서 그렇다.
딱히 아파치가 필요하지 않은 경우에는 그냥 톰캣만 기동해서 사용해도 된다.

아파치 톰캣9 설치와 모드 설정

설치는 아래 커맨드 한방으로 간단하게 끝.

아파치 모드 proxy 와 proxy_ajp 를 활성화한다.

proxy_ajp는 mod_jk 대신 사용하는건데 mod_jk는 따로 설치해야 되지만 proxy_ajp는 기본 설치된 모드이기 때문에 편하다. 복잡한 워커 설정도 필요없고.

아파치 site-available conf 설정

버츄얼 호스트 설정을 작성하기 위해서 /etc/apache2/site-available 디렉토리에 test.conf 파일을 생성한다. 내용은 아래처럼 작성.

80 포트로 들어오는 요청에 대해서 서버이름은 test.elmi.page, 디렉토리 /home/elmi/webapps/test 에 대한 접근 모두 허용(Require all granted)
http://test.elmi.page 루트 / 를 AJP 프로토콜로 localhost:8009 로 넘긴다. localhost:8009 는 톰캣에서 AJP 프로토콜로 열어둘 주소/포트.

서브도메인을 추가하고 싶은 경우에는 conf 파일을 복사해서 다른 도메인/디렉토리로 설정하면 된다.

conf 파일을 수정한 경우에는 아래 커맨드로 적용하자.

서비스 리로드에서 에러가 났을 경우에는 아래 커맨드로 내용 확인.

톰캣 server.xml 설정

톰캣의 server.xml을 편집한다. 위치는 /etc/tomcat9/server.xml

아래 8080 포트로 HTTP 연결은 아파치를 통해서 AJP 연결을 할 경우에는 필요 없으니 주석처리하자. (주석처리 안해도 딱히 지장 없음)

주석처리 된 프로토콜 AJP/1.3 부분을 찾아서 주석에서 해제.

호스트 설정에서 appBase 부분을 아파치에서 설정한 DocumentRoot, Directory와 맞추고, 디폴트로 사용되는 localhost 부분은 남겨두고 별도로 Alias로 서브도메인을 넣어둔다.

appBase 디렉토리(/home/elmi/webapps/test)에 ROOT.war 파일을 넣으면 자동으로 ROOT 디렉토리에 압축을 풀어서 디플로이 될 것이다. ROOT.war 파일을 사용하면 http://test.elmi.page/ 도메인 루트로 접속하도록 되는것이고, ROOT.war 이외에 이름 예를 들면 hoge.war 라는 war 파일을 사용하면 http://test.elmi.page/hoge/ 로 접속해야 한다.

서브도메인을 추가하고 싶은 경우에는 Host 태그를 복사해서 name을 name=”test2.elmi.page” 처럼 서브도메인 이름으로 넣으면 된다. 물론 appBase는 다른 곳으로 지정할것.

server.xml 파일을 수정했으면 서버 재기동해서 적용하자.

아파치 로그는 /var/log/apache2, 톰캣 로그는 /var/log/tomcat9 에서 확인 가능하니 뭔가 제대로 안되면 로그 파일을 확인하면 된다.
conf 파일이나 xml 파일 수정 후에 리로드, 재기동하면 에러가 나는 경우는 파일의 문법상 문제이기 때문에 금방 찾아서 고칠 수 있다.

접속 테스트

브라우저로 확인해도 되지만, 내가 쓰는 page 도메인은 SSL 인증서를 발급 받지 않으면 브라우저로 확인이 불가능해서 wget 으로 에러 없이 index.html 파일이 제대로 보이는지 확인했다.

404 에러가 잘 나올텐데 아파치 access 로그부터 확인해서 연결이 잘 들어오고 있나 확인하자. 아파치에 문제가 없으면 그 다음은 톰캣의 억세스 로그를 보면 된다.
주로 디렉토리 경로가 잘못된 경우가 많으니 아파치의 conf 파일과 톰캣의 server.xml 에서 디렉토리 경로를 다시 잘 확인해 보자.

크롬 브라우저 호스트 알아내는 중(resolving host) 메시지 표시되며 지연

크롬 등의 브라우저에서 하단에 호스트 알아내는 중이라는 메시지가 표시되면서 웹페이지가 몇초간 지연되다가 열리는 문제를 해결해 보자.

현상

데스크탑을 오랜만에 사용하고 있는데 크롬에서 웹서핑을 할때 가끔 페이지가 느리게 열려서 답답하게 하더라. 잘 살펴보기 왼쪽 하단에 호스트 알아내는 중…이라는 메시지가 표시되면서 페이지 열리는게 지연되고 있었다.

해결 과정

호스트 알아내는 중이라면 Resolving host… DNS 문제인가? 하고 예전에 설정했던 클라우드 플레어 DNS(1.1.1.1)를 전부 해제하고 자동으로 바꾸었다.
원래 LAN 연결이었다가 지금은 USB 무선LAN 어댑터로 연결하고 있었기 때문에 WIFI 연결하고 있는 어댑터의 설정으로 들어가니 안쓰던거라 DNS 설정은 자동으로 되어있었다.
하여튼 공유기의 DNS 설정까지 몽땅 다 바꿔봤지만 여전히 호스트 알아내는 중 메시지는 사라지지 않는다.

다음은 구글DNS(8.8.8.8)을 시도해 봤다.
여전히 안되서, ipv6 의 DNS 서버까지 모두 변경했지만 그대로.

윈도우 커맨드 라인에서 nslookup 을 쳐보니 Default Server 가 Unknown 으로 나오는게 수상하다. 분명 DNS 서버 설정했는데…
네트워크 어댑터 중에 WIFI 가 아닌 이더넷 어댑터의 DNS 설정을 보니 클라우드 플레어DNS 설정이 되어있어서 구글DNS 로 바꿔보니, nslookup에서 Default Server 가 구글DNS 로 변경된다.
이거 왜 쓰지도 않는 유선랜 어댑터의 DNS 설정을 사용하는거야!?

해결 방법

윈도우에서 기본으로 사용하는 DNS 설정이 인터넷 연결이 되어있는 무선랜 어댑터에서 설정한 DNS 가 아니라 사용하지도 않는 유선랜 어댑터(이더넷)에서 설정한 DNS 를 사용하고 있는 사실을 알았다.
여기서 힌트를 얻어서 사용하지 않는 유선랩 어댑터를 사용 안함으로 설정하니 크롬에서 호스트 알아내는 중이라는 메시지가 표시되지 않고, 페이지가 바로바로 열리게 되었다. 만세!

네트워크 연결 설정
유선랜 어댑터(이더넷)을 사용 안함으로 설정한다.