Skip to content

Latest commit

Β 

History

History
146 lines (99 loc) Β· 5.97 KB

File metadata and controls

146 lines (99 loc) Β· 5.97 KB

πŸ“˜ Docker + VSCode DevContainer 기반 C 개발 ν™˜κ²½ ꡬ좕 κ°€μ΄λ“œ

이 λ¬Έμ„œλŠ” Windows와 macOS μ‚¬μš©μžκ°€ Docker와 VSCode DevContainer κΈ°λŠ₯을 ν™œμš©ν•˜μ—¬ C 개발 및 디버깅 ν™˜κ²½μ„ λΉ λ₯΄κ²Œ ꡬ좕할 수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.


1. Dockerλž€ λ¬΄μ—‡μΈκ°€μš”?

DockerλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ–΄λ–€ μ»΄ν“¨ν„°μ—μ„œλ“  λ™μΌν•œ ν™˜κ²½μ—μ„œ μ‹€ν–‰ν•  수 있게 λ„μ™€μ£ΌλŠ” 가상화 ν”Œλž«νΌμž…λ‹ˆλ‹€.

DockerλŠ” λ‹€μŒ κ΅¬μ„±μš”μ†Œλ‘œ 이루어져 μžˆμŠ΅λ‹ˆλ‹€:

  • Docker Engine: μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•˜λŠ” 핡심 μ„œλΉ„μŠ€
  • Docker Image: μ»¨ν…Œμ΄λ„ˆ 생성에 μ‚¬μš©λ˜λŠ” ν…œν”Œλ¦Ώ (λ ˆμ‹œν”Ό πŸ“ƒ)
  • Docker Container: 이미지λ₯Ό 기반으둜 μƒμ„±λœ μ‹€μ œ μ‹€ν–‰ ν™˜κ²½ (μš”λ¦¬ 🍜)

βœ… AWS EC2μ™€μ˜ 차이점

ꡬ뢄 EC2 같은 VM Docker μ»¨ν…Œμ΄λ„ˆ
μ‹€ν–‰ λ‹¨μœ„ OS 포함 전체 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‹¨μœ„
μ‹€ν–‰ 속도 느림 (μˆ˜μ‹­ 초 이상) 맀우 빠름 (거의 μ¦‰μ‹œ)
λ¦¬μ†ŒμŠ€ μ‚¬μš© 무거움 가벼움

2. VSCode DevContainerλž€ λ¬΄μ—‡μΈκ°€μš”?

DevContainerλŠ” VSCodeμ—μ„œ Docker μ»¨ν…Œμ΄λ„ˆλ₯Ό 개발 ν™˜κ²½μ²˜λŸΌ μ‚¬μš©ν•  수 있게 ν•΄μ£ΌλŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€.

  • μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜κ±°λ‚˜ 디버깅할 λ•Œ μ»¨ν…Œμ΄λ„ˆ λ‚΄λΆ€ ν™˜κ²½μ—μ„œ λ™μž‘
  • νŒ€μ› κ°„ ν™˜κ²½ 차이 없이 λ™μΌν•œ 개발 ν™˜κ²½ ꡬ성 κ°€λŠ₯
  • .devcontainer 폴더에 μ •μ˜λœ 섀정을 VSCodeκ°€ 읽어 μžλ™ ꡬ성

3. Docker Desktop μ„€μΉ˜ν•˜κΈ°

  1. Docker 곡식 μ‚¬μ΄νŠΈμ—μ„œ μ„€μΉ˜ 파일 λ‹€μš΄λ‘œλ“œ:
    πŸ‘‰ https://www.docker.com/products/docker-desktop

  2. μ„€μΉ˜ ν›„ Docker Desktop μ‹€ν–‰

    • Windows: Docker μ•„μ΄μ½˜μ΄ νŠΈλ ˆμ΄μ— λ– μ•Ό 함
    • macOS: 상단 메뉴바에 Docker μ•„μ΄μ½˜ 확인

4. ν”„λ‘œμ νŠΈ 파일 λ‹€μš΄λ‘œλ“œ (νžˆμŠ€ν† λ¦¬ 없이)

터미널(CMD, PowerShell, zsh λ“±)μ—μ„œ μ•„λž˜ λͺ…λ Ήμ–΄λ‘œ ν”„λ‘œμ νŠΈ ν΄λ”λ§Œ λ‚΄λ €λ°›μŠ΅λ‹ˆλ‹€:

git clone --depth=1 https://github.com/krafton-jungle/data_structures_docker.git
  • --depth=1 μ˜΅μ…˜μ€ git commit νžˆμŠ€ν† λ¦¬λ₯Ό μƒλž΅ν•˜κ³  μ΅œμ‹  파일만 κ°€μ Έμ˜΅λ‹ˆλ‹€.

πŸ“‚ λ‹€μš΄λ‘œλ“œ ν›„ 폴더 ꡬ쑰 μ„€λͺ…

data_structures_docker/
β”œβ”€β”€ .devcontainer/
β”‚   β”œβ”€β”€ devcontainer.json      # VSCodeμ—μ„œ μ»¨ν…Œμ΄λ„ˆ ν™˜κ²½ μ„€μ •
β”‚   └── Dockerfile             # C 개발 ν™˜κ²½ 이미지 μ •μ˜
β”‚
β”œβ”€β”€ .vscode/
β”‚   β”œβ”€β”€ launch.json            # 디버깅 μ„€μ • (F5 μ‹€ν–‰μš©)
β”‚   └── tasks.json             # 컴파일 μžλ™ν™” μ„€μ •
β”‚
β”œβ”€β”€ Data-Structures/
β”‚   β”œβ”€β”€ Binary_Search_Tree/
β”‚   β”œβ”€β”€ Binary_Tree/
β”‚   β”œβ”€β”€ Linked_List/
β”‚   β”‚   β”œβ”€β”€ Q1_A_LL.c ~ Q7_A_LL.c       # μ—°κ²° 리슀트 문제 C μ½”λ“œ
β”‚   β”‚   └── Linked Lists Questions.pdf # 문제 μ„€λͺ… λ¬Έμ„œ
β”‚   └── Stack_and_Queue/
β”‚       β”œβ”€β”€ Q1_C_SQ.c ~ Q7_C_SQ.c       # μŠ€νƒ/큐 문제 C μ½”λ“œ
β”‚       └── Stack and Queues Questions.pdf # 문제 μ„€λͺ… λ¬Έμ„œ
β”‚
└── README.md  # μ„€μΉ˜ 및 μ‚¬μš©λ²• μ„€λͺ… λ¬Έμ„œ

βœ… 각 λ””λ ‰ν„°λ¦¬λŠ” 자료ꡬ쑰 μ£Όμ œλ³„λ‘œ 문제 νŒŒμΌλ“€μ΄ μ •λ¦¬λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.


5. VSCodeμ—μ„œ ν•΄λ‹Ή ν”„λ‘œμ νŠΈ 폴더 μ—΄κΈ°

  1. VSCodeλ₯Ό μ‹€ν–‰
  2. 파일 β†’ 폴더 μ—΄κΈ°λ‘œ 방금 ν΄λ‘ ν•œ data_structures_docker 폴더λ₯Ό 선택

6. 개발 μ»¨ν…Œμ΄λ„ˆ: μ»¨ν…Œμ΄λ„ˆμ—μ„œ μ—΄κΈ°

  1. VSCodeμ—μ„œ Ctrl+Shift+P (Windows/Linux) λ˜λŠ” Cmd+Shift+P (macOS)λ₯Ό λˆ„λ¦…λ‹ˆλ‹€.
  2. λͺ…λ Ήμ–΄ νŒ”λ ˆνŠΈμ—μ„œ Dev Containers: Reopen in Containerλ₯Ό μ„ νƒν•©λ‹ˆλ‹€.
  3. 이후 μ»¨ν…Œμ΄λ„ˆκ°€ μžλ™μœΌλ‘œ μ‹€ν–‰λ˜κ³  λΉŒλ“œλ©λ‹ˆλ‹€. 처음 μ»¨ν…Œμ΄λ„ˆλ₯Ό μ—΄λ©΄ λΉŒλ“œν•˜λŠ” μ‹œκ°„μ΄ 였래걸릴 수 μžˆμŠ΅λ‹ˆλ‹€. λΉŒλ“œ ν›„, ν”„λ‘œμ νŠΈκ°€ μ»¨ν…Œμ΄λ„ˆ μ•ˆμ—μ„œ 싀행됨.

7. C νŒŒμΌμ— 브레이크포인트 μ„€μ • ν›„ 디버깅 (F5)

이제 본격적으둜 문제λ₯Ό ν’€ μ‹œκ°„μž…λ‹ˆλ‹€. README.md νŒŒμΌμ„ μ°Έμ‘°ν•˜μ…”μ„œ Linked List -> Stack and Queue -> Binary Tree -> Binary Search Tree 순으둜 문제λ₯Ό ν’€μ–΄λ³΄μ„Έμš”. 각 문제 ν΄λ”μ—λŠ” pdfν˜•νƒœλ‘œ 문제 μ„€λͺ…이 μžˆμŠ΅λ‹ˆλ‹€.

C μ–Έμ–΄λ‘œ 문제λ₯Ό ν’€λ‹€κ°€ 디버깅이 ν•„μš”ν•˜μ‹œλ©΄ μ†ŒμŠ€μ½”λ“œμ— BreakPointλ₯Ό μ„€μ •ν•œ 뒀에 ν‚€λ³΄λ“œμ—μ„œ F5λ₯Ό 눌러 디버깅을 μ‹œμž‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • 참고둜 λ³€μˆ˜, λ©”λͺ¨λ¦¬, μŠ€νƒ, 좜λ ₯ 등을 VSCodeμ—μ„œ 확인할 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

8. μƒˆλ‘œμš΄ Git 리포지토리에 Commit & Push ν•˜κΈ°

금주 ν”„λ‘œμ νŠΈλ₯Ό 개인 Git 리포와 같은 λ‹€λ₯Έ 리포지토리에 μ—…λ‘œλ“œν•˜λ €λ©΄, κΈ°μ‘΄ Git 연결을 μ œκ±°ν•˜κ³  μƒˆλ‘­κ²Œ μ΄ˆκΈ°ν™”ν•΄μ•Ό ν•©λ‹ˆλ‹€.

βœ… μ™„μ „νžˆ μƒˆλ‘œμš΄ Git 리포둜 μ—…λ‘œλ“œν•˜λŠ” 방법

μ•„λž˜ λͺ…λ Ήμ–΄λ₯Ό μˆœμ„œλŒ€λ‘œ μ‹€ν–‰ν•˜μ„Έμš”:

rm -rf .git
git init
git remote add origin https://github.com/myusername/my-new-repo.git
git add .
git commit -m "Clean start"
git push -u origin main

πŸ“Œ μ„€λͺ…:

  • rm -rf .git: κΈ°μ‘΄ Git 기둝과 연결을 μ™„μ „νžˆ μ‚­μ œν•©λ‹ˆλ‹€.
  • git init: ν˜„μž¬ 폴더λ₯Ό μƒˆλ‘œμš΄ Git λ¦¬ν¬μ§€ν† λ¦¬λ‘œ μ΄ˆκΈ°ν™”ν•©λ‹ˆλ‹€.
  • git remote add origin ...: μƒˆλ‘œμš΄ 리포지토리 μ£Όμ†Œλ₯Ό origin으둜 λ“±λ‘ν•©λ‹ˆλ‹€.
  • git add . 및 git commit: λͺ¨λ“  νŒŒμΌμ„ μ»€λ°‹ν•©λ‹ˆλ‹€.
  • git push: μƒˆλ‘œμš΄ 리포에 졜초 μ—…λ‘œλ“œ(Push)ν•©λ‹ˆλ‹€.

이 과정을 거치면 κΈ°μ‘΄ λ¦¬ν¬μ™€μ˜ 연결은 μ™„μ „νžˆ 제거되고, μƒˆλ‘œμš΄ 독립적인 ν”„λ‘œμ νŠΈλ‘œ 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸŽ‰ 끝

이제 Docker와 DevContainerλ₯Ό ν™œμš©ν•œ C 개발 ν™˜κ²½μ΄ μ™„μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

  • (주의) μœ„ λ‚΄μš©μ€ 처음 μ„€μΉ˜ν•˜λŠ” μ‚¬λžŒμ„ κΈ°μ€€μœΌλ‘œ μž‘μ„±λœ λ‚΄μš©μž…λ‹ˆλ‹€. Data-Structures ν΄λ”μ—μ„œ μžˆλŠ” ν”„λ‘œμ νŠΈλ₯Ό 반볡적으둜 κ°œλ°œν•  경우 5μ—μ„œ 7μž₯의 λ‚΄μš©λ§Œ λ°˜λ³΅ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€.
  • μ–΄λ–€ μš΄μ˜μ²΄μ œμ—μ„œλ“  λ™μΌν•œ ν™˜κ²½μœΌλ‘œ 개발 κ°€λŠ₯
  • VSCode λ‚΄μ—μ„œ μ½”λ“œ μž‘μ„±, 컴파일, λ””λ²„κΉ…κΉŒμ§€ ν•œ λ²ˆμ— κ°€λŠ₯