월별 글 목록: 2018년 5월월

Xcode 에서 Pod 프로젝트의 경고 표시 없애기

Xcode를 이용해 개발을 하다보면 cocoapod를 이용해 외부 라이브러리를 사용하게 되는데요. Swift 언어가 계속해서 발전하다보니 새로운 버전에서 deprecated 되는것들이 많아져서 1년만 지나도 꽤 많은수의 경고문구를 보게 됩니다. 내 프로젝트의 경우 소스코드를 직접 수정하면 되지만 외부 라이브러리들은 해당 프로젝트의 상황에 따라서 경고되는 항목들을 고치지 못하는 경우가 많습니다.

이렇게 되면 어느순간부터 내 프로젝트의 빌드 경고창에는 외부 라이브러리들의 경고가 많아져서 내 프로젝트의 경고가 묻히고 수정해야 된다는 사실을 인지하지 못하게됩니다.

위의 경우 총 58개의 경고가 있는데 이중 56개는 외부 라이브러리들의 경고표시입니다. 내 프로젝트의 경고표시는 제일 아래쪽에 2개가 위치합니다. 또한 경고문구는 기본으로 펼쳐져 있어서 스크롤을 아래까지 해야 겨우 볼 수 있습니다. 프로젝트가 커져서 사용하는 외부 라이브러리가 많아지면 경고는 300개를 넘는경우도 있습니다.

다행히도 이 문제를 해결할 방법이 있습니다. cocoapod의 경우 Podfile에 아래 내용을 추가해서 Pod 프로젝트들에 대해 경고가 표시되지 않도록 설정 할 수 있습니다.

inhibit_all_warnings!

전체 Podfile 의 샘플을 보면 다음과 같은 식입니다.

platform :ios, '9.0'
target 'MyProject' do
  use_frameworks!
  inhibit_all_warnings!
  pod 'Alamofire', '~> 4.5'
end

전체 Pod이 아닌 특정 Pod의 경고만 표시하지 않으려면 pod 선언할때 옵션으로 선언합니다.

pod 'Alamofire', '~> 4.5', :inhibit_warnings => true

Podfile 을 수정하고 pod install 을 다시 실행한후 Xcode 프로젝트에서 빌드를 다시하거나 클린빌드를 하면 기존에 보이던 Pod 프로젝트의 경고표시가 모두 사라진것을 볼 수 있습니다.

이 옵션은 pod init 으로 Podfile을 처음 생성할때 기본으로 들어가면 좋을것 같은데 기본 옵션은 아닙니다.

유튜브

달구지 코딩이라는 유튜브 채널을 만들어서 운영중입니다. 이 포스트 내용은 아래 유튜브 영상에서도 확인할 수 있습니다. 유튜브 구독 부탁드려요 ^^

참고자료

게시글의 아마존, iTunes 링크들을 통해 구매를 하시면 제휴(Affiliate) 프로그램에 의해 저에게 일정 금액이 적립될 수 있습니다. ^_____^

.bot 도메인 등록하기

Amazon에서 .bot 도메인을 등록할 수 있도록 해서 등록 방법을 소개하려고 합니다.

.bot 도메인 등록을 대행하는 EnCirca 사이트의 설명을 보면 현재는 Landrush 2 기간으로 .bot 도메인 등록을 아무나 할 수 없고 봇을 운영중인지 확인후 등록할 수 있는 권한을 주는것으로 보입니다. 봇을 운영중인지 확인하는 것은 Amazon Lex, Microsoft Bot Framework, Dialogflow, Pandorabots, Gupshup, Botkit Studio 등 봇 관련 서비스들과의 연동을 통해서만 가능합니다.

아마도 2018년 5월 31일 이후에는 봇을 운영중인지 확인작업 없이 일반 도메인 처럼 등록되지 않을까 싶은데 확실한 정보는 아닙니다.

절차가 좀 길고 복잡한데 영상으로도 촬영 했으니 참고하세요.

.bot 도메인 등록을 위해서 우선 amazon registry 사이트에 접속합니다.

접속후 검색창에 구매하고자 하는 도메인 이름을 입력하고 다음 절차로 이동합니다.

아마존 계정에 로그인 되어 있지 않다면 다음 화면으로 넘어가기전에 아마존 로그인이 필요합니다.

봇을 운영중인지 확인하는 작업이 필요합니다. 목록에 나온 서비스중 본인이 운영중인 봇 서비스를 선택하면 확인작업에 대한 절차가 설명됩니다. 봇을 현재 운영하고 있지 않다고 가정하고 Amazon Lex를 이용해 봇을 생성하고 인증하는 절차를 설명하겠습니다.

Amazon Lex를 선택하면 오른쪽에 봇을 확인하기위해 필요한 절차가 표시됩니다.

준비 작업

아마존 웹서비스 계정에 로그인해서 Cross Account Role을 생성하고 545643940769 계정에 대해 권한을 추가하는 작업이 필요합니다. 그럼 이제부터 Role 을 생성해보겠습니다.

AWS 콘솔에 로그인후 IAM 메뉴에서 Roles 선택하고 Create Role 버튼을 클릭합니다.

Account ID와 External ID 항목에 앞선 .bot 도메인 등록 사이트에서 알려준 정보를 입력합니다.

다음 화면에서는 Role에 부여할 Policy 를 선택해야 되는데요. AmazonLexReadOnly를 선택합니다.

Role 이름은 나중에 알 수 있도록 적당히 잘 정하고 설명에도 잘 적어둡니다. 여기까지는 공식사이트에서 설명하는 절차인데요. 제가 해보니 여기서 한가지가 더 필요합니다.

IAM 콘솔에서 Policies 를 선택하고 Create Policy 버튼을 클립합니다.

JSON 탭을 선택하고 아래 내용을 추가합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "lex:PostText"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}

Policy 를 생성했다면 앞서 생성했던 Role을 선택하고 Attach policy 버튼을 클릭해서 방금 생성한 Policy를 추가합니다.

최종적으로 위와 같은 Role을 얻게 됩니다. 이제 .bot 도메인 등록 사이트로 돌아갑니다.

임시로 Lex 봇 만들기

Amazon에서 제공하는 봇 서비스를 이용해 임시로 봇을 생성하겠습니다.

AWS 콘솔에서 Lex 페이지에 접속해서 새로운 Lex 봇을 생성합니다. Lex 봇을 처음 생성한다면 아마 첫화면에 Get Started 버튼이 보일텐데 해당 버튼을 클릭합니다.

봇 생성을 위한 페이지가 표시되는데 아마존이 제공하는 기본 샘플을 이용하면 코딩을 하지 않아도 됩니다. Try a sample 에서 BookTrip을 선택하고 하단의 COPPA 항목은 No로 선택합니다.

봇 페이지에서 오른쪽 위의 Publish 버튼을 클릭합니다.

alias 는 아무이름이나 입력하고 publish 버튼을 클릭합니다. 배포하는데 1분정도 시간이 걸리니 잠깐 쉬다 오세요.

배포가 완료되면 위와 같이 표시되는데요. 여기서 Bot Name과 Alias를 적어두세요.

도메인 등록하기

이제 준비 작업은 모두 끝났습니다. .bot 도메인 등록 사이트로 가서 아까 보였던 봇 확인 작업창에 앞서 준비했던 내용들을 입력합니다.

AWS cross account role ARN 항목에는 앞서 생성했던 Role의 Role ARN을 입력합니다.

봇 인증이 성공했습니다! 저 같은 경우 이미 해당 도메인에 대해 봇 인증이 되있는 상태라 메시지가 조금 다르게 나왔지만 페이지는 동일합니다.

Continue to registration 버튼을 클릭하면 도메인 등록을 위한 페이지로 이동합니다.

가격이 $75 네요!! Site Builder 옵션은 선택하지 않아도 도메인 등록하는데 문제 없습니다.

실제 도메인 등록은 EnRica 사이트를 이용해서 진행되기 때문에 해당 사이트 가입을 위한 주소 정보를 선택하라고 나올텐데요. 기존 아마존 계정에 있는것을 선택하거나 새로 입력해서 다음 단게로 넘어갑니다.

다음 화면에서는 EnRica 사이트 가입 절차가 나옵니다.

저도 여기 까지만 해봤고 더이상은 진행하지 않았습니다. 하지만 이 다음부터는 일반적인 도메인 등록 절차와 동일할테니 쉽게 할 수 있을겁니다.

정리

아마존에 .bot 도메인을 등록할 수 있게 한다고 해서 호기심에 내 아이디를 선점 해볼까라는 생각이었는데 생각보다 절차가 복잡했고 가격도 $75로 비싼편입니다.

.bot 도메인에 대한 확인 작업은 아마도 2018년 5월 31일 이후에는 없어질것으로 보여서 이 글이 큰 도움이 되지 않을수도 있지만 미리 선점하려는 분들에게 도움이 되었으면합니다.

마지막으로 제가 운영중인 개발관련 유튜브 채널인 달구지코딩 구독 부탁드립니다 ~ AWS 서비스를 포함한 다양한 소프트웨어 개발관련 내용을 업로드 하고 있습니다.

참고자료

게시글의 아마존, iTunes 링크들을 통해 구매를 하시면 제휴(Affiliate) 프로그램에 의해 저에게 일정 금액이 적립될 수 있습니다. ^_____^

Slack 프록시 서버 – slackboard 소개

슬랙(Slack)을 자주 사용하다 보면 여러가지 연동을 하게 됩니다. 서버나 특정 상태에 따라 슬랙에 메시지를 보내는데요. 연동도 쉬워서 사용 할수록 더 많은 연동을 하게 됩니다.

이번에 소개하려는 slackboard는 슬랙에 메시지를 전송할때 아쉬운 부분을 해결해주는 기능을 가지고 있습니다. slackboard의 주요기능은 다음과 같습니다.

  • 커맨드 라인에서 쉽게 메시지 전송
  • 쉘 스크립트가 비정상적으로 종료됬을때 슬랙 메시지 전송
  • 태그 이름만으로 미리 지정한 채널이름, 사용자 이름, 이모지 설정
  • QPS 제어 기능

이중 slackboard를 꼭 써야하는 이유중 하나는 마지막의 QPS 제어 기능입니다. 일반적으로 사용하는 슬랙의 Incoming webhooks의 경우 초당 1건의 메시지로 제한되어 있어서 1초에 메시지를 여러개 전송하면 일부 메시지가 유실될 수 있는데 slackboard의 QPS 제어 기능을 이용하면 메시지가 유실되지 않게 분산해서 전송합니다.

유튜브 영상으로도 촬영 했으니 참고하세요.

그외 장점 및 사용헤 대해서도 하나씩 알아 보기 전에 설치 방법을 알아 보겠습니다.

서버 설치

slackboard는 프록시 서버를 설치해야 하는데요. golang으로 작성되어 있어 사전에 go 언어를 빌드 할 수 있도록 준비해야합니다. go 언어가 설치 됬다면 아래 명령어로 slackboard 를 설치합니다.

$ go get -u github.com/cubicdaiya/slackboard/...

프록시 서버 설정을 위해 환경설정 파일(config.toml)을 생성하고 수정합니다.

[core]
port = "60000"
slack_url = "https://hooks.slack.com/services/XXX/YYY"
qps = 1
max_delay_duration = 5

[log]
access_log = "stdout"
error_log = "stderr"
level = "error"

[[tags]]
tag = "dalguji"
channel = "#general"
username = "seapy"
icon_emoji = ":smile:"
parse = "full"

[[tags]]
tag = "fail"
channel = "#dalguji"
username = "seapy"
icon_emoji = ":warning:"
parse = "full"

slack_url에는 본인의 슬랙 설정에서 얻은 Incoming webhooks 주소를 입력합니다.

[[tag]] 로 시작하는 섹션은 태그를 지정하는 것으로 해당 태그 이름으로 요청이 들어오면 미리 지정된 채널이름, 사용자 이름, 사용자 이모지, 파싱모드를 적용하는것입니다. 태그를 지정해두면 메시지를 보낼때마다 채널과 사용자 이름등을 전달하지 않아도 됩니다.

서버 시작 및 기본 예제 테스트

slackboard 서버 시작 명령어는 다음과 같습니다. 간단하죠

$ slackboard -c config.toml &

실제 운영시에는 systemd 같은 서비스에 등록해두고 사용하면 좋습니다.

테스트 메시지를 보내기 위해 아래 명령어를 사용합니다.

$ echo 'Hi dalguji coding' | slackboard-cli -t dalguji -s localhost:60000

echo 명령어를 이용해 stdout 으로 메시지를 전송했고 slackboard-cli 명령어는 stdout으로 받은 메시지를 dalguji 태그와 함께 localhost:60000 서버로 전송합니다.

메시지를 전송하기만 하는 클라이언트 입장에서는 슬랙의 Incoming webhooks 주소를 이용해 curl 로 보낼수도 있지만 slackboard 설치하고 서버 주소만 알면 간단하게 전송 할 수 있게됩니다.

커맨드가 정상적으로 종료되지 않을 경우 알림

제가 slackboard를 사용하는 이유중 하나인 명령어가 비정상적으로 종료 되었을때 슬랙으로 에러 메시지를 알려주는 기능을 살펴 보겠습니다.

아래 명령어를 실행하면 some-command라는 명령어를 알 수 없다고 하면서 에러가 발생할겁니다.

$ slackboard-log -s localhost:60000 -t fail -- some-command

하지만 에러가 발생하면 localhost:60000 서버의 fail 태그로 어떤 이유로 명령어가 실패 했는지 전송하고 프록시 서버는 이를 슬랙으로 전송합니다.

저는 주로 쉘 스크립트를 정기적으로 실행하는데 실패하면 알림을 받고 싶을때 사용하는데요. 우선 아래와 같은 쉘 스크립트 파일(dalguji.sh)을 하나 만들어 둡니다.

#!/bin/sh
echo "dalguji script"

에러가 발생하지 않을 정상 스크립트 입니다. 이 스크립트가 정상 실행되는지 보겠습니다.

$ slackboard-log -s localhost:60000 -t fail -- dalguji.sh

정상 실행될때는 슬랙에 메시지도 안오고 그냥 echo 만 실행됩니다. 스크립트를 조금 변경해서 에러가 발생하도록 해보겠습니다.

#!/bin/sh
eeeeecho dalguji script

$ slackboard-log -s localhost:60000 -t fail -- dalguji.sh

다시 실행해보면 에러가 발생하고 에러 내역이 슬랙에 표시됩니다.

이러한 작업은 쉘 스크립트만으로도 할 수 있겠지만 이를 구현하려면 내가 만든 쉘 스크립트나 명령어를 감싸서 실패를 체크하고 슬랙으로 전송하는 스크립트를 직접 만들어야 됩니다. 하지만 slackboard는 간단한 설치와 설정으로 쉽게 사용할 수 있습니다.

성공했을때도 보내고… 실패 했을때도 보내고 싶다면?

마지막으로 쉘 스크립트가 성공이나 실패 했을때 모두 결과를 slack으로 전송하고 싶다면 아래와 같은 방법을 사용합니다.

$ dalguji.sh 2>&1 | slackboard-cli -s localhost:60000 -c dalguji

스크립트 실행중 발생한 stderr 출력을 stdout으로 리다이렉트 하고 해당 메시지를 슬랙으로 전송하는 방법입니다.

참고자료

게시글의 아마존, iTunes 링크들을 통해 구매를 하시면 제휴(Affiliate) 프로그램에 의해 저에게 일정 금액이 적립될 수 있습니다. ^_____^