![Search icon](https://hackernoon.imgix.net/search-new.png?w=19&h=19)
코로나 이후로 제 일정은 스탠드업, 팀 회의, 고객 전화 회의로 가득 찼습니다.
하지만 행사 일정을 잡고 손님을 초대하는 일은 지루한 일입니다. 어느 금요일, 이런 일에 너무 많은 시간을 보낸 후, 저는 생각했습니다.
왜 이걸 위해 이렇게 많은 시간을 낭비하는 걸까?
그래서 저는 제 작업을 단순화하기 위해 이벤트 스케줄러를 만드는 아이디어를 떠올렸습니다!
이 글에서는 Google Meet 링크가 포함된 이메일 초대장을 자동으로 보내고 이벤트를 생성할 수 있는 Nodejs 애플리케이션을 만드는 방법을 보여드리겠습니다.
설레요? 나도요.
그러니 더 이상 지체하지 마세요!
시작하자!
프로젝트를 시작하려면 Node.js 환경을 설정해야 합니다. 그러니 노드 프로젝트를 만들어 보겠습니다. 터미널에서 다음 명령을 실행합니다.
npm init -y
이렇게 하면 새로운 Node.js 프로젝트가 초기화됩니다.
이제 프로젝트에 필요한 종속성을 설치해 보겠습니다.
npm install express googleapis dotenv
다음 패키지가 설치됩니다.
.env
파일에서 환경 변수를 로드합니다.
다음으로, API 자격 증명과 같은 민감한 정보를 안전하게 저장하기 위해 .env
폴더를 생성하겠습니다.
//.env PORT = YOUR_PORT || 8000 CLIENT_ID = YOUR_CLIENT_ID CLIENT_SECRET = YOUR_CLIENT_SECRET REDIRECT_URL = http://localhost:8000/auth/redirect API_KEY = YOUR_API_KEY
이제 루트 디렉토리에 index.js
파일을 만들고 기본 익스프레스 서버를 설정합니다. 다음 코드를 참조하세요.
const express = require("express"); const dotenv = require("dotenv"); dotenv.config(); const app = express(); const port = process.env.PORT || 8000; app.get("/", (req, res) => { res.send("Hello World"); }); app.listen(port, () => { console.log(`Server running on port ${port}`); });
여기서는 "dotenv" 패키지를 사용하여 .env
파일에서 PORT 번호에 액세스합니다.
프로젝트 상단에서 dotenv.config()
를 사용하여 환경 변수를 로드하여 파일 전체에서 접근할 수 있게 했습니다.
먼저 Google Cloud Console 로 이동해 보겠습니다.
그러면 이 대시보드가 나옵니다. (저는 이전에 프로젝트 하나를 만들었기 때문에 이 대시보드가 나오는 것이고, 여러분은 다른 것을 보실 수도 있습니다.)
이제 '새 프로젝트' 버튼을 클릭하여 새 프로젝트를 시작해 보겠습니다.
다음으로, 이와 비슷한 것을 얻을 것입니다. 여기서, 우리는 프로젝트 이름과 조직을 추가할 것입니다. 이 프로젝트의 경우, 나는 이것을 "Mail-integration-Demo"로 유지할 것입니다. 그런 다음, 우리는 만들기 버튼을 클릭하여 진행할 것입니다.
다음으로, 측면 탐색 모음에서 "API 및 서비스"를 볼 수 있습니다. 이 섹션에는 API 및 서비스를 활성화하는 하위 메뉴가 있습니다. 클릭하여 진행합니다.
다음으로, 이 프로젝트에서 사용할 API, 즉 Google Calender API를 활성화하겠습니다.
그 후, OAuth 동의 화면으로 이동합니다. 여기서 사용자 유형을 외부로 선택합니다. 그리고 만들기 버튼을 눌러 진행합니다.
그런 다음 앱 등록 페이지로 이동합니다. 여기서는 앱에 대한 정보를 더 추가합니다. 앱 이름과 사용자 지원을 위한 이메일 주소를 추가하는 것으로 시작합니다.
이 프로젝트에서는 "Arindam의 메일 통합"이라는 이름을 붙이고, 지원을 위해 제 이메일 주소를 사용할 것입니다.
다음으로, 애플리케이션의 범위를 정의해야 합니다.
범위에서는 이 프로젝트에 필요한 userinfo.email
, userinfo.profile
등의 권한을 추가합니다.
그런 다음 애플리케이션에 테스트 사용자 한 명을 추가하겠습니다.
그게 다입니다. 저희 애플리케이션이 플랫폼에 등록되었습니다.
이제 OAuth 클라이언트 ID 비밀을 만들겠습니다. 이를 위해 자격 증명 만들기 부분으로 넘어가겠습니다.
여기서는 애플리케이션의 유형과 이름을 추가합니다. 이 프로젝트의 경우 웹 애플리케이션이고 이름은 Arindam's Mail Demo입니다.
또한, 우리는 하나의 Redirect URL을 추가했습니다. 이 프로젝트의 경우, 그것은 http://localhost:8000/auth/redirect
가 될 것입니다.
그러면 OAuth 자격 증명을 받게 됩니다.
다음으로 API 키를 생성해 보겠습니다.
이 모든 작업을 마친 후에는 이전에 생성한 API 키와 OAuth 자격 증명을 사용하여 .env
파일을 업데이트합니다.
이로써 이 프로젝트를 위한 Google Cloud 콘솔을 설정했습니다. 이제 다음 섹션으로 넘어가겠습니다.
지금까지 기본 프로젝트 설정을 마쳤습니다. 이제 OAuth2 인증을 프로젝트에 통합하겠습니다. 이를 통해 애플리케이션이 Google 서비스와 안전하게 상호 작용할 수 있습니다. 이를 위해 먼저 필요한 패키지를 index.js
파일에 가져옵니다.
const express = require('express'); const { google } = require('googleapis'); const dotenv = require('dotenv');
그런 다음 Google 캘린더 API에 필요한 액세스 범위를 정의합니다.
const scopes = ['https://www.googleapis.com/auth/calendar'];
다음으로, .env
파일에 저장된 자격 증명을 사용하여 OAuth 2 클라이언트를 구성해 보겠습니다.
// OAuth 2 configuration const oauth2Client = new google.auth.OAuth2 ( process.env.CLIENT_ID, process.env.CLIENT_SECRET, process.env.REDIRECT_URL );
OAuth 2 구성이 끝나면 사용자 인증을 위한 경로를 생성하겠습니다.
app.get('/auth', (req, res) => { const url = oauth2Client.generateAuthUrl ({ access_type: 'offline', scope: scopes }); res.redirect(url); } );
사용자가 이 경로를 이용하면 Google 인증 페이지로 리디렉션되어 애플리케이션에 대한 특정 권한을 요청하게 됩니다.
인증이 성공하면 Google은 사용자를 당사의 리디렉션 URL( /auth/redirect
)로 리디렉션합니다.
app.get("/auth/redirect", async (req, res) => { const {tokens} = await oauth2Client.getToken(req.query.code); oauth2Client.setCredentials(tokens); res.send('Authentication successful! Please return to the console.'); } );
여기서는 Query에서 새로 고침 토큰을 가져와 oauth2Client
에 자격 증명으로 저장합니다. 이 자격 증명은 Google Calendar API에 요청을 하는 데 도움이 됩니다.
index.js
의 전체 코드는 다음과 같습니다.
//index.js const express = require('express'); const { google } = require('googleapis'); const dotenv = require('dotenv'); const app = express(); dotenv.config(); const port = process.env.PORT || 8000; app.get('/', (req, res) => { res.send('Hello World'); } ); // Define the scope of access for the Google Calendar API. const scopes = ['https://www.googleapis.com/auth/calendar']; // OAuth 2 configuration const oauth2Client = new google.auth.OAuth2 ( process.env.CLIENT_ID, process.env.CLIENT_SECRET, process.env.REDIRECT_URL ); app.get('/auth', (req, res) => { const url = oauth2Client.generateAuthUrl ({ access_type: 'offline', scope: scopes }); res.redirect(url); } ); app.get("/auth/redirect", async (req, res) => { const {tokens} = await oauth2Client.getToken(req.query.code); oauth2Client.setCredentials(tokens); res.send('Authentication successful! Please return to the console.'); } );
가장 중요한 부분이 나옵니다! 이 섹션에서는 Google 캘린더에서 이벤트를 예약합니다!
시작하려면 Google 캘린더 API 클라이언트를 초기화해야 합니다.
const calendar = google.calendar({ version: 'v3', auth: oauth2Client });
다음으로, 요약, 위치, 시작 및 종료 시간 등 이벤트의 모든 세부 정보를 추가할 이벤트 객체를 만들어 보겠습니다.
const event = { summary: 'Tech Talk with Arindam', location: 'Google Meet', description: "Demo event for Arindam's Blog Post.", start: { dateTime: "2024-03-14T19:30:00+05:30", timeZone: 'Asia/Kolkata' }, end: { dateTime: "2024-03-14T20:30:00+05:30", timeZone: 'Asia/Kolkata' }, };
그런 다음 이벤트를 생성할 경로( /create-event
)를 생성합니다.
여기서는 calendar.events.insert()
메서드를 사용하여 사용자의 캘린더에 이벤트를 삽입합니다.
app.get('/create-event', async (req, res) => { try { const result = await calendar.events.insert({ calendarId: 'primary', auth:oauth2Client, resource: event }); res.send({ status: 200, message: 'Event created', }); } catch (err) { console.log(err); res.send(err); } } );
이를 통해 Google 캘린더에서 이벤트를 동적으로 예약할 수 있습니다.
지금까지 Google 캘린더에서 간단한 이벤트를 만드는 방법을 살펴보았습니다. 이 섹션에서는 해당 이벤트에 Google Meet 링크를 추가하는 방법을 살펴보겠습니다!
이를 위해 이전 섹션에서 만든 이벤트 객체를 업데이트합니다. Google Meet 링크에 대한 생성 요청을 지정하기 위해 conferenceData
속성을 추가합니다.
conferenceData: { createRequest: { requestId: uuid(), } },
또한 이벤트에 게스트를 초대하기 위해 attendees
속성을 추가합니다. 다음은 그 간단한 예입니다.
attendees: [ {email: '[email protected]'}, ]
이제 이벤트 객체는 다음과 같습니다.
const event = { summary: 'Tech Talk with Arindam', location: 'Google Meet', description: "Demo event for Arindam's Blog Post.", start: { dateTime: "2024-03-14T19:30:00+05:30", timeZone: 'Asia/Kolkata' }, end: { dateTime: "2024-03-14T20:30:00+05:30", timeZone: 'Asia/Kolkata' }, colorId: 1, conferenceData: { createRequest: { requestId: uuid(), } }, attendees: [ {email: '[email protected]'}, ] };
다음으로, 이벤트 삽입 단계에서 conferenceDataVersion
매개변수를 추가하겠습니다.
const result = await calendar.events.insert({ calendarId: 'primary', auth:oauth2Client , conferenceDataVersion: 1, resource: event });
이렇게 하면 Google Meet 링크가 있는 이벤트가 생성됩니다. 다음과 같이 링크를 응답으로 공유할 수도 있습니다.
res.send({ status: 200, message: 'Event created', link: result.data.hangoutLink });
그래서, 우리 프로젝트는 거의 끝났고, 마지막 마무리만 남았습니다. 지금까지 우리 프로젝트는 초대받은 손님의 일정에 이벤트를 직접 추가할 것입니다.
하지만, 이러한 이벤트에 대해 알리려면, 우리는 하나의 메일을 보내야 합니다. 그러기 위해, 우리는 하나의 매개변수 sendUpdates: 'all',
이벤트 생성 부분에 추가해야 합니다. 이렇게 하면, 애플리케이션은 초대된 게스트에게 자동으로 이메일을 보냅니다.
const result = await calendar.events.insert({ calendarId: 'primary', auth:oauth2Client , conferenceDataVersion: 1 , sendUpdates: 'all', resource: event });
이 추가 기능으로 인해 우리 프로젝트에서는 이제 이벤트 생성과 이메일 알림을 모두 원활하게 처리할 수 있게 되었습니다.
우리 프로젝트의 코딩 부분이 완료되었습니다. 이제 제대로 작동하는지 봅시다!
그걸 위해 프로젝트를 시작하겠습니다!
npm run start
그리고 우리는 포트 8000에서 서버를 시작했습니다! 이제 http://localhost:8000/auth/ 경로로 가서 사용자를 인증하겠습니다. 그러면 다음과 같은 경로로 리디렉션됩니다.
해당 응용 프로그램에 대한 일부 허가가 요청됩니다.
code
쿼리 매개변수를 사용하여 /auth/redirect
경로로 리디렉션됩니다.
사용자를 성공적으로 인증한 후 http://localhost:8000/create-event 경로로 이동하여 이벤트를 예약합니다.
굉장하네요! 즉, 우리 이벤트는 Google Meet 링크로 생성되었다는 뜻입니다.
이벤트 생성 프로세스가 올바르게 작동하는지 확인하려면 Google 캘린더를 확인해 보겠습니다.
놀랍네요! 이벤트가 생성되었으니 이벤트 생성 경로가 완벽하게 작동하고 있다는 뜻입니다! 그리고 초대 메일도 받았습니다.
좋아요! 저희 애플리케이션이 완벽하게 작동하고 있어요!
이를 통해 Google 캘린더를 Node.js 앱에 통합했습니다. 다음 기사에서는 Google 캘린더의 더 많은 사용 사례를 살펴보겠습니다.
그때까지 기대해주세요!
이 블로그 게시물이 도움이 되었다면, 도움이 될 만한 다른 사람들과 공유해 주세요. Javascript, React 및 기타 웹 개발 주제에 대한 더 많은 콘텐츠를 보려면 저를 팔로우하세요.
유료 협업의 경우 [email protected] 으로 메일을 보내주세요.
Twitter , LinkedIn , YouTube , GitHub 에서 저와 소통하세요.
읽어주셔서 감사합니다 :)