파이썬을 이용한 간단한 api 프록시 서버를 만들어보기로 했다. 파이썬은 데이터를 다룰 때 아주 간단히 써본 경험이 있지만, 누군가 만들어놓은 문서를 따라 떠듬떠듬 환경설정을 마치고 사용해보기만 했다. 이번에 백엔드 서버를 처음부터 구성하려 보니 가상환경이라는 개념이 보였다. 그동안 내가 사용하던 패키지 매니저와는 다른 건가? 궁금했다. 환경설정부터 제대로 알아놓으면 뒤가 편할 것 같아 정리해보았다.

 


 

🚀 간단 요약 미리보기

도구 역할
npm, yarn, pnpm 패키지(라이브러리) 및 의존성 관리
venv, virtualenv, conda Python 가상환경 관리
nvm, pyenv, rbenv 특정 언어의 버전 관리 (Node.js, Python, Ruby 등)

 

 

 

💚 가상환경 VS 패키지 관리 개념차이

⏺️ 공통점

- 각 프로젝트별 독립적인 환경 유지

- 프로젝트 간 패키지 충돌 방지

- 운영 환경과 개발 환경의 일관성 유지

- 버전 관리 및 배포 최적화

 

1️⃣ 가상환경

- 프로젝트마다 완전히 독립된 환경을 생성

- 특정 프로젝트의 패키지가 다른 프로젝트에 영향을 주지 않음

- python, ruby, node.js(nvm) 등에서 사용되는 개념

- python의 경우, 해당 언어의 실행 환경(interpreter)까지 환경별로 관리 가능

 

2️⃣ 패키지 관리

- 프로젝트마다 필요한 패키지를 격리해서 설치

- 완전히 독립적인 환경을 만드는 것은 아님

- 의존성 충돌을 방지하고, 같은 패키지를 여러 프로젝트에서 중복 설치하는 문제를 해결

- python의 venv처럼 실행 환경을 격리하는 기능은 없음(시스템 전역 환경을 따름)

 

 

💚 패키지 매니저 - npm, yarn, pnpm 등

1️⃣ node_modules 기반 프로젝트별 패키지 격리

  • 각 프로젝트마다 node_modules 폴더를 생성하여 패키지를 저장
  • 패키지들은 해당 프로젝트에서만 사용 가능
  • venv와 다르게 Node.js 실행 환경(버전)은 공유됨
 
mkdir my-project && cd my-project
npm init -y
npm install express

➡ node_modules/express는 my-project에서만 사용됨.

 

 

2️⃣ npm install -g vs npm install (글로벌 vs 로컬)

npm install -g package 시스템 전체 (/usr/local/lib/node_modules 등) 전역 설치 (가상환경 X)
npm install package 프로젝트 node_modules 폴더 특정 프로젝트에만 적용 (venv와 유사)

📌 npm install -g(전역 설치)를 하면 다른 프로젝트에서도 같은 패키지를 공유하므로 가상환경처럼 격리되지 않음.
📌 반면, npm install(로컬 설치)을 하면 해당 프로젝트에서만 사용 가능하므로 가상환경과 유사한 효과를 낼 수 있음.

 

 

3️⃣ npm, yarn, pnpm의 lock 파일

npm package-lock.json 의존성 버전 고정
yarn yarn.lock 의존성 버전 고정 및 최적화
pnpm pnpm-lock.yaml 공유 패키지를 최적화하고 빠르게 설치

📌 Lock 파일이 있다면 같은 패키지 버전을 유지할 수 있으므로, 운영 환경과 개발 환경을 일치시키는 데 도움됨.

 

 

 

🩵 언어별 가상환경과 유사한 개념

언어 "가상환경"
개념 존재
방법
Python ✅ 있음 venv, virtualenv, conda
Node.js (JavaScript/TypeScript) ⚠️ 제한적 nvm (Node.js 버전 관리), yarn berry (PnP)
Java (Spring Boot 등) ❌ 없음 프로젝트마다 독립적인 Maven, Gradle 설정
Ruby ✅ 있음 rbenv, RVM (Ruby 버전 관리), Bundler (Gem 관리)
Go ⚠️ 제한적 go mod (의존성 관리)
PHP ❌ 없음 Composer (패키지 관리)
Rust ❌ 없음 cargo (패키지 및 빌드 관리)
.NET (C# 등) ⚠️ 제한적 .NET SDK (글로벌/로컬 설정 가능)

 

 

 

 

맥북에서 Sudo 비밀번호가 맞지 않는 경우 해결방법

혹시라도 나랑 같은 고생을 하는 분이 있을까봐 기록하는 디버깅 일기

 

 

 

 

오랜만에 근처 카페에서 재택을 위해 집에서 쓰던 맥북프로를 집어들었다.

한참 맥북을 안쓰는 동안 개발환경이 달라진 게 많이 있었고, 하나하나 세팅을 시작함.

환경파일들을 고치기 위해 sudo 명령어를 입력했는데 이게 왠걸.. 비밀번호가 안맞는다?!

 

 

아무리 찾아봐도 맥 터미널에서 sudo 명령어를 쓸 때는

맥 계정 로그인할 때 쓰는 비밀번호를 입력하는 게 맞는데..

정말 한참한참동안이나 고생하다가 드디어 원인을 알아냈다.

알고보니 내가 맥북 계정에 비밀번호를 설정해놓지 않은 상태였다

회사것과 내것까지 해서 아이맥, 맥북프로m1, 맥북프로m3 등등 여러 맥북을 쓰고 있다보니

당연히 전부 비밀번호가 설정되어 있다고 착각하고 있었던 것이다.

 

Sorry, try again.
Password:
sudo: 3 incorrect password attempts

 

비밀번호가 없으면 없다고 알려주지 incorrect password 라고만 나오니

존재하는 비밀번호를 잃어버린 것처럼 착각하고 자꾸 헛수고만 하고 있었다.

기왕 이렇게 된거 내가 알아봤던 정보들 정리하고 기록해보겠다.

 

 

 

터미널에서 cli 명령어로 root 비밀번호 설정하는 방법

passwd root

 

현재 로그인중인 맥 계정이 sudo 권한이 있는지 알아보는 방법

// 아래 명령어 결과 중에 admin 이 있으면 sudo 권한 있음
groups $(whoami)

 

 

 

맥북 계정 비밀번호를 잊어버렸을 때

 

방법 1: Apple ID로 비밀번호 재설정

  1. 로그인 화면에서 "비밀번호를 잊으셨나요?" 클릭.
  2. Apple ID를 사용해 비밀번호를 재설정.

 

방법 2: 복구 모드에서 비밀번호 재설정

  1. Mac을 재시작하고, 부팅 중에 Command (⌘) + R 키를 누릅니다.
  2. 복구 모드에 들어가면 상단 메뉴에서 유틸리티 > 터미널을 선택.
  3. 명령어를 입력: resetpassword
  4. 나타나는 화면에서 비밀번호를 재설정.

 

추가 권한 문제가 있을 경우

 

맥 계정 비밀번호가 sudo에서 자꾸 먹히지 않는 경우,

macOS에서 /etc/sudoers 파일이나 사용자 권한 설정이 손상되었을 가능성도 있다.

 

복구 모드에서 관리자 복구

  1. Mac을 재시작하고, Command (⌘) + S를 눌러 단일 사용자 모드로 부팅.
  2. 다음 명령어를 입력하여 파일 시스템을 읽기-쓰기 모드로 마운트: /sbin/mount -uw /
  3. 현재 사용자에게 관리자 권한 부여:<username>은 현재 로그인한 사용자 이름으로 대체.
    : dscl . -append /Groups/admin GroupMembership <username>
  4. Mac을 재부팅: reboot

 

맥북 계정에 비밀번호 세팅은 한 상태인지 확인

 

확인방법:

맥 '잠자기' 클릭하고 다시 로그인해보기..

 

비밀번호 변경방법:

시스템설정> 사용자 및 그룹> ( i ) 아이콘> 암호 [변경]> 기존 비밀번호가 없으면 기존 비밀번호 입력란 비워두고 변경할 비밀번호만 입력

나는야 허접한쪼렙 백엔드 서버 개발자

 

하지만 어드민 페이지를 관리하면서 react를 어느정도 익혔지

 

그리고 정신을 차려보니 nextjs로 백&프론트를 만들어야 하는 운명이 되었지

 

 

이번에는 내가 from scratch로 처음부터 모든걸 만들어야 한다

 

그래서 노마드코더 무료 강의를 이용해 react / nextjs 기초를 듣고 있는데, 이야 정말 좋은 명강의이다

 

이렇게 쉽고 핵심적으로 잘 설명한 강의를 무료로 제공하고 있다니.. 거의 재능기부 수준이다

 

 

next.js는 프레임워크이기 때문에 컨벤션을 잘 지켜서 개발하는 게 중요한데,

 

차근차근 원리와 함께 순서대로 알려주니 머릿속에 잘 구조적으로 지식이 쌓이고 있다

 

 

예전에는 들어도 머릿속에 잘 안 들어왔는데, 역시 사람은 필요하면 태세전환이 된다

 

한마디 한마디 쏙쏙 와닿는 명강의임을 이제 알았다 심지어 재밌다!

 

어서 다 듣구 다른 것들도 틈날 때마다 하나씩 들어보고 싶다 :D

+ Recent posts