시군구, 법정동코드를 불러오는 방법 (그동안 내가 뭘 한거지?... 그러나 하나 해결하고 또 막힘)

이전 내용에서 과제였던 시군구코드, 법정동코드를 자동으로 불러오는 기능을 찾았습니다.

좀 어처구니 없는 방법이라고 할지...

구글스프레드시트의 새로운 sheet에 코드가 들어있는 표를 넣습니다. (18,000종류)

한국과 중국인 숫자가있는 테이블

작성하고자 하는 시트에 지번 주소를 넣습니다.

그리고 지번 주소의 '시군구명'과 '법정동명'을 분리해냅니다.

이제 해당되는 시군구명과 법정동명이 일치하는 행을 '새로운 sheet'에서 찾아서 반환하라는 함수를 넣습니다. (모든건 gpt와 클로드가 알려줍니다.)

ex) 지번주소 : 동작구 사당동 383-26

[시군구코드] 셀 함수 : =INDEX(sigungubjdongcode!D:D,MATCH(1,(LEFT(A2,FIND(" ",A2)-1)=sigungubjdongcode!B:B)*(MID(A2,FIND(" ",A2)+1,FIND(" ",A2,FIND(" ",A2)+1)-FIND(" ",A2)-1)=sigungubjdongcode!C:C),0)) // 공백이 나오기 전까지 값을 반환

[법정동코드] 셀 함수 : =INDEX(sigungubjdongcode!E:E,MATCH(1,(LEFT(A2,FIND(" ",A2)-1)=sigungubjdongcode!B:B)*(MID(A2,FIND(" ",A2)+1,FIND(" ",A2,FIND(" ",A2)+1)-FIND(" ",A2)-1)=sigungubjdongcode!C:C),0)) // 첫 공백과 두번째 공백 사이 값을 반환

[번] 셀 함수 : =TEXT(VALUE(MID(A2,FIND(" ",A2,FIND(" ",A2)+1)+1,FIND("-",A2)-FIND(" ",A2,FIND(" ",A2)+1)-1)),"0000") // 두번의 공백이 지난 후 "-"가 나오기 전까지 값을 반환하고 4자리 숫자로 변환

[지] 셀 함수 : =TEXT(VALUE(MID(A2,FIND("-",A2)+1,LEN(A2))),"0000") // "-"이후의 값을 4자리 숫자로 반환

시간도 많이 걸리지 않고, 바로바로 찾아줍니다. 이걸 모르고 몇일을 별별 방법을 찾아 헤맸었네요.

물론 코드가 변경될 경우 자동업데이트는 안됩니다.

그래도 공공데이터포털을 통해 정기 업데이트하는 방법은 있습니다. (나중에..)

그런데 지번주소를 입력해도 자동으로 채워주질 않습니다.

클로드에 물어봤습니다. 그랬더니 #앱스크립트 를 써 보랍니다.

몇번의 수정 끝에 이런 앱스크립트 코드를 받았습니다.

function onEdit(e) {
  var spreadsheetId = e.source.getId();
  
  // 원하는 스프레드시트 ID (URL에서 확인 가능)
  var targetSpreadsheetId = "스프레드시트_ID";
  
  // 편집된 범위 가져오기
  var range = e.range;
  var sheet = range.getSheet();
  
  // 특정 스프레드시트의 특정 시트인지 확인
  if (spreadsheetId == targetSpreadsheetId && sheet.getName() == "시트1") {
  
  // A열이 편집되었는지 확인
  if (range.getColumn() == 1) {
    var row = range.getRow();
    
    // C열 함수
    sheet.getRange(row, 3).setFormula('=INDEX(sigungubjdongcode!D:D,MATCH(1,(LEFT(A' + row + ',FIND(" ",A' + row + ')-1)=sigungubjdongcode!B:B)*(MID(A' + row + ',FIND(" ",A' + row + ')+1,FIND(" ",A' + row + ',FIND(" ",A' + row + ')+1)-FIND(" ",A' + row + ')-1)=sigungubjdongcode!C:C),0))');
    
    // D열 함수
    sheet.getRange(row, 4).setFormula('=INDEX(sigungubjdongcode!E:E,MATCH(1,(LEFT(A' + row + ',FIND(" ",A' + row + ')-1)=sigungubjdongcode!B:B)*(MID(A' + row + ',FIND(" ",A' + row + ')+1,FIND(" ",A' + row + ',FIND(" ",A' + row + ')+1)-FIND(" ",A' + row + ')-1)=sigungubjdongcode!C:C),0))');
    
    // E열 함수
    sheet.getRange(row, 5).setFormula('=TEXT(VALUE(MID(A' + row + ',FIND(" ",A' + row + ',FIND(" ",A' + row + ')+1)+1,FIND("-",A' + row + ')-FIND(" ",A' + row + ',FIND(" ",A' + row + ')+1)-1)),"0000")');
        
    // F열 함수
    sheet.getRange(row, 6).setFormula('=TEXT(VALUE(MID(A' + row + ',FIND("-",A' + row + ')+1,LEN(A' + row + '))),"0000")');
  }
}
}

그랬더니 자동완성이 됩니다. (시간은 좀 걸리지만 정확히 찾아줍니다.)

이제 n8n에서 이걸 적용하면 되겠죠?

구글시트 트리거에 새로운 row가 입력되면 반응하게 설정해 봅니다.

이상합니다.

분명히 구글시트에는 값이 들어와 있는데 트리거를 진행하면 값이 없다고 합니다.

컴퓨터 화면에서 출력 탭의 스크린 샷

또 물어봐야겠네요. n8n assistant가 답해줍니다.

1번 방법은 트리거노드에서 캐시를 비활성화하라는 건데, 트리거노드에서 해당 옵션을 찾을 수가 없네요.

2번 방법을 써 봅니다. 강제로 캐시를 정리하는 앱스크립트를 요청해서 받았습니다.

반영한 앱스크립트를 저장하고 진행해 봤는데 여전히 empty로 나타납니다.

3번 방법을 적용해서 코드를 다시 작성해 달라고 했습니다. 이런 내용을 추가해 줍니다.

// 📌 Google Sheets API가 "Major Dimension"을 COLUMNS로 변경하여 데이터 가져오기
function getSheetData(sheet, row, col) {
  var range = sheet.getRange(row, col, 1, 1);
  var values = range.getValues(); // 항상 최신 데이터 가져오기
  return values[0][0];
}

반영한 앱스크립트를 적용한 후 다시 진행해 봤지만 여전히 empty만 반환합니다.

한국 시간표의 스크린 샷

방법을 좀 바꿔볼까 합니다.

On form submission을 통해 값을 전달받아 시트에 저장하면 어떨까요?

Form에 지번을 입력하고

한국 등록 양식의 스크린 샷

구글시트 노드 동작을 시키니

구글시트에 값이 잘 들어왔는데..... ?????

자동완성이 안됩니다.

앱스크립트와 n8n노드가 뭔가 계속 연동이 안되는 것 같습니다.

하나를 해결하면 두 가지 막힘이 나타나는 신기한 n8n 세계입니다.

1

👉 이 게시글도 읽어보세요