Skip to content
cfd-lab:~/ko/posts/2026-05-12-laval-nozzle-…● online
NOTE #039DAY TUE 유체역학DATE 2026.05.12UPDATED 2026.10.19READ 5 min read#Fluid-Dynamics#Compressible-Flow#Mach#Laval-Nozzle#Shock-Wave#Flow-Phenomena

초음속에선 늘어나야 빨라진다 — 마하수, 충격파, 그리고 라발 노즐의 역설

배압이 설계 정압 0.063을 넘으면 확장부의 초음속 가지가 끊기고, 마하 1.5 충격은 압력을 2.46배로 올린다.

1947년 10월 14일, 척 예거의 X-1이 마하 1.06을 찍었다. 그날 풍동 엔지니어들이 진짜 놀란 것은 음속 돌파 자체가 아니라, 그 직전까지 멀쩡하던 디퓨저가 갑자기 가속기처럼 굴기 시작한 일이었다. 이 글은 그 역설의 출처인 한 줄의 면적-마하수 관계식을 따라가며, 라발 노즐이 왜 가운데가 잘록해야 하는지, 그리고 초음속 흐름에 충격파가 왜 끼어드는지를 풀어 본다. 마지막에는 Python 30줄로 등엔트로피 노즐 곡선을 직접 그려 본다. Mach 슬라이더를 1 아래에 두었다가 2 위로 올리면, 파면이 동심원에서 뒤로 눕는 원추로 접힌다.

0.5 / 1.0 / 2.0 are key regimes

1 아래에서는 파가 음원보다 앞에 있다. 1을 넘는 순간 포락선이 사선이 되고, 2 근처에서 반각이 30도 쪽으로 좁아진다. Pause로 그 사선을 멈추면 원추 밖은 조용하다.

마하수 — 압축성을 가르는 한 숫자#

마하수(유속 UU 와 음속 aa 의 비)는 단순히 빠르기를 재는 척도가 아니다. 단위 체적당 관성력은 ρU2/l\rho U^2 / l, 탄성력은 Kl2/l3K l^2 / l^3 에 비례하므로 두 값의 평방근비가 마하수다.

Ma=Ua,a=Kρ\mathrm{Ma} = \frac{U}{a}, \qquad a = \sqrt{\frac{K}{\rho}}

여기서 KK 는 체적탄성계수(부피 압축에 대한 강성), ρ\rho 는 밀도다. 즉 마하수는 "유동이 매질의 탄성을 얼마나 두드리는가"의 척도다. 통상 Ma<0.3\mathrm{Ma} < 0.3 이면 밀도 변화가 5% 미만이라 비압축 가정이 통한다. 그 이상에서는 유동 자체가 매질을 누르기 시작한다.

음속을 넘는 순간 — 도플러에서 마하 원추로#

정지한 음원이 내는 파면은 동심원이다. 음원이 움직이면 앞쪽 파장은 짧아지고 뒤쪽은 길어진다. 도플러 효과다. 그런데 음원이 음속에 도달하면 모든 파면이 한 평면으로 겹친다. 음속을 넘어서면, 음원은 자기가 만든 파면을 추월한다. 파면의 포락선은 원추가 되고, 이 마하 원추 바깥에는 어떤 음도 도달하지 못한다.

원추의 반각 μ\mu 는 기하만으로 결정된다.

sin⁡μ=1Ma\sin\mu = \frac{1}{\mathrm{Ma}}

마하 2 비행기의 충격 원추는 μ≈30°\mu \approx 30°, 마하 5 라면 11.5°11.5° 까지 좁아진다. 앞에서 1을 넘긴 직후 보인 사선이 이 반각이다.

역설의 한 줄 — (1−1/Ma²)dρ/ρ + dA/A = 0#

이제 본론. 단면적 A(x)A(x) 가 변하는 1차원 정상류를 보자. 질량보존을 미분형으로 풀어쓰면

dρρ+dAA+duu=0\frac{d\rho}{\rho} + \frac{dA}{A} + \frac{du}{u} = 0

이고, 등엔트로피 가정에서 오일러 방정식과 음속 정의 a2=dp/dρa^2 = dp/d\rho 를 결합하면

u du=−dpρ=−a2dρρu\, du = -\frac{dp}{\rho} = -a^2 \frac{d\rho}{\rho}

가 나온다. 두 식을 합쳐 dudu 를 소거하면 다음 한 줄이 남는다.

(1−1Ma2)dρρ+dAA=0\left(1 - \frac{1}{\mathrm{Ma}^2}\right) \frac{d\rho}{\rho} + \frac{dA}{A} = 0

여기서 ρ\rho 는 밀도, AA 는 단면적, Ma\mathrm{Ma} 는 마하수다. 부호 분석을 하면 모든 모순이 풀린다.

아음속에서 (Ma<1\mathrm{Ma} < 1, 괄호 음수): 단면적이 줄면 (dA<0dA<0) 밀도도 줄고(dρ<0d\rho<0), 결과적으로 속도가 는다. 우리가 일상에서 보는 호스 끝과 같다.

초음속에서 (Ma>1\mathrm{Ma} > 1, 괄호 양수): 부호가 모두 뒤집힌다. 단면적이 줄면 밀도가 늘고 속도는 줄어든다. 좁은 관에 더 빨리 밀어 넣으려는 시도는 오히려 흐름을 막는다. 반대로 단면적이 늘어나야 속도가 는다.

마하 0.3에서 1/Ma²은 1/0.09, 약 11.1이다. 괄호 (1−1/Ma²)은 약 −10.1이 된다. 밀도 변화는 면적 변화를 이 수로 나눈 크기다. 면적을 10% 바꿔도 밀도는 1% 정도만 움직인다. 음속에 많이 못 미치면 면적과 밀도가 거의 따로 논다.

마하 2에서는 1/Ma²이 0.25, 괄호가 +0.75다. 부호가 뒤집힌 뒤 밀도 변화는 면적 변화의 약 1.33배다. 면적을 10% 늘리면 밀도는 약 13% 줄고 속도는 는다. 마하 1에서는 괄호가 0이라 면적 변화도 0이어야 식이 남는다. 스로트가 한 점이 되는 이유의 숫자다.

라발 노즐 — 좁아져서는 빨라지지 않는다#

이 역설이 라발 노즐의 모양을 결정한다. 아음속을 받아 초음속까지 가속하려면, 우선 좁아져서 음속까지 끌어올린 다음, 다시 넓어져야 한다. 가운데 잘록한 부분(스로트)에서 정확히 Ma=1\mathrm{Ma} = 1 에 도달한다. 식에서 1−1/Ma2=01 - 1/\mathrm{Ma}^2 = 0 이 되려면 dA=0dA = 0 이어야 하기 때문이다.

스로트 단면적 A∗A^* 와 임의 단면적 AA 의 비는 마하수만으로 결정된다.

AA∗=1Ma[2γ+1(1+γ−12Ma2)]γ+12(γ−1)\frac{A}{A^*} = \frac{1}{\mathrm{Ma}} \left[ \frac{2}{\gamma+1} \left( 1 + \frac{\gamma-1}{2}\mathrm{Ma}^2 \right) \right]^{\frac{\gamma+1}{2(\gamma-1)}}

같은 면적비에서 아음속 해와 초음속 해가 동시에 존재한다. 어느 가지를 따라가는지는 출구 배압 PbP_b 가 결정한다. 배압을 충분히 낮추면 확장부 마하가 1을 넘어 단조 증가한다. 배압을 설계값보다 높이면 노즐 안 어디선가 정상 충격파가 서고, 흐름은 다시 아음속으로 떨어진다.

Python으로 본 등엔트로피 면적-마하수 관계#

위의 면적비 공식과 등엔트로피 압력비를 NumPy 30줄로 따라가 본다. 이분법으로 면적비에서 마하수를 거꾸로 푼다.

import numpy as np
 
GAMMA = 1.4
 
def area_mach_relation(M, gamma=GAMMA):
    """A/A* — 등엔트로피 면적-마하수 식."""
    exp = (gamma + 1) / (2 * (gamma - 1))
    inner = (2 / (gamma + 1)) * (1 + 0.5 * (gamma - 1) * M ** 2)
    return (1 / M) * inner ** exp
 
def solve_supersonic_branch(area_ratio, gamma=GAMMA, lo=1.0001, hi=25.0):
    """면적비 → 초음속 마하수 (이분법)."""
    for _ in range(80):
        mid = 0.5 * (lo + hi)
        if area_mach_relation(mid, gamma) < area_ratio:
            lo = mid
        else:
            hi = mid
    return 0.5 * (lo + hi)
 
def pressure_ratio_isentropic(M, gamma=GAMMA):
    """p/p0 — 정체압 대비 정압비."""
    return (1 + 0.5 * (gamma - 1) * M ** 2) ** (-gamma / (gamma - 1))
 
def normal_shock_p2_p1(M1, gamma=GAMMA):
    """수직 충격파 후방 정압비 p2/p1."""
    return 1 + (2 * gamma / (gamma + 1)) * (M1 ** 2 - 1)
 
# 라발 노즐: 면적비 = 2.5 인 출구
A_ratio = 2.5
M_exit = solve_supersonic_branch(A_ratio)
p_exit = pressure_ratio_isentropic(M_exit)
 
print(f"design exit  Ma = {M_exit:.3f}")
print(f"design exit  p/p0 = {p_exit:.4f}")
print(f"if Ma1=1.5 normal shock, p2/p1 = {normal_shock_p2_p1(1.5):.3f}")

실행하면 다음과 같이 떨어진다.

design exit  Ma = 2.443
design exit  p/p0 = 0.0633
if Ma1=1.5 normal shock, p2/p1 = 2.458

출구 면적비 슬라이더를 2.5에 두고 배압비 슬라이더를 설계 정압 아래로 내리면, 화면의 설계 출구 마하가 출력의 2.44 근처에 선다.

throat (Ma=1)inletexitMa_exit (design sup): 2.44regime: over-expanded (shock inside)

Cyan curve: Ma along axis (normalized). Dashed red line: throat. Lower P_b makes the diverging part accelerate to supersonic. Raise P_b above the design and a normal shock appears inside.

면적비 2.5짜리 노즐을 설계대로 운용하면 출구에서 마하 2.44, 정압은 정체압의 6.3% 까지 떨어진다. 배압비를 0.063보다 올리면 확장부 곡선이 목 뒤에서 꺾이며 마하가 1 아래로 떨어진다. 노즐 안에서 마하 1.5짜리 정상 충격파가 잡히면 압력이 2.46배로 급상승하면서 흐름이 즉시 아음속으로 바뀐다.

출구 마하 2.443을 원추 식에 다시 넣으면 sin μ = 1/2.443 은 약 0.409, 반각은 약 24도다. 마하 2의 30도보다 좁다. 출력의 2.458은 다른 계산이 아니다. γ=1.4에서 2γ/(γ+1)은 2.8/2.4이고, 마하 1.5의 Ma²−1은 1.25다. 1에 (2.8/2.4)×1.25를 더하면 2.458이다.

충격파 — 압축의 한계#

압축파가 자기 자신을 따라잡으면 충격파가 된다. 파동 후미는 압축으로 온도가 올라가고, 음속이 빨라져서 앞을 추월한다. 결국 두께가 분자 평균자유행정의 몇 배 수준(공기에선 마이크로미터 단위)인 얇은 면에 모든 압력 점프가 모인다.

수직 충격파의 압력비 p2/p1=1+2γγ+1(Ma12−1)p_2/p_1 = 1 + \frac{2\gamma}{\gamma+1}(\mathrm{Ma}_1^2 - 1) 는 마하수 1을 기준으로 0이고, 마하수가 커질수록 폭발적으로 커진다. 초음속 라발 노즐에서 배압이 디자인보다 높으면, 흐름이 그 압력 차이를 메우려 노즐 내부에 충격파를 만들어 자기 자신을 감속시킨다. "과팽창(over-expanded)" 상태다.

흥미롭게도 캐비테이션 기포가 붕괴할 때 나오는 마이크로 충격파, 채찍 끝이 음속을 넘으며 내는 "쉭" 소리, 운석이 대기에 진입하며 가열되는 메커니즘 — 이 모두 같은 식의 다른 얼굴이다. 같은 점프가 자유표면에서 서면 싱크대의 수력도약이다. 속도의 기준만 음속에서 Froude로 바뀐다.

배압이 0.063을 넘으면 출구 마하가 죽는다#

설계 정압비 0.0633보다 배압이 높으면 확장부는 초음속 가지에 머물지 못한다. 마하 2.443과 정압 6.33%는 한 세트로 나온다. 배압만 올리면 면적비 2.5가 그대로여도 출구 마하는 1 아래로 떨어진다. 안에 선 마하 1.5 충격이 압력을 2.458배로 올려 그 간극을 메운다.

목에서 질량유량이 잠기는 조건은 이 노트 밖이다. 수축-확산 노즐이 유량을 잠그는 자리가 목 마하 1 이후의 유량을 다룬다. 면적비와 배압을 맞춘 뒤에도 유량이 설계와 다르면, 목이 정말 음속인지를 그쪽에서 보는 편이 낫다.

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