02. 라즈베리 파이4와 컴퓨터 연결 - EnglishNo/EmbeddedSystem GitHub Wiki

라즈베리 파이4와 노트북과의 연결도

image

현재 경로 이해

image

현재 위치와 파일 목록을 확인하는 명령어들


pwd
ls
ls -l
ls -la

# 홈 디렉터리로 이동
cd ~

# 프로젝트 폴더 생성과 이동
mkdir -p ~/projects/week02
cd ~/projects/week02 # 홈 디렉터리 하위의 projects/week02 폴더 경로로 이동
pwd

  • 명령어 설명)
    • pwd : 현재 디렉터리 출력.
    • cd : 터미널에서 현재 작업 중인 폴더(디렉터리) 위치를 이동할 때 사용.
    • ls -la : 숨김 파일과 권한을 함께 보여줌.
    • ~ : 현재 사용자의 홈 디렉터리. (로컬 디스크 내부에 위치한 특정 사용자 전용 폴더를 의미)
    • -p : 지정한 경로에서 상위 폴더가 존재하지 않더라도 오류를 내지 않고 자동으로 함께 생성.
    • mkdir : 새로운 폴더(디렉터리)를 만들 때 사용하는 명령어.

대상을 확인 후, 파일 생성/복사/이동/삭제 수행


touch hello.py
cp hello.py hello_backup.py
mv hello_backup.py backup.py
cat hello.py

# 삭제 전 다시 확인
ls -l backup.py
rm backup.py

  • 명령어 설명)
    • touch : 지정한 이름의 파일이 없으면 0바이트 크기의 빈 파일 생성, 파일이 이미 존재하면 파일의 마지막 수정 시간을 현재 시간으로 갱신.
    • cp : 파일을 복사할 때 사용.
    • mv : 파일을 이동시키거나 이름을 바꿀 때 사용.
    • cat : 짧은 텍스트 파일을 출력할 때 사용.
    • ls -l : 파일의 권한(읽기/쓰기/실행), 소유자, 파일 크기, 최종 수정 일시, 파일명 등의 상세 정보를 한 줄씩 자세히 보여줌.
    • rm : 휴지통을 거치지 않으므로 경로 확인. (파일이나 폴더(디렉터리) 삭제)

작은 Python 프로그램으로 실행 위치 확인


# system_info.py
import platform
import socket
from datetime import datetime

print("호스트:", socket.gethostname())
print("운영체제:", platform.system())
print("CPU:", platform.machine())
print("시간:", datetime.now().isoformat(timespec="seconds"))

# 실행 (터미널에서)
python3 system_info.py

  • 코드 설명)
    • import platform : 운영체제, CPU 아키텍처, 플랫폼 정보 등 하드웨어 및 OS 환경 정보를 가져오는 모듈.
    • import socket : 네트워크 통신을 위한 모듈로, 지금은 기기의 네트워크 호스트 이름을 얻어올 때 사용.
    • from datetime import datetime : 현재 날짜와 시간 정보를 생성, 서식을 지정하기 위한 모듈.
    • socket.gethostname() : 현재 기기의 호스트명(네트워크상에 등록된 기기 이름)을 가져옴.
    • platform.system() : 현재 작동 중인 운영체제의 종류 출력.
    • platform.machine() : CPU의 아키텍처 종류 출력.
    • datetime.now().isoformat(timespec="seconds") : 현재 시간을 ISO 8601 표준 형식(YYYY-MM-DDTHH:MM:SS)으로 초 단위까지 깔끔하게 자른 문자열로 변환.
  • 명령어 설명)
    • python3 system_info.py : 터미널에서 파이썬 3(python3) 인터프리터를 통해 작성한 system_info.py 파일을 실행.

네트워크로 Raspberry Pi 연결

image
  • 종류)
    • 유선 LAN
    • 무선 공유기
    • 노트북 핫스팟
    • 스마트폰 핫스팟

무선 연결과 SSH 연결의 차이

image
  • 무선(Wi-Fi) 연결 단계 : 두 기기를 같은 네트워크상에 묶어 통신 통로를 여는 네트워크 접속 단계
    • 동작 : 노트북과 라즈베리 파이가 동일한 공유기(AP)에 무선으로 접속.
    • 목적 : 기기간 데이터가 오갈 수 있는 통신 통로 형성.
    • 결과 : 공유기가 각 기기에 네트워크 식별 번호인 IP 주소 각각 할당.
  • SSH 연결 단계 : 해당 통로를 통해 라즈베리 파이를 원격 제어하는 서비스 접속 단계
    • 동작 : 노트북에서 라즈베리 파이에 할당된 IP 주소와 22번 포트(TCP 22)를 지정해 보안 접속 시도. (22번 포트가 막혀있으면 SSH 접속 실패)
    • 목적 : 암호화된 터미널 연결을 구축해 라즈베리 파이 원격 조작. (SSH 기능이 비활성화되어 있으면 실패)
    • 결과 : 노트북 터미널에서 라즈베리 파이의 리눅스 명령어 실행 가능.

서로 다른 장치를 찾는 방법

image
  • DHCP (자동 IP 할당)
    • 방식 : 공유기나 핫스팟이 기기가 접속할 때마다 빈 IP 주소 자동으로 할당.
    • 특징 : 별도 설정이 필요 없어 편리하지만, 재부팅이나 재접속 시 IP 주소가 변경. (예 : 192.168.137.23)
  • DHCP 예약/고정 IP
    • 방식 : 특정 기기가 항상 지정된 한 가지 IP 주소만 사용하도록 고정.
    • 특징 : 주소가 바뀌지 않아 매번 IP를 확인할 필요 없지만, 다른 기기와 IP 주소가 겹치면 네트워크 충돌 발생.
  • mDNS (도메인 이름 접속)
    • 방식 : 숫자 IP 대신 호스트 이름 뒤에 .local을 붙여 장치에 접속. (예 : raspberrypi.local)
    • 특징 : 숫자로 된 IP 주소를 몰라도 이름만으로 간편하게 접속.
  • 수업 권장 방식)
    • 핫스팟 DHCP + 장치 목록 확인 + SSH 별칭 : 핫스팟으로 IP 자동 할당 후 연결된 장치 목록에서 IP를 확인하여 SSH 설정 파일(config)에 단축 이름(별칭) 지정해 접속.

독립된 핫스팟으로 Raspberry Pi 실습망 제작

image
  • 핫스팟 설정 6단계
    • 설정 실행 : 시작 메뉴에서 설정 앱 오픈.
    • 네트워크 이동 : 설정 목록에서 네트워크 및 인터넷 선택.
    • 모바일 핫스팟 선택 : 왼쪽 메뉴에서 모바일 핫스팟 항목으로 입장.
    • SSID 및 암호 설정 : 핫스팟 스위치를 '끔' 상태로 둔 뒤, 네트워크 이름(SSID)과 비밀번호 지정.
    • 2.4GHz 대역 권장 : 연결 안정성과 무선 호환성을 위해 네트워크 대역을 2.4GHz로 설정.
    • IP 확인 및 SSH 접속 : 라즈베리 파이를 핫스팟에 연결 후, 설정 화면의 '연결된 장치'목록에서 할당된 IP 확인하여 SSH로 접속. (ssh student@<IP>)
  • 실습 시 주의사항
    • 절전 모드 주의 : 절전 모드에 들어가면 핫스팟 종료되어 연결 종료.
    • IP 재확인 : 핫스팟을 재시작하면 라즈베리 파이의 IP 주소가 변경될 수 있으므로 접속 전 장치 목록 재확인.
    • SSID 구분 : 혼선을 피하기 위해 팀별로 고유한 SSID 이름 설정.

Raspberry PI의 주소와 네트워크 연결 확인

  • 설명
    • IP 주소 : 네트워크에서 Raspberry Pi라는 컴퓨터 식별.
    • 포트 : 컴퓨터 안의 SSH 서비스를 식별하여 기본값 TCP 22.
    • 사용자/인증 : 어떤 계정으로 접속할지와 비밀번호 또는 키 확인.

명령어로 IP 주소아 네트워크 연결 확인


# Raspberry Pi에서
hostname -I
ip addr show wlan0

# 노트북에서
ping 192.168.0.25

# Raspberry Pi에서 SSH 상태 확인
systemctl status ssh
ss -ltnp | grep :22

  • 명령어 설명)
    • hostname -I : 라즈베리 파이에 할당된 모든 IP 주소 간략히 한 줄로 출력.
    • ip addr show wlan0 : 무선 랜 카드(wlan0) 인터페이스의 상세 네트워크 정보(IP 주소, MAC 주소, 상태 등)를 확인.
    • ping : 기본 연결 확인. (ping 192.168.0.25의 경우, 노트북에서 라즈베리 파이의 IP로 신호 패킷을 보내 두 기기가 같은 네트워크 상에서 정상적으로 통신하는지 응답 속도 측정)
    • systemctl status ssh : SSH 서비스(데몬)가 현재 실행 중인지(active (running)) 상태 점검.
    • ss : 서비스 대기 상태를 확인. (ss - ltnp | grep :22의 경우, 현재 네트워크 포트 중 22번 포트(SSH 기본 포트)가 열려 있고, SSH 프로세스가 대기 중인지 감시)
      • ss -ltnp : 리스닝 중인 TCP 포트와 관련 프로세스 목록으로 출력.

SSH를 통해 암호화된 연결로 Raspberry PI 원격 셸 열기

image
  • SSH 접속 진행 5단계
    • 접속 확인 : ping 192.168.0.25로 라즈베리 파이와 네트워크가 정상 연결되어 있는지 확인.
    • SSH 연결 : ssh [email protected]를 입력. 최초 접속 시 서버 보안 지문 저장 여부를 물으면 yes 입력.
    • 인증 : student 계정의 비밀번호 입력. (입력 시 화면에 글자가 보이지 않는 것이 정상)
    • 원격 셸 : 로그인에 성공 시 프롬프트가 student@raspberrypi:~$로 변경, 라즈베리 파이 원격으로 조작 가능.
    • 종료 : 작업을 마친 뒤 exit을 입력해 SSH 접속 안전하게 해제.

# 노트북 터미널
ssh [email protected]

# 접속 후 실행 위치 확인 (호스트명, 사용자 이름, 디렉터리 절대 경로, IP 주소 출력)
hostname
whoami
pwd
hostname -I

# 원격 연결 종료
exit

  • 명령어 설명)
    • ssh [email protected] : IP 주소가 192.168.0.25인 원격 장치(라즈베리 파이)에 student 계정으로 보안 접속 시도.
    • hostname : 현재 작업 중인 기기의 이름(호스트명 출력).
    • whoami : 현재 로그인된 사용자 계정명 출력.
    • pwd : 현재 위치한 디렉터리의 절대 경로 출력.
    • hostname -I : 현재 기기에 할당된 모든 네트워크 IP 주소 출력.
    • exit : 원격 SSH 접속 종료.

SSH 별칭 등록

  • SSH 별칭 사용의 장점)
    • 접속 명령 단순화
    • 유지보수 편의성 : 라즈베리 파이 IP가 바뀌더라도, 설정 파일 안의 HostName IP 주소 한 곳만 수정하면 기존 접속 명령어 그대로 사용 가능.
    • 다중 장치 관리 : 여러 대의 라즈베리 파이를 각각 다른 별칭으로 저장해두고 식별하기 쉬움.

# ~/.ssh/config
Host rpi-class
    HostName 192.168.0.25
    User student
    Port 22

# 이후 접속
ssh rpi-class

  • 명령어 설명)
    • Host rpi-class : 터미널에서 사용할 사용자 정의 접속 별칭(rpi-class) 설정.
    • HostName 192.168.0.25 : 실제 원격 접속 대상인 라즈베리 파이 IP 주소.
    • User student : 라즈베리 파이의 로그인 사용자 계정명.
    • Port 22 : SSH 통신에 사용하는 기본 포트 번호.

SCP를 통해 SSH 연결로 파일 전송


# 노트북 → Raspberry Pi
scp hello.py [email protected]:/home/student/projects/week02/

# Raspberry Pi → 현재 노트북폴더
scp [email protected]:/home/student/projects/week02/hello.py .

# 디렉터리 전체
scp -r project [email protected]:~/projects/

  • 명령어 설명)
    • scp hello.py [email protected]:/home/student/projects/week02/ : 노트북의 hello.py 파일을 라즈베리 파이의 해당 폴더 경로(/home/student/projects/week02/)로 업로드.
    • scp [email protected]:/home/student/projects/week02/hello.py . : 라즈베리 파이의 hello.py 파일을 노트북의 현재 작업 디렉터리(.)로 다운로드.
    • scp -r project [email protected]:~/projects/ : -r(recursive) 옵션을 붙여 project 폴더와 그 내부의 모든 파일/하위 폴더를 통째로 원격 디렉터리에 복사.

SSH와 VNC

image
  • SSH
    • 방식 : 텍스트 터미널(CLI) 기반 원격 접속.
    • 장점 : 텍스트 데이터만 주고 받으므로 네트워크 트래픽 매우 적고, 반응 속보 빠르며, 자동화 작업에 유리.
    • 주요 용도 : 터미널 명령어 입력, 소스코드 작성 및 수정, 파일 관리, 시스템 서버 제어 등 대부분의 개발 작업.
  • VNC
    • 방식 : 그래픽 데스크톱(GUI) 화면 스트리밍 접속.
    • 장점 : 실제 모니터를 연결한 것처럼 라즈베리 파이의 전체 화면 시각적으로 확인, 마우스로 조작.
    • 단점 : 네트워크 트래픽 사용량이 크고, SSH에 비해 상대적으로 반응 속도 둔함.
    • 주요 용도 : 웹 브라우징, 그래픽 기반 프로그램 실행, GUI 인터페이스 확인이 반드시 필요한 작업.

Vs Code와 GitHub로 원격 개발 흐름 완성

image
  • 특징)
    • VS Code 화면은 노트북에 있지만, 개발 환경은 Raspberry Pi에 있음.
    • Remote-SSH 연결은 일반 SSH가 먼저 성공해야 함.
  • 원격 터미널에서 프로젝트 폴더와 실행 위치 검증

hostname
whoami
pwd

cd ~/projects/week02
code_path=$(pwd)
printf "project=%s\n" "$code_path"

python3 --version
which python3

  • 명령어 설명)
    • hostname : 현재 작동 중인 기기의 이름(호스트명) 출력.
    • whoami : 현재 로그인된 계정 이름 출력.
    • pwd : 현재 위치한 디렉터리의 절대 경로 출력.
    • cd ~/projects/week02 : 홈 디렉터리 하위의 projects/week02 폴더로 이동.
    • code_path=$(pwd) : pwd 명령어로 얻은 현재 절대 경로를 code_path라는 셸 변수에 저장.
    • printf "project=%s\n" "$code_path" : 저장된 변수 값을 project=[경로] 형태로 화면에 출력.
    • python3 --version : 설치되어 있는 파이썬 3의 버전 출력.
    • which python3 : python3 명령어 실행 시 실제로 호출되는 파이썬 실행 파일의 경로를 보여줌.

가상 환경

image
  • 가상 환경 사용하는 이유)
    • 시스템 보호 : 라즈베리 파이 OS 자체의 파이썬 패키지(apt)와 프로젝트용 패키지를 분리하여 시스템 파일 오염 방지.
    • 버전 재현 : 프로젝트별 필요한 패키지 버전을 requirements.txt에 기록하여 동일한 개발 환경 언제든 다시 구축.
    • 충돌 방지 : 프로젝트마다 서로 다른 라이브러리 버전을 필요로 할 때, 상호 간섭이나 버전 충돌없이 독립적으로 운영.

가상환경 생성하고 선택된 Python 경로 확인


cd ~/projects/week02
python3 -m venv .venv
source .venv/bin/activate

which python
python --version
pip --version

# 필요한패키지설치후기록
pip freeze > requirements.txt

# 종료
deactivate

  • 명령어 설정)
    • cd ~/projects/week02 : 작업할 프로젝트 디렉터리로 이동.
    • python3 -m venv .venv : 현재 폴더에 .venv라는 이름의 독립된 파이썬 가상환경 생성.
    • source .venv/bin/activate : 가상환경 활성화. (정상 적용 시 프롬프트 맨 앞에 (.venv)가 붙음)
    • which python : 현재 실행되는 파이썬 경로 확인. (시스템 경로가 아닌 .venv/bin/python으로 변경되었는지 검증)
    • python --version : 가상환경 내의 파이썬 버전 출력.
    • pip --version : 가상환경에 독립적으로 연결된 패키지 관리자(pip)의 버전과 위치 확인.
    • pip freeze > requirements.txt : 현재 가상환경에 설치된 모든 패키지와 버전 목록을 requirements.txt 파일에 저장. (다른 환경에서 pip install -r requirements.txt로 동일 환경을 복원)
    • deactivate : 가상환경 비활성화.

변경이력은 Git에, GitHub에는 원격으로 보존

image

Git 사용자와 저장소 상태 먼저 확인


git --version

git config --global user.name "Student Name"
git config --global user.email "[email protected]"

# 저장소 복제
git clone https://github.com/account/project.git
cd project

# 현재 상태와 원격 주소
git status
git remote -v

  • 명령어 설명)
    • git --version : 설치된 Git의 버전 확인.
    • git config --global user.name "Student Name" : 커밋 히스토리에 기록될 작성자 이름과 컴퓨터 전체 설정(--global)으로 지정.
    • git config --global user.email "[email protected]" : 커밋 히스토리에 기록될 작성자 이메일 주소 등록.
    • 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을 사용해도 가상환경 내부의 파이썬 호출)

무선 접속 장애 진단

image
  • 무선 접속 장애 진단 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 거부)
⚠️ **GitHub.com Fallback** ⚠️