zsh: command not found : nest 에러
- nest g mo 로 모듈을 생성하려고 하니 해당 에러가 발생했다.
- 일단 @nestjs/cli가 설치되어 있는지 확인한다 → O
- @nestjs/cli 가 global로 설치되어 있는지 확인한다 → X
- package.json 파일에서 보니 @nestjs/cli가 devDependencies에 설치되어 있었다.
- 프로젝트의 devDependencies에 설치했다면 프로젝트 내에서만 사용할 수 있어서 커맨드 라인에서 nest 명령을 실행하려면 npx를 사용해서 실행해야 한다고 한다.
- 이 경우 npx 를 명령어 앞에 붙여서
npx nest go mo module-name
- 혹은
npm install -g @nestjs/cli
로 글로벌하게 설치하면 프로젝트 어디든 nest 명령어를 사용할 수 있게 된다.
- 만약 글로벌로 설치되어 있는데도 해당 에러가 발생한다면 환경변수 PATH 문제이다.
Mac OS에서 Redis 설치
brew install redis # redis 설치 using homebrew
brew services start redis # redis 서버 시작 in background service (기본 포트인 6379에서 대기중)
#redis-server # redis 서버 시작 but manually (백그라운드로 실행되지 않고 터미널 세션에 바인딩...된다고 함)
# redis 작동 확인
redis-cli
set test 'testing...'
get test # key로 조회 # testing... 이 출력됨
brew services stop redis # redis 서버 중지
brew services restart redis # redis 서버 재시작
https://redis.io/docs/install/
-
redis 설정 파일은 /usr/local/etc/redis.conf에 위치한다고 하는데…없었고, 맥 실리콘칩을 사용하는 경우 /opt/homebrew/etc/redis.conf
여기에 있다.
brew services start redis
> redis-cli INFO | grep config_file
로 설정파일 위치 확인 가능
-
설정파일에서 포트 번호 변경이나 패스워드 설정을 할 수 있다.
-
https://redis.io/docs/management/security/
# in redis.conf file...
port 6370
requirepass my-password
-
아니면 위에거 다 집어치우고 클라우드로 Redis를 사용할 수도 있다.
Redis Cloud Console
Redis & Redlock을 사용한 동시성 처리
- ioredis?
- redis client로, redis와 통신을 담당한다.
- redlock?
- Distributed Lock(분산락) 알고리즘을 구현한 라이브러리로, 다수의 인스턴스에서 동시에 같은 자원에 대해 접근을 시도할 때 일관성을 유지하게 해준다.
- 락?
- 락을 사용하는 이유 : 데이터의 일관성 보장과 동시성 제어를 위해서.
- 데이터의 일관성 보장 : 여러 트랜잭션이 같은 데이터를 동시에 변경하려고 할 때, 락을 걸어 이를 제어해서 데이터의 일관성과 무결성을 유지한다.
- 동시성 제어 : 시스템의 효율적인 동작을 위해 여러 클라이언트나 트랜잭션이 데이터에 동시에 접근하는 것을 관리한다.
- 유형
- Shared Lock(공유 락) : 데이터를 read 할 때 사용. 다른 트랜잭션이 동시에 같은 데이터를 읽을 순 있지만 변경은 할 수 없다.
- Exclusive Lock(베타적 락) : 데이터를 update할 때 사용. 베타적 락이 걸린 데이터는 해당 트랜잭션만 접근할 수 있고 다른 트랜잭션들은 접근이 차단된다.
- 작동 방식
- 락 획득 : 트랜잭션이 데이터에 접근하기 전에 적절한 락을 요청하고 획득한다. 만약 필요한 락이 다른 트랜잭션이 이미 사용중이라면, 락이 해제될 때까지 대기한다.
- 락 해제 : 락을 획득한 트랜잭션이 본인의 작업을 마치고 커밋이나 롤백을 수행 후, 획득한 락을 해제한다. 이제 다른 트랜잭션에서 접근할 수 있다.
- Deadlock(데드 락)
- 다수의 트랜잭션이 서로의 락이 해제되는 걸 기다리는 상황. 결국 상호대기 상태에 놓여서 어떤 작업도 진행되지 않게 된다.