0609
백준: 코드마스터, 슬라이딩 퍼즐 마스터, 보드게임 마스터

와 근데 이거 이러면
이제 친구한테 오른쪽 왼쪽으로만 이동 가능한 바둑 게임할래?
하고 무조건 x, y가 같은 값인 좌표에서 두번째로 게임하면 이기는거 아님?
근데 조건이 너무많아서 친구가 의심하겠죠
여러명이서 해도 똑같나 하고 생각해봤는데
이러면 xor이 안 먹을듯요
신기하다
RealWorld
- pages 나머지
- lib 훝어보기 -> 포스팅은 내일하기
- 코드 리팩토링은 수요일(06.11)까지 하고
ux 개선은 담주 월까지 하고
남은 시간동안은 마이그레이션 생각해봐야겠다..
ux에서 시간이 좀 더 걸리려나
일단 해봐욤 aja
패키지 관리
매번 프로젝트별로 nvm use (버전)
을 사용하며
노드 버전을 다르게 설정해줬는데
유림님께서 다른 자동화 매니저를 써보는건 어떻겠냐고 알려주셨다.
사실 매번 nvm use를 치는게 귀찮았는데...
딱 말씀해주셔서 이번 기회에 다양한 매니저들을 알아봤다계속 매니저 매니저 하니까 퀸가비가 생각나요
근데 일단 가장 먼저 들었던 생각은,
nvm으로 자동화하는 법은 없을까?
언뜻 nvm 설치할 때 nvm use만 치면 자동화되게 할 수 있다고 들었던 것 같은데..
구글에 nvm auto switch
라고 검색해보니 다 mac 기준으로 적혀있어서 후엥하다가
코드를 보니 powershell 프로필에 스크립트를 넣고
프로젝트에 있는 .nvmrc 파일을 읽어서 폴더 변경이 있을 때마다
해당 스크립트를 실행하도록 해주면 될 것 같았다.
근데 이러면 속도가 느려진다고 해서..
나는 패키지를 그렇게 많이 사용하지 않으니 괜찮을 것 같지만
그래도 속도 느린건 못 참지
그래서 다른 패키지 매니저들에 대해서 찾아봤다
일단 패키지 매니저를 설치하기 전,
윈도우에서 쉽게 프로그램을 설치하는 방법은 다음과 같다.
참고로 여기서 말하는 "쉽게"라는건,
환경변수를 다 자기가 알아서 설정해준다는 것....
winget
winget은 맥의 brew install
,
우분투의 apt install
처럼
Windows에서도 winget install 프로그램명
하나로
프로그램을 설치할 수 있게 해주는 Microsoft의 공식 도구다.
난 winget이 내 컴에 깔려있는지도 몰랐다. 어처구니가 없음
이렇게 쉽게 설치 할 수 있었다니..
환경변수 설정을 따로 안해도 된다니.....
처음 알았다....
패키지 관리자 종류
- NVM (Node Version Manager) >> 내가 쓰던거
- 가장 오래되고 널리 사용되는 Node.js 버전 관리 도구
- 배치 스크립트 기반으로 작동해서 상대적으로 느림
- FNM (Fast Node Manager)
- rust로 작성된 Node.js 버전 관리자로 nvm보다 빠르다고함
- nvm과 사용법이 거의 동일해서 마이그레이션이 쉬움
- 자동으로
.nvmrc
파일을 읽어서 해당 Node 버전 실행해줌
- Volta
- Node.js뿐만 아니라
npm
,yarn
,pnpm
같은 도구들도 한 번에 관리해줌 "toolchain"
개념이라 프로젝트별로 어떤 버전을 쓸지package.json
에 명시하면 알아서 적용됨- shim 기반이 아니라 bin 디렉토리만 PATH에 추가해서 셸 시작 시간이 없음
- Node.js뿐만 아니라
- mise
- Node.js뿐만 아니라 Python, Go, Rust 등 여러 언어 지원
- 버전 관리 + 환경 변수 + 태스크 실행을 하나의 도구로 처리
- shim에 의존하지 않고 셸 시작 시 mise activate 명령어를 실행
왜 nvm이 젤 느리다고 할까
nvm은 배치 스크립트로 만들어져서node -v
같은 명령어를 칠 때마다 배치파일이 실행되고,
현재 사용 중인 Node 버전을 확인하고,
그 버전의 실제 경로를 찾아서 거기서 진짜 node.exe를 실행하는 과정을 거친다.
반면 FNM이나 다른 도구들은 Rust나 Go 같은 빠른 언어로 만들어져서
이런 과정이 훨씬 빠르다.
마치 한글 타자기와 컴퓨터 키보드의 차이 같은 느낌이라고 한다.
배치 스크립트는 코드를 한 줄씩 읽어서 실행하는데
Rust나 Go는 컴파일 언어기 때문에
이미 cpu가 바로 이해할 수 있는 형태로 되어있어서
실행속도가 빠르다는거다.
그리고 실행속도 뿐만 아니라,
오버헤드 없이 시스템 리소스도 적게 먹는다.
그래서 뭘 사용하는게 좋을까
특징들을 보고는 volta는 그냥 알아서 해주니까 volta가 편하지 않을까 생각했다.
근데 만약 백엔드가 js 환경이 아니고 python이라면?
물론 나는 지금 docker로 python과 postgress를 사용하고 있지만..
local로 옮긴다면? python 버전도 일일이 다 관리해줘야 된다.
그리고 이 글을 읽어보니 윈도우에선 동작하지 않는다고 적혀있는데
작년 게시글이라 그런가.
현재는 공홈의 faq를 보니 어떤 분이 powershell도 사용할 수 있게 만들어주셔서
윈도우 파워셸에서도 사용할 수 있다고 한다.
그래서 나온 결론
js뿐만 아니라 여러 언어에서 쓸 수 있는 mise를 먼저 써보자!!
설치 방법은 공홈에 더 잘 나와있지만 간단히 적어보자면
- winget으로 mise를 설치한 다음 파워셸에서 mise를 active해준다.
근데 이게 잘 안돼서 환경변수에 들어가서 path의 제일 상위 항목으로 직접 빼줬다. - 아래 명령어로 전역(기본값)은 22를 쓰고
mise use --global node@22
- 프로젝트 별로 노드 버전이 다르면 아래와 같이 사용해줬다.
mise use node@14
이러면 이제 그냥 use {언어}@version
만 적으면 알아서 그 버전까지 다운로드해주고,
프로젝트별로 mise.toml 파일을 생성해서 거기서 버전을 관리해준다.
- 참고
.toml
: json이나 yaml보다 단순하고,
주석도 쓸 수 있어서 설정 파일에 널리 활용됨.
용어 정리
- shim: 어떤 API나 명령의 인터페이스를 흉내 내는 작은 중간 레이어.
한 마디로 가짜 실행파일 같은 것.
node 명령어를 치면 진짜 node.exe가 아닌 shim 파일이 먼저 실행되고,
이 shim이 "어? 지금 어떤 버전 써야 하지?" 하고 확인한 다음
실제 node.exe로 명령어를 전달해줌 - 셸: 명령어를 입력받아서 실행해주는 프로그램
- bin: Binary(실행파일)의 줄임말로, 실행 가능한 프로그램들이 모여있는 폴더
맺음말

백준채점무한대기에빠짐
11분 이상 경과
...
뭔 일 있나...
내일 이거 풀어야지
https://www.acmicpc.net/problem/33886
mise를 검색해보니 처음엔 프랑스어만 냅다 떠서 뭐지하다가 읽어봤는데
프랑스어 mise‑en‑place
에서 온 말이라고 한다.
요리할 때 모든 재료를 미리 준비해둔다는 뜻을 갖고 있다고...
아마 매니저 이름도 개발 환경을 사전에 세팅한다는 의미로
여기서 유래한 말인 것 같다.
라따뚜이가 생각난다 ㅋㅋ
아니 giscus 매핑 값을 pathname으로 설정해놔서
디렉토리 구조를 바꾸면 원래 있던 댓글이 다 사라졌따.
사라진줄도 몰랐다 지금 알았다 아 바보
그렇다고 지금 매핑을 title로 바꾸면
그 전에 있던 댓글이 진짜 다 사라지길래
디스커션 제목의 url을 하나하나 수정해줬다 ㅋㅠㅠ
유림님께서 남겨주셧던.. 소중한 댓글을... 이미지로라도 남깁니다...

유림님 댓글 남겨주시는거 넘 감사합니다...
좋은 정보들도 알려주셔서 감사합니다
이번주도 화이팅하십쇼!!!