tmux(terminal multiplexer)는 여러 터미널 세션을 하나의 창에서 관리할 수 있도록 도와주는 도구입니다. 원격 서버에서 작업하거나 여러 프로세스를 실행해야 할 때 유용합니다.

1. tmux 시작하기

tmux
  • 새로운 tmux 세션을 시작합니다.

2. 세션 관리

세션 생성

tmux new -s mysession
  • mysession이라는 이름으로 새로운 세션을 시작합니다.

실행 중인 세션 목록 확인

tmux list-sessions
  • 현재 실행 중인 tmux 세션 목록을 확인합니다.

세션에 연결하기

tmux attach -t mysession
  • mysession 세션에 다시 연결합니다.

세션에서 분리하기 (백그라운드 실행)

Ctrl + b  →  d
  • 현재 tmux 세션을 백그라운드로 보냅니다.

세션 종료

exit
  • tmux 세션을 종료합니다.

3. 창(Window) 및 창 분할(Pane)

새 창 만들기

Ctrl + b  →  c
  • 새로운 창을 생성합니다.

창 전환

Ctrl + b  →  n  # 다음 창으로 이동
Ctrl + b  →  p  # 이전 창으로 이동
Ctrl + b  →  w  # 창 목록 보기
Ctrl + b  →  숫자  # 특정 창으로 이동 (예: 0, 1, 2...)

창 닫기

Ctrl + b  →  &  
  • 현재 창을 닫습니다.

패널(창 분할) 만들기

Ctrl + b  →  %  # 수직 분할
Ctrl + b  →  "  # 수평 분할

패널 전환

Ctrl + b  →  방향키(←, →, ↑, ↓)

패널 크기 조절

Ctrl + b  →  :resize-pane -U  # 위로 크기 조절
Ctrl + b  →  :resize-pane -D  # 아래로 크기 조절
Ctrl + b  →  :resize-pane -L  # 왼쪽으로 크기 조절
Ctrl + b  →  :resize-pane -R  # 오른쪽으로 크기 조절

패널 닫기

Ctrl + b  →  x

4. 기타 유용한 명령어

설정 다시 불러오기

Ctrl + b  →  :source-file ~/.tmux.conf
  • ~/.tmux.conf 설정 파일을 다시 로드합니다.

tmux 종료

tmux kill-server
  • 모든 tmux 세션을 종료합니다.

tmux를 사용하면 원격 서버에서 작업할 때 SSH 연결이 끊겨도 실행 중인 작업이 유지되는 장점이 있습니다. 기본 단축키만 익혀도 효율적으로 활용할 수 있으니 한 번 사용해 보세요!

Git 브랜치 네이밍은 프로젝트의 워크플로우와 일관성을 유지하는 데 매우 중요합니다. 일반적으로 다음과 같은 패턴을 사용할 수 있습니다.

1. 기본적인 브랜치 네이밍

브랜치 타입네이밍 예시설명

메인 브랜치 main, master 배포 가능한 상태를 유지하는 주요 브랜치
개발 브랜치 develop 새로운 기능을 개발하는 브랜치
핫픽스 hotfix/bugfix-123 긴급 버그 수정을 위한 브랜치
릴리즈 release/v1.2.0 릴리즈 준비용 브랜치

2. 기능 개발 브랜치 (Feature Branch)

 

📌 새로운 기능을 개발할 때 사용합니다.

feature/login-page

feature/add-user-auth

feat/api-integration

feat/payment-system

3. 버그 수정 브랜치 (Bugfix Branch)

 

🐞 버그를 수정할 때 사용합니다.

bugfix/fix-login-error

bugfix/ui-button-issue

fix/crash-on-startup

4. 핫픽스 브랜치 (Hotfix Branch)

 

🔥 긴급한 버그 수정을 진행할 때 사용합니다.

hotfix/security-patch

hotfix/fix-critical-bug

5. 릴리즈 브랜치 (Release Branch)

 

🚀 특정 버전을 배포할 때 사용합니다.

release/v1.0.0

release/v2.3.1

6. 실험적 브랜치 (Experimental Branch)

 

🧪 실험적인 기능을 테스트할 때 사용합니다.

experiment/ai-model-test

exp/new-ui-design

7. 개인 작업 브랜치 (Personal Branch)

 

👤 개인적으로 테스트하거나 실험하는 경우

wip/john-new-ui

wip/refactor-db

john/fix-dashboard

 

💡 wip/ (work in progress)를 붙이면 진행 중인 작업이라는 의미가 있습니다.

8. 기타 브랜치 네이밍 규칙

소문자 사용 (feat/add-login ✅ vs Feat/Add-Login ❌)

하이픈(-) 또는 슬래시(/) 사용 (bugfix/api-error ✅ vs bugfix_api_error ❌)

일관된 접두사 사용 (feat/, bugfix/, hotfix/, release/ 등)

예제 Git 브랜치 전략

git checkout -b feature/user-authentication
git checkout -b bugfix/fix-login-error
git checkout -b hotfix/security-patch
git checkout -b release/v1.2.0

이렇게 네이밍 규칙을 정해두면 협업할 때 훨씬 깔끔하고 가독성이 좋아집니다! 🚀

 

 

TypedDict는 Python에서 딕셔너리의 키와 값의 타입을 명확하게 정의할 수 있도록 해주는 기능입니다. typing.TypedDict를 사용하면, 특정 키가 어떤 타입의 값을 가져야 하는지 지정할 수 있습니다.

1. TypedDict 사용법

 

Python의 일반적인 딕셔너리는 어떤 키든, 어떤 값이든 저장할 수 있습니다. 하지만 TypedDict를 사용하면 정해진 키와 그에 대한 타입을 강제할 수 있습니다.

 

✅ 기본 예제

from typing import TypedDict

class User(TypedDict):
    name: str
    age: int
    email: str

user1: User = {"name": "Tom", "age": 30, "email": "tom@example.com"}  # ✅ 올바른 사용
user2: User = {"name": "Alice", "age": "25", "email": "alice@example.com"}  # ❌ age가 int가 아님

위 코드에서 UserTypedDict로 정의된 딕셔너리입니다.

name: str 타입이어야 함

age: int 타입이어야 함

email: str 타입이어야 함

 

만약 타입이 맞지 않는 값이 들어가면, 타입 체크 도구(예: mypy)가 오류를 감지합니다.

2. 선택적 키 (total=False)

 

기본적으로 TypedDict에 정의된 모든 키는 필수입니다. 하지만 total=False 옵션을 사용하면 일부 키를 선택적으로 만들 수 있습니다.

 

✅ 선택적 키 사용 예제

class User(TypedDict, total=False):
    name: str
    age: int
    email: str

user1: User = {"name": "Tom"}  # ✅ age, email이 없어도 됨
user2: User = {"name": "Alice", "age": 25}  # ✅ 일부 키만 포함 가능

위 코드에서 total=False를 사용했기 때문에, name, age, email 중 일부만 포함해도 됩니다.

3. 부분 선택적 키 (Python 3.11+)

 

Python 3.11부터는 Required[]NotRequired[]를 사용하여 일부 필드만 선택적으로 지정할 수 있습니다.

from typing import TypedDict, Required, NotRequired

class User(TypedDict):
    name: Required[str]  # 필수 키
    age: NotRequired[int]  # 선택적 키
    email: str  # 필수 키

user1: User = {"name": "Tom", "email": "tom@example.com"}  # ✅ age가 없어도 됨
user2: User = {"name": "Alice", "age": 25, "email": "alice@example.com"}  # ✅ 모두 포함 가능

Required[str]: 반드시 포함해야 하는 키

NotRequired[int]: 포함해도 되고, 생략해도 되는 키

4. 중첩 TypedDict 사용

 

TypedDict다른 TypedDict를 값으로 가질 수도 있습니다.

class Address(TypedDict):
    city: str
    zip_code: str

class User(TypedDict):
    name: str
    age: int
    address: Address  # 중첩 TypedDict

user: User = {
    "name": "Tom",
    "age": 30,
    "address": {
        "city": "New York",
        "zip_code": "10001"
    }
}  # ✅ 올바른 사용

User 딕셔너리의 address 필드는 Address 타입을 따라야 합니다.

5. TypedDict vs. 일반 dict

비교 항목일반 dictTypedDict

타입 검사 불가능 가능 (mypy 사용)
키 존재 여부 검사 불가능 가능 (total=False로 조정 가능)
중첩 구조 가능하지만 타입 보장 어려움 가능하고 타입 보장됨
런타임 동작 딕셔너리처럼 작동 딕셔너리처럼 작동

TypedDict는 런타임에서는 일반 딕셔너리와 동일하게 동작하지만, 정적 타입 검사기(mypy)가 타입을 체크할 수 있도록 도와줍니다.

6. 언제 TypedDict를 사용할까?

딕셔너리 구조를 엄격하게 관리하고 싶을 때

JSON 데이터의 구조를 정의할 때

API 응답 데이터를 다룰 때

mypy와 함께 정적 타입 검사를 수행할 때

🔥 정리

TypedDict딕셔너리의 키와 값의 타입을 강제하는 기능

기본적으로 모든 키가 필수지만, total=FalseNotRequired[]를 사용하여 선택적 키 가능

다른 TypedDict중첩 사용 가능

정적 타입 검사기(mypy)와 함께 사용하면 오류를 방지할 수 있음

 

TypedDict를 활용하면, 데이터 구조를 명확하게 정의하고 타입 안전성을 높일 수 있습니다! 🚀

파이썬에서 특정 패키지에 속한 클래스 리스트를 확인하는 방법에는 여러 가지가 있습니다. 패키지의 구조를 탐색하고 내부의 클래스를 나열하는 방법을 정리해 드릴게요.

1. dir() 함수 사용

 

dir()을 사용하면 특정 패키지 내부에 어떤 객체(클래스, 함수, 변수 등)가 있는지 확인할 수 있습니다.

 

예제:

import sklearn

print(dir(sklearn))  # sklearn 패키지 내부의 객체 목록 출력

이렇게 하면 sklearn 패키지에 포함된 모듈과 클래스, 함수 등이 나열됩니다.

2. inspect 모듈 사용

 

inspect 모듈을 활용하면 특정 패키지나 모듈에서 클래스만 필터링해서 볼 수 있습니다.

 

예제:

import inspect
import sklearn.linear_model  # 예제: sklearn의 linear_model 모듈을 탐색

# linear_model 내부에서 클래스만 추출
classes = [name for name, obj in inspect.getmembers(sklearn.linear_model, inspect.isclass)]
print(classes)

이 코드를 실행하면 sklearn.linear_model 모듈에 포함된 클래스 목록을 출력합니다.

3. pkgutil 모듈로 하위 모듈 탐색

 

특정 패키지의 서브 모듈까지 탐색하고 싶다면 pkgutil을 활용할 수 있습니다.

 

예제:

import pkgutil
import sklearn

# sklearn 패키지 내부의 하위 모듈 찾기
modules = [module.name for module in pkgutil.iter_modules(sklearn.__path__)]
print(modules)

이 코드는 sklearn 패키지의 서브 모듈 목록을 출력합니다.

4. help() 사용

 

help(패키지명)을 사용하면 패키지 내부의 클래스 및 모듈 정보를 확인할 수 있습니다.

 

예제:

import sklearn.linear_model

help(sklearn.linear_model)

이렇게 하면 sklearn.linear_model 내부의 클래스와 함수에 대한 설명을 출력합니다.

5. __dict__ 사용

 

대부분의 패키지와 모듈은 __dict__ 속성을 가지고 있으며, 이를 통해 내부의 정의된 객체들을 확인할 수 있습니다.

 

예제:

import sklearn.linear_model

print(sklearn.linear_model.__dict__.keys())  # 내부 객체 목록 출력

6. dir() + getattr() 조합

 

패키지 내부의 객체를 getattr()을 통해 직접 가져와서 클래스인지 확인하는 방법입니다.

 

예제:

import sklearn.linear_model
import inspect

# sklearn.linear_model 내부의 클래스만 필터링
for name in dir(sklearn.linear_model):
    obj = getattr(sklearn.linear_model, name)
    if inspect.isclass(obj):
        print(name)

🔹 결론

단순한 목록 확인: dir(패키지명)

클래스 필터링: inspect.getmembers(모듈명, inspect.isclass)

서브 모듈 탐색: pkgutil.iter_modules(패키지명.__path__)

상세 설명 확인: help(패키지명)

 

필요한 방법을 선택해서 사용하면 됩니다! 😊

맥에서 여러 개의 파이썬 버전을 관리하는 방법은 크게 **pyenv**를 사용하는 방법과 **conda**를 사용하는 방법이 있습니다. 가장 유연하게 버전을 관리하려면 **pyenv**를 추천합니다.

1. pyenv를 이용한 파이썬 버전 관리 (추천)

 

pyenv는 사용자가 원하는 버전의 파이썬을 설치하고, 프로젝트별로 다른 버전을 사용할 수 있도록 도와줍니다.

 

설치 방법

# Homebrew 업데이트
brew update

# pyenv 설치
brew install pyenv

# pyenv 환경 변수 설정 (zsh 사용 시)
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init --path)"' >> ~/.zshrc

# 적용
source ~/.zshrc

파이썬 버전 설치

# 설치 가능한 파이썬 버전 확인
pyenv install --list

# 특정 버전 설치 (예: 3.11.6)
pyenv install 3.11.6

# 전역(global) 기본 파이썬 버전 설정
pyenv global 3.11.6

# 특정 프로젝트 폴더에서만 특정 버전 사용
pyenv local 3.10.6  # 현재 폴더에서만 3.10.6 사용

# 현재 사용 중인 버전 확인
pyenv versions
python --version

2. conda를 이용한 관리

 

conda는 가상 환경과 패키지 관리를 함께 제공하는 도구로, 데이터 과학이나 머신러닝을 한다면 유용합니다.

 

설치 방법

# Miniconda 설치 (경량 버전)
brew install --cask miniconda

# conda 환경 변수 설정 (zsh 사용 시)
echo 'export PATH="$HOME/miniconda3/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

파이썬 버전 관리

# 새로운 환경 생성 (예: 파이썬 3.9 사용)
conda create --name py39 python=3.9

# 환경 활성화
conda activate py39

# 환경 비활성화
conda deactivate

# 설치된 환경 목록 보기
conda env list

3. macOS 기본 파이썬 사용 (비추천)

 

맥OS에는 기본적으로 /usr/bin/python3가 설치되어 있지만, 시스템 의존성이 많아서 직접 버전을 관리하는 것은 어렵습니다. 따라서 pyenvconda를 사용하는 것이 좋습니다.

추천 방법 요약

일반적인 개발용pyenv

데이터 과학, 머신러닝conda

 

어떤 방법이든 설정을 마친 후, python --version으로 제대로 적용되었는지 확인하세요! 🚀

+ Recent posts