티스토리 뷰

728x90

1. 결론은 답이 없다. 윈도우 폴더에서 개발하는 것 밖에 없다.

 

2. WSL 성능이 좋아지면서 WSL 환경으로 전환하고 있다. 그런데 다 좋은데 문제가 생겼다.

  2-1 nodemon으로 go 개발을 하는데 소스 변경 시 재기동이 되지 않는다.

  2-2 아래는 왼쪽은 D:/practice/go/hotel 오른쪽은 /home/pilseong/practice/go/hotel 에 소스가 있다.

  2-3 윈도우 폴더에서 리눅스 파티션으로 옮겨서 작업을 하려고 하는데 WSL2로 들어와 작업을 하면 문제가 생겼다.

 

왼쪽의 윈도우 폴더에서 오른쪽의 wsl 리눅스로 이동하였다.

 

  2-4 그냥 쉽게 생각하면 안되는 이유가 nodemon -L 같은 걸 쓰면 되지 않을까 생각 할 수 있는데, -L 옵션은 아래의 경우 같이 윈도우 폴더에 있을 때만 의미가 있다.

    2-4-1 즉 윈도우 폴더를 사용하면서 WSL을 사용하여 접근하는 경우를 말하는데,

    2-4-2 재현상황은 아래처럼 기동하면 소스파일을 수정하고 저장하면 nodemon에서 아무 반응이 없다. 먹통이다.

    2-4-3 이 경우 nodemon -L을 사용하면 동작은 한다. 아래처럼 프로그램 소스를 변경 저장하면 서버가 재기동된다.

 

 

    2-4-4 하지만 재기동하는 게 아무 의미가 없다. listen tcp :3050: bind: address already in run 라는 게 떠서 사실 반영이 안된다. 황당한 점은 이렇게 app crashed가 떠도 서버는 돌아가고 있다. 다시 말하면 기존의 process가 죽지 않았다는 의미이다.

    2-4-5 이 문제는 사실 wsl 과 윈도우 시스템의 포트 바인딩 문제인데, wsl에서 사용한 포트는 자동으로 윈도우 포트와 매핑이 된다. 문제는 wsl의 프로세스와 윈도우 resource에서 잡히는 프로세스가 별개로 동작한다. 윈도우에서 내부적으로 관리를 한다. 그렇기 때문에 wsl에서 서비스를 종료한다고 해서 윈도우에서 즉시 반영되는 것은 아닌 것 같다.

    2-4-6 사실 이 부분은 node.js로 개발한 경우는 자동으로 restart가 동작하기 때문에 아마 go run이 사용하는 별도의 프로세스가 재대로 동작하지 않는 것에서 생기는 문제로 보인다. 그래서 nodemon을 통으로 종료해야 정상동작한다.

    2-4-7 한 가지 더 흥미로운 점을 적어보자면 아래의 wsl 환경에서 실행은 ./run.sh를 하지 않고 ./run.bat를 실행하고 있다. 윈도우 시스템의 폴더기 때문에 wsl리 native 리눅스라고 해서 run.sh가 동작하지 않는다. 윈도우가 적절하게 변환해 주는 기능을 해주는 것을 보인다.

 

 

  2-5 위와 같이 재기동 안되는 문제를 해결하기 위해서 처음에 폴더를 보인 것 처럼 윈도우 폴더에서 wsl2의 내부 폴더로 옮긴 것이다. 이렇게 하면 해결될 것 같았다.

    2-5-1 아래를 보면 wsl2 ubuntu 네이티브 환경이다. 반응이 너무 좋다. 근데 역시 파일 수정시에는 에러가 발생한다.

    2-5-2 아래의 경우는 native 환경이기 때문에 .bat는 동작하지 않는다. 당연히 ./run.sh로 실행한다. -L 옵션은 필요없다.

 

 

  2-5 이런 식으로 개발하다 보면 황당한 경우가 생긴다. 서비스 모두 종료하고 VS Code도 종료했는데 서비스는 살아있다. 

    2-5-1 아래는 보면 위에는 cmd 환경에서 21024 프로세스가 3050포트를 여전히 사용하고 있고 아래의 리눅스 네이티브로 20266번 프로세스로 서비스를 계속하고 있다. 황당한 경우다. 이럴 경우 리눅스를 kill하면 둘다 죽는다.

 

 

 

3. 결론은 원상복구이다. 그냥 윈도우 환경에서 프로세스 하나만 띄어서 윈도우 포트에 매핑 시키는 방식이다. 윈도우에서 개발하면 그냥 윈도우에서 개발하는 것이 최상이다. wsl2 환경의 편의성과 반응이 너무 좋지만 어쩔 수 없는 선택이다.

  3-1 아래를 보면 wsl 같은 거 포기하고 git bash로 그냥 ./run.bat를 실행한다. 윈도우 네이티브라서 그냥 동작하고 -L도 당연 필요 없다. 그리고 소스 수정 후 저장하면 깔끔하게 동작한다.

 

 

4. 결론은 윈도우는 그냥 윈도우 폴더에서 개발하고 한번 wsl2 폴더로 복사해서 이상하게 동작하면 깨끗하게 포기하는 게 낫다.

  4-1 delay 옵션이든 package.json으로 nodemon을 설정하든 어떻게든 동작하지 않는다. 

728x90

'Languages' 카테고리의 다른 글

JavaScript : 'this' keyword  (0) 2022.04.27
Kotlin : equals, hashCode, ==, ===  (0) 2021.09.19
Golang : New  (0) 2021.06.20
Golang : Slice value receiver vs pointer receiver  (0) 2021.06.19
DOM : Vanillla  (0) 2021.05.01
댓글