μ½˜ν…μΈ λ‘œ 이동

λ³΄μ•ˆ λͺ¨λΈ

이 ν”„λ‘μ‹œλŠ” μ‹ λ’°ν•  수 μžˆλŠ” 단일 μ‚¬μš©μž 개발자 μ›Œν¬μŠ€ν…Œμ΄μ…˜μ„ μœ„ν•΄ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ•„λž˜μ˜ κ²½κ³„λŠ” 핡심 μ „μ œ μ‘°κ±΄μž…λ‹ˆλ‹€ β€” λ‹€λ₯Έ ν™˜κ²½μ— λ°°ν¬ν•˜κΈ° 전에 λ°˜λ“œμ‹œ μ½μ–΄λ³΄μ„Έμš”.

이 ν•­λͺ©λ“€μ€ μ„€μ •μ΄λ‚˜ ν™˜κ²½ λ³€μˆ˜λ‘œ λ³€κ²½ν•  수 μ—†μŠ΅λ‹ˆλ‹€:

  • 루프백 바인딩 μ „μš©. 127.0.0.1:3817, ν•˜λ“œμ½”λ”©λ¨. ν˜ΈμŠ€νŠΈλŠ” μ˜λ„μ μœΌλ‘œ μ„€μ • λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.
  • μΈλ°”μš΄λ“œ μš”μ²­μ— 100 MiB λ³Έλ¬Έ 크기 μ œν•œ. 둜컬 ν΄λΌμ΄μ–ΈνŠΈμ˜ κ³ΌλΆ€ν•˜λ₯Ό λ°©μ–΄ν•©λ‹ˆλ‹€.
  • 경둜 전달은 1:1. 경둜 μž¬μž‘μ„± μ—†μŒ, ν—ˆμš© λͺ©λ‘ μ—†μŒ (μ˜λ„λœ 섀계 β€” 투λͺ… ν”„λ‘μ‹œ).
  • ν΄λΌμ΄μ–ΈνŠΈκ°€ μ œκ³΅ν•œ X-Git-RemoteλŠ” μ œκ±°λ©λ‹ˆλ‹€. 검사 미듀웨어가 μ‹€ν–‰λ˜κΈ° 전에 μ œκ±°λ©λ‹ˆλ‹€. 둜컬 ν”„λ‘œμ„ΈμŠ€λŠ” attribution을 μœ„μ‘°ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
  • Authorization 및 x-api-keyλŠ” κ·ΈλŒ€λ‘œ μ „λ‹¬λ©λ‹ˆλ‹€. ν”„λ‘μ‹œλŠ” 호좜자λ₯Ό μΈμ¦ν•˜μ§€ μ•ŠμœΌλ©°, Bifrostκ°€ μœ νš¨μ„±μ„ κ²€μ‚¬ν•©λ‹ˆλ‹€.
  • Authorization 값은 μ ˆλŒ€ κΈ°λ‘λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. has_auth=true/false λΆˆλ¦¬μ–Έλ§Œ κΈ°λ‘λ©λ‹ˆλ‹€.
  • μ›μ‹œ 쿼리 λ¬Έμžμ—΄μ€ κΈ°λ‘λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. has_query=true/false만 κΈ°λ‘λ©λ‹ˆλ‹€.
β”Œβ”€β”€β”€β”€ 신뒰됨 ──────┐ β”Œβ”€β”€β”€β”€β”€β”€ μ‹ λ’°λ˜μ§€ μ•ŠμŒ ──────┐
β”‚ μ‚¬μš©μž β”‚ β”‚ λ„€νŠΈμ›Œν¬ β”‚
β”‚ μ‚¬μš©μžμ˜ IDE β”‚ β”‚ λͺ¨λ“  LAN 호슀트 β”‚
β”‚ 둜컬 ν”„λ‘œμ„ΈμŠ€ β”‚ β”‚ 닀쀑 μ‚¬μš©μž λ¨Έμ‹ μ˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ λ‹€λ₯Έ λͺ¨λ“  μ‚¬μš©μž β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

ν”„λ‘μ‹œλŠ” 동일 λ¨Έμ‹ μ˜ 둜컬 ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‹ λ’°ν•©λ‹ˆλ‹€: 둜컬 ν”„λ‘œμ„ΈμŠ€κ°€ μ œκ³΅ν•˜λŠ” Authorization / x-api-key 헀더λ₯Ό κ·ΈλŒ€λ‘œ μ „λ‹¬ν•©λ‹ˆλ‹€.

  • ν”„λ‘μ‹œ 인증. μ—†μŒ. 루프백에 λ„λ‹¬ν•˜λŠ” λͺ¨λ“  것이 μ „λ‹¬λ©λ‹ˆλ‹€.
  • μ‹œν¬λ¦Ώ μ €μž₯. μ—†μŒ. ν”„λ‘μ‹œλŠ” μ‹œν¬λ¦Ώμ„ λ³΄μœ ν•˜μ§€ μ•ŠμœΌλ©°, API ν‚€λ₯Ό 읽지 μ•ŠμŠ΅λ‹ˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­λ§ˆλ‹€ 헀더에 μ œκ³΅ν•©λ‹ˆλ‹€.
  • 속도 μ œν•œ. μ—†μŒ. ν”„λ‘μ‹œλŠ” 투λͺ…ν•©λ‹ˆλ‹€ β€” Bifrostκ°€ μΏΌν„°λ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€.
  • μž¬μ „μ†‘ λ°©μ§€ / μ„œλͺ…. μ—†μŒ. μœ„μ™€ λ™μΌν•©λ‹ˆλ‹€.
  • 감사 μˆ˜μ§‘. μ—†μŒ. λ‘œκ·ΈλŠ” λ‘œμ»¬μž…λ‹ˆλ‹€. μ€‘μ•™ν™”λœ ν…”λ ˆλ©”νŠΈλ¦¬λŠ” λ²”μœ„ λ°–μž…λ‹ˆλ‹€.
λ ˆμ΄μ–΄λ™μž‘
pprof κ°€λ“œpprof.enable: true인 경우, μ‹œμž‘ μ‹œ 바인딩 μ£Όμ†Œκ°€ 루프백(127.0.0.1, localhost, ::1)인지 κ²€μ¦λ©λ‹ˆλ‹€. LAN 바인딩은 κ±°λΆ€λ©λ‹ˆλ‹€.
http.MaxBytesHandlerλͺ¨λ“  μΈλ°”μš΄λ“œμ— 100 MiB λ³Έλ¬Έ 크기 μ œν•œ 적용.
requestLogger 슀크럽Authorization, x-api-key, Cookie, Set-Cookieκ°€ λ‚œλ…ν™”λ©λ‹ˆλ‹€ (쑴재 μ—¬λΆ€λ§Œ 기둝).
μ•ˆμ „ν•œ μ„œλΈŒν”„λ‘œμ„ΈμŠ€git remote -v, lsof, ps λͺ¨λ‘ exec.CommandContext와 Cmd.Dir μ‚¬μš© (git -C cwd μ•„λ‹˜) β€” μ…Έ μ—†μŒ, μΈν„°ν΄λ ˆμ΄μ…˜ μ—†μŒ.
νƒ€μž„μ•„μ›ƒ κ°€λ“œgit remote -v 및 ν”„λ‘œμ„ΈμŠ€ 검사에 2초; ReadHeaderTimeout 30초.
평문 μ—…μŠ€νŠΈλ¦Ό κ²½κ³ upstream_url이 http://둜 μ‹œμž‘ν•˜λ©΄ 잘λͺ»λœ 섀정이 쑰용히 λ„˜μ–΄κ°€μ§€ μ•Šλ„λ‘ ν”„λ‘μ‹œκ°€ μ‹œμž‘ κ²½κ³ λ₯Ό κΈ°λ‘ν•©λ‹ˆλ‹€.
  • Linux /proc/<otherUser>/fd/*λŠ” EACCESλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€ β€” λ‹€λ₯Έ μ‚¬μš©μžμ˜ κ²€μ‚¬λŠ” μ˜λ„μ μœΌλ‘œ μ§€μ›λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν”„λ‘μ‹œλŠ” X-Git-Remote 헀더 없이 μš”μ²­μ„ μ „λ‹¬ν•©λ‹ˆλ‹€.
  • macOSλŠ” lsofλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. lsofκ°€ μ—†κ±°λ‚˜ μ œν•œλœ 경우, attribution은 헀더 μ—†μŒμœΌλ‘œ ν΄λ°±ν•©λ‹ˆλ‹€.
  • Windows PEB 탐색은 SeDebugPrivilegeκ°€ ν•„μš”ν•©λ‹ˆλ‹€ (λ¨Έμ‹  전체 μ„œλΉ„μŠ€μ˜ LocalSystem은 기본적으둜 이λ₯Ό 보유). 32λΉ„νŠΈ λŒ€μƒ ν”„λ‘œμ„ΈμŠ€λŠ” μ§€μ›λ˜μ§€ μ•ŠμœΌλ©° ErrUnsupportedBitnessλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
  • 닀쀑 μ‚¬μš©μž Linux/macOS ν˜ΈμŠ€νŠΈμ—μ„œ ꡐ차 μ‚¬μš©μž 연결을 κ±°λΆ€ν•˜λŠ” 선택적 SO_PEERCRED / LOCAL_PEERCRED peer-UID 확인.
  • μ„€μ • κ°€λŠ₯ν•œ λ³Έλ¬Έ 크기 μ œν•œ (ν˜„μž¬ 컴파일 νƒ€μž„ μƒμˆ˜).