선수로 산다, 때론 좋은 코치로
Windows10 WSL2 docker golang debug in vscode 본문
docker 내부에서 go 언어로 작성한 코드를 디버깅하는 방법입니다. 인터넷에 검색하면 다양한 방법이 많이 나와 있습니다. golang의 delve를 이용하는 방법이 많이 나와 있습니다. delve를 이용한 원격 디버깅이 아니라 vscode의 디버깅 기능을 이용하는 방법입니다.
사내에서 공유하기 위해서는 모여서 간단하게 설명하면 되는데, 여러 가지 이유로 간단하게 설명할 방법을 찾는 중에 직접 진행하면서 캡쳐를 이용해서 작성하고 있습니다. 이럴 줄 알았으면 영상으로 찍어놓고 나중에 편집하는 것이 좋을 걸 그랬습니다. 영상에 익숙하지 않아서 캡쳐를 이용했는데 이미지를 이용하는 것도 설명하기에 불편한 점이 있습니다.
Windows10에서 WSL2 지원, Windows10에서 지원하는 terminal app 실행
터미널에서 WSL2에 설치한 Ubuntu 18.04 접속
vscode에 컨테이너를 이용한 원격 개발부분에서 참고한 소스를 가져옵니다. 최근에 golang을 공부하고 있어서 golang 샘플을 clone 합니다.
git clone https://github.com/microsoft/vscode-remote-try-go.git
vscode를 실행합니다. 오른쪽 아래를 살펴보면 WSL: Ubuntu-18.04 에서 vscode가 실행된 것을 알 수 있습니다.
Windows10에 WSL2를 구성하고, Docker Desktop이 설치되어 있으면 vscode에서 .devcontainer 폴더의 파일을 이용하여 컨테이너를 실행하고 코드를 가져올 수 있습니다. vscode를 이용하지 않고 도커를 이용할 때는 Dockerfile이나 docker-compose 파일을 이용하여 별도로 이미지를 실행한 후에 container에 attatch하여 소스를 가져올 수 있습니다. vscode를 이용하면 컨테이너 환경을 실행하고 소스를 공유하는 것이 쉬워 보입니다.(내부 동작하는 방법은 확인하지 않음)
오른쪽 아래 아이콘을 누르면 리모트 컨테이너를 선택할 수 있습니다.
Remote-Containers: Reopen in Container를 선택합니다. vscode 에서 .devcontainer 폴더를 인식하여 선택할 수 있는 메뉴를 제공합니다. 폴더가 다르면 나타나는 메뉴가 다를 수 있습니다. vscode tutorial 에서는 Remote-Containers: Try a Sample...을 선택하라고 합니다. vscode 페이지에서 Remote development in Containers를 참고하세요. 메뉴에서 알 수 있듯이 로컬에 소스가 없는 상태에서도 테스트가 가능합니다. 지금은 로컬에서 테스트하는 것이 목적이므로 로컬에 소스를 clone 하고 실행하고 있습니다.
Dev Container 내부의 소스를 볼 수 있습니다.
vscode tutorial 에서는 웹서버를 제공하고 있습니다. 코드를 디버깅하는 것에 관심이 있으므로 디버깅을 할 수 있는 코드를 간단하게 작성합니다. 1부터 100까지 더하는 프로그램을 server.go가 있는 폴더에 작성합니다.
오랜만에 작성하는 전통적인 방식의 합계 구하는 프로그램입니다.
vscode 내부의 터미널을 열어서 실행을 해 봅니다.
실행은 잘 됩니다. 이제 break-point를 설정하고 디버깅을 시작합니다. 10번째 라인에 중단점을 설정합니다. 그리고 디버그 화면을 열고 실행>디버깅 시작을 선택하여 디버깅을 시작합니다.
오류가 발생했습니다. 이 오류는 예제에 포함되어 있는 server.go를 디버깅으로 시작했기 때문에 발생합니다. 테스트를 위해 작성한 main.go를 디버깅하기 위해서 launch.json 파일을 수정합니다. server.go를 main.go로 변경합니다.
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch Server",
"type": "go",
"request": "launch",
"mode": "debug",
// "program": "${workspaceFolder}/server.go"
"program": "${workspaceFolder}/main.go"
}
]
}
다시 디버깅을 시작하면 정상적으로 중단점에서 중단되어 있는 것을 알 수 있습니다. 조사식에 i와 sum을 추가하여 값을 확인할 수 있습니다.
Visual Studio Code(vscode)에서 container를 지원하고 있어서 Docker 개발환경을 이용하여 Go(golang)언어로 프로그램을 작성해 보았습니다. golang의 개발환경을 공유하기 위해서 컨테이너를 활용하고 있습니다. windows나 mac에서 개발하더라고 linux 개발환경을 공유하고 있어서 매우 편리합니다. 그동안 디버깅이 안되는 경우가 있어서 불편했는데 vscode에서 제공하는 방법으로 해결되었습니다.
확인 필요
.devcontainer 에서는 ms에서 제공하는 도커 이미지를 사용합니다. docker hub에 있는 공식 이미지를 사용해도 동작하는지 확인이 필요합니다.
그동안 잘 안되었던 이유가 이미지의 문제가 아니라 단순히 launch.json의 설정의 문제때문일 수 있습니다.
참고링크
'개발 관련 > go' 카테고리의 다른 글
[golang] 숫자 야구 프로그램 (0) | 2020.09.07 |
---|---|
[golang] 인코딩 변환하기(euc-kr > utf-8) (0) | 2018.02.20 |
[golang] 엘라스틱서치로 우리은행 거래내역 분석하기-엑셀파일 읽기 (0) | 2018.02.19 |
[golang] A Tour of Go - 61 연습 문제 (0) | 2018.02.13 |
[golang] A Tour of Go - 60 연습 문제 (0) | 2018.02.13 |