0. 이 글의 목적
https://github.com/0113bernoyoun/easy-discord-webhook-api
이 프로젝트를 배포하면서 했던 일들 정리하기 위함이 목적
1. 구조
Slack은 라이브러리를 제공해 줘서 참 좋은데 discord는 이게 없다. 그래서 만들면 재미있겠다 싶어서 무작정 만들기 시작했다.
다행히 어떤 parameter가 어떤 역할을 하는지에 대해서는 잘 나와있다.
https://birdie0.github.io/discord-webhooks-guide/discord_webhook.html
https://discord.com/developers/docs/resources/webhook
우선 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에 맡기면 될 것으로 생각된다.