메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

Slack : 14. 나만의 슬래시 커맨드 만들기(2/2)

한빛미디어

|

2016-11-24

|

by 노승헌

18,291

이번에는 간단한 예제로 특정한 도메인을 입력하면 DNS를 통해 획득한 IP 주소를 알려주는 슬래시 커맨드를 직접 만들어 보겠습니다. 

 

데스크톱 환경에서는 nslookup이나 dig 명령으로 쉽게 IP 주소를 확인할 수 있지만 모바일 기기를 이용해 이 작업을 수행하려면 조금 번거롭습니다. IP 주소를 확인하는 기능을 제공하는 애플리케이션이나 웹 사이트에 접속해 조회해야 하기 때문입니다. 슬랙에서 명령어 하나로 쉽게 IP 주소를 조회할 수 있다면 불필요한 작업 시간을 상당히 줄일 수 있을 겁니다. 단순한 기능을 하나 구현하는 것이니 원본 서버의 루트 경로(/)로 접근하는 경우, 필요한 DNS 조회 작업을 하고 결과를 리턴하는 코드를 만들어 보았습니다. 

 

앞서 살펴 보았던 것처럼 슬랙 서버와의 HTTP 요청/응답의 양식에 맞추어 JSON 메세지를 만드는 부분이 다소 지저분해 보일 뿐이고 실상은 몇 줄 안 되는 코드입니다. 물론 슬래시 커맨드를 본격적으로 활용하기 위해서는 잘 정리된 라우팅 정책과 코드 레벨에서의 보안 등을 신경 써야 합니다. 이번 예제는 구현 방법을 검증해 보는 정도로만 살펴보겠습니다. 아마 구현 방법 검증에는 부족하지 않을 것입니다.

 

[코드] node.js로 만든 /dig 슬래시 커맨드 코드

 


var http=require('http'),

        express = require('express'),

        bodyParser = require('body-parser'),

        dns = require('dns');

 

var app = express();

app.use(bodyParser.urlencoded());

 

http.createServer(app).listen(80, function(){ console.log("Http server listening on port 80”); });

 

app.get('/', function (req, res) {

        console.log(req.connection.remoteAddress + " " + req.url);

        var resultJSON = "";

 

        res.writeHead(200, {'Content-Type' : 'application/json'});

        // Check query parameter named "text" is exist

        if (req.query.text != "") {

                resultJSON = "{ "response_type": "in_channel",";

                resultJSON +="  "text": "IP 주소는....",";

                resultJSON +="  "attachments": [ ";

                resultJSON +="     {";

                resultJSON +="         "text":";

 

                dns.resolve(req.query.text, function(err, rec) {

                        if (err) {

                                console.log('DNS Resolving failed : %s', err);

                                resultJSON += ""DNS 조회가 실패했습니다. 다시 확인해 주세요!"}";

                        } else {

                                console.log('* dns.resolve('%s'): rec: %s', req.query.text, JSON.stringify(rec));

 

                                var ips = "";

                                rec.forEach(function (tmp) {

                                        ips += tmp + ", "

                                });

 

                                resultJSON += """+ips.substring(0, ips.length-2)+""}";

                        }

 

                        resultJSON += "] }";

 

                        res.write(resultJSON);

                        res.end();

                });

        }

        //res.end();

 

});

 


 

슬랙에서 정의한 "/dig [도메인명]” 명령으로 DNS 조회가 잘 되는 것을 확인할 수 있습니다. 주의할 점은 슬래시 커맨드 처리 로직이 슬랙으로 콜백하는 시간이 정해져 있다는 점입니다. 응답은 3초 이내에 슬랙 콜백 서버로 전달되어야 하니 너무 복잡한 작업을 처리하지 않도록 주의하시기 바랍니다.

 

#7-8.png

[그림] 슬래시 커맨드를 통한 DNS 조회

 

 

마치며

지금까지 총 14화에 걸쳐, 슬랙의 설치 방법에서부터 팀의 생성과 권한 관리, 외부 서비스를 어떻게 연동하는지 살펴보았습니다. 깊게 들어가지는 않았지만 슬랙이 제공하는 프로그래밍적인 연동 방법까지 살펴보았습니다. 슬랙은 편리한 도구이고 기존에 존재하던 여러 커뮤니케이션 수단이나 협업, 업무 도구와 비교해 보더라도 훨씬 나은 많은 기능들을 제공합니다. 단순히 도구를 바꾼다고 해서 많은 일이 바뀌지는 것은 아닙니다. 다만 슬랙이 업무 프로세스, 워크 플로우를 통합할 수 있는 공간과 방법을 제공한다는 것에 주목합시다. 

 

파편화되어 있는 업무들을 하나의 공간에서 통합할 수 있도록 재정비하는 작업은 꼭 필요합니다. 이 과정으로 반복 작업에 대한 자동화가 가능해지고 불필요한 커뮤니케이션 비용을 줄여나갈 수 있습니다. 더불어, ‘통합’을 하는 이유에 대한 회사 혹은 팀의 공감대를 만들고 더 나은 업무 환경을 만들기 위해 변화를 해보자는 의지가 있어야 합니다. 

 

좋은 도구라 하여 모두에게 좋은 도구일 수는 없습니다. 좋은 도구를 어떻게 활용할 것인가에 대한 고민이 없다면 그저 또 하나의 시스템 도입으로 인식할지 모릅니다. 생산성 향상과 삶의 질 향상이라는 두 마리 토끼를 잡기 위한 여러분의 여정에 행운이 함께하길 기원해 봅니다.

 

 

이 글은 http://nopdin.tistory.com에 동시연재 중입니다.
NoPD 노승헌(@ds1dbx) 님의 더 많은 글을 보시려면 블로그를 방문해주세요.
댓글 입력
자료실