Skip to content
cfd-lab:~/ko/posts/2026-06-25-otto-diesel-a…online
NOTE #085DAY THU 유체역학DATE 2026.06.25READ 5 min readWORDS 2,254#Otto-Cycle#Diesel-Cycle#Thermodynamics#유동현상#Compression-Ratio

가솔린 엔진은 왜 압축비 12에서 멈추는가 — 오토와 디젤 사이클

공기 표준 사이클로 본 압축비와 엔진 효율, 그리고 노킹의 벽

1919년, 정유회사 연구원 토머스 미즐리는 엔진에서 나는 '딸깍' 소리의 정체를 쫓고 있었다. 압축비를 올릴수록 출력은 커졌지만, 어느 선을 넘으면 연료가 점화 플러그보다 먼저 스스로 터졌다. 금속을 두드리는 그 소리가 노킹(knock)이다. 이 글은 복잡한 왕복엔진을 네 개의 열역학 과정으로 단순화한 '공기 표준 사이클'로, 압축비가 효율을 어떻게 정하는지, 그리고 왜 가솔린 엔진이 압축비를 무작정 올리지 못하는지를 따라간다. 끝에서는 같은 압축비에서 오토와 디젤 중 누가 더 효율적인지를 Python으로 직접 잰다.

압축비를 올릴수록 세지는데, 어디서 멈췄나#

압축비(compression ratio, 실린더가 가장 클 때와 가장 작을 때 부피의 비)는 엔진 효율의 손잡이다. 공기를 더 세게 누를수록, 같은 연료에서 더 많은 일을 뽑아낸다.

문제는 온도다. 단열 압축은 부피를 줄이는 동시에 온도를 끌어올린다. 압축 끝의 온도가 연료의 자연 발화점을 넘으면, 불꽃이 닿기 전에 혼합기가 한꺼번에 폭발한다. 이게 노킹이고, 피스톤과 베어링을 부순다.

미즐리는 1921년 테트라에틸납을 넣어 발화를 늦췄다. 옥탄가(antiknock 지수)라는 개념이 여기서 나왔다. 하지만 첨가제로도 한계는 있다. 가솔린 엔진의 압축비는 보통 9~12에 머문다.

엔진을 네 과정으로 — 공기 표준 오토 사이클#

실제 엔진은 흡입·연소·배기가 뒤섞여 있다. 이를 다루기 위해 작동 유체를 고정된 양의 이상기체(공기)로 두고, 연소를 '외부에서 들어오는 열'로 바꾼다. 이렇게 단순화한 것이 오토(Otto) 사이클이다.

네 과정으로 닫힌다.

  • 1→2: 단열 압축 (피스톤이 공기를 누른다)
  • 2→3: 정적 가열 (부피 고정, 순간 연소)
  • 3→4: 단열 팽창 (공기가 피스톤을 민다 — 출력 행정)
  • 4→1: 정적 방열 (배기로 열을 버린다)

단열 과정에서는 압축비 r=V1/V2r=V_1/V_2와 온도가 다음으로 묶인다.

T2T1=rk1\frac{T_2}{T_1} = r^{\,k-1}

여기서 TT는 온도, kk는 비열비(정압비열/정적비열, 공기는 약 1.4)다. 압축비가 클수록 압축 끝 온도 T2T_2가 가파르게 오른다. 노킹의 씨앗이 바로 이 식에 있다.

아래 시뮬레이션에서 직접 조작해보자. 압축비와 가열량을 바꾸면 P–V 평면의 닫힌 고리가 어떻게 변하는지 보인다.

Thermal efficiency η = 58.5% (k = 1.4, shaded area = net work)

압축비를 키우면 고리가 좌우로 길어지고, 색칠된 넓이(한 사이클의 순일)가 늘어난다. 가열량을 키우면 고리가 위로 솟지만, 효율 숫자는 거의 그대로다 — 다음 절에서 그 이유가 나온다.

효율은 압축비 하나가 정한다#

열효율은 받은 열 대비 한 일이다. 정적 가열과 방열에서 열량은 온도차에 비례하므로,

η=1QoutQin=1T4T1T3T2\eta = 1 - \frac{Q_{out}}{Q_{in}} = 1 - \frac{T_4 - T_1}{T_3 - T_2}

여기서 QinQ_{in}은 받은 열, QoutQ_{out}은 버린 열이다. 단열 관계 T2/T1=T3/T4=rk1T_2/T_1 = T_3/T_4 = r^{k-1}을 대입하면 온도가 모두 약분되고, 놀랍도록 단순한 식만 남는다.

ηOtto=11rk1\eta_{\text{Otto}} = 1 - \frac{1}{r^{\,k-1}}

효율은 오직 압축비 rr과 비열비 kk로 정해진다. 얼마나 많은 연료를 태웠는지(QinQ_{in})는 사라졌다. 그래서 가열량 슬라이더를 움직여도 효율 숫자가 거의 변하지 않았던 것이다.

압축비 8이면 약 56%, 12면 약 63%다. 숫자만 보면 압축비를 계속 올리고 싶다. 하지만 노킹이 12 근처에서 길을 막는다.

디젤은 정압 가열로 압축비의 벽을 넘는다#

루돌프 디젤은 다른 길을 택했다. 연료를 미리 섞지 않는다. 공기만 먼저 압축한다. 압축 끝 온도를 자연 발화점 위로 올린 뒤, 연료를 분사하면 닿는 즉시 탄다. 점화 플러그가 없다. 노킹을 일으킬 예혼합기가 아예 없으니, 압축비를 15~22까지 올릴 수 있다.

다른 점은 가열 방식이다. 연료가 천천히 분사되며 타기에, 부피가 늘어나는 동안 압력이 거의 일정하게 유지된다. 정적이 아니라 정압 가열이다.

여기서 새 무차원수가 등장한다. 차단비(cut-off ratio) rc=V3/V2r_c = V_3/V_2, 정압 가열로 부피가 몇 배 늘었는지다. 효율은 이렇게 바뀐다.

ηDiesel=11rk1rck1k(rc1)\eta_{\text{Diesel}} = 1 - \frac{1}{r^{\,k-1}}\,\frac{r_c^{\,k}-1}{k\,(r_c-1)}

오토 식에 분수 하나가 곱해진 꼴이다. 그 분수는 rc>1r_c>1일 때 항상 1보다 크다. 즉 같은 압축비라면 디젤이 오토보다 손해다. 대신 디젤은 압축비를 훨씬 높일 수 있어, 실제 엔진에서는 더 높은 효율로 끝난다.

같은 압축비라면 오토가 이긴다#

두 사이클을 압축비 축 위에 나란히 그려보면 관계가 분명해진다.

세 가지가 눈에 들어온다. 첫째, 곡선은 오른쪽으로 갈수록 완만해진다 — 압축비를 1 올릴 때 얻는 효율이 점점 줄어든다(수확 체감). 둘째, 같은 rr에서 시안색(오토)이 호박색(디젤) 위에 있다. 셋째, 붉은 띠가 가솔린의 현실적 한계다. 오토는 그 띠 앞에서 멈춰야 하지만, 디젤은 띠를 통과해 더 오른쪽에서 산다.

차단비 슬라이더를 1.2 쪽으로 줄이면 디젤 곡선이 오토에 바싹 붙는다. rc1r_c \to 1이면 정압 가열이 정적 가열에 가까워지고, 두 식이 같아진다. 차단비는 '디젤이 오토에서 얼마나 멀어졌는가'를 재는 척도다.

Python — 두 사이클의 효율을 직접 잰다#

닫힌 식이 정말 상태 온도에서 나오는지, 코드로 확인해보자.

import numpy as np
 
K = 1.4  # 공기 비열비 (cp/cv)
 
def otto_efficiency(r, k=K):
    """오토 사이클: 정적 가열, 압축비 r"""
    return 1.0 - 1.0 / r ** (k - 1)
 
def diesel_efficiency(r, cutoff, k=K):
    """디젤 사이클: 정압 가열, 압축비 r, 차단비 cutoff"""
    return 1.0 - (1.0 / r ** (k - 1)) * (cutoff ** k - 1) / (k * (cutoff - 1))
 
for r in [8, 12, 18, 22]:
    eo = otto_efficiency(r)
    ed = diesel_efficiency(r, cutoff=2.0)
    print(f"r={r:2d}  Otto={eo*100:5.1f}%  Diesel(rc=2)={ed*100:5.1f}%")

출력:

r= 8  Otto= 56.5%  Diesel(rc=2)= 49.0%
r=12  Otto= 63.0%  Diesel(rc=2)= 56.7%
r=18  Otto= 68.5%  Diesel(rc=2)= 63.2%
r=22  Otto= 71.0%  Diesel(rc=2)= 66.0%

이제 상태 온도로 직접 효율을 만들어 닫힌 식과 대조한다.

def otto_from_states(r, alpha, k=K):
    """상태 온도로 직접 효율 계산 (alpha = P3/P2, 가열량 손잡이)"""
    T1 = 300.0                 # K, 흡입 공기
    T2 = T1 * r ** (k - 1)     # 1->2 단열 압축
    T3 = T2 * alpha            # 2->3 정적 가열
    T4 = T3 / r ** (k - 1)     # 3->4 단열 팽창
    q_in = T3 - T2             # cv 약분
    q_out = T4 - T1
    return 1.0 - q_out / q_in
 
print(otto_from_states(9, alpha=3.0))  # 0.5848...
print(otto_from_states(9, alpha=6.0))  # 0.5848...  가열량 바꿔도 동일
print(otto_efficiency(9))              # 0.5848...

세 줄의 출력이 모두 0.5848로 같다. 가열량 alpha를 3에서 6으로 두 배 키워도 효율은 꿈쩍하지 않는다. P–V 시뮬레이션에서 가열 슬라이더가 효율을 바꾸지 못했던 이유가 코드로 확인된다.

압축비 한 칸의 값어치#

오토 사이클의 효율식 η=1r(k1)\eta = 1 - r^{-(k-1)} 하나에 이 글의 절반이 들어 있다. 효율은 압축비와 비열비만으로 정해지고, 얼마나 태우는가는 효율이 아니라 출력의 크기를 정한다.

가솔린은 예혼합기 때문에 노킹이라는 천장에 막혀 압축비 12쯤에서 멈춘다. 디젤은 공기만 압축해 그 천장을 치우고, 같은 압축비에서 손해를 보면서도 더 높은 압축비로 그 손해를 뒤집는다. 두 엔진의 효율 차이는 결국 '어디서 열을 넣느냐(정적 vs 정압)'와 '압축비를 어디까지 올릴 수 있느냐'의 줄다리기다.

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