본문 바로가기

[RT-AC68U] 와이파이 끊어짐 + 온도 확인 명령어 금요일 공유기의 무선이 동작을 안하는 일이 벌어졌다. 회사에서 연락을 받아서 공유기를 껐다가 켜보라고 이야기했다. 껐다켜고 나서는 무선 인터넷이 되는데 좀 지나면 다시 연결이 안되었다. 집에와서 보니 이런 현상을 계속 발생하였다. 우선 다른 공유기를 연결해놓았다. 토요일 아침 다시 연결을 해보니 잘되는 것 같더니 또 무선이 끊겼다. 펌웨어 업데이트까지 했는데 상황은 나아지지 않았다. 인터넷으로 찾아보니 발열 때문이라는 이야기부터, 어댑터를 바꾸니 무선 환경이 나아졌다는 글이 보였다. 그 중에 공장초기화를 하고 났더니 괜찮아졌다는 글이 가장 해볼 수 있는 최선의 선택이었다. (발열을 잡으려면 팬을 사야하고, 어댑터도 구입하는데 몇 일은 걸릴 것이다.) 공장초기화는 어렵지 않았다. 물리적인 리셋 스위치를 5..
byte[]을 String으로 바꾸기 방법 1 StringBuilder 를 이용해서 한땀한땀 문자열을 만든다. String byteArrayToHex(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (final byte b : bytes) { sb.append(String.format("%02X", b & 0xff)); } return sb.toString(); } 방법2 BigInteger를 이용하여 변환한다. byte[] bytes; // ... String.format("%02X", new BigInteger(1, bytes)); 위의 경우는 "2479205A7E68AFA9" 와 같이 대문자로 만들 경우인데, 재미있는 것은 BigInteger.toString()의 경우 내부적으..
JDK8 업데이트를 하다(181 to 211) 오늘 배포가 있어서 도비님하고 develop 브랜치에 개발한 것을 서로 merge를 하였다. 그런데 내 노트북에서는 테스트 코드가 모두 성공하는데 도비님 노트북에서 테스트 코드가 계속 깨진다. 깨지는 부분은 AES-256 암호화 하는 쪽 문제이다. 키의 크기는 맞는데 메세지가 달랐다. AES Illegal key size or default parameters 오늘 아침에 도비님께 물어보니 자바 특정버전 까지는 AES 256 암호화를 미국내에서만 사용하도록 제한을 걸어놓았다고 한다. 나의 JDK버전은 1.8 181릴리즈라 제한이 풀려서 문제가 없었던 것이다. 도비님의 버전은 그 이하였나보다. https://blog.kjslab.com/94 를 참고하자. 이참에 JDK8 릴리즈 업데이트를 해놓아야 겠다. ..
[외장하드] 데이터전송 by 충전케이블 vs Thunderbolt 3 케이블 2018 MacBook Pro (15-inch, 2018) 를 사용중이다. 외장하드와 케이스를 구입했는데 케이블을 USB-A to USB-C이 들어있었다. - 케이스: UGREEN USB C Hard Drive Enclosure USB 3.1 Gen 2 Type C to SATA External Hard Drive Disk Case Adapter - 하드디스크: SanDisk Ultra 3D NAND 2TB Internal SSD - SATA III 6 Gb/s, 2.5"/7mm - SDSSDH3-2T00-G25 맥북프로는 USB-A 포트가 없다. 아쉬운데로 맥북프로에 동봉되어 있는 전원 케이블을 이용했다. 그런데 너무 속도가 느린 것이다. 연결 정보를 보니 USB2로 연결되어 있었다. 아무래도 케이블 ..
부모클래스에서 로깅시 서브클래스의 이름 찍기 추상클래스에서 로그를 찍고 싶을 때가 있다. lombok을 쓰고 있기에 단순히 abstract class 위에 @Slf4j 을 붙여주면 땡이지만 이렇게 하면 로그 클래스 이름이 Abstract 클래스 이름만 나오게 된다. 이럴 경우 상속받는 서브타입의 클래스이름이 찍게 하려면 어떻게 하면 될까? 1안 - 타입을 저장하여 파라미터로 받게 하는 방법 처음에는 2안이 있는 줄 모르고 타입을 저장하는 enum을 만들어서 Abstract 클래스의 생성자로 주입을 시켰다. 물론 이 방법도 동작을 했지만 @SuppressWarnings("unchecked") 를 붙여야 했고 서브타입이 추가 될 때 관련 없는 enum을 수정해야 한다는 것이 SRP 위반으로 보였다. 2안 - Object.getClass() 를 이용하는..
[Util] EUC-KR to JavaScript escaped string 파일럿 성으로 만들어보았는데 결국 쓰지 않을 것 같지만 아카이브용으로 기록해둔다. public static String toJsonEucKr(String str) { if (Objects.isNull(str)) { return null; } byte[] euckr = str.getBytes(EUC_KR); StringBuilder sb = new StringBuilder(euckr.length * 5); // 1: 5B -> 6: \u005B , 2: B0E6 -> 6: \uB0E6 boolean isMultibyte = false; for (byte b : euckr) { if (isMultibyte) { sb.append(byteToHex(b)); isMultibyte = false; } else {..
[Sonarqube] Make sure using this hardcoded IP address is safe here. 코드상에 하드코딩된 IP주소가 있을 경우 소나큐브는 아래와 같은 취약성 경고를 내놓는다. Make sure using this hardcoded IP address is safe here. 문제는 실제 의미없는 더미로 IP주소도 깨알같이 잡아낸다는 것이다. 하지만 소나큐브 코드상에 인 경우에는 대상에 포함시키지 않는 것 같은데 이상하게 잡힌다. (구버전의 소나큐브라서 그런가?) https://github.com/SonarSource/sonar-java/blob/master/java-checks/src/main/java/org/sonar/java/checks/HardcodedIpCheck.java#L71 회피책 //NOSONAR 주석을 붙여서 회피하는 방법도 있지만 뭔가 아쉽다. InetAddress.an..
[스프링 부트] StringHttpMessageConverter 를 쓸 때 주의점 제목이 길어져서 생략했지만 2.1.2.RELEASE 부터 적용되는 이야기이다. 스프링부터 2.1.2.RELEASE 에서 의존하는 스프링 프레임워크 버전은 5.1.4.RELEASE 이다. spring-web:5.1.4.RELEASE 에 들어있는 StringHttpMessageConverter 클래스의 코드가 아래와 같이 변경된 것을 알 수 있었다. getContentTypeCharset 메서드가 해주는 역할은 미디어타입에 따라 캐릭터셋을 돌려주는데, 크게 3가지 부분에서 사용이 된다. readInternal: 메세지를 읽을 때 getContentLength: 컨텐츠의 길이를 계산할 때 writeInternal: 메세지를 쓸 때 문제는 getContentTypeCharset의 로직의 분기가 추가됨에 따라 J..