CLIEN

본문 바로가기 메뉴 바로가기 보기설정 테마설정
톺아보기 공감글
커뮤니티 커뮤니티전체 C 모두의광장 F 모두의공원 I 사진게시판 Q 아무거나질문 D 정보와자료 N 새로운소식 T 유용한사이트 P 자료실 E 강좌/사용기 L 팁과강좌 U 사용기 · 체험단사용기 W 사고팔고 J 알뜰구매 S 회원중고장터 B 직접홍보 · 보험상담실 H 클리앙홈
소모임 소모임전체 ·굴러간당 ·주식한당 ·아이포니앙 ·방탄소년당 ·일본산당 ·MaClien ·자전거당 ·안드로메당 ·개발한당 ·이륜차당 ·소셜게임한당 ·AI당 ·소시당 ·나스당 ·가상화폐당 ·육아당 ·젬워한당 ·위스키당 ·오른당 ·노젓는당 ·골프당 ·디아블로당 ·PC튜닝한당 ·스팀한당 ·패스오브엑자일당 ·야구당 ·클다방 ·걸그룹당 ·IoT당 ·키보드당 ·달린당 ·찰칵찍당 ·리눅서당 ·바다건너당 ·맛있겠당 ·3D메이킹 ·X세대당 ·ADHD당 ·AI그림당 ·날아간당 ·사과시계당 ·배드민턴당 ·농구당 ·블랙베리당 ·곰돌이당 ·비어있당 ·FM당구당 ·블록체인당 ·보드게임당 ·활자중독당 ·볼링친당 ·캠핑간당 ·냐옹이당 ·문명하셨당 ·클래시앙 ·콘솔한당 ·요리한당 ·쿠키런당 ·대구당 ·DANGER당 ·뚝딱뚝당 ·개판이당 ·동숲한당 ·날아올랑 ·전기자전거당 ·e북본당 ·갖고다닌당 ·이브한당 ·패셔니앙 ·물고기당 ·도시어부당 ·FM한당 ·포뮬러당 ·안경쓴당 ·차턴당 ·총쏜당 ·땀흘린당 ·하스스톤한당 ·히어로즈한당 ·인스타한당 ·KARA당 ·꼬들한당 ·덕질한당 ·어학당 ·가죽당 ·레고당 ·LOLien ·Mabinogien ·임시소모임 ·미드당 ·밀리터리당 ·땅판당 ·헌팅한당 ·영화본당 ·MTG한당 ·소리당 ·노키앙 ·적는당 ·방송한당 ·그림그린당 ·소풍간당 ·심는당 ·라즈베리파이당 ·품앱이당 ·리듬탄당 ·Sea마당 ·SimSim하당 ·심야식당 ·윈태블릿당 ·미끄러진당 ·축구당 ·나혼자산당 ·스타한당 ·파도탄당 ·퐁당퐁당 ·테니스친당 ·테스트당 ·빨콩이당 ·공대시계당 ·여행을떠난당 ·터치패드당 ·트윗당 ·창업한당 ·VR당 ·시계찬당 ·WebOs당 ·와인마신당 ·WOW당 ·윈폰이당
임시소모임
고객지원
  • 게시물 삭제 요청
  • 불법촬영물등 신고
  • 쪽지 신고
  • 닉네임 신고
  • 제보 및 기타 제안
© CLIEN.NET
공지[점검] 잠시후 서비스 점검을 위해 약 30분간 접속이 차단됩니다. (금일 18:15 ~ 18:45)

개발한당

질문 구글스프레드시트를 웹에서 호출하는 방법? 13

2023-11-02 19:25:51 수정일 : 2023-11-02 19:27:33 58.♡.0.209
carg

구글앱스스크립트를 이용해서 아래와같은 웹앱을 만들고

스프레드시트의 DB를 조회할 수 있도록 구현은 됐습니다.


https://script.google.com/macros/s/AKfycbxbrMgP950v3LMdPP6NjwBfTOrVqjSHzAPacPlwbaDOr5IBLUUckgkXN1j9oHzQZ9Q3/exec


이렇게 구글앱스스크립트에서 구현되는게 아니라

일반 웹사이트에서 구현하고 싶은데 

웹사이트는 별도 DB가 있고, 그DB를 호출해야 하는 것으로 알고 있습니다.


구글스프레드시트를 DB처럼사용하고, 일반 html과 스크립트 만으로 호출해서 구현하는 방법이 있을까요?    


https://issuetracker.google.com/issues/36763096?pli=1


위 내용이 8년동안 버그라는데 

제가  찾는 기능인지 개념이 없어  잘 모르겠습니다ㅜ


   


const ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/시트실제주소/edit#gid=0");
const ws = ss.getSheetByName("시트1");


let data;
function doGet() {
  var tmp = HtmlService.createHtmlOutputFromFile('index.html');
  tmp.setSandboxMode(HtmlService.SandboxMode.IFRAME);
  tmp.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
  return tmp;
} 
function doSearchResult(yourBirth, yourName) {
  data = ws.getRange(2, 1, ws.getLastRow()-1, 3).getValues();
  let filtered = data.filter(function(r){
    return r[0] == yourBirth && r[1] == yourName;
  })
  //console.log(filtered);
if (filtered.length == 1) {
  return yourBirth + " 지역의 " + filtered[0][1] + " 직종은 " + filtered[0][2] + "명입니다";
} else {
  return "조회된 결과가 없습니다. 해당 지역 실적 제출이 됐는지 확인 바랍니다.";
}
}



  

<!DOCTYPE html>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<html>
  <head>
    <base target="_top">
  </head>
  <body style="margin: 20px;">
    <h4>2023신속대응반 구성결과</h4>
    <div class="form-group">
      <label>지역명 선택</label>
      <select class="form-control" id="region" style="max-width: 300px;">
        <option value="서울">서울</option>
        <option value="부산">부산</option>
        <option value="대구">대구</option>
        <option value="인천">인천</option>
        <option value="광주">광주</option>
        <option value="대전">대전</option>
        <option value="울산">울산</option>
        <option value="세종">세종</option>
        <option value="경기">경기</option>
        <option value="강원">강원</option>
        <option value="충북">충북</option>
        <option value="충남">충남</option>
        <option value="전북">전북</option>
        <option value="전남">전남</option>
        <option value="경북">경북</option>
        <option value="경남">경남</option>
        <option value="제주">제주</option>
        
      </select>
    </div>
    <div class="form-group">
      <label>직종선택</label>
      <select class="form-control" id="job" style="max-width: 300px;">
        <option value="의사">의사</option>
        <option value="간호사">간호사</option>
        <option value="응급구조사">응급구조사</option>
        <option value="행정">행정</option>
        <!-- 다른 직종 옵션 추가 -->
      </select>
    </div>
    <button type="submit" class="btn btn-primary" onClick="searchResult()">검색</button>
    <br>
    <div id="result"></div> <!-- 검색 결과를 표시할 div 요소 추가 -->
    <script>
      function searchResult(){
        var yourRegion = document.getElementById('region').value;
        var yourJob = document.getElementById('job').value;
        google.script.run.withSuccessHandler(function(searched){
          document.getElementById('result').innerHTML = searched; // 검색 결과를 result div에 표시
        }).doSearchResult(yourRegion, yourJob);        
      }
    </script>
  </body>
</html>


 


carg 님의 게시글 댓글
  • 주소복사
  • Facebook
  • X(Twitter)
댓글 • [13]
enoeht
IP 211.♡.246.25
11-03 2023-11-03 01:40:56
·
정식으로 하려면 REST API로 호출해야 겠네요.
https://developers.google.com/apps-script/api/concepts?hl=ko

여기보면 지원언어중에 Node.js나 JAVA가 있기에, 이런 언어들로 웹사이트를 제작하면서
Apps Script REST API를 호출하시는 형태가 되겠지만....
평범한 웹사이트 제작 자체도 꽤 큰일에 해당하는데, 구글 클라우드 API호출하는 웹사이트를 제작해야하는 상황이므로
그것을 위한 여러 환경설정.. 특히 보안토큰 발급받고 설치하는 부류의 권한설정이 꽤 귀찮으실겁니다.

굳이 꼼수를 쓴다면 저 페이지 자체를 크롤링 하는 방법도 있겠습니다만 이것도 꽤나 귀찮다는점에선 오히려 첫번쨰가 나아보입니다.
carg
IP 58.♡.0.209
11-03 2023-11-03 09:00:25
·
@enoeht님
감사합니다.
REST API 호출 후 웹사이트 제작하는 만큼의 큰일이
오픈 API 호출 후 웹사이트 제작하는 것도 해결할 수 있는 수준인가요?

꼼수로 하던 방법들이 결국 제대로 뭔가 배워야할 것 같네요 ㅎㅎ
carg
IP 58.♡.0.209
11-03 2023-11-03 09:16:51 / 수정일: 2023-11-03 09:17:53
·
@enoeht님

질문 요약

rest api 호출후 웹사이트 제작하는 것과 오픈 API 호출 후 웹사이트 제작하는 것과 동일한 내용인가요?
rest api 호출은 조금 다른 형태로 가져와서 꾸미는게 더 쉽거나 개념자체가 다른건가요?


코딩의 개념이 매우 부족한 상황이지만, 여러 사이트를 제작해서 운영하고 공공의 목적으로 활용중에 있어 책임감도 있는 입장입니다

구글 시트를 db로 활용하려는 주된 이유는 초보 입장에서 DB관리가 정말 편하다는 이유입니다.
(외부사이트 IMPORTXML 함수로 크롤링 후 정규식 함수로 전처리, 후 QUERY함수, FILTER, SORT, VLOOKUP 함수로 필요한 데이터 나열)

DB 관리는

1. 공공데이터포털의 오픈 API를 받아서 HTML 페이지에서 구현하는 걸 할줄 몰라서 스프레드시트에서 직접 크롤링해서 실시간 업데이트하고
2. 구글설문이나 외부 유저폼에서 입력된 자원
3. 여러 공동의 사용자가 직접 구글시트에서 기록한 내용

3가지를 주로 조합해서 웹사이트에 반영시키고 있습니다.



구글앱스크립트로 제작한 웹앱을 벗어나려면 답변주신 것 처럼 REST API 호출 후 웹사이트 제작해야 하는 것 같습니다.

그 수준이 오픈 API 호출 후 웹사이트 제작하는 것과 동일한 수준인지 궁금합니다.
(보내주신 링크를 살펴보니 json 얘기가 나와서 비슷한 것 같습니다)

오픈 API를 가져오는것을 아직 시작 못한 이유가 가져오더라도 JSON형태를 원하는 대로 정리하고 사이트에 보기좋게 구현하는게 어려워 그걸 구글시트에서 다 해결하고있습니다.

구글시트를 db로 활용 + 데이터 수집과 데이터 전 처리와 페이지 꾸미는 것 까지 다 할 수 있지만

1. 웹에게시 한 주소를 iframe 형태로 그대로 가져와서 html과 css 정도만 적용된 사이트
=> 웹에 게시한 내용 자체가 5분 이상 지연 발생되는 문제
2. 노코드 툴로 제작한 사이트에서 구글시트를 연동한 회원가입과 유저 권한이 관리되는 사이트
=> 노코드 툴의 한계
3. 본문 처럼 구글앱스크립트로 제작한 웹앱에서 구현하는 3가지 입니다.
=> 일반 사이트에서 구현 안되고, 웹앱에서만구현 되는 한계


장점대비 단점(호출방식의 한계)이 뚜렷하고 스프레드시트내의 크롤링 함수도 먹통도 잘 되고 여러 한계가 있어서 고민이 되는 지점입니다.
enoeht
IP 211.♡.246.25
11-04 2023-11-04 08:40:47
·
@carg님 갑자기 호출'후' 웹사이트 제작이라는 말을 쓰셔서 저 '후'가 무슨뜻인지 한참 고민해 봤지만 이해하기 어렵네요....
그리고 오픈 API도 같은 이름에 여러 다른 서비스가 있는 포괄적인 말이라서 정확히 뭘 의미하는지 애매합니다.

일단 제마음대로 해석해서...

1. 구글 Apps Script REST API 를 호출'하는' 웹사이트 제작의 난이도 및 개념
2. 공공데이터포털의 오픈 API또는 기타 다른 오픈 API를 호출하는 웹사이트 제작의 난이도 및 개념

이 두가지의 차이점을 질문하신것으로 해석하도록 하겠습니다.

공공데이터포털만을 예로 들자면 여기 역시 여러 API형태를 지원하긴 하지만 결국은 여기도 REST API형태가 가장 자주 쓰입니다. 따라서 1, 2는 서로 본질적으로 같은것이며, 단지 정보 제공처가 정부기관에 가까운 공공데이터포털인지, 아니면 구글인지만 달라집니다.

또한 구글 Apps의 경우, 외부에서 데이터를 수집하여 가공하는 기능을 기본적으로 제공하고 있는 도구가 굉장히 많아서 외부데이터 수집 관리하기가 좋은 환경이 맞습니다.
그래서 걱정하신 대로 일반 웹사이트 제작을 하실때는 이런 구글에서 제공해주던 기능없이 직접 JSON등등을 해석하고 가공해야 하는 상황이 맞습니다.

물론 인터넷에는 여러 무료 공개 코드나 라이브러리들이 잔뜩 있어서 가져다 쓰시면 됩니다만, 그래도 여전히 꽤 어려운일은 맞고, 전문 웹사이트 제작을 하며 높은 임금을 받는 사람들의 주업무가 그렇게 가져다 쓰면서 월급을 받죠.

정리하자면, 기껏 구글 Apps의 기능을 이용해서 다른 오픈API의 데이터를 가져오는데 성공했지만
그것을 다시 Apps script REST API형태로 바꿔서 외부 웹사이트로 가져오는 형태로 바꾸시게 되면
결과적으로 외부 웹사이트에서 나의 Apps script REST API가 아닌 직접 오픈API에서 가져오는것과 별다른 난이도 차이가 없어지게 됩니다.
물론 일부 필드를 자기 마음대로 바꾸거나 데이터를 필터링하거나, 여러 다른 소스가 이미 합쳐져있거나 하는 식으로 자신이 Apps에서 데이터를 가공한만큼의 변화는 있겠지만, 결국 데이터의 형식 자체는 JSON이라고 보셔도 됩니다. 다른형식도 가능은 하지만 그냥 JSON만 된다고 이해하셔도 무리가 없습니다.
carg
IP 118.♡.130.168
11-04 2023-11-04 11:08:00
·
@enoeht님
제 고민을 정확하게 이해하셨습니다.
개발의 개념도 없이 적은 글에 좋은 방향을 제시해주신 정성스러운 댓글 정말 감사드립니다.
네임스페이스
IP 112.♡.76.76
11-03 2023-11-03 13:02:13 / 수정일: 2023-11-03 13:03:35
·
REST API는 설계 아키텍처에따른 분류라서 호출측에서는 별거 없어요. 그냥 API 쓸줄알면 똑같습니다. 다만 토큰이나 인증같은 Auth를 안해 봤다면 그부분을 공부하셔얄 것같네요.
carg
IP 58.♡.0.209
11-03 2023-11-03 13:05:56
·
@네임스페이스님
감사합니다. 큰 차이는 없고 어차피 못하는 영역이고, 앞으로 필요할 것 같으니 공부해야할 것 같습니다.^^
네임스페이스
IP 112.♡.76.76
11-03 2023-11-03 13:24:50 / 수정일: 2023-11-03 13:25:12
·
일단 궁극적인 목적이 자신의 웹사이트에서 엑셀같은 스프레드 시트를 사용할 수 있게 하는 것으로 보이고 그래서 스프레드 툴로는 구글스프레드 시트를 생각하신 것같은데요. 구글스프레드시트에 올라온 타인의 데이터가 필요한게 아니라면 그냥 직접 만드시는게 나을 것같습니다.

만들 웹앱의 기능에따라 다르지만, 일단 모든권한을 가진 서버를 가지고 도메인붙이고 HTTPS 며 웹사이트를 구축하고 관리한다는 것 자체부터가 큰 일입니다. 전문분야이고요. 그정도까지 할 생각이 있다면 굳이 노코드며 구글스프레드며 꼼수(?)보다는 직접 만드는 법을 공부하시는게 좋을것같아요.

단지 웹용 스프레드시트 기능이 필요한거면 자바스크립트 스프레드시트 오픈소스는 찾아보면 여기저기 많아요.
그냥 하나 찾아본건데 깃헙에 MIT 라이선스 오픈소스가 있네요. https://github.com/dream-num/Luckysheet
carg
IP 118.♡.130.168
11-04 2023-11-04 11:12:54
·
@네임스페이스님
이런 것도 있군요
정말 다양한 관점의 댓글을 보면서 감동과 감사를 드립니다.
네임스페이스
IP 112.♡.76.76
11-03 2023-11-03 13:28:45
·
또는 별로 추천은 안하지만 워드프레스로 구현하는 것도 생각해볼 수 있어요.
블로그 툴이지만 블로그기능은 안쓰고, 스프레드시트 플러그인 설치하고 페이지빌더 플러그인 설치해서 저런 페이지만 구현할 수 있죠. PHP로 추가 코딩해도되고요(WP 플러그인 개발 방법을 알아야됨).

워드프레스 플러그인이 방대한데 목적에 맞는걸 찾을 수 있을 진 모르겠지만 Google Spreadsheet 인테그레이션을 위한 많은 플러그인들이 많네요. 대부분 쇼핑몰에 올릴 상품 관리를 위해서 쓰기위한 웹커머스용 플러그인이겠지만요.
워드프레스 장점이랄지.. 개발, 운영,수정을위해 (돈을 들이더라도) 사람을 찾을 수 있다는 거예요.

근데 서버며 워드프레스며 전혀 모르는상태에서 0부터 시작하려면 워드프레스 사용법 익히는 것이 큰 일이긴하죠.
carg
IP 118.♡.130.168
11-04 2023-11-04 11:11:52
·
@네임스페이스님
감사합니다.
워드프레스도 고민했던 툴이라서 대략적으로는 알것 같습니다
여러가지 툴을 익히고 고생할 바에 정식으로 코딩을 공부하는게 낫겠다는 생각이 들다가도 각종 툴에서 제공하는 그런 플러그인이나 연동하는 서비스 하나를 직접 구현하려면 평생 못할수도 있겠다는 생각이 들어 고민이 됩니다.

플러그인과 라이브러리 개념 차이는 잘 모르지만
전문가들이 만들고 유료나 무료로 공개된 것들을 잘 활용하는 것도 필요한 것 같습니다.
좋은 대안 제시해주셔서 감사합니다.
팍삼무
IP 223.♡.195.98
11-05 2023-11-05 14:39:51 / 수정일: 2023-11-07 08:03:27
·
구글 스프레드시트 API를 사용하면 스프레드시트를 json형태로 가져올수 있어요,

테스트 스프레드시트 : https://docs.google.com/spreadsheets/d/1LnEThdwNvKWq69-Pd04EJOeQRWraWJhlEPeOKfaUF8Q/edit#gid=1165661738 ( 누구나 읽기 가능해야함)


https://sheets.googleapis.com/v4/spreadsheets/1LnEThdwNvKWq69-Pd04EJOeQRWraWJhlEPeOKfa/values/sheet!A1:B100?key=XXXXXXXXX



형식: https://sheets.googleapis.com/v4/spreadsheets/{스프레드시트id}/values/{시트이름}!{범위}?key={API키}
매뉴얼: https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/get?hl=ko

api키는 개발자로 가입하시고 생성하면 됩니다.
bababa
IP 121.♡.35.198
01-16 2024-01-16 21:56:26
·
오우
새로운 댓글이 없습니다.
이미지 최대 업로드 용량 15 MB / 업로드 가능 확장자 jpg,gif,png,jpeg,webp
지나치게 큰 이미지의 크기는 조정될 수 있습니다.
목록으로
글쓰기
글쓰기
목록으로 댓글보기 이전글 다음글
아이디  ·  비밀번호 찾기 회원가입
이용규칙 운영알림판 운영소통 재검토요청 도움말 버그신고
개인정보처리방침 이용약관 책임의 한계와 법적고지 청소년 보호정책
©   •  CLIEN.NET
보안 강화를 위한 이메일 인증
안전한 서비스 이용을 위해 이메일 인증을 완료해 주세요. 현재 회원님은 이메일 인증이 완료되지 않은 상태입니다.
최근 급증하는 해킹 및 도용 시도로부터 계정을 보호하기 위해 인증 절차가 강화되었습니다.

  • 이메일 미인증 시 글쓰기, 댓글 작성 등 게시판 활동이 제한됩니다.
  • 이후 새로운 기기에서 로그인할 때마다 반드시 이메일 인증을 거쳐야 합니다.
  • 2단계 인증 사용 회원도 최초 1회는 반드시 인증하여야 합니다.
  • 개인정보에서도 이메일 인증을 할 수 있습니다.
지금 이메일 인증하기
등록된 이메일 주소를 확인하고 인증번호를 입력하여
인증을 완료해 주세요.