Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

시장의 작동 원리

수요와 공급, 그리고 정보로서의 가격

Hanyang University

시장의 작동 원리 — 수요와 공급

오늘 아침 여러분이 마신 커피 한 잔을 떠올려 봅시다. 그 원두는 어쩌면 브라질 미나스제라이스의 고원, 에티오피아 시다모의 산비탈, 혹은 베트남 닥락 성의 붉은 흙에서 자랐을 것입니다. 그것을 심고 수확한 농부, 마대에 담아 항구로 옮긴 운송업자, 배에 실은 선원, 볶은 로스터, 포장하고 배송한 사람, 마지막으로 물을 끓여 내려 준 카페 직원 — 이 수백 명의 사람들 중 단 한 명도 서로 만난 적이 없고, '한양대학교 앞 카페에서 오늘 아침 커피를 마시고 싶어 하는 학생’이 존재한다는 사실조차 알지 못합니다. 그런데도 커피는 거기 있었습니다. 아무도 지시하지 않았는데, 지구 반대편의 노동과 자원이 정확히 여러분의 손끝으로 흘러 들어온 것입니다.

이것은 사실 인류가 만들어 낸 가장 경이로운 조율(調律)의 결과입니다. 어떤 중앙 계획가도 '오늘 서울에 커피 몇 잔이 필요하니 브라질에서 원두 몇 톤을 보내라’고 명령하지 않았습니다. 대신, 가격(price) 이라는 단 하나의 숫자가 이 모든 사람들 사이를 오가며 흩어진 정보를 조용히 전달하고, 각자가 자기 이익을 좇아 내린 결정들을 하나의 정교한 그물망으로 엮어 냈습니다. 이 장은 바로 그 그물망 — 시장(market) — 이 어떻게 작동하는지, 수요와 공급이라는 두 개의 힘이 어떻게 만나 가격과 거래량을 결정하는지를 다룹니다. 이는 경제학 전체에서 가장 강력하고 가장 널리 쓰이는 도구이며, 앞으로 배울 거의 모든 내용의 토대가 됩니다.

3.1 정보로서의 가격: 조율의 문제

곡선과 수식으로 들어가기 전에, 우리는 먼저 근본적인 '왜’를 물어야 합니다. 애초에 왜 시장이라는 것이 필요한가? 현대 경제에서는 서로 만난 적 없는 수십억 명의 사람들이 수백만 종의 재화와 서비스를 생산하고 소비합니다. 연필 한 자루조차 흑연 광부, 삼나무 벌목공, 고무·황동·페인트 공급자, 그리고 이들을 조립하는 공장 노동자의 협력을 필요로 합니다 — 그리고 이들 중 누구도 연필을 처음부터 끝까지 혼자 만들 줄 모릅니다. 경제학자 레너드 리드(Leonard Read)의 유명한 에세이 「나, 연필(I, Pencil)」이 지적했듯이, 지구상에 연필 하나를 완전히 만들 줄 아는 사람은 단 한 명도 없습니다. 그런데도 문구점에는 언제나 연필이 있습니다.

이 상황이 얼마나 어려운 문제인지 실감하려면, 이것을 하나의 거대한 계산 문제로 상상해 보십시오. 세상에는 수십억 명의 소비자가 있고, 각자가 원하는 것, 얼마나 급하게 원하는지, 무엇으로 대체할 수 있는지가 모두 다릅니다. 동시에 수백만 개의 생산자가 있고, 각자가 무엇을 얼마나 싸게 만들 수 있는지, 어떤 자원이 남고 어떤 자원이 모자라는지가 모두 다릅니다. 이 방대하고 끊임없이 변하는 정보를 한데 모아 '무엇을, 얼마나, 누구를 위해, 어떤 방법으로 생산할 것인가’를 결정하는 것 — 이것이 모든 경제가 풀어야 하는 경제 문제(economic problem) 입니다.

20세기의 거대한 실험은 이 문제를 두 가지 방식으로 풀어 보려 했습니다. 하나는 중앙계획(central planning) 으로, 국가가 모든 정보를 한곳에 모아 계획으로 자원을 배분하는 방식이었습니다. 다른 하나는 시장(market) 으로, 아무도 전체 그림을 보지 않은 채 각자가 가격을 보고 스스로 결정하는 분권적(分權的) 방식이었습니다. 이 장에서 우리가 배울 것은, 왜 후자가 정보를 처리하는 데 압도적으로 우월했는가에 대한 이야기이기도 합니다. 그 핵심에는 단 하나의 아이디어가 있습니다. 가격은 단순한 숫자가 아니라, 흩어진 지식을 나르는 신호(signal)라는 것입니다.

가격이 나르는 세 가지 정보

하이에크의 통찰을 조금 더 구체적으로 풀어 보면, 시장가격은 사실 세 가지 서로 다른 역할을 동시에 수행합니다. 첫째, 가격은 정보를 전달합니다(signaling). 어떤 재화의 가격이 오른다는 것은 '이것이 이전보다 더 귀해졌다 — 더 원하는 사람이 많거나, 만들기 더 어려워졌다’는 메시지를 온 세상에 방송하는 것과 같습니다. 둘째, 가격은 유인을 제공합니다(incentives). 가격이 오르면 소비자는 아껴 쓰고 대체재로 옮겨 갈 유인을 얻고, 생산자는 더 많이 만들거나 새로 진입할 유인을 얻습니다. 셋째, 가격은 소득을 분배합니다(distribution). 누가 무엇을 얼마나 가질지는 결국 각자가 지불할 수 있고 지불할 용의가 있는 가격에 의해 결정됩니다. 이 세 기능이 하나의 숫자 안에 응축되어 있다는 점이 가격체계의 놀라운 효율성의 원천입니다.

한국의 경험은 이 대비를 생생하게 보여 줍니다. 남과 북은 같은 언어, 같은 역사, 비슷한 초기 조건에서 출발했지만 한쪽은 시장을, 다른 한쪽은 중앙계획을 택했습니다. 70여 년이 지난 지금 두 경제의 격차는 압도적입니다. 물론 그 원인은 복합적이지만, 하이에크의 렌즈로 보면 중요한 한 축은 '정보 처리 능력’의 차이입니다. 계획 경제에서는 관료가 수십만 개 품목의 가격과 수량을 일일이 지정해야 했고, 현장의 미세한 변화에 반응할 방법이 없었습니다. 그 결과가 만성적인 부족과 잉여의 공존 — 어떤 상품은 창고에 쌓여 썩고, 다른 상품은 사려는 줄이 끝없이 이어지는 상태 — 였습니다.

3.2 수요: 소비자의 가치 평가

시장이라는 무대에는 두 주역이 있습니다. 사려는 쪽(수요)과 팔려는 쪽(공급)입니다. 먼저 사려는 쪽부터 들여다봅시다. 우리의 목표는 단순히 '수요곡선은 우하향한다’는 사실을 외우는 것이 아니라, 그런 모양이 되는지를 개별 소비자의 머릿속에서부터 쌓아 올리는 것입니다.

지불용의(WTP)와 유보가격

논의의 출발점은 개별 소비자가 어떤 재화에 부여하는 가치(value) 입니다. 이 가치를 화폐 단위로 측정한 것이 지불용의(Willingness to Pay, WTP), 또는 유보가격(reservation price) 입니다. 유보가격이란 소비자가 그 재화 한 단위를 얻기 위해 기꺼이 포기할 용의가 있는 최대 금액을 뜻합니다. 예를 들어 몹시 목마른 여름날 첫 번째 생수 한 병에 대해 어떤 학생이 최대 3,000원까지 낼 용의가 있다면, 그 학생의 첫 병에 대한 유보가격은 3,000원입니다.

유보가격이 왜 중요한지는 이렇게 생각하면 분명합니다. 만약 시장가격이 유보가격보다 낮으면 소비자는 삽니다 — 자신이 매긴 가치보다 싸게 얻는 셈이니까요. 반대로 시장가격이 유보가격보다 높으면 사지 않습니다. 따라서 유보가격은 소비자의 '구매/비구매’를 가르는 문턱입니다. 그리고 이 문턱과 실제 지불액의 차이가 바로 소비자가 거래에서 얻는 이득 — 뒤에서 배울 소비자잉여 — 의 씨앗이 됩니다.

한계가치 체감과 수요의 법칙

이제 결정적인 관찰을 더합니다. 같은 재화라도 소비량이 늘어날수록 추가 한 단위가 주는 가치는 줄어듭니다. 이를 한계효용 체감의 법칙(law of diminishing marginal utility) 또는 한계가치 체감이라 부릅니다. 앞의 목마른 학생을 다시 봅시다. 첫 번째 생수는 갈증을 해소해 주니 3,000원의 가치가 있습니다. 그러나 두 번째 병은 이미 어느 정도 해소된 갈증에 더해지는 것이니 2,000원 정도, 세 번째는 1,200원, 네 번째는 500원… 이런 식으로 추가되는 병의 가치는 점점 떨어집니다. 배가 부를수록 한 그릇의 밥이 주는 만족이 줄어드는 것과 같은 이치입니다.

한계가치가 체감한다는 이 하나의 사실로부터 수요의 법칙(law of demand) — 다른 조건이 일정할 때 가격이 오르면 수요량이 줄고, 가격이 내리면 수요량이 는다 — 이 곧바로 따라 나옵니다. 왜냐하면 소비자는 '한계가치 \geq 가격’인 단위까지만 구매하기 때문입니다. 가격이 2,500원이라면 이 학생은 첫 번째 병(가치 3,000원)만 사고 멈춥니다(두 번째 병의 가치 2,000원 < 2,500원). 가격이 1,000원으로 내리면 이제 세 번째 병(가치 1,200원)까지 삽니다. 가격이 내려갈수록 ‘살 만한 가치가 있는’ 단위가 늘어나므로, 수요량은 늘어납니다. 이것이 수요곡선이 우하향하는 근본 이유입니다.

생수(병)한계가치(유보가격)
1번째3,000원
2번째2,000원
3번째1,200원
4번째500원
5번째100원

이 표를 그래프로 옮기면, 가로축에 수량을 세로축에 가격(=한계가치)을 놓은 계단 모양의 하향 곡선이 됩니다. 계단의 각 높이가 곧 그 단위의 유보가격입니다.

개별 유보가격의 합으로서의 시장수요곡선

지금까지는 한 사람의 이야기였습니다. 그러나 시장에는 수많은 소비자가 있습니다. 시장수요곡선(market demand curve) 은 어떻게 만들어질까요? 답은 간단하면서도 아름답습니다. 각 가격 수준에서 모든 개별 소비자의 수요량을 수평으로 더하면(horizontal summation) 됩니다.

직관적으로 다시 말하면, 시장 전체를 하나의 거대한 '유보가격 명단’으로 상상할 수 있습니다. 세상의 모든 소비자, 그리고 각 소비자의 모든 단위(첫 번째·두 번째·…)를 유보가격이 높은 순서대로 죽 늘어세우는 것입니다. 유보가격이 가장 높은 사람(가장 절실한 소비)이 맨 앞에, 가장 낮은 사람이 맨 뒤에 섭니다. 이제 시장가격 PP 를 하나 정하면, 유보가격이 PP 이상인 모든 단위가 거래됩니다. 이 'PP 이상인 단위의 개수’가 바로 그 가격에서의 시장수요량 Qd(P)Q_d(P) 입니다.

수식으로 표현하면, 소비자 ii 의 개별수요를 qi(P)q_i(P) 라 할 때 시장수요는 이들의 합입니다:

Qd(P)=i=1nqi(P).Q_d(P) = \sum_{i=1}^{n} q_i(P).

소비자 수가 아주 많고 각자의 단위가 잘게 나뉘면, 이 계단 모양의 명단은 매끄러운 곡선으로 근사됩니다. 그래서 우리는 흔히 수요곡선을 P=abQP = a - bQ 같은 연속적인 직선(또는 곡선)으로 그립니다. 여기서 곡선의 높이는 ‘그 수량에서 마지막으로 거래되는 단위의 유보가격’, 즉 사회의 한계가치를 나타냅니다. 이 해석 — 수요곡선의 높이 = 한계가치 = 유보가격 — 은 소비자잉여를 이해할 때 결정적으로 쓰이므로 기억해 두십시오. 이 장의 수치 예제에서 우리는 P=100QP = 100 - Q 라는 선형 수요곡선을 사용할 텐데, 이는 'QQ 번째 단위의 유보가격이 100Q100 - Q 원’이라는 명단을 압축한 것입니다.

수요를 이동시키는 요인들

수요곡선은 '가격이 주어졌을 때 얼마나 사려는가’를 나타냅니다. 그런데 가격 이외의 조건이 바뀌면 곡선 자체가 좌우로 이동합니다. 이것을 수요의 변화(shift of demand) 라 부릅니다. 주요 이동요인은 다음과 같습니다.

첫째, 소득(income) 입니다. 소득이 늘면 대부분의 재화에 대한 수요가 늘어납니다 — 이런 재화를 정상재(normal good) 라 합니다. 승용차, 외식, 해외여행이 전형적인 예입니다. 반대로 소득이 늘 때 오히려 수요가 주는 재화도 있는데, 이를 열등재(inferior good) 라 합니다. 소득이 오르면서 라면 소비를 줄이고 쌀밥·외식으로 옮겨 가거나, 시내버스 대신 자가용을 타는 경우가 여기에 해당합니다. '열등’은 품질이 나쁘다는 뜻이 아니라, 소득이 늘 때 수요가 감소한다는 통계적 관계를 가리키는 용어일 뿐입니다.

둘째, 관련재(related goods)의 가격 입니다. 두 재화가 함께 소비되면 보완재(complements) 라 합니다. 커피와 설탕, 자동차와 휘발유, 스마트폰과 앱이 그렇습니다. 보완재의 가격이 오르면 해당 재화의 수요는 줄어듭니다(휘발유값이 급등하면 대형차 수요가 줍니다). 반대로 서로 대신 쓸 수 있으면 대체재(substitutes) 라 합니다. 커피와 홍차, 소고기와 돼지고기, 지하철과 버스가 그렇습니다. 대체재의 가격이 오르면 해당 재화의 수요는 늘어납니다(소고기값이 오르면 돼지고기 수요가 늡니다).

셋째, 선호(preferences)와 기대(expectations) 입니다. 취향의 변화, 유행, 건강 정보, 광고 등이 선호를 바꿉니다. 예컨대 건강에 대한 관심이 높아지면서 탄산음료 수요가 줄고 생수·제로음료 수요가 늘어난 것이 대표적입니다. 또 미래 가격이 오를 것이라 기대하면 지금 미리 사두려는 수요가 늘어납니다. 넷째, 소비자의 수(number of buyers) — 인구·시장 규모 — 도 시장수요를 좌우합니다. 이 각각을 표로 정리하면 다음과 같습니다.

이동요인관계한국적 예시
소득↑ (정상재)수요 우측 이동소득 증가 → 외식·해외여행 수요 증가
소득↑ (열등재)수요 좌측 이동소득 증가 → 저가 라면 수요 감소
대체재 가격↑수요 우측 이동소고기값↑ → 돼지고기 수요 증가
보완재 가격↑수요 좌측 이동휘발유값↑ → 대형차 수요 감소
선호 강화수요 우측 이동건강 열풍 → 제로음료 수요 증가
인구·구매자 수↑수요 우측 이동신도시 입주 → 지역 상권 수요 증가

3.3 공급: 생산자의 비용

이제 무대의 반대편, 팔려는 쪽으로 눈을 돌립니다. 수요가 소비자의 '가치’에서 출발했듯이, 공급은 생산자의 '비용’에서 출발합니다. 그리고 수요와 놀라울 만큼 대칭적인 논리 구조를 갖습니다.

한계비용 체증과 공급의 법칙

공급곡선(supply curve) 은 각 가격 수준에서 기업이 판매하려는 수량의 관계를 나타냅니다. 그것이 우상향하는 근본 이유는 한계비용 체증(increasing marginal cost) 에 있습니다. 한계비용(Marginal Cost, MC) 이란 재화를 한 단위 더 생산하는 데 드는 추가 비용입니다.

왜 한계비용은 생산량이 늘수록 커지는 경향이 있을까요? 단기에는 공장·설비 같은 생산요소가 고정되어 있기 때문입니다. 처음에는 놀고 있던 설비와 여유 인력을 활용하므로 한 단위 더 만드는 비용이 낮습니다. 그러나 생산을 계속 늘리면 설비는 한계에 가까워지고, 야근·특근 수당을 지급해야 하고, 덜 효율적인 낡은 기계까지 동원하게 됩니다. 이를 수확체감(diminishing returns) 이라 하며, 그 결과 마지막 한 단위를 만드는 비용은 점점 비싸집니다. 커피 농장을 예로 들면, 가장 비옥하고 접근성 좋은 땅에서 먼저 재배하고, 생산을 늘리려면 점점 척박하고 외진 땅까지 개간해야 하므로 단위당 비용이 오릅니다.

이제 이윤을 극대화하려는 기업의 행동을 봅시다. 시장가격이 PP 로 주어졌을 때(경쟁시장의 개별 기업은 가격을 주어진 것으로 받아들입니다), 기업은 한 단위를 더 팔 때 얻는 수입 PP 가 그 단위를 만드는 비용 MCMC 보다 크기만 하면 계속 생산합니다. 반대로 MCMCPP 를 넘어서면 그 단위는 손해이므로 멈춥니다. 따라서 이윤이 극대화되는 지점은 정확히

P=MCP = MC

가 성립하는 곳입니다. 이 조건이 바로 공급곡선의 정체를 드러냅니다. 각 가격 PP 에서 기업이 공급하려는 수량은 'MCMC 가 그 PP 와 같아지는 수량’이므로, 공급곡선은 본질적으로 (기업의) 한계비용곡선입니다. 한계비용이 우상향하니 공급곡선도 우상향합니다. 이것이 공급의 법칙(law of supply) — 다른 조건이 일정할 때 가격이 오르면 공급량이 는다 — 의 미시적 기초입니다. 이 장의 예제에서 쓰는 공급곡선 P=10+QP = 10 + Q 는 'QQ 번째 단위의 한계비용이 10+Q10 + Q 원’이라는 뜻으로 읽으면 됩니다.

공급을 이동시키는 요인들

수요와 마찬가지로, 그 재화 '자신의 가격’이 아닌 다른 요인이 바뀌면 공급곡선 전체가 이동합니다. 이를 공급의 변화(shift of supply) 라 하며, 자신의 가격 변화로 인한 곡선 위의 이동인 공급량의 변화와 구별해야 합니다.

가장 중요한 이동요인은 투입요소의 가격(input prices) 입니다. 원료·임금·임대료·에너지 비용이 오르면 같은 수량을 만드는 데 더 큰 비용이 들므로 한계비용곡선(=공급곡선)이 위(=왼쪽)로 이동합니다. 커피 농사에서 비료·인건비가 오르면 공급이 감소하는 식입니다. 둘째, 기술(technology) 입니다. 생산성을 높이는 기술 진보는 한계비용을 낮춰 공급곡선을 오른쪽으로 이동시킵니다. 셋째, 자연·기후 충격 입니다. 서리·가뭄·홍수·병충해는 농산물 공급을 급격히 왼쪽으로 밀어냅니다 — 이 장의 실증 사례에서 커피가 정확히 이 경우입니다. 넷째, 조세와 보조금·규제 입니다. 생산에 부과되는 세금은 비용을 늘려 공급을 감소시키고, 보조금은 반대로 작용합니다. 다섯째, 생산자의 수, 여섯째, 미래 가격에 대한 기대 등이 있습니다.

이동요인관계한국적 예시
투입요소 가격↑공급 좌측 이동유가·인건비 상승 → 생산비 증가
기술 진보공급 우측 이동반도체 공정 미세화 → 단위 원가 하락
자연·기후 충격공급 좌측 이동브라질 서리 → 커피 공급 급감
생산 조세↑공급 좌측 이동생산세 부과 → 한계비용 상승
보조금 지급공급 우측 이동친환경차 보조금 → 공급 확대
생산자 수↑공급 우측 이동신규 기업 진입 → 시장 공급 증가

3.4 시장균형: 가격 발견의 과정

이제 두 힘을 한 무대에 올립니다. 수요는 우하향하고 공급은 우상향하므로, 두 곡선은 한 점에서 만납니다. 이 점이 시장균형(market equilibrium) 입니다. 균형이란 수요량과 공급량이 정확히 일치하는 상태 — 즉 Qd=QsQ_d = Q_s 가 성립하는 가격과 수량의 조합 — 입니다. 이때의 가격을 균형가격 PP^{*}, 수량을 균형거래량 QQ^{*} 라 부릅니다.

선형 모형으로 균형을 직접 구해 봅시다. 수요 P=abQP = a - bQ 와 공급 P=c+dQP = c + dQ 를 놓고 Qd=QsQ_d = Q_s, 즉 두 곡선의 높이가 같아지는 점을 찾으면 됩니다:

abQ=c+dQ        Q=acb+d,P=abQ.a - bQ^{*} = c + dQ^{*} \;\;\Longrightarrow\;\; Q^{*} = \frac{a - c}{b + d}, \qquad P^{*} = a - bQ^{*}.

우리의 수치 예제에서는 a=100, b=1, c=10, d=1a = 100,\ b = 1,\ c = 10,\ d = 1 이므로 Q=(10010)/(1+1)=45Q^{*} = (100-10)/(1+1) = 45, P=10045=55P^{*} = 100 - 45 = 55 입니다. 즉 수요 P=100QP = 100 - Q 와 공급 P=10+QP = 10 + Q 가 만나는 균형은 (Q,P)=(45,55)(Q^{*}, P^{*}) = (45, 55) 입니다.

하지만 균형을 이렇게 계산으로 ‘푸는’ 것은 절반의 이해에 불과합니다. 정작 중요한 질문은 이것입니다. 시장은 어떻게 이 점을 스스로 찾아가는가? 아무도 P=55P^{*} = 55 라고 미리 알지 못하는데 말입니다. 이것이 하이에크가 말한 가격 발견(price discovery) 의 문제이며, 다음 그림이 그 답의 첫 단추입니다. 왼쪽 패널은 균형을, 오른쪽 패널은 균형을 벗어난 두 상황(초과수요·초과공급)을 보여 줍니다.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
import logging

# 한글 폰트 자동 설정 (Windows: Malgun Gothic / macOS: AppleGothic / Linux·Colab: NanumGothic)
_available = {f.name for f in fm.fontManager.ttflist}
for _f in ['Malgun Gothic', 'AppleGothic', 'NanumGothic', 'Noto Sans CJK KR', 'Noto Sans KR']:
    if _f in _available:
        plt.rcParams['font.family'] = _f
        break
plt.rcParams['axes.unicode_minus'] = False
logging.getLogger('matplotlib.font_manager').setLevel(logging.ERROR)
# Colab에서 한글이 깨지면: !apt-get -qq install fonts-nanum && rm -rf ~/.cache/matplotlib (후 런타임 재시작)

# 수요: P = a - b*Q,  공급: P = c + d*Q
a, b = 100, 1.0      # 수요 절편/기울기
c, d = 10, 1.0       # 공급 절편/기울기

Q_star = (a - c) / (b + d)      # 균형거래량
P_star = a - b * Q_star         # 균형가격
print(f'균형: Q* = {Q_star:.1f}, P* = {P_star:.1f}')

Q = np.linspace(0, 100, 200)
P_d = a - b * Q
P_s = c + d * Q

fig, ax = plt.subplots(1, 2, figsize=(13, 5.2))

# (좌) 균형
ax[0].plot(Q, P_d, label='수요 (D)', color='#2563eb', lw=2.2)
ax[0].plot(Q, P_s, label='공급 (S)', color='#dc2626', lw=2.2)
ax[0].plot(Q_star, P_star, 'ko', ms=8)
ax[0].axhline(P_star, xmax=Q_star/100, ls=':', color='gray')
ax[0].axvline(Q_star, ymax=P_star/100, ls=':', color='gray')
ax[0].annotate(f'균형 (Q*={Q_star:.0f}, P*={P_star:.0f})', (Q_star, P_star),
               textcoords='offset points', xytext=(10, 10), fontweight='bold')
ax[0].set_title('시장균형: 수요 = 공급', fontweight='bold')
ax[0].set_xlabel('수량 Q'); ax[0].set_ylabel('가격 P'); ax[0].legend(); ax[0].set_xlim(0,100); ax[0].set_ylim(0,100)

# (우) 불균형: 초과공급/초과수요
P_high, P_low = 70, 30
Qd_h, Qs_h = (a-P_high)/b, (P_high-c)/d   # P_high에서
Qd_l, Qs_l = (a-P_low)/b, (P_low-c)/d     # P_low에서
ax[1].plot(Q, P_d, color='#2563eb', lw=2.2); ax[1].plot(Q, P_s, color='#dc2626', lw=2.2)
ax[1].plot(Q_star, P_star, 'ko', ms=7)
ax[1].hlines(P_high, Qs_h, Qd_h, color='#dc2626', lw=6, alpha=.35)
ax[1].annotate('초과공급\n(가격 하락 압력)', ((Qs_h+Qd_h)/2, P_high), textcoords='offset points',
               xytext=(0,10), ha='center', color='#b91c1c')
ax[1].hlines(P_low, Qd_l, Qs_l, color='#2563eb', lw=6, alpha=.35)
ax[1].annotate('초과수요\n(가격 상승 압력)', ((Qd_l+Qs_l)/2, P_low), textcoords='offset points',
               xytext=(0,-28), ha='center', color='#1d4ed8')
ax[1].set_title('불균형과 가격 발견', fontweight='bold')
ax[1].set_xlabel('수량 Q'); ax[1].set_ylabel('가격 P'); ax[1].set_xlim(0,100); ax[1].set_ylim(0,100)

plt.tight_layout(); plt.show()
균형: Q* = 45.0, P* = 55.0
<Figure size 1300x520 with 2 Axes>

위 그림의 두 패널을 자세히 해석해 봅시다. 왼쪽 패널은 균형 그 자체입니다. 파란색 수요곡선(P=100QP = 100 - Q)과 빨간색 공급곡선(P=10+QP = 10 + Q)이 검은 점 (Q,P)=(45,55)(Q^{*}, P^{*}) = (45, 55) 에서 교차합니다. 이 점에서, 그리고 오직 이 점에서만, 사려는 양과 팔려는 양이 정확히 일치합니다. 여기서 결정적인 사실은 균형가격 55원이 두 가지 서로 다른 것을 동시에 만족시킨다는 점입니다. 첫째, 45번째 단위를 사는 소비자의 유보가격이 정확히 55원(10045100 - 45)이고, 둘째, 45번째 단위를 만드는 생산자의 한계비용도 정확히 55원(10+4510 + 45)입니다. 즉 균형에서는 마지막 거래 단위의 사회적 가치(MVMV)와 사회적 비용(MCMC)이 같아집니다 — 이것이 §3.1 심화 상자에서 예고한 MV=P=MCMV = P^{*} = MC 조건의 그래프적 확인입니다.

오른쪽 패널은 균형이 아닌 상태에서 무슨 일이 벌어지는지를 보여 줍니다. 위쪽의 붉은 띠는 가격이 균형보다 높은 P=70P = 70 일 때의 상황입니다. 이 가격에서 소비자는 Qd=10070=30Q_d = 100 - 70 = 30 만 사려 하는데, 생산자는 Qs=7010=60Q_s = 70 - 10 = 60 이나 팔려 합니다. 그 차이 6030=3060 - 30 = 30 단위가 초과공급(excess supply, 잉여) 입니다. 팔리지 않은 재고가 쌓이므로 판매자들은 가격을 낮출 수밖에 없고, 가격은 아래로 밀려 내려갑니다. 아래쪽의 파란 띠는 가격이 균형보다 낮은 P=30P = 30 일 때입니다. 이 가격에서 소비자는 Qd=10030=70Q_d = 100 - 30 = 70 을 원하는데 생산자는 Qs=3010=20Q_s = 30 - 10 = 20 만 내놓습니다. 그 차이 7020=5070 - 20 = 50 단위가 초과수요(excess demand, 부족) 입니다. 물건이 모자라니 사려는 사람들이 서로 더 높은 값을 부르고, 가격은 위로 밀려 올라갑니다. 두 화살표는 모두 균형 55원을 향합니다. 균형은 밀어붙여진 것이 아니라, 개인들의 이기적 조정이 저절로 도달하는 끌개(attractor) 입니다.

조정 메커니즘: 균형은 어떻게 회복되는가

방금 본 것을 단계적 과정으로 정리하면, 시장이 스스로 균형을 찾아가는 논리가 또렷해집니다.

  1. 초과수요(부족) 상태(P<PP < P^{*}): 사려는 양 > 팔려는 양. 재화를 구하지 못한 소비자들이 더 높은 가격을 제시하며 경쟁 → 가격 상승 → 수요량은 줄고(곡선 위 이동) 공급량은 늘어(곡선 위 이동) 간격이 좁아짐 → PP^{*} 에 도달하면 멈춤.

  2. 초과공급(잉여) 상태(P>PP > P^{*}): 팔려는 양 > 사려는 양. 재고를 떠안은 판매자들이 더 낮은 가격을 제시하며 경쟁 → 가격 하락 → 수요량은 늘고 공급량은 줄어 간격이 좁아짐 → PP^{*} 에 도달하면 멈춤.

  3. 균형 상태(P=PP = P^{*}): 어느 쪽도 가격을 바꿀 유인이 없음. 시장은 '청산(clear)'되었다고 말합니다 — 팔고 싶은 사람은 모두 팔았고, 그 가격에 사고 싶은 사람은 모두 샀습니다.

핵심은, 이 조정을 지휘하는 감독이 없다는 것입니다. 각자는 그저 눈앞의 가격을 보고 자기 이익을 좇을 뿐인데, 그 결과 시스템 전체가 청산점으로 수렴합니다. 애덤 스미스가 '보이지 않는 손(invisible hand)'이라 부른 것의 가장 기초적인 작동 원리가 바로 이것입니다.

비교정태: 충격이 균형을 어떻게 바꾸는가

현실의 흥미로운 질문은 대부분 '무언가 변했을 때 균형이 어떻게 바뀌는가’입니다. 이렇게 하나의 균형에서 다른 균형으로의 변화를 비교하는 분석을 비교정태(comparative statics) 라 합니다. 가장 흔한 응용은 공급 충격(supply shock) 입니다. 다음 그림은 서리로 커피 생산비가 급등해 공급곡선이 왼쪽으로 이동하는 상황을 보여 줍니다.

# 공급 좌측 이동(서리로 인한 생산 감소): 절편 c 상승
c2 = 40  # 서리 후 공급 절편 (비용 상승 → 좌측 이동)
Q_star2 = (a - c2) / (b + d)
P_star2 = a - b * Q_star2
print(f'서리 전: Q*={Q_star:.0f}, P*={P_star:.0f}')
print(f'서리 후: Q*={Q_star2:.0f}, P*={P_star2:.0f}  → 가격 상승, 거래량 감소')

fig, ax = plt.subplots(figsize=(8, 5.5))
ax.plot(Q, a - b*Q, color='#2563eb', lw=2.2, label='수요 (D)')
ax.plot(Q, c + d*Q, color='#dc2626', lw=2.2, label='공급 (S₁, 서리 전)')
ax.plot(Q, c2 + d*Q, color='#dc2626', lw=2.2, ls='--', label='공급 (S₂, 서리 후)')
ax.plot(Q_star, P_star, 'ko', ms=8); ax.plot(Q_star2, P_star2, 'ks', ms=8)
ax.annotate('E₁', (Q_star, P_star), xytext=(8,-14), textcoords='offset points', fontweight='bold')
ax.annotate('E₂', (Q_star2, P_star2), xytext=(8,8), textcoords='offset points', fontweight='bold')
ax.annotate('', xy=(c2, 5), xytext=(c, 5), arrowprops=dict(arrowstyle='->', color='gray'))
ax.set_title('공급 충격(서리): 공급 좌측 이동 → 가격↑, 거래량↓', fontweight='bold')
ax.set_xlabel('수량 Q'); ax.set_ylabel('가격 P'); ax.legend(); ax.set_xlim(0,100); ax.set_ylim(0,100)
plt.tight_layout(); plt.show()
서리 전: Q*=45, P*=55
서리 후: Q*=30, P*=70  → 가격 상승, 거래량 감소
<Figure size 800x550 with 1 Axes>

이 그림은 비교정태의 교과서적 사례입니다. 서리가 커피나무를 상하게 하면 같은 수량을 생산하는 데 드는 한계비용이 전반적으로 올라갑니다. 모형에서는 공급곡선의 절편이 c=10c = 10 에서 c2=40c_2 = 40 으로 상승하는 것으로 표현됩니다 — 실선 S1S_1(P=10+QP = 10 + Q)이 점선 S2S_2(P=40+QP = 40 + Q)로, 즉 왼쪽(위쪽)으로 평행 이동합니다. 수요곡선은 그대로입니다(소비자의 사정은 변하지 않았으니까요).

새 균형 E2E_2 를 계산하면 Q2=(10040)/(1+1)=30Q_2^{*} = (100 - 40)/(1+1) = 30, P2=10030=70P_2^{*} = 100 - 30 = 70 입니다. 원래 균형 E1=(45,55)E_1 = (45, 55) 과 비교하면 결과는 명확합니다: 가격은 55원에서 70원으로 올랐고(\uparrow), 거래량은 45에서 30으로 줄었습니다(\downarrow). 이것이 공급 감소 충격의 전형적 서명(signature)입니다 — 가격 상승과 거래량 감소가 함께 나타납니다. 이 조합은 매우 중요합니다. 왜냐하면 §3.5에서 실제 데이터를 볼 때, 우리는 바로 이 '가격과 거래량이 같은 방향인가, 반대 방향인가’를 단서로 삼아 어떤 종류의 충격이었는지를 역으로 추론할 것이기 때문입니다.

한 가지 더 음미할 점은, 이 조정이 얼마나 ‘조용히’ 이루어지는가입니다. 서리는 브라질에서 일어났지만, 서울의 소비자는 브라질 날씨를 알 필요가 없습니다. 그는 그저 커피값이 올랐다는 사실만 보고 소비를 30으로 줄입니다. 반대로 베트남의 로부스타 농가는 커피값이 올랐다는 신호를 보고 생산을 늘릴 유인을 얻습니다. 하나의 가격 변화가 지구 반대편의 정보를 실어 나른 것 — 이것이 §3.1에서 본 하이에크의 통찰이 그래프 위에서 살아 움직이는 모습입니다.

비교정태의 네 가지 기본 경우

수요와 공급은 각각 증가하거나 감소할 수 있으므로, 단일 충격의 기본 조합은 네 가지입니다. 각 경우 균형가격과 균형거래량이 어떻게 움직이는지를 반드시 손에 익혀야 합니다. 요령은 늘 같습니다: 어느 곡선이 어느 방향으로 움직였는지 그린 뒤, 새 교점을 원래 교점과 비교하는 것입니다.

충격곡선 이동균형가격 PP^{*}균형거래량 QQ^{*}예시
수요 증가수요 우측 이동상승 ↑증가 ↑소득 증가·유행 → 그 재화 인기
수요 감소수요 좌측 이동하락 ↓감소 ↓코로나 봉쇄 → 원유 수요 급감
공급 증가공급 우측 이동하락 ↓증가 ↑기술 진보·풍작
공급 감소공급 좌측 이동상승 ↑감소 ↓서리·전쟁 → 원자재 공급 차질

이 표에서 눈여겨볼 규칙이 있습니다. 수요 충격은 가격과 거래량을 같은 방향으로 움직입니다(둘 다 오르거나 둘 다 내림). 반면 공급 충격은 가격과 거래량을 반대 방향으로 움직입니다(가격 오르고 거래량 내림, 또는 그 반대). 이 하나의 규칙이 실증 분석의 나침반입니다. 뉴스에서 어떤 상품의 '가격이 올랐고 거래량도 늘었다’면 수요가 늘어난 것이고, '가격이 올랐는데 거래량은 줄었다’면 공급이 준 것입니다. §3.5에서 커피와 원유 데이터로 정확히 이 추론을 연습합니다.

(주의: 두 곡선이 동시에 이동하면 결과가 모호해질 수 있습니다. 예컨대 수요와 공급이 함께 늘면 거래량은 반드시 늘지만 가격은 두 이동의 상대적 크기에 따라 오를 수도 내릴 수도 있습니다. 이때는 어느 힘이 더 강한지를 따로 판단해야 합니다.)

3.5 실증 사례: 원자재 가격 변동성

지금까지의 이론이 실제 세계에서 얼마나 잘 작동하는지 확인할 차례입니다. 이론을 시험하기에 가장 좋은 무대는 원자재(commodity) 시장입니다. 커피·원유·구리 같은 원자재는 전 세계에서 표준화된 형태로, 거의 완전경쟁에 가까운 조건에서 거래됩니다. 상품이 동질적이고 참여자가 무수히 많아, 우리가 §3.2~3.4에서 세운 수요·공급 모형의 가정에 현실이 매우 근접합니다. 게다가 서리·전쟁·팬데믹 같은 외생적 충격이 종종 발생해, 수요와 공급이 이동하는 '깨끗한 자연 실험’을 제공합니다.

우리는 세계은행(World Bank)이 매월 발표하는 원자재 가격 데이터(Commodity Price Data, 통칭 ‘핑크시트’ Pink Sheet) 를 사용합니다. 1960년부터 현재까지 수십 종의 원자재에 대한 월평균 명목가격()을 담은 공개 자료입니다. 먼저 아라비카 커피 가격을 1988년부터 그려 보고, 역사적으로 알려진 주요 공급 충격(서리·가뭄) 시점을 표시해 이론이 예측한 '공급 감소 → 가격 급등’이 실제로 나타나는지 확인하겠습니다.

import urllib.request, io

# World Bank Commodity Price Data (Pink Sheet) — 월별, 명목 US$, 1960~현재. 무키.
# 최신 링크는 https://www.worldbank.org/en/research/commodity-markets 에서 확인 가능
PINK_URL = ('https://thedocs.worldbank.org/en/doc/'
            '18675f1d1639c7a34d463f59263ba0a2-0050012025/related/CMO-Historical-Data-Monthly.xlsx')

def load_pinksheet(url=PINK_URL):
    req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'})
    raw = urllib.request.urlopen(req, timeout=90).read()
    df = pd.read_excel(io.BytesIO(raw), sheet_name='Monthly Prices', header=4)
    df = df.drop(index=0).reset_index(drop=True)          # 단위 행 제거
    df = df.rename(columns={df.columns[0]: 'date'})
    df['date'] = pd.to_datetime(df['date'].str.replace('M', '-'), format='%Y-%m')
    for col in df.columns[1:]:
        df[col] = pd.to_numeric(df[col], errors='coerce')  # '…' → NaN
    return df.set_index('date')

pink = load_pinksheet()
print('기간:', pink.index.min().date(), '~', pink.index.max().date())
coffee = pink['Coffee, Arabica'].loc['1988':]

fig, ax = plt.subplots(figsize=(11, 5.2))
ax.plot(coffee.index, coffee.values, color='#6b3f2b', lw=1.6)
ax.set_title('World Bank 아라비카 커피 가격 ($/kg) 과 공급 충격', fontweight='bold')
ax.set_xlabel('연도'); ax.set_ylabel('아라비카 커피 ($/kg)')

for yr, label in [('1994-07', '1994 브라질 서리'), ('2011-04', '2011 급등'), ('2021-07', '2021 브라질 서리·가뭄')]:
    d = pd.Timestamp(yr)
    ax.axvline(d, color='#dc2626', ls='--', lw=1, alpha=.7)
    ax.annotate(label, (d, coffee.max()*0.96), rotation=90, va='top', ha='right',
                fontsize=9, color='#b91c1c')
plt.tight_layout(); plt.show()
기간: 1960-01-01 ~ 2025-12-01
<Figure size 1100x520 with 1 Axes>

그림은 이론이 예측한 바를 교과서처럼 확인해 줍니다. 아라비카 커피 가격은 평온하게 흐르다가 특정 시점마다 날카로운 봉우리를 그립니다. 표시된 세 시점 — 1994년 브라질 서리, 2011년 급등, 2021년 브라질 서리·가뭄 — 은 모두 물리적 작황을 훼손한 공급 측 사건들입니다. 서리가 커피나무를 얼려 죽이면 그해뿐 아니라 이듬해 수확까지 줄어들고, 이는 공급곡선을 급격히 왼쪽으로 밀어냅니다(§3.4의 C2 그림과 정확히 같은 메커니즘). 그 결과가 바로 이 가격 스파이크입니다.

특히 브라질이 세계 아라비카 생산의 약 3분의 1을 차지한다는 점이 이 패턴의 열쇠입니다. 지배적 생산국 한 곳의 기상 이변이 세계 공급곡선 전체를 움직일 만큼 큰 충격이 되는 것입니다. 여기서 이론과의 연결을 한 번 더 확인합시다. 공급 충격이므로 가격은 오르고 거래량(생산·소비량)은 줄어야 합니다 — 그림은 가격만 보여 주지만, 실제로 이 시기 세계 커피 소비량은 감소했고 소비자들은 값싼 로부스타 품종으로 대체했으며, 높은 가격 신호를 받은 콜롬비아·베트남 등 다른 산지는 증산에 나섰습니다. 아무도 '커피를 아껴 쓰라’거나 '증산하라’고 명령하지 않았지만, 오른 가격 하나가 소비 억제와 대체·증산이라는 조정을 전 세계에서 동시에 이끌어 낸 것입니다. 이것이 하이에크의 가격 신호가 데이터 위에 남긴 흔적입니다.

원유(Brent) 충격의 유형 판별

이제 조금 더 어려운 문제에 도전합니다. 커피의 경우는 원인이 명백한 공급 충격이었습니다. 그러나 현실의 가격 변동은 수요 때문일 수도, 공급 때문일 수도 있습니다. 우리는 가격과 거래량의 움직임만으로 어느 쪽인지 판별할 수 있을까요? §3.4에서 얻은 나침반 — 수요 충격은 가격·거래량 같은 방향, 공급 충격은 반대 방향 — 을 실전에 적용해 봅시다.

무대는 원유입니다. 2019년부터 2023년까지의 브렌트(Brent)유 가격에는 성격이 정반대인 두 개의 거대한 충격이 담겨 있습니다. 하나는 2020년 코로나 팬데믹, 다른 하나는 2022년 러시아-우크라이나 전쟁입니다. 각각이 수요 충격이었는지 공급 충격이었는지를, 데이터를 보고 판별해 봅시다.

brent = pink['Crude oil, Brent'].loc['2019':'2023']

fig, ax = plt.subplots(figsize=(11, 5.2))
ax.plot(brent.index, brent.values, color='#111827', lw=1.8)
ax.set_title('World Bank 원유(Brent) 월평균 가격 ($/bbl), 2019–2023', fontweight='bold')
ax.set_xlabel('연도'); ax.set_ylabel('Brent ($/bbl)')

# 2020 코로나: 수요 충격 / 2022 러-우 전쟁: 공급 충격
ax.axvspan(pd.Timestamp('2020-02'), pd.Timestamp('2020-06'), color='#2563eb', alpha=.15)
ax.annotate('2020 코로나 봉쇄\n(수요 충격 → 가격 급락)', (pd.Timestamp('2020-04'), brent.min()),
            xytext=(0,30), textcoords='offset points', ha='center', color='#1d4ed8', fontsize=9)
ax.axvspan(pd.Timestamp('2022-02'), pd.Timestamp('2022-08'), color='#dc2626', alpha=.15)
ax.annotate('2022 러시아-우크라이나 전쟁\n(공급 충격 → 가격 급등)', (pd.Timestamp('2022-05'), brent.max()),
            xytext=(0,-4), textcoords='offset points', ha='center', color='#b91c1c', fontsize=9)
plt.tight_layout(); plt.show()

print(f"2020년 4월 Brent 월평균: ${brent.loc['2020-04'].iloc[0]:.1f}/bbl (수요 붕괴)")
print(f"2022년 최고 월평균: ${brent.max():.1f}/bbl (공급 우려)")
print('참고: 2020년 4월 한때 마이너스 가격은 미국 WTI 선물의 일간 이례 현상으로, 월평균 Brent와는 다릅니다.')
<Figure size 1100x520 with 1 Axes>
2020년 4월 Brent 월평균: $23.3/bbl (수요 붕괴)
2022년 최고 월평균: $120.1/bbl (공급 우려)
참고: 2020년 4월 한때 마이너스 가격은 미국 WTI 선물의 일간 이례 현상으로, 월평균 Brent와는 다릅니다.

두 봉우리와 골짜기는 정반대 성격의 충격을 선명하게 드러냅니다.

2020년 코로나 봉쇄 — 수요 충격. 그림에서 2020년 초 가격은 절벽처럼 무너져, 4월 브렌트 월평균이 약 $23.3/bbl 까지 추락합니다. 원인은 명백합니다. 전 세계가 봉쇄되면서 자동차·항공·공장이 멈췄고, 원유 수요가 순식간에 증발했습니다. 이는 수요곡선의 급격한 좌측 이동이며, 그 서명은 '가격 하락 + 거래량 감소’입니다 — 실제로 이 시기 원유 소비량도 함께 급감했습니다. 가격과 거래량이 같은 방향(둘 다 하락)으로 움직였다는 것이 수요 충격의 결정적 단서입니다.

2022년 전쟁 — 공급 충격. 반대로 2022년에는 가격이 치솟아 월평균 최고 약 $120.1/bbl 에 이릅니다. 주요 산유국 러시아에 대한 제재와 공급 차질 우려가 공급곡선을 왼쪽으로 밀어낸 것입니다. 서명은 '가격 상승 + 거래량 감소’로, 가격과 거래량이 반대 방향으로 움직입니다 — 이것이 공급 충격의 표식입니다. 유럽 가정에는 이 높은 가격이 '에너지를 아끼고 대체하라’는 신호로 작동했고, 실제로 난방 절약과 에너지원 다변화(LNG·재생에너지 등)를 촉발했습니다.

한 가지 흔한 오해를 정리해 둡시다. 2020년 4월 '유가가 마이너스로 떨어졌다’는 뉴스를 기억하는 사람이 많습니다. 그러나 그것은 미국 WTI 선물의 특정 만기 계약에서 하루 동안 벌어진 이례 현상으로, 저장 공간이 바닥나 ‘기름을 받는 대가로 돈을 얹어 주는’ 극단적 상황이었습니다. 이는 우리가 보는 브렌트 월평균 가격과는 다른 이야기이며, 우리의 수요·공급 모형이 다루는 '재화의 시장가격’과 구별해야 합니다. 판별 연습의 핵심은 마이너스 값 같은 이상치가 아니라, 가격과 거래량이 함께 어느 방향으로 움직였는가를 보는 것입니다.

이중경매 시뮬레이션: 분권적 가격 발견의 시연

마지막으로, 이 장을 연 근본 질문으로 돌아갑니다. 시장은 정말로 이론적 균형을 '발견’할까요? 아무도 균형가격을 미리 모르는데도? 이를 컴퓨터 실험으로 직접 확인해 봅시다. 이중경매(double auction) 는 다수의 매수자와 다수의 매도자가 동시에 호가를 내고 흥정으로 거래하는 시장 형태로, 실제 증권·상품 거래소가 작동하는 방식과 본질적으로 같습니다.

실험 설계는 이렇습니다. 40명의 매수자에게 서로 다른 지불용의(WTP)를, 40명의 매도자에게 서로 다른 비용을 무작위로 부여합니다. 이 값들은 오직 각자만 알고 있습니다 — 하이에크가 말한 '흩어진 지식’을 흉내 낸 것입니다. 그런 다음 매수자와 매도자를 무작위로 짝지어, 매수자의 WTP가 매도자의 비용보다 크거나 같으면 그 중간값에 거래를 성사시킵니다. 아무도 전체 그림을 보지 못하고, 아무도 균형가격을 계산하지 않습니다. 각자는 그저 눈앞의 상대와 흥정할 뿐입니다. 과연 이 분권적 아수라장에서 질서가 나타날까요?

rng = np.random.default_rng(7)
N = 40
wtp = np.sort(rng.uniform(20, 100, N))[::-1]   # 매수자 지불용의 (내림차순 → 수요 계단)
cost = np.sort(rng.uniform(10, 90, N))          # 매도자 비용 (오름차순 → 공급 계단)

# 이론적 균형: 수요 계단과 공급 계단이 교차하는 거래량
q_eq = int(np.sum(wtp >= cost))
p_eq_lo, p_eq_hi = cost[q_eq-1], wtp[q_eq-1]
print(f'이론적 균형 거래량 ≈ {q_eq}, 균형가격 구간 ≈ [{p_eq_lo:.1f}, {p_eq_hi:.1f}]')

# 무작위 이중경매: 매수자·매도자를 무작위로 짝지어 (WTP >= 비용)이면 중간값에 체결
buyers = list(wtp); sellers = list(cost); trades = []
for _ in range(300):
    if not buyers or not sellers: break
    bi = rng.integers(len(buyers)); si = rng.integers(len(sellers))
    if buyers[bi] >= sellers[si]:
        price = (buyers[bi] + sellers[si]) / 2
        trades.append(price)
        buyers.pop(bi); sellers.pop(si)

trades = np.array(trades)

fig, ax = plt.subplots(1, 2, figsize=(13, 5.2))
# (좌) 계단형 수요·공급 + 균형
ax[0].step(np.arange(1, N+1), wtp, where='mid', color='#2563eb', label='수요(정렬된 WTP)')
ax[0].step(np.arange(1, N+1), cost, where='mid', color='#dc2626', label='공급(정렬된 비용)')
ax[0].axvline(q_eq, ls=':', color='gray'); ax[0].axhline((p_eq_lo+p_eq_hi)/2, ls=':', color='gray')
ax[0].set_title('계단형 수요·공급과 이론 균형', fontweight='bold')
ax[0].set_xlabel('거래 단위'); ax[0].set_ylabel('가격'); ax[0].legend()
# (우) 체결가의 시간적 수렴
cummean = np.cumsum(trades) / np.arange(1, len(trades)+1)
ax[1].plot(np.arange(1, len(trades)+1), trades, 'o', ms=4, color='#9ca3af', label='개별 체결가')
ax[1].plot(np.arange(1, len(trades)+1), cummean, '-', lw=2.2, color='#374151', label='누적 평균 체결가')
ax[1].axhline((p_eq_lo+p_eq_hi)/2, ls='--', color='#16a34a', label='이론 균형가(중앙)')
ax[1].set_title('체결가의 누적 평균이 이론 균형으로 수렴', fontweight='bold')
ax[1].set_xlabel('체결 순서'); ax[1].set_ylabel('체결 가격'); ax[1].legend()
plt.tight_layout(); plt.show()

print(f'평균 체결가 = {trades.mean():.1f}  (이론 균형가 중앙 ≈ {(p_eq_lo+p_eq_hi)/2:.1f})')
이론적 균형 거래량 ≈ 22, 균형가격 구간 ≈ [57.2, 57.3]
<Figure size 1300x520 with 2 Axes>
평균 체결가 = 55.6  (이론 균형가 중앙 ≈ 57.2)

결과는 하이에크의 통찰을 시각적으로 증명합니다. 왼쪽 패널은 개별 값들을 정렬해 만든 계단형 수요·공급곡선입니다 — 매수자들의 WTP를 내림차순으로, 매도자들의 비용을 오름차순으로 늘어세우면 각각 §3.2~3.3에서 배운 우하향 수요·우상향 공급의 계단 근사가 됩니다. 두 계단이 교차하는 지점이 이론적 균형이며, 이 실험에서 이론 균형거래량은 약 22단위입니다(즉 'WTP \geq 비용’인 짝이 약 22쌍 존재).

오른쪽 패널이 핵심입니다. 회색 점들은 무작위 매칭으로 성사된 개별 체결가인데, 보시다시피 위아래로 넓게 흩어져 있습니다. 어떤 운 좋은 매수자는 매우 싸게 사고, 어떤 짝은 비싸게 거래합니다 — 무작위로 만나 중간값에 흥정하니 당연합니다. 그러나 진한 선, 즉 누적 평균 체결가를 보십시오. 거래가 쌓일수록 이 평균은 초록색 점선으로 표시된 이론 균형가로 부드럽게 수렴합니다. 개별 거래는 제각각이지만, 시장 전체가 집계한 가격은 이론이 예측한 바로 그 값으로 빨려 들어가는 것입니다.

이것이 이 장 전체의 결론입니다. 아무도 균형가격을 알지 못했고, 아무도 그것을 계산하지 않았으며, 이들을 조율하는 중앙 계획가도 없었습니다. 각자는 오직 자신의 유보가격·비용과 눈앞의 상대만 알았을 뿐입니다. 그런데도 시장은 흩어진 정보를 하나의 가격으로 집약해 냈습니다. 이것이 §3.1에서 만난 하이에크의 분권적 가격 발견 — 시장이 '아무도 소유하지 않은 지식’을 처리하는 경이로운 계산 장치라는 통찰 — 이 데이터 위에서 살아 움직이는 모습입니다. 수요·공급이라는 단순한 두 곡선이, 사실은 인류가 아는 가장 강력한 정보 처리 시스템의 청사진인 셈입니다.

이 장의 요약

이 장에서 우리는 시장이 어떻게 작동하는지를 근본 원리에서부터 실제 데이터까지 관통해 살펴보았습니다. 핵심을 되짚어 봅시다.

  1. 시장이 푸는 문제는 조율이다. 현대 경제의 지식은 무수한 개인에게 흩어져 있어 어느 한 곳에 모을 수 없습니다. 하이에크는 가격이 이 흩어진 지식을 압축한 신호로서, 각자가 세상 전체를 알지 못해도 올바르게 행동하게 만든다고 보았습니다. 가격은 정보 전달·유인 제공·소득 분배의 세 기능을 하나의 숫자로 수행합니다.

  2. 수요는 소비자의 가치에서 나온다. 한계가치가 체감하므로 소비자는 '유보가격(WTP) \geq 가격’인 단위까지만 삽니다. 이로부터 수요의 법칙(우하향)이 도출되고, 시장수요곡선은 개별 유보가격을 높은 순서로 늘어세운 것입니다. 곡선의 높이 = 한계가치 = 유보가격.

  3. 공급은 생산자의 비용에서 나온다. 한계비용이 체증하므로 이윤을 극대화하는 기업은 P=MCP = MC 까지 생산합니다. 이로부터 공급의 법칙(우상향)이 도출되며, 공급곡선은 본질적으로 한계비용곡선입니다.

  4. 균형은 Qd=QsQ_d = Q_s 인 점이며, 시장이 스스로 발견한다. 선형 모형에서 Q=(ac)/(b+d)Q^{*} = (a-c)/(b+d); 예제에서 (Q,P)=(45,55)(Q^{*}, P^{*}) = (45, 55). 균형을 벗어나면 초과수요(가격 상승 압력) 또는 초과공급(가격 하락 압력)이 발생해 가격이 자동으로 균형으로 조정됩니다.

  5. 비교정태로 충격의 효과를 예측한다. 수요 충격은 가격·거래량을 같은 방향으로, 공급 충격은 반대 방향으로 움직입니다. 서리(공급 감소)는 가격↑·거래량↓; 예제에서 (30,70)(30, 70).

  6. 경쟁균형은 총잉여(CS+PS)를 극대화한다. 마지막 거래 단위에서 MV=P=MCMV = P^{*} = MC 가 성립해 효율적입니다.

  7. 실제 데이터가 이론을 확인한다. 커피 가격 스파이크는 서리라는 공급 충격의 흔적이고, 2020년 유가 폭락은 수요 충격, 2022년 급등은 공급 충격입니다. 이중경매 시뮬레이션은 분권적 거래가 흩어진 정보를 균형가격으로 집약함을 보여 주었습니다.

핵심 용어 (Key Terms)

한국어English정의
시장Market사려는 자와 팔려는 자가 만나 거래하고 가격이 형성되는 제도적 장
가격 신호Price signal흩어진 정보를 하나의 숫자로 압축해 전달하는 가격의 정보 전달 기능
조율Coordination서로 모르는 다수의 경제주체가 자원 배분을 맞추어 가는 문제
지불용의Willingness to Pay (WTP)소비자가 재화 한 단위를 얻기 위해 포기할 용의가 있는 최대 금액
유보가격Reservation price구매/비구매를 가르는 문턱 가격; 개별 단위의 WTP
수요의 법칙Law of demand다른 조건이 일정할 때 가격이 오르면 수요량이 감소하는 관계
한계가치(효용) 체감Diminishing marginal value/utility소비량이 늘수록 추가 한 단위의 가치가 줄어드는 현상
수요량의 변화Change in quantity demanded그 재화 자신의 가격 변화로 인한 수요곡선 위의 이동
수요의 변화Change in demand가격 이외 요인에 의한 수요곡선 자체의 좌우 이동
정상재 / 열등재Normal / Inferior good소득 증가 시 수요가 각각 증가 / 감소하는 재화
대체재 / 보완재Substitutes / Complements서로 대신 쓰이는 / 함께 쓰이는 재화
공급의 법칙Law of supply다른 조건이 일정할 때 가격이 오르면 공급량이 증가하는 관계
한계비용Marginal Cost (MC)재화를 한 단위 더 생산하는 데 드는 추가 비용
이윤극대화 조건Profit-maximizing condition경쟁기업이 P=MCP = MC 까지 생산하는 최적화 규칙
균형Equilibrium수요량과 공급량이 일치(Qd=QsQ_d = Q_s)하는 가격·수량 조합
초과수요Excess demand (shortage)주어진 가격에서 수요량 > 공급량인 상태; 가격 상승 압력
초과공급Excess supply (surplus)주어진 가격에서 공급량 > 수요량인 상태; 가격 하락 압력
가격 발견Price discovery분권적 거래를 통해 시장이 균형가격을 찾아가는 과정
비교정태Comparative statics충격 전후의 두 균형을 비교하는 분석 방법
공급 충격 / 수요 충격Supply / Demand shock공급곡선 / 수요곡선을 이동시키는 외생적 사건
소비자잉여Consumer Surplus (CS)유보가격과 실제 지불가격의 차이의 합; 수요곡선 아래·가격선 위 넓이
생산자잉여Producer Surplus (PS)받은 가격과 한계비용의 차이의 합; 가격선 아래·공급곡선 위 넓이
총잉여Total Surplus (TS)CS + PS; 시장 거래로 사회가 얻는 순이득
자중손실Deadweight loss거래량이 효율적 수준을 벗어나 실현되지 못한 잉여
이중경매Double auction다수 매수·매도자가 동시에 호가를 내고 흥정하는 거래 방식

연습문제

[개념 확인]

  1. '수요량의 변화’와 '수요의 변화’를 정의하고, 각각을 유발하는 요인을 하나씩 들어 설명하시오. 아이스크림값이 내려 판매가 늘어난 것은 둘 중 무엇인가?

  2. 공급곡선이 우상향하는 이유를 '한계비용 체증’과 '이윤극대화 조건 P=MCP = MC’를 사용해 설명하시오.

  3. 하이에크가 말한 '가격이 나르는 정보’가 무엇인지, 주석 광산 폐쇄의 예를 들어 세 문장 이내로 설명하시오.

  4. 다음 각각이 커피의 수요를 이동시키는지 공급을 이동시키는지, 그리고 어느 방향인지 밝히시오. (a) 소비자 소득 증가 (b) 브라질 서리 (c) 홍차(대체재) 가격 하락 (d) 커피 농사 인건비 상승.

[계산]

  1. 수요가 P=1202QP = 120 - 2Q, 공급이 P=20+3QP = 20 + 3Q 로 주어졌다. 균형가격 PP^{*} 와 균형거래량 QQ^{*} 를 구하시오.

  2. 문제 5의 시장에서 소비자잉여, 생산자잉여, 총잉여를 각각 계산하시오. (힌트: 수요의 세로축 절편은 120, 공급의 세로축 절편은 20이다.)

  3. 본문 예제(P=100QP = 100 - Q, P=10+QP = 10 + Q, 균형 (45,55)(45, 55))에서, 정부가 가격을 40원으로 묶는 상한을 설정했다고 하자. 이 가격에서 수요량과 공급량을 구하고, 초과수요 또는 초과공급이 얼마나 발생하는지 계산하시오.

  4. 문제 7과 같은 시장에서, 공급곡선이 P=10+QP = 10 + Q 에서 P=25+QP = 25 + Q 로 이동(공급 감소)했다. 새 균형가격과 균형거래량을 구하고, 가격과 거래량이 각각 어느 방향으로 변했는지 비교정태 규칙과 일치하는지 확인하시오.

[데이터 응용]

  1. C4의 원유 그림에서, 2020년 4월 브렌트 월평균은 약 $23.3/bbl, 2022년 최고 월평균은 약 $120.1/bbl이었다. 두 사건 중 하나는 수요 충격, 다른 하나는 공급 충격이다. 각각이 어느 유형인지 ‘가격과 거래량의 동시 움직임’ 규칙을 근거로 판별하시오. 또한 '2020년 4월의 마이너스 유가’는 왜 이 판별의 근거로 부적절한지 설명하시오.

  2. C3의 커피 그림에서 1994년과 2021년의 가격 급등은 모두 브라질 서리와 관련된다. 브라질이 세계 아라비카 생산의 약 3분의 1을 차지한다는 사실이 왜 이 패턴(한 나라의 기상 이변이 세계 가격을 흔드는 것)을 설명하는 데 중요한지 서술하시오.

[서술형·심화]

  1. C5의 이중경매 시뮬레이션에서, 개별 체결가는 넓게 흩어지지만 누적 평균은 이론 균형가로 수렴했다. 이 결과가 하이에크의 ‘분권적 가격 발견’ 개념을 어떻게 뒷받침하는지, 중앙계획과 대비하여 논술하시오.

  2. 어떤 재화에 대해 '수요가 증가’하는 동시에 '공급도 증가’했다고 하자. 균형거래량과 균형가격은 각각 어떻게 되는가? 한쪽이라도 명확히 예측할 수 없는 경우가 있다면 그 이유를 두 곡선 이동의 상대적 크기 관점에서 설명하시오.

  3. (통합 사고) '가격을 통제하면(예: 상한제) 왜 부족이 생기고 총잉여가 줄어드는가’를, 초과수요 개념과 자중손실 개념을 함께 사용해 설명하시오. 라면·전세·휘발유 등 한국의 사례 하나를 들어 구체화하시오.