분류 전체보기 (886) 썸네일형 리스트형 소켓 통신 개발자는 쪼잔하다. by 이상민 지난주 회사에 오픈클래스가 열렸다. 강연자는 『자바 성능 튜닝 이야기』, 『자바 개발자와 시스템 운영자를 위한 트러블슈팅 이야기』 등 책을 쓴 이상민 님. 강연은 자바, 성능, 도구에 대한 것이 주된 내용이였지만 짧게 "소켓 통신 개발자는 쪼잔하다."라는 말이 나왔다. 당시는 그냥 웃고 넘어갔지만, 강연을 마치고 일을 하면서 그 말이 맞음을 느끼게 되었다. 1바이트 때문에 삽질 S모 회사와의 포인트 연동을 소켓 통신으로 개발을 하는데 자꾸 closed by peer 에러가 발생하는 것이었다. 내가 전문(payload)을 잘못 만들었나 싶어서 데이터를 확인했는데 계속 발생을 하는 것이다. 결국 wireshark를 이용해서 패킷을 캡쳐해서 보고야 원인을 알 수 있었다. Payload의 종결자(terminat.. [SpringBoot] ConversionService에 대한 오해 부제: spring-integration 를 추가하면서 발행한 오류를 통한 ConversionService에 대한 추적 spring-boot 프로젝트에서 "org.springframework.boot:spring-boot-starter-web"를 사용하고 있었다. 엔드포인트로 TCP 연결이 필요해서 스프링 통합 프로젝트의 Spring Integration IP Support를 사용하기 위해 "org.springframework.integration:spring-integration-ip" 의존성을 추가하였다. 잘 돌아가는 애플리케이션이 시작이 되지 않는다. 메세지는 아래와 같다. Description: Parameter 2 of constructor in com.tistory.repository.Cach.. [RT-AC68U] 와이파이 끊어짐 + 온도 확인 명령어 금요일 공유기의 무선이 동작을 안하는 일이 벌어졌다. 회사에서 연락을 받아서 공유기를 껐다가 켜보라고 이야기했다. 껐다켜고 나서는 무선 인터넷이 되는데 좀 지나면 다시 연결이 안되었다. 집에와서 보니 이런 현상을 계속 발생하였다. 우선 다른 공유기를 연결해놓았다. 토요일 아침 다시 연결을 해보니 잘되는 것 같더니 또 무선이 끊겼다. 펌웨어 업데이트까지 했는데 상황은 나아지지 않았다. 인터넷으로 찾아보니 발열 때문이라는 이야기부터, 어댑터를 바꾸니 무선 환경이 나아졌다는 글이 보였다. 그 중에 공장초기화를 하고 났더니 괜찮아졌다는 글이 가장 해볼 수 있는 최선의 선택이었다. (발열을 잡으려면 팬을 사야하고, 어댑터도 구입하는데 몇 일은 걸릴 것이다.) 공장초기화는 어렵지 않았다. 물리적인 리셋 스위치를 5.. [Java] byte[]을 String으로 바꾸기 같이보기: Kotlin 에 대한 내용은 [Kotlin] byte[]을 String으로 바꾸기 를 참고하세요. 주의: 실무에서 아래에 적혀있는 BigInteger를 이용해서 테스트를 진행하다가 특정한 상황일 때 제대로 변환을 못하는 경우를 발견하였다. 처음으로 시작하는 16진수 숫자가 7F 이하일 경우만 제대로 동작을 한다. 예를 들어 0xDD 일 경우는 앞에 0으로 채운다. "dd20e7d3a2f1e814993511540a404615" 일 경우 크기가 16이 아닌 17개인 앞이 0으로 채워진 값을 반환하는 문제가 발생했다. 그래서 javax.xml.bind.DatatypeConverter의 parseHexBinary 를 쓰기를 권장한다. 2020-02-05 see https://inneka.com/pro.. JDK8 업데이트를 하다(181 to 211), SHA / AES 오늘 배포가 있어서 도비님하고 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 {.. 이전 1 ··· 34 35 36 37 38 39 40 ··· 111 다음