본문 바로가기
  • Code Smell

Language/Java15

[Java] MS949(CP949)와 EUC-KR은 다르다 MS949(CP949)와 EUC-KR은 다르다 요새 대부분 UTF-8을 사용해서 MS949, EUC-KR 등을 잘 사용하지 않는다. (ASCII, ISO-8859-1 등) 하지만 레거시에서는 EUC-KR을 사용하는 경우가 꽤 있는데, 이번에 레거시에서 작업하면서 발생한 문제가 있었다. 레거시 DB는 인코딩을 us7ascii 을 사용하고 있었고, 웹은 EUC-KR로 뿌리고 있었고, 그 중간과정을 MS949로 인코딩해서 던져주었다가, EUC-KR로 변경했는데 표시못하는 한글이 발생하기 시작했다. 가만히 있는 MS949를 왜 EUC-KR로 바꾸었냐면.. 둘이 같은 줄 알았다. EUC-KR과 MS949이 같다고 표현하는 예전?블로그들이 꽤 많았고, 구글링 해가며 개발을 하다보니 그런 지식이 자연스럽게 정립되었는.. 2023. 9. 27.
[Java] OpenJDK 벤더 별 지원 현황 (2021-06) OpenJDK 벤더 별 지원 현황 OpenJDK 가 벤더사 별로 여러가지 배포판이 존재하는데 차이점이 궁금해서 정리했습니다. 어디 간략하게 표로 정리한 곳을 못찾고 있었는데, stackoverflow에서 찾을 수 있었습니다. java - Difference between OpenJDK and Adoptium/AdoptOpenJDK - Stack Overflow Difference between OpenJDK and Adoptium/AdoptOpenJDK Due to recent Oracle Java SE Support Roadmap policy update (end of $free release updates from Oracle after March 2019 in particular), I've bee.. 2021. 6. 25.
[JAVA] LocalDate, LocalTime, LocalDateTime 정리 LocalDate, LocalTime, LocalDateTime 정리 JodaTime이 Java의 기본으로 통합되며 생긴 날짜/시간 Object, Java8 부터 사용 가능하다. LocalDate : 년,월,일 정보 LocalTime : 시,분,(초),(나노초) 정보 LocalDateTime : 년,월,일,시,분,(초),(나노초) 정보 초와 나노초는 항상 생략 가능하다. 현재시간 구하기 LocalDateTime localDateTime = LocalDateTime.now(); LocalDate localDate = LocalDate.now(); LocalTime localTime = LocalTime.now(); 3종세트 toString LocalDate : yyyy-MM-dd LocalTime : HH.. 2020. 11. 13.
[JAVA] SSLHandshakeException 발생 시 대처 [JAVA] SSLHandshakeException 발생 시 대처 정말 짜증나는 에러다. 1. JDK의 SSL 인증서 넣기 public 망이 아닌 사내 망에서 외부 통신 시 필요 할 수 있다. 보통은 인트라 망이면 SSL 인증서 파일을 제공할텐데 그 인증서 파일을 JDK에 추가 할 수 있다. 설치 된 JDK 홈 아래 lib/security 에 있는 cacerts 라는 파일에 인증서를 추가한다. Windows 기본 설치 경로라면 C:\Program Files\Java 아래 구성되어 있을 것이고 (자세한 사항은 환경변수를 참조하면 된다.) Mac 기본 설치 경로라면 /Library/Java/JavaVirtualMachines 아래 있을 확률이 높다. 예를들어 Mac 기준이라면 /Library/Java/Jav.. 2020. 10. 7.
[Java] Enum 멤버 변수로 Enum 객체 찾기 Enum 멤버 변수로 Enum 객체 찾기 예를들어 결과 코드를 정의한 enum이 있다. public enum ExamEnums { SUCCESS("200", "성공"), WAITING("300", "대기 중"), FAIL("500", "실패"), ETC("999", "기타 에러"); @Getter private final String code; @Getter private final String description; ExamEnums(String code, String description) { this.code = code; this.description = description; } } 어느 REST에서 resultCode를 보내주고, 그 코드와 설명을 enum에 정의했을 때 위와 같이 작성 할 수.. 2020. 9. 29.
[JAVA] Java Collections 생성과 동시에 초기화 Java Collections 생성과 동시에 초기화 출처 JavaCodeExamples 대표 Collections (Map, List, Set) 을 선언과 동시에 초기화 하는 방법. 클래스 인스턴스 시 생성자에서 주입하지 않고 고정으로 들어가는 값을 세팅하거나 할때 필요한 경우가 있다. 기본방법 private Map map = new HashMap() { { put("key1", "value1"); put("key2", "value2"); } }; private List list = new ArrayList() { { add("1"); add("2"); } }; private Set set = new HashSet() { { add("1"); add("2"); } }; List와 Set은 Arrays 클.. 2020. 6. 19.
[JAVA] CompletableFuture - 예제2 CompletableFuture 예제1 공통으로 사용할 로직 public class AsyncTest { public static final Logger log = LoggerFactory.getLogger(AsyncTest.class); public CompletableFuture task; public static void sleep(long time) { try { Thread.sleep(time); } catch (InterruptedException e) { e.printStackTrace(); } } public static void log(String s) { log.info(s); } public static void main(String[] args) { AsyncTest asyncTes.. 2020. 5. 26.
[JAVA] CompletableFuture - 예제1 CompletableFuture 비동기 처리를 위해 JAVA 5에서 Concurrenty API의 Executor, Future, Callable이 등장 했지만 non-blocking 하지 않았다. 이걸 개선하려 Spring framework 4에서는 Future Interface를 개선한 ListenableFuture를 등장 시켰고, AsyncRestTemplate의 Return Type으로 이용 되었다. 이후 JAVA 8의 가장 큰 특징인 lambda와 functinal interface와 결합 된 CompletableFuture가 등장하면서 non-blocking 처리가 쉬워졌다. Spring의 ListenableFuture과 JAVA 8의 CompletableFuture 비교 아래 예제는 JAVA.. 2020. 5. 21.
[JAVA] Optional 총정리 및 예제 Optional 총정리 및 예제 Java의 Optional Class는 NullPointerException에 유연하게 대처 할 수 있도록 JDK 8부터 지원하기 시작했다. if-else 지옥에 빠지지 않도록 하며, 객체의 null check를 메소드 호출로써 대체할 수 있다. (썸네일용) 대충 이렇게 생겼다. 선언과 instance Optional의 원형은 Optional 형태로 제네릭 T를 감싸고 있다. 이 T의 자료형이 null check의 타겟이 된다. public static Optional of(T value) { return new Optional(value); } public static Optional ofNullable(T value) { return value == null ? emp.. 2020. 5. 16.