git clone [https://github.com/account/project.git](https://github.com/account/project.git) : GitHub 상의 원격 저장소 프로젝트 전체를 내 컴퓨터로 그대로 복사해 내려받음.
cd project : 새로 작성된 project폴더 내부로 작업 위치 이동.
git status : 현재 브랜치의 상태, 수정된 파일 목록, 스테이징 여부 등 점검.
git remote -v : 현재 로컬 저장소에 연결된 원격 저장소의 별칭(기본: origin)과 실제 데이터 송수신(fetch/push) URL 주소 확인.
변경 확인 후, 필요한 파일만 커밋
git status
git diff
# 필요한 파일 선택
git add remote_check.py README.md .gitignore
git status
git diff --cached
git commit -m "Add week 2 remote check"
git log --oneline -5
명령어 설명)
git status : 현재 작업 영역에서 어떤 파일이 수정되었거나 새로 추가되었는지 전반적으로 상태 확인. 또는 선택한 파일들이 커밋 대기 목록으로 잘 들어갔는지 상태 재확인.
git diff : 아직 스테이징되지 않은 파일들의 실제 코드 수정 내역을 줄 단위로 비교하여 보여줌.
git add remote_check.py README.md .gitignore : 지정한 파일 3개(remote_check.py, README.md, .gitignore)만 선택하여 커밋 대기 상태에 올림.
git diff --cached : 스테이징 영역에 올려둔 파일들의 변경 내역만 집중적으로 확인.
git commit -m "Add week 2 remote check" : 스테이징된 파일들을 "Add week 2 remote check"라는 설명 메시지와 함께 하나의 독립된 버전(커밋)으로 저장.
git log --oneline -5 : 최근 작성된 5개의 커밋 이력을 커밋 ID(해시)와 메시지만 포함해 한 줄씩 간결하게 출력.
푸시 후 GitHub에서 같은 커밋 확인
# 현재 브랜치 확인
git branch --show-current
# 처음 연결하는 main 브랜치
git push -u origin main
# 이후
git push
# 원격 변경 가져오기
git pull
명령어 설명)
git branch --show-current : 현재 체크아웃되어 작업 중인 로컬 브랜치 이름 출력.
git push -u origin main : 로컬의 main 브랜치 내역을 원격 저장소(origin)의 main 브랜치로 처음 업로드.
-u (--set-upstream) 옵션 : 로컬 브랜치와 원격 브랜치 간의 추적 관계를 설정, 이후 매번 원격지와 브랜치명을 명시하지 않아도 되도록 연결.
git push : -u 옵션으로 추적 설정이 완료되었으므로, 대상 지정 없이 명령어만으로 로컬의 새로운 커밋들을 원격 저장소에 올림.
git pull : 원격 저장소의 최신 변경 사항을 가져와(fetch) 현재 로컬 브랜치에 자동으로 병합.
환경/캐시/비밀 파일의 업로드를 막는 .gitignore
# .gitignore
.venv/
__pycache__/
*.pyc
.env
.vscode/
logs/
*.db
# 추적 대상 확인
git status --short
명령어 설명)
.venv : 파이썬 가상환경 폴더. 용량이 크고 requirements.txt로 재현이 가능하므로 저장소에 포함 X.
__pycache__/, *.pyc : 파이썬 실행 시 생성되는 바이트코드 캐시 및 컴파일 파일. 실행 환경마다 자동 생성되므로 제외.
.env : API 키, DB 암호 등 민감한 환경 변수가 담긴 파일. 보안상 절대 Git에 올리지 않음.
.vscode : VS Code 에디터 전용 개인 설정 폴더. 팀원 및 타 개발 환경과의 충돌을 방지하기 위해 제외.
logs/ : 프로그램 실행 시 쌓이는 로그 데이터 폴더.
*.db : SQLite 등 로컬 데이터베이스 파일.
git status --short (단축형 : git status -s) : 파일들의 변경 및 추적 상태를 장황한 설명 없이 간결하게 한 줄씩 출력.
??(추적되지 않는 파일), A(추가됨/Staged), M(수정됨) 등 두 글자의 상태 코드로 빠르게 식별.
requirements.txt와 README로 실행 환경 재현
# 가상환경에서 패키지 목록 기록
pip freeze > requirements.txt
# 다른 Raspberry Pi에서 재현
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
# 프로그램 실행
python remote_check.py
명령어 설명)
pip freeze > requirements.txt : 현재 활성화된 가상환경에 설치된 모든 라이브러리와 버전 정보를 requirements.txt 파일에 기록하여 내보
python3 -m venv .venv : 새 기기(또는 대상 라즈베리 파이)에서 .venv라는 이름의 독립된 가상환경 새로 생성.
source .venv/bin/activate : 생성한 가상환경 활성화. (프롬프트에 (.venv) 표시 확인)
pip install -r requirements.txt : requirements.txt파일에 기록된 패키지들을 읽어와 동일한 버전으로 일괄 설치.
python remote_check.py : 복원된 가상환경 내에서 'remote_check.py' 파이썬 스크립트 실행. (가상환경이 활성화된 상태이므로 python3 대신 python을 사용해도 가상환경 내부의 파이썬 호출)
무선 접속 장애 진단
무선 접속 장애 진단 7단계
전원 : 장치 전원 및 배터리 방전 여부 확인
Wi-Fi 연결 : SSID, 비밀번호 및 무선 신호 상태 확인
IP 주소 : IP 정상 할당 여부 확인 (169.254.x.x는 APIPA 자가할당 IP로 네트워크 미연결 상태)
같은 네트워크 : 노트북과 라즈베리 파이가 동일한 무선망/유선망에 존재하는지 확인
ping · mDNS : IP 도달 가능 여부 점검
실패 시 : timed out (네트워크 경로 및 방화벽 문제)
TCP 22 · SSH 서비스 : 22번 포트 및 SSH 데몬 실행 여부 점검
실패 시 : `refused' (SSH 서비스 미실행 또는 포트 차단 문제)
사용자 · 인증 : 계정명, 비밀번호, SSH 키 권한 검증
실패 시 : permission denied (계정/암호 인증 문)
# 연결 시간 초과
ping <IP>
# 연결 거부
systemctl status ssh
ss -ltnp | grep :22
# 인증 실패
whoami
ssh -v student@<IP>
# Python 패키지 없음
which python
pip show <package>
# push 거부
git status
git remote -v
명령어 설명)
ping <IP> : 네트워크 경로상 대상 장치까지 신호가 도달하는지 확인. (연결 시간 초과 / timed out)
systemctl status ssh : 라즈베리 파이에서 SSH 서비스가 실행 중인지 점검. (연결 거부 / Connection refused)
ss -ltnp | grep :22 : 22번 포트가 정상적으로 열려 대기 중인지 확인. (연결 거부 / Connection refused)
whoami : 현재 계정명 확인 (인증 실패 / Permission denied)
ssh -v student@<IP> : -v(verbose) 옵션을 붙여 SSH 접속 과정의 상세 디버그 로그를 보며 인증 실패 원인 분석. (인증 실패 / Permission denied)
which python : 현재 활성화된 파이썬 인터프리터 경로 확인. (Python 패키지 없음)
pip show <package> : 해당 패키지가 현재 파이썬 환경에 설치되어 있는지 버전과 정보 출력. (Python 패키지 없음)
git status : 커밋되지 않는 변경 사항이나 브랜치 상태 확인. (Git Push 거부)
git remote -v : 원격 저장소 URL 주소가 올바르게 연결되어 있는지 점검. (Git Push 거부)