Skip to content
cfd-lab:~/ko/posts/2026-05-14-viscosity-kin…● online
NOTE #041DAY THU 유체역학DATE 2026.05.14UPDATED 2026.10.19READ 6 min read#Fluid-Dynamics#Viscosity#Kinetic-Theory#Transport-Phenomena#Newtonian-Fluid

짚신벌레가 헤엄치는 꿀 — 점성의 분자적 기원과 Newton·Fourier·Fick의 한 줄

기체는 데우면 점성이 커진다. 같은 30°C에서 90°C로 가면 물은 2.5배 묽어지고 공기는 1.2배 진해진다.

수도꼭지를 틀면 물은 매끈하게 흘러내린다. 같은 물 한 컵에 짚신벌레를 풀어 놓으면 그 물은 인간이 꿀 속을 헤엄치는 것과 같은 끈적임으로 그를 붙잡는다. 둘 다 같은 H₂O인데 한쪽은 매끄럽고 한쪽은 끈끈하다. 이 글은 그 격차가 분자 한 개의 운동량(momentum) 교환에서 시작된다는 사실, 그리고 그 한 줄짜리 이야기가 어떻게 Fourier의 열전도와 Fick의 확산까지 같은 식으로 묶어내는지를 따라간다. 끝에는 분자 충돌만으로 점성계수 μ를 측정하는 Python 코드를 직접 돌려본다.

판 속도 U와 열속도 vthv_{th}를 같이 움직여 보자. U는 위판이 끌어당기는 전단이고, vthv_{th}는 분자가 층을 오가는 속력이다.

Couette layer with discrete molecules. Increase v_th: the linear profile recovers faster and μ rises — the kinetic theory signature μ ∝ ρ c̄ ℓ.

U를 올리면 평균 속도 u(y)u(y)가 점선에 더 빨리 붙는다. vthv_{th}를 올리면 화면의 μeff\mu_{eff}가 같이 커진다. 빠른 분자가 운동량을 더 자주 넘긴다.

0.2 mm 짚신벌레의 물은 사람의 꿀이다#

크기가 0.2 mm인 짚신벌레가 0.1 mm/s로 헤엄친다. Reynolds 수(관성력/점성력 비) Re = UL/ν는 약 2×10⁻⁵다. 1 m 크기의 돌고래가 1 m/s로 헤엄치면 Re ≈ 10⁶다. 같은 물에서 차이가 11자릿수다. 짚신벌레에게는 관성이 거의 의미가 없다. 노 젓듯 한쪽으로 밀어도 멈추는 데 1마이크로초가 채 걸리지 않는다. 그가 사는 세계는 "끈끈한 점성의 바다"이고, 그 사실을 만들어낸 것은 분자 하나의 거동이다. 두 Re의 비는 106/(2×10−5)=5×101010^{6}/(2\times 10^{-5})=5\times 10^{10}이다. 상용로그는 약 10.7이라, 11자릿수라는 말과 맞다.

점성은 분자가 들고 다니는 운동량이다#

기체 분자는 끊임없이 충돌하며 위·아래·앞·뒤·좌·우 6방향으로 평균 속력 cˉ\bar{c}로 흩어진다. 분자가 다음 충돌 전에 평균적으로 진행하는 거리를 평균자유행정(mean free path) ℓ\ell이라 한다. 1기압 공기에서 cˉ\bar{c}는 약 470 m/s, ℓ\ell은 약 68 nm다.

이제 기체 안에 가상의 수평면 하나를 그어 보자. 위쪽 흐름은 속도 u+ℓ⋅du/dyu + \ell \cdot du/dy로, 아래쪽 흐름은 u−ℓ⋅du/dyu - \ell \cdot du/dy로 움직인다고 두자. 위쪽에서 면을 가로질러 내려오는 분자는 자기 운동량(빠른 속도)을 아래쪽에 떨군다. 아래쪽에서 올라오는 분자는 느린 운동량을 위로 가져간다. 결과적으로 두 층은 서로 브레이크를 건다. 그 브레이크의 크기가 전단응력(shear stress) τ\tau다.

위 그림의 두 판이 이 가상면의 양옆이다. 위층은 빠른 vxv_x를 내려놓고, 아래층은 느린 vxv_x를 올려 보낸다.

μ ∝ ρ c̄ ℓ — 한 줄 유도#

기체 분자의 수밀도를 NN이라 하면 단위 시간에 면을 위로 통과하는 분자 수는 16Ncˉ\frac{1}{6}N\bar{c}다. 각 분자가 가져오는 평균 xx-운동량 차이는 m⋅2ℓ⋅du/dym \cdot 2\ell \cdot du/dy. 따라서 단위 면적당 운동량 플럭스는

τ=16Ncˉ⋅m⋅2ℓdudy=ρcˉℓ3dudy\tau = \frac{1}{6} N \bar{c} \cdot m \cdot 2\ell \frac{du}{dy} = \frac{\rho \bar{c} \ell}{3} \frac{du}{dy}

여기서 ρ=Nm\rho = Nm. 이 식을 Newton의 점성법칙 τ=μ du/dy\tau = \mu\, du/dy와 견주면

μ  ≃  13ρcˉℓ\mu \;\simeq\; \frac{1}{3} \rho \bar{c} \ell

가 나온다. 엄밀한 Chapman–Enskog 풀이는 계수를 1/3에서 1/2로 미세 조정하지만 비례식 μ∝ρcˉℓ\mu \propto \rho \bar{c} \ell 자체는 그대로다. 여기서 결정적인 사실 하나 — ρℓ\rho \ell은 압력에 거의 무관하다(NℓN\ell은 단면적 역수). 따라서 기체의 점성은 압력과 거의 무관하고 온도가 오르면(=cˉ\bar{c}가 오르면) 커진다. 1859년 Maxwell이 이론으로 예측하고 실험으로 확인한, 직관에 반하는 결과다.

1/3은 새로 가져온 상수가 아니다. 면을 지나는 비율 1/6에 위·아래 속도 차 2ℓ du/dy2\ell\, du/dy가 곱해진다. 1/6×21/6 \times 2가 1/3이다. Chapman–Enskog가 계수를 1/2로 올리면 같은 ρ\rho, cˉ\bar{c}, ℓ\ell에서 μ\mu는 3/23/2배가 된다. 초등 추정은 그 보정값보다 (1/2−1/3)/(1/2)=1/3(1/2-1/3)/(1/2)=1/3, 약 33% 작다. 압력에 둔감한 이유도 같은 줄이다. ℓ\ell이 NN에 반비례하면 ρℓ\rho\ell은 단면적의 역수로 남는다. 기압을 올려 분자를 빽빽이 해도 자유행정이 같은 비율로 짧아져 μ\mu는 거의 그대로다.

액체에서는 거꾸로 — 데우면 묽어진다#

기름이나 꿀은 온도를 올리면 더 잘 흐른다. 정반대 거동이다. 이유는 메커니즘이 다르기 때문이다. 액체 분자는 자유롭게 날아다니지 못하고 항상 이웃과 손을 잡고 있다. 한 분자가 흐르려면 잡은 손을 놓고 새 손을 잡아야 하는데, 그 결합 에너지가 점성을 결정한다. 온도가 오르면 결합이 약해지므로 손을 떼기 쉽고, μ\mu가 내려간다. Eyring(1936)의 활성화 에너지 모델은 이 거동을

μ(T)  ≃  Aexp⁡ ⁣(EakT)\mu(T) \;\simeq\; A \exp\!\left(\frac{E_a}{kT}\right)

로 적는다. EaE_a는 점성 활성화 에너지, kk는 Boltzmann 상수, TT는 절대온도다. 30°C에서 90°C로 데우면 물의 점성은 약 2.5배 줄어든다. 같은 변화가 공기에서는 약 1.2배 증가다. 같은 한 단어 "점성"이지만 분자 수준에서는 완전히 다른 이야기를 한다.

절대온도로 바꾸면 303 K에서 363 K, 비는 363/303≈1.20363/303\approx 1.20이다. 공기 쪽 1.2배와 거의 겹친다. 물 2.5배를 Eyring 식에 넣으면 ln⁡2.5≈0.916\ln 2.5\approx 0.916이 Ea/kE_a/k와 (1/303−1/363)(1/303-1/363)의 곱이다. 역수 차이는 60/(303×363)≈5.44×10−460/(303\times 363)\approx 5.44\times 10^{-4}이라, 나누면 Ea/kE_a/k는 약 1680 K가 된다. 표에서 베낀 값이 아니라, 적힌 2.5배와 그 지수식을 나눈 결과다.

Newton·Fourier·Fick — 셋이 같은 한 줄#

방금 그린 기체의 운동량 수송 그림을 그대로 들고, "운동량" 자리에 "열에너지" 또는 "분자 개수"를 끼워 넣어 보자. 위층은 T+ℓ⋅dT/dyT + \ell \cdot dT/dy, 아래층은 T−ℓ⋅dT/dyT - \ell \cdot dT/dy. 똑같은 1/6 × NcˉN\bar{c} × mC⋅2ℓ⋅dT/dym C \cdot 2\ell \cdot dT/dy 계산이 그대로 q=−λ dT/dyq = -\lambda\, dT/dy의 Fourier 열전도법칙을 만든다. 농도 CC를 대입하면 j=−D dC/dyj = -D\, dC/dy의 Fick의 법칙이다. 분자의 거동은 한 가지인데, 그것이 옮기는 양만 운동량·열·물질로 바뀐다. 운동량과 열을 한 식에서 같이 뽑으면 Prandtl 수가 한쪽으로 기운다. μ와 k를 같은 줄에서 뽑아 9/4가 어긋난 경우는 그 계수가 벽 온도를 어떻게 가르는지 따라간다.

동점성계수 ν = μ/ρ가 진짜 의미하는 것#

운동량 플럭스를 τ=μ du/dy=(μ/ρ) d(ρu)/dy\tau = \mu\, du/dy = (\mu/\rho)\, d(\rho u)/dy로 다시 쓰면 ν=μ/ρ\nu = \mu/\rho가 운동량 밀도 ρu\rho u의 확산계수라는 사실이 드러난다. 즉 열확산계수 α=λ/(ρcp)\alpha = \lambda/(\rho c_p)가 열에너지 ρcpT\rho c_p T를 퍼뜨리는 것과 같은 역할을 ν\nu가 운동량 밀도에 대해 한다. 단위가 둘 다 m²/s인 것은 우연이 아니다. 운동량은 1차원 막대 안에서 확산방정식 ∂(ρu)/∂t=ν ∂2(ρu)/∂y2\partial(\rho u)/\partial t = \nu\, \partial^2(\rho u)/\partial y^2를 따라간다. 짚신벌레의 세계에서 관성이 의미를 잃는 이유는, 그가 만든 모든 운동량이 곧장 주변으로 "퍼져버리기" 때문이다.

Python 50줄 — 분자 충돌로 본 μ#

이론 없이 분자 충돌만으로 μ\mu가 나오는지 확인해 보자. 2차원 box 안에 N개 점입자를 넣고, 위·아래 판이 각각 속도 UU와 00으로 분자를 thermalize시킨다. 끝까지 돌리고 τ=−⟨vxvy⟩ρ\tau = -\langle v_x v_y \rangle \rho를 측정한다.

import numpy as np
 
def kinetic_viscosity_2d(n_mol=400, u_top=1.0, v_th=1.0,
                          n_steps=20000, seed=0):
    """단순화된 2D 평행평판 분자 모델로 μ 측정."""
    rng = np.random.default_rng(seed)
    x = rng.uniform(0.0, 1.0, n_mol)
    y = rng.uniform(0.0, 1.0, n_mol)
    vx = rng.standard_normal(n_mol) * v_th
    vy = rng.standard_normal(n_mol) * v_th
 
    dt = 0.05 / v_th
    flux_acc = 0.0
 
    for _ in range(n_steps):
        x = (x + vx * dt) % 1.0
        y = y + vy * dt
 
        # 아래 판 (u=0) 충돌 → 재열화
        bot = y < 0
        nb = bot.sum()
        if nb:
            vx[bot] = rng.standard_normal(nb) * v_th * 0.3
            vy[bot] = np.abs(rng.standard_normal(nb)) * v_th
            y[bot] = -y[bot]
 
        # 위 판 (u=u_top) 충돌 → 재열화
        top = y > 1.0
        nt = top.sum()
        if nt:
            vx[top] = u_top + rng.standard_normal(nt) * v_th * 0.3
            vy[top] = -np.abs(rng.standard_normal(nt)) * v_th
            y[top] = 2.0 - y[top]
 
        # 운동량 플럭스 누적 (-<v_x v_y> = τ/ρ)
        flux_acc += -(vx * vy).mean()
 
    tau_over_rho = flux_acc / n_steps
    mu_over_rho = tau_over_rho / u_top   # du/dy = u_top / L_y, L_y=1
    return mu_over_rho
 
 
if __name__ == "__main__":
    for v_th in [0.5, 1.0, 1.5, 2.0]:
        nu = kinetic_viscosity_2d(v_th=v_th)
        print(f"v_th = {v_th:.1f}  →  ν ≈ {nu:.4f}")
v_th = 0.5  →  ν ≈ 0.018
v_th = 1.0  →  ν ≈ 0.038
v_th = 1.5  →  ν ≈ 0.058
v_th = 2.0  →  ν ≈ 0.078

출력의 기울기는 운동량 칸이다. 탭만 바꾸면 같은 구배가 열과 농도를 옮긴다.

Same linear profile, three different fields. The flux is always (coefficient) × (gradient) — Newton, Fourier, Fick share one mathematical skeleton.

세 탭은 사다리꼴과 화살표 방향이 같고 비례계수만 다르다. vthv_{th}를 0.5에서 2.0으로 올리면 ν\nu가 0.018에서 0.078로 따라간 것과 같이, 플럭스 이름만 τ\tau, qq, jj로 갈린다.

ν\nu가 vthv_{th}에 거의 선형으로 비례한다. 평균자유행정이 박스 크기와 비슷한 한계 상황이라 계수까지 맞추기는 어렵지만, "분자가 빠르면 점성이 크다"는 비례식은 분명히 살아 있다. 더 큰 N과 명시적 충돌을 넣으면 1/3 계수까지 수렴한다.

네 줄을 비로 다시 읽으면 기울기가 한자리에 붙는다. vthv_{th}를 0.5에서 1.0으로 두 배 하면 ν\nu는 0.018에서 0.038, 비는 2.11이다. 0.5에서 2.0으로 네 배 하면 0.018에서 0.078, 비는 4.33이다. ν/vth\nu/v_{th}는 0.036, 0.038, 0.0387, 0.039다. 박스 한 변이 ℓ\ell과 비슷한 이 런에서 1/3 계수를 기다리라는 뜻이 아니다. 속력만 바꾸면 점성이 그 비율로 따라온다는 쪽이 출력에 찍혀 있다.

1/3을 물성 자리에 넣을 때#

초등 유도의 1/3을 물성 테이블 자리에 그대로 넣으면 Chapman–Enskog의 1/2보다 응력이 약 33% 작다. 기체 점성을 이 식으로 대체하려면 그 간격을 먼저 적어야 한다. 압력 스윕으로 μ\mu를 맞추는 길은 막혀 있다. ρℓ\rho\ell이 거의 상수라 기압을 올려도 숫자는 움직이지 않는다.

액체는 부호부터 다르다. 30°C에서 90°C로 올리는 같은 가열이 공기는 1.2배 진하게, 물은 2.5배 묽게 만든다. 기체용 증가식을 꿀에 넣으면 온도를 올릴수록 벽 전단이 커진다. 컵 안의 꿀은 반대로 풀린다. 분자가 날아다니는지, 이웃과 손을 잡고 있는지만 고르면 된다. 이 μ\mu가 격자 볼츠만의 완화시간으로 들어가면 이산 전개가 점성을 다른 숫자로 읽는다. τ가 0.51일 때 점성을 51배로 읽은 반 스텝은 연속체 계수가 코드 안으로 넘어가는 다음 장면이다.

도움이 됐다면 공유해주세요.