0. 이 글의 목적
https://github.com/0113bernoyoun/easy-discord-webhook-api
GitHub - 0113bernoyoun/easy-discord-webhook-api
Contribute to 0113bernoyoun/easy-discord-webhook-api development by creating an account on GitHub.
github.com
이 프로젝트를 배포하면서 했던 일들 정리하기 위함이 목적
1. 구조
Slack은 라이브러리를 제공해 줘서 참 좋은데 discord는 이게 없다. 그래서 만들면 재미있겠다 싶어서 무작정 만들기 시작했다.
다행히 어떤 parameter가 어떤 역할을 하는지에 대해서는 잘 나와있다.
https://birdie0.github.io/discord-webhooks-guide/discord_webhook.html
Discord Webhook - Discord Webhooks Guide
Before using Webhooks you have to know the structure. All elements listed here are optional but request body should contain content, embeds or attachments, otherwise request will fail. username - overrides the predefined username of the webhook avatar_url
birdie0.github.io
https://discord.com/developers/docs/resources/webhook
Discord Developer Portal — API Docs for Bots and Developers
Integrate your service with Discord — whether it's a bot or a game or whatever your wildest imagination can come up with.
discord.com
우선 record를 사용했다.
record는 jdk14에서 도입된 data class이다.(코틀린의 data와 동일하다고 생각하면 된다.)
롬복에 대한 의존성도 제거를 하고 싶었고 그 과정에서 데이터에 대한 접근을 편하게 하려고 record로 진행했다.
문제는 record에서는 생성자 오버로딩이 안된다는 점이다.
이 점 때문에 값을 넣지 않고 싶어하는 파라미터에 억지로 null이라도 채워 넣어야 하는데 이 부분은 Builder패턴으로 해결했다.
이후 사용자가 전송을 하게 되는 클래스는 MsgAPI로 만들었다.
싱글턴으로 만들어서 한번 webhookurl을 설정하면 계속해서 가지고 있게 할 목적이었다.
최대한 라이브러리에 대한 의존성을 제외하기 위해 OkHTTP나 Retrofit등의 라이브러리를 사용하지 않고 HttpUrlConnection을 사용하였다.
이제 남은 건 전송할 때 모든 값들을 json으로 변환해서 보내야 한다. 이건 좀 귀찮은 작업이라 1.0 버전에서는 ObjectMapper를 사용하였다.
최종적으로 이 라이브러리의 외부 의존은 fasterxml과 jdk14버전 이상이 남게 되는 것이다.
3. 개선 사항 및 추후 방향
우선 클래스의 이름을 MsgAPI로 적었듯 나중에는 slack, discord를 통합한 라이브러리를 하나 가져가는 게 좋지 않을까 싶다.(이때는 레포가 바뀌거나 레포의 이름이 변경될 것 같다.)
그리고 모든 의존성을 제거하기 위해 ObjectMapper에 대한 의존도 제거하고 record대신 class를 사용해야 할 것이다.
이후 jar에 대한 빌드는 github action에 맡기면 될 것으로 생각된다.