====== Windows 개발 환경 구축 ======
* [[windows:10|Windows 10]] 기준. 이 이후부터 [[:docker|Docker]], [[windows:wsl|Windows Subsystem For Linux]] 등이 지원됨.
* [[windows:wsl2|WSL 2]]
* [[windows:windows_terminal|Windows Terminal]]
* Java 개발은 운영체제를 별로 타지 않으므로 Windows 를 사용한다고 해서 크게 불편하지는 않다.
* [[https://docs.microsoft.com/ko-kr/windows/dev-environment/overview|Windows 10에서 개발 환경 설정 | Microsoft Docs]]
===== 기본 =====
* 절대로 한글 혹은 유니코드 사용자명을 만들지 않는다. 각종 문제를 일으킨다. **사용자명과 사용자 HOME 폴더(''C:\Users\XXX'') 영문과 숫자, 점 정도로만 이뤄지게 구성한다.**
* 특히 Ahnlab Safe Transaction, nProtect 등 각종 민원이나 은행 업무를 위한 자동 설치 프로그램들을 깔지 말고 별도 가상 머신으로 관리한다.
* Ahnlab Safe Transaction, nProtect 등은 해당 서비스 사이트 접속 여부와 관련없이 백그라운드로 항상 떠 있으면서 PC 안정성을 해치는 것으로 보인다.
* 이 원인이 [[:docker|Docker]]나 [[windows:wsl|Windows Subsystem For Linux]]과의 충돌일 수도 있다. 어쨌든 심하게 시스템을 다운시킨다.
* 필요할경우 [[http://teus.me/category/IT/%EC%9E%90%EC%9E%91%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8|구라제거기]]에서 최신 버전을 받아서 실행하여 해당 보안프로그램들을 삭제해버린다.
* 각종 애플리케이션을 시작 프로그램으로 지정하려면 ''Win-R'' 하고 ''shell:startup'' 명령을 실행하면 나오는 폴더에 애플리케이션의 바로가기를 만들어 넣으면 된다.
===== 소프트웨어 패키지 관리 =====
* [[windows:winget|winget]] MS 공식 소프트웨어 패키지 관리
* [[windows:chocolatey|Chocolatey Gallery]] 를 이용하여 Linux 의 ''apt''나 ''yum'', MacOS X의 Homebrew 처럼 애플리케이션을 설치할 수 있다.
* Chocolatey는 애플리케이션을 전역 설치 한다. 따라서 Admin 권한으로 애플리케이션을 설치해야 한다.
* ''sudo'' 혹은 ''elevate'' 를 이용해 이 문제를 편하게 할 수 있다. 아래에 기술.
* [[windows:scoop|Scoop]]
* scoop은 기본적으로 현재 로그인 사용자용으로 애플리케이션을 설치한다.
* 애플리케이션 수가 적은 편으로 보이는데 리눅스에서 사용하던 명령어들을 많이 가지고 있다.
===== PowerShell sudo =====
* Chocolatey 이용시에 관리자권한으로 콘솔을 열어야만하는게 매우 불편하다.
* [[windows:sudo|Windows sudo]] 에서 ''sudo'' 명령 혹은 ''elevate'' 를 받아서 깔고 그 뒤부터 관리자 권한이 필요한 콘솔 명령은 ''sudo choco install xxx'' 혹은 ''el choco install xxx'' 처럼 실행하면 된다.
* ''sudo''는 권한 상승 요청 창이 한 번 뜬다. ''elevate''는 안 뜬다.
===== ssh client =====
* [[windows:ssh:putty|Putty]] 를 설치하고
* ''pageant''로 Key 를 등록해준다. ''pageant''는 이후 Git for Windows, 그리고 WSL Linux에서도 ssh-agent 로 사용할 수 있다.
===== WSL Ubuntu Linux 설치 / SSH Server 설치 =====
* [[windows:wsl|Windows Subsystem For Linux]] 로 Ubuntu 리눅스를 설치했다.
* 성능 저하가 심각하다.
* 바이러스 백신 혹은 Windows Defender에서 ''%USERPROFILE%\AppData\Local\Packages'' 폴더에서 '' CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc'' 처럼 생긴 폴더를 제외 처리해주면 약간 빨라진다.
* ''oh-my-zsh'', ''oh-my-bash''등은 거의 사용하기 힘들 정도로 느리게 작동한다. 그래서 프롬프트는 간단히 [[:git|git]]에 있는 color prompt 정도만 설정했더니 쾌적하게 사용가능했다.
* [[windows:wsl:openssh_server|WSL Ubuntu Linux OpenSSH Server]] 에서 SSH 서버 설정도 하였다.
* [[windows:wsl:weasel_pageant|Weasel Pageant - WSL Linux ssh-ageant to putty pageant]] 를 이용하여 ''pageant''를 ssh-agent 로 지정해주면 ''pageant''에만 키를 등록해도 WSL Linux 에서 ''ssh''명령이 ''pageant''의 key를 사용할 수 있게 된다.
* [[:gradle|Gradle]]과 [[java:maven|Maven]]의 repository 디렉토리를 윈도우용 과 동일하게 맞춰준다. -> 디스크 용량 아끼기
* WSL Linux 상에서는 윈도우 애플리케이션도 쉽게 실행할 수 있다. 따라서 git 의 difftool 도 윈도우용 diff 애플리케이션으로 지정가능하다. [[http://meldmerge.org/|Meld]], [[https://www.sep.com/sep-blog/2017/06/07/20170607wsl-git-and-beyond-compare/|WSL, git, and Beyond Compare - SEP Blog]]
* **WSL Linux가 Windows의 파일을 읽고/쓸 수는 있으나 Windows의 애플리케이션이 Linux 측의 파일에 쓰기를 해서는 안된다**
===== Console =====
* [[windows:console:cmder|Cmder]] 와 [[windows:console:conemu|ConEmu Windows Terminal Emulator]]를 둘 다 써봤는데(Cmder는 어차피 ConEmu 확장이다), Cmder는 느리고 버그도 많았다. **ConEmu** 추천.
* ''Quake'' 모드에 ''Win+~'' 키를 할당해서 사용한다.
* PowerShell과 Wsl Bash 모두 한 창에서 열도록 했다. tasks 파일을 만들어 지정해주면 한 번에 두개의 콘솔이 열린다. ''%ConEmuBaseDirShort%'' 환경변수로 미리 ''ConEmu''의 설치 폴더 지정해 뒀음.
>powershell.exe
set "PATH=%ConEmuBaseDirShort%\wsl;%PATH%" & %ConEmuBaseDirShort%\conemu-cyg-64.exe --wsl -C~ -cur_console:pm:/mnt
* ''bash'' console의 경우에는 그냥 사용하면 온갖 버그가 창궐한다. ConEmu가 제공해주는 ''wslbridge''를 사용해야 한다. [[windows:console:conemu|ConEmu Windows Terminal Emulator]] 참조
===== Git =====
* [[git:windows|Git for Windows]] 를 참조.
* 기존 처럼 windows 용 git을 설치해도 되고 WSL Linux의 git을 사용할 수도 있다. https://github.com/andy-5/wslgit
* ''plink.exe''를 ''GIT_SSH'' 환경 변수로 설정해주면 ''pageant''를 ssh-ageant로 사용한다.
* Powershell, CMD 콘솔에서 한글을 올바로 보려면 ''LC_ALL'' 환경변수를 지정해야 한다.
set LC_ALL="C.UTF-8"
===== Docker / Vagrant / VirtualBox 등 설치 =====
* [[:docker|docker]], [[:virtualbox|VirtualBox]], [[:vagrant|Vagrant]] 로 각종 서버류 설치.
* Windows 10 부터는 Docker가 native로 작동해서 너무 좋다.
===== 한영 전환을 Shif-Space로 하기 =====
* jwShiftSpaceKey([[:windows|Windows]]참조)를 사용하연 기본 ''한/영''키 매핑에 Linux 사용자에게 익숙한 ''Shift-Space'' 키를 한영 전환키로 추가해준다.
===== ClipBoard 관리 =====
* Linux에서 ''clipit'' 같은 프로그램으로 다중 클립보드를 사용했었는데, 윈도우의 경우에도 [[https://sourceforge.net/projects/ditto-cp/|Ditto Clipboard Manager]] 같은 것이 있어서 사용가능하다.
* 복사한 것의 히스토리를 유지해서 기존에 복사했던 문자열을 다시 붙여넣기 할 수 있다.
===== PowerShell =====
* 아직 [[windows:powershell|Windows Powershell]]에 익숙치 않지만 어느정도는 꾸며두었다.
* [[windows:powershell:gallery|PowerShell Gallary]] 를 통해 원하는 확장을 쉽게 설치할 수 있다.
* [[https://github.com/JanDeDobbeleer/oh-my-posh|Oh-My-Posh]]를 설치하고, ''tehrob'' 테마 사용중.
* 또한 ''ls''도 컬러로 지정.
===== 코딩용 글꼴 =====
* 코딩용 글꼴은 고맙게도 네이버에서 만들어서 무료로 제공해주고 있는 [[https://github.com/naver/d2codingfont|D2Coding 글꼴]]을 지정했다.
* ''D2Coding ligature''를 지정하고 [[:intellij_idea|IntelliJ IDEA]] 에서 **Ligature**를 활성화 하면 코딩에서 자주 사용하는 특수 기호등이 예쁘게 나온다.
{{https://user-images.githubusercontent.com/6773678/33355628-997fe52e-d4fb-11e7-9d1a-64c3b2d42de8.png}}
===== Windows 10 Desktop =====
* Windows 10 에서 다중 데스크탑을 지원하는데 아직 매우 불편하다. 게다가 현재 보고 있는 데스크탑이 몇번인지도 쉽게 알기 어렵다.
* [[https://github.com/m0ngr31/VirtualDesktopManager|VirtualDesktopManager]]를 깔면 현재 보고 있는 데스크탑 번호를 태스크바에서 보여준다. - 단축키 충돌, 기능부족으로 폐기.
* [[https://github.com/sdias/win-10-virtual-desktop-enhancer|Virtual Desktop Enhancer]]가 더 낫다.
===== 프로그래밍 언어 설치 =====
* Java 는 [[java:jabba|Jabba]] 와, 직접 설치로 관리
* [[https://github.com/coreybutler/nvm-windows|nvm windows]] 로 [[:node.js|node.js]] 설치
* Gradle의 경우 Windows와 WSL Linux 어느 한쪽에 daemon이 떠있으면 다른쪽에 오동작한다. 그래서 daemon을 아예 꺼버렸다. ''~/gradle.properities''
===== 기타 개발 도구 =====
* https://devtoys.app/