#빌드로그#키코#풍수#공간데이터

진짜 지형으로 보는 풍수 — 키코는 무엇을 측정하고, 어떻게 풍수의 말로 옮기는가

풍수 앱이라고 하면 대개 생년월일을 넣고 그럴듯한 문장을 받는 모습을 떠올립니다. 명당까치 키코는 순서를 거꾸로 잡았습니다. 사람보다 자리를 먼저 봅니다. 주소를 넣으면 키코가 먼저 그곳에 “다녀와서”, 뒤에 산이 있는지, 앞이 트였는지, 물길과 길이 어디로 지나는지를 공개된 지도 데이터로 측정합니다. 그 다음에야 옛사람들이 터를 볼 때 따지던 기준에 하나씩 대 보고, 마지막으로 이용자의 고민에 맞춰 글을 씁니다.

이 글은 그 앞쪽 절반, 즉 “측정”과 “판단”이 어떻게 생겼는지에 대한 기록입니다. 서비스는 kiko.jocoding.io에서 직접 써 볼 수 있습니다.

왜 지도 데이터인가

풍수에는 여러 갈래가 있지만, 한국에서 터를 이야기할 때 가장 많이 쓰이는 것은 땅의 생김새를 보는 형세론입니다. “뒤로 산을 지고 앞에 물을 둔다”는 배산임수가 대표적입니다. 뒤를 받치는 산, 양옆을 감싸는 산줄기, 앞으로 트인 공간, 감싸 흐르는 물. 이 말들은 대부분 지형의 속성에 관한 것입니다.

지형의 속성은 측정할 수 있습니다. 뒷산이 터보다 몇 미터 높은지, 몇 미터 떨어져 있는지, 몇 도 폭으로 뒤를 막아 주는지는 높이 자료만 있으면 계산됩니다. 물길이 집 앞을 지나는지, 길이 집을 향해 정면으로 꽂히는지도 지도에 그려져 있습니다. 그렇다면 측정할 수 있는 것은 측정한 뒤에 말하자는 것이 키코의 출발점이었습니다. 감으로 “기운이 좋다”고 말하는 대신, 무엇을 보고 그렇게 말하는지 손가락으로 가리킬 수 있게 하자는 것입니다.

다섯 층으로 나눈 엔진

키코의 엔진은 다섯 층으로 나뉘어 있고, 자료는 위에서 아래로만 흐릅니다.

  1. 날것의 관측 — 지형 높이, 물길, 도로, 건물 외곽선, 출입구 좌표 같은 원자료입니다. 관측 하나하나에 제공 기관, 시각, 좌표계, 정확도, 이용 조건, 그리고 “직접 관측한 값인지, 추정한 값인지”가 붙습니다. 추정한 값은 나중에 어떤 단계에서도 관측값으로 승격되지 않습니다.
  2. 정규화한 공간 특징 — 원자료에서 계산한 값입니다. 뒤 지형의 상대 높이와 거리와 덮는 각도, 사방을 얼마나 감싸는지, 앞이 얼마나 트였는지, 경사, 물과 길까지의 거리 같은 것들입니다. 특징은 어떤 자료에서 왔는지와 무관한 이름을 씁니다. 그래서 자료 제공처를 바꿔도 규칙은 바뀌지 않습니다.
  3. 풍수 지식과 규칙 — 개념, 규칙, 근거 문헌, 해석이 갈리는 주장을 YAML 파일로 적어 둔 지식 베이스입니다. 여기에는 “어느 동네 뒤에 산이 있다” 같은 특정 장소의 사실이 절대 들어가지 않습니다.
  4. 결정론적 판정 — 같은 입력이면 언제나 같은 결과가 나오는 순수 함수입니다. 시계도 난수도 쓰지 않습니다.
  5. 자연어 설명 — 앞 단계의 결과를 사람이 읽을 글로 옮기는 단계입니다. 여기서만 언어 모델이 등장합니다.

이렇게 나눈 이유는 단순합니다. 글이 무언가를 주장하면, 그 주장이 어떤 규칙과 어떤 측정값에서 나왔는지 거꾸로 따라 올라갈 수 있어야 하기 때문입니다.

규칙 하나를 뜯어보면: 배산

규칙은 산문이 아니라 기계가 평가할 수 있는 조건으로 적습니다. 뒤를 받치는 형세, 즉 배산 규칙은 지금 이렇게 생겼습니다.

  • 터 뒤쪽 지형이 터보다 15m 이상 높고,
  • 그 지형이 2,500m 안에 있으며,
  • 뒤쪽을 60도 이상의 폭으로 덮고 있으면 해당합니다.
  • 뒤를 받치는 것이 건물 같은 인공 구조물로 확인되면 이 규칙은 적용하지 않습니다.

여기서 2,500m라는 숫자에는 사연이 있습니다. 처음에는 800m였습니다. 그런데 광화문에서 측정해 보니 북악산과 인왕산은 1,500~1,900m 떨어져 있었습니다. 800m 창 안에서는 이 산들이 보이지 않았고, 대신 21m짜리 작은 언덕을 뒷산으로 잡았습니다. 교과서에 나오는 배산임수 자리에서 배산 규칙이 건너뛰어진 것입니다. 정작 500m 떨어진 경복궁 근정전은 통과했으니, 한 지형 안에서 결과가 절벽처럼 갈렸습니다.

그래서 탐색 거리를 한양을 둘러싼 산들의 규모에 맞춰 2,500m로 넓혔습니다. 동시에 “가장 높이 솟은 지형”을 뒷산으로 고르던 방식을 “터에서 가장 크게 올려다보이는 지형”, 즉 높이를 거리로 나눈 각도가 가장 큰 지형으로 바꿨습니다. 창만 넓히면 모든 자리가 멀리 있는 가장 큰 산을 뒷산으로 잡아 버리기 때문입니다.

고전 문헌은 주산이 몇 미터 안에 있어야 하는지 숫자로 말하지 않습니다. 그러니 2,500m도, 15m도 저희가 정한 휴리스틱입니다. 그래서 이 규칙은 “시험 중(experimental)” 상태로 남아 있고, 파일 안에 왜 이 숫자가 되었는지가 함께 적혀 있습니다. 규칙을 “확정”으로 올리려면 사람 전문가가 근거 문헌의 해당 쪽수를 직접 확인해야 한다는 것이 저희 규정입니다. 2026년 9월 말 기준으로 지식 베이스에는 규칙 23개가 있고, 모두 시험 중입니다.

방위는 원 위에서 계산합니다

작지만 실수가 잦은 부분도 하나 있습니다. 방위입니다. 359도와 1도는 2도 차이지만, 그냥 빼면 358도 차이가 됩니다. 두 방위를 산술 평균하면 북쪽 두 개의 평균이 남쪽이 되는 일도 생깁니다. 그래서 키코는 방위를 비교하거나 모을 때 반드시 원형 계산을 하는 함수를 거치고, 규칙에서도 “이 방위가 저 방위 몇 도 안에 있는가”를 묻는 전용 연산자만 씁니다. 방위에 크다·작다 비교를 쓰는 규칙은 검증 단계에서 걸러집니다.

판단하지 못한 것도 판단 결과입니다

모든 규칙은 실행될 때마다 “해당함” 아니면 “건너뜀” 중 하나로 끝나고, 건너뛰었다면 그 이유가 정해진 이름으로 남습니다. 필요한 자료가 없어서, 지금 고른 전통과 맞지 않아서, 예외 조건에 걸려서, 조건을 만족하지 못해서. 적용된 규칙 수와 건너뛴 규칙 수를 더하면 언제나 전체 규칙 수가 되도록 시험합니다.

이게 중요한 이유는 “자료가 없어서 낮은 점수”와 “터가 나빠서 낮은 점수”를 섞지 않기 위해서입니다. 예를 들어 침수 이력은 “기록이 있다”는 것만 말합니다. 기록이 없다고 해서 안전하다고 말하지 않습니다. 기록이 없다는 사실은 그 자리가 물에 잠긴 적이 없다는 증거가 아니니까요.

원하는 점수를 맞추지 않는 보정

규칙의 문턱값은 “이 자리가 몇 점이 나와야 한다”에 맞춰 조정하지 않습니다. 대신 옛 문헌과 연구에 지형 평가가 남아 있는 실제 역사적 터들을 놓고, 상대적인 순서만 맞는지 시험합니다. 예를 들면 이렇습니다.

  • 세종의 능을 옮긴 지금의 영릉은 처음 자리였던 구 영릉지보다 높게 나와야 합니다. 더 좋은 땅으로 옮겼다는 기록과 맞아야 하기 때문입니다.
  • 경복궁은 “약하고 좁은 산줄기”로 기록된 승문원 터보다 높게 나와야 합니다.
  • 개경 만월대는 사방을 감싸는 정도는 높지만, 물을 얻는 쪽은 강하지 않게 나와야 합니다. 산에 둘러싸인 분지라는 기록과 맞습니다.

시험 좌표 하나하나에는 어디서 확인한 좌표인지, 녹화 과정에서 무엇을 고쳤는지가 근거와 함께 적혀 있습니다. 시험을 통과시키려고 문턱값을 바꾼 일은 없습니다. 좌표를 다시 확인하는 것만으로 통과시켰습니다.

측정값을 풍수의 말로 옮길 때

측정과 판정이 끝나면 글을 씁니다. 이 단계에서 언어 모델이 할 수 있는 일과 없는 일을 나눠 두었습니다. 모델은 측정한 사실을 고르고, 순서를 정하고, 비유를 들고, 이 사람의 고민에 맞춰 풀어낼 수 있습니다. 하지만 측정한 지형 사실을 뒤집을 수는 없습니다. 같은 화면의 3D 지도가 바로 그 데이터를 그리고 있어서, 글이 지도와 다른 말을 하면 읽는 사람이 곧바로 어긋남을 보게 되기 때문입니다.

옮기는 과정에서 부딪힌 문제도 많았습니다. 대표적인 것이 왼쪽과 오른쪽입니다. 풍수에서는 뒷산을 등지고 남쪽을 본다는 관례 아래 동쪽 산줄기를 왼쪽(좌청룡), 서쪽 산줄기를 오른쪽(우백호)이라 부릅니다. 그런데 화면의 지도는 남쪽에서 북쪽을 바라보는 시점이라, 경복궁 기준 “오른쪽”인 인왕산이 화면에서는 왼쪽에 보입니다. 집 앞에 서서 집을 바라보는 사람에게도 거꾸로입니다. 그래서 지금 키코는 집 밖의 것, 즉 산과 물과 길과 이웃 건물은 동서남북으로만 말합니다. 경복궁이라면 “동쪽은 낙산, 서쪽은 인왕산”입니다. 왼쪽·오른쪽은 “현관에 들어서서 왼쪽 벽”처럼 집 안에서 선 자리를 먼저 말할 때만 씁니다.

낱말도 다듬었습니다. 9월 말부터 리딩의 재료와 문구에서 “재다” 대신 “측정하다”를 씁니다. 측정한 것, 자료가 없어 측정하지 못한 것, 측정한 사실. 키코가 하는 일이 자로 길이를 대 보는 일보다 넓은, 공개 자료로 값을 확인하는 일이기 때문입니다. 같은 이유로 “셈”처럼 흔하지 않은 말은 “방식”으로 바꿨습니다. “여러 전통 방식 가운데 하나일 뿐이다”처럼요.

점수도 마찬가지로 읽는 법을 밝혀 둡니다. 키코의 공개 문서에는 “흔한 동네 집은 대개 50~70점, 교과서에 나올 만한 자리는 80점을 넘는다”고 적혀 있습니다. 실제로 경복궁으로 리딩을 한 번 생성했을 때 84점이 나왔습니다. 점수는 그 자리의 운명이 아니라, 측정한 것을 숫자 하나로 요약한 것입니다.

데이터가 끝내 못 보는 것

측정을 앞세운다는 것은 측정하지 못하는 것도 분명히 말해야 한다는 뜻입니다. 키코가 못 보는 것은 이렇습니다.

  • 집 안. 몇 층인지, 창이 어느 쪽으로 났는지, 볕이 얼마나 드는지는 자료에 없습니다. 이용자가 알려 준 것만 반영합니다.
  • 나무와 담장. 낮게 시야를 가리는 것은 지형 자료에 잡히지 않습니다.
  • 사람. 이웃, 소음, 관리 상태, 집값처럼 땅의 생김새가 아닌 것은 측정하지 않습니다.
  • 앞날. 개발 계획이나 앞으로 들어설 건물은 알 수 없습니다.

그리고 가장 중요한 고지가 있습니다. 키코의 모든 리포트에는 같은 문장이 붙습니다. “이 분석은 전통 풍수지리를 현대 지형 데이터로 재해석한 해석적 콘텐츠이며, 과학적으로 증명된 예측이 아닙니다. 건강·재산·안전 등 실생활의 중요한 결정 근거로 사용할 수 없습니다.” 키코는 문화·오락 콘텐츠입니다. 집을 사고팔거나, 계약을 하거나, 투자를 결정하는 근거로 쓰시면 안 됩니다. 지형을 정직하게 측정한다고 해서 풍수 해석 자체가 과학이 되는 것은 아니기 때문입니다.

정리하며

키코를 만들며 얻은 원칙을 세 줄로 줄이면 이렇습니다.

  1. 측정할 수 있는 것은 측정한 뒤에 말한다.
  2. 측정하지 못한 것은 “모른다”고 말하고, 없음을 좋음으로 바꾸지 않는다.
  3. 규칙의 숫자는 원하는 결과가 아니라 기록된 사례의 순서에 맞춘다.

어떤 자료로 측정하는지, 해석이 갈리는 대목은 무엇인지는 키코의 공개 문서 터 읽는 법에 정리해 두었습니다. 다음 글에서는 이 측정을 가능하게 한 한국 공간정보, 즉 등고선과 건축물대장과 도로명주소 출입구 자료를 실제로 받아 쓰면서 겪은 일을 이어서 적겠습니다.

← 목록으로 돌아가기