프로그래밍공부(Programming Study)

Potpourri (자잘하지만 중요한 주제들)

Chann._.y 2025. 9. 10.
728x90

 

1. Keyboard Remapping (키보드 리매핑)

  • 개념: 키보드에서 입력되는 키 신호를 다른 키나 명령으로 바꿔치기하는 것.
  • 왜 필요해?
    • Caps Lock 키는 손가락 위치가 좋지만 거의 쓰지 않음 → Ctrl이나 Esc로 바꾸면 훨씬 효율적.
    • 자주 쓰는 단축키나 텍스트(이메일 주소, 학번 등)를 단일 키로 매핑하면 반복 입력을 줄일 수 있음.
  • 예시:
    • Caps Lock → Esc (Vim 사용자들이 즐겨 씀)
    • Ctrl ↔ Command/Meta (맥/윈도우 키보드 혼용할 때 편리)
    • PrtSc → 음악 재생/일시정지
  • 도구:
    • macOS: Karabiner-Elements, skhd, BetterTouchTool
    • Linux: xmodmap, Autokey
    • Windows: AutoHotkey, SharpKeys
    • QMK Firmware: 하드웨어 차원에서 직접 키맵핑 가능

👉 요약: 리매핑은 단순 편의 기능을 넘어서 개발자의 손목 건강, 생산성과 직결된다.


2. Daemons (데몬)

  • 개념: 사용자가 직접 실행하지 않아도, 시스템이 부팅되면 자동으로 실행되어 항상 백그라운드에서 돌아가는 프로그램. 이름 끝에 d가 붙는 경우가 많음.
    • 예: sshd (SSH 접속 대기), systemd (Linux 서비스 관리자).
  • 시스템 관리:
    • systemctl status → 현재 실행 중인 데몬 확인
    • systemctl start/stop/restart → 서비스 제어
  • 예시:
    • 웹 서버: nginx → HTTP 요청을 계속 대기 중
    • DB 서버: mysqld → 클라이언트 요청을 기다림

👉 데몬은 서비스를 항상 켜둔 상태라고 보면 된다. 우리가 접속할 때마다 서버가 켜지는 게 아니라, 이미 대기 중이다.


3. FUSE (Filesystem in User Space)

  • 문제 상황: 전통적인 파일시스템은 커널 레벨에서만 구현 가능. 하지만 보통 사용자가 파일시스템을 마음대로 만들고 싶을 때 커널 코드를 짜고 컴파일하는 건 위험하고 번거롭다.
  • 해결책: FUSE는 사용자 공간에서 “가짜 파일시스템”을 만들 수 있게 해준다.
  • 예시:
    • sshfs: 원격 서버의 디렉토리를 로컬에 마운트 (파일이 실제론 서버에 있지만, 내 PC에서 폴더처럼 접근 가능).
    • rclone: Dropbox, Google Drive, S3 같은 클라우드를 내 컴퓨터에 디스크처럼 연결.
    • gocryptfs: 디렉토리 안에 파일은 전부 암호화되지만, 마운트된 폴더에서는 평문으로 보임.

👉 FUSE는 “파일시스템 호출을 내가 원하는 코드로 가로채서” 동작을 바꾸는 프레임워크.


4. Backups (백업)

  • 중요 포인트:
    • 동기화 ≠ 백업: Dropbox나 RAID는 데이터가 삭제·오염되면 그대로 전파됨 → 진짜 백업은 과거 상태로 돌릴 수 있어야 한다.
    • 좋은 백업의 조건:
      • 버저닝: 특정 날짜 시점으로 복구 가능
      • 중복제거(Deduplication): 바뀐 부분만 저장해서 공간 절약
      • 보안: 백업도 암호화 + 삭제 권한 관리 필요
  • 실무적 관점:
    • 집 외장하드 = 화재/도난 시 위험 → 오프사이트(클라우드, 다른 지역) 필수
    • 정기적으로 복구 테스트해야 함 (백업만 하고 복구 실패하는 경우 많음).

👉 백업은 “복사본을 어디 두느냐”가 아니라, 재해가 났을 때 실제로 복구할 수 있느냐가 핵심.


5. APIs (응용 프로그램 인터페이스)

  • 개념: 다른 서비스의 데이터나 기능을 코드로 접근할 수 있는 창구.
  • 형식:
  • 인증 방식:
    • API Key / Token: 서비스에서 발급하는 비밀키
    • OAuth: 제한된 권한만 가진 임시 토큰 (예: 구글 로그인)
  • 활용 예시:
    • 날씨 API → curl https://api.weather.gov/...
    • IFTTT → 여러 서비스 API를 연결해 자동화 (“메일 오면 Slack으로 알림” 같은 것).

👉 API는 “사람이 클릭해서 쓰는 웹서비스”를 코드가 대신 호출할 수 있게 해주는 방법이다.


6. Common Command-line Flags (CLI 플래그 공통 패턴)

  • --help: 도움말
  • --version: 버전 정보
  • --verbose / -v: 상세 로그 (중첩 가능: -vvv)
  • --quiet: 오류만 출력
  • --dry-run: 실제 실행 안 하고 시뮬레이션만
  • --: 플래그 해석 중단 (예: rm -- -r)

👉 이 패턴을 알면, 낯선 명령어를 접해도 대략 어떻게 쓰는지 추론할 수 있다.


7. Window Managers

  • Floating WM: 일반적인 방식 (창을 자유롭게 움직이고 겹침) → Windows/macOS 기본
  • Tiling WM: 창을 타일처럼 분할해서 겹치지 않음 (tmux와 비슷)
    • 새 창 열면 자동으로 분할
    • 키보드로 크기 조절·이동 가능

👉 마우스 없이 키보드만으로 작업 환경을 빠르게 전환할 수 있어 개발자들이 선호.


8. VPNs

  • 정의: 인터넷 서비스 제공자가 아니라 VPN 서버를 통해 트래픽을 보내는 것.
  • 이점:
    • 공공 와이파이(공항 등)에서 암호화된 터널 확보
    • 위치 숨김 (IP가 VPN 서버 위치로 표시됨)
  • 주의점:
    • ISP 대신 VPN 업체를 신뢰해야 함 → 나쁜 업체는 로그를 팔아먹음
    • 이미 HTTPS가 대부분이라 집에서 쓰는 건 효과 미미할 수 있음

👉 VPN은 만능 보안 솔루션이 아니라, “신뢰 대상을 바꾸는 것”이다.


9. Markdown

  • 개념: 가벼운 문서 마크업 언어 → 글에 서식 추가 (굵게, 링크, 코드 등).
  • 예시:
    • # 제목
    • **굵게**, *기울임*
    • - 리스트, 1. 번호 리스트
    • 코드블록
    • [링크](url)

👉 Word처럼 무겁지 않고, 어디서나 호환 가능. GitHub, 블로그, 노트 툴 등에서 기본 지원.


10. Hammerspoon (macOS 자동화)

  • 개념: macOS 자동화 툴. Lua 스크립트로 시스템 이벤트에 반응.
  • 예시:
    • 단축키 → 창 이동/정렬
    • 특정 Wi-Fi 접속 → 소리 자동 음소거
    • 전원 어댑터 구분 → 알림 표시

👉 macOS에서 “원하는 건 거의 다 자동화 가능”하게 만들어주는 프레임워크.


11. Booting + Live USBs

  • Booting: PC 켜면 BIOS/UEFI가 하드웨어 초기화 후 OS를 실행.
  • Live USB:
    • USB에 운영체제를 넣어 직접 부팅 가능.
    • OS가 깨졌을 때 복구용으로 사용.

👉 Live USB는 “응급용 OS CD/USB” 같은 것.


12. Docker, Vagrant, VMs, Cloud, OpenStack

  • VM (Virtual Machine): 운영체제 전체를 가상화.
  • Docker (컨테이너): OS 공유, 훨씬 가벼움.
  • Vagrant: VM 환경을 코드(Vagrantfile)로 정의, 쉽게 재현.
  • Cloud (AWS/GCP/Azure): 물리 장비 없이 컴퓨팅 자원 대여 가능.
  • OpenStack: 오픈소스 클라우드 플랫폼 (AWS 같은 내부 프라이빗 클라우드 구축용).

👉 “내 PC에서 못하는 실험/환경”을 VM이나 클라우드에서 대신 돌릴 수 있다.


13. Notebook Programming

  • 개념: 코드 + 실행 결과 + 설명을 한 문서에서 볼 수 있는 개발 환경.
  • 예시:
    • Jupyter Notebook (데이터 분석, 머신러닝)
    • Mathematica (수학 계산, 시각화)

👉 “실험 노트처럼 코드를 기록/실행/시각화”하는 도구.


14. GitHub

  • 역할: 오픈소스 개발 협업 플랫폼.
  • 기여 방식:
    • Issue: 버그 리포트/기능 제안
    • Pull Request(PR): 코드 수정 제안 → 리뷰 → 병합

👉 단순히 코드 저장소가 아니라, 개발자 커뮤니티와 협업의 중심이다.

728x90

댓글