Skip to content

Commit db9e84f

Browse files
authored
Update README.md
1 parent 7e47715 commit db9e84f

1 file changed

Lines changed: 39 additions & 48 deletions

File tree

README.md

Lines changed: 39 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -4,70 +4,61 @@
44

55
인터넷이 차단된 **에어갭(Air-gapped) 환경**에서 윈도우의 VS Code를 사용하여 리눅스 서버의 C/C++ 프로젝트를 원격 디버깅하기 위한 템플릿입니다.
66

7-
## 🏗️ 시스템 아키텍처 (Architecture)
7+
## 🏗️ 설치 및 작동 구조 (Installation & Architecture)
88

9-
프로젝트는 서버에 `vscode-server` 에이전트를 설치할 수 없는 환경을 위해 **SSH Pipe Transport** 방식을 사용합니다.
9+
프로젝트의 핵심은 **"지능(UI)은 윈도우에, 실행(Runtime)은 리눅스에"** 두는 것입니다. 서버에 무거운 에이전트를 설치할 수 없는 환경을 위해 설계되었습니다.
1010

11-
* **Windows (Local):** VS Code UI, C/C++ 확장, `ssh.exe`가 설치된 개발 환경입니다.
12-
* **Linux (Remote):** VS Code가 설치되지 않으며, 오직 표준 `gdb`와 빌드된 바이너리만 존재합니다.
13-
* **Bridge:** 윈도우의 `ssh.exe`가 파이프 역할을 하여 로컬 UI와 원격 GDB 사이의 명령을 중계합니다.
11+
### 1. 윈도우 로컬 (Local PC) - **VS Code 설치 위치**
12+
* **VS Code 본체**: 오직 **윈도우에만 설치**됩니다.
13+
* **확장 프로그램**: `C/C++ Extension` 등 모든 도구는 윈도우 VS Code 내에 설치됩니다.
14+
* **SSH 클라이언트**: 리눅스 서버와 통신하기 위한 `ssh.exe`가 위치합니다.
15+
* **역할**: 코드 편집, 디버깅 컨트롤(F5, F10 등), 변수 모니터링 UI 제공.
1416

17+
### 2. 리눅스 서버 (Remote Server) - **VS Code 미설치**
18+
* **VS Code 미설치**: 서버에는 VS Code나 `vscode-server` 에이전트를 **설치할 필요가 없으며 설치하지 않습니다.**
19+
* **표준 GDB**: 리눅스 기본 패키지인 `gdb`만 사용합니다.
20+
* **역할**: 실제 코드의 빌드(Compile) 및 프로세스 실행, GDB를 통한 디버그 정보 송신.
1521

1622

17-
## 🌟 주요 특징
18-
* **Zero-Agent**: 서버에 별도의 에이전트나 바이너리를 다운로드/설치할 필요가 없습니다.
19-
* **No curl/wget**: 외부망 접속이 차단된 환경에서도 SSH(22번 포트)만 열려 있다면 작동합니다.
20-
* **Complex Structure**: 실행 파일(`a.out`)과 다중 공유 라이브러리(`.so`) 간의 의존성 디버깅을 지원합니다.
21-
* **Step-Into Support**: 메인 로직에서 라이브러리 내부 함수(`libb.so`, `libd.so`)로 진입하는 디버깅이 가능합니다.
2223

23-
## 📂 프로젝트 구조
24+
---
25+
26+
## 📂 소스 코드 위치 및 관리 (Source Code Location)
27+
28+
디버깅 시 소스 코드 라인을 정확히 매핑하기 위해 **윈도우와 리눅스 양쪽에 동일한 구조**의 소스 코드가 존재해야 합니다.
29+
30+
* **윈도우 소스**: VS Code가 화면에 코드를 보여주고 브레이크포인트를 설정하는 용도입니다.
31+
* **리눅스 소스**: 실제 서버에서 컴파일되어 바이너리(a.out)를 생성하는 용도입니다.
32+
* **동기화**: WinSCP 등을 이용해 윈도우에서 수정한 내용을 리눅스로 실시간 전송(Push)해야 합니다.
33+
2434
```text
25-
.
35+
<Project Root>/ # (Windows: C:\Work\Project, Linux: /home/user/dev)
2636
├── .vscode/
27-
│ └── launch.json # 윈도우 VS Code용 원격 디버그 설정
37+
│ └── launch.json # 윈도우 VS Code용 설정 (서버 접속 정보 포함)
2838
├── apps/
29-
│ └── main_app/ # 메인 실행 프로그램 (a.out)
30-
├── libs/
31-
│ ├── lib_b/ # 공유 라이브러리 B (libb.so)
32-
│ └── lib_d/ # 공유 라이브러리 D (libd.so)
33-
├── Makefile # 프로젝트 전체 통합 빌드 (Root Makefile)
34-
└── build/ # 빌드 결과물 (.so, a.out) 저장소 (서버에서 생성)
39+
│ └── main_app/ # [소스 코드]
40+
│ ├── src/main.c # (Windows & Linux 양쪽 동일 위치 필수)
41+
│ └── Makefile
42+
├── libs/ # [공유 라이브러리 소스 코드]
43+
│ ├── lib_b/
44+
│ └── lib_d/
45+
├── Makefile # 전체 통합 빌드용
46+
└── build/ # [결과물] 리눅스 빌드 시 생성되는 .so 및 a.out
3547
```
3648

37-
## 🛠️ 사전 준비 사항 (Prerequisites)
38-
39-
### 1. 윈도우 개발 환경 (Local)
40-
* **VS Code**: [C/C++ 확장(Microsoft)](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) 설치 필수.
41-
* **OpenSSH**: 윈도우 기본 기능을 통해 `ssh.exe` 사용 가능 확인.
42-
* **SSH Key**: 비밀번호 입력 없이 접속 가능하도록 SSH Key를 서버에 등록(권장).
43-
44-
### 2. 리눅스 서버 (Remote)
45-
* **GDB**: 표준 `gdb` 설치 필수. (`gdb --version`으로 확인)
46-
* **Build Tools**: `gcc`, `make` 등 컴파일 도구.
47-
* **주의**: **서버에는 VS Code를 설치할 필요가 없습니다.**
49+
---
4850

4951
## 🚀 빠른 시작 가이드 (Quick Start)
5052

51-
1. **소스 동기화**: SFTP(WinSCP 등)를 사용하여 프로젝트 전체를 서버의 `/home/user/dev` 경로에 복사합니다.
52-
2. **서버 빌드**: SSH 터미널에서 루트 디렉토리의 `make`를 실행하여 `build/` 폴더에 바이너리를 생성합니다.
53-
```bash
54-
make
55-
```
56-
3. **환경 설정**: `.vscode/launch.json`에서 아래 항목을 수정합니다.
57-
* `pipeArgs`: 서버 접속 계정 및 IP (`user@192.168.x.x`)
58-
* `program`: 서버 내 실행 파일의 **절대 경로**
59-
* `sourceFileMap`: 서버 경로와 윈도우 로컬 경로 1:1 매칭
60-
4. **디버깅**: `F5`를 눌러 디버깅을 시작합니다. 라이브러리(`.so`) 내부 함수까지 **Step-Into (F11)**가 가능합니다.
61-
62-
## ⚠️ 핵심 체크리스트
63-
* **소스 동기화**: 윈도우와 리눅스의 소스 코드가 라인 단위로 일치해야 브레이크포인트가 정확히 작동합니다. (WinSCP의 '자동 업데이트' 기능 권장)
64-
* **디버그 심볼**: 모든 `Makefile` 빌드 시 `-g` 옵션이 포함되어야 합니다.
65-
* **라이브러리 경로**: `launch.json``LD_LIBRARY_PATH` 설정이 정확해야 실행 시 라이브러리 로드 에러가 발생하지 않습니다.
53+
1. **윈도우**: VS Code와 C/C++ 확장을 설치합니다.
54+
2. **리눅스**: `gdb`, `gcc`, `make`가 설치되어 있는지 확인합니다. (**VS Code 설치 금지**)
55+
3. **동기화**: 윈도우의 소스 폴더를 리눅스의 작업 디렉토리로 SFTP 복사합니다.
56+
4. **빌드**: 리눅스 터미널에서 `make`를 실행합니다.
57+
5. **연결**: 윈도우 VS Code의 `launch.json`에서 서버 IP와 경로를 수정 후 `F5`를 누릅니다.
6658

6759
---
6860

69-
### 💡 에어갭 환경 팁
70-
서버에 `gdb`가 설치되어 있지 않다면, 인터넷이 가능한 환경에서 해당 OS 배포판용 `.rpm` 또는 `.deb` 패키지를 다운로드하여 SFTP로 옮긴 후 수동 설치(`rpm -ivh` 또는 `dpkg -i`) 하십시오.
71-
61+
### 💡 왜 서버에 VS Code를 설치하지 않나요?
62+
일반적인 VS Code Remote 방식은 서버에 `vscode-server`를 자동으로 다운로드하려고 시도하지만, **에어갭 환경에서는 외부망(인터넷) 접속이 차단**되어 이 과정이 실패합니다. 따라서 본 템플릿은 서버에 아무것도 설치하지 않는 **Zero-Agent** 방식을 채택하여 보안 정책을 준수하면서도 강력한 디버깅 기능을 제공합니다.
7263

7364

0 commit comments

Comments
 (0)