Skip to content
cfd-lab:~/ko/posts/2026-06-18-de-laval-nozz…● online
NOTE #076DAY THU 유체역학DATE 2026.06.18UPDATED 2026.10.19READ 5 min read#Flow-Phenomena#Compressible-Flow#De-Laval-Nozzle#Choked-Flow#Gas-Dynamics

음속을 넘으려면 관을 넓혀라 — 수축-확산 노즐과 초킹

배압을 0.0298 아래로 내려도 질량유량은 늘지 않는다. 바뀌는 것은 충격파가 확산부 안에 남느냐다.

정원 호스 끝을 누르면 물이 세진다. 좁히면 빠르다. 로켓 노즐은 목 뒤에서 나팔처럼 벌어진다. 음속을 지난 기체는 넓어져야 더 빨라진다.

면적비 슬라이더를 1보다 위로 밀면, 한 면적에 붙은 마하 근 두 개가 좌우로 갈라진다.

M=1M=0.20M=2.64Mach numberA / A*
subsonic: M=0.197, p/p0=0.973  |  supersonic: M=2.637, p/p0=0.047

아음속 근은 0 쪽으로 내려가고, 초음속 근은 올라간다. 면적비 4 근처에서 초음속 근이 2.94 언저리에 놓이는지 보면, 뒤의 출력이 이 곡선의 한 점이라는 게 보인다.

좁히면 빨라진다, 음속을 넘으면 거꾸로다#

압축성 유동(밀도가 변하는 흐름)에서는 면적과 속도의 관계가 마하수에 따라 뒤집힌다. 1차원 등엔트로피 흐름의 면적-속도 관계가 그 뒤집힘을 한 줄로 적는다.

dAA=(M2−1) dVV\frac{dA}{A} = (M^2 - 1)\,\frac{dV}{V}

여기서 AA는 단면적, VV는 속도, MM은 마하수(속도/음속)다. 부호가 면적을 어느 쪽으로 밀지 가른다.

M=0.5M=0.5이면 M2−1=−0.75M^2-1=-0.75다. 속도를 1% 올리려면 면적을 0.75% 줄이면 된다. M=2M=2이면 M2−1=3M^2-1=3이다. 같은 1%를 더 얻으려면 면적을 3% 늘려야 한다. 3을 0.75로 나누면 4다. 계수 크기는 네 배이고 부호는 반대다. 호스를 누르던 감각은 아음속 계수 0.75에만 맞춰져 있다.

아음속(M<1M<1)에서는 M2−1<0M^2-1<0이다. 속도를 올리려면(dV>0dV>0) 면적을 줄여야 한다(dA<0dA<0). 호스를 누르는 감각이 이쪽이다.

초음속(M>1M>1)에서는 M2−1>0M^2-1>0이다. 더 빨리려면 면적을 키워야 한다. 부호가 뒤집힌다.

같은 부호 뒤집기를 충격파의 점프와 붙여 읽으면 초음속에서 넓어져야 빨라지는 이유로 이어진다.

그래서 기체를 음속 너머로 보내려면 먼저 좁혀 M=1M=1에 닿게 한 다음, 그 지점부터 넓힌다. 좁아졌다 넓어지는 형상이 수축-확산 노즐(de Laval 노즐)이다. 가장 좁은 곳이 노즐목이다.

한 면적에 두 개의 마하수#

면적-마하 관계는 등엔트로피 흐름에서 단면적과 마하수를 묶는다.

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

A∗A^*는 M=1M=1이 되는 임계 단면적(노즐목 면적)이고, γ\gamma는 비열비(정압비열/정적비열, 공기는 약 1.4)다.

우변은 M=1M=1에서 최솟값 1을 갖는 U자다. 1보다 큰 면적비마다 마하 근이 둘이다. 아음속 하나, 초음속 하나.

앞의 면적비 슬라이더에서 그 두 근은 이미 갈라져 있다. 면적비를 키울수록 아음속 근은 0에 붙고 초음속 근은 커진다. 같은 형상이라도 어느 가지를 탈지는 출구 배압이 고른다.

초킹 — 노즐목이 더는 못 받아들이는 순간#

배압을 내리면 질량 유량이 늘어난다. 무한정은 아니다. 노즐목 속도가 음속(M=1M=1)에 닿으면 거기에서 멈춘다.

압력 교란은 음속으로 상류에 올라간다. 목이 음속이면 하류의 압력 신호가 목을 넘어 상류로 가지 못한다. 목 상류는 배압이 더 내려간 사실을 듣지 못한다. 유량은 최댓값에 묶인다. 이 상태가 초킹(choking)이다.

초킹된 최대 유량은 노즐목 면적 A∗A^*와 정체 조건만으로 적힌다.

m˙=A∗ p0γRT0(2γ+1)γ+12(γ−1)\dot{m} = A^* \, p_0 \sqrt{\frac{\gamma}{R T_0}} \left(\frac{2}{\gamma+1}\right)^{\frac{\gamma+1}{2(\gamma-1)}}

p0p_0는 정체 압력, T0T_0는 정체 온도, RR은 기체 상수다.

질량유량 식에서 γ\gamma만 남는 인수는 (2/(γ+1))(γ+1)/(2(γ−1))(2/(\gamma+1))^{(\gamma+1)/(2(\gamma-1))}이다. γ=1.4\gamma=1.4이면 (2/2.4)3=(5/6)3≈0.5787(2/2.4)^3=(5/6)^3\approx 0.5787이다. (5/6)3=125/216=0.5787037(5/6)^3=125/216=0.5787037이라 0.5787은 넷째 자리에서 반올림한 값이다. 배압 pbp_b는 이 식에 없다. 목이 음속이 된 뒤의 유량은 A∗A^*, p0p_0, T0T_0, RR, 그리고 이 0.5787이 잠근다. 배압을 더 내려도 유량 숫자는 그대로다. 남는 선택은 확산부가 충격파를 삼키느냐, 출구 밖으로 밀어내느냐다.

로켓 추력을 노즐목 크기로 거는 이유가 이 식이다. 배압은 인수 밖에 있다.

배압을 낮춰가며 일어나는 일곱 단계#

초킹 다음이 노즐 안의 이야기다. 배압 pbp_b를 정체 압력 p0p_0에서 내리면 내부 유동이 칸을 바꾼다. 배압비 1.0에서 0.05까지가 그 칸이다. 슬라이더는 출력의 설계 압력비를 본 뒤에 둔다.

(a) 아음속 벤투리. 배압이 충분히 높으면 전 구간이 아음속이다. 노즐목에서 가장 빨라졌다가 확산부에서 다시 느려진다. 압력은 노즐목에서 최저, 출구에서 거의 회복된다.

(b) 첫 임계점. 배압을 더 낮추면 노즐목이 정확히 M=1M=1에 닿는다. 여기서 초킹이 시작된다.

(c)~(d) 노즐 내부 충격파. 더 낮추면 확산부에서 유동이 초음속으로 가속하다가 수직충격파(normal shock, 유동을 갑자기 아음속으로 되돌리는 불연속면)를 만난다. 충격파 뒤는 아음속이라 다시 감속하며 배압에 맞춰진다. 배압을 낮출수록 충격파는 출구 쪽으로 밀려난다.

(e) 과팽창. 충격파가 출구를 벗어나면 노즐 내부는 완전히 초음속이다. 다만 출구 압력이 배압보다 낮아, 노즐 바깥에서 경사충격파로 압력이 맞춰진다. 이를 과팽창(overexpanded)이라 한다.

(f) 설계점. 출구 압력이 배압과 정확히 같아지는 한 점이다. 노즐 안팎에 충격파가 없다. 가장 효율적인 작동 조건이다.

(g) 과소팽창. 배압이 설계점보다 더 낮으면 출구 기체가 노즐 밖에서 팽창파로 더 부푼다. 이를 과소팽창(underexpanded)이라 한다.

로켓이 고도를 올리며 대기압(배압)이 떨어지면 (e)→(f)→(g)를 순서대로 지난다. 지상에서 과팽창이던 노즐이 고공에서 설계점을 지나 과소팽창이 되는 이유다.

코드로 노즐을 풀어보자#

면적-마하 관계의 초음속 해를 이분법으로 찾고, 출구 면적비 4.0의 설계 압력을 구한다.

import numpy as np
 
def area_ratio(mach, gamma=1.4):
    """등엔트로피 면적비 A/A* (Mach의 함수)"""
    t = 1.0 + 0.5 * (gamma - 1.0) * mach**2
    expo = (gamma + 1.0) / (2.0 * (gamma - 1.0))
    return (1.0 / mach) * (2.0 / (gamma + 1.0) * t) ** expo
 
def invert_area_ratio(target, gamma=1.4, branch="sub"):
    """주어진 A/A*에 대한 Mach 해 (아음속/초음속 가지)"""
    lo, hi = (1e-4, 1.0) if branch == "sub" else (1.0, 8.0)
    for _ in range(80):
        mid = 0.5 * (lo + hi)
        f = area_ratio(mid, gamma)
        # 아음속 가지는 감소, 초음속 가지는 증가
        ascending = (branch == "sup")
        if (f < target) == ascending:
            lo = mid
        else:
            hi = mid
    return 0.5 * (lo + hi)
 
def pressure_ratio(mach, gamma=1.4):
    """정적/정체 압력비 p/p0"""
    return (1.0 + 0.5 * (gamma - 1.0) * mach**2) ** (-gamma / (gamma - 1.0))
 
# 출구 면적비 4.0인 노즐의 설계 조건
ae_over_astar = 4.0
m_exit = invert_area_ratio(ae_over_astar, branch="sup")
p_design = pressure_ratio(m_exit)
 
print(f"설계 출구 Mach    = {m_exit:.3f}")
print(f"설계 압력비 pe/p0 = {p_design:.4f}")
print(f"역산 면적비 확인   = {area_ratio(m_exit):.3f}")

실행 결과:

설계 출구 Mach    = 2.940
설계 압력비 pe/p0 = 0.0298
역산 면적비 확인   = 4.000

배압비 슬라이더를 1.0에서 0.05로 내리면 노즐 색(마하수)과 아래 압력 곡선이 (a)에서 (g)로 넘어간다. 0.0298 근처에 두면 출구 압력과 배압이 만나고, 그보다 높으면 확산부 안에 수직충격파가 남는다. 더 내리면 출구 밖에서 팽창이 이어진다.

γ=1.4\gamma=1.4를 M=1M=1에 넣으면 대괄호 안이 1이고 A/A∗A/A^*도 1이다. 노즐목이 그 점이다. 출력의 설계점은 초음속 가지에서 읽은 값이다. M=2.940M=2.940을 같은 면적식에 다시 넣으면 면적비는 3.9993, 압력비는 0.029795가 되어 인쇄된 4.000과 0.0298에 붙는다. 면적비 4의 다른 근은 아음속이다. 같은 식을 반대 가지로 읽으면 MM은 약 0.1465, p/p0p/p_0는 약 0.985다. 목록은 branch를 sup로 고정해서 그 근을 찍지 않는다.

인쇄된 설계점은 마하 2.940, 압력비 0.0298이다. 출구 압력은 정체 압력의 약 3%다. 역산 면적비가 4.000으로 돌아오면 두 함수는 서로 역관계다.

배압을 0.0298 위에 두면 확산부가 충격파를 삼킨다#

설계 압력비 0.0298은 출구 정압이 배압과 같아지는 한 점이다. 슬라이더를 그 위에 두면 확산부의 초음속 구간이 수직충격파에서 끊긴다. 출구는 다시 아음속이라, 넓힌 면적은 가속이 아니라 감속으로 쓰인다.

그보다 아래로 내리면 충격파는 출구를 빠져 경사충격파가 된다. 노즐 밖으로 새는 한 장과, 덕트 안에 갇혀 되풀이되는 열차는 같은 압력비의 결과인가. 흡입구의 사교충격파 열이 그 질문을 이어 간다.

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