본문 바로가기

Programing/OpenSource

(52)
[Spring Boot] 2.0.2 -> 2.1.4 업데이트 후 TC 깨짐 다행히 많은 테스트 코드가 깨지지는 않았으나 RestTemplate 로깅을 위해 추가한 인터셉터 쪽이 깨졌다. "HEADERS": "({})" => "HEADERS": "([])" org.springframework.http.HttpHeaders 의 구현 방법이 바뀐 것 같았다. 즉 맵에서 배열로 바뀐 것이다. 이전 5.0 대 스프링 버전에서는 생성자가 아래와 같았다. public HttpHeaders() { this(new LinkedCaseInsensitiveMap(8, Locale.ENGLISH), false); } 5.2.0 대 스프링 버전은 아래와 같이 바뀌었다. public static MultiValueMap toMultiValueMap(Map map) { return new MultiVal..
[Gson] List 타입 추론 방법 feat Super Type Tokens Gson deserialize 하는 코드를 보면서 항상 이상했다. gson.fromJson 호출을 할 때, 아래와 같은 이상한 형태의 객체를 두 번째 파라미터로 넘기고 있었기 때문이다. new TypeToken(){}.getType() 객체를 매번 만드는 것도 그랬고, 만든 객체가 아닌 타입을 호출하는 것도 이상해보였기 때문이다. 오늘 삽질을 하고 나서 왜 이렇게 하는 것과 해결 방법에 대해 알게 되었다. 왜 이런 방법을 할까? 자바 객체의 List 타입의 경우 JSON 형태로 serialize 하면 배열의 형태로 바뀐다. 이것은 특별한 규칙이 없어도 가능하다. 하지만 반대의 경우 어떤 객체로 바꿔야 하는지 타입을 받아야 한다. 하지만 타입만 받을 때는 문제가 없지만 List와 같이 Generic 타입을..
[Lombok] @RequiredArgsConstructor 의 득과 실? 백기선 님이 YouTube에 올린 영상 중에 @RequiredArgsConstructor 관한 것이 있다. https://youtu.be/qmI7uJapocw 장점 생성자 주입을 사용하는 경우에는 중복해서 작성해야 하는 슈가 코드를 줄일 수 있다. 역으로 리팩터링하여 주입이 더 이상 안필요할 때 세 군데를 수정해야 할 것을 하나의 수정으로 해결 할 수 있다. @Service public class NamopayService { private final NamopayUrls namopayUrls; private final StoreCache storeCache; private final NamopayApi namopayApi; private final PaymentRepository paymentRepos..
[npm] npm이 npm을 설치하다. NW.js를 설치하기 위해 npm을 사용하다가 못보던 박스가 보였다. 뭔가 살펴보니 새로운 minor 을 쓸 수 있다는 안내였다. 설치 명령어 참 재귀 스럽다. Linux 같이 말이다.npm install -g npm ╭───────────────────────────────────────────────────────────────╮ │ │ │ New minor version of npm available! 6.4.1 → 6.7.0 │ │ Changelog: https://github.com/npm/cli/releases/tag/v6.7.0 │ │ Run npm install -g npm to update! │ │ │ ╰───────────────────────────────────────────────..
[Xamarin.Mac] 데스크탑 애플리케이션 개발 처음에는 크로스 플랫폼 데스크탑 애플리케이션을 만들기 위해 'Electron'과 'NW.js'를 살펴보고 있었다.그런데 패키징까지 해보고 나니 아무것도 없는 애플리케이션도 용량이 100MB 대로 너무 컸다. 혹시 다른 대안이 없을까 알아보다가 보니 macOS에서도 닷넷이 지원되는 것이 생각났다. 1. 닷넷 콘솔 프로그램.NET Tutorial - Hello World in 10 minutes 을 따라가보았다.Visual Studio Code를 이용해서 개발을 할 수 있었다.FootPrint의 형식은 dll로 떨어진다. 용량은 7KB(7,168바이트)였다. 2. 닷넷 응용 프로그램처음에는 mono 프로젝트를 생각했고, 그 쪽도 검색이 되었지만, 이젠 microsoft에서 Xamarin라는 것을 만들었다.m..
[curl] curl -I 는 HTTP HEAD 였다. Github에서 저장소 목록을 구해올 일이 생겨서 API를 쓰게 되었다.문제는 기본적으로 30개씩만 가져오도록 pagination이 되어 있었다. 그런데 응답 json에는 추가로 데이터가 있는지, 있다면 가져올 방법에 대해 알려주는 필드가 없었다.레퍼런스를 몇 번 반복해서 읽고 나서야 왜 없는 줄 알았다. 레퍼런스 문서를 보자Pagination의 기본 여기에는 curl -I 어쩌구 명령만 나와 있어서 알턱이 없었다. 그렇다면 저 마이너스 I 옵션은 무엇일까? curl -Iman 명령으로 찾아보았다.--head 명령과 같다. 음, HTTP HEAD 요청을 보내는 것이었다. 결론그러니까 동일한 URL에 대해 HTTP HEAD로 요청하면, 컨텐츠 없이 부가 정보(예. 페이지 정보)를 보내주는 것였다.컨텐츠가 ..
[JaCoCo] jacoco.exec 이 파일 낯설다... Jenkins에서 테스트 커버리지 체크를 하고 있다.아래 그림에 보면 jacoco.exec 파일을 다운로드 받을 수 있다고 나온다. 근데 받아보면 그냥 바이너리 파일이다. 어떻게 활용해야 하나? 구글신에게 물어보니 StackOverflow에 답이 있다고 한다.IntelliJ IDEA에서 볼 수 있다고 한다. Analyze > Show Coverage Data ... 이전에 커버리지 분석을 한 적이 없다면 아래와 같이 빈 창이 뜬다. (사실 목록에 있었지만 - 버튼을 눌러서 지우고 캡쳐) + 버튼을 눌러 아까 받은 파일을 추가해본다. (창이 위아래의 크기가 줄어든 것은 기분탓이 아니고 당신의 눈썰미가 좋은 것이다. 너무 길어서 줄여서 캡쳐했다.) 그냥 IntelliJ IDEA 로 분석한 것 처럼 나온다. ..
[JS] reveal.js - 웹 슬라이드 스탠포드 대학교 컴퓨터공학 입문 강좌 cs101를 보다가 슬라이드가 웹에 올라와 있는 것을 보게 되었다. 관련글 : 응답하라 101예) https://web.stanford.edu/class/cs101/lecture02.html#/18 교수가 직접 구현을 하지는 않았을 것 같아서 소스보기를 해보니 reveal.js를 썼음을 알 수 있었다. 예전 회사에서 앨런님이 발표시에 썼던 것으로 기억한다. 좋은점 중 하나는 레벨이라는 개념이 존재한다. 로컬에 설치해서 쓸 수도 있고, 온라인 에디터를 쓸 수 있는데, 일정 금액을 내야 한다. 아니면 전체 공개를 하던지.. Free plan: 하지만 맥에는 기본적으로 keynote라는 적당한 프레젠테이션 프로그램을 쓸 수 있어서 이걸 쓸 기회가 있을지는 잘 모르겠다.