우리 회사는 Monday.com에서 Notion으로 업무 협업툴을 변경했다.
문서 또한 Confluence를 쓰고 있어서 문서가 막 정제되지 않은 상태에서 많이 돌아 다녔던거 같다.
Notion으로 넘어온 김에 내 업무는 내 업무대로 문서화 하고 다른 사람도 문서화 하는 것을 독려하고 있다.
문서정리에는 다음과 같은 장단점이 있다.
장점
1. 내가 없어도 다른 사람이 그 문서를 보고 답변을 받는다.
2. 긴급 상황으로 인해 장애 조치 및 기타 사항 처리시 해당 문건을 통해 훨씬 빠르게 처리한다.
3. 문서화된 내용을 기반으로 한 정책 수립이 용이해진다.
단점
1. 지속적인 업데이트 필요
2. 신규 작성시의 시간 소요
3. 큰 정책의 변동으로 인한 경우 여러 범위의 문서가 업데이트 대상이 됨.
이러 저러한 장단점으로 인해 사실상 문서를 체계적이고 균일하게 유지보수하는 회사는 생각보다 많지 않다.
그래서 적어도 내 업무만은 문서 Indexing 및 다른 사람이 참고할만한 문건들을 적어서 정리하는 중이다.
문서 작성이야 그냥 시간 내서 하면 그만이지만, 문제는 이것이었다.
사람들이 내 문서를 읽어주지 않고 동일한 질문을 계속 한다.
어떻게 내문서를 강제로라도 읽게 하지? 고민하다가 처음엔 이 방법을 정해봤다.
"모든 슬랙에 내 이름이 붙으면 Indexing 문서 호출하기"
뭐 이렇게 하더라도 정작 이름을 부르지 않고 DM으로 "똑똑" 이러거나 질문부터 바로 날리면 결국 저건 무용지물이다.
그래서 아주 조금 더 스마트하게 접근해보자 라는 마인드로 Notion API를 사용해보는게 어떨까 싶었다.
슬랙 슬래시 커맨드와 Notion API, AWS EC2를 이용해서 한번 만들어 보기로 했다.
전제
1. Notion Workspace 일것.
2. 검색할 Database (Table)에 대한 연결 권한을 가지고 있어야 할 것. (없을시 담당자에게 요청)
3. 슬랙 API 사용 권한을 가지고 있을것.
4. Test를 위해 ngrok을 설치할 것.
순서
1. Notion API 사이트 이동 (https://developers.notion.com/)
2. View My Integrations 선택 (안 보이면 로그인할 것)
3. 새 API 통합 선택
4. 워크 스페이스 연결 및 이름 입력 후 제출 클릭
5. 내가 만든 API 통합 클릭 후 시크릿 복사
6. 기능에서 콘텐츠 읽기만 선택 (더 많은 기능을 원한다면 더 클릭) / 사용자 정보 없음 클릭 후 변경사항 저장
이제 슬랙으로 간다.
7. 슬랙 API 사이트로 이동해서 봇을 만든다. (https://api.slack.com)
8. Your Apps 선택
굳이 새로 생성할 필요는 없다. 안 쓰는 봇이 있다면 그걸로 대체해도 된다. 그렇지만 일단 새로 생성해보자. UI로 할거면 From Scratch, Json이나 Yaml로 하고 싶으면 From an app manifest 선택 후 자기 Slack Workspace 선택
9. OAuth & Permission 진입 후 아래의 권한 추가
- chat:write: 이 권한은 봇이 메시지를 Slack 채널 또는 DM에 게시하는 데 필요합니다.
- commands: Slash Command를 사용하기 위한 권한으로, 이 권한을 허용해야 봇이 사용자의 명령을 인식하고 처리할 수 있습니다.
- app_mentions:read: 봇이 Slack 채널에서 언급되었을 때 이를 감지하고 대화에 응답하는 데 필요한 권한입니다.
- im:read: 봇이 DM(다이렉트 메시지)를 읽고 사용자와 상호 작용할 수 있도록 해주는 권한입니다.
- im:write: 봇이 DM에 메시지를 보내거나 답장하는 데 필요한 권한입니다.
- incoming-webhook: 이 권한은 웹훅을 통해 Slack에 메시지를 게시하거나 다른 액션을 수행하는 데 사용됩니다.
- users:read: Slack 워크스페이스의 사용자 목록을 읽는 권한으로, 봇이 사용자를 인식하고 다양한 작업을 수행할 수 있도록 해줍니다.
- users:read.email: 사용자의 이메일 주소를 읽는 권한으로, 봇이 사용자와 관련된 정보를 더 쉽게 관리할 수 있도록 해줍니다.
- users.profile:read: 사용자 프로핸일 정보를 읽는 권한으로, 봇이 사용자의 프로필 정보를 확인하고 인식할 수 있도록 해줍니다.
- channels:read: Slack 채널 목록을 읽는 권한으로, 봇이 채널 정보를 확인하고 사용자와 상호 작용할 수 있도록 해줍니다.
- channels:history: Slack 채널의 메시지 히스토리를 읽는 권한으로, 봇이 이전 메시지에 접근하고 이해하는 데 필요합니다.
- 사실 다 필요하진 않지만, 혹시 모르니 일단 올려놓고 필요 없으면 빼면 될거 같다. 그냥 보기엔 너무 많아 보인다.
10. Install App 선택 후 Install to workspace
채널 선택 후 허용 처리
10. Node.js 작업
일단 여기로 가자 : https://developers.notion.com/reference/intro
Introduction
The reference is your key to a comprehensive understanding of the Notion API.Integrations use the API to access Notion's pages, databases, and users. Integrations can connect services to Notion and build interactive experiences for users within Notion. Usi
developers.notion.com
샘플 코드 : https://github.com/makenotion/notion-sdk-js
GitHub - makenotion/notion-sdk-js: Official Notion JavaScript Client
Official Notion JavaScript Client. Contribute to makenotion/notion-sdk-js development by creating an account on GitHub.
github.com
적절한 코드를 찾아서 해준다.
일단 API 베이스 검색으로 돌리기 위해서 express 프레임워크로 node.js에 database검색, 페이지 검색용으로 API를 꾸며보았다.
코드는 조악...
https://github.com/niceguy61/notion_search_in_slack
GitHub - niceguy61/notion_search_in_slack
Contribute to niceguy61/notion_search_in_slack development by creating an account on GitHub.
github.com
11. EC2 생성 또는 기존 서버에 추가
- 만드는 방법이 이래도 되나 싶을 정도로 너무 간단하여 생성법은 생략한다.
- 기존 Dev 서버에서 작업하기로 함.
- pm2를 이용하여 죽여도 알아서 살아나도록 한다.
- 이미 개발서버엔 ACM, ALB 모두 갖춰져 있다. target group과 ALB Listener만 추가하면 설정 끝.
$ git clone git@github.com:niceguy61/notion_search_in_slack.git
# .env 설정 및 추가
NOTION_API_KEY=아까만든 노션키
NOTION_DATABASE_ID=노션에서 검색할 데이터베이스 ID
$ npm i -g pm2
$ npm i
$ pm2 ecosystem
$ pm2 start ecosystem.config.js
$ pm2 list
# index 서비스가 떠 있는게 보여야 함.
$ pm2 logs -f index
12. 노션으로 돌아가 검색할 Database에 가서 아까 만든 Notion API 통합을 연결 추가.
13. API 서버 https 씌운 상태로 연결 준비
- 로컬에서 테스트를 위한 목적으로 쓰려면 ngrok이란 서비스를 이용해서 연결이 가능하다.
- ngrok 사용법 참조 블로그 : https://velog.io/@kya754/ngrok-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0
ngrok 사용하기 - 외부에서 Localhost 접속하는 방법
"Secure tunnels to localhost"
velog.io
14. Slack Slash Command 연결하기
Create New Command를 하고 다음 화면을 보자
입력할 커멘드와 아까 서비스를 띄운 https를 연결 가능한 주소를 입력한다. Short Description과 힌트를 넣는다.
넣은 후 Save를 눌러 완료처리한다.
서버에 생성한 API 이름이 사람에 따라 다르게 설정할 것이므로 해당 주소를 다르게 설정할 것.
14번까지 완료되었다면, /{생성커맨드}를 했을때 슬랙에서 이런게 나와야 한다.
15. 찐 검색해보기
골라서 검색을 해보자. 나의 경우엔 /{notion_command} {text}를 넣으면 {text}가 title인 task 또는 문서를 검색할 수 있게 해두었다.
클릭하면 문서로 즉시 이동한다.
API 서버의 기능은 뭔가 이상해서 다듬을 예정이지만, 일단 된다는게 무엇보다 중요하지 않은가 싶다.
마무리만 하면 이제는 내가 없어도 문서만 보고 해도 될 정도로 문서 업데이트 할 일만 남았다.
'AWS' 카테고리의 다른 글
ECS Fargate에서 Cloudshell을 이용하여 shell 접근 (0) | 2023.12.11 |
---|---|
테라폼 맨땅에서 부터 적용하기 3 (4) | 2023.12.05 |
SSM 로그인 세션 관리 (0) | 2023.09.18 |
SSM으로 EC2 ssh 로그인 하기 (0) | 2023.09.18 |
Github Action + ECS + Fargate를 통한 CI/CD 구현 3 (0) | 2023.09.16 |