[Maven/Gradle] 의존중인 모든 라이브러리의 라이센스 정보 불러오기

Intro 소프트웨어 개발을 하는 과정에서는 다양한 서드파티 라이브러리를 사용하게 된다. 이들 라이브러리는 우리가 직접 작성해야 할 코드의 양을 획기적으로 줄여주며 이미 검증된 라이브러리를 사용하면 코드의 안정성 향상에도 많은 도움을 준다. 하지만 각 라이브러리는 자체 라이센스 정책을 가지고 있으며, 개발자로서 이를 이해하고 준수하는 것은 법적이나 윤리적인 측면에서 매우 중요하다. 이번에 사용중인 모든 서드파티 라이센스 정보를 프로젝트에 기입해야 하는 일이 필요했다. 수동으로 관리하고 문서화 하는 것은 실수하기도 쉽고 시간도 많이 소요되기 때문에 자동화 할 수 있는 도구를 찾아보았고, 다행히도 제법 잘 만들어진 몇 도구들이 있어 어렵지 않게 라이센스 정보를 한번에 생성할 수 있었다. 지금부터 이 글을 통..

Programming/Java 2023.07.21
공유기 DDNS 설정으로 아이피 변경 대비하기 (ipTIME)

Intro 집에서 안쓰는 노트북에 우분투서버를 설치해 홈 서버로 운영한지 이제 2년이 넘어갑니다. 처음에는 클라우드에 비용을 투자하기에는 부담스럽고, 개발한걸 서버에 배포는 해보고 싶은 마음에 전기요금이 적게 드는 노트북으로 절충을 했는데, 필요에 맞춰 스토리지와 램도 증설을 하다보니 이제는 제법 쓸만 해 졌습니다. 무료 클라우드를 몇개 함께 사용하고는 있지만, 이처럼 넉넉한 메모리 및 저장공간에 그래픽카드까지 갖춘 고사양 컴퓨팅 환경을 약간의 전기요금만으로 사용할 수 있다는건 굉장한 이점이 있습니다. 하지만 홈 서버의 장점이 명확한 만큼 운영할때의 불편함 또한 여러가지가 있습니다. 그 중 가장 치명적인것 중 하나가 아마 유동 아이피 문제가 아닐까 생각됩니다. 오래전에는 가정용 인터넷은 IP주소가 자주 ..

Development/DevOps 2023.06.19
Grafana 모니터링중 이상 발생시 슬랙으로 알림 보내기

Intro Oracle Cloud는 1기가 메모리 인스턴스 무료로 제공한다. 그것도 무려 2개나. 몇년간 여러가지 클라우드 옵션들을 찾아봤지만 이정도로 파격적인 조건은 전혀 찾을 수 없었다. 그래서 그 두개의 인스턴스를 정말 요긴하게 잘 사용하고 있다. 고정 아이피도 제공해주기 때문에 토이프로젝트 정도는 물론이요, 트래픽이 많지 않다면 작은 서비스도 운영할 수 있을 것이다. 이정도 스펙이면 네이버 클라우드 기준으로도 월 3만원 이상 과금을 해야 하는데 공짜로 쓸 수 있으니 정말 좋다. 하지만 망각하고 있었던게 있으니, 그들의 이름은 악명높은 오라클 이였다. 난 이제 2년정도 사용했는데 여태 잠잠하더니 슬슬 점유율을 끌어 높이기 위해 썼던 그들 스스로의 묘책을 거둘 셈으로 보인다. 요즘따라 툭하면 이메일을..

Development/DevOps 2023.06.07
골치아픈 공공데이터포털 serviceKey 인코딩 문제

Intro 처음 겪는 일은 아니지만 공공 데이터 포털 API를 쓸 때마다 고생을 해서 이번에 글로 정리해두려고 한다. 공공 데이터포털은 각 공공기관이 보유하고 있는 여러가지 다양한 공공 데이터들을 하나의 통합 창구에서 편리하게 사용할 수 있도록 만들어진, 정부에서 운영하는 서비스다. 제공하는 정보가 정말 다양하고 여러가지 유용한 정보가 있으며 무료로 사용할 수 있기 때문에 개발자라면 한번쯤은 사용 해 보았을 것이다. 아래 보이는 것 처럼, 공공 데이터 포털에서는 개인 API 인증키를 Encode / Decode 된 두가지 버전으로 제공한다. 여기까지는 좋다. 사용자가 편의에 따라서 URI 인코딩 하지 않고 인코딩 된 키를 바로 복사해서 써도 되고, 그게 아니면 Decode 된 키를 가지고 각자 알아서 요..

Development/Daily Error 2023.05.28
[Java/Kotlin] Final 클래스 Mocking 하기

Intro 코틀린을 사용한 프로젝트에서 Mockito를 사용해서 테스트 코드를 작성했는데 아래와 같은 에러가 나며 코드가 동작하지 않았다. Cannot mock/spy class com.tistory.shanepark.dutypark.security.domain.dto.LoginMember Mockito cannot mock/spy because : - final class org.mockito.exceptions.base.MockitoException: Cannot mock/spy class com.tistory.shanepark.dutypark.security.domain.dto.LoginMember Mockito cannot mock/spy because : - final class at app//..

Programming/Kotlin 2023.05.22