코딩, 개발에 대한 기록 저장소

git remote branch 삭제 및 상태 업데이트

remote branch 삭제

# git push <원격 저장소 이름> -d <원격 브랜치 이름>
$ git push origin -d test_branch

remote branch 상태 업데이트

  • A 에서 remote branch 를 삭제했지만 B 에서는 remote branch 가 계속 있는 것처럼 보이는 경우가 있음
  • 이럴땐 아래 명령으로 remote branch 정보를 리셋 혹은 갱신 해야 함
# git remote prune <원격 저장소 이름>
$ git remote prune origin

local branch 삭제

# git branch -D <로컬 브랜치 이름>
$ git branch -D test_branch

요점

  • remote branch 삭제는 git push
  • local branch 삭제는 -D


nvm default 변경

nvm 전체 버전 확인

$ nvm ls-remote
		v0.1.14
        v0.1.15
        v0.1.16
        v0.1.17
        ...
        v22.9.0
       v22.10.0
       v22.11.0   (Latest LTS: Jod)
        v23.0.0
        v23.1.0
        v23.2.0
        v23.3.0

원하는 버전 설치

$ nvm install v20.18.1
Downloading and installing node v20.18.1...
Downloading https://nodejs.org/dist/v20.18.1/node-v20.18.1-darwin-arm64.tar.xz...
#################################################################################################################################################################################################################################################### 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v20.18.1 (npm v10.8.2)

설치된 버전 확인

$ nvm ls
       v18.16.1
->     v20.18.1
default -> 18.16 (-> v18.16.1)
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v20.18.1) (default)
stable -> 20.18 (-> v20.18.1) (default)
lts/* -> lts/jod (-> N/A)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.24.1 (-> N/A)
lts/erbium -> v12.22.12 (-> N/A)
lts/fermium -> v14.21.3 (-> N/A)
lts/gallium -> v16.20.2 (-> N/A)
lts/hydrogen -> v18.20.5 (-> N/A)
lts/iron -> v20.18.1
lts/jod -> v22.11.0 (-> N/A)

nvm default 변경

$ nvm alias default 20.18.1
default -> 20.18.1 (-> v20.18.1)


Docker Compose에서 환경변수 적용 우선 순위

Docker Compose에서 환경변수 적용 우선 순위

Docker 공식 문서에 따르면 그 우선순위는 다음과 같음

  1. Compose 파일에 입력한 값
  2. 쉘 환경변수에 등록한 값
  3. 환경변수 파일에 입력된 값(.env 등)
  4. Dockerfile 에 입력한 값


m1에서 nvm 설치

Homebrew 가 미리 설치되어 있어야 함

brew 를 이용해 nvm 을 설치한다.

$ brew install nvm

.....

You should create NVM's working directory if it doesn't exist:
  mkdir ~/.nvm

Add the following to your shell profile e.g. ~/.profile or ~/.zshrc:
  export NVM_DIR="$HOME/.nvm"
  [ -s "/opt/homebrew/opt/nvm/nvm.sh" ] && \. "/opt/homebrew/opt/nvm/nvm.sh"  # This loads nvm
  [ -s "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm" ] && \. "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm"  # This loads nvm bash_completion

You can set $NVM_DIR to any location, but leaving it unchanged from
/opt/homebrew/Cellar/nvm/0.39.7 will destroy any nvm-installed Node installations
upon upgrade/reinstall.

.....

설치가 완료하고 터미널에 안내에 따라 설정한다.

디렉토리 생성

$ mkdir ~/.nvm

.zshrc 파일 수정

$ vi ~/.zshrc

아래 문장을 아래에 붙여넣은 후 저장
export NVM_DIR="$HOME/.nvm"
  [ -s "/opt/homebrew/opt/nvm/nvm.sh" ] && \. "/opt/homebrew/opt/nvm/nvm.sh"  # This loads nvm
  [ -s "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm" ] && \. "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm"  # This loads nvm bash_completion

변경사항 적용

$ source ~/.zshrc

설치 확인

$ nvm -v

node.js 설치

$ nvm install 18.16

또는

$ nvm install --lts

설치된 node.js 리스트 확인 및 특정 버전 선택

$ nvm ls
$ nvm use <version>


SequenceField 와 ObjectIdField 의 성능 차이

SequenceField 와 ObjectIdField 의 성능 차이

SequenceField와 ObjectIdField 간에는 몇 가지 성능 차이가 있을 수 있음
성능 비교는 사용 사례에 따라 다를 수 있으며, 어떤 측면에서 성능이 더 중요한지에 따라 선택해야함

Insert 성능:

  • SequenceField: 샤딩되지 않은 환경에서는 쓰기 연산이 일반적으로 빠름. 그러나 findOneAndUpdate 연산을 사용하여 일련번호를 증가시키는 추가적인 작업이 필요할 수 있음
  • ObjectIdField: 기본적으로 샤딩에 대한 자연스러운 키로 사용되기 때문에 쓰기 성능이 우수. ObjectId는 무작위로 생성되며, 이는 여러 서버에서의 동시 쓰기 작업을 허용

일련번호 유지 및 캐싱:

  • SequenceField: 캐싱을 사용하여 일련번호를 최적화하며, 중복을 방지하기 위해 findOneAndUpdate를 사용
  • ObjectIdField: MongoDB는 ObjectId를 자동으로 생성하고 유지하며, 중복을 방지하기 위해 고유성을 보장

검색 및 쿼리 성능:

  • SequenceField: 증가하는 일련번호를 사용하면 시간순으로 정렬된 인덱스를 이용해 쿼리 성능이 향상될 수 있음
  • ObjectIdField: ObjectId는 내부적으로 시간 정보가 포함되어 있어, 시간 기반의 쿼리에 적합

고유 식별자 유형:

  • SequenceField: 사용자 정의 가능한 일련번호를 사용하므로 특별한 의미나 시간 정보가 없을 수 있음
  • ObjectIdField: ObjectId는 생성 시간과 머신 ID 등의 정보를 포함하므로 해당 정보를 활용할 수 있음

결론

성능 측면에서 ObjectIdField는 일반적으로 빠르게 동작하며, 더 많은 내장 기능을 제공
그러나 사용 사례에 따라 고유한 일련번호가 필요하거나 특별한 의미가 있는 경우 SequenceField를 사용



[WSL] SSH 패스워드없이 로그인하기

패스워드 없이 ssh 접속하는 방법

클라이언트 서버에서 ssh key 생성

디폴트 값으로 엔터 3회 처리

$ ~/.ssh$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/var/lib/test1/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
...

~/.ssh에 id_dsa와 id_dsa.pub 파일이 생성되었는지 확인

원격지 서버에 id_rsa.pub 복사

# ssh-copy-id 원격지id@원격지IP

$ ~/.ssh$ ssh-copy-id test2@192.168.0.200

접속이 잘 안 될 경우

  • 원격지 서버의 .ssh 디렉터리와 authorized_keys 파일의 권한을 확인하거나 .ssh 파일을 삭제하여 초기화
  • 클라이언트 서버의 ~/.ssh/known_hosts에 등록된 정보를 초기화