# [[Link Seam (링크 접점)]] ## πŸ“Œ Brief Summary 링크 접점(Link Seam)은 μ†ŒμŠ€ μ½”λ“œλ₯Ό 직접 μˆ˜μ •ν•˜μ§€ μ•Šκ³  ν”„λ‘œκ·Έλž¨μ˜ λ™μž‘μ„ λ³€κ²½ν•˜κ±°λ‚˜ λŒ€μ²΄ν•  수 μžˆλŠ” 접점(Seam)의 ν•œ μ’…λ₯˜λ‘œ, ν”„λ‘œκ·Έλž¨ λΉŒλ“œ ν”„λ‘œμ„ΈμŠ€μ˜ 링킹(Linking) λ‹¨κ³„μ—μ„œ λ°œμƒν•©λ‹ˆλ‹€ [1]. μ–Έμ–΄μ˜ 컴파일 λ˜λŠ” λΉŒλ“œ μ‹œμŠ€ν…œμ΄ μ™ΈλΆ€ μ½”λ“œλ₯Ό μ—°κ²°ν•˜λŠ” 방식을 ν™œμš©ν•˜μ—¬, ν…ŒμŠ€νŠΈ μ‹œ ν”„λ‘œλ•μ…˜ μ½”λ“œ λŒ€μ‹  ν…ŒμŠ€νŠΈμš© μŠ€ν…(Stub)μ΄λ‚˜ κ°€μ§œ(Fake) 라이브러리λ₯Ό μ—°κ²°ν•˜λ„λ‘ μœ λ„ν•©λ‹ˆλ‹€ [1, 2]. μ΄λŠ” 특히 타사 라이브러리처럼 λ³€κ²½ν•˜κΈ° μ–΄λ €μš΄ 전역적인 μ˜μ‘΄μ„±μ„ λŠμ–΄λ‚΄κ³  μ½”λ“œλ₯Ό λ…λ¦½μ μœΌλ‘œ ν…ŒμŠ€νŠΈν•  수 있게 λ§Œλ“œλŠ” 데 μœ μš©ν•˜κ²Œ ν™œμš©λ©λ‹ˆλ‹€ [2]. ## πŸ“– Core Content * **λ™μž‘ 원리와 언어별 κ΅¬ν˜„ 방식:** 링크 접점은 μ†ŒμŠ€ μ½”λ“œκ°€ 쀑간 ν‘œν˜„(Intermediate Representation)으둜 컴파일된 ν›„, 링컀(Linker)λ‚˜ 동적 링킹 μ‹œμŠ€ν…œμ— μ˜ν•΄ μ™ΈλΆ€ μ°Έμ‘°κ°€ ν•΄κ²°λ˜λŠ” 과정을 μ΄μš©ν•©λ‹ˆλ‹€ [1]. * **C/C++의 정적 링킹(Static Linking):** Cλ‚˜ C++κ³Ό 같이 λ³„λ„μ˜ 링컀λ₯Ό μ‚¬μš©ν•˜λŠ” μ–Έμ–΄μ—μ„œλŠ” λŒ€μ²΄ν•˜κ³ μž ν•˜λŠ” ν΄λž˜μŠ€λ‚˜ ν•¨μˆ˜λ₯Ό μœ„ν•œ λ³„λ„μ˜ ν…ŒμŠ€νŠΈμš© 라이브러리λ₯Ό μƒμ„±ν•œ λ’€, λΉŒλ“œ 슀크립트λ₯Ό μˆ˜μ •ν•˜μ—¬ ν”„λ‘œλ•μ…˜ 라이브러리 λŒ€μ‹  ν•΄λ‹Ή ν…ŒμŠ€νŠΈ 라이브러리λ₯Ό λ§ν¬ν•˜λŠ” λ°©μ‹μœΌλ‘œ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [1, 2]. * **Java의 동적 링킹(Dynamic Linking):** Java와 같은 μ–Έμ–΄μ—μ„œλŠ” μ»΄νŒŒμΌλŸ¬κ°€ μ΄λ©΄μ—μ„œ 링킹을 μˆ˜ν–‰ν•©λ‹ˆλ‹€ [1]. 이 경우 `classpath` ν™˜κ²½ λ³€μˆ˜λ₯Ό μ‘°μž‘ν•˜μ—¬ μ‹œμŠ€ν…œμ΄ μ›λž˜μ˜ 클래슀 λŒ€μ‹  λ‹€λ₯Έ 디렉토리에 배치된 동λͺ…(同名)의 ν…ŒμŠ€νŠΈμš© 클래슀λ₯Ό λ¨Όμ € 찾도둝 ν•¨μœΌλ‘œμ¨ 링크 접점을 ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [3, 4]. * **ν™œμ„±ν™” 지점 (Enabling Point):** 링크 μ ‘μ μ˜ λ™μž‘μ„ κ²°μ •μ§“λŠ” ν™œμ„±ν™” 지점은 항상 ν”„λ‘œκ·Έλž¨ μ†ŒμŠ€ μ½”λ“œ **μ™ΈλΆ€**에 μœ„μΉ˜ν•©λ‹ˆλ‹€ [5]. ν™˜κ²½ λ³€μˆ˜ μ„€μ •(`classpath` λ“±), λΉŒλ“œ 슀크립트(makefile λ“±), λ˜λŠ” 배포 슀크립트 λ“± μ½”λ“œ λ°–μ˜ ꡬ성 μš”μ†Œλ₯Ό 톡해 ν…ŒμŠ€νŠΈμš© λ™μž‘κ³Ό ν”„λ‘œλ•μ…˜ λ™μž‘ 쀑 μ–΄λ–€ 것을 μ‚¬μš©ν• μ§€ κ²°μ •ν•©λ‹ˆλ‹€ [4-6]. * **μ˜μ‘΄μ„± 뢄리와 감지 (Separation and Sensing):** μ½”λ“œλ² μ΄μŠ€ μ „λ°˜μ— 걸쳐 타사 κ·Έλž˜ν”½ λΌμ΄λΈŒλŸ¬λ¦¬μ™€ 같은 μ˜μ‘΄μ„±μ΄ 깊게 퍼져 μžˆμ„ λ•Œ 링크 접점은 맀우 κ°•λ ₯ν•œ 도ꡬ가 λ©λ‹ˆλ‹€ [2, 7]. ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•΄ λ‹¨μˆœνžˆ 아무 λ™μž‘λ„ ν•˜μ§€ μ•ŠλŠ” 빈 ν•¨μˆ˜λ₯Ό λ§Œλ“€μ–΄ μ˜μ‘΄μ„±μ„ 뢄리(Separation)ν•  μˆ˜λ„ 있고, 더 λ‚˜μ•„κ°€ 큐(Queue)와 같은 데이터 ꡬ쑰λ₯Ό μΆ”κ°€ν•΄ ν•¨μˆ˜ 호좜 λ‚΄μ—­κ³Ό μ „λ‹¬λœ νŒŒλΌλ―Έν„°λ₯Ό κΈ°λ‘ν•¨μœΌλ‘œμ¨ μ½”λ“œμ˜ λ‚΄λΆ€ μƒνƒœλ₯Ό ν…ŒμŠ€νŠΈμ—μ„œ 검증할 수 μžˆλ„λ‘ 감지(Sensing)ν•˜λŠ” μš©λ„λ‘œλ„ ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [2, 8]. ## βš–οΈ Trade-offs & Caveats * **μΈμ§€μ˜ 어렀움:** 링크 μ ‘μ μ˜ ν™œμ„±ν™” 지점이 μ†ŒμŠ€ μ½”λ“œ ν…μŠ€νŠΈ μ™ΈλΆ€(예: λΉŒλ“œ μŠ€ν¬λ¦½νŠΈλ‚˜ μ‹€ν–‰ ν™˜κ²½)에 μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ—, κ°œλ°œμžκ°€ μ΄λŸ¬ν•œ 접점이 μ‚¬μš©λ˜κ³  μžˆλ‹€λŠ” 사싀을 λͺ…ν™•νžˆ μ•Œμ•„μ°¨λ¦¬κΈ° μ–΄λ €μšΈ 수 μžˆμŠ΅λ‹ˆλ‹€ [5]. * **ν™˜κ²½ κ΄€λ¦¬μ˜ λ³΅μž‘μ„±:** 링크 접점을 μ‚¬μš©ν•  λ•ŒλŠ” ν…ŒμŠ€νŠΈ ν™˜κ²½κ³Ό ν”„λ‘œλ•μ…˜ ν™˜κ²½ κ°„μ˜ 차이λ₯Ό 맀우 λͺ…ν™•ν•˜κ²Œ κ΄€λ¦¬ν•΄μ•Όλ§Œ λ°°ν¬λ‚˜ ν…ŒμŠ€νŠΈ κ³Όμ •μ—μ„œ ν˜Όλž€μ΄ λ°œμƒν•˜λŠ” 것을 λ°©μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [9]. * **μœ μ§€λ³΄μˆ˜μ˜ ν•œκ³„μ™€ μ‚¬μš© 원칙:** 객체 μ§€ν–₯ μ–Έμ–΄μ—μ„œλŠ” 객체 접점(Object Seam)이 κ°€μž₯ λͺ…μ‹œμ μ΄κ³  ꢌμž₯λ˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€ [10]. 링크 μ ‘μ μ΄λ‚˜ μ „μ²˜λ¦¬ 접점(Preprocessing Seam)은 객체 접점에 λΉ„ν•΄ λͺ…μ‹œμ μ΄μ§€ μ•ŠμœΌλ©°, 이에 μ˜μ‘΄ν•˜λŠ” ν…ŒμŠ€νŠΈ μ½”λ“œλŠ” μœ μ§€λ³΄μˆ˜ν•˜κΈ° κΉŒλ‹€λ‘œμšΈ 수 μžˆμŠ΅λ‹ˆλ‹€ [10]. λ”°λΌμ„œ μ΄λŸ¬ν•œ 접점듀은 μ˜μ‘΄μ„±μ΄ μ‹œμŠ€ν…œ μ „λ°˜μ— 퍼져 μžˆμ–΄ 객체 접점을 μ‚¬μš©ν•˜κΈ° λ“± 더 λ‚˜μ€ λŒ€μ•ˆμ΄ μ—†λŠ” κ²½μš°μ— ν•œν•΄ μ œν•œμ μœΌλ‘œ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€ [10]. --- *Last updated: 2026-05-03*