4만 년 전, 황해는 거대한 평원이었다: 최신 데이터로 복원한 고대 동아시아의 모습
우리 한민족의 조상은 아프리카에서 나와 4만여년 전에 북동아시아와 한반도에 도착했다. 이 메모는 지금으로부터 4만 년 전 동아시아의 해안선이 어떤 모습이었는지를 두 가지 종류의 최신 데이터를 사용해 복원한 이야기이다. 특히 두 가지 큰 질문에 대한 답을 찾고자 했다. 첫째, 오늘날 우리가 아는 황해는 당시에도 바다였을까? 둘째, 한반도와 일본 열도 사이의 대한해협(쓰시마 해협)은 열려 있었을까, 아니면 닫혀 있었을까?
이 질문에 답하기 위해, 우리는 다음과 같은 두 가지 데이터를 활용해 교차 검증을 했다.
- 과거 6만 년의 기후 변화를 담은 저해상도 지도 (Landmask): 이 자료는 마치 오랜 시간의 변화를 담은 타임랩스 영상처럼, 황해가 언제부터 땅으로 드러났는지 그 전체적인 흐름을 보여준다 (Armstrong et al., 2019).
- 오늘날의 초고해상도 해저 지형도 (GEBCO 2025): 이 자료는 마치 정밀한 위성사진처럼, 대한해협의 좁은 물길이 과연 존재했는지를 세밀하게 들여다볼 수 있게 해준다. 해수면이 지금보다 70m, 80m, 90m 낮아졌을 때의 모습을 시뮬레이션하여 해협의 연결 상태와 가장 좁은 지점의 폭을 직접 측정했다.
결론은 명확했다. 여러 연구에서 밝혀졌듯, 4만 년 전 지구의 평균 해수면은 오늘날보다 약 80m가량 낮았다 (Spratt & Lisiecki, 2016; Waelbroeck et al., 2002). 이 조건에 맞춰 분석한 결과, 황해는 바다가 아닌 광활한 평원이었다. 또한 대한해협은 완전히 막히지 않고, 바닷물이 흐르는 통로가 분명히 존재했다. 해수면이 80m 낮아진 상태를 기준으로 할 때, 대한해협의 가장 좁은 부분(최협부)의 폭은 약 93km, 물의 평균 깊이는 약 70m, 그리고 물이 흐르는 통로의 단면적은 약 656만 로 추정되었다.
이 연구는 시간의 흐름을 보여주는 저해상도 자료(landmask)만으로는 대한해협처럼 좁은 해협의 상태를 오판할 수 있으며, 반드시 정밀한 지형 데이터로 교차 확인해야 한다는 중요한 사실을 함께 보여준다.
1. 서론: 우리는 무엇을, 왜 알고 싶었을까?
지금으로부터 약 4만 년 전, 지구는 마지막 빙하기가 한창인 시기였다. 북반구의 많은 지역이 거대한 빙하로 뒤덮여 있었고, 그만큼 바닷물의 양이 줄어들어 해수면은 지금보다 훨씬 낮았다. 그 결과, 오늘날에는 바다 밑에 잠겨 있는 ‘대륙붕’이 넓은 육지로 드러났다.
이렇게 해안선이 크게 바뀌었다는 것은 당시 지구 환경에 엄청난 변화를 가져왔다는 뜻이다. 우리 조상들을 포함한 고대 인류와 동물들의 이동 경로가 달라졌을 것이고, 해안가의 생태계와 바다의 흐름 또한 지금과는 전혀 다른 모습이었을 것이다.
이 메모는 바로 이 시기, 동아시아의 지형에 대한 두 가지 핵심적인 질문에 답을 찾기 위해 시작되었다.
- (질문 1) 황해는 바다였을까, 아니면 드넓은 땅(평원)이었을까?
- (질문 2) 대한해협은 육지로 막혀 있었을까, 아니면 바닷물이 흐르는 통로가 있었을까?
이 두 질문은 서로 성격이 다르기 때문에, 각각에 맞는 최적의 데이터로 접근해야 정확한 답을 얻을 수 있다. 예를 들어, 황해처럼 거대한 지역이 언제 드러났는지를 보려면 시간의 흐름을 보여주는 데이터(장기 landmask)가 유용하다. 반면, 대한해협처럼 좁고 복잡한 지형이 연결되었는지를 알려면 공간의 정밀함을 보여주는 데이터(현대 해저지형)가 필수적이다 (Armstrong et al., 2019; GEBCO Compilation Group, 2025). 이 메모는 바로 이 두 가지 데이터를 모두 사용하여 질문에 대한 답을 찾아 나간다.
2. 분석의 재료: 어떤 데이터를, 얼마나 믿을 수 있나?
우리는 두 종류의 공개된 과학 데이터를 ‘분석의 재료’로 사용했다. 각각의 장점과 한계를 명확히 이해하는 것이 중요하다.
2.1. 소스 A — 시간의 흐름을 보여주는 ‘기후 지도’ (Armstrong et al., 2019)
이것은 무엇인가?
과거 6만 년 동안 북반구의 기후가 어떻게 변했는지를 컴퓨터 시뮬레이션으로 복원한 격자 형태의 데이터이다. 지도 위의 각 네모 칸(격자)마다 특정 시점에 그곳이 땅이었는지(1), 바다였는지(0)를 표시한 정보(land/sea mask, 즉 육지/바다 가면)가 포함되어 있다.
장점 (이 데이터가 강력한 이유)
수만 년이라는 긴 시간의 축을 따라 지형의 변화를 연속적으로 볼 수 있다. 덕분에 황해처럼 넓은 지역이 언제부터 땅으로 드러나기 시작했는지 그 거시적인 흐름을 파악하는 데 유용하다.
한계 (이 데이터의 약점)
지도를 구성하는 네모 칸 하나의 크기가 0.5°(위도상 약 55km)로, 오늘날의 위성사진에 비하면 해상도가 매우 낮다. 마치 흐릿한 사진처럼 세밀한 부분을 보기 어렵다. 이 때문에 대한해협처럼 폭이 수십 km에 불과한 좁은 물길은 그냥 하나의 ‘육지’ 칸으로 뭉뚱그려져, 실제로는 열려 있는데도 막힌 것처럼 보일 위험이 있다.
신뢰도 평가
이 데이터는 제작 방법과 공개 수준이 안정적이어서 많은 후속 연구에서 널리 인용되고 있다 (2019년 공개). 따라서 대륙 규모의 큰 그림을 보는 데는 신뢰도가 높다(상)고 할 수 있지만, 대한해협처럼 좁은 통로의 연결 여부를 판단하는 데는 신뢰도가 제한적(중~하)이라고 평가한다.
2.2. 소스 B — 공간의 정밀함을 보여주는 ‘해저 지형도’ (GEBCO 2025 Grid)
이것은 무엇인가?
인공위성과 선박 측정 자료를 총동원해 만든, 오늘날 지구 전체의 해저 지형을 담은 가장 최신의 정밀 디지털 지도이다. 지도를 구성하는 격자 하나의 크기가 15초(arc-second, 약 500m)에 불과해 매우 세밀하다. 이 지도를 이용하면 “만약 해수면이 지금보다 80m 낮아진다면, 바닷속 어느 곳이 물 밖으로 드러날까?”라는 질문에 대한 답을 직접 시뮬레이션해 볼 수 있다 (GEBCO Compilation Group, 2025).
장점 (이 데이터가 강력한 이유)
해수면이 특정 높이만큼 낮아졌을 때의 해안선을 실제 지형에 기반하여 직접 눈으로 확인할 수 있다. 대한해협의 깊은 골짜기나 가장 얕은 문턱 부분까지 정밀하게 평가할 수 있어, ‘바닷길이 있었는가’라는 형태적 질문에 답하는 데 가장 강력한 도구이다.
한계 (이 데이터의 약점)
이 지도는 ‘오늘날’의 해저 지형이다. 4만 년이라는 긴 세월 동안 땅이 솟아오르거나(빙하의 무게에 눌렸던 지각이 다시 부풀어 오르는 ‘등압성 반발’), 강물의 퇴적 작용으로 지형이 변했을 가능성을 반영하지는 못한다. 따라서 해협이 ‘연결되었는가/아닌가’라는 형태를 판단하는 데는 매우 유용하지만, 당시 흘렀던 바닷물의 정확한 양(유량)을 계산하는 데는 한계가 있다.
신뢰도 평가
지속적으로 업데이트되는 최신판(2025년) 데이터로, 해협의 형태적 연결성을 판단하는 데는 매우 높은 신뢰도(상)를 부여할 수 있다. 다만, 실제 유량을 정확히 알려면 별도의 해양 물리 모델 계산이 필요하다.
요약 판단: 어떤 질문에 어떤 데이터를 써야 할까?
- 대한해협에 ‘길’이 있었나? 라는 질문에는 GEBCO(소스 B)를 이용한 해수면 저하 시뮬레이션이 단연 최고의 방법이다.
- 황해는 ‘언제부터’ 땅이었나? 라는 질문에는 Landmask(소스 A)를 통해 시간의 흐름을 보는 것이 효과적이다.
가장 좋은 방법은 이 두 가지 데이터를 함께 보며 교차 확인하는 것이다.
3. 분석 과정: 답을 찾아가는 단계별 여정
우리는 복잡한 계산을 최대한 알기 쉽게 단계별로 나누어 진행했다.
3.1. 황해가 땅이었는지 확인하기 (소스 A 활용)
- Armstrong 연구팀이 만든 과거 기후 지도 데이터에서 정확히 4만 년 전 시점의 ‘육지/바다 가면’ 지도를 꺼내왔다 (Armstrong et al., 2019).
- 지도 위에 황해 지역을 네모난 상자(박스)로 지정했다. 이때 발해만(보하이만)을 포함한 경우와 제외한 경우, 두 가지로 나누어 분석했다.
- 지정한 박스 안에서 ‘육지’로 표시된 칸의 비율이 몇 퍼센트인지를 계산했다.
- 결과가 혹시라도 계산 조건에 따라 달라지지 않는지 확인하기 위해, ‘육지’로 판단하는 기준값(예: 0.5 이상이면 육지)을3, 0.5, 0.7로 바꾸어 보고, 분석 영역 박스의 경계도 조금씩(동서로 ±0.5°) 움직여가며 민감도를 점검했다.
3.2. 대한해협의 연결 상태 확인하기 (소스 B 활용)
- 매우 정밀한 GEBCO 2025 해저 지형도 원본을 계산에 용이하도록 25° 해상도로 약간 단순화(리샘플)했다. 이는 너무 데이터가 많으면 계산이 오래 걸리기 때문이며, 해협의 큰 연결성을 보는 데는 전혀 문제가 없는 수준이다.
- 해수면이 지금보다 70m, 80m, 90m 낮아진 세 가지 시나리오를 설정하고, 각 시나리오에 맞춰 바다로 남는 곳(True)과 육지로 드러나는 곳(False)을 구분하는 ‘가면(마스크)’을 만들었다.
- 대한해협 주변(예: 동경 128–132°, 북위 33–36°)을 박스로 설정하고, 그 안에서 다음 항목들을 계산했다.
- 연결성(connected) 판정: 남쪽의 동중국해와 북쪽의 동해(일본해)가 하나의 끊어지지 않은 바다 덩어리로 이어져 있는지를 컴퓨터 알고리즘으로 확인했다.
- 최협부(가장 좁은 지점) 찾기: 지도상의 각 위도 선을 따라가며 바다가 끊기지 않고 이어지는 구간의 폭을 모두 계산한 뒤, 그중 가장 좁은 폭이 얼마인지를 찾아냈다.
- 단면 정보 계산: 가장 좁은 지점의 단면을 잘라, 그곳의 평균적인 물의 깊이(H)와 물이 흐르는 통로의 전체 면적(A)을 계산했다.
- 마지막으로, 단면적(A)과 평균 깊이(H)를 이용해 만든 간단한 지표인 (여기서 는 중력상수)를 계산했다. 이는 실제 유량을 의미하는 것은 아니지만, 해수면 시나리오별로 물이 얼마나 활발하게 흐를 수 있었을지 그 상대적인 규모를 비교하는 데 도움이 된다.
4. 분석 결과: 데이터가 들려준 이야기
두 가지 데이터를 통해 얻은 결과는 놀랍도록 명확했다.
4.1. 황해: 98–100%의 땅, 광활한 평원의 탄생
- 발해만을 제외한 황해 분석 영역의 9%가 육지였다.
- 발해만을 포함한 황해 분석 영역은 100% 육지였다.
- ‘육지’로 판단하는 기준값을 바꾸거나 분석 영역을 조금씩 옮겨봐도 이 결과는 전혀 변하지 않았다. 이는 결과가 매우 안정적이고 신뢰할 수 있다는 의미이다.
→ 결론: 4만 년 전 황해는 오늘날과 같은 바다가 아니라, 거의 모든 지역이 물 밖으로 드러난 거대한 평원이었다 (Armstrong et al., 2019; Spratt & Lisiecki, 2016).
4.2. 대한해협: 좁지만 확실하게 열려 있던 바닷길
- 해수면을 70m, 80m, 90m 낮추는 어떤 시나리오에서도 대한해협은 남쪽과 북쪽이 끊기지 않고 연결된 상태(connected=True)로 확인되었다 (GEBCO Compilation Group, 2025).
- 가장 표준적인 시나리오인 해수면 80m 하강을 기준으로 했을 때, 대한해협의 모습은 다음과 같았다.
- 가장 좁은 지점의 폭: 약 09 km
- 그 지점의 평균 물 깊이(H): 약 5 m
- 물이 흐르는 통로의 단면적(A): 약 656만
- 상대 유량 지표 (): 약73×10⁸ (다른 시나리오와 비교하기 위한 기준값)
- 해수면을 70m나 90m로 바꾸어도 해협이 열려 있다는 사실은 변하지 않았고, 가장 좁은 폭도 약 93km에서 138km 사이에서 소폭 변할 뿐이었다.
→ 결론: 4만 년 전 대한해협은 지금보다 훨씬 좁았지만, 동중국해와 동해를 잇는 바닷길로서의 역할을 하는, 분명한 해수 통로였다.
5. 해석: 이 결과가 그리는 풍경
숫자와 데이터를 넘어, 당시의 풍경을 상상해 본다면 어떨까?
황해의 모습:
오늘날 평균 수심이 44m에 불과한 얕은 황해의 물이 모두 빠져나가면서, 그 자리에는 거대한 저지대 평원이 모습을 드러냈다. 이곳은 아마도 오늘날의 중국 대륙에서 흘러나온 큰 강들의 옛 물줄기와 수많은 습지, 호수들이 복잡하게 얽혀 있는, 생명이 넘치는 ‘땅의 바다’와 같은 모습이었을 가능성이 높다.
대한해협의 모습:
동해는 주변이 육지로 완전히 둘러싸인 거대한 호수가 아니었다. 남쪽의 따뜻한 바닷물이 북쪽으로 흘러 들어올 수 있는 ‘숨통’이 분명히 존재했다. 해협의 폭이 100km 안팎이었다면, 오늘날처럼 강력한 쿠로시오 난류의 지류가 흐르기는 어려웠을 것이다. 하지만 바다의 표층과 저층 사이에 소금기(염분), 산소, 영양분을 교환하고 당시 동해의 해양 환경을 결정짓는 데는 충분히 중요한 통로였을 것이다.
6. 신뢰도 점검: 얼마나 확신할 수 있으며, 한계는 무엇인가?
과학적인 분석에서는 ‘우리가 무엇을 얼마나 확실하게 아는가’와 ‘무엇을 아직 모르는가’를 명확히 하는 것이 매우 중요하다.
해수면 높이를 바꿔도 결론은 안정적인가?
네, 해수면을 –70m, –80m, –90m로 바꾸어 테스트해 보아도 대한해협이 ‘열려 있다’는 핵심 결론은 바뀌지 않았다. 이는 우리의 결론이 매우 안정적(robust)임을 보여준다.
분석 영역을 옮기면 어떻게 되나?
대한해협을 분석하는 박스의 위치를 동서남북으로 조금씩 옮겨 보아도, 가장 좁은 지점의 폭 추정치는 약간씩 변했지만 ‘해협이 연결되어 있다’는 질적인 결론은 동일했다.
우리가 사용한 데이터의 근본적인 한계:
- 소스 A (Landmask): 앞서 설명했듯, 이 데이터는 해상도가 낮고(0.5°), 해안선을 ‘있다/없다’의 흑백 논리(0/1 이진)로만 표현하기 때문에, 대한해협처럼 좁은 물길이 실제보다 쉽게 끊어진 것처럼 과장해서 보여줄 수 있다 (Armstrong et al., 2019).
- 소스 B (GEBCO): 이 데이터는 오늘날의 지형이므로, 4만 년 전의 지각 변동이나 퇴적/침식 작용의 효과를 담고 있지는 못한다. 따라서 해협의 ‘형태(연결/비연결)’를 판단하는 데는 최적이지만, 당시 흘렀던 바닷물의 ‘절대적인 양’을 정확히 계산하기에는 부족하다.
최신 연구 경향과의 부합성:
우리가 사용한 데이터는 각각 2019년(landmask)과 2025년(GEBCO)에 공개된 안정적이거나 최신 자료이다. 그리고 우리의 결론, 즉 4만 년 전에 해수면이 낮아져 황해 같은 대륙붕이 넓게 드러났다는 것은 고기후학 분야의 최신 연구 흐름과 정확히 일치한다 (Spratt & Lisiecki, 2016; Waelbroeck et al., 2002).
7. 최종 결론: 황해는 평원, 대한해협은 통로였다
서로 다른 장점과 단점을 가진 두 종류의 데이터를 교차 검증한 결과, 4만 년 전 황해는 광활한 평원이었고 대한해협은 열려 있는 바닷길이었다는 그림이 선명하게 그려졌다.
특히 대한해협의 연결 상태는 현대의 정밀한 해저 지형도를 바탕으로 해수면을 –70m에서 –90m까지 바꾸는 다양한 시나리오에서도 안정적으로 유지되었다. 또한 해수면이 80m 낮았을 때를 기준으로 가장 좁은 폭이 약 93km라는 구체적인 수치까지 얻을 수 있었다.
이 연구는 우리에게 중요한 교훈을 준다. 바로 해상도가 낮은 과거 기후 지도(landmask)만으로 좁은 해협의 상태를 판단하면, 물길이 ‘한 칸짜리 육지’로 표현되어 막힌 것으로 오해할 수 있다는 점이다. 따라서 해협과 관련된 문제를 다룰 때는 반드시 고해상도 지형 데이터를 이용한 교차 확인이 필수적이다.
이제 우리에게 남은 다음 과제는 ‘얼마나 많은 물이 흘렀는가’라는 유량(flow rate)의 정량화이다. 우리가 계산한 가장 좁은 지점의 단면적(A)과 평균 깊이(H) 값에, 동중국해와 동해 사이의 수위 차이, 바닥의 마찰 등을 고려한 간단한 수리 모델을 적용한다면, 계절에 따른 변화까지 포함한 상대적인 유량 곡선을 그려볼 수 있을 것이다. 이는 4만 년 전 동해와 황해의 해양 순환 그림을 더욱 생생하게 복원하는 데 큰 도움이 될 것이다.
참고문헌
Armstrong, E., Hopcroft, P.O. & Valdes, P.J. (2019) A simulated Northern Hemisphere terrestrial climate dataset for the past 60,000 years. Scientific Data, 6, 265.
GEBCO Compilation Group (2025) GEBCO 2025 Grid. (15″ global bathymetry, latest compilation).
Spratt, R.M. & Lisiecki, L.E. (2016) A Late Pleistocene sea level stack. Climate of the Past, 12, 1079–1092.
Waelbroeck, C., Labeyrie, L., Michel, E., Duplessy, J.C., McManus, J.F., Lambeck, K., Balbon, E. & Labracherie, M. (2002) Sea-level and deep water temperature changes derived from benthic foraminifera isotopic records. Quaternary Science Reviews, 21, 295–305.
[부록] 누구나 따라 할 수 있는 재현 방법
이 부록은 본문에서 제시한 “황해는 평원이었고, 대한해협은 열려 있었다”는 결론을 독자 여러분이 직접 컴퓨터로 재현해 볼 수 있도록, 데이터 다운로드부터 계산까지의 모든 과정을 안내한다.
각 단계는 ‘왜 이 작업이 필요한가(목적)’, ‘무엇으로 하는가(준비물)’, ‘어떻게 하는가(명령어/코드)’, ‘무엇을 확인해야 하는가(결과 검증)’ 순서로 구성했다. 간단한 수학 공식을 함께 제시하여 계산 결과가 어떤 원리로 나왔는지 직관적으로 이해할 수 있도록 돕는다.
(참고: 모든 설명은 Windows 운영체제와 명령 프롬프트(CMD)를 기준으로 한다. 파일 경로 예시는 그대로 사용하거나, 본인의 컴퓨터 환경에 맞게 수정할 수 있다.)
A. 준비물: 분석을 위한 도구와 재료
A-1. 소프트웨어: 우리의 연장 챙기기
- Python 3.11 버전: 데이터 분석에 널리 쓰이는 프로그래밍 언어이다. (Anaconda 환경에 설치하는 것을 권장한다.)
- Python 패키지 (도구 모음): 특정 작업을 쉽게 처리해주는 부품들이다.
- xarray, netcdf4: 과학 데이터(특히 지도 격자 데이터)를 읽고 다루는 데 필요하다.
- numpy, pandas: 숫자 계산과 데이터 정리를 위해 필요하다.
- scipy, matplotlib, Pillow: 각각 연결성 판정, 그래프 그리기, 이미지 저장을 위해 선택적으로 사용한다.
설치 예시 (Anaconda Prompt에서):
conda create -n paleo python=3.11 -y
conda activate paleo
conda install -c conda-forge xarray netcdf4 numpy pandas scipy matplotlib pillow -y
A-2. 데이터: 우리의 분석 재료
- 자료 1: 과거 기후 지도 (Armstrong et al., 2019)
- 내용: 과거 6만 년간 북반구의 월별 육지/바다 분포를 담은 격자 데이터.
- 용도: 황해가 언제부터 땅으로 드러났는지 큰 그림을 확인하는 데 사용.
- 핵심 가치: 긴 시간의 연속적인 변화를 보여주는 데 강점이 있다 (Armstrong et al., 2019).
- 자료 2: 현대 해저 지형도 (GEBCO 2025)
- 내용: 오늘날의 해저 높낮이를 담은 최신 고정밀 데이터.
- 용도: 해수면을 낮췄을 때 대한해협이 연결되는지, 가장 좁은 폭은 얼마인지 등 형태를 직접 확인하는 데 사용.
- 핵심 가치: ‘길이 있는가 없는가’와 같은 형태 문제에 가장 확실한 답을 준다 (GEBCO Compilation Group, 2025).
(주의: 데이터를 사용할 때는 항상 원 저작자의 라이선스 정책과 출처 표기 의무를 준수해야 한다. 특히 GEBCO 데이터는 항해 목적으로 사용하는 것이 금지되어 있다.)
B. 과거 기후 지도로 황해의 큰 그림 재현하기
B-0. 목 표
- 4만 년 전 시점에서, 황해 지역이 지도 격자상에서 바다(0)와 육지(1) 중 어느 쪽에 가까웠는지 평균값을 통해 확인한다.
- 황해 지역(발해만 포함/제외)의 ‘육지 비율(%)’을 계산하여, 당시 황해가 평원 상태였는지를 최종 판단한다.
B-1. 작업 개요
- 입력: Armstrong 연구팀의 육지/바다 지도 (NetCDF 파일, 0.5° 격자).
- 절차: ① 4만 년 전 시간대의 데이터 선택 → ② 황해 지역 박스 설정 → ③ 육지 비율 계산 → ④ 기준값을 바꾸며 결과의 안정성(민감도) 점검.
- 출력: csv (각 조건별 황해의 육지 비율을 정리한 표).
B-2. 분석 좌표 및 조건 (예시)
- 황해 (발해만 제외): 동경 118–126°, 북위 31–39°
- 황해 (발해만 포함): 동경 117–126°, 북위 35–41°
- 육지 판단 기준값:3 / 0.5 / 0.7 (세 가지 경우 모두 계산하여 비교)
B-3. 핵심 코드 요약 (Python)
import xarray as xr, numpy as np, pandas as pd
# (1) landmask 40–42.5 kyr, 37.5–40 kyr 블록을 열어 year_bp 축(절대연도)로 결합
# → 40,000 BP 레이어 선택
ds_hi = xr.open_dataset(r”C:\path\regrid_landmask_40_42.5kyr.nc”, engine=”netcdf4″)
ds_lo = xr.open_dataset(r”C:\path\regrid_landmask_37.5_40kyr.nc”, engine=”netcdf4″)
# 파일명에서 범위를 읽어 year_bp 생성(간단 버전: linspace)
def set_year_bp(ds, start, end):
n = ds.sizes[“time”]
return ds.assign_coords(year_bp=(“time”, np.linspace(start, end, n))).swap_dims({“time”:”year_bp”})
ds = xr.concat([set_year_bp(ds_hi, 42500, 40000),
set_year_bp(ds_lo, 40000, 37500)], dim=”year_bp”).sortby(“year_bp”)
lm = list(ds.data_vars)[0] # landmask 변수명 추정(예: sftlf)
ds40 = ds.sel(year_bp=40000, method=”nearest”)[lm]
if float(ds40.max()) > 1.5: ds40 = ds40/100.0 # % → 0..1 정규화
# (2) 박스별 평균(임계값 적용 후 면적가중 평균 권장)
def land_fraction(da, box, thr=0.5):
sub = da.sel(lon=slice(*box[“lon”]), lat=slice(*box[“lat”]))
land = (sub >= thr) # True=육지
w = np.cos(np.deg2rad(sub[“lat”])) # 위도 가중(면적가중)
return float(100*land.weighted(w).mean(dim=[“lat”,”lon”]))
boxes = {
“YS_no_Bohai”: {“lon”: (118,126), “lat”: (31,39)},
“YS_with_Bohai”:{“lon”: (117,126), “lat”: (35,41)}
}
rows=[]
for name,box in boxes.items():
for thr in [0.3,0.5,0.7]:
rows.append({“region”: name, “threshold”:thr,
“land_pct”: land_fraction(ds40, box, thr)})
pd.DataFrame(rows).to_csv(r”C:\paleo\SENSITIVITY_land_fraction_40ka.csv”, index=False)
B-4. 결과 확인 포인트
- 기대되는 결과값: 발해만 제외 시 약9%, 발해만 포함 시 약 100%의 육지 비율이 나와야 한다.
- 안정성: 육지 판단 기준값이나 박스 경계를 조금 바꾸어도 결과가 거의 변하지 않아야 한다.
- 해석의 한계 기억하기: 이 분석은 황해의 전반적인 상태를 보는 데는 탁월하지만, 해상도의 한계로 대한해협의 연결 여부를 판단하는 데는 적합하지 않다는 점을 기억해야 한다 (Armstrong et al., 2019).
C. 해저 지형도로 대한해협의 ‘연결 상태’ 재현하기
C-0. 목 표
- 해수면을 70m, 80m, 90m 낮춘 시나리오에서 대한해협의 남쪽과 북쪽이 바다로 연결되는지(connected)를 확인한다.
- 연결되어 있다면, 가장 좁은 지점의 폭, 평균 수심, 단면적을 구체적인 숫자로 계산한다.
- (심화) 해수면을 –60m부터 –120m까지 조금씩 바꿔가며 폭이 어떻게 변하는지 곡선으로 그려본다.
C-1. 분석 좌표 및 조건 (권장)
- 배경 지도 (시각화용): 동경2–131.8°, 북위 33.0–35.8°
- 계산 영역 (판정 박스): 동경5–131.7°, 북위 33.2–35.6°
- 기준 수심: –70m, –80m, –90m (필수) / –60m에서 –120m까지 (선택)
C-2. ‘연결성(connected)’ 판정이란?
컴퓨터에게 특정 영역의 지도를 주고, 그 안에서 바다인 픽셀(점)들만 남긴다. 그런 다음, 영역의 맨 아래쪽(남쪽 경계)에 있는 바다 픽셀과 맨 위쪽(북쪽 경계)에 있는 바다 픽셀이 서로 끊기지 않고 이어져 있는지를 확인하는 과정이다. 마치 이미지 편집 프로그램의 ‘페인트 통’ 도구로 한쪽 바다를 클릭했을 때 반대편 바다까지 색이 칠해지는지와 같다. 보통 대각선 방향도 연결된 것으로 본다(8-연결).
C-3. ‘최협부 폭·깊이·면적’ 계산이란?
- 최협부 폭: 분석 영역 안에서, 가로줄(위도)을 한 줄씩 훑어 가며 바다가 연속으로 이어진 구간의 길이를 잰다. 이 길이들 중에서 가장 짧은 것이 바로 ‘최협부 폭’이다.
- 평균 수심(H): 최협부가 위치한 바로 그 가로줄에서, 기준 해수면(예: –80m)보다 더 깊은 바다 픽셀들의 ‘추가 깊이’(예: |–150m| – |–80m| = 70m)를 모두 더해 평균을 낸다.
- 단면적(A): 위에서 계산한 ‘추가 깊이’들을 각 픽셀의 폭만큼 곱해서 모두 더한다. 즉, 물이 흐르는 통로의 총면적을 구하는 것이다.
- 픽셀 하나의 폭(m) ≈ (경도 간격) × (해당 위도에서의 1°당 경도 길이)
- 1°당 경도 길이(m) ≈ 111.32 km × cos(위도) × 1000
C-4. 핵심 코드 요약 (Python)
import xarray as xr, numpy as np, pandas as pd
from scipy import ndimage as ndi # 없다면 PIL 방식의 run-length로 대체 가능
# (1) GEBCO 부분그리드 열기
gebco = xr.open_dataset(r”C:\path\gebco_sub.nc”, engine=”netcdf4″)
var = [v for v in gebco.data_vars if v.lower() in (“z”,”elevation”,”height”,”depth”,”topo”,”topography”)][0]
da = gebco[var].rename({list(da.coords)[0]:”lat”, list(da.coords)[1]:”lon”}) # 좌표명 정규화
if float(da[“lon”].max())>180: da = da.assign_coords(lon=((da[“lon”]+180)%360)-180).sortby(“lon”)
# (2) 0.25° 리샘플 → 판정 박스 선택
lat_new = np.arange(float(da.lat.min()), float(da.lat.max())+1e-9, 0.25)
lon_new = np.arange(float(da.lon.min()), float(da.lon.max())+1e-9, 0.25)
da25 = da.interp(lat=lat_new, lon=lon_new, method=”linear”)
sub = da25.sel(lon=slice(128.5,131.7), lat=slice(33.2,35.6))
Z = sub.values.astype(float)
lat = sub[“lat”].values
lon = sub[“lon”].values
# (3) 임계별 계산: 연결성 + 최협부 폭/두께/단면적
def lon_km(phi): return 111.32*np.cos(np.deg2rad(phi))
rows=[]
for thr in (-70,-80,-90):
sea = (Z <= thr) # True=바다
# 연결성: 8-연결
labels, n = ndi.label(sea, structure=np.ones((3,3),dtype=int))
connected=False
if n>0:
south = set(np.unique(labels[-1,:]))-{0}
north = set(np.unique(labels[0 ,:]))-{0}
connected = len(south.intersection(north))>0
# 최협부
dlon = float(abs(lon[1]-lon[0])) if lon.size>1 else 0.25
best=np.inf; meta=None
for i, la in enumerate(lat):
row = sea[i,:]
if not row.any(): continue
x = row.astype(np.uint8)
diff=np.diff(np.concatenate(([0],x,[0])))
starts=np.where(diff==1)[0]; ends=np.where(diff==-1)[0]
if starts.size==0: continue
runs = ends – starts
j = int(np.argmax(runs))
j0,j1= int(starts[j]), int(ends[j])
width_km = (j1-j0)*lon_km(float(la))*dlon
if width_km < best:
best=width_km; meta=(i,j0,j1,la)
if not np.isfinite(best):
rows.append(dict(depth_thr_m=thr,connected=connected,
min_width_km=np.nan, lat_deg=np.nan, A_m2=np.nan, H_mean_m=np.nan))
continue
i,j0,j1,la = meta
# 평균 두께(H)·단면적(A)
depth_row = Z[i,:]
mask = depth_row <= thr
thickness = np.where(mask, (-(depth_row)-abs(thr)), 0.0) # m
seg = thickness[j0:j1]
H = float(np.mean(seg)) if seg.size>0 else np.nan
dx = dlon * lon_km(float(la)) * 1000.0 # m
A = float(np.sum(seg) * dx) # m^2
rows.append(dict(depth_thr_m=thr,connected=connected,
min_width_km=float(best), lat_deg=float(la),
A_m2=A, H_mean_m=H))
pd.DataFrame(rows).to_csv(r”C:\paleo\C_hydro_firstorder.csv”, index=False)
C-5. 결과 확인 포인트 (가장 중요한 수치)
- 해수면 –80m 시나리오에서 connected=True, 최협부 폭 ≈ 93.09km, 평균 깊이(H) ≈ 70.5m, 단면적(A) ≈ 656만 이 나와야 한다.
- –70m, –90m 시나리오에서도 연결 상태(connected=True)는 유지되어야 하며, 폭은 약 93–138km 범위 내에서 변해야 한다.
D. 민감도 분석: 결과가 얼마나 튼튼한지 따져보기 (선택 사항)
D-1. 기준 수심을 바꿔가며 테스트하기
- 목적: 해수면을 –60m부터 –120m까지 5m 간격으로 바꾸면서 폭이 어떻게 변하는지 곡선으로 그려본다. 이를 통해 특정 수심에서 폭이 갑자기 변하는 민감한 구간이 있는지 확인할 수 있다.
- 출력: csv (수심별 연결 상태와 최협부 폭).
D-2. 분석 영역을 바꿔가며 테스트하기
- 목적: 계산 영역 박스의 경계를 동서남북으로 조금씩(±0.5°) 옮겨 보았을 때, ‘연결/비연결’이라는 핵심 결론이 바뀌지 않는지 점검한다.
- 관찰 포인트: 연결 여부는 안정적으로 유지되고, 최협부 폭은 소폭 변동하는 것이 정상이다.
E. 최종 산출물 정리 및 해석
csv → 황해의 육지 비율 표. 이 표는 황해가 당시 거의 완벽한 육지였음을 보여준다 (발해만 포함 시 100%, 제외 시 97.9%).
csv → 대한해협 분석의 핵심 결과 표. –80m 기준, connected=True, 최협부 폭 ≈ 93.09km, 평균 깊이 ≈ 70.5m, 단면적 ≈ 656만 m2 임을 보여준다.
csv → 대한해협 폭-수심 관계 그래프용 데이터. 이 그래프의 곡선이 완만하다면 우리의 결론이 특정 수심 값에 좌우되지 않는 안정적인 결과임을 의미한다.
(팁: 분석 결과를 지도로 그리는 것은 컴퓨터 환경에 따라 설정이 복잡할 수 있다. 우선 CSV 파일로 핵심 숫자들이 정확히 재현되는지 먼저 확인하고, 필요할 경우에만 지도를 그리는 것을 추천한다.)
F. 자주 겪는 문제와 해결책
- 문제: 명령 프롬프트 창에 파이썬 코드를 직접 붙여 넣으니 오류가 발생한다.
- 해결책: 코드를 메모장 등에 붙여 넣고 py 와 같이 .py 확장자로 저장한 뒤, 명령 프롬프트에서 python C:\경로\my_analysis.py 명령으로 실행한다.
- 문제: 파일 경로를 잘못 입력한 것 같다.
- 해결책: 명령 프롬프트에서 dir “C:\…\*.nc” /b 와 같은 명령으로 파일 이름이 정확한지 확인하고, 그 경로를 복사해서 코드에 붙여 넣는다.
G. 계산식의 의미 다시 보기
경도 1칸의 실제 길이(km):
Lλ(ϕ)≈111.32×cos(위도ϕ)
(지구는 둥글어서, 극지방으로 갈수록 경도 1칸의 실제 거리가 짧아진다.)
최협부 폭(km):
W=(바다가 이어진 칸 수)×(경도 1칸의 각도)×Lλ(ϕ)
물기둥 두께(m):
T=(실제 바닥 수심)−(기준 해수면 깊이)
단면적(m²):
A=∑(각 픽셀의 물기둥 두께)×(각 픽셀의 실제 폭)
상대 유량 지표:
Qindex=AgH
(단면적이 넓고 평균 수심이 깊을수록 물이 더 많이 흐를 수 있다는 물리 법칙을 간단히 표현한 것이다. 비교용으로만 사용한다.)
H. 분석의 한계
- 과거 기후 지도 (Armstrong et al., 2019): 대륙 전체의 큰 그림을 보는 데는 매우 유용하지만, 해상도가 낮아 좁은 해협의 연결 상태를 실제보다 비관적(끊어진 것)으로 보여줄 수 있다.
- 현대 해저 지형도 (GEBCO 2025): 해협의 ‘형태’를 판단하는 데는 가장 강력하지만, 4만 년 전의 지각 변동이나 퇴적 효과는 담지 못했다.
- 그럼에도 불구하고, 이 두 데이터를 교차 확인한 결과, ‘황해는 평원이었고 대한해협은 열려 있었다’는 결론은 매우 견고하게 뒷받침된다 (Armstrong et al., 2019; GEBCO Compilation Group, 2025; Spratt & Lisiecki, 2016; Waelbroeck et al., 2002).
마무리 한마디
이 부록의 안내를 차근차근 따라 하면, 누구나 ‘황해 98~100% 육지화’와 ‘대한해협 –80m 해수면에서 약 93km 폭으로 연결’이라는 핵심 결과를 똑같이 얻을 수 있다. 그 다음 단계는, 이 결과를 바탕으로 조금 더 정교한 유체 모델을 사용하여 “그래서, 얼마나 많은 물이 흘렀을까?”라는 더 깊은 질문에 도전하는 것이다.