App 개발을 위한 환경은 대부분 클라이언트–서버 구조로 구성됩니다. 예를 들어, 로컬 PC(클라이언트)에서 AWS EC2 서버(서버)에 접속하거나, WSL2 기반 Ubuntu 내부로 접속해 명령어를 실행하는 상황이 이에 해당합니다. 이때 가장 핵심적인 도구가 바로 SSH (Secure Shell)입니다. 하지만 SSH를 효과적으로 사용하기 위해서는, 먼저 운영체제 내부에서 명령어가 어떻게 처리되는지, 즉 Shell–Kernel–Hardware 구조를 이해하는 것이 매우 중요합니다.

Shell과 Kernel의 구조적 역할

운영체제는 사용자의 명령을 받아 하드웨어에 전달하고 결과를 반환하는 중개 시스템입니다. 그 중심에 있는 것이 Shell과 Kernel입니다.

구성 요소 역할 요약 비유 (식당)
사용자 명령을 입력하는 주체 손님 – 원하는 음식을 주문함 (명령어 입력)
Shell 사용자의 명령어를 받아 Kernel에게 전달하고 결과를 사용자에게 반환 웨이터 – 손님의 주문을 주방에 전달하고, 결과를 가져다 줌
명령어 Shell에 입력하는 구체적 요청 (예: ls, cd, python) 주문 내용 – 예: “파스타 하나 주세요”
Kernel 하드웨어를 직접 제어하며 명령을 실행하는 운영체제의 핵심 주방장 – 실제로 요리를 만드는 사람. CPU, 메모리 등의 자원을 관리하고 명령을 수행함
하드웨어 실제 자원 (CPU, RAM, 디스크 등) 주방 도구 및 재료 – 실제로 요리를 가능하게 만드는 물리적 기반

SSH: 원격으로 Shell에 접속하는 수단

  • SSH (Secure Shell)는 클라이언트–서버 환경에서 클라이언트가 원격 서버의 Shell에 안전하게 접속할 수 있도록 해주는 통신 프로토콜입니다.
  • 사용자는 자신의 로컬 PC에서 ssh user@server_ip 명령을 입력
  • 서버는 사용자를 인증하고 Shell을 제공
  • 사용자는 이 Shell을 통해 명령을 입력하고 실행 결과를 확인

즉, SSH는 멀리 떨어진 웨이터에게 전화를 걸어 주문하는 것과 비슷합니다. 사용자는 서버에 직접 들어가지 않고도 명령을 내릴 수 있으며, 서버는 그 요청을 Kernel을 통해 처리하고 결과를 다시 SSH 채널을 통해 사용자에게 전달합니다.

정보처리 흐름 도식

아래는 명령어 입력부터 실행까지의 흐름을 시각적으로 표현한 구조입니다.

plain text
[사용자]
   │
   └─(SSH 접속)→ [Shell (웨이터)]
                         │
                         └─→ [Kernel (주방장)]
                                     │
                                     └─→ [하드웨어 자원]
                         ↑
                         └──────── 결과 전달 ────────┘

이 도식은 로컬 환경(WSL2 터미널)에서도 적용되며, 클라우드 환경(AWS EC2)에서는 SSH 접속을 통해 원격 Shell을 사용하는 구조로 일반화됩니다.

  • WSL2에서는 bash, zsh 등이 기본 Shell로 사용됩니다. 명령어 입력은 곧 Shell과의 대화입니다.
  • AWS EC2에서는 ssh ubuntu@IP와 같이 SSH로 Shell에 접속하여 모든 작업을 수행합니다.
  • LLM 모델을 학습하거나 추론 API를 배포할 때, Shell을 통해 명령어 단위로 시스템을 제어하게 됩니다.